2.1 OOP的基本概念
面向對象的程式設計方法的核心是OOP的範例。即是 程式中的所有實體都被當作物件來看待。物件是 資料 + 處理這些資料的方法/函數。
我們也可以說物件有狀態和行為。 物件的狀態 是由其內部變數中儲存的資料提供的。 物件的行為 是其方法執行的所有動作的總和。
中等程式中的物件有成千上萬個,而大型程式中則有數百萬個。 為了減少混亂,人們決定將物件組織成類別,並將類別組織成某種階層結構。
這很有趣! 類別階層的概念源自於動物界,像是人類是靈長類,而靈長類是哺乳類,等等。
每個物件都有一個類別,通過類別來創建它。從某種意義上說,類別是物件的模板;從另一個角度看,類別本身也是一個具有其自身特點的獨立物件(這些特點稍後會提到)。
為了更好地理解類別的概念,讓我們來看看以下定義:
類別:
類別是用來創建物件的模板或方案,定義了該類別所有物件的屬性和方法。類別允許將資料和處理這些資料的函數組織成為一個整體。
物件:
物件是類別的實例。每個物件都具有 狀態(由屬性定義)和 行為(由方法定義)。
封裝:
封裝是指隱藏類別的內部實現,並提供與該類別物件交互的接口。這有助於保護資料並控制對資料的訪問。
繼承:
繼承允許一個類別(子類)繼承另一個類別(父類)的屬性和方法。這有助於重用程式碼並簡化其維護。
多態:
多態允許使用統一的介面與不同類別的物件進行交互。這是通過在子類中覆寫從父類繼承的方法來實現的。
抽象化:
抽象化是指提取物件的共性特徵,並創建表示這些共性特徵的類別。這有助於簡化複雜系統並提高其可理解性。
如果你至少理解了一半,那就很不錯了。接下來我們將更詳細地討論每一個點。
2.2 抽象化
真實生活中一個很好的抽象化例子就是公司或組織中的職位描述。職位名稱是一回事,而每個具體職位的職責則是另一回事。
想像一下,你在設計未來公司的結構。你可以將秘書的職責分散到其他幾個職位中。可以將執行董事的職位分解為幾個獨立的職位:財務總監、技術總監、營銷總監、人力資源總監。或者,例如,將辦公室經理和招聘人員的職位合併為一個。
從程式設計的角度看,抽象化就是將程式正確地劃分為物件。通常任何大型程式都可以用數十種方式表示為互動的物件。 抽象化允許篩選出主要特徵並略過次要特徵 >。
抽象化就像是軍事戰略。糟糕的戰略,即使再天才的戰術也無法挽救局勢。
2.3 封裝
封裝的目的是通過簡化元素的互動來提高互動的質量。
簡化某事的最佳方式就是將所有複雜的東西隱藏起來。比如說,如果讓你坐在波音的駕駛艙中,你不會立刻搞懂如何操作:
另一方面,對飛機的乘客來說一切顯得更簡單:買了票,上了飛機,起飛、降落。你可以輕鬆地從一個大陸飛到另一个大陸,只需要具備「買票」和「登機」的技能。所有的複雜性,比如飛機的準備、起飛、降落和各種緊急情況都對我們隱藏了。更不用說衛星導航、自動駕駛儀和機場的控制中心。這簡化了我們的生活。
從程式設計的觀點來看,封裝就是「隱藏實現」
>。我喜歡這樣的定義。我們的類別可以包含數百個方法,並在各種情況下實現非常複雜的行為。但我們可以將其所有方法隱藏起來(用「__」包圍它們的名字),而與其他類別的互動只留給其中的幾個方法。
那樣所有其他類別在我們的程式中只看到這個類別的三個方法,只會呼叫它們
>。所有的複雜性都將隱藏在類別內部,就像駕駛艙對幸福的乘客隱藏起來一樣。
2.4 繼承
繼承有兩個方面。一個是程式設計面,另一個是現實生活面。從程式設計的角度看,繼承是
一種特殊的類別間關係
>。但更有趣的是,從現實生活的角度看繼承是什麼。
如果我們需要在現實生活中創建某個東西,我們有兩條路:
- 從零開始創建所需的東西,花費大量時間和精力;
- 基於已經存在的東西創建所需的東西。
最優策略看起來是這樣:
採取現有的好方案,稍微改進它,調整成我們所需的,然後使用它
>。
如果我們追溯人類的發展史,會發現從地球上生命開始到現在已經過去了數十億年。而如果假設人類是從猿猴演化而來的,(是基於猿猴的),只過了幾百萬年。
從頭開始創建需要更長的時間。長得多
。
在程式設計中,我們也有可能基於另一個類別創建一個類別。
新類別成為已有類別的後代(繼承類別)
>。當有一個類別包含我們需要的80%至90%的資料和方法時,這是非常划算的。
我們只需將一個合適的類別聲明為我們新類別的父類別,這樣在新類別中就會自動出現所有父類別的資料和方法
>。很方便,對吧?
2.5 多態
多態是程式設計領域的概念。它描述了一種情況,即在同一個介面背後隱藏著不同的實現。如果試圖在現實生活中尋找類似的現象,那麼駕駛車輛的過程就是一個例子。
如果一個人可以駕駛卡車,那麼他可以坐在救護車的駕駛位上,也可以坐在跑車的駕駛位上。
無論是什麼車子,這個人都能駕駛,因為所有車子都有相同的駕駛介面:方向盤、踏板和檔桿
>。每台車的內部結構不同,但它們都有相同的駕駛介面。
回到程式設計,多態允許統一地對待不同類別的物件(通常具有共同的祖先)——這是一件難以估計其重要性的事情
>。程式越大,其價值就越高。
OOP 是一些原則。內部的法律。
每個原則在某種程度上對我們有一定的限制,然而當程式發展到大規模時,這些原則為我們帶來巨大的好處
>。四大OOP原則就像四條椅腳。即使只缺少一條,整個系統也會變得不穩定。
GO TO FULL VERSION