開腦洞學程式設計之物件導向

2021-07-08 21:52:41 字數 2900 閱讀 8424

本專欄序章與目錄

物件導向的程式設計是軟體工程中乙個非常重要的組成部分,其三大特性——繼承、封裝、多型對初學者來說可能有一些難以理解。這裡舉乙個比較簡單的現實生活中的例子(學習)來進行說明。

這裡提到的學習是乙個抽象的概念,不管是學習某一門課程,還是學習做飯,還是學習把妹,具體細節可能不同,但巨集觀上的步驟基本類似。

大多數情況下我們要學習乙個東西的基本步驟如下:

**如下:

abstract class learnsth 

abstract

public

void

decidetolearn();

abstract

public

void

watchotherpeople();

abstract

public

void

trybymyself();

abstract

public

void

selfcorrection();

abstract

public

void

complete();

}

如果有了上述的大體步驟,以後不管學什麼東西,都能做到心裡有數了。比如,某一天,我們決定要學做飯,我們就可以這樣寫。

public

class

learncooking

extends

learnsth

public

void

decidetolearn()

public

void

watchotherpeople()

public

void

trybymyself()

public

void

selfcorrection()

public

void

complete()

}

這就是繼承。

假如我們不希望別人了解我們學習過程(畢竟學習的過程有試錯),只希望別人看到我們學成的樣子呢?我們可以把過程封裝起來,暴露我們想要展示的介面。如下**中,我們把學習過程

decidetolearn();

watchotherpeople();

trybymyself();

selfcorrection();

complete();

全部宣告為private,那麼旁人就看不到我們學習的具體過程了,只能根據最後學成的結果給我們點讚。

abstract class learnsth 

abstract

private

void

decidetolearn();

abstract

private

void

watchotherpeople();

abstract

private

void

trybymyself();

abstract

private

void

selfcorrection();

abstract

private

void

complete();

}

public

class

learncooking

extends

learnsth

private

void

decidetolearn()

private

void

watchotherpeople()

private

void

trybymyself()

private

void

selfcorrection()

private

void

complete()

}

封裝的好處在我看來就是隱藏了類和物件的某些具體實現細節,這樣我們在使用這些類和物件的時候,就不需要關注這些細節,只需要考慮怎麼利用這些類的介面就可以了。這是乙個黑盒子的概念,就像我們在使用電腦的時候,不需要知道cpu、磁碟、記憶體相關的東西,可是我們仍然能用電腦解決問題。

俗話說得好:「活到老學到老」 這裡的「學」並沒有特指學什麼,學做飯和學把妹也屬於學習的一種,於是我們可以這樣寫:

human me = new human();

while (me.alive)

在human類的宣告中,learn接受的引數為learnsth,如果有一些子類,例如learncook,learnpickup,learncoding,那麼都可以被learn方法接受,而接受這些引數以後,learn函式會根據引數的具體型別進行相應的操作。

上述過程就是乙個多型的過程。

多型性是允許你將父物件設定成為和乙個或更多的他的子物件相等的技術,賦值之後,父物件就可以根據當前賦值給它的子物件的特性以不同的方式運作(摘自「delphi4 程式設計技術內幕」)

多型的引入大大增加了程式的可擴充套件性。對多型優點準確專業的表述請自行google、baidu,這裡只用「活到老學到老」這件事來形象的說明一下——對於乙個人來說,只要明確「活到老學到老」的大體想法就好了,具體到人生的哪一階段學什麼,就要看具體的實際情況了。因此,在編譯階段,不需要明確到底要學什麼,具體要學什麼可以在執行時刻決定。

我大學前幾年學東西比較雜,比較亂,在大三結束的暑假才初步接觸物件導向相關的東西,距今也就幾個月的時間。初步了解以後,我發現現實生活中很多事物,從物件導向的角度去看挺有意思的。

沒事的時候開開腦洞,還是乙個鍛鍊思維的不錯方法啊。

Go之物件導向程式設計之繼承

golang的繼承與j a和php不太一樣,如php繼承需要用到extends關鍵字,而golang使用的是匿名繼承或有名繼承。二 簡單舉例 package main import fmt type brand struct type goods struct func main 結果 go run...

python之物件導向程式設計

物件導向的程式設計的核心是物件 上帝式思維 要理解物件為何物,必須把自己當成上帝,上帝眼裡世間存在的萬物皆為物件,不存在的也可以創造出來。物件是特徵和技能的結合,其中特徵和技能分別對應物件的資料屬性和方法屬性。優點是 解決了程式的擴充套件性。對某乙個物件單獨修改,會立刻反映到整個體系中,如對遊戲中乙...

Python之物件導向程式設計

類和物件 類是抽象的模板,比如我們抽象乙個學生類,很容易想到學生固有的一些屬性,比如名字,年齡等等,建立乙個學生類 class student object pass 複製 這裡的object是表明student類是從哪個類繼承來的,在python中object是所有類的父類 繼承的概念下文會提及 ...