軟件構(gòu)造知識點復(fù)習整理(4-5章)

? 代碼可理解性/可讀性

可理解性

? ? 代碼的可讀性

? ? 例如:

? ? 是否遵循命名慣例?

? ? 它是自我描述和/或評論很好嗎诡延?

? ? 事物(例如奕删,課程)是否一次只做一件事或多件事奕坟?

? ? 這些方法是長還是短,并且可以在一次閱讀中理解它們的意圖罗侯,還是需要進行大量的屏幕盯著和白板分析器腋?

? ? 別名:可讀性

? ? 可讀性是指人類讀者能夠輕松理解源代碼的目的,控制流程和操作钩杰。

? ? 它影響上述質(zhì)量方面纫塌,包括便攜性,可用性和最重要的可維護性讲弄。

? ? 可讀性非常重要措左,因為程序員大部分時間都在閱讀,嘗試理解和修改現(xiàn)有的源代碼避除,而不是編寫新的源代碼怎披。

? ? 無法讀取的代碼通常會導(dǎo)致錯誤,效率低下和代碼重復(fù)瓶摆。

? 編碼規(guī)范

名字長度

? ? 名稱應(yīng)該是描述性的凉逛。 名稱越長,可能的描述就越多群井。

? ? 名稱也應(yīng)簡明扼要状飞。 名稱越長,它的效率就越低。

注釋密度(MCOMM%)

MCOMM%= MCOMM / LOC

等寬字體代碼

復(fù)雜性和LoC

復(fù)雜性

? ? 復(fù)雜的代碼不太可能是可以理解的诬辈。

? ? 代碼行(LoC)

? ? 方法越長酵使,理解起來就越難。

?在四個地方使用注釋:

? ? 標題注釋引入了類定義焙糟,重要函數(shù)口渔,宏定義包,一些其他非平凡模塊或整個源代碼文件穿撮。 對于專有程序搓劫,標題注釋通常包括版權(quán)聲明。

? ? 介紹性注釋描述了類混巧,函數(shù)或其他模塊的用途和用法。

? ? 塊注釋描述了一組相關(guān)語句的目的和策略勤揩。

? ? 單行/尾隨/行尾注釋解釋單個聲明或甚至聲明的一部分咧党。

? Programing for/with reuse

軟件重用是使用現(xiàn)有軟件組件實現(xiàn)或更新軟件系統(tǒng)的過程。

設(shè)計模式

跨應(yīng)用程序發(fā)生的泛型抽象表示為顯示抽象和具體對象和交互的設(shè)計模式陨亡。

基于組件的開發(fā)

通過集成符合組件模型標準的組件(對象集合)來開發(fā)系統(tǒng)傍衡。

應(yīng)用程序框架

可以調(diào)整和擴展以創(chuàng)建應(yīng)用程序系統(tǒng)的抽象和具體類的集合。

遺留系統(tǒng)包裝

可以通過定義一組接口并通過這些接口提供對這些遺留系統(tǒng)的訪問來“包裝”的傳統(tǒng)系統(tǒng)负蠕。

面向服務(wù)的系統(tǒng)

通過鏈接可能在外部提供的共享服務(wù)來開發(fā)系統(tǒng)蛙埂。

應(yīng)用產(chǎn)品系列

應(yīng)用程序類型圍繞通用體系結(jié)構(gòu)進行概括,以便可以針對不同客戶以不同方式進行調(diào)整遮糖。

COTS集成

COTS(商業(yè)現(xiàn)貨绣的,商務(wù)現(xiàn)貨供應(yīng))。 通過集成現(xiàn)有的應(yīng)用系統(tǒng)來開發(fā)系統(tǒng)欲账。

可配置的垂直應(yīng)用

通用系統(tǒng)的設(shè)計使其可以根據(jù)特定系統(tǒng)客戶的需求進行配置屡江。

程序庫

實現(xiàn)常用抽象的類和函數(shù)庫可供重用。

程序生成器

生成器系統(tǒng)嵌入特定類型的應(yīng)用程序的知識赛不,并且可以在該域中生成系統(tǒng)或系統(tǒng)片段惩嘉。

面向方面的軟件開發(fā)

編譯程序時,共享組件將編織到不同位置的應(yīng)用程序中踢故。

源代碼級別:方法文黎,語句等

模塊級別:類和接口

庫級別:API

? ? Java庫

? ? Maven

? ? 系統(tǒng)級:框架

? Liskov替換原則(LSP)

行為子類型

?設(shè)q(x)是可證明關(guān)于類型T的對象x的屬性。那么對于S類型的對象y殿较,q(y)應(yīng)該是可證明的耸峭,其中S是T的子類型。

?Java中編譯器強制規(guī)則:

? ? 子類型可以添加淋纲,但不能刪除方法

? ? 具體類必須實現(xiàn)所有未定義的方法

? ? 重寫方法必須返回相同的類型或子類型

? ? 重寫方法必須接受相同的參數(shù)類型

? ? 覆蓋方法可能不會引發(fā)其他異常

? ? ?也適用于指定的行為:

? ? 相同或更強的不變量

? ? 所有方法的相同或更強的后置條件

? ? 所有方法的相同或較弱的前提條件

? Delegation 委托

委托是指一個對象依賴于另外一個對象的部分功能

顯式委派:將發(fā)送對象傳遞給接收對象

隱式委派:通過語言的成員查找規(guī)則

委托可看做是在實體之間共享代碼和數(shù)據(jù)的低層機制

委派與繼承

繼承:通過新操作擴展基類或覆蓋操作抓艳。

委托:捕獲操作并將其發(fā)送到另一個對象。

