對象和面向?qū)ο蟪绦蛟O(shè)計_第1頁
對象和面向?qū)ο蟪绦蛟O(shè)計_第2頁
對象和面向?qū)ο蟪绦蛟O(shè)計_第3頁
對象和面向?qū)ο蟪绦蛟O(shè)計_第4頁
免費預(yù)覽已結(jié)束,剩余2頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、對象和面向?qū)ο蟪绦蛟O(shè)計一、對象( object ) 對象。在面向?qū)ο缶幊讨?,由?dāng)作完整實體的操作和數(shù)據(jù)組成的變量。對象是基于特定模型的,在對象中客戶使用對象的服務(wù)通過由一組方法或相關(guān)函數(shù)的接口訪問對象的數(shù)據(jù)。然后客戶端可以調(diào)用這些方法執(zhí)行某中操作。對象是在面向?qū)ο蟪绦蚓幹浦校衍浖蛩闾幚淼默F(xiàn)實世界中存在的物理性的 , 或是抽象的實體作為屬性 ( 數(shù)據(jù) ) 和操作 ( 方法 ) 的集合模型化做,在計算機上再現(xiàn)的東西。定義 object 模型為 class 。把按照 class 實際在計算機存儲器上展開的 object 稱為 instance( 實體 ), 但一般多以這個 instance 的意

2、義稱為 object 。在 V 和 java 開發(fā)中 Object 類型是所有類的父類,也就是說 Object 是高度抽象的一個類,它具有所有類的功能特性,這對我們的開發(fā)帶來了很多方便,比如,我們可以使用 Object 來聲明一個未知的類型,以用來為我們以后接受各種類型是值作準(zhǔn)備,也就是泛型。 二、面向?qū)ο蟪绦蛟O(shè)計1歷史回顧1967 年挪威計算中心的Kisten Nygaard和Ole Johan Dahl開發(fā)了 Simula67 語言,它提供了比子程序更高一級的抽象和封裝,引入了數(shù)據(jù)抽象和類的概念,它被認(rèn)為是第一個面向?qū)ο笳Z言。 20 世紀(jì) 70 年代初, Palo Alto 研究中心的 A

3、lan Kay 所在的研究小組開發(fā)出 Smalltalk 語言,之后又開發(fā)出Smalltalk-80 , Smalltalk-80 被認(rèn)為是最純正的面向?qū)ο笳Z言,它對后來出現(xiàn)的面向?qū)ο笳Z言,如 Object-C ,C+,Self ,Eiffl 都產(chǎn)生了深遠的影響。隨著面向?qū)ο笳Z言的出現(xiàn),面向?qū)ο蟪绦蛟O(shè)計也就應(yīng)運而生且得到迅速發(fā)展。之后,面向?qū)ο蟛粩嘞蚱渌A段滲透, 1980 年 Grady Booch 提出了面向?qū)ο笤O(shè)計的概念,之后面向?qū)ο蠓治鲩_始。 1985 年,第一個商用面向?qū)ο髷?shù)據(jù)庫問世。 1990 年以來,面向?qū)ο蠓治?、測試、度量和管理等研究都得到長足發(fā)展。實際上,“對象”和“對象的屬

4、性”這樣的概念可以追溯到20 世紀(jì) 50 年代初,它們首先出現(xiàn)于關(guān)于人工智能的早期著作中。但是出現(xiàn)了面向?qū)ο笳Z言之后,面向?qū)ο笏枷氩诺玫搅搜杆俚陌l(fā)展。過去的幾十年中,程序設(shè)計語言對抽象機制的支持程度不斷提高:從機器語言到匯編語言,到高級語言,直到面向?qū)ο笳Z言。匯編語言出現(xiàn)后,程序員就避免了直接使用0-1 ,而是利用符號來表示機器指令,從而更方便地編寫程序;當(dāng)程序規(guī)模繼續(xù)增長的時候,出現(xiàn)了 Fortran 、C、Pascal 等高級語言,這些高級語言使得編寫復(fù)雜的程序變得容易,程序員們可以更好地對付日益增加的復(fù)雜性。但是,如果軟件系統(tǒng)達到一定規(guī)模,即使應(yīng)用結(jié)構(gòu)化程序設(shè)計方法,局勢仍將變得不可控制

