麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 課堂 > 技術(shù)開發(fā) > 正文

面向?qū)ο笤O(shè)計(OOD)的概念與步驟

2023-06-17 18:00:50
字體:
供稿:網(wǎng)友

面向?qū)ο笤O(shè)計(Object-Oriented Design,OOD)方法是OO方法中一個中間過渡環(huán)節(jié)。其主要作用是對OOA分析的結(jié)果作進(jìn)一步的規(guī)范化整理,以便能夠被OOP直接接受。

面向?qū)ο笤O(shè)計(OOD)是一種軟件設(shè)計方法,是一種工程化規(guī)范。這是毫無疑問的。按照Bjarne Stroustrup的說法,面向?qū)ο蟮木幊谭妒剑╬aradigm)是[Stroustrup, 97]:

l 決定你要的類;

l 給每個類提供完整的一組操作;

l 明確地使用繼承來表現(xiàn)共同點。

由這個定義,我們可以看出:OOD就是“根據(jù)需求決定所需的類、類的操作以及類之間關(guān)聯(lián)的過程”。

OOD的目標(biāo)是管理程序內(nèi)部各部分的相互依賴。為了達(dá)到這個目標(biāo),OOD要求將程序分成塊,每個塊的規(guī)模應(yīng)該小到可以管理的程度,然后分別將各個塊隱藏在接口(interface)的后面,讓它們只通過接口相互交流。比如說,如果用OOD的方法來設(shè)計一個服務(wù)器-客戶端(client-server)應(yīng)用,那么服務(wù)器和客戶端之間不應(yīng)該有直接的依賴,而是應(yīng)該讓服務(wù)器的接口和客戶端的接口相互依賴。

這種依賴關(guān)系的轉(zhuǎn)換使得系統(tǒng)的各部分具有了可復(fù)用性。還是拿上面那個例子來說,客戶端就不必依賴于特定的服務(wù)器,所以就可以復(fù)用到其他的環(huán)境下。如果要復(fù)用某一個程序塊,只要實現(xiàn)必須的接口就行了。

OOD是一種解決軟件問題的設(shè)計范式(paradigm),一種抽象的范式。使用OOD這種設(shè)計范式,我們可以用對象(object)來表現(xiàn)問題領(lǐng)域(problem domain)的實體,每個對象都有相應(yīng)的狀態(tài)和行為。我們剛才說到:OOD是一種抽象的范式。抽象可以分成很多層次,從非常概括的到非常特殊的都有,而對象可能處于任何一個抽象層次上。另外,彼此不同但又互有關(guān)聯(lián)的對象可以共同構(gòu)成抽象:只要這些對象之間有相似性,就可以把它們當(dāng)成同一類的對象來處理。

一、OOD背景知識

計算機硬件技術(shù)卻在飛速發(fā)展。從幾十年前神秘的龐然大物,到現(xiàn)在隨身攜帶的移動芯片;從每秒數(shù)千次運算到每秒上百億次運算。當(dāng)軟件開發(fā)者們還在尋找能讓軟件開發(fā)生產(chǎn)力提高一個數(shù)量級的“銀彈”[Brooks, 95]時,硬件開發(fā)的生產(chǎn)力早已提升了百倍千倍。

硬件工程師們能夠如此高效,是因為他們都很懶惰。他們永遠(yuǎn)恪守“不要去重新發(fā)明輪子”的古訓(xùn)。Grady Booch把這些黑箱稱為類屬(class category),現(xiàn)在我們則通常把它們稱為“組件(component)”。

類屬是由被稱為類(class)的實體組成的,類與類之間通過關(guān)聯(lián)(relationship)結(jié)合在一起。一個類可以把大量的細(xì)節(jié)隱藏起來,只露出一個簡單的接口,這正好符合人們喜歡抽象的心理。所以,這是一個非常偉大的概念,因為它給我們提供了封裝和復(fù)用的基礎(chǔ),讓我們可以從問題的角度來看問題,而不是從機器的角度來看問題。

