什麼是OOA?

  • 作者:由 匿名使用者 發表于 歷史
  • 2021-08-03

什麼是OOA? 匿名使用者 1級 2013-07-09 回答

ooa(object oriented analysis)面向物件分析

ood(object oriented design)面向物件設計

如所熟知,面向物件作為一種程式設計技術最早於60年代後期提出,用於Simula的應用程

序開發。到了70年代,面向物件成為Smalltalk語言的一個重要特徵。當時,面向物件技術主要

用於程式設計。進入90年代,人們的注意力逐漸從程式設計轉向系統分析和設計,用物件的觀

點來認識現實世界、設計問題的可行解,隨之也就出現了許多OOA和OOD方法。但這些方法

還不很成熟,在OOA與OOD的邊界劃分上也存在著爭議。如:有人認為面向物件軟體開發

過程可以分為面向物件分析、面向物件設計和麵向物件程式設計三個階段;有人認為分析和設

計可以交叉進行不必做嚴格區分;還有人沿用傳統方法進行分析和設計,用面向物件程式設計

語言來實現系統。O

OA/OOD的一些較有代表性的工作有Gray。Booch的OOAD方法,Coad&Yourdon的

OOA和OOD方法,Shlaer&Mellor的OOA方法,Rumbaugh的OOAD方法等。不同的方法

體系都分別體現了人們對OOA、OOD,以及面向物件軟體開發過程的不同認識。本文的主要

目的就是,試圖透過對現有OOA與OOD方法的共性進行縱觀分析,弄清二者之間的邊界問

題,評析從OOA到OOD過渡的難易,並討論實現這種過渡所涉及的主要工作。

ooa:分析階段所做的主要工作是理解問題和需求構模,將現實世界中的問題對映到問題域。在該

階段,要明確使用者提出了哪些功能要求,為完成這些要求,系統應有哪些構件,採用什麼樣的結構,並寫出詳細的需求規約。OOA中引入了許多面向物件的概念和原則,如,物件、屬性、服務

、繼承、封裝等,並利用這些概念和原則來分析、認識和理解客觀世界,將客觀世界中的實體抽

象為問題域中的物件,即問題物件,分析客觀世界中問題的結構,明確為完成系統功能,物件間

應具有的聯絡和相互作用。因此,下述問題是OOA階段必須回答的:

1)為完成使用者要求系統應提供哪些功能?

2)系統應有哪些物件構成?

3)每個物件應有哪些屬性和服務?

4)物件間應有怎樣的聯絡?要

回答這些問題,就需要從靜態和動態兩方面來認識、分析現實世界物件。具體地說,要進行

1)個體特徵分析:標識物件及其屬性和服務。有的方法在標識特徵時對屬性的要求可能

弱一些,這是因為物件是屬性和操作的封裝體,物件的訪問可以透過介面——操作來實現。這

樣在標識物件時物件的內部特徵可暫不考慮,僅考察外部行為。每種分析方法在完成這些工作

時各具特色,如:Coad&Yourdon方法只給出了一些標識物件及其特徵的一般原則和思路;R

。Abbott認為,可以透過分析非形式化英語的問題描述,將名詞標識為物件,將形容詞標識為屬

性,將動詞標識為服務;Bailin等人則採用結構化與面向物件技術相結合的方法。

2)靜態分析:分析和描述系統的靜態結構。一般地,物件系統中的類或物件之間存在著兩

種關係:一般—特殊關係和整體—部分關係。其中,前者更具普遍性,它的一種重要實現形式

就是繼承機制,也是面向物件程式設計語言所支援的語言設施。同樣,大多OOA方法也都為

繼承提供了相應的表示方法。因此,系統靜態分析主要是分析、識別物件或類間的一般—特殊

結構,並新增一些必要的類,構造繼承關係。

3)動態分析:分析物件及之間的行為及其控制關係,建立系統的動態模型。多數分析方法

要求進行這方面的工作,有的則將它放到設計階段去完成,這主要是由OOA、OOD階段劃分

的不同所造成的。動態模型一般由一組狀態轉換圖構成,從這組狀態轉換圖可以對映到物件模

型。系統的動態模型從物件行為的角度刻劃了系統功能,方便了從OOA到OOD的過渡。有的

方法雖未提供動態模型,但也提供了表示物件行為的類似方法。早期的OOA方法對建立系

統動態模型認識不足,這主要是因為當時的許多方法是受資料模型的啟發而產生的。現在越來越

多的人認識到了系統動態分析工作的重要性,並在分析方法中引入了相應概念。除

此之外,許多OOA方法還引入了問題複雜性控制機制。如,Coad&Yourdon在其方法中

引入了主題的概念;Wirfs&Brock在其方法中引入了子系統的概念。問題複雜性控制機制主

要針對大型複雜系統,它將一組物件或類抽象成新的系統構件,以達到簡化問題空間的目的

