OO中,先有物件還是先有類?

2022-09-15 07:27:11 字數 2745 閱讀 6412

就是問,在物件導向思想裡,先有物件還是先有類,乍一看和先有雞蛋還是先有雞是一類問題,其實不然!這個問題,在lz考研複試的時候被面試官問過,一模一樣,如今又在乙個筆試題裡看到了類似的題目,眨一下,有人會說,沒有類,**來物件呢?其實不然,這個問題很經典,考的就是oo思想和軟體工程的意識。

我經歷之後的收穫:面對問題,首先分析提問的角度,看清問題

這樣問,顯然對方是在考察被考者,oo思想掌握程度和軟體工程的意識,都說在oo中,換句話就是在物件導向思想裡(包含各行各業)……自然不需要在亂想什麼記憶體角度,計算機角度,底層機制,甚至彙編都來,沒意義……這樣想的思路本身就錯的!

提問者考的不是這個,

而且不是每乙個面試官或者老師提問都要一字一字的說明白,當時時間有限,思考時間也有限,必須快速作答,給出結論。他們沒這個義務和必要,選拔性質嘛!就比如孫悟空能理解菩提老祖,打三下,扭頭看月亮的含義,別人理解不了,還以為孫悟空那樣想是傻x呢……

,當初回答的理由也不讓人滿意。

問題本身來看:這個問題本身不難

屬於知道就是知道,不知道就是不知道。屬於看清問題,具有oo思想和軟體工程意識就能答對,看不清問題就亂說一氣的問題型別。

我個人認為,不能有問題上來就想到code,如果不是逆向和硬體,那麼對於應用程式開發者,一上來就思考計算機的底層,並不是好事。故有人抬槓,一直說沒有類,怎麼new物件的反問來反駁……

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電子書,資料,幫忙內推,歡迎拍磚!

先有雞還是先有蛋

有人認為 先有蛋,後有雞 雞是一種鳥類,凡是鳥類都是下蛋來繁殖後代 卵生。比鳥類低等的蛇 龜等爬行動物,圭蛙 蟾蜍等兩棲動物和形形色色的魚類都是卵生的。從生物的進化過程來看鳥類是由爬行動物進化而來的,在雞以前早已出現了比鳥類更低等的卵生物物,因此 先有蛋後有雞 雞的祖先,是一種生活在密林裡的野雞,叫...

先有雞還是先有雞蛋

我認為是先有雞。你肯定會說那這雞是哪來的?我不會說是雞蛋。說了就成了先有雞蛋了,而你又問這雞蛋是哪來的,這樣就無始無終了。我不說是雞蛋,那我怎麼回答?回答了,那就是我的理由了。且看 很久很久以前,那時候沒有雞,也沒有雞蛋。但有雞的祖先,但它不叫雞,我們假設叫它雞祖吧。雞祖們也是靠生雞祖蛋來繁衍後代的...

先有 Mac 還是先有銀元?

今天我要鄭重的回答一下這個問題 是真的。你信嗎?你應該相信。因為我談的根本不是 mac 和金錢的問題,而是程式設計師合理投資自己的問題。大部分程式設計師在這方面的表現絕對是 猿國不讓鬚眉 咱們會 用大量的時間尋找各種盜版軟體的註冊碼和序號產生器,而不是去購買幾十塊錢的正版軟體。用大量的時間搜尋各種粗...