5、。作為一種降低復(fù)雜性的工具,面向?qū)ο笳Z言產(chǎn)生了,面向?qū)ο蟪绦蛟O(shè)計也隨之產(chǎn)生。2面向?qū)ο蟪绦蛟O(shè)計的基本概念面向?qū)ο蟪绦蛟O(shè)計中的概念主要包括:對象、類、數(shù)據(jù)抽象、繼承、動態(tài)綁定、數(shù)據(jù)封裝、多態(tài)性、消息傳遞。通過這些概念面向?qū)ο蟮乃枷氲玫搅司唧w的體現(xiàn)。1)對象對象是運行期的基本實體,它是一個封裝了數(shù)據(jù)和操作這些數(shù)據(jù)的代碼的邏輯實體。2)類類是具有相同類型的對象的抽象。一個對象所包含的所有數(shù)據(jù)和代碼可以通過類來構(gòu)造。3)封裝封裝是將數(shù)據(jù)和代碼捆綁到一起,避免了外界的干擾和不確定性。對象的某些數(shù)據(jù)和代碼可以是私有的,不能被外界訪問,以此實現(xiàn)對數(shù)據(jù)和代碼不同級別的訪問權(quán)限。4)繼承繼承是讓某個類型的對象獲

6、得另一個類型的對象的特征。通過繼承可以實現(xiàn)代碼的重用:從已存在的類派生出的一個新類將自動具有原來那個類的特性,同時,它還可以擁有自己的新特性。5)多態(tài)多態(tài)是指不同事物具有不同表現(xiàn)形式的能力。多態(tài)機制使具有不同內(nèi)部結(jié)構(gòu)的對象可以共享相同的外部接口,通過這種方式減少代碼的復(fù)雜度。6)動態(tài)綁定綁定指的是將一個過程調(diào)用與相應(yīng)代碼鏈接起來的行為。動態(tài)綁定是指與給定的過程調(diào)用相關(guān)聯(lián)的代碼只有在運行期才可知的一種綁定,它是多態(tài)實現(xiàn)的具體形式。7)消息傳遞對象之間需要相互溝通,溝通的途徑就是對象之間收發(fā)信息。消息內(nèi)容包括接收消息的對象的標(biāo)識,需要調(diào)用的函數(shù)的標(biāo)識,以及必要的信息。消息傳遞的概念使得對現(xiàn)實世界的

7、描述更容易。3面向?qū)ο笳Z言一個語言要稱為面向?qū)ο笳Z言必須支持幾個主要面向?qū)ο蟮母拍?。根?jù)支持程度的不同,通常所說的面向?qū)ο笳Z言可以分成兩類:基于對象的語言,面向?qū)ο蟮恼Z言。基于對象的語言僅支持類和對象,而面向?qū)ο蟮恼Z言支持的概念包括:類與對象、繼承、多態(tài)。舉例來說, Ada就是一個典型的基于對象的語言,因為它不支持繼承、多態(tài),此外其他基于對象的語言還有 Alphard 、CLU、 Modula。面向?qū)ο蟮恼Z言中一部分是新發(fā)明的語言,如 Smalltalk 、 EuclidJava,這些語言本身往往吸取了其他語言的精華,而又盡量剔除他們的不足,因此面向?qū)ο蟮奶卣魈貏e明顯,充滿了蓬勃的生機;另外一

8、些則是對現(xiàn)有的語言進行改造,增加面向?qū)ο蟮奶卣餮莼鴣淼?。如?Pascal 發(fā)展而來的 Object Pascal ,由 C 發(fā)展而來的 Objective-C ,C+,由 Ada發(fā)展而來的 Ada95 等,這些語言保留著對原有語言的兼容,并不是純粹的面向?qū)ο笳Z言,但由于其前身往往是有一定影響的語言,因此這些語言依然寶刀不老,在程序設(shè)計語言中占有十分重要的地位。4面向?qū)ο蟪绦蛟O(shè)計的優(yōu)點面向?qū)ο蟪霈F(xiàn)以前,結(jié)構(gòu)化程序設(shè)計是程序設(shè)計的主流,結(jié)構(gòu)化程序設(shè)計又稱為面向過程的程序設(shè)計。在面向過程程序設(shè)計中,問題被看作一系列需要完成的任務(wù),函數(shù)(在此泛指例程、函數(shù)、過程)用于完成這些任務(wù),解決問題的焦點集

