日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

代碼編程教學入門 代碼怎么編寫( 五 )


提供方可以修改,增加新的功能特性,但是使用方不需要被修改,即可享用新的功能特征 。
開閉原則廣泛的理解,可以指導類、模塊、系統(tǒng)的設計,滿足該原則的核心設計方法是:通過協(xié)議(接口)交互 。
4.3 里氏替換原則(LSP)
定義:所有引用父類的地方,必須能透明的使用它的子類對象,指導類繼承的設計 。
面向?qū)ο蟮睦^承特性,一方面,子類可以擁有父類的屬性和方法,提高了代碼的復用性;另一方面,繼承是有入侵性的,父類對子類有約束,子類必須擁有父類全部的屬性和方法,修改父類會影響子類,增加了耦合性 。
里氏替換原則是對繼承進行了約束,體現(xiàn)在以下方面:

  • 子類可以實現(xiàn)父類的抽象方法,但不能重寫(覆蓋)父類的非抽象方法 。
  • 子類可以增加父類所沒有的屬性和方法 。
  • 子類重寫父類方法時,輸入?yún)?shù)類型要和父類的一致,或更寬松(參數(shù)類型的父類) 。
  • 子類重寫父類方法時,返回值類型要和父類的一致,或更嚴謹(返回類型的子類) 。
4.4 依賴倒置原則(DIP)
定義:高層模塊不應該依賴低層模塊,兩者都應該依賴其抽象;抽象不應該依賴細節(jié),細節(jié)應該依賴抽象,目的是降低層與層之間的耦合 。
從倒置來看,該原則可以有更泛化的理解:
  • 依賴實體的倒置:高層不依賴底層模塊,抽象不依賴細節(jié),例如模塊分層規(guī)范中的domain不依賴infrastructure的實現(xiàn) 。
  • 依賴控制的倒置:依賴具體對象的創(chuàng)建控制,從程序內(nèi)部交給外部,例如Spring的Ioc容器 。
舉個購物車的例子:
代碼編程教學入門 代碼怎么編寫


  • 商業(yè)能力基座:主要包含購物車的業(yè)務流程實現(xiàn)、外域服務定義(非實現(xiàn))、商業(yè)定制能力(擴展點),打包后需滿足一套代碼多處部署的要求 。
  • 域服務能力實例:針對不同運行環(huán)境,提供適配環(huán)境的域服務實現(xiàn),商業(yè)基座反向依賴域服務實例,使得基座與環(huán)境無關 。
4.5 接口隔離原則(ISP)
定義:客戶端不應該被強迫去依賴它并不需要的接口 。
理解接口隔離原則,需要拿單一職責的原則做對比 。細品一下,如果一個接口滿足了單一職責,是否就也就滿足接口隔離原則?
  • 單一職責原則,解決了接口內(nèi)聚的問題 。
  • 接口隔離原則,認為某些場景下需要存在非內(nèi)聚接口(多職責),但是又不希望客戶端知道整個類,客戶端只要知道具有內(nèi)聚接口的抽象父類即可 。
簡單來講,接口隔離原則解決的問題是,當某些類本身或面向使用方不滿足職責單一原則時,客戶端不應該直接使用它們,而是通過增加接口類,通過它隱藏客戶端不需要感知到的部分 。
五、編程范式
5.1 編程范式
編程范式,本質(zhì)是一種思維方式,而和具體語言沒關系 。
用C語言可以寫出面向?qū)ο蟮某绦?,用Java語言可以寫出面向過程的程序 。而不爭的現(xiàn)實是,我們大部分人是在用java寫面向過程的代碼 。
例如下面代碼,它是如何用面向過程語言實現(xiàn)封裝、繼承、多態(tài)的?
代碼編程教學入門 代碼怎么編寫


備注:以上代碼來自開源libevent庫
a. 結(jié)構(gòu)化(面向過程)編程
最早使用機器和匯編語言編程,是編排好一堆命令讓機器逐條執(zhí)行,為了控制一些跳躍的流程(如if/for/continue/break),就會用到類似goto的語句,讓程序直接跳轉(zhuǎn)到希望執(zhí)行的指令位置,這樣程序員就擁有了直接轉(zhuǎn)移程序控制權的能力 。goto的無條件轉(zhuǎn)移,使得程序的控制流難于追蹤,程序難以修改和維護 。

推薦閱讀