初學物件導向程式設計繞不過去的乙個坎 類是什麼?

2021-10-02 10:37:37 字數 3102 閱讀 2321

當初剛見到物件導向程式設計中「類」的時候,其實我是拒絕的。

「我在學程式設計,你卻在給我講哲學?」

什麼「類是對現實生活中一類具有共同特徵的事物的抽象」。。。我只是乙個誕生即單身的魔法師,不是也不想當哲學家,聽不懂這些的。。。

「emmmm......魔法師是吧,你能實現我的乙個願望嗎」

我緩緩打出乙個?

「我需要乙個臉盆,能裝下我家美人魚的那種。。。」

「你家的美人魚,她大嗎?」

「是的,又好像不是。」

「這是你造臉盆所用魔法可能需要的一些資訊:」

//長度單位:m

//質量單位:kg

臉盆 容器的一種

「你管這叫臉盆?怕不是要拿來酸洗鱷魚臉。。。」

「你都能聽到我說話了,還有什麼是值得驚詫的?趁你還有理智值,趕快動起來!」

「怎麼動?」

「魔法師連new也不會嗎?到時候女朋友都搞不出來!我給你的這些資訊,便是臉盆的特徵,或者叫『屬性』,有了這些資訊,你的腦子就可以通過呼叫你的記憶,想象出這個臉盆的模型來。」

「心理學家發現,人類的大腦,會將一些具有相同特徵的不同的物體歸納為"某一"物體。」

「這就是所謂的抽象——提取出超市中」臉盆「貨架上的所有玩意(即具有相同特徵的不同物體)的相同特徵,構成(歸納為,或者叫『抽象為』)乙個標準的,平均的)模型(或者說,概念),將所有與這一『標準』模型足夠相似的玩意,以及以後可能遇到的類似的玩意,都取乙個名字:臉盆。」

「例如,乙個小朋友可能會試圖把ta遇到的所有的『帶毛皮的四足動物』都歸類為『狗』,直到ta在電視機上看見乙隻『不太一樣的,很特別的那種帶毛皮的四足動物』被叫做熊」

」不同的概念之間的聯絡是有層次與結構的,比如下面這張來自心理學教材的圖:」

(有興趣的可以百科上查一下「圖式」這一詞條)

例如」動物「,「魚」和「鳥」這些概念寫成咒語就是:

//乙個功能後面接乙個"=0",例如"呼吸()=0;"

//表示不同的動物之間(例如 人 與 魚 之間)呼吸的具體機理(它們能呼吸的原因)不一樣

//需要具體情況具體分析

動物 生物的一種

; 功能:吃(需要:能吃的東西)=0;

功能:呼吸(需要:氧氣)=0;

}鳥 動物的一種

; 功能:吃(需要:能吃的東西)

;功能:呼吸(需要:氧氣)//這個功能需要乙個新的核心進行並行處理

};}魚 動物的一種

; 功能:吃(需要:能吃的)

;功能:呼吸(需要:氧氣)//這個功能需要乙個新的核心進行並行處理};}

畫一下妝,變成c++**:

//           ↓    這個標誌表示類的繼承

// ↓ 將動物,植物,原核生物(在這裡以「動物」為例)等都歸類為「生物」旗下

// ↓ 表明植物,動物,原核生物都是生物的一種,

// ↓ 擁有了(或者說是「繼承了」)生物的一切特徵

// ↓ 「繼承」在程式中可以用來減少**複雜度

// ↓ 就像可以對代數式提取公因式以減少代數式長度一樣

// ↓

class animal : creature

; virtual void eat(eatable foods)=0;

virtual void respire(oxygen o2)=0;

// ↑

// 這個類是抽象類,因為這兩個函式都是純虛函式(看到箭頭指的那兩個"=0"了嗎?)

// 即所有的動物都有其更具體的名稱(比如雞?,蟲?,蛇?,馬?……)

////抽象類乙個重要的特徵是不能例項化

//因為你看不到乙個種名(「界門綱目科屬種」的種)就叫「動物」,而沒有乙個更具體的名稱的生物

//

//再舉乙個例子:

//

// 「我要乙個水果。」

// 「不,這是蘋果,我不要蘋果,我要水果」

// 「不,這是香蕉,我不要香蕉,我要水果」

// 「不,這是柚子,我不要柚子,我要水果」

// 「不,這是西瓜,我不要西瓜,我要水果」

// 「不,這是……」

//

//很明顯,這位顧客是不會找到自己想要的所謂「水果」的,因為「水果」是乙個抽象類

////抽象類的某些功能(比如「動物」的「吃(需要:食物)」)

//在不同的具體物種之間的實現是不同的(翻譯**話,就是不同動物的進食方式不同)

//需要像在剛才「咒語」的注釋種提到的那樣,需要具體情況具體分析

//在程式中也有可能需要這種「具體情況具體分析」,這在程式中叫做「多型」

}class bird : animal

; virtual void eat(eatable food)

;virtual void respire(oxygen o2)/*這個功能需要乙個新的核心進行並行處理*/

};}class fish:animal

; virtual void eat(eatable food)

;virtual void respire(oxygen o2)/*這個功能需要乙個新的核心進行並行處理*/};}

「但是這個由邏輯門通斷構成的臉盆需要通電,一斷電就消失了」

「物件導向程式設計(object oriented programming,oop)中的object其實翻譯成『客體』更合適,你可以去查一下『客體』這個詞條」

「我還是搞不太懂。。。您還是另請高明吧,我也實在不是謙虛。」

「**不懂呢?」

「你的美人魚是從**來的?給我也整乙個。。。」

它緩緩打出了乙個?

「還有,您是哪位啊?」

「我是你的馬甲啊,要不然你怎麼水出這些?」

前端開發工程師面試 那些繞不過去的面試題(一)

任何技術崗位面試的時候都要經過人力面試和技術崗位面試至少兩次。人力面試一般也就是考察一下個人品質以及薪資問題,而技術崗位則是考察你是否有真才實學。本文和大家分享乙個難到了很多前端工程師的面試題 quirks模式是什麼?它和 standards 模式有什麼區別?下面就是針對這個問題的講解。從 ie6 ...

乙個初學者的辛酸路程 物件導向 7

輪物件的重要性 物件導向程式設計 oop程式設計,模板和實際的物件來建立各種模型 class類 就是模板 先寫乙個模板的原因是,後面會建立多個人,只是想傳幾個引數來建立多個人。這樣大多數功能就不需要重寫了。類,就是對類擁有相同屬性的物件的抽象,藍圖,原型。每個物件可以有不同的屬性。手把手教你寫乙個簡...

乙個關於汽車的例子(C 物件導向程式設計)

類 public class car public int油箱容積 public int油表 set public int公里數 set public car public car int 當前油表 public car int 當前油表,int 當前里程 private int 計算耗油 int ...