物件導向程式設計四大支柱之三與四:抽象與多型 - 數聚點
文章推薦指數: 80 %
物件導向程式設計四大支柱 · 封裝(Encapsulation); · 繼承(Inheritance); · 抽象(Abstraction); · 多型(Polymorphism)。
數聚點SubscribeSigninSharethispost物件導向程式設計四大支柱之三與四:抽象與多型datainpoint.substack.comCopylinkTwitterFacebookEmail物件導向程式設計四大支柱之三與四:抽象與多型續談第三與第四支柱:抽象(Abstraction)與多型(Polymorphism)。
Yao-JenKuoOct15,20201Sharethispost物件導向程式設計四大支柱之三與四:抽象與多型datainpoint.substack.comCopylinkTwitterFacebookEmail標籤:程式設計圖片來源:PhotobyCaterYangonUnsplash按下訂閱鈕透過電子郵件收到我的文章🎉Subscribe什麼是物件導向我們常聽到對Python程式語言的描述可能會有直譯(Interpreted)、高階(High-level)、泛用(General-purposed)或者物件導向(Object-oriented),其中最息息相關、也最容易讓人困惑的,大概會是「物件導向」這個描述。
其中原因可能是資料分析師在使用Python程式語言的時候多半是採取順序型態(Procedural),我們可以將順序型態的寫作方式想像成定義多個關聯函式,這些函式在定義完成之後,可以依序呼叫將資料從輸入轉變成為輸出;順序型態的程式設計恰巧也與JupyterNotebook的操作:從最上方的儲存格開始執行到最下方的儲存格不謀而合,因此廣為資料分析師所熟稔並不是太意外的一件事。
那麼,物件導向與順序型態的差別在哪裡呢?物件導向程式設計四大支柱具體來說,物件導向程式設計可以讓程式碼實現四個特殊性質,俗稱四大支柱(Four-pillarsofobject-orientedprogramming):封裝(Encapsulation);繼承(Inheritance);抽象(Abstraction);多型(Polymorphism)。
讓我們接續第一篇文章及第二篇文章,續談第三與第四個支柱:抽象與多型。
什麼是抽象抽象(Abstraction)在物件導向程式設計中是用來將成員屬性(Attributes)與成員方法(Methods)的實作細節隱藏起來的機制,抽象的優點與思維有一部分已經在封裝中被我們體現出來:對使用者而言,可以在沒有檢視過類別程式碼的情況下,就能透過屬性檢視、方法呼叫來運用類別所包含的功能。
另一部分抽象所蘊涵的特性,是提供類別開發者一種可以宣告成員方法而不實作細節的機制,稱為抽象方法(Abstractmethod),假如一個類別的宣告中包含有抽象方法,則該類別就被稱為抽象類別(Abstractclass)。
而由於其中含有未完成的抽象方法,所以抽象類別只能拿來繼承,等待新類別能夠在繼承後完成該抽象方法,而不能夠初始化。
在Python中若想要定義一個抽象類別,要透過繼承標準套件abc中的ABC類別(顧名思義就是ABstractClass)與@abstractmethod裝飾器,來實現一個包含抽象方法、並且「不能初始化」的類別。
fromabcimportABC,abstractmethod
classAbstractAdd(ABC):
@abstractmethod
defadd(self):
pass
aa=AbstractAdd()#Unabletoinitialize,expectingerror接著定義一個新類別去繼承抽象類別,這時我們將會發現新類別將可以初始化、完成抽象方法的實作並且順利呼叫。
classSimpleAdd(AbstractAdd):
defadd(self,x,y):
returnx+y
sa=SimpleAdd()#Abletoinitialize
sa.add(55,66)什麼是多型多型(Polymorphism)在物件導向程式設計中是用來讓多個成員方法在同樣命名的情況下,呈現不同實作細節的機制,如此可以讓使用者在同一個操作介面下,實踐不同的運算結果,在認識多型的時候搭配前述的繼承與抽象一起操作,會有助於理解其特質。
舉例來說,SimpleAdd與IntermediateAdd都繼承了AbstractAdd這個抽象類別,但是在實作同名的add方法時,前者設計為單純的兩數相加、後者設計為較進階的彈性參數加總。
即便兩者都繼承自同一個抽象類別、都實作同樣命名的成員方法,卻能夠體現不同的加法運算邏輯型態。
classIntermediateAdd(AbstractAdd):
defadd(self,*args):
returnsum(args)
ia=IntermediateAdd()#Abletoinitialize
ia.add(5,5,6,6)專案簡介在這個專案中,我們打算使用Python自訂三個類別AbstractAdd、SimpleAdd 與IntermediateAdd;這三個類別分別都僅具有一個成員方法。
透過這個專案,我們能夠暸解何謂物件導向的第三與第四支柱:抽象與多型。
點選連結在瀏覽器開啟互動JupyterNotebook查看完整程式碼以及細節:https://mybinder.org/v2/gh/datainpoint/project-oop-abstraction-polymorphism/master?filepath=project-oop-abstraction-polymorphism.ipynb想暸解哪些主題,留言跟我說👇LeaveacommentLikethispostSharethispost物件導向程式設計四大支柱之三與四:抽象與多型datainpoint.substack.comCopylinkTwitterFacebookEmailCommentsCreateyourprofileYournameYourbioSubscribetothenewsletter0subscriptionswillbedisplayedonyourprofile(edit)SkipfornowSave&PostCommentOnlypaidsubscriberscancommentonthispostSubscribeAlreadyapaidsubscriber?SigninCheckyouremailForyoursecurity,weneedtore-authenticateyou.Clickthelinkwesentto,orclickheretosignin.TopNewCommunityNopostsReadyformore?Subscribe
延伸文章資訊
- 1[物件導向Ep. 2] 三大特性 - CodiMD
[物件導向Ep. 2] 三大特性 · 事前功課 · 三大特性 · 封裝Encapsulation · 繼承Inheritance 具備強烈隸屬關係時適用 · 多型Polymorphism 繼承的...
- 2物件導向的三大特性和五大原則 - w3c學習教程
物件導向的三大特性是封裝多型繼承。 五大原則是單一職責原則開放封閉原則里氏替換原則依賴倒置原則介面分離原則。 物件導向.
- 3物件導向程式設計四大支柱之三與四:抽象與多型 - 數聚點
物件導向程式設計四大支柱 · 封裝(Encapsulation); · 繼承(Inheritance); · 抽象(Abstraction); · 多型(Polymorphism)。
- 4物件導向(Object Oriented Programming)概念| by Po-Ching Liu
即是將物件內部的資料隱藏起來,只能透過物件本身所提供的介面(interface)取得物件內部屬性或者方法,物件內部的細節資料或者邏輯則隱藏起來,其他物件即無法瞭解此物件的 ...
- 508. 物件導向的特性—封裝、繼承、多型、抽象(撰寫中)
提到物件導向設計(Object-Oriented Programming, OOP),一定會提到它的三大特性,分別是封裝、繼承、多型。此外,還有一個東西,筆者覺得很重要,在實務經常使用,所以 ...