軟件的復(fù)用最初是從函數(shù)庫和類庫開始的,這兩種復(fù)用形式實際上都是白箱復(fù)用。到90年代,開始有人開發(fā)并出售真正的黑箱軟件模塊:框架(framework)和控件(control)。框架和控件往往還受平臺和語言的限制,現(xiàn)在軟件技術(shù)的新潮流是用SOAP作為傳輸介質(zhì)的Web Service,它可以使軟件模塊脫離平臺和語言的束縛,實現(xiàn)更高程度的復(fù)用。但是想一想,其實Web Service也是面向?qū)ο螅徊贿^是把類與類之間的關(guān)聯(lián)用XML來描述而已[Li, 02]。

在過去的十多年里,面向?qū)ο蠹夹g(shù)對軟件行業(yè)起到了極大的推動作用。在可以預(yù)測的將來,它仍將是軟件設(shè)計的主要技術(shù)——至少我看不到有什么技術(shù)可以取代它的。

二、OOD到底從哪兒來?

有很多人都認(rèn)為:OOD是對結(jié)構(gòu)化設(shè)計(Structured Design,SD)的擴展,其實這是不對的。OOD的軟件設(shè)計觀念和SD完全不同。SD注重的是數(shù)據(jù)結(jié)構(gòu)和處理數(shù)據(jù)結(jié)構(gòu)的過程。而在OOD中,過程和數(shù)據(jù)結(jié)構(gòu)都被對象隱藏起來,兩者幾乎是互不相關(guān)的。不過,追根溯源,OOD和SD有著非常深的淵源。

1967年前后,OOD和SD 的概念幾乎同時誕生,它們分別以不同的方式來表現(xiàn)數(shù)據(jù)結(jié)構(gòu)和算法。當(dāng)時,圍繞著這兩個概念,很多科學(xué)家寫了大量的論文。其中,由Dijkstra和 Hoare兩人所寫的一些論文講到了“恰當(dāng)?shù)某绦蚩刂平Y(jié)構(gòu)”這個話題,聲稱goto語句是有害的,應(yīng)該用順序、循環(huán)、分支這三種控制結(jié)構(gòu)來構(gòu)成整個程序流程。這些概念發(fā)展構(gòu)成了結(jié)構(gòu)化程序設(shè)計方法;而由Ole-Johan Dahl所寫的另一些論文則主要討論編程語言中的單位劃分,其中的一種程序單位就是類,它已經(jīng)擁有了面向?qū)ο蟪绦蛟O(shè)計的主要特征。

這兩種概念立刻就分道揚鑣了。在結(jié)構(gòu)化這邊的歷史大家都很熟悉:NATO會議采納了Dijkstra的思想,整個軟件產(chǎn)業(yè)都同意goto語句的確是有害的,結(jié)構(gòu)化方法、瀑布模型從70年代開始大行其道。同時,無數(shù)的科學(xué)家和軟件工程師也幫助結(jié)構(gòu)化方法不斷發(fā)展完善,其中有很多今天足以使我們振聾發(fā)聵的名字,例如Constantine、Yourdon、DeMarco和Dijkstra。有很長一段時間,整個世界都相信:結(jié)構(gòu)化方法就是拯救軟件工業(yè)的 “銀彈”。當(dāng)然,時間最后證明了一切。

而此時,面向?qū)ο髣t在研究和教育領(lǐng)域緩慢發(fā)展。結(jié)構(gòu)化程序設(shè)計幾乎可以應(yīng)用于任何編程語言之上,而面向?qū)ο蟪绦蛟O(shè)計則需要語言的支持[1],這也妨礙了面向?qū)ο蠹夹g(shù)的發(fā)展。實際上,在60年代后期,支持面向?qū)ο筇匦缘恼Z言只有Simula-67這一種。到70年代,施樂帕洛阿爾托研究中心(PARC)的 Alan Key等人又發(fā)明了另一種基于面向?qū)ο蠓椒ǖ恼Z言,那就是大名鼎鼎的Smalltalk。但是,直到80年代中期,Smalltalk和另外幾種面向?qū)ο笳Z言仍然只停留在實驗室里。

到90年代,OOD突然就風(fēng)靡了整個軟件行業(yè),這絕對是軟件開發(fā)史上的一次革命。不過,登高才能望遠(yuǎn),新事物總是站在舊事物的基礎(chǔ)之上的。70年代和80年代的設(shè)計方法揭示出許多有價值的概念,誰都不能也不敢忽視它們,OOD也一樣。

