在特定的場合下,有些函數確實會影響類而不是由類所創建的對象。類屬性指的是專門設計來保留對象之間所用的值。類方法則用來定義和跟蹤類屬性。
某些編程語言可以讓用戶調用類的函數而不是創建整個實例。如果函數被分配以標識符(或者句柄),在某些情況下它們可以被視做具有自身權限的對象。不過,在大多數的情況下函數只是用來實現某種結果的方法。
現在你已經明白了對象的含義,接下來我,們就談談對象是怎么使用的。
使用對象
在主程序里,定義對象的類通過實例化的方式構造對象。對象所具有的所有方法都可以用來創建所希望的結果,而屬性則可以被引用和操作。當對象不再需要的情況下,主程序可以破壞對象。
對象類有一種功能強大的特性,這就是它們可以繼承其他類。這就意味著,如果我們編寫了某個potato(土豆)類,那么它就可以繼承vegetable類而防止我們重新編寫已經存在的功能。Vegetable類可用的所有函數都可以被potato類使用。進而,vegetable又可以繼承food(食品)類,以此類推。
某些OOP編程語言還具有動態綁定(dynamic binding)的概念。這項技術也被稱做多重繼承。比如說,potato類可以繼承vegetable和starch(淀粉)類。不過這樣可能會產生一些問題,比如兩種類都具有同樣名稱的一些屬性。在具體處理多重繼承概念的時候各種語言的方式是不同的,某些語言完全禁用這一概念。
在繼承了類后,我們可以通過重載方法來獲得希望的結果。比如,我的vegetable類可能有一個函數名叫prepare,該方法主要指導你如何備菜?墒,在實例化potato類的時候我希望其中包含與土豆有關的特殊定義,于是我創建了一個函數,它的名字和蔬菜類中的備菜函數名一樣但卻修改了原有的函數行為。如果我沒有重載prepare方法,則用到的是vegetable類中的函數。這就叫多態性(polymorphism)。
多態性的另一方面涉及到對象方法的類型一致性問題。這樣有助于保證所引用的函數具有以下關系:如果我能夠實例化vegetable對象,那么我就應該能夠實例化potato對象。這是因為potato是vegetable.的子類?墒,因為vegetable并不是potato的子類,所以反過來的實例化卻是不允許的。如果我實例化了potato對象,那么我就不需要實例化vegetable對象了。
如何定義多態性有各種觀點,而其最終用途卻是同樣的。無論如何,這是一種重要的OOP概念。再結合繼承技術,顯然OOP為什么具有如此強大開發功能的原因不言自明。
小結
本文的意圖并不在于深度解釋面向對象編程技術,我介紹的關鍵詞和術語只是對現有只是的淺嘗輒止。如果你初次接觸OOP或者頭一回讀到有關的概念,我希望你現在能明白OOP技術成為現代軟件開發主流的原因。
文章來源于領測軟件測試網 http://www.kjueaiud.com/