在第4節課中我們初步的了解到了一些面向對象的概念,和一些特性。例如封裝。這節課我們來進一步認識一下,這種思想。對了,在這里我說這是一種思想,是想問題的方法。即使沒有java,C++,smalltalk這樣的面向對象語言也有這種思想。其實這種思想在上世紀60年代就已經存在了。還有一個常見的誤區,不光是初學者,就是有些干了幾年的程序員也是這樣,以為用java寫東西就是面向對象,這都是錯誤的。
那么面向對象到底是什么東西呢?能夠明確的給出概念非常少,但是我們可以分析一下。它與面向過程的思想做一個比較,面向過程是指,我們考慮問題時,以一個具體的流程(事務過程)為單位,考慮它的實現過程;面向對象是指,我們考慮問題時,把任何東西看做是對象,以對象為單位,考慮它的屬性及方法。
好比一個木匠在做一把凳子,如果他是面向過程的木匠,他會想到制作凳子的過程。“先做什么呢?凳子腿?凳子板?用什么工具呢?”。如果他是一個面向對象的木匠,他會把所有的東西看做成對象,“凳子腿,凳子板兩個對象。凳子腿有屬性,長方體的,長度,寬度是多少厘米,有方法釘釘子。凳子板的屬性,正方形,邊長是多少厘米等等問題。”這樣的話,面向對象的木匠會依據這些條件。將一個凳子組裝在一起。最終目的是做成一個凳子,用什么思想方法去做,是值得研究的。
通過剛才的例子,我們會有一種感覺,面向對象的木匠會對事務量化的分析,用“數學”的方法處理問題似的。好像他更具有進步意義。面向對象的思想也確實有著他的先進之處,它把世界上的所有事務看做成為對象,這樣的話更貼近于現實世界,這樣的話使得邏輯清晰,誰看報告的時候也喜歡看條理清晰的報告啊。這樣使得面向對象的軟件開發,成為上世紀90年代直到現在的主流開發技術。傳統開發方法存在問題
1.軟件重用性差
重用性是指同一事物不經修改或稍加修改就可多次重復使用的性質。軟件重用性是軟件工程追求的目標之一。誰愿意來來回回的寫一件事情呢。
2.軟件可維護性差
軟件工程強調軟件的可維護性,強調文檔資料的重要性,規定最終的軟件產品應該由完整、一致的配置成分組成。在軟件開發過程中,始終強調軟件的可讀性、可修 改性和可測試性是軟件的重要的質量指標。實踐證明,用傳統方法開發出來的軟件,維護時其費用和成本仍然很高,其原因是可修改性差,維護困難,導致可維護性差。
3.開發出的軟件不能滿足用戶需要
用傳統的結構化方法開發大型軟件系統涉及各種不同領域的知識,在開發需求模糊或需求動態變化的系統時,所開發出的軟件系統往往不能真正滿足用戶的需要。
現在的面向對象的思想已經擴展到很多方面,如數據庫系統、交互式界面、應用結構、應用平臺、分布式系統、網絡管理結構、CAD技術、人工智能等領域。而且他指的是面向對象分析(OOA),面向對象設計(OOD),面向對象編程(OOP),這一套過程了。
下面我們來看一下,經常用到的重要概念,也就是java語言的的OOP特性,這是對于OOP而言的,不含前面的OOA和OOD的。因為是初學嘛,還沒有學到怎么分析和設計呢。Java的OOP有三大特性:封裝、繼承、多態。
封裝的概念已經在第4節課說過了,我們講的是,它用權限修飾符private使得屬性不能被外界訪問,像是人的五臟六腑怎么能讓人隨意的碰呢?人的這個屬性也是要封裝的。如有再不明白,請訪問我們的技術論壇 。
說一下容易理解的繼承:
當一個類是另一個類的特例時,這兩個類之間具有父子類的關系。子類繼承了父類的方法和屬性,就是說子類可以重用父類中的這部分代碼。比如:轎車是車的一個特例。轎車是車的子類。就是說,轎車繼承了車的一切特性。繼承用關鍵字extends表示。
實踐:
//這是基類
public class Che {
private int wheel = 4;
public int getWheel() {
return wheel;
} }
public class Jiaoche extends Che {
private String pinpai = "桑塔納";
public String getPinpai() {
return pinpai;
} }
public class Testche {
public static void main(String[] args) {
Jiaoche car = new Jiaoche();
int wheels = car.getWheel(); //調用基類的方法
String Pinpal = car.getPinpai();//調用本身的方法
System.out.println("車有 "+wheels+" 個輪子");
System.out.println("轎車的品牌是 "+Pinpal);
} }
上述例子源碼和附加練習源碼打包下載
注意:java語言與C++不同只可以從一個父類繼承哦(單繼承)。