9、中于函數(shù)。其中函數(shù)是面向過程的,即它關(guān)注如何根據(jù)規(guī)定的條件完成指定的任務(wù)。在多函數(shù)程序中,許多重要的數(shù)據(jù)被放置在全局?jǐn)?shù)據(jù)區(qū),這樣它們可以被所有的函數(shù)訪問。每個函數(shù)都可以具有它們自己的局部數(shù)據(jù)。下圖顯示了一個面向過程程序中函數(shù)和數(shù)據(jù)的關(guān)系。圖 1 面向過程程序設(shè)計中函數(shù)和數(shù)據(jù)的關(guān)系示例這種結(jié)構(gòu)很容易造成全局?jǐn)?shù)據(jù)在無意中被其他函數(shù)改動,因而程序的正確性不易保證。面向?qū)ο蟪绦蛟O(shè)計的出發(fā)點之一就是彌補面向過程程序設(shè)計中的一些缺點:對象是程序的基本元素,它將數(shù)據(jù)和操作緊密地連結(jié)在一起,并保護數(shù)據(jù)不會被外界的函數(shù)意外地改變。下圖顯示了一個面向?qū)ο蟪绦蛑袑ο笈c函數(shù)和數(shù)據(jù)的關(guān)系。圖 2 面向?qū)ο蟪绦蛟O(shè)計中函數(shù)

10、和數(shù)據(jù)的關(guān)系示例比較面向?qū)ο蟪绦蛟O(shè)計和面向過程程序設(shè)計,還可以得到面向?qū)ο蟪绦蛟O(shè)計的其他優(yōu)點:1)數(shù)據(jù)抽象的概念可以在保持外部接口不變的情況下改變內(nèi)部實現(xiàn),從而減少甚至避免對外界的干擾;2)通過繼承大幅減少冗余的代碼,并可以方便地擴展現(xiàn)有代碼,提高編碼效率,也減低了出錯概率,降低軟件維護的難度;3)結(jié)合面向?qū)ο蠓治?、面向?qū)ο笤O(shè)計,允許將問題域中的對象直接映射到程序中,減少軟件開發(fā)過程中中間環(huán)節(jié)的轉(zhuǎn)換過程;4)通過對對象的辨別、劃分可以將軟件系統(tǒng)分割為若干相對為獨立的部分,在一定程度上更便于控制軟件復(fù)雜度;6)以對象為中心的設(shè)計可以幫助開發(fā)人員從靜態(tài)(屬性)和動態(tài)(方法)兩個方面把握問題,從而更

11、好地實現(xiàn)系統(tǒng);7)通過對象的聚合、聯(lián)合可以在保證封裝與抽象的原則下實現(xiàn)對象在內(nèi)在結(jié)構(gòu)以及外在功能上的擴充,從而實現(xiàn)對象由低到高的升級。面對對象的程序設(shè)計方法在數(shù)據(jù)輸入模塊內(nèi)部設(shè)計中,采用面向?qū)ο蟮脑O(shè)計方法。 6 面向?qū)ο蟮幕靖拍钊缦拢簩ο螅簩ο笫且芯康娜魏问挛?。從一本書到一家圖書館,單的整數(shù)到整數(shù)列龐大的數(shù)據(jù)庫、極其復(fù)雜的自動化工廠、航天飛機都可看作對象,它不僅能表示有形的實體,也能表示無形的(抽象的)規(guī)則、計劃或事件。對象由數(shù)據(jù)(描述事物的屬性)和作用于數(shù)據(jù)的操作(體現(xiàn)事物的行為)構(gòu)成一獨立整體。從程序設(shè)計者來看,對象是一個程序模塊,從用戶來看,對象為他們提供所希望的行為。在對內(nèi)的操作通

