sjms-1 面向对象
面向?qū)ο笤O(shè)計(jì)
先設(shè)計(jì)架構(gòu),然后去完成相應(yīng)模塊和類
設(shè)計(jì)模式:對(duì)軟件設(shè)計(jì)中普遍存在(反復(fù)出現(xiàn))的各種問題,所提出的解決方案。每一個(gè)設(shè)計(jì)模式系統(tǒng)地命名、解釋和評(píng)價(jià)了面向?qū)ο笙到y(tǒng)中一個(gè)重要的和重復(fù)出現(xiàn)的設(shè)計(jì)。
 “四人幫”(Gang of Four, GoF):
 Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
? 《設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》
面向?qū)ο蟮娜筇匦?#xff1a;
 封裝(數(shù)據(jù)屬性)
 繼承(復(fù)用)
 多態(tài)(python本是多態(tài)的語言,不用糾結(jié))
這是一個(gè)遞進(jìn)關(guān)系
接口
接口:若干抽象方法的集合。
 作用:限制實(shí)現(xiàn)接口的類必須按照接口給定的調(diào)用方式實(shí)現(xiàn)這些方法;對(duì)高層模塊隱藏了類的內(nèi)部實(shí)現(xiàn)。
不去調(diào)用pay 不會(huì)報(bào)錯(cuò)
繼承抽象類時(shí),
只有當(dāng)完成抽象類的,抽象方法,才能被調(diào)用
實(shí)現(xiàn)了payment 接口
接口:若干抽象方法的集合。
作用:限制實(shí)現(xiàn)接口的類必須按照接口給定的調(diào)用方式實(shí)現(xiàn)這些方法;對(duì)高層模塊隱藏了類的內(nèi)部實(shí)現(xiàn)。
不用去看內(nèi)部邏輯,直接調(diào)用接口
寫底層模塊時(shí),大量使用設(shè)計(jì)模式
面向?qū)ο笤O(shè)計(jì)SOLID原則
開放封閉原則:一個(gè)軟件實(shí)體如類、模塊和函數(shù)應(yīng)該對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉。即軟件實(shí)體應(yīng)盡量在不修改原有代碼的情況下進(jìn)行擴(kuò)展。
 里氏替換原則:所有引用父類的地方必須能透明地使用其子類的對(duì)象。
依賴倒置原則:高層模塊不應(yīng)該依賴低層模塊,二者都應(yīng)該依賴其抽象;抽象不應(yīng)該依賴細(xì)節(jié);細(xì)節(jié)應(yīng)該依賴抽象。換言之,要針對(duì)接口編程,而不是針對(duì)實(shí)現(xiàn)編程。
不同的支付方式不應(yīng)該依賴底層的Payment,只是依賴底層的抽象方法去實(shí)現(xiàn)不同支付的具體細(xì)節(jié)。
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)接口隔離原則:使用多個(gè)專門的接口,而不使用單一的總接口,即客戶端不應(yīng)該依賴那些它不需要的接口。
一個(gè)類寫多個(gè)接口,會(huì)導(dǎo)致繼承的類沒有實(shí)現(xiàn)不必要的接口而報(bào)錯(cuò)
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單一職責(zé)原則:不要存在多于一個(gè)導(dǎo)致類變更的原因。通俗的說,即一個(gè)類只負(fù)責(zé)一項(xiàng)職責(zé)。
總結(jié)
以上是生活随笔為你收集整理的sjms-1 面向对象的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: sjms-4 行为型模式
- 下一篇: sf-1 算法
