OOA
OOA 基本概念
OOA 全稱 Object-Oriented Analysis 面向?qū)ο蠓治?/code>
指的是在一個(gè)系統(tǒng)的開發(fā)過程中進(jìn)行了系統(tǒng)業(yè)務(wù)調(diào)查以后恍箭,按照面向?qū)ο蟮乃枷雭矸治鰡栴}。OOA 與結(jié)構(gòu)化分析有較大的區(qū)別翠订。OOA 所強(qiáng)調(diào)的是在系統(tǒng)調(diào)查資料的基礎(chǔ)上,針對(duì) OO 方法所需要的素材進(jìn)行的歸類化分析和整理遵倦,而不是對(duì)管理業(yè)務(wù)現(xiàn)狀和方法的分析尽超。
OOA 模型由 5 個(gè)層次(主題層、對(duì)象類層梧躺、結(jié)構(gòu)層似谁、屬性層和服務(wù)層)和 5 個(gè)活動(dòng)(標(biāo)識(shí)對(duì)象類、標(biāo)識(shí)結(jié)構(gòu)掠哥、定義主題巩踏、定義屬性和定義服務(wù))組成。在這種方法中定義了兩種對(duì)象類之間的結(jié)構(gòu)续搀,一種稱為分類結(jié)構(gòu)塞琼,一種稱為組裝結(jié)構(gòu)。分類結(jié)構(gòu)就是所謂的一般與特殊的關(guān)系禁舷。組裝結(jié)構(gòu)則反映了對(duì)象之間的整體與部分的關(guān)系彪杉。
OOA 在定義屬性的同時(shí)毅往,要識(shí)別實(shí)例連接。實(shí)例連接是一個(gè)實(shí)例與另一個(gè)實(shí)例的映射關(guān)系在讶。
OOA 在定義服務(wù)的同時(shí)要識(shí)別消息連接煞抬。當(dāng)一個(gè)對(duì)象需要向另一個(gè)對(duì)象發(fā)送消息時(shí),它們之間就存在消息連接构哺。
OOA 中的 5 個(gè)層次和 5 個(gè)活動(dòng)繼續(xù)貫穿在 OOD(面向?qū)ο笤O(shè)計(jì))過程中。OOD 模型由 4 各部分組成战坤。它們分別是設(shè)計(jì)問題域部分曙强、設(shè)計(jì)人機(jī)交互部分、設(shè)計(jì)任務(wù)管理部分途茫、和設(shè)計(jì)數(shù)據(jù)管理部分碟嘴。
OOA 的主要原則
-
抽象:從許多食物中舍棄個(gè)別的、非本質(zhì)的特征囊卜,抽取共同的娜扇、本質(zhì)性的特征,就叫做抽象栅组。愁鄉(xiāng)石形成概念的必須手段雀瓢。
抽象原則有兩個(gè)方面的意義:1,盡管問題域中的事物是很復(fù)雜的玉掸,但是分析員并不需要了解和描述它們的一切刃麸,只需要分析其中與系統(tǒng)目標(biāo)有關(guān)的事物及其本質(zhì)性特征;
2司浪,通過舍棄個(gè)體事物在細(xì)節(jié)上的差異泊业,抽取其共同特性而得到一批事物的抽象概念;
抽象是面向?qū)ο蠓椒ㄖ惺褂米顬閺V泛的原則啊易。抽象原則包括過程抽象和數(shù)據(jù)抽象兩個(gè)方面吁伺。
過程抽象是指,任何一個(gè)完成確定功能的操作序列租谈,其使用者都可以把它看做一個(gè)單一的實(shí)體篮奄,盡管實(shí)際上它可能是由一系列更低級(jí)的操作完成的。
數(shù)據(jù)抽象是根據(jù)施加于數(shù)據(jù)之上的操作來定義數(shù)據(jù)類型垦垂,并限定數(shù)據(jù)的值只能由這些操作來修改和觀察宦搬。數(shù)據(jù)抽象是 OOA 的核心原則。它強(qiáng)調(diào)把數(shù)據(jù)(屬性)和操作(服務(wù))結(jié)合為一個(gè)不可分的系統(tǒng)單位(即對(duì)象)劫拗,對(duì)象的外部只需要知道它做什么间校,而不必知道它如何做;
封裝就是把對(duì)象的屬性和服務(wù)結(jié)合為一個(gè)不可分的系統(tǒng)單位,并盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié);
繼承:特殊類的對(duì)象擁有的其一般類的全部屬性與服務(wù)页慷,稱作特殊類對(duì)一般類的繼承;
在 OOA 中運(yùn)用繼承原則憔足,就是在每個(gè)由一般類和特殊類形成的一半特殊結(jié)構(gòu)總胁附,把一般類的對(duì)象實(shí)例和所有特殊類的對(duì)象實(shí)例都共同具有的屬性和服務(wù),一次性的在一般類中進(jìn)行顯式的定義滓彰。在特殊類中不在重復(fù)的定義一般類中已定義的東西控妻,但是在語義上,特殊類卻自動(dòng)的揭绑、隱含地?fù)碛兴囊话泐悾ㄒ约八懈蠈拥囊话泐悾┲卸x的全部屬性和服務(wù)弓候。繼承原則的好處是:是系統(tǒng)模型比較簡(jiǎn)練也比較清晰;
- 分類:
就是把具有相同屬性和服務(wù)的對(duì)象劃分為一類,用類作為這些對(duì)象的抽象描述他匪。分類原則實(shí)際上是抽象原則運(yùn)用于對(duì)象描述時(shí)的一種表現(xiàn)形式菇存。
- 聚合:
又稱組裝,其原則是:把一個(gè)復(fù)雜的事物看成若干比較簡(jiǎn)單的事物組裝體邦蜜,從而簡(jiǎn)化對(duì)復(fù)雜事物的描述;
- 關(guān)聯(lián):
是人類思考問題時(shí)經(jīng)常運(yùn)用的思想方法:通過一個(gè)事物聯(lián)想到另外的事物依鸥。能使人發(fā)生聯(lián)想的原因是事物之間確實(shí)存在著某些聯(lián)系;
- 消息通信:
這一原則要求對(duì)象之間只能通過消息進(jìn)行通信,而不允許在對(duì)象之外直接地存取對(duì)象內(nèi)部的屬性悼沈。通過消息進(jìn)行通信是由于封裝原則而引起的贱迟。在 OOA 中要求消息連接表示出對(duì)象之間的動(dòng)態(tài)聯(lián)系;
- 粒度控制:
一般來講,人在面對(duì)一個(gè)復(fù)雜的問題域時(shí)絮供,不可能在同一時(shí)刻既能縱觀全局衣吠,又能洞察秋毫。因此需要控制自己的視野杯缺≌舨ィ考慮全局時(shí),注意其大的組成部分萍肆,暫時(shí)不詳查每一部分的具體的細(xì)節(jié)袍榆。考慮某部分的細(xì)節(jié)時(shí)則暫時(shí)撇開其余的部分塘揣。著就是粒度控制原則;
- 行為分析:
顯示世界中事物的行為是復(fù)雜的包雀。由大量的事物所構(gòu)成的問題域中各種行為旺旺相互依賴交織;
面向?qū)ο蠓治霎a(chǎn)生三種模型
- 對(duì)象模型:
對(duì)用例模型進(jìn)行分析,把系統(tǒng)分解成互相協(xié)作的分析類亲铡,通過類圖\對(duì)象圖描述對(duì)象\對(duì)象的屬性\對(duì)象間的關(guān)系才写,是系統(tǒng)的靜態(tài)模型;
- 動(dòng)態(tài)模型:
描述系統(tǒng)的動(dòng)態(tài)行為奖蔓,通過時(shí)序圖/協(xié)作圖/描述對(duì)象的交互赞草,以揭示對(duì)象間如何協(xié)作來完成每個(gè)具體的用例。單個(gè)對(duì)象的狀態(tài)變化/動(dòng)態(tài)行為可以通過狀態(tài)圖來表示吆鹤;
- 功能模型:
OOA 的主要優(yōu)點(diǎn)
- 加強(qiáng)了對(duì)問題域和系統(tǒng)責(zé)任的理解厨疙;
- 改進(jìn)與分析有關(guān)的各類人員之間的交流;
- 對(duì)需求的變化具有較強(qiáng)的適應(yīng)性疑务;
- 支持軟件復(fù)用沾凄;
- 貫穿軟件聲明周期全過程的一致性梗醇;
- 實(shí)用性;
- 有利于用戶參與撒蟀;
OOA 方法的具體步驟
在用 OOA 具體分析一個(gè)事物時(shí)叙谨。大致上遵循如下 5 個(gè)基本步驟:
- 確定對(duì)象和類
這里所說的對(duì)象是對(duì)數(shù)據(jù)及其處理方式的抽象,它反映了系統(tǒng)保存和處理現(xiàn)實(shí)世界總某些事物的信息能力保屯。類是多個(gè)對(duì)象的共同屬性和方法集合的描述手负,它包括如何在一個(gè)類中建立一個(gè)新對(duì)象的描述;
- 確定結(jié)構(gòu)
structure
結(jié)構(gòu)是指問題域的復(fù)雜性和連接關(guān)系配椭。類成員結(jié)構(gòu)反映了泛華—特化關(guān)系虫溜,整體-部分結(jié)構(gòu)反映整體和局部之間的關(guān)系;
- 確定主題
subject
主題是指事物的總體概貌和總體分析模型股缸;
- 確定屬性
attribute
屬性就是數(shù)據(jù)元素,可用來描述對(duì)象或分類結(jié)構(gòu)的實(shí)例吱雏,可在圖中給出敦姻,并在對(duì)象的存儲(chǔ)中指定;
- 確定方法
method
方法是在收到消息后必須進(jìn)行的一些處理方法:方法要在圖中定義歧杏,并在對(duì)象的存儲(chǔ)中指定镰惦。對(duì)于每個(gè)對(duì)象和結(jié)構(gòu)來說,那些用來增加犬绒、修改旺入、刪除和選擇一個(gè)方法本身都是隱含的(雖然它們是要在對(duì)象的存儲(chǔ)中定義的,但并不在圖上給出)凯力,而有些則是顯示的茵瘾;
OOD
OOD 基本概念
OOD 全稱 Object-Oriented Design 面向?qū)ο笤O(shè)計(jì)
OOD 是 OO 方法中一個(gè)中間過渡環(huán)節(jié)。其主要作用是對(duì) OOA 分析的結(jié)構(gòu)作進(jìn)一步的規(guī)范化整理咐鹤,以便能夠被 OOP 面向?qū)ο蟮木幊?/code> 直接接受拗秘。
OOD 是一個(gè)軟件設(shè)計(jì)方法,是一種工程化規(guī)范祈惶。這是毫無疑問的雕旨。按照 Bjarne Stroustrup 的說法,OOP 是決定你要的類捧请,給每一個(gè)類提供完整的一組操作凡涩。
明確地使用繼承來表現(xiàn)共同點(diǎn)。由這個(gè)定義疹蛉,我們可以看出 OOD 就是“根據(jù)需求決定所需的類活箕、類的操作以及類之間關(guān)聯(lián)的過程”。
OOD 的目標(biāo)是管理程序內(nèi)部各部分的相互依賴氧吐。為了達(dá)到這個(gè)目標(biāo)讹蘑,OOD 要求將程序分成塊末盔,每個(gè)塊的規(guī)模應(yīng)該小到可以管理的程度,然后分別將各個(gè)塊隱藏在接口 interface
的后面座慰,讓它們只通過接口相互交流陨舱。比如說,如果用OOD 的方法類設(shè)計(jì)一個(gè)服務(wù)器-客戶端 client-server
應(yīng)用版仔,那么服務(wù)器和客戶端之間不應(yīng)該有直接地依賴游盲,而是應(yīng)該讓服務(wù)器的接口和客戶端的接口相互依賴。
這種依賴關(guān)系的轉(zhuǎn)換使得系統(tǒng)的各部分具有了可復(fù)用性蛮粮。還是拿上面那個(gè)例子來說益缎,客戶端就不必依賴于特定的服務(wù)器,所以就可以復(fù)用到其他的環(huán)境下然想。如果要復(fù)用某一個(gè)程序塊莺奔,只要實(shí)現(xiàn)必須的接口就行了。
OOD 是一種解決軟件問題的設(shè)計(jì)范式 paradigm
变泄,一種抽象的范式令哟。使用 OOD 這種設(shè)計(jì)范式,我們可以用對(duì)象 object
來表現(xiàn)問題領(lǐng)域 problem domain
的實(shí)體妨蛹,每個(gè)對(duì)象都有相應(yīng)的狀態(tài)和行為屏富。
抽象可以分成很多層次,從非常概括的到非常特殊的都有蛙卤,而對(duì)象可能處于任何一個(gè)抽象層次上狠半。另外,彼此不同但又相互關(guān)聯(lián)的對(duì)象可以共同構(gòu)成抽象颤难。只要這些對(duì)象之間有相似性神年,就可以把它們當(dāng)成同一類的對(duì)象類處理。
OOP 基本概念
OOP 全稱 Object Oriented Programming 面向?qū)ο缶幊?/code>
OOP 是一種實(shí)現(xiàn)的方法乐严。在這種方法中瘤袖,程序被組織成許多組互相協(xié)作的對(duì)象,每個(gè)對(duì)象代表某個(gè)類的一個(gè)實(shí)例昂验,而類則屬于一個(gè)通過繼承關(guān)系形成的層次結(jié)構(gòu)具體實(shí)現(xiàn)捂敌。
OOP 的三大特性:
封裝:
就是將一個(gè)類使用和實(shí)現(xiàn)分開,只保留部分接口和方法與外部聯(lián)系 既琴。
繼承:
子類自動(dòng)繼承其父級(jí)類中的屬性和方法占婉,并可以添加新的屬性和方法或者對(duì)部分屬性和方法進(jìn)行重寫。繼承增加了代碼的可重用性甫恩。
多態(tài):
多個(gè)子類中雖然都具有同一個(gè)方法逆济,但是這些子類實(shí)例化的對(duì)象調(diào)用這些相同的方法后卻可以獲得完全不同的結(jié)果,多態(tài)性增強(qiáng)了軟件的靈活性。