什么是OOA/OOD
Object Oriented Analyzing?
Object Oriented Design?
Object Oriented Programming
ooa(object oriented analysis)面向?qū)ο蠓治?
ood(object oriented design)面向?qū)ο笤O(shè)計(jì)?
如所熟知,面向?qū)ο笞鳛橐环N程序設(shè)計(jì)技術(shù)最早于60年代后期提出,用于Simula的應(yīng)用程?
序開(kāi)發(fā)。到了70年代,面向?qū)ο蟪蔀镾malltalk語(yǔ)言的一個(gè)重要特征。當(dāng)時(shí),面向?qū)ο蠹夹g(shù)主要?
用于程序設(shè)計(jì)。進(jìn)入90年代,人們的注意力逐漸從程序設(shè)計(jì)轉(zhuǎn)向系統(tǒng)分析和設(shè)計(jì),用對(duì)象的觀?
點(diǎn)來(lái)認(rèn)識(shí)現(xiàn)實(shí)世界、設(shè)計(jì)問(wèn)題的可行解,隨之也就出現(xiàn)了許多OOA和OOD方法。但這些方法?
還不很成熟,在OOA與OOD的邊界劃分上也存在著爭(zhēng)議。如:有人認(rèn)為面向?qū)ο筌浖_(kāi)發(fā)?
過(guò)程可以分為面向?qū)ο蠓治?、面向?qū)ο笤O(shè)計(jì)和面向?qū)ο蟪绦蛟O(shè)計(jì)三個(gè)階段;有人認(rèn)為分析和設(shè)?
計(jì)可以交叉進(jìn)行不必做嚴(yán)格區(qū)分;還有人沿用傳統(tǒng)方法進(jìn)行分析和設(shè)計(jì),用面向?qū)ο蟪绦蛟O(shè)計(jì)?
語(yǔ)言來(lái)實(shí)現(xiàn)系統(tǒng)。O?
OA/OOD的一些較有代表性的工作有Gray.Booch的OOAD方法,Coad&Yourdon的?
OOA和OOD方法,Shlaer&Mellor的OOA方法,Rumbaugh的OOAD方法等。不同的方法?
體系都分別體現(xiàn)了人們對(duì)OOA、OOD,以及面向?qū)ο筌浖_(kāi)發(fā)過(guò)程的不同認(rèn)識(shí)。本文的主要?
目的就是,試圖通過(guò)對(duì)現(xiàn)有OOA與OOD方法的共性進(jìn)行縱觀分析,弄清二者之間的邊界問(wèn)?
題,評(píng)析從OOA到OOD過(guò)渡的難易,并討論實(shí)現(xiàn)這種過(guò)渡所涉及的主要工作。?
ooa:分析階段所做的主要工作是理解問(wèn)題和需求構(gòu)模,將現(xiàn)實(shí)世界中的問(wèn)題映射到問(wèn)題域。在該?
階段,要明確用戶(hù)提出了哪些功能要求,為完成這些要求,系統(tǒng)應(yīng)有哪些構(gòu)件,采用什么樣的結(jié)構(gòu),并寫(xiě)出詳細(xì)的需求規(guī)約。OOA中引入了許多面向?qū)ο蟮母拍詈驮瓌t,如,對(duì)象、屬性、服務(wù)?
、繼承、封裝等,并利用這些概念和原則來(lái)分析、認(rèn)識(shí)和理解客觀世界,將客觀世界中的實(shí)體抽?
象為問(wèn)題域中的對(duì)象,即問(wèn)題對(duì)象,分析客觀世界中問(wèn)題的結(jié)構(gòu),明確為完成系統(tǒng)功能,對(duì)象間?
應(yīng)具有的聯(lián)系和相互作用。因此,下述問(wèn)題是OOA階段必須回答的:?
1)為完成用戶(hù)要求系統(tǒng)應(yīng)提供哪些功能??
2)系統(tǒng)應(yīng)有哪些對(duì)象構(gòu)成??
3)每個(gè)對(duì)象應(yīng)有哪些屬性和服務(wù)??
4)對(duì)象間應(yīng)有怎樣的聯(lián)系?要?
回答這些問(wèn)題,就需要從靜態(tài)和動(dòng)態(tài)兩方面來(lái)認(rèn)識(shí)、分析現(xiàn)實(shí)世界對(duì)象。具體地說(shuō),要進(jìn)行?
:?
1)個(gè)體特征分析:標(biāo)識(shí)對(duì)象及其屬性和服務(wù)。有的方法在標(biāo)識(shí)特征時(shí)對(duì)屬性的要求可能?
弱一些,這是因?yàn)閷?duì)象是屬性和操作的封裝體,對(duì)象的訪問(wèn)可以通過(guò)接口--操作來(lái)實(shí)現(xiàn)。這?
樣在標(biāo)識(shí)對(duì)象時(shí)對(duì)象的內(nèi)部特征可暫不考慮,僅考察外部行為。每種分析方法在完成這些工作?
時(shí)各具特色,如:Coad&Yourdon方法只給出了一些標(biāo)識(shí)對(duì)象及其特征的一般原則和思路;R?
.Abbott認(rèn)為,可以通過(guò)分析非形式化英語(yǔ)的問(wèn)題描述,將名詞標(biāo)識(shí)為對(duì)象,將形容詞標(biāo)識(shí)為屬?
性,將動(dòng)詞標(biāo)識(shí)為服務(wù);Bailin等人則采用結(jié)構(gòu)化與面向?qū)ο蠹夹g(shù)相結(jié)合的方法。?
2)靜態(tài)分析:分析和描述系統(tǒng)的靜態(tài)結(jié)構(gòu)。一般地,對(duì)象系統(tǒng)中的類(lèi)或?qū)ο笾g存在著兩?
種關(guān)系:一般—特殊關(guān)系和整體—部分關(guān)系。其中,前者更具普遍性,它的一種重要實(shí)現(xiàn)形式?
就是繼承機(jī)制,也是面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言所支持的語(yǔ)言設(shè)施。同樣,大多OOA方法也都為?
繼承提供了相應(yīng)的表示方法。因此,系統(tǒng)靜態(tài)分析主要是分析、識(shí)別對(duì)象或類(lèi)間的一般—特殊?
結(jié)構(gòu),并添加一些必要的類(lèi),構(gòu)造繼承關(guān)系。?
3)動(dòng)態(tài)分析:分析對(duì)象及之間的行為及其控制關(guān)系,建立系統(tǒng)的動(dòng)態(tài)模型。多數(shù)分析方法?
要求進(jìn)行這方面的工作,有的則將它放到設(shè)計(jì)階段去完成,這主要是由OOA、OOD階段劃分?
的不同所造成的。動(dòng)態(tài)模型一般由一組狀態(tài)轉(zhuǎn)換圖構(gòu)成,從這組狀態(tài)轉(zhuǎn)換圖可以映射到對(duì)象模?
型。系統(tǒng)的動(dòng)態(tài)模型從對(duì)象行為的角度刻劃了系統(tǒng)功能,方便了從OOA到OOD的過(guò)渡。有的?
方法雖未提供動(dòng)態(tài)模型,但也提供了表示對(duì)象行為的類(lèi)似方法。早期的OOA方法對(duì)建立系?
統(tǒng)動(dòng)態(tài)模型認(rèn)識(shí)不足,這主要是因?yàn)楫?dāng)時(shí)的許多方法是受數(shù)據(jù)模型的啟發(fā)而產(chǎn)生的?,F(xiàn)在越來(lái)越?
多的人認(rèn)識(shí)到了系統(tǒng)動(dòng)態(tài)分析工作的重要性,并在分析方法中引入了相應(yīng)概念。除?
此之外,許多OOA方法還引入了問(wèn)題復(fù)雜性控制機(jī)制。如,Coad&Yourdon在其方法中?
引入了主題的概念;Wirfs&Brock在其方法中引入了子系統(tǒng)的概念。問(wèn)題復(fù)雜性控制機(jī)制主?
要針對(duì)大型復(fù)雜系統(tǒng),它將一組對(duì)象或類(lèi)抽象成新的系統(tǒng)構(gòu)件,以達(dá)到簡(jiǎn)化問(wèn)題空間的目的?
。這樣,分析和設(shè)計(jì)人員就可以從宏觀與微觀、整體與局部等不同角度來(lái)分析問(wèn)題,便于透徹地?
認(rèn)識(shí)和理解問(wèn)題。?
OOD方法:?
析階段主要是明確用戶(hù)的功能需求,及滿足用戶(hù)所需的系統(tǒng)部件及其結(jié)構(gòu)。設(shè)計(jì)階段則主?
要是確定實(shí)現(xiàn)用戶(hù)需求的方法,即怎樣做才能滿足用戶(hù)需求,并構(gòu)造出系統(tǒng)的實(shí)現(xiàn)藍(lán)圖。面向?
對(duì)象設(shè)計(jì)也是如此,只不過(guò)是引入了一些面向?qū)ο蟮母拍詈驮瓌t,用以指導(dǎo)設(shè)計(jì)工作。OOD首?
先從OOA的結(jié)果開(kāi)始,并將其從問(wèn)題域映射到實(shí)現(xiàn)域;為滿足實(shí)現(xiàn)的需要,還要增加一些類(lèi)?
、結(jié)構(gòu)及屬性和服務(wù),并對(duì)原有類(lèi)及屬性進(jìn)行調(diào)整。此外,還要完成應(yīng)用控制、人機(jī)交互界面的設(shè)計(jì)等。在現(xiàn)有方法中,Coad等人的OOD就是比較全面的設(shè)計(jì)方法。OOD的主要工作有:2?
問(wèn)題域部分的設(shè)計(jì)問(wèn)?
題域部分的設(shè)計(jì)是任何OOD方法都必須完成的工作,它主要是對(duì)OOA結(jié)果進(jìn)行改進(jìn)和?
精化,并將其由問(wèn)題域轉(zhuǎn)化到解域,具體來(lái)說(shuō),有以下幾個(gè)方面:.?
屬性:有些屬性在分析階段有助于問(wèn)題的理解,而到了設(shè)計(jì)階段則可以由其他屬性導(dǎo)出或?
根本沒(méi)必要保留。因此,應(yīng)將它們?nèi)サ?。相反?為了實(shí)現(xiàn)服務(wù)算法還需要增加相應(yīng)的一些屬性?
。.?
服務(wù):OOA只給出了服務(wù)的接口,其具體實(shí)現(xiàn)算法要在OOD階段完成。.?
類(lèi)及對(duì)象:在OOA階段有助于問(wèn)題理解的一些類(lèi)在OOD階段成為冗余,需要?jiǎng)h除,而為?
了優(yōu)化調(diào)整繼承關(guān)系還要增加一些類(lèi)。所有的類(lèi)都確定以后還要明確哪些類(lèi)的對(duì)象會(huì)引發(fā)哪?
些類(lèi)創(chuàng)建新對(duì)象。.?
結(jié)構(gòu):對(duì)類(lèi)間結(jié)構(gòu)進(jìn)行優(yōu)化調(diào)整。.?
對(duì)象行為:明確對(duì)象間消息傳遞的實(shí)現(xiàn)算法,依據(jù)動(dòng)態(tài)模型確定對(duì)象間消息發(fā)送的先后順?
序,并設(shè)計(jì)相應(yīng)算法,協(xié)調(diào)對(duì)象的行為。2?
2 人機(jī)交互與應(yīng)用控制部分的設(shè)計(jì)有?
些設(shè)計(jì)方法并沒(méi)有提到交互界面的設(shè)計(jì),一方面是因?yàn)檫@些系統(tǒng)中交互界面不十分重要?
;另一方面是因?yàn)檫@部分的設(shè)計(jì)很有規(guī)律,設(shè)計(jì)方法也比較成熟,但為完整起見(jiàn),仍將其列出?
。主要工作包括:.?
交互界面子系統(tǒng)的設(shè)計(jì):與界面有關(guān)的類(lèi)及類(lèi)間結(jié)構(gòu)的設(shè)計(jì),以及有關(guān)算法的設(shè)計(jì)。.?
交互界面子系統(tǒng)和應(yīng)用之間接口的設(shè)計(jì)。.?
應(yīng)用控制部分的設(shè)計(jì):這部分對(duì)象主要完成應(yīng)用的驅(qū)動(dòng)工作。這部分對(duì)象不同于從現(xiàn)實(shí)?
世界中抽象出來(lái)的對(duì)象,在現(xiàn)實(shí)世界和問(wèn)題域中沒(méi)有原型,它們同界面子系統(tǒng)中的對(duì)象及問(wèn)題?
對(duì)象發(fā)生作用,控制系統(tǒng)的運(yùn)行。?
OOA與OOD的區(qū)別?
上討論了OOA階段和OOD階段所應(yīng)完成的主要工作,由于這兩個(gè)階段的劃分沒(méi)有公認(rèn)?
的標(biāo)準(zhǔn),有些工作是在OOA階段完成還是在OOD階段完成還存在著爭(zhēng)議。有人認(rèn)為OOA和?
OOD可以交叉進(jìn)行;有人認(rèn)為OOD是對(duì)OOA結(jié)果的改進(jìn)和細(xì)化,所以只提OOA;有人則更?
強(qiáng)調(diào)OOD。盡管OOA和OOD存在著某些交叉和聯(lián)系,但它們之間仍有許多差別,如:?
1)OOA將現(xiàn)實(shí)世界中的實(shí)體抽象為問(wèn)題對(duì)象,并構(gòu)造問(wèn)題域中的系統(tǒng)需求模型;OOD將?
問(wèn)題對(duì)象轉(zhuǎn)化為解域中的類(lèi)并在解域中構(gòu)造出問(wèn)題的解。?
2)OOA側(cè)重于用戶(hù)需求的分析和對(duì)問(wèn)題域的理解,分析人員關(guān)心的是系統(tǒng)結(jié)構(gòu)及對(duì)象間?
的關(guān)系;OOD則側(cè)重于系統(tǒng)的實(shí)現(xiàn),設(shè)計(jì)人員關(guān)心的是對(duì)象的行為及其實(shí)現(xiàn)。?
3)OOA標(biāo)識(shí)了一組對(duì)象,并通過(guò)其相互作用來(lái)刻劃系統(tǒng),該階段的工作與程序設(shè)計(jì)語(yǔ)言?
無(wú)關(guān);OOD定義了一組類(lèi),并設(shè)計(jì)出系統(tǒng)的實(shí)現(xiàn)藍(lán)圖,概要設(shè)計(jì)與程序設(shè)計(jì)語(yǔ)言無(wú)關(guān),但詳細(xì)?
設(shè)計(jì)則與之有比較密切的聯(lián)系。(?
4)OOA識(shí)別的對(duì)象是對(duì)客觀世界實(shí)體的抽象,標(biāo)識(shí)對(duì)象的準(zhǔn)則是:該對(duì)象的引入是否有助于對(duì)問(wèn)題域的理解;OOD中構(gòu)造類(lèi)的準(zhǔn)則是:該類(lèi)的構(gòu)造是否可行,是否有效地實(shí)現(xiàn)了抽象?
數(shù)據(jù)類(lèi)型,是否有助于系統(tǒng)的實(shí)現(xiàn)和提高軟件質(zhì)量。(?
5)兩個(gè)階段都沒(méi)有提及系統(tǒng)對(duì)象,但原因不同。在OOA階段,分析與實(shí)現(xiàn)無(wú)關(guān),分析所涉?
及的范圍與解域無(wú)關(guān),系統(tǒng)對(duì)象自然不用考慮。OOD建立的對(duì)象模型本身就是要設(shè)計(jì)的軟件?
系統(tǒng),對(duì)系統(tǒng)對(duì)象的考慮是隱含的。?
6)組裝結(jié)構(gòu)和分類(lèi)結(jié)構(gòu)在兩個(gè)階段所起的作用不同。在OOA階段,它們的引入主要是為?
了理解問(wèn)題;而在OOD階段,它們的引入則主要是針對(duì)軟件的構(gòu)造和實(shí)現(xiàn)。分類(lèi)結(jié)構(gòu)通過(guò)繼?
承機(jī)制來(lái)實(shí)現(xiàn),因而代碼得到了有效地復(fù)用;組裝結(jié)構(gòu)則將一些類(lèi)組合在一起構(gòu)成較大的軟件?
構(gòu)件。?
7)OOA并沒(méi)有考慮對(duì)象的產(chǎn)生問(wèn)題,當(dāng)其對(duì)應(yīng)的實(shí)體在現(xiàn)實(shí)世界中出現(xiàn)時(shí),它也就在問(wèn)?
題域中產(chǎn)生了。OOA也不考慮對(duì)象屬性的取值和服務(wù)算法的實(shí)現(xiàn)。而在OOD階段這些問(wèn)題?
都必須詳細(xì)考慮。?
8)OOD涉及到重載問(wèn)題;而OOA沒(méi)有考慮,因?yàn)榭紤]過(guò)多的實(shí)現(xiàn)細(xì)節(jié)對(duì)理解問(wèn)題和分?
析用戶(hù)需求沒(méi)有多大幫助。
轉(zhuǎn)載于:https://www.cnblogs.com/jmsjh/p/7364795.html
總結(jié)
以上是生活随笔為你收集整理的什么是OOA/OOD的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 十 Appium环境搭建(Windows
- 下一篇: 使用JMS实现请求/应答程序