在軟件開發(fā)中,為了提高軟件系統(tǒng)的可維護(hù)性和可復(fù)用性,增加軟件的可擴(kuò)展性和靈活性,程序員要盡量根據(jù) 7 條原則來(lái)開發(fā)程序,從而提高軟件開發(fā)效率、節(jié)約軟件開發(fā)成本和維護(hù)成本。我們將在下面的幾節(jié)中依次來(lái)介紹這 7 條原則,本節(jié)首先介紹開閉原則。
開閉原則的定義
開閉原則(Open Closed Principle,OCP)由勃蘭特·梅耶(Bertrand Meyer)提出,他在 1988 年的著作《面向?qū)ο筌浖?gòu)造》(Object Oriented Software Construction)中提出:軟件實(shí)體應(yīng)當(dāng)對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉(Software entities should be open for extension,but closed for modification),這就是開閉原則的經(jīng)典定義。
這里的軟件實(shí)體包括以下幾個(gè)部分:
- 項(xiàng)目中劃分出的模塊
- 類與接口
- 方法
開閉原則的含義是:當(dāng)應(yīng)用的需求改變時(shí),在不修改軟件實(shí)體的源代碼或者二進(jìn)制代碼的前提下,可以擴(kuò)展模塊的功能,使其滿足新的需求。
開閉原則的作用
開閉原則是面向?qū)ο蟪绦蛟O(shè)計(jì)的終極目標(biāo),它使軟件實(shí)體擁有一定的適應(yīng)性和靈活性的同時(shí)具備穩(wěn)定性和延續(xù)性。具體來(lái)說(shuō),其作用如下。
1. 對(duì)軟件測(cè)試的影響
軟件遵守開閉原則的話,軟件測(cè)試時(shí)只需要對(duì)擴(kuò)展的代碼進(jìn)行測(cè)試就可以了,因?yàn)樵械臏y(cè)試代碼仍然能夠正常運(yùn)行。
2. 可以提高代碼的可復(fù)用性
粒度越小,被復(fù)用的可能性就越大;在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,根據(jù)原子和抽象編程可以提高代碼的可復(fù)用性。
3. 可以提高軟件的可維護(hù)性
遵守開閉原則的軟件,其穩(wěn)定性高和延續(xù)性強(qiáng),從而易于擴(kuò)展和維護(hù)。
開閉原則的實(shí)現(xiàn)方法
可以通過(guò)“抽象約束、封裝變化”來(lái)實(shí)現(xiàn)開閉原則,即通過(guò)接口或者抽象類為軟件實(shí)體定義一個(gè)相對(duì)穩(wěn)定的抽象層,而將相同的可變因素封裝在相同的具體實(shí)現(xiàn)類中。
因?yàn)槌橄箪`活性好,適應(yīng)性廣,只要抽象的合理,可以基本保持軟件架構(gòu)的穩(wěn)定。而軟件中易變的細(xì)節(jié)可以從抽象派生來(lái)的實(shí)現(xiàn)類來(lái)進(jìn)行擴(kuò)展,當(dāng)軟件需要發(fā)生變化時(shí),只需要根據(jù)需求重新派生一個(gè)實(shí)現(xiàn)類來(lái)擴(kuò)展就可以了。
下面以 windows 的桌面主題為例介紹開閉原則的應(yīng)用。
【例1】Windows 的桌面主題設(shè)計(jì)。
分析:Windows 的主題是桌面背景圖片、窗口顏色和聲音等元素的組合。用戶可以根據(jù)自己的喜愛(ài)更換自己的桌面主題,也可以從網(wǎng)上下載新的主題。這些主題有共同的特點(diǎn),可以為其定義一個(gè)抽象類(Abstract Subject),而每個(gè)具體的主題(Specific Subject)是其子類。用戶窗體可以根據(jù)需要選擇或者增加新的主題,而不需要修改原代碼,所以它是滿足開閉原則的,其類圖如圖 1 所示。
圖1 Windows的桌面主題類圖
本文來(lái)源:http://c.biancheng.net/view/1322.html