。這樣,分析和設計人員就可以從宏觀與微觀、整體與區域性等不同角度來分析問題,便於透徹地

認識和理解問題。

OOD方法:

析階段主要是明確使用者的功能需求,及滿足使用者所需的系統部件及其結構。設計階段則主

要是確定實現使用者需求的方法,即怎樣做才能滿足使用者需求,並構造出系統的實現藍圖。面向

物件設計也是如此,只不過是引入了一些面向物件的概念和原則,用以指導設計工作。OOD首

先從OOA的結果開始,並將其從問題域對映到實現域;為滿足實現的需要,還要增加一些類

、結構及屬性和服務,並對原有類及屬性進行調整。此外,還要完成應用控制、人機互動介面的設計等。在現有方法中,Coad等人的OOD就是比較全面的設計方法。OOD的主要工作有:2

問題域部分的設計問

題域部分的設計是任何OOD方法都必須完成的工作,它主要是對OOA結果進行改進和

精化,並將其由問題域轉化到解域,具體來說,有以下幾個方面:。

屬性:有些屬性在分析階段有助於問題的理解,而到了設計階段則可以由其他屬性匯出或

根本沒必要保留。因此,應將它們去掉。相反地,為了實現服務演算法還需要增加相應的一些屬性

。。

服務:OOA只給出了服務的介面,其具體實現演算法要在OOD階段完成。。

類及物件:在OOA階段有助於問題理解的一些類在OOD階段成為冗餘,需要刪除,而為

了最佳化調整繼承關係還要增加一些類。所有的類都確定以後還要明確哪些類的物件會引發哪

些類建立新物件。。

結構:對類間結構進行最佳化調整。。

物件行為:明確物件間訊息傳遞的實現演算法,依據動態模型確定物件間訊息傳送的先後順

序,並設計相應演算法,協調物件的行為。2

2人機互動與應用控制部分的設計有

些設計方法並沒有提到互動介面的設計,一方面是因為這些系統中互動介面不十分重要

;另一方面是因為這部分的設計很有規律,設計方法也比較成熟,但為完整起見,仍將其列出

。主要工作包括:。

互動介面子系統的設計:與介面有關的類及類間結構的設計,以及有關演算法的設計。。

互動介面子系統和應用之間介面的設計。。

應用控制部分的設計:這部分物件主要完成應用的驅動工作。這部分物件不同於從現實

世界中抽象出來的物件,在現實世界和問題域中沒有原型,它們同介面子系統中的物件及問題

物件發生作用,控制系統的執行。

OOA與OOD的區別

上討論了OOA階段和OOD階段所應完成的主要工作,由於這兩個階段的劃分沒有公認

的標準,有些工作是在OOA階段完成還是在OOD階段完成還存在著爭議。有人認為OOA和

OOD可以交叉進行;有人認為OOD是對OOA結果的改進和細化,所以只提OOA;有人則更

強調OOD。儘管OOA和OOD存在著某些交叉和聯絡,但它們之間仍有許多差別,如:

1)OOA將現實世界中的實體抽象為問題物件,並構造問題域中的系統需求模型;OOD將

問題物件轉化為解域中的類並在解域中構造出問題的解。

2)OOA側重於使用者需求的分析和對問題域的理解,分析人員關心的是系統結構及物件間

的關係;OOD則側重於系統的實現,設計人員關心的是物件的行為及其實現。

3)OOA標識了一組物件,並透過其相互作用來刻劃系統,該階段的工作與程式設計語言

無關;OOD定義了一組類,並設計出系統的實現藍圖,概要設計與程式設計語言無關,但詳細

設計則與之有比較密切的聯絡。(

4)OOA識別的物件是對客觀世界實體的抽象,標識物件的準則是:該物件的引入是否有助於對問題域的理解;OOD中構造類的準則是:該類的構造是否可行,是否有效地實現了抽象

資料型別,是否有助於系統的實現和提高軟體質量。(

5)兩個階段都沒有提及系統物件,但原因不同。在OOA階段,分析與實現無關,分析所涉

及的範圍與解域無關,系統物件自然不用考慮。OOD建立的物件模型本身就是要設計的軟體

系統,對系統物件的考慮是隱含的。

6)組裝結構和分類結構在兩個階段所起的作用不同。在OOA階段,它們的引入主要是為

了理解問題;而在OOD階段,它們的引入則主要是針對軟體的構造和實現。分類結構透過繼

承機制來實現,因而程式碼得到了有效地複用;組裝結構則將一些類組合在一起構成較大的軟體

構件。

7)OOA並沒有考慮物件的產生問題,當其對應的實體在現實世界中出現時,它也就在問

題域中產生了。OOA也不考慮物件屬性的取值和服務演算法的實現。而在OOD階段這些問題

都必須詳細考慮。

8)OOD涉及到過載問題;而OOA沒有考慮,因為考慮過多的實現細節對理解問題和分

析使用者需求沒有多大幫助。

嘎嘎 給點分-,-

Top