三、OOD和傳統(tǒng)方法有什么區(qū)別?

還記得結(jié)構(gòu)化設(shè)計方法嗎?程序被劃分成許多個模塊,這些模塊被組織成一個樹型結(jié)構(gòu)。這棵樹的根就是主模塊,葉子就是工具模塊和最低級的功能模塊。同時,這棵樹也表示調(diào)用結(jié)構(gòu):每個模塊都調(diào)用自己的直接下級模塊,并被自己的直接上級模塊調(diào)用。

那么,哪個模塊負(fù)責(zé)收集應(yīng)用程序最重要的那些策略?當(dāng)然是最頂端的那些。在底下的那些模塊只管實現(xiàn)最小的細(xì)節(jié),最頂端的模塊關(guān)心規(guī)模最大的問題。所以,在這個體系結(jié)構(gòu)中越靠上,概念的抽象層次就越高,也越接近問題領(lǐng)域;體系結(jié)構(gòu)中位置越低,概念就越接近細(xì)節(jié),與問題領(lǐng)域的關(guān)系就越少,而與解決方案領(lǐng)域的關(guān)系就越多。

但是,由于上方的模塊需要調(diào)用下方的模塊,所以這些上方的模塊就依賴于下方的細(xì)節(jié)。換句話說,與問題領(lǐng)域相關(guān)的抽象要依賴于與問題領(lǐng)域無關(guān)的細(xì)節(jié)!這也就是說,當(dāng)實現(xiàn)細(xì)節(jié)發(fā)生變化時,抽象也會受到影響。而且,如果我們想復(fù)用某一個抽象的話,就必須把它依賴的細(xì)節(jié)都一起拖過去。

而在OOD中,我們希望倒轉(zhuǎn)這種依賴關(guān)系:我們創(chuàng)建的抽象不依賴于任何細(xì)節(jié),而細(xì)節(jié)則高度依賴于上面的抽象。這種依賴關(guān)系的倒轉(zhuǎn)正是OOD和傳統(tǒng)技術(shù)之間根本的差異,也正是OOD思想的精華所在。

四、OOD步驟

細(xì)化重組類

細(xì)化和實現(xiàn)類間關(guān)系,明確其可見性

增加屬性,指定屬性的類型與可見性

分配職責(zé),定義執(zhí)行每個職責(zé)的方法

對消息驅(qū)動的系統(tǒng),明確消息傳遞方式

利用設(shè)計模式進(jìn)行局部設(shè)計

畫出詳細(xì)的類圖與時序圖

五、OOD設(shè)計過程中要展開的主要幾項工作

(一)對象定義規(guī)ge的求精過程

對于OOA所抽象出來的對象-&-類以及匯集的分析文檔,OOD需要有一個根據(jù)設(shè)計要求整理和求精的過程,使之更能符合OOP的需要。這個整理和求精過程主要有兩個方面:一是要根據(jù)面向?qū)ο蟮母拍?/p>

模型整理分析所確定的對象結(jié)構(gòu)、屬性、方法等內(nèi)容,改正錯誤的內(nèi)容,刪去不必要和重復(fù)的內(nèi)容等。二是進(jìn)行分類整理,以便于下一步數(shù)據(jù)庫設(shè)計和程序處理模塊設(shè)計的需要。整理的方法主要是進(jìn)行歸

類,對類一&一對象、屬性、方法和結(jié)構(gòu)、主題進(jìn)行歸類。

(二)數(shù)據(jù)模型和數(shù)據(jù)庫設(shè)計

數(shù)據(jù)模型的設(shè)計需要確定類-&-對象屬性的內(nèi)容、消息連接的方式、系統(tǒng)訪問、數(shù)據(jù)模型的方法等。最后每個對象實例的數(shù)據(jù)都必須落實到面向?qū)ο蟮膸旖Y(jié)構(gòu)模型中。

(三)優(yōu)化

OOD的優(yōu)化設(shè)計過程是從另一個角度對分析結(jié)果和處理業(yè)務(wù)過程的整理歸納,優(yōu)化包括對象和結(jié)構(gòu)的優(yōu)化、抽象、集成。

