跳至內容

開閉原則

維基百科,自由的百科全書

面向對象編程領域中,開閉原則 (The Open/Closed Principle, OCP) 規定「軟件中的對象(類,模塊,函數等等)應該對於擴展是開放的,但是對於修改是封閉的」[1],這意味着一個實體是允許在不改變它的原始碼的前提下變更它的行為。該特性在產品化的環境中是特別有價值的,在這種環境中,改變原始碼需要代碼審查單元測試以及諸如此類的用以確保產品使用品質的過程。遵循這種原則的代碼在擴展時並不發生改變,因此無需上述的過程。

開閉原則的命名被應用在兩種方式上。這兩種方式都使用了繼承來解決明顯的困境,但是它們的目的,技術以及結果是不同的。

梅耶開閉原則

伯特蘭·邁耶一般被認為是最早提出開閉原則這一術語的人,[來源請求]在他1988年發行的《面向對象軟件構造》中給出。這一想法認為一旦完成一個類的實現只應該因錯誤而修改,新的或者改變的特性應該通過新建不同的類實現。新建的類可以通過繼承的方式來重用原類的代碼。衍生的子類可以或不可以擁有和原類相同的接口。

梅耶的定義提倡實現繼承。具體實現可以通過繼承方式來重用,但是接口規格不必如此。已存在的實現對於修改是封閉的,但是新的實現不必實現原有的接口。

多態開閉原則

在20世紀90年代,由於抽象化接口的使用,開閉原則被廣泛的重新定義。在這中間實現可以被改變,多種實現可以被創建,並且多態的替換不同的實現。

相比梅耶的使用方式,多態開閉原則的定義倡導對抽象基類的繼承。接口規約可以通過繼承來重用,但是實現不必重用。已存在的接口對於修改是封閉的,並且新的實現必須,至少,實現那個接口。

羅伯特·C·馬丁英語Robert_C._Martin1996年發表的文章《開閉原則》[2]是使用這種方法的啟發式著作。在2001年,Craig Larman把開閉原則關聯到了Alistair Cockburn英語Alistair Cockburn的名為「受護的變量」(Protected Variations)的模式以及David Parnas關於信息隱藏的討論。[3]

參見

  • SOLID - 「SOLID」中的 O 指代了開閉原則

引用

  1. ^ Meyer, Bertrand. Object-Oriented Software Construction. Prentice Hall. 1988. ISBN 0-13-629049-3. 
  2. ^ Robert C. Martin "The Open-Closed Principle", C++ Report, January 1996 互聯網檔案館存檔,存檔日期2015-09-05.
  3. ^ "Protected Variation: The Importance of Being Closed", IEEE Software May/June 2001, pp. 89-91 [1]頁面存檔備份,存於互聯網檔案館

外部連結