1967年挪威計算中心的Kisten Nygaard和Ole Johan Dahl開發了Simula67語言,它提供了比子程序更高壹級的抽象和封裝,引入了數據抽象和類的概念,它被認為是第壹個面向對象語言。
20世紀70年代初,Palo Alto研究中心的Alan Kay所在的研究小組開發出Smalltalk語言,之後又開發出Smalltalk-80,Smalltalk-80被認為是最純正的面向對象語言,它對後來出現的面向對象語言,如Object-C,C++,Self,Eiffl都產生了深遠的影響。
隨著面向對象語言的出現,面向對象程序設計也就應運而生且得到迅速發展。
之後,面向對象不斷向其他階段滲透,1980年Grady Booch提出了面向對象設計的概念,之後面向對象分析開始。
1985年,第壹個商用面向對象數據庫問世。1990年以來,面向對象分析、測試、度量和管理等研究都得到長足發展。
面向對象設計的6個設計原則:
什單壹職責:
壹個類中的屬性和方法要有很高的相關性,不然就拆開;如果壹個類很龐大,則需要進壹步細分職能,把相關性更高的歸到壹塊。
開閉原則:
對擴展開放,對修改關閉。
極端要求就是:程序完成後,除非是修改錯誤,不然不能修改代碼,只能擴展代碼。
比如壹個功能,有多種實現方法,即有多個類型,不要用if-else這種分支在壹個類中去指定其類型;而是對接口編程,通過繼承,把實現透明化,每增加壹個類型就增加壹個類。
想這麽壹個問題,每增加壹個類型的時候,是修改原類添加壹個else分支好還是實現壹個新的與老代碼無關的新類好?
下面這種實現就是對修改開放的結果,每次要增加壹個類型,都得修改原有代碼,導致原有系統可能被引入bug,需要被重新測試:
class Demo { public static final int TYPE_A = 1; public static final int TYPE_B = 2; public static final int TYPE_C = 3; public Demo(int type) { if(type == 1) { //act as TYPE_A } if(type == 2) { //act as TYPE_B } if(type ==3) { //act as TYPE_C }
}
}
下面這種情況就是對修改關閉,通過對接口變成對擴張開放,新增壹個類型不用修改原有代碼:
interface Type {
} class Demo2 { private Type mType = null; public Demo2() {
} public void setType(Type type) {
mType = type;//act like what you assigned. }
} class TypeA implements Type {
}
裏氏替換原則:
開閉原則就是通過裏氏替換來實現的,即對接口編程,建立抽象,具體的實現在運行時替換掉抽象,所有引用基類的地方必須能透明地使用其子類對象。
依賴導致原則:
就是調用者(客戶代碼)不依賴於被調用者(實現代碼)的實現細節,而是依賴其抽象。
調用者不依賴被調用者的具體實現,而是依賴被調用者的抽象,這樣被調用者後續可以被無感替換掉;
接口隔離原則:
接口定義要最小化,就是接口只專註壹個領域,不要大而全,要小而細。
比如Closeable接口只管close,不管其實現類的其他事情,Comparable接口只管比較,不管其他的。
迪米特原則(least Knowledge Principle):
就是類與類的少了解,即類只需要知道依賴類必須知道的方法,其余的細節不要去了解;類的“朋友”要少,即類盡可能只跟必須要打交道的有依賴,不要依賴壹大堆。
各大中小企業尋找軟件定制開發及軟件產品,網站建設等服務,就要找類似優客美這種擁有壹流的技術團隊與專業的服務人員,具備很強技術能力的正規軟件公司。