對象和結(jié)構(gòu)的模塊化表示OOD提供了一種范式,這種范式支持對類和結(jié)構(gòu)的模塊化。這種模塊符合一般模塊化所要求的所有特點,如信息隱蔽性好,內(nèi)部聚合度強和模塊之間耦合度弱等。

集成化使得單個構(gòu)件有機地結(jié)合在一起,相互支持。

六、OO方法的特點和面臨的問題

OO方法以對象為基礎(chǔ),利用特定的軟件工具直接完成從對象客體的描述到軟件結(jié)構(gòu)之間的轉(zhuǎn)換。這是OO方法最主要的特點和成就。OO方法的應(yīng)用解決了傳統(tǒng)結(jié)構(gòu)化開發(fā)方法中客觀世界描述工具與軟

件結(jié)構(gòu)的不一致性問題,縮短了開發(fā)周期,解決了從分析和設(shè)計到軟件模塊結(jié)構(gòu)之間多次轉(zhuǎn)換映射的繁雜過程,是一種很有發(fā)展前途的系統(tǒng)開發(fā)方法。

但是同原型方法一樣,OO方法需要一定的軟件基礎(chǔ)支持才可以應(yīng)用,另外在大型的MIS開發(fā)中如果不經(jīng)自頂向下的整體劃分,而是一開始就自底向上的采用OO 方法開發(fā)系統(tǒng),同樣也會造成系統(tǒng)結(jié)構(gòu)不合理、各部分關(guān)系失調(diào)等問題。所以O(shè)O方法和結(jié)構(gòu)化方法目前仍是兩種在系統(tǒng)開發(fā)領(lǐng)域相互依存的、不可替代的方法。

七、OOD能給我?guī)硎裁矗?/p>

問這個問題的人,腦子里通常是在想“OOD能解決所有的設(shè)計問題嗎?”沒有銀彈。OOD也不是解決一切設(shè)計問題、避免軟件危機、捍衛(wèi)世界和平……的銀彈。OOD只是一種技術(shù)。但是,它是一種優(yōu)秀的技術(shù),它可以很好地解決目前的大多數(shù)軟件設(shè)計問題——當(dāng)然,這要求設(shè)計者有足夠的能力。

OOD可能會讓你頭疼,因為要學(xué)會它、掌握它是很困難的;OOD甚至?xí)屇闶驗樗膊⒉怀墒臁⒉⒉煌昝馈OD也會給你帶來欣喜,它讓你可以專注于設(shè)計,而不必操心那些細(xì)枝末節(jié);OOD也會使你成為一個更好的設(shè)計師,它能提供給你很好的工具,讓你能開發(fā)出更堅固、更可維護、更可復(fù)用的軟件。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 亚洲免费永久 | 黄色一级片毛片 | 成年人黄视频 | 免费一级毛片观看 | 午夜色片 | 看片一区 | 中国美女一级黄色片 | 爱高潮www亚洲精品 国产精品一区自拍 | 最新av免费网址 | 久久久鲁 | 北原夏美av | av最新在线观看 | 一级大片一级一大片 | 全黄毛片 | 久久久久久免费 | 久久色伦理资源站 | 免费看性xxx高清视频自由 | 麻豆蜜桃在线观看 | 中文字幕网址 | 中国老女人一级毛片视频 | 一区二区精品在线 | 天天草天天干天天射 | 99精品视频一区二区 | 久久久一区二区三区视频 | 韩国三级日本三级香港三级黄 | 黄污网站在线观看 | 免费黄色在线观看网站 | 精品亚洲va在线va天堂资源站 | 羞羞视频.www在线观看 | av在线免费观看中文字幕 | 国产日韩三区 | 欧美 日韩 国产 在线 | 亚洲成人国产综合 | 久久亚洲线观看视频 | 国产成视频在线观看 | 萌白酱福利视频在线网站 | 小情侣嗯啊哦视频www | 嗯~啊~弄嗯~啊h高潮视频 | 在线观看视频日本 | 欧美激情第一区 | 国产精品欧美久久久久一区二区 |