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