[软件工程] 面向对象方法学引论
面向?qū)ο蠓椒▽W引論
- 面向?qū)ο蠓椒▽W引論
- 9.1 面向?qū)ο蠓椒ǜ攀?/li>
- 9.1.1 什么是面向?qū)ο蟮拈_發(fā)方法
- 9.1.2 面向?qū)ο箝_發(fā)方法的組成
- OOSD由三部分組成
- 1、OOA法
- 對象模型(信息模型)
- 狀態(tài)模型(動態(tài)模型)
- 2、OOD 法
- 3、OOP 法
- 9.2 面向?qū)ο蟮母拍?/li>
- 9.2.1 對象
- 9.2.2 其它概念
- 1、 類(Class)
- 2、 繼承 (Inheritance)
- 3、消息(Message)
- 4. 多態(tài)性和動態(tài)綁定
- 5、方法(method)
- 9.3 面向?qū)ο蠼?/li>
- 9.4 對象模型
- 9.5 動態(tài)模型
- 9.6 功能模型
- 9.7 3種模型之間的關(guān)系
面向?qū)ο蠓椒▽W引論
面向?qū)ο蟮乃枷胱畛醭霈F(xiàn)于挪威斯陸大學和挪威計算機中心共同研制的Simula 67 語言中,其后,隨著位于美國加利福尼亞的Xerox(施樂) 研究中心推出的Smalltalk–76 和80 語言,面向?qū)ο蟮牡某绦蛟O(shè)計技術(shù)迅猛的發(fā)展。
到了20世紀90年代,面向?qū)ο蠓椒▽W已經(jīng)成為人們在開發(fā)軟件是首選的成熟的范型,成為當前最好的軟件開發(fā)技術(shù)。
傳統(tǒng)的軟件工程方法是面向過程的,將數(shù)據(jù)和處理過程分離,求解過程是先對應用領(lǐng)域(問題空間)進行分析,建立起問題空間的邏輯模型,再通過一系列復雜的轉(zhuǎn)換和算法,構(gòu)造計算機系統(tǒng),獲得解空間。
由于問題空間與解空間的模型、描述方式的不同,存在著復雜的轉(zhuǎn)換過程,需求變化就更難適應。傳統(tǒng)的軟件工程方法難于支持軟件復用。
9.1 面向?qū)ο蠓椒ǜ攀?/h2>
9.1.1 什么是面向?qū)ο蟮拈_發(fā)方法
OOSD(Object-Oriented Software Development)法是一種把面向?qū)ο蟮乃枷霊糜谲浖_發(fā)過程,指導開發(fā)活動的系統(tǒng)方法。
面向?qū)ο蟮姆椒ㄊ且环N運用對象、類、繼承、封裝、聚合、消息傳送、多態(tài)性等概念來構(gòu)造系統(tǒng)的軟件開發(fā)方法。
什么是面向?qū)ο?br /> 根據(jù)Coad和Yourdon的定義,按照以下4個概念設(shè)計和實現(xiàn)的系統(tǒng),稱為是面向?qū)ο蟮摹?
面向?qū)ο?#xff1a; 對象 (object)
類 (classification)
繼承(inheritance)
通信 (communication with messages)
面向?qū)ο蠹夹g(shù)的特點
1、對軟件開發(fā)過程所有階段進行綜合考慮。
2、軟件生存期各階段所使用的方法、技術(shù)具有高度的連續(xù)性,用符合人類認識世界的思維方式來分析、解決問題。
3、將OOA、OOD、OOP有機地集成在一起。
OOA(Object-Oriented Analysis)面向?qū)ο蠓治?br /> OOD( Object-Oriented Design )面向?qū)ο笤O(shè)計
OOP( Object-Oriented Program )面向?qū)ο蟮某绦蛟O(shè)計
9.1.2 面向?qū)ο箝_發(fā)方法的組成
OOSD由三部分組成
OOSD由三部分組成:
OOA(Object-Oriented Analysis)面向?qū)ο蟮姆治?br /> 強調(diào)的是對一個系統(tǒng)中的對象特征和行為的定義。建立系統(tǒng)的三類(對象、狀態(tài)、處理)模型。
OOD(Object-Oriented Design)面向?qū)ο蟮脑O(shè)計
與OOA密切配合順序?qū)崿F(xiàn)對現(xiàn)實世界的進一步建模。
OOP (Object-Oriented Program)面向?qū)ο蟮某绦蛟O(shè)計
是面向?qū)ο蟮募夹g(shù)中發(fā)展最快的,使用面向?qū)ο蟮某绦蛟O(shè)計語言,進行編碼。
1、OOA法
就是要解決“做什么”的問題。OOA 法的基本任務就是要建立三種模型:
對象模型(信息模型)
定義構(gòu)成系統(tǒng)的類和對象,它們的屬性與操作。
狀態(tài)模型(動態(tài)模型)
描述任何時刻對象的聯(lián)系及其聯(lián)系的改變,即時序。常用狀態(tài)圖, 事件追蹤圖描述。
功能模型(函數(shù)模型)
描述系統(tǒng)內(nèi)部數(shù)據(jù)的傳送處理。
顯然,在三大模型中,最重要的是對象模型。
2、OOD 法
在需求分析的基礎(chǔ)上,進一步解決“如何作”的問題,OOD 法也分為概要設(shè)計和詳細設(shè)計。
概要設(shè)計:細化對象行為,添加新對象,認定類,組類庫,確定外部接口及主要數(shù)據(jù)結(jié)構(gòu)
詳細設(shè)計:加細對象描述
3、OOP 法
使用面向?qū)ο蟮某绦蛟O(shè)計語言,如C++進行程序設(shè)計。
Coad和Yourdon給出一個面向?qū)ο蟮亩x:
面向?qū)ο?#61;對象+類+繼承+消息
如果一個軟件系統(tǒng)是按照這樣四個概念設(shè)計和實現(xiàn)的,則可以認為這個軟件系統(tǒng)是面向?qū)ο蟮摹?/p>
9.2 面向?qū)ο蟮母拍?/h2>
理解面向?qū)ο蟮幕靖拍顚τ趯W習和掌握面向?qū)ο蟮拈_發(fā)方法是十分重要的。
9.2.1 對象
對象(Object)是客觀事物或概念的抽象表述,即對客觀存在的事物的描述統(tǒng)稱為對象,對象可以是事、物、或抽象概念 ,是將一組數(shù)據(jù)和使用該數(shù)據(jù)的一組基本操作或過程封裝在一起的實體。
對象都存在一定的狀態(tài)(state),內(nèi)部標識(identity),可以給對象定義一組運算(operation),對象通過其運算所展示的特定行為稱為對象行為(behavior),對象本身的性質(zhì)稱為屬性(attribute),對象將它自身的屬性及運算“包裝起來”,稱為“封裝”(encapsulation).
對象的最基本的特征是封裝性和繼承性。
9.2.2 其它概念
1、 類(Class)
類又稱對象類(Object Class),是一組具有相同屬性和相同操作的對象的集合。在一個類中,每個對象都是類的實例(instance) ,它們都可以使用類中提供的函數(shù)。
類具有屬性,用數(shù)據(jù)結(jié)構(gòu)來描述類的屬性,類具有操作,它是對象的行為的抽象,操作實現(xiàn)的過程稱為方法(method) ,方法有方法名,方法體和參數(shù)。
由于對象是類的實例,在進行分析和設(shè)計時,通常把注意力集中在類上,而不是具體的對象上。
2、 繼承 (Inheritance)
繼承是使用現(xiàn)存的定義作為基礎(chǔ),建立新定義的技術(shù)。是父類和子類之間共享數(shù)據(jù)結(jié)構(gòu)和方法的機制,這是類之間的一種關(guān)系。在定義和實現(xiàn)一個類的時候,可以在一個已經(jīng)存在的類的基礎(chǔ)上來進行,把這個已經(jīng)存在的類所定義的內(nèi)容做為自己的內(nèi)容,并加入若干新內(nèi)容。
繼承性分類:
單重繼承:一個子類只有一個父類。即子類只繼承一個父類 的數(shù)據(jù)結(jié)構(gòu)和方法。
多重繼承:一個子類可有多個父類。繼承多個父類的數(shù)據(jù)結(jié) 構(gòu)和方法。
3、消息(Message)
消息就是向?qū)ο蟀l(fā)出的服務請求(互相聯(lián)系、協(xié)同工作等)。對象之間的聯(lián)系可表示為對象間的消息傳遞,即對象間的通訊機制。
一個消息應該包含以下信息:消息名、接收消息對象的標識、服務標識 、消息和方法、輸入信息、回答信息。
在對象的操作中當一個消息發(fā)送給某個對象時,消息包含接收對象去執(zhí)行某種操作的消息。
注意:在并發(fā)系統(tǒng)中,多個控制線程(Thread of Control)并發(fā)執(zhí)行,情況就復雜得多,消息可以是發(fā)出服務請求、提交數(shù)據(jù)、發(fā)布事件信息、或是傳遞同步控制信息。
4. 多態(tài)性和動態(tài)綁定
多態(tài)性(Polymorphism)是指相同的操作或函數(shù),過程作用于不同的對象上并獲得不同的結(jié)果。
即相同的操作的消息發(fā)送給不同的對象時,每個對象將根據(jù)自己所屬類中所定義的操作去執(zhí)行,故產(chǎn)生不同的結(jié)果。
例如: “繪圖”操作,作用在“橢圓” 和“矩形” 上,畫出不同的圖形。
動態(tài)綁定(dynamic binding)是在運行時根據(jù)對象接收的消息動態(tài)地確定要連接的服務代碼。
5、方法(method)
類中操作的實現(xiàn)過程稱為方法。
一個方法包括方法名、參數(shù)及方法體。
方法描述了類與對象的行為,每一個對象都封裝了數(shù)據(jù)和算法兩個方面,數(shù)據(jù)由一組屬性表示,而算法即是當一個對象接收到一條消息后,它所包含的方法決定對象如何動作。通常是在某種編程語言(如Java、C++)下實施的運算。
9.3 面向?qū)ο蠼?/h2>
- 用面向?qū)ο蠓椒ǔ晒Φ亻_發(fā)軟件的關(guān)鍵,同樣是對問題域的理解。面向?qū)ο蠓椒ㄗ罨镜脑瓌t,是按照人們習慣的思維方式,用面向?qū)ο笥^點建立問題域的模型,開發(fā)出盡可能自然地表現(xiàn)求解方法的軟件。
- 用面向?qū)ο蠓椒ㄩ_發(fā)軟件,通常需要建立3種形式的模型,它們分別是描述系統(tǒng)數(shù)據(jù)結(jié)構(gòu)的對象模型,描述系統(tǒng)控制結(jié)構(gòu)的動態(tài)模型和描述系統(tǒng)功能的功能模型。
9.4 對象模型
面向?qū)ο蠓椒◤娬{(diào)圍繞對象而不是圍繞功能來構(gòu)造系統(tǒng)。對象模型為建立動態(tài)模型和功能模型,提供了實質(zhì)性的框架。
統(tǒng)一建模語言UML;
- 定義類(屬性、服務)、類的圖形符號;
- 類與類之間的關(guān)聯(lián)、泛化(繼承)、依賴和細化等關(guān)系及其表示等等。
9.5 動態(tài)模型
動態(tài)模型表示瞬時的、行為化的系統(tǒng)的“控制”性質(zhì),它規(guī)定了對象模型中的對象的合法變化序列。
- 對一個對象來說,生命周期由許多階段組成,在每個特定階段中,都有適合該對象的一組運行規(guī)律和行為規(guī)則,用以規(guī)范該對象的行為。生命周期中的階段也就是對象的狀態(tài)。
- 各對象之間相互觸發(fā)就形成了一系列的狀態(tài)變化。我們把一個觸發(fā)行為稱作一個事件。
- 狀態(tài)與事件密不可分,一個事件分開兩個狀態(tài),一個狀態(tài)隔開兩個事件。事件表示時刻,狀態(tài)代表時間間隔。
9.6 功能模型
功能模型表示變化的系統(tǒng)的“功能”性質(zhì),它指明了系統(tǒng)應該“做什么”,因此更直接地反映了用戶對目標系統(tǒng)的需求。
9.7 3種模型之間的關(guān)系
對象模型、動態(tài)模型、功能模型分別從3個不同側(cè)面描述了所要開發(fā)的系統(tǒng)。
這3種模型相互補充、相互配合,使得我們對系統(tǒng)的認識更加全面:
功能模型指明了系統(tǒng)應該“做什么”;
動態(tài)模型明確規(guī)定了什么時候(即在何種狀態(tài)下接受了什么事件的觸發(fā))做;
對象模型則定義了做事情的實體。
其中,對象模型是最基本最重要的,它為其他兩種模型奠定了基礎(chǔ),我們依靠對象模型完成3種模型的集成。
(1)針對每個類建立的動態(tài)模型,描述了類實例的生命周期或運行周期。
(2)狀態(tài)轉(zhuǎn)換驅(qū)使行為發(fā)生,這些行為在數(shù)據(jù)流圖中被映射成處理,在用例圖中被映射成用例,它們同時與類圖中的服務相對應。
(3)功能模型中的處理(或用例)對應于對象模型中的類所提供的服務。
(4)數(shù)據(jù)流圖中的數(shù)據(jù)存儲,以及數(shù)據(jù)的源點/終點,通常是對象模型中的對象。
(5)數(shù)據(jù)流圖中的數(shù)據(jù)流,往往是對象模型中對象的屬性值,也可能是整個對象。
(6)用例圖中的行為者,可能是對象模型中的對象。
(7)功能模型中的處理(或用例)可能產(chǎn)生動態(tài)模型中的事件。
(8)對象模型描述了數(shù)據(jù)流圖中的數(shù)據(jù)流、數(shù)據(jù)存儲以及數(shù)據(jù)源點/終點的結(jié)構(gòu)。
總結(jié)
以上是生活随笔為你收集整理的[软件工程] 面向对象方法学引论的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vue表单类的父子组件数据传递示例_vu
- 下一篇: excel排名_Excel案例:比赛中,