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