javascript - 如何優雅的回答“什麼是物件導向”?

來源:互聯網
上載者:User
發現很多面試官都喜歡問這個問題(我是學生),然而每次覺得自己在這個問題上都答得不盡人意。
我的回答往往是

  • 它的設計上的特點是:繼承、封裝、多態;

  • 從具象到抽象。屬性變成變數,行為變成方法;

然而面試官似乎不是很滿意,不知各路大神有沒有相對優雅的回答?

回複內容:

發現很多面試官都喜歡問這個問題(我是學生),然而每次覺得自己在這個問題上都答得不盡人意。
我的回答往往是

  • 它的設計上的特點是:繼承、封裝、多態;

  • 從具象到抽象。屬性變成變數,行為變成方法;

然而面試官似乎不是很滿意,不知各路大神有沒有相對優雅的回答?

先回答是一種編程範式

然後把你說的三個特性的具體描述說一下,比如:

  • 繼承:可以使子類複用父類公開的變數、方法;

  • 封裝:屏蔽一系列的細節。使外部調用時只要知道這個方法的存在;

  • 多態:父類的方法繼承的到子類以後可以有不同的實現方式;

然後你可以說一說物件導向的優點和缺點,那麼一件事情是沒有絕對的優點和缺點的,需要一個對比。故此,你得說一說面向過程的編程思想

回來丟文章了

看了lz的問題被踩了,我在社區裡看了一下,的確有相關的答案。我的文章算是一個小補充,如果有問題望各位指出。

物件導向的思想

再用我工作中的執行個體回答補充下,前段時間要做一個很簡單的功能,點贊,確實是一個很簡單的功能,但點贊的功能不只是一次,使用者可以給其他的評論點贊,可以給文章點贊,可以給問題點贊等等,而且點贊之後可能觸發一系列的事件(通知相關使用者等),最初我想的有三種寫法

// 1.文章被使用者點贊$article->votedBy($user);// 2.使用者給某篇文章點贊$user->voteArticle($article);// 3.使用者伸出大拇指給某篇文章點贊$user->thumbUp()->voteToArticle($article);//$user->thumbUp()->voteToDiscuss($discuss);

最後我用了第三個寫法,具體怎麼實現,在你伸出大拇指的那一刻你就知道了。

這真的是個有趣的問題,哈哈。當然每個人都會有不同的理解,畢竟物件導向這個概念也是炒作起來的。

我的理解包括兩個方面:

  • 一個是物件導向設計;

  • 一個是物件導向編程。

物件導向設計的核心思想是模組化,而物件導向編程的核心思想是面向介面,物件導向編程還有一個親戚叫基於對象編程或者叫原型編程(JavaScript就是)。所以說物件導向編程一般是需要語言層級支援的,就像你上面說的封裝、繼承和多態什麼的。

物件導向概念比較火的時候,人們常說軟體複用,繼承是軟體複用的直接體現。但是後來人們發現,應該更多的使用組合而不是繼承,接著面向介面編程就火了。

扯得有點遠了,到此打住吧。

萬物皆對象。

object-oriented

everything is object

一定用例子來
比如 動物-》furu動物-》 人, 獅子, 老虎

加上多態,比如都會叫

繼承,比如furu動物都是胎生的,等等

實現項目時,需要將業務抽象成代碼,這個抽象過程就是編程範式,物件導向就是其中一種。類似的還有面向過程,函數式編程。

物件導向的特點是繼承, 多態, 封裝

然後面試官就可以開始問繼承, 多態, 封裝了。

完美!~~~

最好知道下什麼是面向過程,函數式編程,那就更好了。

self-contained, 如果他不懂, 你就可以直接走人了, 這個面試官太菜!

js說:萬物皆對象,對象也是對象--沒毛病

嗯 一切皆對象

記得在zhihu看過一個回答 他的理解是 (從實踐上來講)最重要的就是代碼的複用。

封裝:可以直接用封裝好的代碼塊,這是複用。

繼承:使用已有的屬性,這是複用。

多態:不同的細節,但是基礎上依然首先需要複用。

不討論高深的程式設計、範式等理論性強的東西,對於寫代碼本身最直接的優勢和體驗就是,複用的多了,代碼變得簡潔。

面向你的對象(俗稱男/女朋友),擺出一個優雅的姿勢,然後深情地告訴他/她,看著我……這就是優雅地物件導向

打包資料和相關聯的行為

有趣的問題。我也是學生,談一些自己的理解。

物件導向有個很大的特點是,它同時把資料和行為(對資料的操作)結合起來,和現實世界的運行邏輯更相似
為什麼這麼覺得,是和傳統的(面向過程等等)比較而得出來的。

打個比方, C 語言對資料和行為的處理其實有點割裂,更加重視了行為。它裡面沒有叫「對象」的概念,而是個充滿動作(函數)的世界。主要都是函數調用函數,從頭執行到尾給出結果……這個世界裡最主要的東西就是各種動作。

而 C++ 的「對象」就特別像一個東西,比如說一個人。它的世界是充滿物體的世界。主要都是物體和物體(人和物體、人和人等等)之間發生關係,這些關係或者說碰撞導致了最後的結果……這個世界裡最主要的東西就是各種物體。

物體本身是攜帶資料、攜帶功能的;物體之間發生關係,才有了世界的運行。這兩點,物件導向的程式設計和現實世界更為相像。

而上述「繼承、封裝、多態」等特點,便也可由此來類比現實世界更好地理解了。我隨便舉點例子……

  • 繼承:書 & 教材 & 電腦類教材 —— 這就是現實世界的繼承關係。

  • 封裝:手機 —— 它是封裝好的,當你使用它時,不必知道裡面的電路邏輯。

  • 多態:人.看(美女) & 人.看(強光) —— 參數類型不一樣,執行的也不一樣。

那物件導向的好處也很容易理解。一個是提高可理解性,因為對象按人類認識世界的規律呈現,符合常用思維方式;第二個就是更易於開發和維護,系統的最佳化很大程度上就等於對對象資料和功能的重新認識,在原有基礎上修改一些東西。

哪裡說的不對懇請各位批評指正……!

不排除有些面試官本身就很水,這他媽是一個大的無比的話題,坐一起談幾天都談不完

少逛知乎,多寫代碼

萬物皆對象。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.