CodeGym /Java Adesua /Python SELF TW /面向對象程式設計簡介

面向對象程式設計簡介

Python SELF TW
等級 15 , 課堂 2
開放

2.1 OOP的基本概念

面向對象的程式設計方法的核心是OOP的範例。即是 程式中的所有實體都被當作物件來看待。物件是 資料 + 處理這些資料的方法/函數。

我們也可以說物件有狀態和行為。 物件的狀態 是由其內部變數中儲存的資料提供的。 物件的行為 是其方法執行的所有動作的總和。

中等程式中的物件有成千上萬個,而大型程式中則有數百萬個。 為了減少混亂,人們決定將物件組織成類別,並將類別組織成某種階層結構。

這很有趣! 類別階層的概念源自於動物界,像是人類是靈長類,而靈長類是哺乳類,等等。

每個物件都有一個類別,通過類別來創建它。從某種意義上說,類別是物件的模板;從另一個角度看,類別本身也是一個具有其自身特點的獨立物件(這些特點稍後會提到)。

為了更好地理解類別的概念,讓我們來看看以下定義:

類別:

類別是用來創建物件的模板或方案,定義了該類別所有物件的屬性和方法。類別允許將資料和處理這些資料的函數組織成為一個整體。

物件:

物件是類別的實例。每個物件都具有 狀態(由屬性定義)和 行為(由方法定義)。

封裝:

封裝是指隱藏類別的內部實現,並提供與該類別物件交互的接口。這有助於保護資料並控制對資料的訪問。

繼承:

繼承允許一個類別(子類)繼承另一個類別(父類)的屬性和方法。這有助於重用程式碼並簡化其維護。

多態:

多態允許使用統一的介面與不同類別的物件進行交互。這是通過在子類中覆寫從父類繼承的方法來實現的。

抽象化:

抽象化是指提取物件的共性特徵,並創建表示這些共性特徵的類別。這有助於簡化複雜系統並提高其可理解性。

如果你至少理解了一半,那就很不錯了。接下來我們將更詳細地討論每一個點。

2.2 抽象化

真實生活中一個很好的抽象化例子就是公司或組織中的職位描述。職位名稱是一回事,而每個具體職位的職責則是另一回事。

想像一下,你在設計未來公司的結構。你可以將秘書的職責分散到其他幾個職位中。可以將執行董事的職位分解為幾個獨立的職位:財務總監、技術總監、營銷總監、人力資源總監。或者,例如,將辦公室經理和招聘人員的職位合併為一個。

從程式設計的角度看,抽象化就是將程式正確地劃分為物件。通常任何大型程式都可以用數十種方式表示為互動的物件。 抽象化允許篩選出主要特徵並略過次要特徵 >。

抽象化就像是軍事戰略。糟糕的戰略,即使再天才的戰術也無法挽救局勢。

2.3 封裝

封裝的目的是通過簡化元素的互動來提高互動的質量。

簡化某事的最佳方式就是將所有複雜的東西隱藏起來。比如說,如果讓你坐在波音的駕駛艙中,你不會立刻搞懂如何操作:

另一方面,對飛機的乘客來說一切顯得更簡單:買了票,上了飛機,起飛、降落。你可以輕鬆地從一個大陸飛到另一个大陸,只需要具備「買票」和「登機」的技能。所有的複雜性,比如飛機的準備、起飛、降落和各種緊急情況都對我們隱藏了。更不用說衛星導航、自動駕駛儀和機場的控制中心。這簡化了我們的生活。

從程式設計的觀點來看,封裝就是「隱藏實現」 >。我喜歡這樣的定義。我們的類別可以包含數百個方法,並在各種情況下實現非常複雜的行為。但我們可以將其所有方法隱藏起來(用「__」包圍它們的名字),而與其他類別的互動只留給其中的幾個方法。 那樣所有其他類別在我們的程式中只看到這個類別的三個方法,只會呼叫它們 >。所有的複雜性都將隱藏在類別內部,就像駕駛艙對幸福的乘客隱藏起來一樣。

2.4 繼承

繼承有兩個方面。一個是程式設計面,另一個是現實生活面。從程式設計的角度看,繼承是 一種特殊的類別間關係 >。但更有趣的是,從現實生活的角度看繼承是什麼。

如果我們需要在現實生活中創建某個東西,我們有兩條路:

  1. 從零開始創建所需的東西,花費大量時間和精力;
  2. 基於已經存在的東西創建所需的東西。

最優策略看起來是這樣: 採取現有的好方案,稍微改進它,調整成我們所需的,然後使用它 >。

如果我們追溯人類的發展史,會發現從地球上生命開始到現在已經過去了數十億年。而如果假設人類是從猿猴演化而來的,(是基於猿猴的),只過了幾百萬年。 從頭開始創建需要更長的時間。長得多

在程式設計中,我們也有可能基於另一個類別創建一個類別。 新類別成為已有類別的後代(繼承類別) >。當有一個類別包含我們需要的80%至90%的資料和方法時,這是非常划算的。 我們只需將一個合適的類別聲明為我們新類別的父類別,這樣在新類別中就會自動出現所有父類別的資料和方法 >。很方便,對吧?

2.5 多態

多態是程式設計領域的概念。它描述了一種情況,即在同一個介面背後隱藏著不同的實現。如果試圖在現實生活中尋找類似的現象,那麼駕駛車輛的過程就是一個例子。

如果一個人可以駕駛卡車,那麼他可以坐在救護車的駕駛位上,也可以坐在跑車的駕駛位上。 無論是什麼車子,這個人都能駕駛,因為所有車子都有相同的駕駛介面:方向盤、踏板和檔桿 >。每台車的內部結構不同,但它們都有相同的駕駛介面。

回到程式設計,多態允許統一地對待不同類別的物件(通常具有共同的祖先)——這是一件難以估計其重要性的事情 >。程式越大,其價值就越高。

OOP 是一些原則。內部的法律。 每個原則在某種程度上對我們有一定的限制,然而當程式發展到大規模時,這些原則為我們帶來巨大的好處 >。四大OOP原則就像四條椅腳。即使只缺少一條,整個系統也會變得不穩定。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION