發現很多面試官都喜歡問這個問題(我是學生),然而每次覺得自己在這個問題上都答得不盡人意。
我的回答往往是
它的設計上的特點是:繼承、封裝、多態;
從具象到抽象。屬性變成變數,行為變成方法;
然而面試官似乎不是很滿意,不知各路大神有沒有相對優雅的回答?
回複內容:
發現很多面試官都喜歡問這個問題(我是學生),然而每次覺得自己在這個問題上都答得不盡人意。
我的回答往往是
它的設計上的特點是:繼承、封裝、多態;
從具象到抽象。屬性變成變數,行為變成方法;
然而面試官似乎不是很滿意,不知各路大神有沒有相對優雅的回答?
先回答是一種編程範式。
然後把你說的三個特性的具體描述說一下,比如:
然後你可以說一說物件導向的優點和缺點,那麼一件事情是沒有絕對的優點和缺點的,需要一個對比。故此,你得說一說面向過程的編程思想。
回來丟文章了
看了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++ 的「對象」就特別像一個東西,比如說一個人。它的世界是充滿物體的世界。主要都是物體和物體(人和物體、人和人等等)之間發生關係,這些關係或者說碰撞導致了最後的結果……這個世界裡最主要的東西就是各種物體。
物體本身是攜帶資料、攜帶功能的;物體之間發生關係,才有了世界的運行。這兩點,物件導向的程式設計和現實世界更為相像。
而上述「繼承、封裝、多態」等特點,便也可由此來類比現實世界更好地理解了。我隨便舉點例子……
繼承:書 & 教材 & 電腦類教材 —— 這就是現實世界的繼承關係。
封裝:手機 —— 它是封裝好的,當你使用它時,不必知道裡面的電路邏輯。
多態:人.看(美女) & 人.看(強光) —— 參數類型不一樣,執行的也不一樣。
那物件導向的好處也很容易理解。一個是提高可理解性,因為對象按人類認識世界的規律呈現,符合常用思維方式;第二個就是更易於開發和維護,系統的最佳化很大程度上就等於對對象資料和功能的重新認識,在原有基礎上修改一些東西。
哪裡說的不對懇請各位批評指正……!
不排除有些面試官本身就很水,這他媽是一個大的無比的話題,坐一起談幾天都談不完
少逛知乎,多寫代碼
萬物皆對象。