就是問,在面向對象思想裏,先有對象仍是先有類,乍一看和先有雞蛋仍是先有雞是一類問題,其實否則!這個問題,在lz考研複試的時候被面試官問過,如出一轍,現在又在一個筆試題裏看到了相似的題目,眨一下,有人會說,沒有類,哪裏來對象呢?其實否則,這個問題很經典,考的就是oo思想和軟件工程的意識。c++
我經歷以後的收穫:面對問題,首先分析提問的角度,看清問題程序員
這樣問,顯然對方是在考察被考者,oo思想掌握程度和軟件工程的意識,都說在OO中,換句話就是在面向對象思想裏(包含各行各業)……天然不須要在亂想什麼內存角度,計算機角度,底層機制,甚至彙編都來,沒意義……這樣想的思路自己就錯的!面試
提問者考的不是這個,並且不是每個面試官或者老師提問都要一字一字的說明白,當時時間有限,思考時間也有限,必須快速做答,給出結論。他們沒這個義務和必要,選拔性質嘛!就好比孫悟空能理解菩提老祖,打三下,扭頭看月亮的含義,別人理解不了,還覺得孫悟空那樣想是傻x呢……算法
故咱們須要必定的分析提問和找準角度的技能!既然是去求職,或者被考察,天然要學會如何搔到對方的癢處,lz記得,當初這個問題,本科科班出身的,沒回答對的,幾乎都被刷了……本科階段去面試過的那家公司,一樣的問題,回答者就和評論同樣,千奇百怪,振振有詞者很多。可是少有說到點子上的,或者說少有騷到了面試官癢處的人。包括lz,當初回答的理由也不讓人滿意。編程
問題自己來看:這個問題自己不難數據結構
屬於知道就是知道,不知道就是不知道。屬於看清問題,具備oo思想和軟件工程意識就能答對,看不清問題就亂說一氣的問題類型。架構
評論說:模塊化
這個問題很無聊,or lz遇到的問這個問題的人是傻x ,or 這是沒有解的題,非要標準答案,屬於強加觀點給別人,or lz是sb……唉,看了看刪除了一些出口就是髒字的非人類評論。函數
我我的認爲,不能有問題上來就想到code,若是不是逆向和硬件,那麼對於應用程序開發者,一上來就思考計算機的底層,並非好事。故有人擡槓,一直說沒有類,怎麼new對象的反問來反駁……oop
lz在那以前,沒有思考提問問題角度 or 回答思路的習慣。題目看不懂,老是抱怨對方爲何不說明白了,問題角度不一樣,答案不一樣,老是束手無策,不知回答哪一個。
後來見到了實驗室的老闆,包括一些公司的部門老大,真的,當你周圍存在一些競爭對手,且水平有的比你還高的時候,回答人家的問題,必需要思考對方提問的角度和回答的思路,不然死的很慘。不論什麼樣的問題,當lz躊躇,猶豫,罵提問者腦殘,傻x的時候,總有人比你快,先你一步,得出對方滿意的答案,不服不行,這就是能力!lz吃過虧。
確實是由於問題角度不一樣,因此答案不一樣。好比一個很無聊可是能說明問題的例子,若是是面試小學數學老師,問你1+1=多少,天然是2,面試哲學老師,答案就不必定是2,面試文藝類的老師職位,答案更可能千奇百怪。
可是咱們這個問題的環境來看,角度很明確。環境是求職面試,或者研究生複試,前提是各行各業均可能有的面向對象思想,故你沒得理由上來就辱罵對方是傻x,你必須給出個所在領域的合適的結果。對方就是在問,思想境界裏,先有對象仍是先有類……如此而已,不用扯什麼彙編和其餘OO語言的程序設計。好比,lz就知道在綜合面向過程和麪向對象的c++語言裏,類是不被分配內存的,編譯器把類當作一種新的數據類型來理解,只有生成對象的時候,對象是被分配內存的。比如,int類型不會被分配內存空間。可是在其餘OO語言裏,不必定是這樣的。
想綜合本身的見解分析下,我也不是技術大牛,我只是結合個人經歷和認知在分析。還有,除了上述的幾類,若有不一樣意見,歡迎文明評論!
軟件開發的過程
先通過需求分析,而後概要設計,詳細設計,以後纔是編碼,測試等,那麼開始的分析和設計階段,面向對象思想的程序,必然是先設計類,類的設計來源於對象的抽象。
類的定義
類的定義:類(Class)其實是對某種類型的對象定義變量和方法的原型。是具備相同屬性和操做的一組對象的集合!它表示對現實生活中一類具備共同特徵的事物的抽象,是面向對象編程的基礎。看到這裏,已經無需多言,標準答案,是先有對象,再有類。
面向過程簡單說明
從功能角度出發去分析問題,把問題解決方案分解爲步驟或者說是模塊!這類結構化的思惟特色是自頂向下去設計程序,儘可能的結構化組織架構,把各個模塊的各部分元素實現低耦合,高內聚(相對來講),編寫程序主要使用結構化的語法——順序,分支,循環。通俗的說:程序= 數據結構 + 算法。把各個模塊或者步驟分開設計,編碼,測試,最後再統一爲一個有機總體!故面向過程語言也叫命令型語音。使用函數分解法,把函數分解的儘可能小,足夠簡單,一種相似迭代的設計。實現高度模塊化!
好處:一目瞭然,有條理
缺點:不利於維護,由於軟件開發最難的地方在於後期維護(包括營銷推廣、bug修正,和軟件的升級等),由於面向過程把數據和方法分離!致使了數據管理混亂,理解困難,重用性差,容易產生串聯改變!
面向對象簡單說明
oop,ood,是一種接近或者類似於咱們人的思考方式的一種程序設計方法,OO,重點就是類的設計!好比造汽車,不須要第一關心去設計一步步的製造步驟,而是先去設計類,假如車門類,發動機類,外形類,輪胎類,動力類,顏色類,容量類,排量類等,不須要第一就去關心各個組織模塊的功能如何實現,而是先去關心各個類的設計,把數據和方法封裝不分離!獨立爲一個總體,讓類的實體——對象,經過給各個獨立的這些類發送消息,驅動他們有機的運轉!
在OO裏,程序=對象+消息,且至少要有三大特色(遞進關係):封裝,繼承(多態的基礎),多態。
再次強調,OO中,先有對象後有類。
總結:
相似「OO中,or OO思想,先有對象仍是先又類」,不存在什麼爭議,考察的就是OO思想和軟件工程的意識,由於它流行,不少軟件在使用。若是有企業面試,問這個問題,結果不是這個,那麼你能夠扭頭就走。
dashuai的博客是終身學習踐行者,大廠程序員,且專一於工做經驗、學習筆記的分享和平常吐槽,包括但不限於互聯網行業,附帶分享一些PDF電子書,資料,幫忙內推,歡迎拍磚!