1. 程式人生 > >Python中的面向物件程式設計的一些基本概念總結

Python中的面向物件程式設計的一些基本概念總結

一、一些專有詞彙的定義

  • 面對物件程式設計(OOP:object oriented programming): 是一種程式設計範型,同時也是一種程式開發的方法,實現OOP的程式希望能夠在程式中包含各種獨立而又相互呼叫的物件,沒一個物件又都應該能夠接受資料、資料處理並將資料傳達給其他物件,因此每一個物件都可以被看做一個小型的機器,而整個程式塊系統就是由這些小的機器相互協助、組合構建起來的。
  • 面對物件分析(OOA:objecet ariented analysis):即根據抽象關鍵的問題域來分解系統
  • 面對物件設計(OOD:object oriented design):是一種提供符號設計系統的面向物件的實現過程,他用非常接近時機領域屬於的方法吧系統構造成現實世界的物件。
  • 類(class):告訴Python建立新型別的東西。
  • 物件(object):兩個意思,即最基本的東西,或者某樣東西的例項
  • 例項(instance):這是讓Python建立一個類時得到的東西
  • def:這是在類裡面邊定義函式的方法
  • self:在類的函式中,self指代被訪問的物件或者例項的一個變數
  • 繼承(inheritance):指一個類可以繼承另一個類的特性,和父子關係的類似。
  • 組合(composition):指一個類可以將別的類作為他的部件構建起來,有點像車子和車輪的關係
  • 屬性(attribute):類的一個屬性,它來自於組合,而且通常是一個變數
  • 多型:就是指不同的例項(物件)都擁有相同的屬性和方法,而這些相同的屬性和方法在不同情形有著不同的表現
  • 多型性:指出了物件如何通過他們共同的屬性和動作來操作及訪問,而不需考慮他們具體的類
  • 封裝:描述了對資料資訊進行隱藏的觀念,他對資料屬性提供介面(介面函式)和訪問方法
  • 是什麼(is-a):用來描述繼承關係
  • 有什麼(has-a):用來描述某個東西是由另外一些東西組成的,或者某些東西有某些特徵。
  • 公有屬性:類內外都可以被訪問
  • 私有屬性:只能被類內函式呼叫,以'__'開頭
  • 內建屬性:系統在定義類時預設的新增,命名格式為'__X__'
  • 實現繼承:子類的屬性和方法完全繼承於父類
  • 可視繼承:子類繼承父類的外觀方法
  • 介面繼承:子類的屬性明和方法名繼承於父類,但是具體的屬性值和方法實現由子類重寫
  • 多重繼承:即組合繼承,在java和c#中使用介面概念來實現多重繼承的效果,而Python中定義類的時候,可以直接繼承多個弗雷來實現多重繼承。在實現多重繼承時,如果繼承的多個父類中均有名稱相同的方法時,需要注意繼承的順序。
  • 泛化:表示所有子類與其父類及祖先類有著一樣的特點
  • 特化:描述所有得子類的自定義,也就是說,什麼屬性讓它與其父類一同。
  • 子類(派生類):通過繼承來建立的新類叫子類
  • 父類(基類,超類):被繼承的類稱為“基類”、“父類”或“超類”
  • 自省、反射:自省也稱作反射,這個性質展示了某物件是如何在執行期取得自身資訊的。如果傳一個物件給你,你可以查出它有什麼能力,這是一項強大的特性。

 二、是一些程式碼以及用來描述程式碼的句子

  • class X(Y):建立一個叫X的類,它是Y的一種
  • class X(object):def __init__(self, J):類X有一個__init__,他接受self和J作為引數。
  • class X(object):def M(self, J):類X有一個名為M的函式,它接受self和J作為引數。
  • foo = X(): 將foo設為類X的一個例項
  • foo.M(J):從foo中找到M函式,並使用self和J引數呼叫它。
  • foo.K = Q:從foo中獲取K屬性,並將其設為Q

三、來進行詳細的解釋 

1、物件(object) 物件是資料和操作資料的方法的結合 物件的狀態(資料):一個物件用資料值來描述他的狀態,也稱為物件屬性 物件的行為(操作):物件的行為用於改變物件的狀態,也稱為物件方法 物件的唯一性(控制代碼):即物件名稱,每一個物件都有自身唯一的標識,通過這種標識,可以找到相應的物件。在物件的整個生命週期中,他的標識都不會改變。 物件之間的通訊:物件之間進行通訊的結構叫做訊息,當一個訊息傳送給某個物件時。訊息應該包含下面幾種資訊:

①接收訊息的物件名(目的物件名)

② 接受物件去執行某種操作的資訊(呼叫方法名)

