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