許多設(shè)計模式使用繼承和委派的組合。

小結(jié):對象之間的聯(lián)系

繼承/泛化inheritance:一般與特殊的關(guān)系——is a kind of

組合composition:部分與整體的關(guān)系玷或,彼此不可分——is part of

聚合aggregation:部分與整體的關(guān)系儡首,但彼此可分——owns a

關(guān)聯(lián)association:對象之間的長期靜態(tài)聯(lián)系——has a

依賴dependence:對象之間的動態(tài)的、臨時的通信聯(lián)系——use a

類間聯(lián)系的強度:繼承>>> 組合>> 聚合>> 關(guān)聯(lián)>>> 依賴

? 接口的組合

? 白盒偏友、黑盒框架的原理與實現(xiàn)

Whitebox和Blackbox框架

Whitebox框架

? ? 通過子類化和重寫方法進行擴展

? ? 通用設(shè)計模式:模板方法

? ? 子類有主要方法但控制框架

Blackbox框架

? ? 通過實現(xiàn)插件接口進行擴展

? ? 共同設(shè)計模式:戰(zhàn)略蔬胯,觀察員

? ? 插件加載機制加載插件并控制框架

Whitebox vs. Blackbox框架

Whitebox框架使用子類

? ? 允許擴展每個非私有方法

? ? 需要了解超類的實現(xiàn)

? ? 一次只能擴展一個

? ? 匯編在一起

? ? 通常所謂的開發(fā)者框架

? ? Blackbox框架使用組合

? ? 允許擴展界面中公開的功能

? ? 只需要了解界面

? ? 多個插件

? ? 通常提供更多的模塊化

? ? 可以單獨部署(.jar,.dll位他,…)

? ? 通常所謂的最終用戶框架氛濒,平臺

? 設(shè)計模式adapter、decorator鹅髓、fa?ade舞竿、strategy、template窿冯、iterator/iterable

Adapter Pattern 適配器模式

目標:對舊的不兼容組件進行包裝骗奖,在新系統(tǒng)中使用舊的組件

適配器模式


兩種類型的適配器設(shè)計模式

? ? 繼承

? ? 委托


? ? Decorator 裝飾器模式

? ? 方案: 實現(xiàn)一個通用接口作為要擴展的對象,將主要功能委托給基礎(chǔ)對象(stack)醒串,然后添加功能(undo,secure,…)执桌。

? ? 接口:定義裝飾物執(zhí)行的公共操作

? ? 起始對象,在其基礎(chǔ)上增加功能(裝飾)芜赌,將通用的方法放到此對象中仰挣。



裝飾者與繼承

? ? ?Decorator在運行時編寫功能

? ? 繼承在編譯時組成功能

? ? ?裝飾器由多個協(xié)作對象組成

? ? 繼承產(chǎn)生一個明確類型的對象

? ? ?可以混合搭配多種裝飾品

? ? 多重繼承在概念上很難

Fa?ade 外觀模式

調(diào)用者需要一個簡化的接口來調(diào)用復(fù)雜系統(tǒng)的整體功能。

提供更高層次的接口來使子系統(tǒng)易于使用缠沈。

Strategy 整體地替換算法

針對特定任務(wù)存在多種算法膘壶,調(diào)用者需要根據(jù)上下文環(huán)境動態(tài)的選擇和切換。

示例:對客戶列表進行排序(冒泡排序洲愤,合并排序香椎,快速排序)

定義一個算法的接口,每個算法用一個類來實現(xiàn)禽篱,客戶端針對接口編寫程序畜伐。

Template Method 模板方法

不同的客戶端具有相同的算法步驟,但是每個步驟的具體實現(xiàn)不同躺率。

在父類中定義通用邏輯和各步驟的抽象方法聲明玛界。

子類中進行各步驟的具體實現(xiàn)。




在父類聲明一個通用邏輯悼吱。

模板模式用繼承+重寫的方式實現(xiàn)算法的不同部分慎框。

策略模式用委托機制實現(xiàn)不同完整算法的調(diào)用(接口+多態(tài))

Iterator 迭代模式

問題:客戶端需要以統(tǒng)一的、與元素類型無關(guān)的方式訪問容器中的所有元素


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末后添,一起剝皮案震驚了整個濱河市笨枯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖馅精,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件严嗜,死亡現(xiàn)場離奇詭異,居然都是意外死亡洲敢,警方通過查閱死者的電腦和手機漫玄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來压彭,“玉大人睦优,你說我怎么就攤上這事∽巢唬” “怎么了汗盘?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長询一。 經(jīng)常有香客問我隐孽,道長,這世上最難降的妖魔是什么家凯? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮如失,結(jié)果婚禮上绊诲,老公的妹妹穿的比我還像新娘。我一直安慰自己褪贵,他們只是感情好掂之,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著脆丁,像睡著了一般世舰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上槽卫,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天跟压,我揣著相機與錄音,去河邊找鬼歼培。 笑死震蒋,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的躲庄。 我是一名探鬼主播查剖,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼噪窘!你這毒婦竟也來了笋庄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎直砂,沒想到半個月后菌仁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡哆键,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年掘托,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片籍嘹。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡闪盔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出辱士,到底是詐尸還是另有隱情泪掀,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布颂碘,位于F島的核電站异赫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏头岔。R本人自食惡果不足惜塔拳,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望峡竣。 院中可真熱鬧靠抑,春花似錦、人聲如沸适掰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽类浪。三九已至载城,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間费就,已是汗流浹背诉瓦。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留力细,地道東北人垦搬。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像艳汽,于是被迫代替她去往敵國和親猴贰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355