![面向?qū)ο蠓治雠c設(shè)計(jì) 課件 孫學(xué)波 第1-7章 面向?qū)ο箝_發(fā)方法- 狀態(tài)圖與活動(dòng)圖建模_第1頁](http://file4.renrendoc.com/view12/M02/0A/14/wKhkGWYnJoGAfB_HAACX8b0avLM758.jpg)
![面向?qū)ο蠓治雠c設(shè)計(jì) 課件 孫學(xué)波 第1-7章 面向?qū)ο箝_發(fā)方法- 狀態(tài)圖與活動(dòng)圖建模_第2頁](http://file4.renrendoc.com/view12/M02/0A/14/wKhkGWYnJoGAfB_HAACX8b0avLM7582.jpg)
![面向?qū)ο蠓治雠c設(shè)計(jì) 課件 孫學(xué)波 第1-7章 面向?qū)ο箝_發(fā)方法- 狀態(tài)圖與活動(dòng)圖建模_第3頁](http://file4.renrendoc.com/view12/M02/0A/14/wKhkGWYnJoGAfB_HAACX8b0avLM7583.jpg)
![面向?qū)ο蠓治雠c設(shè)計(jì) 課件 孫學(xué)波 第1-7章 面向?qū)ο箝_發(fā)方法- 狀態(tài)圖與活動(dòng)圖建模_第4頁](http://file4.renrendoc.com/view12/M02/0A/14/wKhkGWYnJoGAfB_HAACX8b0avLM7584.jpg)
![面向?qū)ο蠓治雠c設(shè)計(jì) 課件 孫學(xué)波 第1-7章 面向?qū)ο箝_發(fā)方法- 狀態(tài)圖與活動(dòng)圖建模_第5頁](http://file4.renrendoc.com/view12/M02/0A/14/wKhkGWYnJoGAfB_HAACX8b0avLM7585.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第1章面向?qū)ο箝_發(fā)方法學(xué)習(xí)目標(biāo)
理解對(duì)象的概念
了解面向?qū)ο筌浖_發(fā)方法
理解面向?qū)ο蟮拈_發(fā)過程第1章面向?qū)ο箝_發(fā)方法本章的主要內(nèi)容:面向?qū)ο蠓椒ǖ幕靖拍?,及其?nèi)涵與外延。軟件開發(fā)方法的發(fā)展過程和典型的面向?qū)ο箝_發(fā)方法。概括性地介紹面向?qū)ο蟮能浖_發(fā)過程,如面向?qū)ο蠓治龊兔嫦驅(qū)ο笤O(shè)計(jì)等。1.1對(duì)象及對(duì)象模型對(duì)象模型是計(jì)算機(jī)科學(xué)中的一個(gè)基本概念,它不僅僅適用于程序設(shè)計(jì)語言,也適用于軟件系統(tǒng)的用戶界面、數(shù)據(jù)庫(kù)甚至計(jì)算機(jī)架構(gòu)的設(shè)計(jì)。這種廣泛適用的原因就是,面向?qū)ο竽軌驇椭覀兲幚矶喾N不同系統(tǒng)中固有的復(fù)雜性。面向?qū)ο笙到y(tǒng)分析和設(shè)計(jì)代表了一種漸進(jìn)式的開發(fā)方式,它并沒有完全拋棄傳統(tǒng)的方法的優(yōu)點(diǎn),而是建立在有效的傳統(tǒng)方法基礎(chǔ)之上的一種新方法。例如,傳統(tǒng)方法中的“算法分解”技術(shù)在處理復(fù)雜程度較高的系統(tǒng)時(shí)是有局限性的,而面向?qū)ο蠹夹g(shù)則可以更有效地幫助人們解決這一問題。1.1.1對(duì)象的基本概念1.對(duì)象和類的定義在面向?qū)ο蠓椒ㄖ?,人們?cè)?jīng)給出了多個(gè)不同的對(duì)象定義。這些定義的共同點(diǎn)是均把對(duì)象看作是一個(gè)封裝了數(shù)據(jù)和操作的實(shí)體。GradyBooch給出的對(duì)象定義如下:所謂對(duì)象(Object)就是將一組數(shù)據(jù)和與這組數(shù)據(jù)有關(guān)的操作組裝在一起所形成的一個(gè)完整的實(shí)體。對(duì)象中的數(shù)據(jù)被稱為對(duì)象的屬性,一個(gè)對(duì)象的所有屬性的值被稱為這個(gè)對(duì)象的狀態(tài)。對(duì)象的操作則被稱為對(duì)象的行為,也稱為對(duì)象的外部接口。1.1.1對(duì)象的基本概念1.對(duì)象和類的定義在特定的軟件系統(tǒng)中,對(duì)象表示的是軟件系統(tǒng)中存在的某個(gè)特定實(shí)體,它們可以有不同的類型,大多數(shù)對(duì)象通常是一種對(duì)現(xiàn)實(shí)世界客觀事物的計(jì)算機(jī)描述。例如,圖書管理系統(tǒng)中的一本圖書,一個(gè)讀者,或一次借閱記錄都可以被視為是一個(gè)對(duì)象。它們就分別表示了現(xiàn)實(shí)世界中一個(gè)圖書館的一本書、一個(gè)讀者和一個(gè)借閱事件。但這些對(duì)象并不等同于現(xiàn)實(shí)世界中的實(shí)際事物,圖書管理系統(tǒng)中的這些對(duì)象只描述它們?cè)谟?jì)算機(jī)系統(tǒng)中的狀態(tài)和行為,因此它們不過是對(duì)現(xiàn)實(shí)世界中對(duì)應(yīng)的客觀實(shí)體的一種計(jì)算機(jī)描述而已。1.1.1對(duì)象的基本概念1.對(duì)象和類的定義一個(gè)現(xiàn)實(shí)的系統(tǒng)中,通常會(huì)有很多的對(duì)象,為了有效地管理這些對(duì)象并使之發(fā)揮作用,人們又從分類的角度出發(fā),給出了類的定義。類(class)可以被定義成具有某些相同的屬性和方法的全體對(duì)象構(gòu)成的集合。這個(gè)定義將類看成是對(duì)一組具有相同屬性和方法的對(duì)象的一種抽象描述,其本質(zhì)在于這些對(duì)象所具有的相同屬性和方法。因此,類也可以被定義成是一組屬性和方法構(gòu)成的一個(gè)整體。目前的各種程序設(shè)計(jì)語言中,就都采用了這樣的方式來定義類。1.1.1對(duì)象的基本概念1.對(duì)象和類的定義例如圖1-1就給出讀者、圖書和借閱這三個(gè)對(duì)象的一個(gè)抽象描述。它們分別表示了三個(gè)類,當(dāng)然也表示了這三個(gè)類之間的關(guān)系。圖1-1圖書管理系統(tǒng)中的圖書和讀者類圖1.1.1對(duì)象的基本概念1.對(duì)象和類的定義另外,從類與對(duì)象之間的關(guān)系的角度來看,類和對(duì)象顯然分別屬于兩個(gè)不同的抽象層次。與對(duì)象相比較,類處于較高的抽象層次;當(dāng)然,對(duì)象則處于較低的抽象層次。為了描述二者之間的層次關(guān)系,面向?qū)ο蠓椒ㄊ褂脤?shí)例的概念來描述這兩個(gè)不同的抽象之間的關(guān)系。將類看成一個(gè)對(duì)象集合時(shí),這個(gè)集合中的任何一個(gè)對(duì)象又可以被稱為這個(gè)類的一個(gè)實(shí)例(Instance)。顯然,一個(gè)類通常會(huì)有多個(gè)實(shí)例。特殊情況下,只有一個(gè)對(duì)象的類被稱為單件類。沒有實(shí)例的類則被稱為抽象類。1.1.1對(duì)象的基本概念1.對(duì)象和類的定義從這個(gè)概念出發(fā),還可以進(jìn)一步引申出實(shí)例化的概念,我們將創(chuàng)建類實(shí)例的過程稱為實(shí)例化。顯然,任何對(duì)象均需要一個(gè)實(shí)例化過程,這個(gè)過程可能簡(jiǎn)單,也可能很復(fù)雜。實(shí)例化過程的復(fù)雜度與類結(jié)構(gòu)的復(fù)雜度有關(guān)。從上述定義出發(fā),一個(gè)對(duì)象就是一個(gè)具有某種特定狀態(tài)和行為的實(shí)體。同時(shí),結(jié)構(gòu)和行為類似的對(duì)象又被定義在它們共同所屬的類中。實(shí)例和對(duì)象這兩個(gè)術(shù)語可以互換使用。對(duì)象可以表示現(xiàn)實(shí)世界中的各種事物,從簡(jiǎn)單的一個(gè)數(shù)字到一個(gè)復(fù)雜的系統(tǒng)等均可看作是一個(gè)對(duì)象。它既可以表示具體的事物,也可以表示抽象的邏輯事物,如一本圖書、一個(gè)業(yè)務(wù)規(guī)則、一份計(jì)劃或一個(gè)事件等。1.1.1對(duì)象的基本概念1.對(duì)象和類的定義在對(duì)象模型中,如果一個(gè)對(duì)象使用了另一個(gè)對(duì)象,則將使用者稱為客戶(client)對(duì)象,稱被使用者為服務(wù)器(server)對(duì)象。對(duì)于任何一個(gè)對(duì)象來說,這個(gè)對(duì)象中可以被調(diào)用的操作集合以及這些操作的合法調(diào)用順序被稱為對(duì)象的接口(interface)或協(xié)議(agreement)。這個(gè)協(xié)議描述了對(duì)象的動(dòng)作和反應(yīng)的方式,構(gòu)成了對(duì)象抽象的和完整的外部視圖。1.1.1對(duì)象的基本概念2對(duì)象的狀態(tài)對(duì)象的狀態(tài)(status)是指一個(gè)對(duì)象的所有屬性在某一時(shí)刻的取值或一個(gè)對(duì)象的某些屬性值所滿足的條件。顯然,任何對(duì)象的狀態(tài)都是由這個(gè)對(duì)象屬性值決定的。一般情況下,一個(gè)對(duì)象可能會(huì)有多個(gè)不同的狀態(tài)。例如,圖書管理系統(tǒng)中的圖書對(duì)象,就可能具有借出(Lend)、被預(yù)定(Reserve)和就緒(Ready)等幾種不同的狀態(tài)。1.1.1對(duì)象的基本概念2對(duì)象的狀態(tài)對(duì)于任何兩個(gè)對(duì)象來說,只有當(dāng)它們所擁有的屬性及屬性值均完全相同時(shí),才可以說這兩個(gè)對(duì)象的狀態(tài)完全相同,但值得注意的是,兩個(gè)狀態(tài)相同的對(duì)象不等同于它們是同一個(gè)對(duì)象。判斷兩個(gè)對(duì)象是否是相同的對(duì)象,不僅僅要看它們的屬性值,還要它們不同的存在時(shí)間和存在空間。1.1.1對(duì)象的基本概念2對(duì)象的狀態(tài)當(dāng)多個(gè)對(duì)象擁有相同的屬性定義,但屬性值卻不完全相同時(shí),我們只能說它們具有相同的表現(xiàn)形式,但不能說它們具有相同的狀態(tài)。當(dāng)多個(gè)對(duì)象不僅屬性值不同,而且擁有屬性定義也不盡相同時(shí),我們則說它們不僅狀態(tài)不同,并且它們的表現(xiàn)形式(或所屬的類)也不相同。1.1.1對(duì)象的基本概念3對(duì)象的行為軟件系統(tǒng)中,任何一個(gè)對(duì)象通常都不是孤立存在的,對(duì)象之間還會(huì)存在各種各樣的聯(lián)系和影響。我們將一個(gè)對(duì)象在其狀態(tài)發(fā)生某種改變或接收到某個(gè)外部消息時(shí)所進(jìn)行的動(dòng)作和做出反應(yīng)的方式稱為對(duì)象的行為(behaviour)。換句話來說,對(duì)象的行為代表了它們的外部可見的活動(dòng)。面向?qū)ο蠓椒ㄖ?,通常使用操作來描述?duì)象的行為。一個(gè)操作(Operation)可以定義成一個(gè)對(duì)象向外部提供的某種服務(wù),如果外部對(duì)象調(diào)用對(duì)象的某個(gè)操作,這就意味著被調(diào)用的對(duì)象將執(zhí)行這個(gè)操作中包含的動(dòng)作,并相應(yīng)地調(diào)整其自身的狀態(tài)。1.1.1對(duì)象的基本概念3對(duì)象的行為面向?qū)ο蠓椒ㄖ?,還可以使用消息(Message)的概念來描述對(duì)象之間的交互,并將消息傳遞作為對(duì)象之間惟一的交互方式。在面向?qū)ο笳Z言中,通常將調(diào)用一個(gè)對(duì)象的操作稱為向這個(gè)對(duì)象發(fā)送一個(gè)消息。消息和操作是密切相關(guān)的兩個(gè)不同概念。操作描述的是對(duì)象提供的外部服務(wù),消息描述的是兩個(gè)對(duì)象之間的一次交互。而二者之間又是密切相關(guān)的,即向一個(gè)對(duì)象發(fā)送一條消息就是調(diào)用這個(gè)對(duì)象的某個(gè)操作。因此,在一般情況下,可以不加區(qū)別地使用操作和消息這兩個(gè)術(shù)語。1.1.1對(duì)象的基本概念3對(duì)象的行為值得注意的是,消息傳遞只定義了對(duì)象行為的一個(gè)方面。另一方面,對(duì)象的行為還要受到對(duì)象自身狀態(tài)的影響。一個(gè)對(duì)象所表現(xiàn)出來的行為不僅取決于施加在該對(duì)象上面的操作,而且還取決于它的當(dāng)前狀態(tài)。換句話說,一個(gè)對(duì)象的狀態(tài)不僅包括它的屬性和屬性值,還包含它的先前行為的累積效果。例如:自動(dòng)飲料售貨機(jī)的使用方法:首先,顧客投入貨幣,然后選擇飲料,售貨機(jī)為顧客提供需要的飲料,顧客按找零按鈕,售貨機(jī)為顧客計(jì)算并返回余額。如果顧客先選擇飲料后投幣會(huì)發(fā)生什么?售貨機(jī)很可能會(huì)什么也不做,因?yàn)轭櫩瓦`反了它的基本操作流程。顧客選擇飲料時(shí)售貨機(jī)只是處于等待投幣的狀態(tài),此時(shí)售貨機(jī)很有可能會(huì)忽略或屏蔽了顧客選擇飲料的操作。1.1.1對(duì)象的基本概念3對(duì)象的行為操作的這種狀態(tài)相關(guān)特性引出了操作的前置條件和后置條件這兩個(gè)重要的概念。操作的前置條件(pre-condition)是指對(duì)象執(zhí)行這個(gè)操作時(shí)所必須具有的狀態(tài)或必須滿足的條件,違反了前置條件將導(dǎo)致該操作不能正常執(zhí)行。同樣,操作的后置條件(post-condition)當(dāng)然是指這個(gè)操作執(zhí)行完以后對(duì)象所應(yīng)處的狀態(tài)或滿足的條件,違反了后置條件意味著這個(gè)人操作沒有完成應(yīng)盡的責(zé)任。因此,為對(duì)象的操作建模時(shí),清楚地描述每個(gè)操作的前置條件和后置條件無疑是十分重要的。1.1.1對(duì)象的基本概念3對(duì)象的行為下面再來討論一下,操作的分類問題。一個(gè)對(duì)象通常會(huì)有多個(gè)操作,每個(gè)操作都代表了這個(gè)對(duì)象所屬的類提供給這個(gè)對(duì)象本身的一種服務(wù)。按照操作的作用,可以將操作劃分成構(gòu)造、析構(gòu)、修改、選擇和遍歷等五種不同的類型。其中構(gòu)造和析構(gòu)是缺省操作,分別用于對(duì)象的創(chuàng)建和銷毀,后三種類型則表示三種不同類型的常見操作。修改(modify)操作是一種能夠更改一個(gè)對(duì)象本身狀態(tài)的操作;選擇(select)或只讀(readonly)是指能夠訪問一個(gè)對(duì)象的狀態(tài),但并不更改這個(gè)狀態(tài)的操作;遍歷(thrughout)則是以某種方式訪問一個(gè)對(duì)象的所有組成部分的操作。1.1.1對(duì)象的基本概念3對(duì)象的行為軟件建模時(shí),通常應(yīng)該明確標(biāo)明操作的類型。程序設(shè)計(jì)語言通常提供了不同的語言機(jī)制來表示操作的這些類型。例如,C++程序語言就定義了特定的構(gòu)造函數(shù)和析構(gòu)函數(shù)的表示法,還提供了const關(guān)鍵字來定義選擇操作。進(jìn)一步,屬性和操作之間的關(guān)系也決定了各操作之間的執(zhí)行順序,這個(gè)執(zhí)行順序則構(gòu)成了對(duì)象的一種使用規(guī)則。對(duì)象建模時(shí),同樣也需要清楚地認(rèn)識(shí)和描述這個(gè)規(guī)則??梢哉f,系統(tǒng)中任何對(duì)象都定義或封裝了它自己的狀態(tài),系統(tǒng)所有的狀態(tài)都是由其對(duì)象所封裝的。但對(duì)象的狀態(tài)只是問題的一個(gè)方面,我們還必須要考慮對(duì)象的行為以及狀態(tài)和行為之間的相互影響。1.1.1對(duì)象的基本概念4角色和責(zé)任對(duì)于任何一個(gè)對(duì)象來說,它必然要承擔(dān)部分系統(tǒng)責(zé)任,責(zé)任(duty)表示了對(duì)象的一種目標(biāo)以及它在系統(tǒng)中的位置。一個(gè)對(duì)象必須為它所承擔(dān)的系統(tǒng)責(zé)任提供全部服務(wù)。當(dāng)一個(gè)對(duì)象承擔(dān)了較多的系統(tǒng)責(zé)任時(shí),就可能需要提供多組不同的方法以履行這些責(zé)任。此時(shí),按照責(zé)任對(duì)對(duì)象的這些方法進(jìn)行分組就顯得非常有意義了。這些分組劃分了對(duì)象的行為空間,也描述了一個(gè)對(duì)象可能承擔(dān)的多種系統(tǒng)責(zé)任。如果將對(duì)象承擔(dān)的不同的系統(tǒng)責(zé)任抽象成不同的角色(Role),那么,我們就得到了一個(gè)新的概念。這個(gè)概念定義了對(duì)象與它的客戶之間的契約的一種抽象。1.1.1對(duì)象的基本概念4角色和責(zé)任事實(shí)上,大多數(shù)對(duì)象都有可能承擔(dān)了多種不同的系統(tǒng)責(zé)任,或者說充當(dāng)了多種不同的系統(tǒng)角色。此時(shí),一個(gè)對(duì)象所扮演的角色即是動(dòng)態(tài)的,同時(shí)也是互斥的。總之,一個(gè)對(duì)象的狀態(tài)和行為共同決定了這個(gè)對(duì)象可以扮演的角色,這些角色又決定了這個(gè)對(duì)象它所承擔(dān)的系統(tǒng)責(zé)任。也就是說,角色代表了對(duì)對(duì)象的責(zé)任的一種抽象。1.1.1對(duì)象的基本概念5對(duì)象標(biāo)識(shí)符在面向?qū)ο笙到y(tǒng)中,一個(gè)對(duì)象通常對(duì)應(yīng)了現(xiàn)實(shí)世界的某個(gè)特定的物理或邏輯實(shí)體。現(xiàn)實(shí)世界中,不同的實(shí)體之間顯然應(yīng)該存在不同的區(qū)別。為了區(qū)別不同的對(duì)象,任何一個(gè)對(duì)象均需要擁有一個(gè)對(duì)象標(biāo)識(shí)符。面向?qū)ο蠓椒ㄖ?,并沒有明確規(guī)定對(duì)象標(biāo)識(shí)符的表示方法,但實(shí)際的軟件系統(tǒng)中,對(duì)象標(biāo)識(shí)符又是一個(gè)必須關(guān)注和實(shí)現(xiàn)的概念??梢允褂枚喾N方法實(shí)現(xiàn)對(duì)象標(biāo)識(shí)符,如為對(duì)象定義的一個(gè)屬性、使用的程序設(shè)計(jì)語言表示的變量名等。1.1.1對(duì)象的基本概念5對(duì)象標(biāo)識(shí)符例如,可以將對(duì)象標(biāo)識(shí)符定義為對(duì)象的一個(gè)內(nèi)部屬性,這個(gè)內(nèi)部屬性不一定具有問題域方面的含義,其主要作用在于將當(dāng)前對(duì)象與其它對(duì)象區(qū)別開來。例如,學(xué)生的學(xué)號(hào)、社會(huì)保險(xiǎn)號(hào)碼或居民身份證號(hào)等。在應(yīng)用程序中,可以使用對(duì)象的變量名作為對(duì)象標(biāo)識(shí)符,用來區(qū)分不同的對(duì)象,這實(shí)際上是把尋址方法作為對(duì)象標(biāo)識(shí)符。在數(shù)據(jù)庫(kù)系統(tǒng)中,還可以使用“主鍵”作為對(duì)象標(biāo)識(shí)符,來區(qū)分不同的數(shù)據(jù)實(shí)體(持久對(duì)象),這實(shí)際上是將對(duì)象的某個(gè)(或某性)屬性作為標(biāo)識(shí)符,這種表示方法具有一定的業(yè)務(wù)邏輯方面的意義。1.1.1對(duì)象的基本概念5對(duì)象標(biāo)識(shí)符總之,對(duì)象標(biāo)識(shí)符僅僅作為面向?qū)ο蠓椒ㄖ械囊粋€(gè)概念,通常并不代表程序設(shè)計(jì)語言中的“標(biāo)識(shí)符”意義或數(shù)據(jù)庫(kù)中“主鍵”意義上的標(biāo)識(shí)符。面向?qū)ο笙到y(tǒng)中,如果不能夠正確區(qū)分對(duì)象的名稱和對(duì)象本身,這將會(huì)導(dǎo)致面向?qū)ο蟪绦蛟O(shè)計(jì)中的許多錯(cuò)誤。每個(gè)對(duì)象都需要有一個(gè)惟一的標(biāo)識(shí)符,對(duì)象標(biāo)識(shí)符在其整個(gè)生命周期中都將被保持的,即使它的狀態(tài)發(fā)生了某種改變時(shí)也是如此。1.1.2對(duì)象模型的構(gòu)成要素對(duì)象模型是面向?qū)ο蠓椒ǖ倪壿嫽A(chǔ)。從概念上來說,對(duì)象模型包括抽象、封裝、模塊化、層次結(jié)構(gòu)、類型、并發(fā)和持久等七個(gè)基本構(gòu)成要素,其中抽象、封裝、模塊化、層次結(jié)構(gòu)為主要要素,類型、并發(fā)和持久為次要要素。其中主要要素是指模型必須包含的要素,缺少任何一個(gè)主要要素,這個(gè)模型都不再被稱為是面向?qū)ο蟮哪P?。次要要素是指這些要素是對(duì)象模型的有用組成部分,但不是本質(zhì)要素。1.1.2對(duì)象模型的構(gòu)成要素正確地理解這個(gè)概念框架,對(duì)于使用面向?qū)ο蠓椒ㄩ_發(fā)應(yīng)用系統(tǒng)具有非常重要的理論意義和現(xiàn)實(shí)意義。反之,即使使用了面向?qū)ο蟪绦蛟O(shè)計(jì)語言,但編寫出來的程序可能仍然不具備面向?qū)ο蟮奶卣?,很可能與傳統(tǒng)的結(jié)構(gòu)化應(yīng)用程序沒有太大區(qū)別。更重要的是,使用面向?qū)ο蠹夹g(shù)的主要目的是為了更好地把握問題的復(fù)雜性。1.1.2對(duì)象模型的構(gòu)成要素1抽象抽象(abstract)是人們分析復(fù)雜事物是常用的最基本的思維方式,也是人正確認(rèn)識(shí)客觀事物,解決問題的重要方法。抽象也可以看成是對(duì)客觀事物的一種簡(jiǎn)單的概述性描述,通常僅關(guān)注客觀事物的重要細(xì)節(jié),而忽略事物的非本質(zhì)特征的細(xì)節(jié)或枝節(jié)。對(duì)于一個(gè)概念,只有當(dāng)它可以獨(dú)立于最終使用和實(shí)現(xiàn)它的機(jī)制來描述、理解和分析時(shí),我們才說這個(gè)概念是抽象的。1.1.2對(duì)象模型的構(gòu)成要素1抽象例如,數(shù)據(jù)結(jié)構(gòu)中,線性表對(duì)具有線性關(guān)系的數(shù)據(jù)集合及其處理的一個(gè)抽象描述。這個(gè)概念抓住了數(shù)據(jù)元素之間的線性關(guān)系及其處理算法等這一本質(zhì)特征,而忽略了其元素的數(shù)據(jù)類型、存儲(chǔ)結(jié)構(gòu)和算法的實(shí)現(xiàn)等具體特征。這個(gè)抽象使我們可以抓住問題的本質(zhì)特征而忽略問題具體的細(xì)枝末節(jié),從而是我們可以在更高的層次上討論要解決的問題。也可以說,抽象是對(duì)客觀事物所具有的基本特征的概念性描述,通過抽象可以將一種事物與其它事物嚴(yán)格區(qū)分開來。抽象也是一種分析問題和解決問題的基本方法,1.1.2對(duì)象模型的構(gòu)成要素1抽象面向?qū)ο蠓椒ㄖ校瑢?duì)象、屬性、方法、類、責(zé)任、職責(zé)和接口等都是運(yùn)用抽象思維得出的抽象概念,正是這些概念構(gòu)成了面向?qū)ο蠓椒ǖ幕驹~匯。面向?qū)ο蠓椒ㄒ蠼H藛T能夠正確地運(yùn)用抽象這一基本的思維方式,正確認(rèn)識(shí)問題域中所面臨的問題及其解決方法。從給定問題域中分析出一組正確的抽象,則是面向?qū)ο蠓治雠c設(shè)計(jì)的核心問題。1.1.2對(duì)象模型的構(gòu)成要素1抽象面向?qū)ο蠓治龅膶?shí)質(zhì),就是從問題域中抽象出對(duì)實(shí)現(xiàn)系統(tǒng)目標(biāo)有意義的對(duì)象。這些對(duì)象可能包括問題域中的實(shí)體對(duì)象、通用操作對(duì)象、業(yè)務(wù)邏輯對(duì)象、偶然對(duì)象等,因此,面向?qū)ο蠓治龅倪^程的實(shí)質(zhì)就是一系列的抽象過程。作為一種最基本的思維方式,抽象的運(yùn)用范圍不僅僅在于發(fā)現(xiàn)對(duì)象,而是更廣泛地存在于軟件開發(fā)過程中所涉及到的每個(gè)不同的領(lǐng)域。1.1.2對(duì)象模型的構(gòu)成要素2封裝確定了一個(gè)對(duì)象的屬性和行為,僅僅給出了這個(gè)對(duì)象在某種意義上的一個(gè)抽象,還需要進(jìn)一步給出其具體實(shí)現(xiàn)。一個(gè)對(duì)象通??梢杂枚喾N方式實(shí)現(xiàn),對(duì)于對(duì)象的客戶來說,選擇什么樣的實(shí)現(xiàn)方式并不重要,對(duì)象只要提供對(duì)外的契約就可以了。換句話說,對(duì)象的抽象應(yīng)該優(yōu)先于它的實(shí)現(xiàn)。而實(shí)現(xiàn)則應(yīng)該僅作為這種抽象后面的私有信息并對(duì)絕大多數(shù)客戶隱藏。1.1.2對(duì)象模型的構(gòu)成要素2封裝所謂的封裝(encapsulation)是指:在構(gòu)造對(duì)象的結(jié)構(gòu)和行為的過程中,需要明確地定義對(duì)象的外部可見部分和不可見的部分,這可以使對(duì)象的接口部分和實(shí)現(xiàn)部分相分離,從而降低對(duì)象與其客戶之間的耦合。例如,在C++程序設(shè)計(jì)語言中,類中的屬性和方法的可見性(公共、私有和保護(hù))實(shí)際上就是封裝的一種實(shí)現(xiàn)機(jī)制。1.1.2對(duì)象模型的構(gòu)成要素2封裝抽象和封裝是兩個(gè)互補(bǔ)的概念,抽象通常描述的是對(duì)象的外部可見行為,而封裝關(guān)注的則是這些外部行為的實(shí)現(xiàn)。封裝一般通過信息隱藏加以實(shí)現(xiàn),信息隱藏是將那些不涉及對(duì)象本質(zhì)特征的秘密都隱藏起來的過程。1.1.2對(duì)象模型的構(gòu)成要素2封裝通常情況下,一個(gè)對(duì)象的結(jié)構(gòu)是對(duì)外不可見(隱藏)的,其方法的實(shí)現(xiàn)也是外部不可見(隱藏)的,只有其外部行為是外部可見的。抽象描述的是對(duì)象能夠做什么,而封裝則是為了使程序可以借助最少的工作進(jìn)行可靠地修改。1.1.2對(duì)象模型的構(gòu)成要素2封裝例如,在設(shè)計(jì)數(shù)據(jù)庫(kù)應(yīng)用程序時(shí),通常不需要關(guān)心數(shù)據(jù)在數(shù)據(jù)庫(kù)中的物理表示,而是僅對(duì)數(shù)據(jù)的邏輯結(jié)構(gòu)進(jìn)行編程。這確保了數(shù)據(jù)庫(kù)數(shù)據(jù)的物理獨(dú)立性。在實(shí)踐中,每個(gè)類必須有接口和實(shí)現(xiàn)兩個(gè)部分。類的接口描述了它的外部視圖,包含了這個(gè)類所有實(shí)例的共同行為的抽象。類的實(shí)現(xiàn)包括抽象的表示以及實(shí)現(xiàn)期望的行為的機(jī)制。通過類的接口,我們能知道客戶可以對(duì)這個(gè)類的所有實(shí)例做出哪些假定。實(shí)現(xiàn)封裝了細(xì)節(jié),客戶不能對(duì)這些細(xì)節(jié)做出任何假定。1.1.2對(duì)象模型的構(gòu)成要素2封裝信息隱藏的另一個(gè)相關(guān)的問題是,隱藏還具有層次性。即在一個(gè)抽象層次被隱藏起來的東西,在另一個(gè)抽象層次里可能代表了外部視圖,此時(shí),對(duì)象的內(nèi)部表示就可能被暴露出來。1.1.2對(duì)象模型的構(gòu)成要素2封裝例如,在C++程序設(shè)計(jì)語言中,類屬性和方法的可見性分為公共、私有和保護(hù)等三種,事實(shí)上,C++還通過友元機(jī)制為友元類實(shí)例提供了一種更寬泛的接口。這使得C++定義了公共、私有、保護(hù)和友元等多個(gè)層次的封裝性。大多數(shù)情況下,隱藏層次的劃分雖然為對(duì)象的設(shè)計(jì)提供了比較充分的支持,但同時(shí)也會(huì)為設(shè)計(jì)帶來額外的復(fù)雜性。所以,封裝層次的運(yùn)用并不保證設(shè)計(jì)出高質(zhì)量的軟件系統(tǒng)。1.1.2對(duì)象模型的構(gòu)成要素3模塊化模塊化可以被看成是系統(tǒng)的一種屬性,這個(gè)屬性使得系統(tǒng)可以被分解成一組高內(nèi)聚和低耦合的模塊。模塊化過程中,抽象、封裝和模塊化的原則是相輔相承的。一個(gè)對(duì)象圍繞單一的抽象提供了一個(gè)明確的邊界,封裝和模塊化都圍繞這種抽象提供了屏障。1.1.2對(duì)象模型的構(gòu)成要素3模塊化結(jié)構(gòu)化方法中,模塊化主要是按照高內(nèi)聚低耦合的設(shè)計(jì)原則對(duì)程序進(jìn)行分組。而在面向?qū)ο蠓椒ㄖ校K化的任務(wù)通常演變成了對(duì)類和對(duì)象通過打包(package)的方式來進(jìn)行分組,此時(shí)每一個(gè)包可以被定義成若干個(gè)類(或?qū)ο螅?gòu)成的集合,而且包里面還可以包含其它的包,這與結(jié)構(gòu)化設(shè)計(jì)的模塊化有著明顯的不同。1.1.2對(duì)象模型的構(gòu)成要素3模塊化從分支策略的角度來看,將一個(gè)程序劃分成若干個(gè)不同的模塊可以在一定程度上降低程序的復(fù)雜性。但更重要的是,模塊劃分可以在程序內(nèi)部定義出一些結(jié)構(gòu)良好的、具有清晰定義的模塊邊界。這些模塊邊界(或接口)對(duì)于理解程序是非常有價(jià)值的。1.1.2對(duì)象模型的構(gòu)成要素3模塊化模塊化的設(shè)計(jì)原則通常包括:為降低軟件的開發(fā)和維護(hù)成本,每個(gè)模塊必須可以被獨(dú)立地進(jìn)行設(shè)計(jì)和修改;每個(gè)模塊的結(jié)構(gòu)都應(yīng)該足夠簡(jiǎn)單,使它更容易理解;可以在不知道其它模塊的實(shí)現(xiàn)細(xì)節(jié)和不影響其它模塊行為的情況下,修改某個(gè)模塊的實(shí)現(xiàn);修改設(shè)計(jì)的容易程度應(yīng)該能夠滿足可能的需求變更。1.1.2對(duì)象模型的構(gòu)成要素3模塊化模塊化最重要的一點(diǎn)是:發(fā)現(xiàn)正確的類和對(duì)象,然后將它們放到不同的模塊中,這是最基本的設(shè)計(jì)決策。類和對(duì)象的確定是系統(tǒng)邏輯結(jié)構(gòu)設(shè)計(jì)的一部分,而模塊的劃分和確定則是系統(tǒng)物理結(jié)構(gòu)設(shè)計(jì)的組成部分。我們不可能在物理設(shè)計(jì)開始之前完成所有邏輯設(shè)計(jì),反之亦然。1.1.2對(duì)象模型的構(gòu)成要素4層次結(jié)構(gòu)任何一個(gè)面向?qū)ο蟮南到y(tǒng)都包含了類結(jié)構(gòu)(繼承)和對(duì)象結(jié)構(gòu)(組成)這兩種基本的層次結(jié)構(gòu),類繼承描述類之間的繼承關(guān)系,對(duì)象組成則描述對(duì)象組成意義上的結(jié)構(gòu)關(guān)系。1)類結(jié)構(gòu)類結(jié)構(gòu)是指系統(tǒng)的所有類和這些類之間的關(guān)系。類之間的關(guān)系中最重要的關(guān)系就是繼承(Inheritance)關(guān)系。對(duì)于兩個(gè)類A和B,如果類A擁有類B的所有屬性和行為,則稱類A和類B之間存在繼承關(guān)系。此時(shí),稱類A是類B的派生類,類B是類A的基類。1.1.2對(duì)象模型的構(gòu)成要素4層次結(jié)構(gòu)從語義上說,繼承實(shí)際上表明了“是一種”的關(guān)系。例如,汽車“是一種”交通工具,快速排序“是一種”排序算法。繼承因此實(shí)現(xiàn)類之間的一種“一般/具體”的層次結(jié)構(gòu),其中子類將超類的一般結(jié)構(gòu)和行為具體化。從繼承關(guān)系出發(fā),當(dāng)多個(gè)類之間具有比較復(fù)雜的繼承關(guān)系時(shí),這些繼承關(guān)系將使系統(tǒng)構(gòu)成了一種層次結(jié)構(gòu),在這個(gè)層次結(jié)構(gòu)中,一個(gè)子類將繼承其超類的所有屬性和方法,同時(shí)子類也可以擴(kuò)展或重新定義超類中的結(jié)構(gòu)和行為。1.1.2對(duì)象模型的構(gòu)成要素4層次結(jié)構(gòu)使用繼承關(guān)系建模一個(gè)系統(tǒng)時(shí),可以將多個(gè)不同的類中的相同屬性和方法遷移到它們共同的基類(或超類)中,從而減少這些屬性和方法的冗余,并且減少這些類之間的耦合,這也是面向?qū)ο蠓椒P(guān)注繼承關(guān)系的一個(gè)重要原因。在這個(gè)層次關(guān)系中,層次高的類代表了較高層次的抽象,低層次的則代表了較為低層次的抽象,同時(shí),低層次類中也可以添加新的屬性和方法,也可以修改甚至隱藏繼承自高層次的類的屬性和方法。1.1.2對(duì)象模型的構(gòu)成要素4層次結(jié)構(gòu)通過這種方式,繼承可以使得模型(甚至是程序)的描述方式更為經(jīng)濟(jì)。一個(gè)類通常把其內(nèi)部分成對(duì)外部開放和隱藏的兩個(gè)部分,開放的部分用接口描述,內(nèi)部屬性和狀態(tài)則是隱藏的。但繼承則要求重新定義一個(gè)用于繼承的接口,從而允許派生類來訪問、修改或隱藏其某些狀態(tài)和方法。1.1.2對(duì)象模型的構(gòu)成要素4層次結(jié)構(gòu)繼承機(jī)制為類引進(jìn)了子類這樣一種新的客戶類類型,但也增加了類封裝問題的復(fù)雜度。程序設(shè)計(jì)語言中定義的保護(hù)可見性就是一種專門為其子類提供的一種接口。這樣既支持了繼承,又在最大限度地保護(hù)了類的封裝性,同時(shí)也支持了不同層次的類之間的多態(tài)。1.1.2對(duì)象模型的構(gòu)成要素4層次結(jié)構(gòu)2)多繼承(MultiInheritance)層次結(jié)構(gòu)中的另一個(gè)問題是所謂的多繼承(MultiInheritance)問題,即一個(gè)類擁有多個(gè)基類(或超類)。在很多情況下,多繼承是有意義的。例如,如圖1-2描述了一個(gè)多繼承的設(shè)計(jì)。其中水陸兩棲汽車同時(shí)繼承了汽車和輪船這兩個(gè)類,水陸兩棲汽車還同時(shí)還重復(fù)地繼承了交通工具類的屬性和方法。1.1.2對(duì)象模型的構(gòu)成要素4層次結(jié)構(gòu)圖1-2多繼承實(shí)例1.1.2對(duì)象模型的構(gòu)成要素4層次結(jié)構(gòu)多繼承引入了一定的復(fù)雜性,即需要關(guān)注這些類中的名字沖突和重復(fù)繼承等問題。(1)名字沖突當(dāng)多個(gè)超類含有相同名字的屬性或操作時(shí),在它們共同的派生類中,就會(huì)發(fā)生名字沖突的情況。例如,當(dāng)汽車和輪船這兩個(gè)類具有相同的屬性名或方法名時(shí),在水路兩棲汽車類中,就會(huì)繼承了兩個(gè)同名的屬性和方法。這會(huì)給水路兩棲汽車類帶來額外的設(shè)計(jì)負(fù)擔(dān)。1.1.2對(duì)象模型的構(gòu)成要素4層次結(jié)構(gòu)(2)重復(fù)繼承當(dāng)多個(gè)同層次的類具有共同的超類時(shí),它們的共同子類就會(huì)發(fā)生重復(fù)繼承的情況。又例如汽車和輪船這兩個(gè)類就具有共同的超類交通工具,這兩個(gè)類繼承了交通工具類的屬性和方法。當(dāng)水路兩棲汽車類同時(shí)繼承了汽車和輪船這兩個(gè)類時(shí),它就可能重復(fù)地繼承了來自交通工具類的屬性和方法。1.1.2對(duì)象模型的構(gòu)成要素4層次結(jié)構(gòu)目前,大多數(shù)程序設(shè)計(jì)語言(如java,C#等)都不支持多繼承,對(duì)于不支持多繼承的語言,可以將多繼承結(jié)構(gòu)調(diào)整成一個(gè)超類加上與其它類的聚合的形式。支持多繼承的程序設(shè)計(jì)語言(如C++),則提供了相應(yīng)的語言機(jī)制來解決上述兩個(gè)問題,但這增加了程序設(shè)計(jì)方面的負(fù)擔(dān)。具體的設(shè)計(jì)決策則由程序員來決定是否使用以及如何使用多繼承。1.1.2對(duì)象模型的構(gòu)成要素4層次結(jié)構(gòu)目前,大多數(shù)程序設(shè)計(jì)語言(如java,C#等)都不支持多繼承,對(duì)于不支持多繼承的語言,可以將多繼承結(jié)構(gòu)調(diào)整成一個(gè)超類加上與其它類的聚合的形式。支持多繼承的程序設(shè)計(jì)語言(如C++),則提供了相應(yīng)的語言機(jī)制來解決上述兩個(gè)問題,但這增加了程序設(shè)計(jì)方面的負(fù)擔(dān)。具體的設(shè)計(jì)決策則由程序員來決定是否使用以及如何使用多繼承。1.1.2對(duì)象模型的構(gòu)成要素3)對(duì)象的層次結(jié)構(gòu)聚合(Aggregation)關(guān)系描述的是對(duì)象之間的層次關(guān)系,當(dāng)一個(gè)對(duì)象是由另外一些對(duì)象組合而成時(shí),則稱整體對(duì)象是一個(gè)聚合對(duì)象。也稱整體對(duì)象與部分對(duì)象之間的關(guān)系是一種聚合關(guān)系。當(dāng)部分對(duì)象與整體對(duì)象具有相同的生命周期時(shí),又可以稱這個(gè)聚合關(guān)系為組合關(guān)系。將繼承和聚合結(jié)合在一起可以構(gòu)成具有強(qiáng)大功能的結(jié)構(gòu),聚合允許對(duì)邏輯結(jié)構(gòu)進(jìn)行物理分組,而繼承允許這些共同的部分在不同的抽象中被復(fù)用。1.1.2對(duì)象模型的構(gòu)成要素5類型類型的概念源于程序設(shè)計(jì)語言中的數(shù)據(jù)類型,其主要強(qiáng)調(diào)的數(shù)據(jù)的表示方法、取值范圍、允許進(jìn)行的計(jì)算以及一個(gè)特定的標(biāo)識(shí)符。將類型與類的概念相比較,二者具有較強(qiáng)的相似性,類型中的數(shù)據(jù)表示方法與類的屬性定義、類型的計(jì)算與類的操作、類型標(biāo)識(shí)符與類名等都有很強(qiáng)的相似性。但類型的概念更基本,并且類型的適用范圍顯然更為寬泛。1.1.2對(duì)象模型的構(gòu)成要素5類型面向?qū)ο蠓椒ㄈ匀话杨愋鸵暈閷?duì)象模型中的一個(gè)獨(dú)立要素,即類型被看作是面向?qū)ο箢I(lǐng)域中某些結(jié)構(gòu)成分(如屬性、方法的形式參數(shù)和返回值等)的一種抽象描述。面向?qū)ο蠓椒ㄖ?,類型是關(guān)于某種結(jié)構(gòu)成分的強(qiáng)制規(guī)定,不同類型的結(jié)構(gòu)成分一般不能夠互換使用,或者至少它們的互換使用應(yīng)該受到某種非常嚴(yán)格的限制。1.1.2對(duì)象模型的構(gòu)成要素5類型類型可以分為靜態(tài)類型和動(dòng)態(tài)類型兩種類型。靜態(tài)類型是指所有變量和表達(dá)式的類型在編譯時(shí)就確定下來的數(shù)據(jù)類型。而動(dòng)態(tài)類型(遲后綁定)是指變量和表達(dá)式的類型直到運(yùn)行時(shí)刻才能夠確定下來的數(shù)據(jù)類型。也可以將靜態(tài)類型稱為強(qiáng)類型,將動(dòng)態(tài)類型視為弱類型。1.1.2對(duì)象模型的構(gòu)成要素5類型另外,多態(tài)(polymorphism)也是動(dòng)態(tài)類型和繼承互相作用時(shí)所表現(xiàn)出來的一種情形。多態(tài)代表了類型理論中的一個(gè)概念,即一個(gè)名字(或變量)可以代表許多個(gè)不同類型的對(duì)象,這些類具有某個(gè)共同的超類。因此這個(gè)對(duì)象可以響應(yīng)一組共同的操作。多態(tài)可能是面向?qū)ο笳Z言中除了對(duì)抽象的支持以外最強(qiáng)大的功能,也正是它,區(qū)分了面向?qū)ο缶幊毯蛡鹘y(tǒng)的抽象數(shù)據(jù)類型編程。1.1.2對(duì)象模型的構(gòu)成要素6并發(fā)并行系統(tǒng)中,通常要考慮程序并行或并發(fā)執(zhí)行方面的問題。進(jìn)程是指一個(gè)程序的一次可并發(fā)的執(zhí)行活動(dòng),進(jìn)程通常是由操作系統(tǒng)獨(dú)立地進(jìn)行管理的,每個(gè)進(jìn)程都有獨(dú)立的地址空間。進(jìn)程之間可以進(jìn)行通訊,進(jìn)程控制機(jī)制通常是由操作系統(tǒng)提供的,所以進(jìn)程的通信開銷比較大,涉及到進(jìn)程間通信技術(shù)。而線程則是某種輕量級(jí)的進(jìn)程,線程一般共處于同一進(jìn)程空間之內(nèi),它們共享同樣的地址空間和資源,這使得線程之間的通訊開銷較小,但需要解決共享數(shù)據(jù)資源的并發(fā)控制問題。1.1.2對(duì)象模型的構(gòu)成要素6并發(fā)設(shè)計(jì)一個(gè)含有多線程特性的大型軟件會(huì)有更多的困難,因?yàn)樵O(shè)計(jì)者必須考慮并發(fā)控制方面的問題,即系統(tǒng)的死鎖、饑餓、互斥和競(jìng)爭(zhēng)條件等問題。在面向?qū)ο笙到y(tǒng)中,可以將并發(fā)和并發(fā)控制(進(jìn)程或線程)封裝在可復(fù)用的抽象中,以減輕程序員在并發(fā)問題上的負(fù)擔(dān)。從并發(fā)的角度出發(fā),我們可以給出主動(dòng)對(duì)象和被動(dòng)對(duì)象的概念,我們把封裝了某個(gè)并發(fā)的進(jìn)程或線程的對(duì)象稱為主動(dòng)對(duì)象,否則稱為被動(dòng)對(duì)象。1.1.2對(duì)象模型的構(gòu)成要素6并發(fā)一般來說,在面向?qū)ο蟮脑O(shè)計(jì)中,共有三種并發(fā)方式。(1)并發(fā)程序設(shè)計(jì)語言這種情況下,并發(fā)是程序設(shè)計(jì)語言的內(nèi)在特征,該種語言本身就提供了并發(fā)和同步控制機(jī)制??梢灾苯觿?chuàng)建一個(gè)主動(dòng)對(duì)象,它與其它主動(dòng)對(duì)象一起并發(fā)執(zhí)行某些處理過程。1.1.2對(duì)象模型的構(gòu)成要素6并發(fā)(2)軟件開發(fā)環(huán)境目前,大多數(shù)軟件開發(fā)環(huán)境均以提供類庫(kù)的方式支持并發(fā)程序設(shè)計(jì)。當(dāng)然,這種類庫(kù)通常是平臺(tái)相關(guān)的,也可能是不可移植的。在這種方式下,并發(fā)并不是語言的內(nèi)在特征,但提供的這些標(biāo)準(zhǔn)類,使得并發(fā)看起來似乎是對(duì)象的內(nèi)在的特征。其并發(fā)的本質(zhì)在于軟件的運(yùn)行環(huán)境對(duì)并發(fā)的支持。1.1.2對(duì)象模型的構(gòu)成要素6并發(fā)(3)中斷機(jī)制最后一種方式,是利用中斷機(jī)制來實(shí)現(xiàn)并發(fā)。當(dāng)然,這種方法是一種最古老的并發(fā)方式,使用中斷機(jī)制,不僅要求程序員具有某些底層硬件細(xì)節(jié)方面的知識(shí),同時(shí)還要考慮軟件環(huán)境是否支持這樣的方式。1.1.2對(duì)象模型的構(gòu)成要素6并發(fā)不論如何實(shí)現(xiàn)并發(fā),當(dāng)在一個(gè)系統(tǒng)中引入并發(fā)時(shí),必須考慮主動(dòng)對(duì)象之間活動(dòng)的同步。例如,如果兩個(gè)主動(dòng)對(duì)象試圖同時(shí)給第三個(gè)對(duì)象發(fā)送消息,則必須確保使用了某種互斥手段,這樣,被調(diào)用對(duì)象的狀態(tài)才不會(huì)因?yàn)閮蓚€(gè)主動(dòng)對(duì)象的同時(shí)訪問而被破壞。這是使用并發(fā)時(shí)必須注意的要點(diǎn)。在并發(fā)的情況下,僅定義對(duì)象的方法是不夠的,還必須確保這些方法的語義在多個(gè)控制線程的情況下仍然有效。1.1.2對(duì)象模型的構(gòu)成要素7持久性軟件中的一個(gè)對(duì)象通常會(huì)占用一定量的存儲(chǔ)空間,并在一定的時(shí)間內(nèi)存在。一個(gè)對(duì)象從建立到消亡的時(shí)間間隔稱為對(duì)象的生命周期(lifetime)。1.1.2對(duì)象模型的構(gòu)成要素7持久性按照對(duì)象在軟件中的生命周期可以把對(duì)象分為如下幾種類型:1)瞬時(shí)對(duì)象,只在某個(gè)時(shí)刻存在的對(duì)象,如表達(dá)式計(jì)算使用的臨時(shí)對(duì)象。2)過程對(duì)象,僅存在于某個(gè)過程的局部對(duì)象。這個(gè)過程開始時(shí),對(duì)象被創(chuàng)建,這個(gè)過程結(jié)束時(shí),這些對(duì)象被自動(dòng)銷毀。如某個(gè)過程的局部變量;1.1.2對(duì)象模型的構(gòu)成要素7持久性3)全局對(duì)象,在軟件運(yùn)行期間全局存在的對(duì)象,如軟件中的全局變量、堆中的值,它們的存在性和可見性可能會(huì)有所不同:4)持久對(duì)象,存在性與軟件的運(yùn)行狀態(tài)無關(guān)的對(duì)象。這類對(duì)象通常需要數(shù)據(jù)文件或數(shù)據(jù)庫(kù)技術(shù)的支持,當(dāng)軟件處在運(yùn)行狀態(tài)時(shí),這些對(duì)象會(huì)根據(jù)需要被調(diào)入內(nèi)存并參與系統(tǒng)的運(yùn)行,在程序運(yùn)行結(jié)束后,這些對(duì)象的屬性數(shù)據(jù)將被保存在數(shù)據(jù)文件或數(shù)據(jù)庫(kù)中。我們將實(shí)現(xiàn)對(duì)象在數(shù)據(jù)文件或數(shù)據(jù)庫(kù)與內(nèi)存之間轉(zhuǎn)換的技術(shù)稱為對(duì)象的序列化或持久化。1.1.2對(duì)象模型的構(gòu)成要素7持久性除了上述四種類型的對(duì)象之外,某些商業(yè)軟件還需要處理存在與不同版本的軟件之間的數(shù)據(jù)的兼容性問題,如MicrosoftOfficeWord軟件的版本兼容問題。此時(shí),對(duì)象還存在不同版本之間的轉(zhuǎn)換問題。傳統(tǒng)編程語言通常只關(guān)注前三種類型的對(duì)象存在性問題,持久對(duì)象通常會(huì)涉及數(shù)據(jù)文件處理技術(shù)或數(shù)據(jù)庫(kù)技術(shù)。某些面向?qū)ο缶幊陶Z言提供了對(duì)持久化技術(shù)的直接支持,如Java提供的EnterpriseJavaBeans(EJB)和JavaDataObject(JDO)。1.1.2對(duì)象模型的構(gòu)成要素7持久性將對(duì)象序列化到數(shù)據(jù)文件只是序列化技術(shù)中比較初級(jí)的解決方案,因?yàn)檫@種技術(shù)不適合處理大量對(duì)象的情況。更常用的持久化技術(shù)是對(duì)象到數(shù)據(jù)庫(kù)中的映射。本書將在第九章詳細(xì)討論對(duì)象與關(guān)系數(shù)據(jù)庫(kù)的映射(OR映射)問題。另外,持久性問題要解決的不僅僅是對(duì)象的生命周期問題。在實(shí)際應(yīng)用中,這些持久對(duì)象還有可能會(huì)跨越不同的空間(應(yīng)用)而存在。這種情況下,不同的應(yīng)用都會(huì)以不同的方式來解釋和處理持久對(duì)象。當(dāng)這些跨越不同應(yīng)用空間的持久對(duì)象被存儲(chǔ)在數(shù)據(jù)庫(kù)中時(shí),顯然會(huì)增加保持?jǐn)?shù)據(jù)完整性的難度。1.1.2對(duì)象模型的構(gòu)成要素7持久性例如,一個(gè)WORD文檔可以看成是由一組WORD文檔對(duì)象的屬性數(shù)據(jù)組成的集合,這些數(shù)據(jù)它也可以被WORD軟件使用,但某些其它軟件(如WPS軟件)也可以處理這個(gè)文檔的數(shù)據(jù),并且至少這些軟件處理這些數(shù)據(jù)的方式是一樣的,這些數(shù)據(jù)在不同的應(yīng)用中的語義是相通的。但不同軟件中定義的封裝這些文檔對(duì)象數(shù)據(jù)的類卻不太可能會(huì)完全相同,至少這些類的方法不會(huì)完全相同。這個(gè)例子說明了持久對(duì)象的持久性還包含了空間方面的屬性。1.1.2對(duì)象模型的構(gòu)成要素7持久性對(duì)于分布式系統(tǒng)來說,有時(shí)候還必須考慮跨越空間的對(duì)象轉(zhuǎn)換問題。例如在分布式系統(tǒng)中,對(duì)象從一個(gè)結(jié)點(diǎn)遷移到另一個(gè)結(jié)點(diǎn)時(shí),它們?cè)诓煌Y(jié)點(diǎn)中甚至?xí)蟹浅2煌臓顟B(tài)和行為。綜上所述,我們可以給出如下的持久性的定義。持久是對(duì)象本身所具有的一種特性,通過這種特性,對(duì)象可以跨越時(shí)間和空間而存在。本小節(jié)詳細(xì)討論了對(duì)象模型的各個(gè)構(gòu)成要素,所有這些要素共同構(gòu)成了完整的面向?qū)ο蟮暮诵母拍睢?.1.3對(duì)象模型的主要優(yōu)點(diǎn)從模型的構(gòu)成要素上來看,對(duì)象模型與傳統(tǒng)的結(jié)構(gòu)化方法所使用的模型有著很大的不同,其重要區(qū)別在于對(duì)象模型引進(jìn)了對(duì)象等相關(guān)概念。但并不是說對(duì)象模型完全放棄了傳統(tǒng)模型中好的原則和經(jīng)驗(yàn)。相反,對(duì)象模型只是在原有模型的基礎(chǔ)上引入了一些新的元素和思想。因此,對(duì)象模型提供了一些其它模型沒有提供的重要優(yōu)點(diǎn)。最重要的是,使用對(duì)象模型可以構(gòu)建出具有一些更好結(jié)構(gòu)特性的復(fù)雜系統(tǒng)。1.1.3對(duì)象模型的主要優(yōu)點(diǎn)1.提高編程能力正確地理解對(duì)象模型有助于提高使用面向?qū)ο蟪绦蛟O(shè)計(jì)語言描述系統(tǒng)的能力,編寫面向?qū)ο蟪绦虻倪^程實(shí)質(zhì)上也是一個(gè)使用面向?qū)ο笳Z言描述系統(tǒng)結(jié)構(gòu)和行為的過程。正確理解對(duì)象模型的概念框架,對(duì)編程能力的提高將具有十分重要的基礎(chǔ)作用。雖然,在編寫程序的過程中,人們關(guān)注得更多的往往是語言的語法方面的細(xì)節(jié)。但更抽象一層的知識(shí)和概念將為編程提供方向性的指導(dǎo)。經(jīng)驗(yàn)表明,如果不能正確地理解對(duì)象模型中的這些抽象的要素,那么程序設(shè)計(jì)語言中的很多表現(xiàn)力很強(qiáng)的功能就有可能被忽略或者被錯(cuò)誤地使用了。1.1.3對(duì)象模型的主要優(yōu)點(diǎn)2.支持軟件復(fù)用所謂軟件復(fù)用(SoftwareReuse),是指將已有軟件的各種相關(guān)知識(shí)用于建立新的軟件,以縮減在軟件開發(fā)和維護(hù)方面的花費(fèi)。顯然,軟件復(fù)用是提高軟件生產(chǎn)力和質(zhì)量的一種重要技術(shù)手段。早期的軟件復(fù)用主要是指代碼級(jí)的復(fù)用,被復(fù)用的知識(shí)專指部分程序代碼,后來軟件復(fù)用被擴(kuò)展到領(lǐng)域知識(shí)、開發(fā)經(jīng)驗(yàn)、設(shè)計(jì)決策、體系結(jié)構(gòu)、需求分析、軟件設(shè)計(jì)、程序代碼和軟件文檔等一切與軟件開發(fā)有關(guān)的各個(gè)方面。1.1.3對(duì)象模型的主要優(yōu)點(diǎn)2.支持軟件復(fù)用面向?qū)ο蠓椒ú粌H可以有效地支持軟件復(fù)用,而且甚至可以支持設(shè)計(jì)和分析的復(fù)用,這導(dǎo)致了可復(fù)用的應(yīng)用程序框架的產(chǎn)生。例如,MicrosoftVisualC++提供的應(yīng)用程序框架技術(shù),為開發(fā)人員提供了一個(gè)完整的可運(yùn)行的應(yīng)用程序。程序員只要擴(kuò)充這個(gè)程序框架就可以獲得他想要的完整應(yīng)用。而這個(gè)程序框架本身就是一個(gè)可復(fù)用的軟件。1.1.3對(duì)象模型的主要優(yōu)點(diǎn)2.支持軟件復(fù)用人們發(fā)現(xiàn),面向?qū)ο笙到y(tǒng)的實(shí)現(xiàn)通常要比等價(jià)的非面向?qū)ο髮?shí)現(xiàn)的規(guī)模更小。這不僅意味著系統(tǒng)的代碼量更小,而且軟件的可復(fù)用度的提高也會(huì)反映到成本和開發(fā)進(jìn)度上。但另一方面,并不是說面向?qū)ο蟮脑O(shè)計(jì)就一定就是可復(fù)用的設(shè)計(jì),如果復(fù)用不是項(xiàng)目的主要目標(biāo),那么就不太可能實(shí)現(xiàn)復(fù)用。最后,可復(fù)用的設(shè)計(jì)可能要求在初次實(shí)現(xiàn)時(shí)的花費(fèi)更多。但積極的一面是,初次開發(fā)付出的高成本將在組件的后續(xù)復(fù)用中獲得補(bǔ)償。1.1.3對(duì)象模型的主要優(yōu)點(diǎn)2.支持軟件復(fù)用再次,使用對(duì)象模型可以獲得更具有可維護(hù)性的系統(tǒng),這樣的系統(tǒng)將更適合修改和擴(kuò)充。也就是說,面向?qū)ο笙到y(tǒng)可以隨時(shí)間而進(jìn)化,而不是經(jīng)歷一次較大的需求變更就放棄原來的系統(tǒng)或者完全重新設(shè)計(jì)。1.2面向?qū)ο蟮能浖_發(fā)從計(jì)算機(jī)誕生之日開始,軟件開發(fā)就成為計(jì)算機(jī)應(yīng)用和研究的一個(gè)十分重要的課題。軟件開發(fā)方式和開發(fā)方法也經(jīng)歷了翻天覆地的其巨大變化。開發(fā)方式經(jīng)歷了個(gè)體工作方式、軟件作坊方式和團(tuán)隊(duì)開發(fā)方式等三種基本方式的演化。開發(fā)方法則經(jīng)歷了從早期的程序設(shè)計(jì)、結(jié)構(gòu)化方法和目前的面向?qū)ο蠓椒ㄟ@樣一個(gè)基本的歷程。這些方法從不同的角度出發(fā),各自提出了不盡相同的開發(fā)步驟和方法,這些不同的方法基本上都有效地解決了當(dāng)時(shí)在軟件開發(fā)過程中所面臨的各種問題,但隨著時(shí)間的發(fā)展,也都組件暴露出它們各自的局限性?,F(xiàn)在的人們通常將軟件開發(fā)方法歸結(jié)成結(jié)構(gòu)化和面向?qū)ο髢蓚€(gè)大類,它們分別基于結(jié)構(gòu)化和面向?qū)ο蟮某绦蛟O(shè)計(jì)方法。習(xí)慣上,人們通常將面向?qū)ο蠓椒ㄖ暗姆椒ńy(tǒng)稱為結(jié)構(gòu)化方法或傳統(tǒng)的軟件開發(fā)方法。1.2.1典型的結(jié)構(gòu)化開發(fā)方法在結(jié)構(gòu)化開發(fā)方法的發(fā)展過程中,人們提出過很多種開發(fā)方法。典型的結(jié)構(gòu)化方法包括Parnas方法、SASD方法、Jackson方法、Warnier方法和PAM方法等。這些方法不僅解決了當(dāng)時(shí)面臨的問題,同時(shí)他們也提出了很多有深遠(yuǎn)意義的思想、概念和基本方法。這些思想、概念和基本的方法也已經(jīng)成為軟件開發(fā)方法發(fā)展的重要基石。1.2.1典型的結(jié)構(gòu)化開發(fā)方法1.Parnas方法Parnas方法是D.Parnas在1972年提出的一種軟件開發(fā)方法。其主要目的是解決軟件的可維護(hù)性和可靠性問題。在該方法中,Parnas提出了著名的信息隱蔽原則,目前這個(gè)原則已經(jīng)成為現(xiàn)代軟件工程學(xué)中的一個(gè)非常重要的軟件設(shè)計(jì)原則。1.2.1典型的結(jié)構(gòu)化開發(fā)方法1.Parnas方法信息隱藏(InformationHiding)原則的內(nèi)容是:代碼模塊應(yīng)該采用定義良好的接口來封裝,這些模塊的內(nèi)部結(jié)構(gòu)應(yīng)該是私有的,外部是不可見的。設(shè)計(jì)時(shí)可以列出將來可能發(fā)生變化的因素,并在模塊劃分時(shí)將這些因素放到個(gè)別模塊的內(nèi)部。這樣,在將來由于這些因素變化而需修改軟件時(shí),只需修改這些個(gè)別模塊,其它模塊不受影響。信息隱蔽技術(shù)不僅提高了軟件的可維護(hù)性,而且也避免了錯(cuò)誤的蔓延,改善了軟件的可靠性。1.2.1典型的結(jié)構(gòu)化開發(fā)方法1.Parnas方法Parnas提出的第二條原則是,在軟件設(shè)計(jì)時(shí)應(yīng)對(duì)可能發(fā)生的各種意外(Exception)故障采取措施。軟件意外故障是指軟件在運(yùn)行時(shí)發(fā)生的各種錯(cuò)誤。軟件是很脆弱的,任何軟件很可能因?yàn)橐粋€(gè)微小的錯(cuò)誤而引發(fā)嚴(yán)重的事故,所以必須加強(qiáng)防范。模塊之間也要加強(qiáng)檢查,防止錯(cuò)誤蔓延。1.2.1典型的結(jié)構(gòu)化開發(fā)方法2.SASD方法1978年,E.Yourdon和L.L.Constantine提出了結(jié)構(gòu)化方法,即SASD方法,也可稱為面向功能的軟件開發(fā)方法或面向數(shù)據(jù)流的軟件開發(fā)方法。1979年TomDeMarco對(duì)此方法作了進(jìn)一步的完善。Yourdon方法是80年代使用最廣泛的軟件開發(fā)方法。它首先用結(jié)構(gòu)化分析(SA)對(duì)軟件進(jìn)行需求分析,然后用結(jié)構(gòu)化設(shè)計(jì)(SD)方法進(jìn)行總體設(shè)計(jì),最后是結(jié)構(gòu)化編程(SP)。這一方法不僅開發(fā)步驟明確,而且給出了兩類典型的軟件結(jié)構(gòu)(既變換型和事務(wù)型),便于參照,提高了軟件開發(fā)的成功率。1.2.1典型的結(jié)構(gòu)化開發(fā)方法3.面向數(shù)據(jù)結(jié)構(gòu)的軟件開發(fā)方法(1)Jackson方法1975年,M.A.Jackson提出了一類至今仍廣泛使用的軟件開發(fā)方法。這一方法從目標(biāo)系統(tǒng)的輸入、輸出數(shù)據(jù)結(jié)構(gòu)入手,導(dǎo)出程序框架結(jié)構(gòu),再補(bǔ)充其它細(xì)節(jié),就可得到完整的程序結(jié)構(gòu)圖。這一方法對(duì)輸入、輸出數(shù)據(jù)結(jié)構(gòu)明確的中小型系統(tǒng)特別有效,如商業(yè)應(yīng)用中的文件表格處理。該方法也可與其它方法結(jié)合,用于模塊的詳細(xì)設(shè)計(jì)。Jackson方法也被稱為面向數(shù)據(jù)結(jié)構(gòu)的軟件設(shè)計(jì)方法。1.2.1典型的結(jié)構(gòu)化開發(fā)方法(2)Warnier方法1974年,J.D.Warnier提出的軟件開發(fā)方法與Jackson方法類似。差別有三點(diǎn):1)使用的圖形工具不同,分別使用Warnier圖和Jackson圖;2)使用的偽碼不同;3)在構(gòu)造程序框架時(shí),Warnier方法僅考慮輸入數(shù)據(jù)結(jié)構(gòu),而Jackson方法不僅考慮輸入數(shù)據(jù)結(jié)構(gòu),而且還考慮輸出數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。1.2.1典型的結(jié)構(gòu)化開發(fā)方法4.問題分析法PAM(ProblemAnalysisMethod)問題分析法80年代末由日立公司提出的一種軟件開發(fā)方法。PAM方法希望能兼顧Yourdon方法、Jackson方法和自底向上的軟件開發(fā)方法的優(yōu)點(diǎn),而避免它們的缺陷。它的基本思想是:考慮到輸入、輸出數(shù)據(jù)結(jié)構(gòu),指導(dǎo)系統(tǒng)的分解,在系統(tǒng)分析指導(dǎo)下逐步綜合。1.2.1典型的結(jié)構(gòu)化開發(fā)方法4.問題分析法PAM(ProblemAnalysisMethod)問題分析法80年代末由日立公司提出的一種軟件開發(fā)方法。PAM方法希望能兼顧Yourdon方法、Jackson方法和自底向上的軟件開發(fā)方法的優(yōu)點(diǎn),而避免它們的缺陷。它的基本思想是:考慮到輸入、輸出數(shù)據(jù)結(jié)構(gòu),指導(dǎo)系統(tǒng)的分解,在系統(tǒng)分析指導(dǎo)下逐步綜合。1.2.1典型的結(jié)構(gòu)化開發(fā)方法4.問題分析法這一方法的具體步驟是:從輸入、輸出數(shù)據(jù)結(jié)構(gòu)導(dǎo)出基本處理框;分析這些處理框之間的先后關(guān)系;按先后關(guān)系逐步綜合處理框,直到畫出整個(gè)系統(tǒng)的PAD圖??梢钥闯?,這一方法本質(zhì)上是綜合的自底向上的方法,但在逐步綜合之前已進(jìn)行了有目的的分解,這個(gè)目的就是充分考慮系統(tǒng)的輸入、輸出數(shù)據(jù)結(jié)構(gòu)。1.2.1典型的結(jié)構(gòu)化開發(fā)方法4.問題分析法PAM方法的另一個(gè)優(yōu)點(diǎn)是使用了PAD圖。這是一種二維樹形結(jié)構(gòu)圖,是到目前為止最好的詳細(xì)設(shè)計(jì)表示方法之一,遠(yuǎn)遠(yuǎn)優(yōu)于NS圖和PDL語言。這一方法曾經(jīng)較為流行,軟件開發(fā)的成功率也很高。但由于在輸入、輸出數(shù)據(jù)結(jié)構(gòu)與整個(gè)系統(tǒng)之間同樣存在著鴻溝,這一方法仍只適用于中小型問題。1.2.1典型的結(jié)構(gòu)化開發(fā)方法4.問題分析法這些方法的出現(xiàn)和應(yīng)用,成功地解決了當(dāng)時(shí)軟件開發(fā)面臨的諸如可靠性和可維護(hù)性等各種問題。但隨著計(jì)算機(jī)硬件技術(shù)的發(fā)展、計(jì)算機(jī)應(yīng)用的普及以及計(jì)算機(jī)應(yīng)用領(lǐng)域和規(guī)模的不斷擴(kuò)大,軟件的規(guī)模和復(fù)雜性也不斷隨之?dāng)U大和增強(qiáng),原有的軟件開發(fā)方法也隨之出現(xiàn)了不相適應(yīng)的情況。隨著以Smalltalk為代表的面向?qū)ο蟪绦蛟O(shè)計(jì)語言的出現(xiàn),面向?qū)ο蠓椒ǖ玫搅搜杆俚陌l(fā)展,而且這一方法已經(jīng)成為當(dāng)前軟件開發(fā)的主流方法。1.2.2面向?qū)ο蠓椒ǖ陌l(fā)展過程面向?qū)ο蠓椒?Object-OrientedMethod)是一種把面向?qū)ο蟮乃枷霊?yīng)用在軟件開發(fā)過程中,并指導(dǎo)開發(fā)活動(dòng)的系統(tǒng)方法。簡(jiǎn)稱OO(Object-Oriented)方法,是一種建立在“對(duì)象”概念基礎(chǔ)上的方法學(xué)。所謂面向?qū)ο缶褪且詫?duì)象概念為基礎(chǔ),以對(duì)象為中心,以封裝、繼承、關(guān)聯(lián)、多態(tài)等特性為構(gòu)造機(jī)制,來認(rèn)識(shí)、理解和描述客觀世界,并以此為基礎(chǔ)構(gòu)建相應(yīng)的軟件系統(tǒng)。1.2.2面向?qū)ο蠓椒ǖ陌l(fā)展過程面向?qū)ο蠓椒ǖ幕境霭l(fā)點(diǎn)是盡可能按照人類認(rèn)識(shí)問題和解決問題的方式方法來分析設(shè)計(jì)和實(shí)現(xiàn)需要的軟件系統(tǒng)。面向?qū)ο蠓椒ㄕJ(rèn)為客觀世界是由各種事物和事物之間的聯(lián)系構(gòu)成的,并將客觀世界描述為對(duì)象和對(duì)象之間的關(guān)系。面向?qū)ο蠓椒ㄕ且詫?duì)象作為最基本的構(gòu)成元素,它也是分析問題和解決問題的核心。1.2.2面向?qū)ο蠓椒ǖ陌l(fā)展過程面向?qū)ο笤O(shè)計(jì)技術(shù)是軟件技術(shù)的一次革命,在軟件開發(fā)史上具有重要的里程碑意義。面向?qū)ο蠓椒ǖ陌l(fā)展過程經(jīng)歷了從面向?qū)ο缶幊獭⒚嫦驅(qū)ο笤O(shè)計(jì)和面向?qū)ο蠓治龅陌l(fā)展過程,最終形成了基于對(duì)象模型技術(shù)的面向?qū)ο筌浖_發(fā)方法(ObjectModellingTechnique,OMT)[1]。1.2.2面向?qū)ο蠓椒ǖ陌l(fā)展過程OMT是目前公認(rèn)的面向?qū)ο筌浖_發(fā)方法。這是一種采用了自底向上分析和自頂向下設(shè)計(jì)相結(jié)合的策略的分析和設(shè)計(jì)方法,它以對(duì)象建模為基礎(chǔ),充分考慮了輸入、輸出數(shù)據(jù)結(jié)構(gòu),實(shí)際上也包含了所有對(duì)象的數(shù)據(jù)結(jié)構(gòu)。所以O(shè)MT方法徹底實(shí)現(xiàn)了PAM沒有完全實(shí)現(xiàn)的目標(biāo)。1.2.2面向?qū)ο蠓椒ǖ陌l(fā)展過程不僅如此,面向?qū)ο蠹夹g(shù)在需求分析、可維護(hù)性和可靠性這三個(gè)軟件開發(fā)的關(guān)鍵環(huán)節(jié)和質(zhì)量指標(biāo)上有了實(shí)質(zhì)性的突破,徹底地解決了在這些方面存在的嚴(yán)重問題,從而宣告了軟件危機(jī)末日的來臨。人們通常將面向?qū)ο蠓椒ǖ陌l(fā)展過程劃分為早期、發(fā)展和當(dāng)前現(xiàn)狀等三個(gè)階段。1.2.2面向?qū)ο蠓椒ǖ陌l(fā)展過程1.早期階段面向?qū)ο蠓椒ǖ淖钤绯霈F(xiàn)并得到發(fā)展的標(biāo)識(shí)是面向?qū)ο蟪绦蛟O(shè)計(jì)語言的出現(xiàn),這導(dǎo)致了新的面向?qū)ο蟪绦蛟O(shè)計(jì)方法的出現(xiàn)和發(fā)展。最早的面向?qū)ο笳Z言是1967年挪威計(jì)算中心的KistenNygaard和OleJohanDahl開發(fā)的Simula67語言,該語言首次引入了類的概念和繼承機(jī)制,它是面向?qū)ο蟮南闰?qū)。1972年P(guān)aloAlno研究中心(PARC)發(fā)布了Smalltalk72語言,其中正式使用了“面向?qū)ο蟆边@一術(shù)語。Smalltakl的問世標(biāo)志著面向?qū)ο蟪绦蛟O(shè)計(jì)方法的正式形成。隨后的幾年中,PARC先后發(fā)布了Smalltalk72、76和78等多個(gè)版本,直至1981年推出該語言完善的版本Smalltalk80。Smalltalk80的問世被認(rèn)為是面向?qū)ο笳Z言發(fā)展史上最重要的里程碑事件。Smalltalk80具備了迄今為止,絕大部分面向?qū)ο蟮幕靖拍罴捌渲С謾C(jī)制在。它是第一個(gè)完善的、能夠?qū)嶋H應(yīng)用的面向?qū)ο笳Z言[1]。1.2.2面向?qū)ο蠓椒ǖ陌l(fā)展過程2.發(fā)展階段從20世紀(jì)80年代中期到90年代,是面向?qū)ο蟪绦蛟O(shè)計(jì)語言走向繁榮的重要階段。其主要的表現(xiàn)是大批實(shí)用的面向?qū)ο蟪绦蛟O(shè)計(jì)語言的涌現(xiàn),如C++、ObjectiveC、ObjectPascal、CLOS、Eiffel和Actor等,這使得面向?qū)ο蟪绦蛟O(shè)計(jì)語言的應(yīng)用得到了迅速的普及。這些面向?qū)ο蟮木幊陶Z言又可以劃分純面向?qū)ο笮驼Z言和混合型面向?qū)ο笳Z言。混合型語言是在傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(jì)語言基礎(chǔ)上增加了面向?qū)ο笳Z言成分形成的,例如C++,它們既支持傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(jì),也支持面向?qū)ο蟮某绦蛟O(shè)計(jì),其在實(shí)用性方面具有更大的靈活性。而純面向?qū)ο笮驼Z言則是所謂的純粹的面向?qū)ο笳Z言,這種語言僅支持面向?qū)ο蟮某绦蚪Y(jié)構(gòu)。1.2.2面向?qū)ο蠓椒ǖ陌l(fā)展過程2.發(fā)展階段目前,在面向?qū)ο缶幊谭矫?,大多?shù)面向?qū)ο笳Z言普遍采用了程序語言、類庫(kù)和可視化集成開發(fā)環(huán)境相結(jié)合的方式,如VisualC++、JBuilder和Delphi等。這極大地提高了程序設(shè)計(jì)的效率??陀^上也推動(dòng)了面向?qū)ο笤O(shè)計(jì)和面向?qū)ο蠓治龇椒ǖ陌l(fā)展,使面向?qū)ο蠓椒〝U(kuò)展到整個(gè)軟件生命周期的各個(gè)階段。到20世紀(jì)90年代,面向?qū)ο蟮姆治雠c設(shè)計(jì)方法已多達(dá)數(shù)十種,這些方法都各有所長(zhǎng)。目前,統(tǒng)一建模語言已經(jīng)成為世界性的建模語言,適用于多種開發(fā)方法。把UML作為面向?qū)ο蟮慕UZ言,不但在軟件產(chǎn)業(yè)界獲得了普遍支持,在學(xué)術(shù)界也具有很大的影響。在面向?qū)ο筮^程指導(dǎo)方面,雖然目前還沒有統(tǒng)一的規(guī)范。但也已經(jīng)產(chǎn)生了一些具有相當(dāng)大的影響力的面向?qū)ο筌浖_發(fā)的過程。例如,著名的統(tǒng)一軟件開發(fā)過程(RUP)。1.2.2面向?qū)ο蠓椒ǖ陌l(fā)展過程3.面向?qū)ο蠓椒ǖ漠?dāng)前現(xiàn)狀當(dāng)前,面向?qū)ο蠓椒◣缀醺采w了計(jì)算機(jī)軟件領(lǐng)域的所有分支。這些分支包括面向?qū)ο蟮木幊陶Z言(OOP)、面向?qū)ο蠓治觯∣OA)、面向?qū)ο笤O(shè)計(jì)(OOD)、面向?qū)ο鬁y(cè)試(OOT)和面向?qū)ο缶S護(hù)(OOM)等軟件工程領(lǐng)域的分支,也包括圖形用戶界面設(shè)計(jì)(GUI)、面向?qū)ο髷?shù)據(jù)庫(kù)(OODB)、面向?qū)ο蟮臄?shù)據(jù)結(jié)構(gòu)(OODS)、面向?qū)ο蟮闹悄艹绦蛟O(shè)計(jì)、面向?qū)ο蟮能浖_發(fā)環(huán)境(OOSE)和面向?qū)ο蟮捏w系結(jié)構(gòu)(OOSA)等技術(shù)領(lǐng)域。此外,許多新領(lǐng)域都以面向?qū)ο罄碚摓榛A(chǔ)或主要技術(shù),如面向?qū)ο蟮能浖w系結(jié)構(gòu)、領(lǐng)域工程、智能代理、面向構(gòu)件的軟件工程和面向服務(wù)的軟件開發(fā)等。1.2.3面向?qū)ο蟪绦蛟O(shè)計(jì)語言在面向?qū)ο蠓椒ǖ陌l(fā)展過程中,面向?qū)ο蟪绦蛟O(shè)計(jì)語言的出現(xiàn)和發(fā)展起到了十分重要的引領(lǐng)作用,同時(shí)語言本身也得到了不斷地發(fā)展。這些語言也不斷豐富和促進(jìn)了面向?qū)ο蠓椒ǖ陌l(fā)展。1.2.3面向?qū)ο蟪绦蛟O(shè)計(jì)語言1.Simula語言1967年5月,挪威科學(xué)家Ole-JohanDahl和KristenNygaard正式發(fā)布了Simula67語言。之后,在1968年2月形成了Simula67的正式文本。Simula67被認(rèn)為是最早的面向?qū)ο蟪绦蛟O(shè)計(jì)語言,它引入了對(duì)象、類和繼承等概念。這些概念構(gòu)成了后來出現(xiàn)的所有面向?qū)ο笳Z言都必須遵循的基礎(chǔ)概念,同時(shí),這些概念也構(gòu)成了面向?qū)ο蠓椒ǖ暮诵母拍畹闹匾M成部分。Simula67的面向?qū)ο蟾拍畹挠绊懯亲罹薮蠖钸h(yuǎn)的。它本身雖然因?yàn)楸容^難學(xué)、難用而未能廣泛流行,但在它的影響下所產(chǎn)生的面向?qū)ο蠹夹g(shù)卻迅速傳播開來,并在全世界掀起了一股面向?qū)ο蠹夹g(shù)熱潮,至今盛行不衰。面向?qū)ο蟪绦蛟O(shè)計(jì)在軟件開發(fā)領(lǐng)域引起了大的變革,極大地提高了軟件開發(fā)的效率,為解決軟件危機(jī)帶來了一線希望。1.2.3面向?qū)ο蟪绦蛟O(shè)計(jì)語言2.Smalltalk語言20世紀(jì)70年代到80年代前期,美國(guó)施樂公司的帕洛阿爾托研究中心(PARC)開發(fā)了Smalltalk編程語言。從Smalltalk-72、Smalltalk-78到Smalltalk-80,它們開發(fā)完成了整個(gè)Smalltalk系列,Smalltalk編程語言對(duì)近代面向?qū)ο缶幊陶Z言影響很大,所以稱之為“面向?qū)ο缶幊讨浮薄?.2.3面向?qū)ο蟪绦蛟O(shè)計(jì)語言2.Smalltalk語言與許多其它程序設(shè)計(jì)語言的不同之處在于,Smalltalk還具有如下幾個(gè)特點(diǎn)。1)Smalltalk是一種全新的純面向?qū)ο蟮某绦蛟O(shè)計(jì)語言。它是一種包含完整語法和語義的純面向?qū)ο蟮恼Z言。使用編譯器可以將Smalltalk源程序生成可以在虛擬機(jī)上運(yùn)行的二進(jìn)制代碼,Smalltalk語言本身非常精煉。1.2.3面向?qū)ο蟪绦蛟O(shè)計(jì)語言2.Smalltalk語言2)提供一個(gè)完整的程序開發(fā)環(huán)境Smalltalk附帶了一個(gè)巨大的標(biāo)準(zhǔn)類庫(kù),這使得開發(fā)Smalltalk程序的效率非常高。甚至其它一些語言(如Ada,C和Pascal)中的部分功能(例如條件判斷,循環(huán)等)也被當(dāng)成特定的Smalltalk類提供。1.2.3面向?qū)ο蟪绦蛟O(shè)計(jì)語言2.Smalltalk語言3)應(yīng)用開發(fā)環(huán)境(ADE)由于Smalltalk的歷史原因,它具有一個(gè)非常優(yōu)秀的高度集成、開放的應(yīng)用開發(fā)環(huán)境。由于開發(fā)環(huán)境中的瀏覽器、監(jiān)視器以及調(diào)試器都由同樣的源程序衍生出來的,不同的版本之間也具有相當(dāng)好的兼容性。此外,這些工具的源程序都可以在ADE直接存取。1.2.3面向?qū)ο蟪绦蛟O(shè)計(jì)語言2.Smalltalk語言malltalk被公認(rèn)為歷史上第二個(gè)面向?qū)ο蟮某绦蛟O(shè)計(jì)語言和第一個(gè)真正的集成開發(fā)環(huán)境(IDE)。是由AlanKay,DanIngalls,TedKaehler,AdeleGoldberg等于70年代初在XeroxPARC開發(fā)。Smalltalk對(duì)其它眾多的面向?qū)ο蟪绦蛘Z言的產(chǎn)生起到了極大的推動(dòng)作用,如Objective-C、Actor、Java和Ruby等。90年代的許多軟件開發(fā)思想均得益于Smalltalk,例如設(shè)計(jì)模式(DesignPatterns),極限編程(ExtremeProgramming,XP)和軟件重構(gòu)(Refactoring)等。1.2.3面向?qū)ο蟪绦蛟O(shè)計(jì)語言3.C++程序設(shè)計(jì)語言由于C語言是一門通用的計(jì)算機(jī)編程語言,其應(yīng)用十分廣泛。所以,面向?qū)ο笳Z言出現(xiàn)以后,出現(xiàn)了多種不同的基于C語言的面向?qū)ο笤O(shè)計(jì)語言。這些語言以C語言為基礎(chǔ),以不同的方式擴(kuò)充了對(duì)象的概念框架,從而構(gòu)成了不同的面向?qū)ο笳Z言。人們也將這種從C++擴(kuò)充出來的語言稱為C族語言。常見的C族語言包括:ObjectC、C++、C#和Java等程序設(shè)計(jì)語言。1.2.3面向?qū)ο蟪绦蛟O(shè)計(jì)語言3.C++程序設(shè)計(jì)語言C++程序設(shè)計(jì)語言是對(duì)C語言的繼承,它既可以過程化編程,又可以基于對(duì)象編程,還可以進(jìn)行以繼承和多態(tài)為特點(diǎn)的面向?qū)ο缶幊蹋?dāng)然也可以混合編程。C++不僅擁有計(jì)算機(jī)高效運(yùn)行的實(shí)用性特征,同時(shí)還致力于提高大規(guī)模程序的編程質(zhì)量與程序設(shè)計(jì)語言的問題描述能力。C++程序設(shè)計(jì)語言具有支持?jǐn)?shù)據(jù)封裝藏、繼承、多態(tài)和重用等面向?qū)ο筇卣?。特別的是,C++還支持多繼承。1.2.3面向?qū)ο蟪绦蛟O(shè)計(jì)語言3.C++程序設(shè)計(jì)語言其主要優(yōu)點(diǎn)是,C++是在C語言的基礎(chǔ)上開發(fā)的一種面向?qū)ο缶幊陶Z言,其應(yīng)用領(lǐng)域十分廣泛。C++語言靈活,運(yùn)算符和數(shù)據(jù)結(jié)構(gòu)豐富、具有結(jié)構(gòu)化控制語句、程序執(zhí)行效率高,而且同時(shí)具有高級(jí)語言與匯編語言的優(yōu)點(diǎn)。C++的主要缺點(diǎn)是缺少自動(dòng)垃圾回收機(jī)制,設(shè)計(jì)出來的軟件容易造成內(nèi)存泄漏(MemoryLeak)。從而影響軟件的可靠性。同時(shí)也是這一原因,使得優(yōu)秀的C++程序員成為稀缺資源。1.2.3面向?qū)ο蟪绦蛟O(shè)計(jì)語言4.C#程序設(shè)計(jì)語言C#程序設(shè)計(jì)語言是微軟公司開發(fā)的一種現(xiàn)代面向?qū)ο笄翌愋桶踩某绦蛟O(shè)計(jì)語言。C#不僅是一種面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,C#也是一種對(duì)面向組件(Component-Oriented)的語言。現(xiàn)代軟件已經(jīng)越來越依賴這種具有自包含和自描述功能包形式的軟件組件。這種組件的關(guān)鍵之處在于,它們可以通過屬性、方法和事件等概念來提供編程模型;它們還具有提供關(guān)于組件的聲明性信息的特性;1.2.3面向?qū)ο蟪绦蛟O(shè)計(jì)語言4.C#程序設(shè)計(jì)語言C#語言提供的結(jié)構(gòu)成分直接支持組件及其相關(guān)概念,這使得C#語言自然而然成為創(chuàng)建和使用軟件組件的重要選擇。有助于構(gòu)造健壯、持久的應(yīng)用程序。C#還提供了垃圾自動(dòng)回收(Garbagecollection)、異常處理(ExceptionHandling)和類型安全(TypeSafe)等三大機(jī)制。1.2.3面向?qū)ο蟪绦蛟O(shè)計(jì)語言4.C#程序設(shè)計(jì)語言1)垃圾自動(dòng)回收機(jī)制可以自動(dòng)釋放不再使用的對(duì)象所占用的內(nèi)存,解決了C++的內(nèi)存泄漏問題;2)異常處理機(jī)制提供了結(jié)構(gòu)化和可擴(kuò)展的錯(cuò)誤檢測(cè)和恢復(fù)方法,為設(shè)計(jì)高可靠性的應(yīng)用程序提供了語言基礎(chǔ);3)類型安全機(jī)制可使設(shè)計(jì)出來的應(yīng)用程序避免讀取未初始化的變量、數(shù)組索引超出邊界或執(zhí)行未經(jīng)檢查的類型強(qiáng)制轉(zhuǎn)換等特殊情形。1.2.3面向?qū)ο蟪绦蛟O(shè)計(jì)語言4.C#程序設(shè)計(jì)語言同一類型系統(tǒng)(UnifiedTypeSystem)所有的C#類型(包括諸如int和double之類的基元類型)都繼承于一個(gè)惟一的一個(gè)Object根類型。這使得所有類型的對(duì)象都共享一組通用操作,并且任何類型的值都能夠以一致的方式進(jìn)行存儲(chǔ)、傳遞和操作。1.2.3面向?qū)ο蟪绦蛟O(shè)計(jì)語言4.C#程序設(shè)計(jì)語言C#同時(shí)支持用戶定義的引用類型和值類型,既允許對(duì)象的動(dòng)態(tài)分配,也允許輕量級(jí)結(jié)構(gòu)的內(nèi)聯(lián)存儲(chǔ)。為了確保C#程序和庫(kù)能夠以兼容的方式逐步演進(jìn),C#的設(shè)計(jì)中充分強(qiáng)調(diào)了版本控制(Versioning)。C#的設(shè)計(jì)在某些方面直接考慮到版本控制的需要,其中包括單獨(dú)使用的virtual和override修飾符、方法重載決策規(guī)則以及對(duì)顯式接口成員聲明的支持。1.2.3面向?qū)ο蟪绦蛟O(shè)計(jì)語言5.Java程序設(shè)計(jì)語言Java語言具有很多與當(dāng)今使用的大多數(shù)編程語言相通的特性。Java語言與C++和C#程序設(shè)計(jì)語言有很多的相似之處,其本身就是用相似的C和C++結(jié)構(gòu)設(shè)計(jì)的。Java語言最初的目標(biāo)只是為了給萬維網(wǎng)創(chuàng)建Applet工具而定義的一種語言。Applet是一種運(yùn)行在Web頁面中的小應(yīng)用程序。下載之后,它可以在不使用Web服務(wù)器資源的情況下,在瀏覽器頁面中執(zhí)行任務(wù)并與用戶進(jìn)行交互。1.2.3面向?qū)ο蟪绦蛟O(shè)計(jì)語言5.Java程序設(shè)計(jì)語言Java語言對(duì)于Web這樣的分布式網(wǎng)絡(luò)環(huán)境確實(shí)有非常重要的價(jià)值。然而,它已經(jīng)遠(yuǎn)遠(yuǎn)超越了這個(gè)領(lǐng)域,成為了一種強(qiáng)大的通用編程語言,適用于構(gòu)建各種不依賴于網(wǎng)絡(luò)特性的應(yīng)用,并可滿足其它應(yīng)用的不同需求。它在遠(yuǎn)程主機(jī)上以安全的方式執(zhí)行下載代碼的能力正是許多組織的關(guān)鍵需求。1.2.3面向?qū)ο蟪绦蛟O(shè)計(jì)語言5.Java程序設(shè)計(jì)語言有些團(tuán)隊(duì)甚至將Java作為一種通用編程語言,用于開發(fā)對(duì)機(jī)器無關(guān)性要求不高的項(xiàng)目。Java語言易于編程,安全性強(qiáng),可用于快速地開發(fā)工作代碼。它同樣具有垃圾回收和類型安全引用這樣的特性,某些常見的編程錯(cuò)誤在Java中是不會(huì)發(fā)生的。對(duì)多線程的支持滿足了基于網(wǎng)絡(luò)和圖形化用戶界面的現(xiàn)代應(yīng)用的需要,因?yàn)檫@些應(yīng)用必須同時(shí)執(zhí)行多個(gè)任務(wù);而異常處理機(jī)制使得處理錯(cuò)誤情況的任務(wù)變得簡(jiǎn)單易行。盡管其內(nèi)置工具非常強(qiáng)大,Java依然是一種簡(jiǎn)單的語言,程序員可以很快就精通它。1.2.3面向?qū)ο蟪绦蛟O(shè)計(jì)語言以上簡(jiǎn)單介紹了Simula、Samlltalk、C++、C#和Java等幾種典型的面向?qū)ο蟪绦蛟O(shè)計(jì)語言及其特性。這些語言中,目前最流行的是C++、C#和Java這三種程序設(shè)計(jì)語言。這幾種程序設(shè)計(jì)語言通常被作為軟件開發(fā)項(xiàng)目的首選語言。除了上述介紹的面向?qū)ο蟪绦蛟O(shè)計(jì)語言之外,還有一些所謂的基于對(duì)象的程序設(shè)計(jì)語言,例如PowerBuilder和VisualBasic等。事實(shí)上,在實(shí)際的軟件項(xiàng)目開發(fā)過程中,每種語言都有不同的編譯器版本、集成環(huán)境和資源庫(kù)等多方面的選擇,但所有這些選擇所依據(jù)的面向?qū)ο笏枷牒烷_發(fā)方法都是基本相同的,或是語言無關(guān)的。1.2.4典型的面向?qū)ο蟮拈_發(fā)方法面向?qū)ο蠓椒ǖ漠a(chǎn)生和發(fā)展同樣也經(jīng)歷一個(gè)比較漫長(zhǎng)的過程。在這個(gè)過程中,首先出現(xiàn)的是面向?qū)ο蟪绦蛟O(shè)計(jì)語言和面向?qū)ο蟪绦蛟O(shè)計(jì)方法(OOP,ObjectOrientedProgramming),然后是面向?qū)ο笙到y(tǒng)設(shè)計(jì)(OOD,ObjectOrientedDesign),最后形成的是面向?qū)ο蠓治觯∣OA,ObjectOrientedAnalysis),隨后逐漸出現(xiàn)了面向?qū)ο鬁y(cè)試(OOT,ObjectOrientedTesting)、面向?qū)ο蠖攘浚∣OS,ObjectOrientedSoftwareMeasurement)和面向?qū)ο蠊芾恚∣OM,ObjectOrientedManagement)等面向?qū)ο箝_發(fā)方法和技術(shù)。1.2.4典型的面向?qū)ο蟮拈_發(fā)方法典型的面向?qū)ο蠓椒ò–oad-Yourdon方法、Rumbaugh方法、Booch方法、Wirfs-Brock方法、Jacobson方法和VMT(VisualModelingTechnique)方法等方法。這些方法既有聯(lián)系又相互區(qū)別,所有這些方法相互補(bǔ)充相互融合,構(gòu)成了現(xiàn)代的面向?qū)ο箝_發(fā)方法。1.2.4典型的面向?qū)ο蟮拈_發(fā)方法1.Coad-Yourdon方法Coad-Yourdon方法是由PeterCoad和EdwardYourdon在1991年提出的,是一種漸進(jìn)的面向?qū)ο蠓治雠c設(shè)計(jì)方法。Coad-Yourdon方法將整個(gè)開發(fā)過程劃分為分析和設(shè)計(jì)兩個(gè)階段。在分析階段,主要利用定義主題、發(fā)現(xiàn)和標(biāo)識(shí)對(duì)象、標(biāo)識(shí)服務(wù)、標(biāo)識(shí)結(jié)構(gòu)和標(biāo)識(shí)屬性等五個(gè)層次的活動(dòng)來定義和描述系統(tǒng)的結(jié)構(gòu)和行為。在設(shè)計(jì)階段中,則在將系統(tǒng)劃分為問題論域、用戶界面、任務(wù)管理和數(shù)據(jù)管理等四個(gè)組成部分的基礎(chǔ)上,持續(xù)和細(xì)化這五個(gè)層次的活動(dòng),完成整個(gè)系統(tǒng)的設(shè)計(jì)。1.2.4典型的面向?qū)ο蟮拈_發(fā)方法1.Coad-Yourdon方法Coad-Yourdon方法中涉及到的主要概念如下:(1)主題層主題是對(duì)目標(biāo)系統(tǒng)的結(jié)構(gòu)和行為的一種較高層次的抽象,可以看成是一組關(guān)系密切的類組成的集合。將一個(gè)系統(tǒng)劃分成若干個(gè)主題,可以看成是對(duì)系統(tǒng)結(jié)構(gòu)進(jìn)行的一個(gè)劃分,不同的類(或?qū)ο螅┙M合構(gòu)成不同的主題,所有主題構(gòu)成了系統(tǒng)的主題層。主題層的主要工作就是通過定義目標(biāo)系統(tǒng)的主題實(shí)現(xiàn)對(duì)系統(tǒng)結(jié)構(gòu)的劃分,給出系統(tǒng)的整體框架,從而建立系統(tǒng)結(jié)構(gòu)的概念模型。1.2.4典型的面向?qū)ο蟮拈_發(fā)方法1.Coad-Yourdon方法(2)對(duì)象層對(duì)象層的主要工作是發(fā)現(xiàn)和描述對(duì)象和類,這可以從應(yīng)用領(lǐng)域開始,逐步發(fā)現(xiàn)和識(shí)別基礎(chǔ)類和對(duì)象,以確定形成整個(gè)應(yīng)用的基礎(chǔ)。這個(gè)層次的活動(dòng)要通過分析問題域中目標(biāo)系統(tǒng)的責(zé)任、環(huán)境以及系統(tǒng)與環(huán)境之間的關(guān)系,從而確定對(duì)系統(tǒng)有用的類、對(duì)象及其責(zé)任。1.2.4典型的面向?qū)ο蟮拈_發(fā)方法1.Coad-Yourdon方法(3)服務(wù)層一個(gè)對(duì)象對(duì)外提供的服務(wù)是指對(duì)象收到消息后所執(zhí)行的操作,它描述了系統(tǒng)需要執(zhí)行的功能和處理。定義服務(wù)的目的在于定義對(duì)象的行為之間的消息鏈接。其具體步驟包括標(biāo)識(shí)對(duì)象狀態(tài)、標(biāo)識(shí)必要的服務(wù)、標(biāo)識(shí)消息鏈接和對(duì)服務(wù)的描述。1.2.4典型的面向?qū)ο蟮拈_發(fā)方法1.Coad-Yourdon方法(4)結(jié)構(gòu)層面向?qū)ο笙到y(tǒng)的結(jié)構(gòu)通常表現(xiàn)為層次結(jié)構(gòu)。典型的層次結(jié)構(gòu)包括一般與特殊的類層次結(jié)構(gòu)和整體與部分之間的對(duì)象層次結(jié)構(gòu)。類層次結(jié)構(gòu)也就是所謂的繼承結(jié)構(gòu)。對(duì)象層次結(jié)構(gòu)主要表現(xiàn)為對(duì)象的組合、聚合、關(guān)聯(lián)甚至是依賴等關(guān)系。這種結(jié)構(gòu)通常被用來表示一個(gè)對(duì)象如何成為另一個(gè)對(duì)象的一部分,以及如何將多個(gè)對(duì)象組裝成更大的對(duì)象。結(jié)構(gòu)層活動(dòng)的主要工作內(nèi)容就是對(duì)這兩種結(jié)構(gòu)進(jìn)行識(shí)別和標(biāo)識(shí)1.2.4典型的面向?qū)ο蟮拈_發(fā)方法1.Coad-Yourdon方法(5)屬性層屬性所描述的主要是對(duì)象的狀態(tài)信息,在任何對(duì)象中,屬性值表示了該對(duì)象的狀態(tài)信息。屬性層的活動(dòng)中,需要為每個(gè)對(duì)象找出其在目標(biāo)系統(tǒng)中所需要的屬性,而后將屬性安排到適當(dāng)?shù)奈恢?,找出?shí)例鏈接,最后進(jìn)行檢查對(duì)每個(gè)屬性應(yīng)該給出描述,并確定其屬性的名字和屬性的描述與存在哪些特殊的限制(如只讀、屬性值限定于某個(gè)范圍之內(nèi)等)。1.2.4典型的面向?qū)ο蟮拈_發(fā)方法1.Coad-Yourdon方法Coad-Yourdon方法將系統(tǒng)設(shè)計(jì)的任務(wù)劃分為數(shù)據(jù)管理、任務(wù)管理、問題域和人機(jī)交互子系統(tǒng)等四個(gè)子系統(tǒng)的設(shè)計(jì)。(1)數(shù)據(jù)管理子系統(tǒng)數(shù)據(jù)管理子系統(tǒng)是指系統(tǒng)中專門用于實(shí)現(xiàn)數(shù)據(jù)管理功能的子系統(tǒng)。其主要功能就是實(shí)現(xiàn)系統(tǒng)的數(shù)據(jù)存儲(chǔ),一方面,規(guī)范數(shù)據(jù)的存儲(chǔ)和操作方式,提高數(shù)據(jù)訪問的通用性;另一方面,保證數(shù)據(jù)存儲(chǔ)的安全性、訪問的并發(fā)性、較好的可維護(hù)性等。數(shù)據(jù)管理部分的設(shè)計(jì)包括操作設(shè)計(jì)和數(shù)據(jù)存儲(chǔ)的設(shè)計(jì)兩部分。設(shè)計(jì)數(shù)據(jù)存儲(chǔ)設(shè)計(jì)要根據(jù)所使用的數(shù)據(jù)存儲(chǔ)管理模式來定。1.2.4典型的面向?qū)ο蟮拈_發(fā)方法1.Coad-Yourdon方法(2)任務(wù)管理子系統(tǒng)任務(wù)也稱為進(jìn)程,就是執(zhí)行一系列活動(dòng)的一段程序,當(dāng)系統(tǒng)中有許多并發(fā)任務(wù)時(shí),需要依照各個(gè)行為的協(xié)調(diào)關(guān)系進(jìn)行任務(wù)劃分,所以,任務(wù)管理主要是對(duì)系統(tǒng)各種任務(wù)進(jìn)行選擇和調(diào)整的過程。采用面向?qū)ο蟪绦蛟O(shè)計(jì)方式,每一個(gè)對(duì)象都是一個(gè)獨(dú)立實(shí)體,因此,從概念上講,不同對(duì)象是可以并發(fā)工作的,但在實(shí)際系統(tǒng)中,許多對(duì)象之間往往存在相互依賴關(guān)系,而且多個(gè)對(duì)象可能是由一個(gè)處理器處理的。所以,設(shè)計(jì)任務(wù)管理工作時(shí),主要是確定對(duì)象之間的關(guān)系,包括選擇必須同時(shí)動(dòng)作的對(duì)象,以及對(duì)相互排斥的對(duì)象的處理進(jìn)行調(diào)整。根據(jù)對(duì)象完成的任務(wù)及對(duì)象之間的關(guān)系,進(jìn)一步設(shè)計(jì)任務(wù)管理子系統(tǒng)。1.2.4典型的面向?qū)ο蟮拈_發(fā)方法1.Coad-Yourdon方法(3)問題域子系統(tǒng)問題域子系統(tǒng)設(shè)計(jì)的主要工作則是對(duì)在分析階段獲得的需求模型進(jìn)行進(jìn)一步的細(xì)化。在分析階段,通過詳細(xì)分析,已獲得了問題域的基本模型。進(jìn)入設(shè)計(jì)階段后,則要根據(jù)所選擇的開發(fā)環(huán)境和系統(tǒng)的運(yùn)行環(huán)境以及其它技術(shù)和管理約束等因素,對(duì)分析模型進(jìn)行細(xì)化和完善。1.2.4典型的面向?qū)ο蟮拈_發(fā)方法1.Coad-Yourdon方法(4)人機(jī)界面子系統(tǒng)人機(jī)界面系統(tǒng)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 現(xiàn)代辦公環(huán)境的網(wǎng)絡(luò)安全培訓(xùn)
- 未來學(xué)習(xí)模式基于網(wǎng)絡(luò)教育平臺(tái)的思考
- 現(xiàn)代辦公空間中的綠色環(huán)保用品設(shè)計(jì)思考
- 2024年四年級(jí)品德與社會(huì)上冊(cè) 第三單元 生活在這里真好 第11課《我家來了新鄰居》說課稿 粵教版001
- 2024-2025學(xué)年高中物理 第十二章 機(jī)械波 4 波的衍射和干涉說課稿4 新人教版選修3-4001
- Module 1 Unit 1 She's a nice teacher(說課稿)-2023-2024學(xué)年外研版(三起)英語四年級(jí)下冊(cè)
- 2023九年級(jí)化學(xué)上冊(cè) 第一章 大家都來學(xué)化學(xué)1.2 化學(xué)實(shí)驗(yàn)室之旅說課稿(新版)粵教版001
- 2025農(nóng)村養(yǎng)殖場(chǎng)場(chǎng)地租地合同
- 2025國(guó)際專利技術(shù)許可合同模板版
- Unit 5 Nature and Culture(說課稿)2023-2024學(xué)年人教新起點(diǎn)版英語六年級(jí)下冊(cè)
- 八年級(jí)下冊(cè)歷史思維導(dǎo)圖
- 電動(dòng)汽車用驅(qū)動(dòng)電機(jī)系統(tǒng)-編制說明
- 江蘇卷2024年高三3月份模擬考試化學(xué)試題含解析
- (正式版)JTT 1497-2024 公路橋梁塔柱施工平臺(tái)及通道安全技術(shù)要求
- 醫(yī)療器械物價(jià)收費(fèi)申請(qǐng)流程
- 招聘專員轉(zhuǎn)正述職報(bào)告
- “一帶一路”背景下的西安市文化旅游外宣翻譯研究-基于生態(tài)翻譯學(xué)理論
- 2024年江蘇省昆山市六校中考聯(lián)考(一模)化學(xué)試題
- 大學(xué)生文學(xué)常識(shí)知識(shí)競(jìng)賽考試題庫(kù)500題(含答案)
- 國(guó)家電網(wǎng)智能化規(guī)劃總報(bào)告
- 邢臺(tái)市橋西區(qū)2024年事業(yè)單位考試《公共基礎(chǔ)知識(shí)》全真模擬試題含解析
評(píng)論
0/150
提交評(píng)論