③傳送給該物件引數,引數可以使該物件有的變數名,或者是所有物件都知道搜的全域性變數名

④傳送給該物件的訊息名(源訊息名)

2、類(class) 物件的抽象是類,類的具體個性化就是物件類的屬性:他是物件的狀態的抽象,用資料結構來描述該類的屬性,也稱為成員屬性 類的方法:他是物件行為的抽象,用操作名和實現該操作方法來描述,也成為成員方法 類的結構:在客觀世界中有若干類,這些類之間有一定的結構關係,通常有下面兩種主要結構關係:

①一般/具體結構稱為分類結構,也可以說是is-a關係。用來描述在繼承中子類與弗雷的關係,即一個派生類的例項化物件是其副類的一個例子,所以是is-a關係

②整體與部分結構稱為組裝結構,他們之間的關係是has a 關係。組合是是實現繼承的方式之一,在組合繼承中,一個子類可以有多個父類,即一個自類has a 一個父類

3、OOP的有三個基本特徵:封裝、繼承、多型封裝:描述了對資料資訊進行隱藏的觀念,他對資料屬性提供介面(介面函式)和訪問方法。在類的設計時,微資料提供此相應的介面,一面客戶程式通過不規範的操作來存取封裝的屬性。封裝的目的:就是把客觀事物抽象並封裝成類,封裝好的每一個類都是獨立的,而由例項化建立的物件也是如此。物件之間只能通過訊息這種通訊結構來實現通訊。這樣能夠實現:累自己的資料和方法只讓可信的類或者物件操作,對不可信操作的進行資訊隱藏。為類和物件中的方法、屬性提供了安全的保障。封裝的作用:一個類就是一個封裝了資料以及操作這些資料的方法的邏輯實體。在一個物件的內部,某寫方法或者屬性可以私有的(例項化物件將類定義的私有屬性和方法個性化),他們不能被外界訪問。通過封裝,為物件內部的資料提供了不同級別的保護,一方程式中無關的部分意外的改變或錯誤的使用了物件的私有部分。即隱藏了類的功能實現細節,使程式碼模組化(鬆耦合,高內聚)。封裝的意義:一般的,我們會認為程式=資料結構+演算法,在OOP中,因為封裝的村子啊,我們會將這條等式轉化為程式=物件+訊息

繼承

繼承令不同類之間擁有了一定的結構與關係。

類之間的關係:①通過繼承建立的新類稱為“子類”或“派生類”

                         ②被繼承的類稱為“基類”、“父類”或“超類”

通過繼承得來的子類能夠保留父類中所有需要的資料和行為,同事允許修改或者其他自定義的操作,這些都不會影響到父類。換句話說,繼承的新類(子類),能夠使用被繼承(父類)的所有功能,並且繼承後的子類能夠在無需重寫這些屬性和方法的情況下對父類的功能進行擴充套件。所以說,繼承就是從一般(父類)到特殊(子類)的過程。所以繼承最明顯的好處在於程式碼的複用。 泛化:表示所有子類與其父類及祖先類有著一樣的特點 特化:描述所有得子類的自定義,也就是說,什麼屬性讓它與其父類一同。 實現繼承的方式:可以通過繼承和組合來實現,其中繼承又有實現繼承和可視繼承,組合又有介面繼承和純虛類 實現繼承:子類的屬性和方法完全繼承於父類 可視繼承:子類繼承父類的外觀方法 介面繼承:子類的屬性明和方法名繼承於父類,但是具體的屬性值和方法實現由子類重寫 多重繼承:即組合繼承,在java和c#中使用介面概念來實現多重繼承的效果,而Python中定義類的時候,可以直接繼承多個弗雷來實現多重繼承。在實現多重繼承時,如果繼承的多個父類中均有名稱相同的方法時,需要注意繼承的順序。

多型 多型概念指出了不同物件如何通過他們共同的屬性動作來操作以及訪問,而不需要考慮他們的具體的類,多型表明了動態繫結(執行時)的存在,允許過載及執行時型別確定的驗證。 多型就是指不同的類例項(物件)都擁有相同的方法和屬性,而這些相同的方法和屬性在不同的情況有著不同的表現形式。多型機制使用不同的物件可以共享相同的外部介面(屬性明、方法名)。這意味著,雖然針對不同物件的具體操作(方法實現)不同,但通過一個公共的類,他們可以通過相同的方式(屬性名、變數名)給予呼叫。即在不同的物件中可以定義同名屬性或方法,但是屬性值或方法實現卻是各部相同的。 多型的作用:實現介面的重用,保證了在類發生繼承或派生時,我們仍然能正確呼叫這些相關類的例項化物件的屬性和方法。