面向對象設計(OOD)七大原則
開篇前,說明一下寫這篇文章的原因。原因是由於設計模式。由於設計模式裏的各種模式。都是建立在這些原則之上的。
好比蓋房子須要夯實的地基,或者比作數學論證中的使用到的公理。你不能說為什麽蓋房子一定要建立在地基之上。也不能說為什麽兩點一直線,三點一面這些公理為什麽就這麽牛逼的存在,由於這是自然規律。你必須遵守它們。
這些設計原則也類似,它們沒有24種設計模式那樣華麗的身姿,但它們是程序設計江湖上真正的法則。
很多的大師總結出了這些原則。告知了我們這些後輩。我們了解了它們,會讓我們更好的設計出優秀的軟件框架來。
首先,先做一下知識的普及。
假設你在一些文章中看到OOD,你要懂得,這是面向對象設計(Object-Oriented Design。OOD)。假設看到一些設計書籍提到OOD,我們便知道這是指面向對象設計的意思。
接下來,真正的主角們,這些江湖上的大佬登場了。
這些原則,盼望我們都能全然懂得。
OOD七大設計原則一:開閉原則(Open-closed Principle。OCP)
這個原則是由Bertrand Meyer大師在1988年提出的。那時候我才1歲。這個原則是這樣定義的:Software entities should be open for extension,but closed for modification。
多簡單啊?!這個原則的意思大概是說:軟件對擴展應該是開放的,對改動應該是關閉的。說的更通俗點兒。就是說我們開發了一個軟件。應該能夠對它進行功能擴展(開放)。而在進行這些擴展的時候,不須要對原來的程序進行改動(關閉)
。各位。假設我們有經歷一段時間的開發。會發現,一個軟件的代碼設計。假設能做到對功能擴展,對改動關閉是多麽棒的事兒。這意味著這個軟件維護的穩定性會大大提高,由於對改動關閉嘛,所以之前的代碼,不須要太多的改動,我們以前都做過全文搜索復制替換部分文件的事情,或者在好多個文件裏反復的改動某段代碼。假設我們的軟件編碼能依照對擴展開發,對改動關閉的原則去編寫,盡力的讓這個原則更好的體如今軟件設計中,這就是一個很棒的設計了。
1.在軟件可用性上,很靈活。你能夠在軟件完畢對軟件進行擴展。添加新的功能。這樣,這個軟件就能夠通過不斷的添加新模塊滿足不斷變化的新需求!
對OCP的實現,主要用到的就是抽象。各位,你們在編寫代碼的時候,會不會常常使用抽象的思想呢。
一定要用上抽象的思想去寫代碼。把系統全部可能的行為抽象為抽象底層,這些抽象類規定出全部詳細的類必須提供的方法,這些作為系統設計的抽象層。
所以使得在不論什麽可擴展的情況下。系統的抽象層不須要改動。同一時候。我們也能夠從抽象層再派生出其它的抽象類來改動或擴展系統的行為。因此,對於可變部分,是能夠擴展的。
我們也非常easy想到,在一開始進行軟件設計的時候。把全部的東西都面面俱到的考慮到是不可能的(有時候也不合適)。全部可變的東西都寫入到抽象底層是不可能的。
因此,開閉原則非常難被全然實現。僅僅能在某些模塊,某些程度。某個限度內使用這個原則。所以說,OCP具有理想主義的色彩。是OOD設計的終極目標。
因此,對OCP的設計原則。很多OOD大師都費盡心思,研究OCP的實現方式。
非常多原則,如:裏氏代換原則、合成復用原則,依賴倒轉原則。接口隔離原則,抽象類,迪米特法則等,都能夠看作是OCP的實現方法。
本文參考:http://blog.csdn.net/brookes/article/details/1896422
(2014-08-22。臨時寫到這。)面向對象設計(OOD)七大原則