面向對象,詳說(封裝,繼承,多態)

面向對象編程思想的發展歷程

面向對象程序設計技術被認為是程序設計方法學的一場實質性的革命,是程序設計方法學得一個里程碑,以上說法是毋庸置疑的。為了能夠更好的理解和應用面向對象的方法進行程序的開發和設計,我們有必要首先來了解一下面向對象程序設計的歷史和發展。

70年代末期,隨著計算機科學的發展和應用領域不斷擴大,對計算機技術的要求越來越高。結構化程序設計語言和結構化分析與設計已經無法滿足用戶需求的變化,于是人們開始尋找更先進的軟件開發方法和技術,OPP由此應運而生。OPP即面向對象的程序設計,OPP技術被認為是程序設計方法學的一場實質性的革命,是程序設計方法學的一個里程碑。OPP大大替考了軟件的開發效率,減少了軟件開發的復雜性,提高了軟件系統的可維護性、可擴展性。

實際上,“對象”和“對象的屬性”這樣的概念可以追溯到20世紀50年代初,它們首先出現于關于人工智能的早期著作中。但是出現了面向對象語言之后,面向對象思想才得到了迅速的發展。過去的幾十年中,程序設計語言對抽象機制的支持程度不斷提高:從機器語言到匯編語言,到高級語言,直到面向對象語言。匯編語言出現后,程序員就避免了直接使用0-1,而是利用符號來表示機器指令,從而更方便地編寫程序;當程序規模繼續增長的時候,出現了Fortran、C、Pascal等高級語言,這些高級語言使得編寫復雜的程序變得容易,程序員們可以更好地對付日益增加的復雜性。但是,如果軟件系統達到一定規模,即使應用結構化程序設計方法,局勢仍將變得不可控制。作為一種降低復雜性的工具,面向對象語言產生了,面向對象程序設計也隨之產生。

面向對象的特征——封裝的意義和過程

封裝的意義

封裝就是將對象敏感的數據封裝在類的內部,為了保護自己數據的安全性,和程序的健壯性,不讓外界直接訪問,而是通過當前類提供的set/get方法間接訪問數據,此時就可以在set/get中添加限制條件進行訪問數據的控制。

封裝實現的步驟:

1.定義類型,封裝零散數據【抽象的屬性】

2.[使用__slots__屬性,限制當前類的屬性列表à為了代碼的統一性]

3.所有屬性私有化【屬性使用雙下劃綫開頭,外界就不能直接訪問這樣的屬性了】

4.給每個屬性提供set/get方法,在方法中添加限制條件

下面看實現過程:


高級封裝

在面向對象中還有一種進階版的封裝方法,它就是使用@property,@get_method.setter注解,來注釋set/get方法,隱藏set/get方法的實現,讓方法的使用方式和屬性一致大大的提高了程序的安全性。

偽方法重載:python中,默認不提供方法重載,但是在高級封裝的過程中,又出現了類似方法重載的代碼語法,所以~稱之為偽方法重載。

對方法的封裝

在封裝的過程中,除了封裝私有屬性,還可以針對一些底層的操作方法進行私有化,將方法封裝在類的內部,通過提供的一個公共方法來控制該方法的訪問權限



面向對象的特征——繼承的意義和操作過程

在面向對象中,繼承,就是一個類型繼承另一個類型,當前類型就會擁有另一個類型的公共的屬性和方法,達到代碼的重復使用的目的。

繼承的語法如下:

class類型(被繼承的類型):

? ? ?pass


程序執行結果是:

? ? ? ? 凱特吃飯了,吃的是..烤魚..

? ? ? ? 行走中...

? ? ? ? 霸王龍吃飯了,吃的是..烤全豹..

? ? ? ? 暴走中...

在這里恐龍類繼承了動物類,就擁有了他的公共方法的使用權限,在執行了吃飯的方法之后同樣輸出了結果。

繼承中出現的術語:

? ? 父類:被繼承的類,也稱為基類、超類

? ?子類:當前類,也稱為派生類

? ?子類繼承父類,體現的是A is a B的關系

? ?子類繼承父類,就可以使用父類中所有的公開的屬性和方法

繼承鏈

? ?A繼承B,B繼承C,C繼承D

? ?A直接繼承了B,間接繼承了C,D;

? ?此時A創建的對象,可以同時使用B,C,D中所有公開的屬性和方法


此時程序執行的結果是:

? ?吃飯

? ?游戲中...

? ?休息休息

多繼承

? ? python中,一個類型,可以同時繼承多個類型,同時擁有所有繼承類型的所有公開的屬性和方法

備注:在進行代碼設計的過程中,可能會出現多繼承,所以盡量不要在父類中定義相同名稱的屬性或者方法

備注2:如果父類中出現了相同名稱的屬性和方法,在使用的時候子類調用時會優先繼承優先調用。

下面是代碼的實現過程:

程序的執行結果是:

? ?尊師重道

? ?尊老愛幼

? ? 吃美食...

(<class '__main__.User' >, <class '__main__.Son' >, <class '__main__.Student' >, <class '__main__.Person' >, <class 'object' >)

最后括號里面的內容就是屬性和方法的搜索過程。

方法重寫:

? 子類在自己類中重新定義父類中已經存在的方法,在執行該方法時,如果子類中沒有重寫就直接調用父類的方法,如果子類重寫了該方法,就直接調用子類重寫的方法!

擴展:子類中,訪問父類的屬性和方法:

? ? classUser(Person):

? ? def__init__(self, name, age):

#直接通過父類的類名稱調用父類的屬性和方法

? ? Person.__init__(name, age)

#通過super()來調用父類的屬性和方法

? ? super().__init__(name, age)

面向對象——多態

?多態:程序在運行的過程中,根據執行條件的不同,動態執行不同的操作代碼的過程稱為程序運行時多態。

?多態操作,通常情況繼承相關聯

下面我們使用一段代碼來帶體驗多態:


此時程序執行的結果是:

手術......

[王先生]康復了,當前健康值60

輸液......

[李夫人]死鬼,終于康復了...

輸液......

李先生哇咔咔,康復了

不好意思,請出門左轉,哪里是獸醫院

這里我們的代碼就是:用不同的對象在程序運行是,以不同的角色,執行了一樣的代碼。

此時我們可能對多態還不是太了解,到這里,我們就沒必要再講了,我們只需要知道他的概念,在以后大量的代碼練習中,自然而然就會理解這局話了。

?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,182評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,489評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,290評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,776評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,510評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,866評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,860評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,036評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,585評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,331評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,536評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,058評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,754評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,154評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,469評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,273評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,505評論 2 379

推薦閱讀更多精彩內容

  • 寫在之前 因為簡書字數限制,完整版地址:https://www.zybuluo.com/hainingwyx/no...
    hainingwyx閱讀 13,984評論 0 41
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,733評論 18 399
  • (一)Java部分 1、列舉出JAVA中6個比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨云閱讀 7,133評論 0 62
  • 作者通過詼諧的小故事,向人闡述了關于問題的一些原則。讓人在故事中去感悟原則,并在最后得到原則后,反思故事。這種方式...
    游書閱讀 946評論 0 5
  • 2017年9月1號這天,我才漸漸的發現自己有社交恐懼癥。 這一天,我來到了一個離家里挺遠的一個地方工作,因為,我想...
    A葡萄姐姐閱讀 221評論 0 0