看到「好人難為」一文,主角是一位專班學生,看來他似乎很委曲,因此我在意見箱內提議,他可以好好研究一下軟體設計的第一原則:Open-Closed Principle (OCP),或許可以解決他的困擾,這件事涉及到軟體工程的教育與訓練的問題,也就是說,學以致用的問題,因此有必要寫一篇短文以OCP為例,來談談軟體設計原則的運用,這些原則並非軟體發展的食譜(cookbook),而是發展者必須放在心裡的「指引」(guideline),這種指引必須落實成為diciplines,其他如設計樣式(design patterns)也具有指引特性,因此才能廣泛運用,也就是說,可以重覆使用(reuse),學習時最好蒐集一些範例,可能有助於這些設計原則或樣式的運用,有如念法律的人必須研究一些判例一樣,學習軟體發展方法時也不例外。 OCP是物件導向方法的核心,1988年由Bertrand Meyer在他的著作" Object-Oriented Software Construction "一書提出,它是說:「軟體實體必須能夠延伸但不能修改」(Software entities should be open for extension but closed for modification),換言之,必要時可以延伸軟體實體的功能但不必修改它,該軟體實體可以是類別、模組、功能、程式、或組件,完全看你用在何處。Meyer的原意是說,類別實作(或程式)除了須要除錯外,如要改變功能或增加新功能時不得改變父類別(superclass),而由子類別(subclass)來達成,子類別可以利用繼承(inheritance)機制重用父類別的屬性或作業元,但可改變或增減其功能,因此繼承不旦可以重用父類別的實作,同時可以延伸原功能,該子類別的介面可以異於父類別的介面,這是一般具有物件導向的人所熟悉的繼承機制。 到1990年代OCP被重新定義為,新介面可以繼承自「抽象類別」,但非繼承實作部分,原介面不得修改,也就是說,你設計的組件或模組不能改變,當需求改變時,你可以增加新程式以延伸該模組的功能,但不能改變你也許認為十分完美而能作業的原程式,請看下圖(R.C. Martin), 左邊圖形表示,如果Client想使用另一個Server時,Client必須改變,因為兩者皆是concrete,這樣就不
留言
張貼留言