sjms-1 面向对象
面向對象設計
先設計架構,然后去完成相應模塊和類
設計模式:對軟件設計中普遍存在(反復出現)的各種問題,所提出的解決方案。每一個設計模式系統地命名、解釋和評價了面向對象系統中一個重要的和重復出現的設計。
“四人幫”(Gang of Four, GoF):
Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
? 《設計模式:可復用面向對象軟件的基礎》
面向對象的三大特性:
封裝(數據屬性)
繼承(復用)
多態(python本是多態的語言,不用糾結)
這是一個遞進關系
接口
接口:若干抽象方法的集合。
作用:限制實現接口的類必須按照接口給定的調用方式實現這些方法;對高層模塊隱藏了類的內部實現。
不去調用pay 不會報錯
繼承抽象類時,
只有當完成抽象類的,抽象方法,才能被調用
實現了payment 接口
接口:若干抽象方法的集合。
作用:限制實現接口的類必須按照接口給定的調用方式實現這些方法;對高層模塊隱藏了類的內部實現。
不用去看內部邏輯,直接調用接口
寫底層模塊時,大量使用設計模式
面向對象設計SOLID原則
開放封閉原則:一個軟件實體如類、模塊和函數應該對擴展開放,對修改關閉。即軟件實體應盡量在不修改原有代碼的情況下進行擴展。
里氏替換原則:所有引用父類的地方必須能透明地使用其子類的對象。
依賴倒置原則:高層模塊不應該依賴低層模塊,二者都應該依賴其抽象;抽象不應該依賴細節;細節應該依賴抽象。換言之,要針對接口編程,而不是針對實現編程。
不同的支付方式不應該依賴底層的Payment,只是依賴底層的抽象方法去實現不同支付的具體細節。
from abc import ABCMeta, abstractmethod# 接口 class Payment(metaclass=ABCMeta):# abstract class@abstractmethoddef pay(self, money):passclass Alipay(Payment):def pay(self, money):print("支付寶支付%d元." % money)class WechatPay(Payment):def pay(self, money):print("微信支付%d元." % money)p = WechatPay() p.pay(100)接口隔離原則:使用多個專門的接口,而不使用單一的總接口,即客戶端不應該依賴那些它不需要的接口。
一個類寫多個接口,會導致繼承的類沒有實現不必要的接口而報錯
class LandAnimal(metaclass=ABCMeta):@abstractmethoddef walk(self):passclass WaterAnimal(metaclass=ABCMeta):@abstractmethoddef swim(self):passclass SkyAnimal(metaclass=ABCMeta):@abstractmethoddef fly(self):passclass Tiger(LandAnimal):def walk(self):print("老虎走路")class Frog(LandAnimal, WaterAnimal):pass單一職責原則:不要存在多于一個導致類變更的原因。通俗的說,即一個類只負責一項職責。
總結
以上是生活随笔為你收集整理的sjms-1 面向对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sjms-4 行为型模式
- 下一篇: sf-1 算法