當面試官面試你時,提問談談你對面向對象編程的理解時該怎樣回答?
去面試時,面試官讓我談談對面向對象的理解,我感覺回答的不盡人意,難道不是該答面向對象的特點:抽象,封裝,繼承,多態嗎?
嘗試一下:
面向對象編程,即OOP,是一種編程範式,滿足面向對象編程的語言,一般會提供類、封裝、繼承等語法和概念來輔助我們進行面向對象編程。
類型被設計為將數據和行為捆綁在一起的一種東西,數據和行為被稱之為類型的成員。我們可以創建類型的實例,不同的實例包含不同的數據,從而其表現出來的行為也會不同,儘管其代碼是一樣的。
封裝使得類的成員得以有選擇性的暴露,一些成員只在類型的內部使用,被稱之為私有的(private),一些成員可以被派生類型使用,稱之為受保護的(protected),一些成員可以被任何東西使用,稱之為公開的(public)。而某些語言還提供了內部的(internal)這樣的訪問修飾符來標識一些只能被同一個程序集或者包使用的成員。
繼承可以從一個現有類型派生出新的類型來,派生類繼承了基類的所有成員,也可以新增只屬於自己的成員。在任何情況下,派生類類型的實例可以被當做基類類型的實例來使用。
虛方法為派生類修改基類的行為提供了一個途徑,通過重寫(override)虛方法可以修改基類某些方法的行為。當派生類實例被當做基類實例來使用時,這一行為的區別將會被體現出來,這種在運行時不同類型的實例在同樣的代碼中呈現出完全不同行為的現象被稱之為多態。
面向對象編程最初是為了解決GUI程序設計問題所提出的,後來面向對象編程被發現也比較適合用於許多特定領域的開發。面向對象編程是目前運用最為廣泛的一種編程範式,從而也產生了非常多的解決代碼復用的技巧,其中相當一部分技巧在程序中反覆出現而被提煉為設計模式。
如果到這裡面試官還沒有喊停的話,你就可以繼續裝逼背誦各種設計模式了,,,,
要我回答,我只能說,這是一種抽象方式。沒了,你得繼續問些更具體的問題。
面向「對象」編程,會編不下去的。。
正經點:
他問你面向對象編程,面試官想知道的是你的理解。
不是概念!
不是概念!
不是概念!
你那樣回答沒有錯,但是不是面試官想要的,概念,特徵都會講,看你怎麼描述了:
網上講的詳細的很多,我講個我當時面試的回答,一個瞎扯淡的例子:(等我起床用電腦,手機打字太慢了)
「假設我是女媧,我準備捏一些人,
首先,人應該有哪些基本特徵:
1.有四肢 2.有大腦 3.有器官 4.有思想 我們就有了第一個模型,這就是抽象。
其次,我和西方上帝是好友,我想我的這個想法能夠提供給他用,但是我不想讓他知道裡面細節是怎麼捏出來的,用的什麼材料,他也不用考慮那麼多,只要告訴我他要捏什麼樣的人就可以了。這就是封裝。
然後,我之後創造的人都以剛才的模型做為模板,我創造的人都有我模型的特徵 這就是繼承。
最後,我覺得為了讓人更豐富多彩,暗合陰陽之原理,可以根據模型進行刪減,某些人上半身器官多突起那麼一丟丟,下面少那麼一丟丟。某些人,下半身多突起那麼一丟丟。這就是多態。
嘿嘿,當然為了,更豐富多彩,那麼一丟丟大小也是可以有區別的。。。」 此時,面試官要是男的你可以露出你懂得的表情!
程序員面試都很枯燥,你可以適當弄點笑點,是加分項。我默默地掏出我的鑰匙
然後說每次編程的時候把它放在顯示器前,這就是在面向對象編程。
那時的我極其不能理解,作為一個剛踏入大學新生,學校怎麼這麼肯定我們有對象,自信滿滿地給每個計算機系的學生開面向對象編程這門課。
四年學習下來之後,我才漸漸明白,這是程序員精神的灌輸:即使沒有一個讓我解放雙手的對象,我也始終如一,保有一顆面向對象編程的心。
況且就算沒有,我尚可自己創建呢
Lover myLover = new Lover("linzhiling", 25, "174cm" , "52kg", 34c, 24, 36 );
Lover myLover = new Lover("liuyifei", 25, "170cm", "53kg", ..., ..., ...);
Lover myLover = new Lover("boduoyejieyi", 25, 「163cm」, ..., ..., ... ,...);
…………接著測試一下對象們聽不聽話………… public void myLoverSaySth()
{
System.out.println(" husband f*ck me ");
}
﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉﹉
還嫌不夠的話,索性一次性來一打吧: Lover [] myLovers = new Lover[ N ];
什麼?!你居然用完就想跟人家分手??! 那麼這個一定符合你要求:
ArrayList (Lover) myloverList =
new ArrayList (Lover)(); (不知道為何打不出尖括弧)
哦買嘎!暴殄天物,不要送我啊!!嗚嗚嗚
看著面前這幾行代碼,沒止住又來了一發。
通過封裝 繼承 多態 組合等手段把N 變為1的方法,,,
侵刪
封裝:主要是暴露介面,你不用關心內部實現。
繼承:主要是讓你不用重複造輪子了。
多態:讓代碼可讀性更強,讓編譯器做更多的事。
面試官是問你有沒有女朋友,以及如何處理女朋友與編程之間的矛盾,顯然你沒有領會面試官的意思,嗯,一定是這樣
沒有對象的單身狗只能放棄了。
OOP是未來人類編程行為的一小步,卻是抽象實踐的一大步,它為我們用代碼構築世界做出了非常大的生產力改善,它的本質是抽象,方法是多態。
(故意停一下) 但我們遠還沒滿足。
這個問題很簡單嘛,直接回答如下: 面向對象隱藏了面向過程具體實現的細節,把屬性和行為封裝成一個抽象模型,即對象,以便用專業的方法做專業的事情。就好比,面向過程是部門員工,他們具體怎麼完成工作內容我不關心了,我只關心是誰來做這些事,誰叫我是部門經理呢?——這就是面向對象。
「人」是類。
「人」有姓名、出生日期、身份證號等屬性。
「人」有約會、么么噠、啪啪啪等功能(方法)。
「男人」、「女人」是「人」的子類。繼承「人」的屬性和功能。但也有自己特有的屬性和功能。
你、我是對象。
我會說,小朋友你該練練項目了
00年的時候就在流行OO了,怎麼現在還有人問這個?
封裝:把屬性值、紅藍條、攻擊、走位、放技能、清兵、遊走等行為都塞在一個英雄里。
繼承:攻擊+10 的裝備可以升級到攻擊+20,以後還可能升級到攻擊+30 並帶有吸血效果。不管升級成什麼,都攜帶著攻擊+10 這部分屬性。多態:一個團隊需要一個輔助,我們只需要一個輔助英雄,並不關心來的是哪個輔助英雄,能加血就行。
具備這三種特性的編程思想,叫做面向對象。
是一種編程的思想,主要是為了解決代碼復用的問題。
我專門為了談談面向對象做了一期播客,不妨聽聽,我是這樣說的:http://music.163.com/m/program?id=909509920userid=116702531from=singlemessageisappinstalled=0
裝逼的說句:Talk is cheap, let me show you the code.
封裝繼承多態...
拆分問題,復用解決方案...
推薦閱讀:
※兩個人一起去找工作,面試官問你有哪些地方比你的同伴好,怎樣回答比較合適?
※去別的公司面試,被現在公司領導知道了,現在還是要留在本公司,如何跟領導解釋?
※互聯網求職路上,你見過哪些寫得很好、很用心的面經?最好能分享自己的面經、心路歷程。
※五分鐘左右的英文自我介紹都要說些什麼?
※在面試中,有哪些令人驚訝的面試官的反應?