主要有以下特點(diǎn):
(1)從問題域中客觀存在的事物出發(fā)來構(gòu)造軟件系統(tǒng),用對(duì)象作為對(duì)這些事物的抽象表示,并以此作為系統(tǒng)的基本構(gòu)成單位。
(2)事物的靜態(tài)特征(即可能用一些數(shù)據(jù)來表達(dá)的特征)用對(duì)象的屬性表示,事物的動(dòng)態(tài)特征(即事物的行為)用對(duì)象的服務(wù)表示。
(3)對(duì)象的屬性與服務(wù)結(jié)合為一體,成為一個(gè)獨(dú)立的實(shí)體,對(duì)外屏蔽其內(nèi)部細(xì)節(jié),即封裝。
(4)對(duì)事物進(jìn)行分類。把具有相同屬性和服務(wù)的對(duì)象歸為一類,類是這些對(duì)象的抽象描述,每個(gè)對(duì)象是它的類的一個(gè)示例。
(5)通過在不同程度上運(yùn)用抽象的原則,可以得到較一般的類和較特殊的類。特殊類繼承一般類的屬性與服務(wù),面向?qū)ο蠓椒ㄖС謱?duì)這種繼承關(guān)系的描述與實(shí)現(xiàn),從而簡(jiǎn)化系統(tǒng)的構(gòu)造過程及其文檔。
(6)復(fù)雜的對(duì)象可以用簡(jiǎn)單的對(duì)象作為其構(gòu)成部分,稱作聚合。
(7)對(duì)象之間通過消息進(jìn)行通信,以實(shí)現(xiàn)對(duì)象之間的動(dòng)態(tài)聯(lián)系。
(8)通過關(guān)聯(lián)表達(dá)對(duì)象之間的靜態(tài)關(guān)系。
面向?qū)ο蟮木幊陶Z言(Object-oriented Programming Language)是專門為面向?qū)ο笥^念而發(fā)展出來的,通過它可以便捷地實(shí)現(xiàn)面向?qū)ο蟮姆庋b、繼承、多態(tài)等特性。
1.封裝 封裝是一種信息隱藏技術(shù),即對(duì)象內(nèi)部對(duì)用戶是隱藏的,不可直接訪問;用戶只能見到對(duì)象封裝界面上的信息,通過對(duì)象的外部接口訪問對(duì)象。封裝的目的在于將對(duì)象的使用者和對(duì)象的設(shè)計(jì)者分開,使用者無須知道對(duì)象內(nèi)部實(shí)現(xiàn)的細(xì)節(jié),只需要知道對(duì)象接收的消息即可。
當(dāng)用戶向?qū)ο蟀l(fā)送消息后,對(duì)象將根據(jù)收到的消息來調(diào)用內(nèi)部方法以做出響應(yīng)。 在C++語言中,對(duì)象的構(gòu)成由類來描述,每個(gè)類的成員可以分為私有和公有兩種類型,對(duì)象的外部不能直接訪問對(duì)象的私有部分。
對(duì)象的封裝特性可以提高模塊之間的獨(dú)立性,使得系統(tǒng)易于調(diào)試和維護(hù)。 假設(shè)應(yīng)用系統(tǒng)中有兩個(gè)模塊:一個(gè)模塊從計(jì)算機(jī)的串行通訊口接收數(shù)據(jù),放入緩沖區(qū);另一個(gè)為數(shù)據(jù)處理模塊。
數(shù)據(jù)處理模塊可以直接訪問緩沖區(qū),從緩沖區(qū)中讀取數(shù)據(jù)。此時(shí)這兩個(gè)模塊之間的關(guān)聯(lián)程度密切,模塊獨(dú)立性很差。
如果接收數(shù)據(jù)的模塊改變緩沖區(qū)的管理方法,則第二個(gè)模塊必須做相應(yīng)的改變。如果數(shù)據(jù)處理模塊對(duì)緩沖區(qū)操作有誤,將影響數(shù)據(jù)接收模塊,在程序調(diào)試時(shí)難以確定錯(cuò)誤發(fā)生在哪一個(gè)模塊中。
實(shí)際上,數(shù)據(jù)處理模塊并不需要緩沖區(qū)的管理信息,它只需要知道緩沖區(qū)中有沒有數(shù)據(jù)以及有什么樣的數(shù)據(jù)。上面的處理方法違反了軟件工程中的信息隱藏原則,數(shù)據(jù)處理模塊訪問了它不需要的信息。
將數(shù)據(jù)接收模塊封裝為一個(gè)對(duì)象,緩沖區(qū)的管理信息作為其私有數(shù)據(jù),即可避免上面的問題。數(shù)據(jù)接收模塊只要提供一個(gè)從緩沖區(qū)獲得數(shù)據(jù)的接口即可。
數(shù)據(jù)處理模塊只能訪問該接口,而不能直接操作緩沖區(qū)。此時(shí)兩個(gè)模塊之間的獨(dú)立性提高,如需改變緩沖區(qū)的管理方法,只需修改數(shù)據(jù)接收模塊,數(shù)據(jù)處理模塊將不受任何影響,因?yàn)閿?shù)據(jù)接收模塊提供的外部接口沒有改變。
2.繼承 人們?cè)趯?duì)客觀世界的事物進(jìn)行描述時(shí),經(jīng)常采取分類的方法。類是有層次的,即某個(gè)大類的事物可能分為若干小類,而這些小類可能又分為若干個(gè)更小的類。
面向?qū)ο笏枷氩杉{了事物分類的層次思想,在描述類的時(shí)候,某些類之間具有結(jié)構(gòu)和行為的共性。例如教師類與學(xué)生類,在結(jié)構(gòu)方面均具有姓名、年齡、身高、體重等,在行為(或操作)方面均具有回答身高、回答體重等操作。
將這些共性抽取出來,形成一個(gè)單獨(dú)的類--人,描述教師類和學(xué)生類中的共性。類(人)的結(jié)構(gòu)特征和行為特征可以被多個(gè)相關(guān)的類共享,例如教師類和學(xué)生類繼承了人的結(jié)構(gòu)和行為特征。
在C++語言中,通過類的派生機(jī)制來實(shí)現(xiàn)類的繼承,可以從一個(gè)類中派生出一個(gè)新的類,這個(gè)類稱為派生類的基類或父類,派生出的新類稱為基類的派生類或子類。派生類的對(duì)象具有基類對(duì)象的特征,同時(shí)又有其自身特有的特征。
一個(gè)教師類的對(duì)象與一個(gè)學(xué)生類的對(duì)象都具有人這個(gè)類所描述的特征,同時(shí)又具有教師類和學(xué)生類各自所特有的特征。 利用類之間的繼承關(guān)系,可以簡(jiǎn)化類的描述。
在人這個(gè)類中描述教師類和學(xué)生類的共性,而在學(xué)生類和教師類中只需描述各自的個(gè)性。利用繼承機(jī)制可以提高軟件代碼的可重用性。
在設(shè)計(jì)一個(gè)新類時(shí),不必從頭設(shè)計(jì)和編寫全部的代碼,可以通過從已有的具有類似特性的類中派生出一個(gè)類,繼承原有類中的部分特性,再加上所需要的新特性。這一點(diǎn)與面向過程的設(shè)計(jì)語言中的過程或函數(shù)不同,在面向過程的設(shè)計(jì)語言中,要使用具有相似功能的過程或函數(shù),必須修改源程序代碼以使其適應(yīng)新系統(tǒng)的功能需求,而類的派生機(jī)制無需原有類的源代碼即可派生出新的類。
利用類及其繼承性描述系統(tǒng)時(shí),由于類之間的繼承關(guān)系,可能會(huì)形成一種具有層次性的類結(jié)構(gòu)。在使用類的層次結(jié)構(gòu)描述系統(tǒng)時(shí),某些類之間的層次關(guān)系可以有多種實(shí)現(xiàn)方案。
例如中學(xué)生類,既可以直接從人這個(gè)類派生出來,也可以從人這個(gè)類的派生類--學(xué)生類派生出來。 在設(shè)計(jì)類的層次結(jié)構(gòu)時(shí),應(yīng)注意建立的類層次結(jié)構(gòu)是否易于理解以及組織類結(jié)構(gòu)的費(fèi)用等方面的問題。
設(shè)計(jì)出來的類層次結(jié)構(gòu)是否合理,往往取決于系統(tǒng)分析員的經(jīng)驗(yàn)等因素。 3.多態(tài)性 多態(tài)性是面向?qū)ο笙到y(tǒng)的又一重要特性。
所謂多態(tài),即一個(gè)名詞可具有多種語義。在C++語言中,多態(tài)性主要表現(xiàn)在以下兩個(gè)方面。
(1) 重載 在C++語言中,同一函數(shù)名以及運(yùn)算符可以具有不同含義的多種實(shí)現(xiàn)版本,編譯器將根據(jù)函數(shù)調(diào)用的參數(shù)形式?jīng)Q定調(diào)用哪一種實(shí)現(xiàn)版本。 (2) 虛函數(shù) C++語言引入了虛函數(shù)機(jī)制,允許在不同類層次對(duì)象中應(yīng)用函數(shù)成員的不同版本。
例如實(shí)現(xiàn)一個(gè)類Shape,然后從該類派生出畫點(diǎn)的類Point、畫圓的類Circle、畫直線的類Line,每一種圖形的畫法均不同,但是它們都有幾種共同的操作--顯示圖形、擦除圖形、移動(dòng)圖形。移動(dòng)圖形的操作都是首先擦除圖形,然后改變圖形的位置基準(zhǔn)點(diǎn),再在新位置顯示出圖形。
在類Shape中實(shí)現(xiàn)移動(dòng)圖形的操作,每種圖形的顯示、擦除、改變基準(zhǔn)點(diǎn)等操作在派生類中分別實(shí)現(xiàn)。若程序中使用某圖形對(duì)象的移動(dòng)操作,編譯器采用動(dòng)態(tài)聯(lián)編的手段,在執(zhí)行時(shí)根據(jù)該圖形對(duì)象是哪一個(gè)類的實(shí)例,決定調(diào)用。
主要有以下特點(diǎn):(1)從問題域中客觀存在的事物出發(fā)來構(gòu)造軟件系統(tǒng),用對(duì)象作為對(duì)這些事物的抽象表示,并以此作為系統(tǒng)的基本構(gòu)成單位。
(2)事物的靜態(tài)特征(即可能用一些數(shù)據(jù)來表達(dá)的特征)用對(duì)象的屬性表示,事物的動(dòng)態(tài)特征(即事物的行為)用對(duì)象的服務(wù)表示。(3)對(duì)象的屬性與服務(wù)結(jié)合為一體,成為一個(gè)獨(dú)立的實(shí)體,對(duì)外屏蔽其內(nèi)部細(xì)節(jié),即封裝。
(4)對(duì)事物進(jìn)行分類。把具有相同屬性和服務(wù)的對(duì)象歸為一類,類是這些對(duì)象的抽象描述,每個(gè)對(duì)象是它的類的一個(gè)示例。
(5)通過在不同程度上運(yùn)用抽象的原則,可以得到較一般的類和較特殊的類。特殊類繼承一般類的屬性與服務(wù),面向?qū)ο蠓椒ㄖС謱?duì)這種繼承關(guān)系的描述與實(shí)現(xiàn),從而簡(jiǎn)化系統(tǒng)的構(gòu)造過程及其文檔。
(6)復(fù)雜的對(duì)象可以用簡(jiǎn)單的對(duì)象作為其構(gòu)成部分,稱作聚合。(7)對(duì)象之間通過消息進(jìn)行通信,以實(shí)現(xiàn)對(duì)象之間的動(dòng)態(tài)聯(lián)系。
(8)通過關(guān)聯(lián)表達(dá)對(duì)象之間的靜態(tài)關(guān)系。
你是說面向?qū)ο缶幊蹋∣OP)嗎?面向?qū)ο缶幊逃袃桑ㄈ浚┐筇卣鳎悍庋b、繼承和多態(tài)。
對(duì)于Java來說:封裝即不公開屬性本身,而是公開對(duì)屬性存取操作的方法(getter/setter),在方法中進(jìn)行部分邏輯的判斷保證屬性的值合法(比如年齡必須為大于0的整數(shù));繼承可以實(shí)現(xiàn)類的重用;多態(tài)依賴于繼承存在,在子類中重寫自父類繼承的方法實(shí)現(xiàn)對(duì)象不同時(shí)調(diào)用同樣方法做出不同響應(yīng)。之所以說是三大特征是將繼承與多態(tài)拆開說,但是以我的理解我認(rèn)為沒有繼承就沒有多態(tài)。
面向?qū)ο蟀阉谐绦蛑谐霈F(xiàn)的量都定義為類,一個(gè)合理的類定義中,其屬性和方法都是必須的合理的,能夠合理描述這個(gè)類型完成的任務(wù)。
現(xiàn)在讓我們把所有這些屬性方法分散開來,出現(xiàn)了什么!它變成了C程序的樣子,我們無法分清楚多個(gè)相同name變量是用來描述什么的,我們需要維護(hù)一長(zhǎng)串變量列表和函數(shù)列表。但是對(duì)象語言將一組屬性和函數(shù)封裝在一起,我們聲明了一個(gè)人的對(duì)象便知道他有名字屬性和吃飯動(dòng)作。
我們僅需要維護(hù)少量的類型,類型的屬性則在我們聲明此類的時(shí)候明確理解了因此不需要額外的記憶。對(duì)象語言設(shè)計(jì)更加緊湊明了,代碼意義更加明確。
VFP,也就是Visual FoxPro,是應(yīng)用程序開發(fā)軟件,主要用于開發(fā)數(shù)據(jù)管理與運(yùn)算等方面的軟件。
VFP通過對(duì)象的屬性、事件和方法來處理對(duì)象。
屬性定義對(duì)象的特征或某一方面的行為。
方法(Method)是對(duì)象能夠執(zhí)行的一個(gè)操作。在Visual FoxPro中,方法是與對(duì)象相關(guān)聯(lián)的過程
(完成某種操作的處理代碼),通常也稱為方法程序,它緊密地和對(duì)象連接在一起。
事件(Event)是由對(duì)象識(shí)別的一個(gè)動(dòng)作,可以編寫相應(yīng)的代碼對(duì)此動(dòng)作進(jìn)行響應(yīng).事件可
以具有與之相關(guān)聯(lián)的方法程序。
通常事件是由一個(gè)用戶動(dòng)作產(chǎn)生,如單擊鼠標(biāo)(Click)、移動(dòng)鼠標(biāo)(MouseMove)或按鍵(KeyPress)等,也可以由程序代碼或系統(tǒng)產(chǎn)生,如計(jì)時(shí)器。在Visual FoxPro中,不同的
對(duì)象所能識(shí)別的事件雖然有所不同,但事件集合是固定的,用戶不能創(chuàng)建新的事件。
面向?qū)ο箝_發(fā)方法的特點(diǎn)主要有一下三點(diǎn):
1、可重用性
可重用性是面向?qū)ο筌浖_發(fā)的一個(gè)核心思路,事實(shí)上前面所介紹的面向?qū)ο蟪绦蛟O(shè)的四大特點(diǎn),無一例外地,都或多或少地在圍繞著可重用性這個(gè)核心并為之服務(wù)。
我們知道,應(yīng)用軟件是由模塊組成的。可重用性就是指一個(gè)軟件項(xiàng)目中所開發(fā)的模塊,能夠不僅限于在這個(gè)項(xiàng)目中使用,而是可以重復(fù)地使用在其他項(xiàng)目中,從而在多個(gè)不同的系統(tǒng)中發(fā)揮作用。
可重用模塊必須是結(jié)構(gòu)完整、邏輯嚴(yán)謹(jǐn)、功能明確的獨(dú)立軟件結(jié)構(gòu);其次,可重用模塊必須具有良好的可移植性,可以使用在各種不同的軟硬件環(huán)境和不同的程序框架里;最后,可重用模塊應(yīng)該具有與外界交互、通信的功能。
2、可擴(kuò)展性
可擴(kuò)展性是對(duì)現(xiàn)代應(yīng)用軟件提出的又一個(gè)重要要求,即要求應(yīng)用軟件能夠很方便、容易地進(jìn)行擴(kuò)充和修改,
這種擴(kuò)充和修改的范圍不但涉及到軟件的內(nèi)容,也涉及到軟件的形進(jìn)和工作機(jī)制。現(xiàn)代應(yīng)用軟件的修改更新頻率越來越快,究其原因,即有用戶業(yè)務(wù)發(fā)展、更迭引起
的相應(yīng)的軟件內(nèi)容的修改和擴(kuò)充,也有因計(jì)算機(jī)技術(shù)本身發(fā)展造成的軟件的升級(jí)換代,如現(xiàn)在呼聲很迫切的把原客戶機(jī)/服務(wù)器模式下的應(yīng)用移植到因特網(wǎng)上的工
作,就是這樣一種軟件升級(jí)。
使用面向?qū)ο蠹夹g(shù)開發(fā)的應(yīng)用程序,具有較好的可擴(kuò)展性。
面向?qū)ο蠹夹g(shù)的可擴(kuò)展性,首先體現(xiàn)在它特別適合于使用在快速原型的軟件開發(fā)方法中。快速原型法是研究軟件生命周期的研究人員提出的一種開發(fā)步驟,相對(duì)
于傳統(tǒng)的瀑布式的開發(fā)方法,它在某些程度上來說更加靈活和實(shí)用。快速原型法的開發(fā)過程是這樣的(參看圖4.9),首先在了解了用戶的需求之后,開發(fā)人員利
用開發(fā)工具先做一個(gè)系統(tǒng)的雛形,稱為原型,這個(gè)原型盡管粗糙,但卻應(yīng)該是完整的、可工作的。開發(fā)人員帶著這個(gè)原型征求用戶的意見,再根據(jù)用戶的改進(jìn)意見在
第一個(gè)原型的基礎(chǔ)上修改和進(jìn)一步開發(fā),形成第二個(gè)原型,再帶著第二個(gè)原型去征求用戶的意見……如此循環(huán)往復(fù),不斷地在已有工作的基礎(chǔ)上修改、細(xì)化、完善,
直到把最初粗陋的雛形精雕細(xì)琢成最終的功能完整、結(jié)構(gòu)嚴(yán)謹(jǐn)?shù)膽?yīng)用系統(tǒng)。
3、可管理性
以往面向過程的開發(fā)方法是以過程或函數(shù)為基本單元來構(gòu)建整個(gè)系統(tǒng)的,當(dāng)開發(fā)項(xiàng)目的規(guī)模變大時(shí),需要的過程和函數(shù)數(shù)量成倍增多,不利于管理和控制。而面向?qū)ο蟮拈_發(fā)方法采用內(nèi)涵比過程和函數(shù)豐富、復(fù)雜得多的類作為構(gòu)建系統(tǒng)的部件,使整個(gè)項(xiàng)目的組織更加合理、方便。
例如一個(gè)系統(tǒng),如采用面向過程的開發(fā)方法來實(shí)現(xiàn),可能需要3000個(gè)過程或函數(shù),要管理好這3000個(gè)過程或函數(shù),它們?cè)谙到y(tǒng)各種可能狀態(tài)下的行為,
它們之間錯(cuò)綜復(fù)雜的關(guān)系,顯然是一件非常麻煩的工作,也容易出現(xiàn)失誤和遺漏。如果這個(gè)系統(tǒng)采用面向?qū)ο箝_發(fā)方法來實(shí)現(xiàn),則可能僅用100個(gè)類,平均每個(gè)類
包含30個(gè)方法,就可以完成同樣的功能。100相對(duì)于3000,大大降低了管理、控制的工作量,從開發(fā)效率和質(zhì)量保證等各個(gè)方面,都有很大的優(yōu)越性。
另外,面向?qū)ο箝_發(fā)方法中的類,把數(shù)據(jù)和基上的操作封裝在一起,使得僅本類的有限個(gè)方法才可以操縱、改變這些數(shù)據(jù)。這樣,仍以上面的例子為例,當(dāng)出現(xiàn)
數(shù)據(jù)的錯(cuò)誤時(shí),只需要檢查與該據(jù)相關(guān)的在同一個(gè)類中的30個(gè)方法即可,而在面向過程開發(fā)方法中處理相同的問題,則可能需要把所有的3000個(gè)過程或函數(shù)統(tǒng)
統(tǒng)檢查一遍,兩者在工作量、效率和難易程度方面的差別是不信而喻的。
聲明:本網(wǎng)站尊重并保護(hù)知識(shí)產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護(hù)條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請(qǐng)?jiān)谝粋€(gè)月內(nèi)通知我們,我們會(huì)及時(shí)刪除。
蜀ICP備2020033479號(hào)-4 Copyright ? 2016 學(xué)習(xí)鳥. 頁面生成時(shí)間:2.626秒