在第4節(jié)課中我們初步的了解到了一些面向?qū)ο蟮母拍睿鸵恍┨匦浴@绶庋b。這節(jié)課我們來進(jìn)一步認(rèn)識(shí)一下,這種思想。對(duì)了,在這里我說這是一種思想,是想問題的方法。即使沒有java,C++,smalltalk這樣的面向?qū)ο笳Z(yǔ)言也有這種思想。其實(shí)這種思想在上世紀(jì)60年代就已經(jīng)存在了。還有一個(gè)常見的誤區(qū),不光是初學(xué)者,就是有些干了幾年的程序員也是這樣,以為用java寫東西就是面向?qū)ο螅@都是錯(cuò)誤的。
那么面向?qū)ο蟮降资鞘裁礀|西呢?能夠明確的給出概念非常少,但是我們可以分析一下。它與面向過程的思想做一個(gè)比較,面向過程是指,我們考慮問題時(shí),以一個(gè)具體的流程(事務(wù)過程)為單位,考慮它的實(shí)現(xiàn)過程;面向?qū)ο笫侵?/span>,我們考慮問題時(shí),把任何東西看做是對(duì)象,以對(duì)象為單位,考慮它的屬性及方法。
好比一個(gè)木匠在做一把凳子,如果他是面向過程的木匠,他會(huì)想到制作凳子的過程。“先做什么呢?凳子腿?凳子板?用什么工具呢?”。如果他是一個(gè)面向?qū)ο蟮哪窘常麜?huì)把所有的東西看做成對(duì)象,“凳子腿,凳子板兩個(gè)對(duì)象。凳子腿有屬性,長(zhǎng)方體的,長(zhǎng)度,寬度是多少厘米,有方法釘釘子。凳子板的屬性,正方形,邊長(zhǎng)是多少厘米等等問題。”這樣的話,面向?qū)ο蟮哪窘硶?huì)依據(jù)這些條件。將一個(gè)凳子組裝在一起。最終目的是做成一個(gè)凳子,用什么思想方法去做,是值得研究的。
通過剛才的例子,我們會(huì)有一種感覺,面向?qū)ο蟮哪窘硶?huì)對(duì)事務(wù)量化的分析,用“數(shù)學(xué)”的方法處理問題似的。好像他更具有進(jìn)步意義。面向?qū)ο蟮乃枷胍泊_實(shí)有著他的先進(jìn)之處,它把世界上的所有事務(wù)看做成為對(duì)象,這樣的話更貼近于現(xiàn)實(shí)世界,這樣的話使得邏輯清晰,誰(shuí)看報(bào)告的時(shí)候也喜歡看條理清晰的報(bào)告啊。這樣使得面向?qū)ο蟮能浖_發(fā),成為上世紀(jì)90年代直到現(xiàn)在的主流開發(fā)技術(shù)。傳統(tǒng)開發(fā)方法存在問題
1.軟件重用性差
重用性是指同一事物不經(jīng)修改或稍加修改就可多次重復(fù)使用的性質(zhì)。軟件重用性是軟件工程追求的目標(biāo)之一。誰(shuí)愿意來來回回的寫一件事情呢。
2.軟件可維護(hù)性差
軟件工程強(qiáng)調(diào)軟件的可維護(hù)性,強(qiáng)調(diào)文檔資料的重要性,規(guī)定最終的軟件產(chǎn)品應(yīng)該由完整、一致的配置成分組成。在軟件開發(fā)過程中,始終強(qiáng)調(diào)軟件的可讀性、可修 改性和可測(cè)試性是軟件的重要的質(zhì)量指標(biāo)。實(shí)踐證明,用傳統(tǒng)方法開發(fā)出來的軟件,維護(hù)時(shí)其費(fèi)用和成本仍然很高,其原因是可修改性差,維護(hù)困難,導(dǎo)致可維護(hù)性差。
3.開發(fā)出的軟件不能滿足用戶需要
用傳統(tǒng)的結(jié)構(gòu)化方法開發(fā)大型軟件系統(tǒng)涉及各種不同領(lǐng)域的知識(shí),在開發(fā)需求模糊或需求動(dòng)態(tài)變化的系統(tǒng)時(shí),所開發(fā)出的軟件系統(tǒng)往往不能真正滿足用戶的需要。
現(xiàn)在的面向?qū)ο蟮乃枷胍呀?jīng)擴(kuò)展到很多方面,如數(shù)據(jù)庫(kù)系統(tǒng)、交互式界面、應(yīng)用結(jié)構(gòu)、應(yīng)用平臺(tái)、分布式系統(tǒng)、網(wǎng)絡(luò)管理結(jié)構(gòu)、CAD技術(shù)、人工智能等領(lǐng)域。而且他指的是面向?qū)ο蠓治觯?/span>OOA),面向?qū)ο笤O(shè)計(jì)(OOD),面向?qū)ο缶幊蹋?/span>OOP),這一套過程了。
下面我們來看一下,經(jīng)常用到的重要概念,也就是java語(yǔ)言的的OOP特性,這是對(duì)于OOP而言的,不含前面的OOA和OOD的。因?yàn)槭浅鯇W(xué)嘛,還沒有學(xué)到怎么分析和設(shè)計(jì)呢。Java的OOP有三大特性:封裝、繼承、多態(tài)。
封裝的概念已經(jīng)在第4節(jié)課說過了,我們講的是,它用權(quán)限修飾符private使得屬性不能被外界訪問,像是人的五臟六腑怎么能讓人隨意的碰呢?人的這個(gè)屬性也是要封裝的。如有再不明白,請(qǐng)?jiān)L問我們的技術(shù)論壇 。
說一下容易理解的繼承:
當(dāng)一個(gè)類是另一個(gè)類的特例時(shí),這兩個(gè)類之間具有父子類的關(guān)系。子類繼承了父類的方法和屬性,就是說子類可以重用父類中的這部分代碼。比如:轎車是車的一個(gè)特例。轎車是車的子類。就是說,轎車?yán)^承了車的一切特性。繼承用關(guān)鍵字extends表示。
實(shí)踐:
//這是基類
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(); //調(diào)用基類的方法
String Pinpal = car.getPinpai();//調(diào)用本身的方法
System.out.println("車有 "+wheels+" 個(gè)輪子");
System.out.println("轎車的品牌是 "+Pinpal);
} }
注意:java語(yǔ)言與C++不同只可以從一個(gè)父類繼承哦(單繼承)。
還有就是最難理解的多態(tài)了,我們下次課講面向?qū)ο蟮亩鄳B(tài)性。