12、常稱為方法。類:類是對象的模板。即類是對一組有相同數(shù)據(jù)和相同操作的對象的定義,一個類所包含的方法和數(shù)據(jù)描述一組對象的共同屬性和行為。類是在對象之上的抽象,對象則是類的具體化,是類的實例。類可有其子類,也可有其它類,形成類層次結(jié)構(gòu)。消息:消息是對象之間進行通信的一種規(guī)格說明。一般它由三部分組成:接收消息的對象、消息名及實際變元。面向?qū)ο笾饕卣鳎悍庋b性:封裝是一種信息隱蔽技術(shù),它體現(xiàn)于類的說明,是對象的重要特性。封裝使數(shù)據(jù)和加工該數(shù)據(jù)的方法(函數(shù))封裝為一個整體,以實現(xiàn)獨立性很強的模塊,使得用戶只能見到對象的外特性(對象能接受哪些消息,具有那些處理能力),而對象的內(nèi)特性(保存內(nèi)部狀態(tài)的私有數(shù)據(jù)和

13、實現(xiàn)加工能力的算法)對用戶是隱蔽的。封裝的目的在于把對象的設(shè)計者和對象者的使用分開,使用者不必知曉行為實現(xiàn)的細節(jié),只須用設(shè)計者提供的消息來訪問該對象。繼承性:繼承性是子類自動共享父類之間數(shù)據(jù)和方法的機制。它由類的派生功能體現(xiàn)。一個類直接繼承其它類的全部描述,同時可修改和擴充。繼承具有傳遞性。繼承分為單繼承(一個子類只有一父類)和多重繼承(一個類有多個父類)。類的對象是各自封閉的,如果沒繼承性機制,則類對象中數(shù)據(jù)、方法就會出現(xiàn)大量重復(fù)。繼承不僅支持系統(tǒng)的可重用性,而且還促進系統(tǒng)的可擴充性。多態(tài)性:對象根據(jù)所接收的消息而做出動作。同一消息為不同的對象接受時可產(chǎn)生完全不同的行動,這種現(xiàn)象稱為多態(tài)性。

14、利用多態(tài)性用戶可發(fā)送一個通用的信息,而將所有的實現(xiàn)細節(jié)都留給接受消息的對象自行決定,如是,同一消息即可調(diào)用不同的方法。例如: Print 消息被發(fā)送給一圖或表時調(diào)用的打印方法與將同樣的 Print 消息發(fā)送給一正文文件而調(diào)用的打印方法會完全不同。多態(tài)性的實現(xiàn)受到繼承性的支持,利用類繼承的層次關(guān)系,把具有通用功能的協(xié)議存放在類層次中盡可能高的地方,而將實現(xiàn)這一功能的不同方法置于較低層次,這樣,在這些低層次上生成的對象就能給通用消息以不同的響應(yīng)。在 OOPL中可通過在派生類中重定義基類函數(shù)(定義為重載函數(shù)或虛函數(shù))來實現(xiàn)多態(tài)性。綜上可知,在面對對象方法中,對象和傳遞消息分別表現(xiàn)事物及事物間相互聯(lián)系

15、的概念。類和繼承是是適應(yīng)人們一般思維方式的描述范式。方法是允許作用于該類對象上的各種操作。這種對象、類、消息和方法的程序設(shè)計范式的基本點在于對象的封裝性和類的繼承性。通過封裝能將對象的定義和對象的實現(xiàn)分開,通過繼承能體現(xiàn)類與類之間的關(guān)系,以及由此帶來的動態(tài)聯(lián)編和實體的多態(tài)性,從而構(gòu)成了面向?qū)ο蟮幕咎卣?。面向?qū)ο笤O(shè)計是一種把面向?qū)ο蟮乃枷霊?yīng)用于軟件開發(fā)過程中,指導(dǎo)開發(fā)活動的系統(tǒng)方法,是建立在“對象”概念基礎(chǔ)上的方法學(xué)。對象是由數(shù)據(jù)和容許的操作組成的封裝體,與客觀實體有直接對應(yīng)關(guān)系,一個對象類定義了具有相似性質(zhì)的一組對象。而每繼承性是對具有層次關(guān)系的類的屬性和操作進行共享的一種方式。所謂面向?qū)ο缶褪腔趯ο蟾拍?,以對象為中心,以類和繼承為構(gòu)造機制,來認(rèn)識、理解、刻畫客觀世界和設(shè)計、構(gòu)建相應(yīng)的軟件系統(tǒng)。按照 Bjarne STroustRUP 的說法,面向?qū)ο蟮木幊谭妒剑簂 決定你要的類;2 給每個類提供完整的一組操作;3 明確地使用繼承來表現(xiàn)共同點。由這個定義,我們可以看出:面向?qū)ο笤O(shè)計就是“根據(jù)需求決定所需的類、類的操作以及類之間關(guān)聯(lián)的過程”。面向?qū)ο笤O(shè)計方法的特點和面臨的問題面向?qū)ο笤O(shè)計方法以對象為基礎(chǔ),利用特定的軟件工具直接完成從對象客體的描述到軟件結(jié)構(gòu)之間的轉(zhuǎn)換。這是面向?qū)ο笤O(shè)計方法最主要的特點和成就。面向?qū)ο笤O(shè)計方法

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論