版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第2章面向?qū)ο蠓椒ā盾浖w系結(jié)構(gòu)與設(shè)計(jì)實(shí)用教程》第二版2.1面向?qū)ο蠓治龌A(chǔ)2.1.1用例圖1.系統(tǒng)系統(tǒng)是用例模型的一個(gè)組成部分,代表的是一部機(jī)器或一個(gè)業(yè)務(wù)活動(dòng),而不是真正實(shí)現(xiàn)的軟件系統(tǒng)。系統(tǒng)的邊界用來(lái)說(shuō)明構(gòu)建的用例模型的應(yīng)用范圍。例如一臺(tái)自助式售貨機(jī)(被看作系統(tǒng))應(yīng)提供售貨、供貨、提取銷(xiāo)售款等功能。這些功能在自動(dòng)售貨機(jī)之內(nèi)的區(qū)域起作用,自動(dòng)售貨機(jī)之外的情況不考慮。2.用例用例代表的是一個(gè)完整的功能,用例是動(dòng)作序列的集合,系統(tǒng)執(zhí)行該動(dòng)作序列來(lái)為執(zhí)行者行者產(chǎn)生一個(gè)可觀察的結(jié)果。動(dòng)作是系統(tǒng)的一次執(zhí)行。從本質(zhì)上講,一個(gè)用例是用戶(hù)與計(jì)算機(jī)之間的一次典型交互作用。3.執(zhí)行者執(zhí)行者是指用戶(hù)在系統(tǒng)中所扮演的角色,是與系統(tǒng)交互的人或事。執(zhí)行者是一個(gè)群體概念,代表的是一類(lèi)能使用某個(gè)功能的人或事,而不是指某個(gè)個(gè)體。4.用例之間的常用關(guān)系(1)擴(kuò)展關(guān)聯(lián)一個(gè)用例中加入一些新的動(dòng)作后就構(gòu)成另一個(gè)用例,這兩個(gè)用例之間的關(guān)聯(lián)是泛化關(guān)系,稱(chēng)作擴(kuò)展關(guān)聯(lián)。(2)包含關(guān)聯(lián)包含關(guān)系指的是兩個(gè)用例之間的關(guān)系,其中一個(gè)用例(稱(chēng)為基本用例)的行為包含了另一個(gè)用例(稱(chēng)為包含用例)的行為?;蛘?,一個(gè)用例使用了另一個(gè)用例。2.1.2類(lèi)圖類(lèi)圖(ClassDiagram)是顯示出類(lèi)、接口以及它們之間的靜態(tài)結(jié)構(gòu)和關(guān)系的圖。類(lèi)圖最基本的元素是類(lèi)或接口。表示類(lèi)的框分成以下幾層:類(lèi)名、屬性清單、方法清單、性質(zhì)清單。如果一個(gè)類(lèi)有內(nèi)部成員類(lèi),它的類(lèi)圖就會(huì)有五層。在類(lèi)圖中,除了類(lèi)名層是不能省略、必須顯示的以外,其他幾層都是可以省略的。2.1.3描述接口的類(lèi)圖接口的類(lèi)圖與類(lèi)的類(lèi)圖幾乎一樣,惟一的區(qū)別是接口的名有“interface”的字樣。一個(gè)接口不會(huì)有性質(zhì),可以有方法的聲明、public和final靜態(tài)內(nèi)部成員類(lèi)。2.1.4類(lèi)圖中的關(guān)系在類(lèi)與類(lèi)之間,會(huì)有連線指明它們之間的關(guān)系。類(lèi)和類(lèi)、類(lèi)和接口、接口和接口之間可以建立以下幾種關(guān)系:一般化關(guān)系(繼承關(guān)系或者實(shí)現(xiàn)接口)關(guān)聯(lián)關(guān)系聚合關(guān)系合成關(guān)系依賴(lài)關(guān)系類(lèi)圖中繼承關(guān)系:實(shí)線加空心三角實(shí)現(xiàn)接口:虛線加空心三角關(guān)聯(lián)關(guān)系:實(shí)線加實(shí)心箭頭聚合關(guān)系:實(shí)線加用空心菱形合成關(guān)系:實(shí)線加實(shí)心菱形依賴(lài)關(guān)系:虛線加實(shí)心箭頭2.2軟件體系結(jié)構(gòu)2.2.1軟件體系結(jié)構(gòu)的定義軟件體系結(jié)構(gòu)已經(jīng)在軟件工程領(lǐng)域中有著廣泛的應(yīng)用,但迄今為止還沒(méi)有一個(gè)公認(rèn)的定義。許多專(zhuān)家學(xué)者從不同角度對(duì)軟件體系結(jié)構(gòu)進(jìn)行了定義,較為典型的有以下幾種。SA的定義(1)1994年(D.GarlanandM.Shaw)軟件體系結(jié)構(gòu)是軟件設(shè)計(jì)過(guò)程中,超越計(jì)算過(guò)程中的算法設(shè)計(jì)和數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)的一個(gè)層次。軟件體系結(jié)構(gòu)處理整體系統(tǒng)結(jié)構(gòu)設(shè)計(jì)和描述方面的一些問(wèn)題,如全局組織和全局控制結(jié)構(gòu)、關(guān)于通訊、同步與數(shù)據(jù)存取的協(xié)議,設(shè)計(jì)組件功能定義,物理分布與合成,設(shè)計(jì)方案的選擇、評(píng)估與實(shí)現(xiàn)等。SA的定義(2)2000年(IEEE1471–2000)體系結(jié)構(gòu)是以組件、組件之間的關(guān)系、組件與環(huán)境之間的關(guān)系為內(nèi)容的某一系統(tǒng)的基本組織結(jié)構(gòu),以及指導(dǎo)上述內(nèi)容設(shè)計(jì)與演化的原理。SA的定義(3)1992年(D.PerryandA.Wolf)軟件體系結(jié)構(gòu)是組件(具有一定形式的結(jié)構(gòu)化元素)的集合,包括處理組件、數(shù)據(jù)組件和連接組件。處理組件負(fù)責(zé)對(duì)數(shù)據(jù)進(jìn)行加工,數(shù)據(jù)組件是被加工的信息,連接組件把體系結(jié)構(gòu)的不同部分組合連接起來(lái)。軟件體系結(jié)構(gòu)形式(form)是由專(zhuān)有特性(properties)和關(guān)系(relationship)組成。專(zhuān)有特性用于限制軟件體系結(jié)構(gòu)元素的選擇,關(guān)系用于限制軟件體系結(jié)構(gòu)元素組合的拓?fù)浣Y(jié)構(gòu)。在多個(gè)體系結(jié)構(gòu)方案中選擇合適的體系結(jié)構(gòu)方案往往基于一組準(zhǔn)則(rational)。SA的定義(4)2010年(Clementsetal.)元素、關(guān)系、特性SA的定義(5)HayesRoth軟件體系結(jié)構(gòu)是一個(gè)抽象的系統(tǒng)規(guī)范,主要包括用其行為來(lái)描述的功能組件和組件之間的相互連接、接口和關(guān)系。SA的定義(6)張友生在《軟件體系結(jié)構(gòu)》一書(shū)中的定義:軟件體系結(jié)構(gòu)為軟件系統(tǒng)提供了一個(gè)結(jié)構(gòu)、行為和屬性的高級(jí)抽象,由構(gòu)成系統(tǒng)的元素的描述、這些元素的相互作用、指導(dǎo)元素集成的模式以及這些模式的約束組成。軟件體系結(jié)構(gòu)不僅指定了系統(tǒng)的組織結(jié)構(gòu)和拓?fù)浣Y(jié)構(gòu),并且顯示了系統(tǒng)需求和構(gòu)成系統(tǒng)的元素間的對(duì)應(yīng)關(guān)系,提供了設(shè)計(jì)決策的基本原理。軟件體系結(jié)構(gòu)軟件體系結(jié)構(gòu)(SoftwareArchitecture,SA):組件:各種基本的軟件構(gòu)造模塊(函數(shù)、對(duì)象、模式等);連接件:將它們組合起來(lái)形成完整的軟件系統(tǒng);物理分布:軟件系統(tǒng)拓?fù)浣Y(jié)構(gòu)約束:限制條件性能:軟件質(zhì)量2.2.2組件與連接件1.組件(Component)廣義上講,組件是具有某種功能的可復(fù)用的軟件結(jié)構(gòu)單元,是為組裝服務(wù)的,是組成軟件系統(tǒng)的計(jì)算單元或數(shù)據(jù)存儲(chǔ)單元。例如:共享變量函數(shù)、子程序?qū)ο?、?lèi)文件程序數(shù)據(jù)庫(kù)….復(fù)用:代碼復(fù)用、設(shè)計(jì)復(fù)用、分析復(fù)用、測(cè)試復(fù)用…組件(Component)嚴(yán)格意義上講,組件是一種可部署單元,它具有規(guī)范的接口規(guī)約和顯式的語(yǔ)境依賴(lài),而接口功能由組件內(nèi)部封裝的服務(wù)來(lái)實(shí)現(xiàn)。由組件組裝出的軟件稱(chēng)為組件化軟件。組件的定義一般認(rèn)為,組件是指語(yǔ)義完整、語(yǔ)法正確和有可復(fù)用價(jià)值的單位軟件,是軟件復(fù)用過(guò)程中可以明確辯識(shí)的系統(tǒng);結(jié)構(gòu)上,它是語(yǔ)義描述、通訊接口和實(shí)現(xiàn)代碼的復(fù)合體。簡(jiǎn)單地說(shuō),組件是具有一定的功能,能夠獨(dú)立工作或能同其它組件裝配起來(lái)協(xié)調(diào)工作的程序體,組件的使用同它的開(kāi)發(fā)、生產(chǎn)無(wú)關(guān)。組件的粒度函數(shù)函數(shù)、子程序、方法類(lèi)類(lèi)級(jí)的復(fù)用(代碼復(fù)用)是以類(lèi)為封裝的單位,但這樣的復(fù)用粒度還太小,不足以解決異構(gòu)互操作和效率更高的復(fù)用。類(lèi)的組合通常講的組件是對(duì)一組類(lèi)的組合進(jìn)行封裝,并代表完成一個(gè)或多個(gè)功能的特定服務(wù),也為用戶(hù)提供了多個(gè)接口。整個(gè)組件隱藏了具體的實(shí)現(xiàn),只用接口提供服務(wù)。2.連接與連接件連接(Connection):組件間建立和維護(hù)行為關(guān)聯(lián)與信息傳遞的途徑;連接需要兩方面的支持:連接發(fā)生和維持的機(jī)制——實(shí)現(xiàn)連接的物質(zhì)基礎(chǔ)(連接的機(jī)制);連接能夠正確、無(wú)二義、無(wú)沖突進(jìn)行的保證——連接正確有效的進(jìn)行信息交換的規(guī)則(連接的協(xié)議)。簡(jiǎn)稱(chēng)“機(jī)制”(mechanism)和“協(xié)議”(protocol)。連接件(Connector):表示組件之間的交互并實(shí)現(xiàn)組件之間的連接,連接件也可看作一類(lèi)特殊的組件,區(qū)別在于:一般組件是軟件功能設(shè)計(jì)和實(shí)現(xiàn)的承載體;連接件是負(fù)責(zé)完成組件之間信息交換和行為聯(lián)系的專(zhuān)用組件。連接件(Connector)連接件有哪些?調(diào)用返回管道(pipe)……中間件(Middleware)ODBC/JDBC應(yīng)用服務(wù)器WEB服務(wù)器消息中間件......連接件(Connector)3.實(shí)例(1)結(jié)構(gòu)化方法中的組件與連接件(2)面向?qū)ο蠓椒ㄖ械慕M件與連接件函數(shù)參數(shù)和函數(shù)的值——調(diào)用返回機(jī)制例#include<stdio.h>intmax(intx,inty){intz;z=x>y?x:y;return(z);}voidmain(){inta,b,c;scanf(“%d,%d”,&a,&b);c=max(a,b);printf(“Themaxis%d”,);}組件主程序main()函數(shù)子程序max(a,b)函數(shù)連接件main()函數(shù)中調(diào)用max(a,b)函數(shù)max()函數(shù)將實(shí)參a、b分別傳遞給虛參x、y通過(guò)運(yùn)算得到較大值z(mì)將z返回調(diào)用處,賦值給main()函數(shù)的變量c
classSpot{privateintx,y;Spot(intu,intv){setX(u);setY(v);}voidsetX(intx1){x=x1;}voidsetY(inty1){y=y1;}intgetX(){returnx;}intgetY(){returny;}}classTrans{voidmove(Spotp,inth,intk){p.setX(p.getX()+h);p.setY(p.getY()+k);}}classTest{publicstaticvoidmain(Stringargs[]){Spots=newSpot(2,3);System.out.println("s點(diǎn)的坐標(biāo):"+s.getX()+","+s.getY());Transts=newTrans();ts.move(s,4,5);System.out.println("s點(diǎn)的坐標(biāo):"+s.getX()+","+s.getY());}}組件Spot、Trans、Test三個(gè)類(lèi)Spot類(lèi)的對(duì)象s,Trans類(lèi)的對(duì)象ts,Spot類(lèi)的對(duì)象p連接件在Test類(lèi)里面創(chuàng)建Spot類(lèi)的對(duì)象s、Trans類(lèi)的對(duì)象ts,Trans類(lèi)的move()方法的參數(shù)里面有Spot類(lèi)的對(duì)象pTest類(lèi)使用Spot類(lèi)的對(duì)象s,調(diào)用了Spot類(lèi)的getX()和getY()方法Test類(lèi)使用Trans類(lèi)的對(duì)象ts,調(diào)用了Trans類(lèi)move()方法,并把實(shí)參Spot類(lèi)的對(duì)象s傳遞給了虛參Spot類(lèi)的對(duì)象p。2.2.3軟件體系結(jié)構(gòu)研究?jī)?nèi)容軟件體系結(jié)構(gòu)要解決的問(wèn)題軟件的基本構(gòu)造單元是什么?這些構(gòu)造單元之間如何連接?最終形成何種樣式的拓?fù)浣Y(jié)構(gòu)?每個(gè)典型應(yīng)用領(lǐng)域(例如CAD、ERP)的典型體系結(jié)構(gòu)是什么樣子?如何進(jìn)行軟件體系結(jié)構(gòu)的設(shè)計(jì)與實(shí)現(xiàn)?如果對(duì)已經(jīng)存在的軟件體系結(jié)構(gòu)進(jìn)行修改?使用何種工具來(lái)支持軟件體系結(jié)構(gòu)的設(shè)計(jì)?如何對(duì)軟件的體系結(jié)構(gòu)進(jìn)行描述,并據(jù)此進(jìn)行分析和驗(yàn)證?軟件體系結(jié)構(gòu)研究的內(nèi)容當(dāng)前,軟件體系結(jié)構(gòu)已經(jīng)成為軟件工程研究者和實(shí)踐者的一個(gè)重要研究領(lǐng)域,主要包括以下幾個(gè)方面:軟件體系結(jié)構(gòu)的建模與表示體系結(jié)構(gòu)描述語(yǔ)言等形式化工具(ArchtecturalDescriptionLanguage,ADL)軟件體系結(jié)構(gòu)風(fēng)格的研究基于軟件體系結(jié)構(gòu)的軟件開(kāi)發(fā)方法軟件體系結(jié)構(gòu)的分析、設(shè)計(jì)與驗(yàn)證軟件體系結(jié)構(gòu)的評(píng)價(jià)方法軟件體系結(jié)構(gòu)發(fā)現(xiàn)、演化與復(fù)用軟件產(chǎn)品線體系結(jié)構(gòu)特定領(lǐng)域軟件體系結(jié)構(gòu)對(duì)軟件體系結(jié)構(gòu)的專(zhuān)門(mén)知識(shí)的整理......2.2.4軟件體系結(jié)構(gòu)風(fēng)格在軟件開(kāi)發(fā)過(guò)程中,通常會(huì)考慮能否使用重復(fù)的體系結(jié)構(gòu)模式,即能否達(dá)到體系結(jié)構(gòu)級(jí)的軟件復(fù)用。也就是說(shuō),能否在不同的軟件系統(tǒng)中,使用同一體系結(jié)構(gòu)。這就是軟件體系結(jié)構(gòu)的風(fēng)格需要研究的問(wèn)題。軟件系統(tǒng)具有若干特定的“風(fēng)格”;這些風(fēng)格在實(shí)踐中被多次設(shè)計(jì)、應(yīng)用,已被證明具有良好的性能、可行性和廣泛的應(yīng)用場(chǎng)景,可以被重復(fù)使用;實(shí)現(xiàn)“軟件體系結(jié)構(gòu)級(jí)”的復(fù)用。描述一類(lèi)體系結(jié)構(gòu)在實(shí)踐中被多次應(yīng)用是若干設(shè)計(jì)思想的綜合具有已經(jīng)被熟知的特性,并且可以復(fù)用定義:描述特定領(lǐng)域中軟件系統(tǒng)家族的組織方式的慣用模式,反映了領(lǐng)域中眾多系統(tǒng)所共有的結(jié)構(gòu)和語(yǔ)義特性,并指導(dǎo)如何將各個(gè)模塊和子系統(tǒng)有效地組織成一個(gè)完整的系統(tǒng)?!败浖w系結(jié)構(gòu)風(fēng)格”的組成一組組件類(lèi)型。例如:數(shù)據(jù)容器,過(guò)程,對(duì)象一組連接件類(lèi)型/交互機(jī)制。例如:過(guò)程調(diào)用,事件,管道這些組件的拓?fù)浞植家唤M對(duì)拓?fù)浜托袨榈募s束。例如:數(shù)據(jù)容器不能自己存儲(chǔ)數(shù)據(jù),管道不能是循環(huán)的一些對(duì)風(fēng)格的成本和收益的非正式描述。例如:如果你需要重用性并且性能不是很重要,那么可以使用管道風(fēng)格軟件體系結(jié)構(gòu)風(fēng)格級(jí)的復(fù)用軟件體系結(jié)構(gòu)風(fēng)格級(jí)的復(fù)用,可以使不同的系統(tǒng)可以共享同一個(gè)實(shí)現(xiàn)代碼,一些經(jīng)過(guò)實(shí)踐證實(shí)的解決方案可以可靠地用于解決新的問(wèn)題。只要系統(tǒng)使用規(guī)范的方法來(lái)組織,就可以使別的設(shè)計(jì)者很容易地理解系統(tǒng)的體系結(jié)構(gòu)。例如,如果把系統(tǒng)描述為“B/S”風(fēng)格,那么不需要給出設(shè)計(jì)細(xì)節(jié)也會(huì)明白系統(tǒng)是如何組織和工作的。經(jīng)典軟件體系結(jié)構(gòu)風(fēng)格Garlan和Shaw給出的對(duì)通用體系結(jié)構(gòu)風(fēng)格的分類(lèi):數(shù)據(jù)流風(fēng)格:批處理序列;管道/過(guò)濾器調(diào)用/返回風(fēng)格:主程序/子程序;面向?qū)ο箫L(fēng)格;層次結(jié)構(gòu)獨(dú)立組件風(fēng)格:進(jìn)程通訊;事件系統(tǒng)虛擬機(jī)風(fēng)格:解釋器;基于規(guī)則的系統(tǒng)倉(cāng)庫(kù)風(fēng)格:數(shù)據(jù)庫(kù)系統(tǒng);超文本系統(tǒng);黑板系統(tǒng)基于網(wǎng)絡(luò)的軟件體系結(jié)構(gòu)風(fēng)格分布式風(fēng)格(層次結(jié)構(gòu)風(fēng)格的典型實(shí)例):C/S結(jié)構(gòu)B/S結(jié)構(gòu)新型體系結(jié)構(gòu)風(fēng)格:MVCClusterSOACloud2.3面向?qū)ο笤O(shè)計(jì)什么是面向?qū)ο笤O(shè)計(jì)面向?qū)ο笤O(shè)計(jì)(Object-OrientedDesign,OOD)就是運(yùn)用面向?qū)ο蠓椒ㄟM(jìn)行系統(tǒng)設(shè)計(jì)。OOA與OOD的關(guān)系面向?qū)ο蠓治鯫OA獲取用戶(hù)需求,對(duì)問(wèn)題域進(jìn)行分析并建立問(wèn)題域概念模型的過(guò)程。面向?qū)ο笤O(shè)計(jì)OOD從計(jì)算機(jī)技術(shù)的角度,將分析階段得到的概念模型轉(zhuǎn)換成軟件系統(tǒng)的技術(shù)實(shí)現(xiàn)方案,并在功能、性能及成本方面滿足用戶(hù)和質(zhì)量要求的過(guò)程。一個(gè)將問(wèn)題空間中的面向?qū)ο竽P娃D(zhuǎn)換為求解空間中的技術(shù)實(shí)現(xiàn)模型的過(guò)程。從面向?qū)ο蠓治龅矫嫦驅(qū)ο笤O(shè)計(jì),是一個(gè)逐漸擴(kuò)充模型的過(guò)程。(1)從OOA到OOD不是轉(zhuǎn)換——是調(diào)整和增補(bǔ)將OOA模型搬到OOD;進(jìn)行必要的調(diào)整,作為OOD模型的問(wèn)題域部分;增補(bǔ)其它四個(gè)部分,成為完整的OOD模型。(2)采用一致的概念和表示法不存在分析與設(shè)計(jì)之間的鴻溝(3)有不同的側(cè)重點(diǎn)和不同的策略O(shè)OA主要針對(duì)問(wèn)題域,識(shí)別有關(guān)的對(duì)象以及它們之間的關(guān)系,產(chǎn)生一個(gè)映射問(wèn)題域,滿足用戶(hù)需求,獨(dú)立于實(shí)現(xiàn)的OOA模型。OOD主要解決與實(shí)現(xiàn)有關(guān)的問(wèn)題,基于OOA模型,針對(duì)具體的軟、硬件條件(如機(jī)器、網(wǎng)絡(luò)、OS、GUI、DBMS、編程語(yǔ)言等)產(chǎn)生一個(gè)可實(shí)現(xiàn)的OOD模型。(4)OOA與OOD可適合不同的生命周期模型瀑布模型、螺旋模型、增量模型、噴泉模型OOD過(guò)程與實(shí)現(xiàn)有關(guān)的因素:圖形用戶(hù)界面系統(tǒng)硬件、操作系統(tǒng)及網(wǎng)絡(luò)數(shù)據(jù)管理系統(tǒng)其他——編程語(yǔ)言、可復(fù)用構(gòu)件庫(kù)……基本思想:盡可能隔離實(shí)現(xiàn)條件對(duì)系統(tǒng)的影響——提供獨(dú)立的接口。對(duì)不可隔離的因素,按實(shí)現(xiàn)條件調(diào)整OOA模型OOD——按實(shí)現(xiàn)條件對(duì)OOA模型進(jìn)行調(diào)整,并補(bǔ)充幾個(gè)新的組成部分(也是由對(duì)象構(gòu)成)OOD過(guò)程設(shè)計(jì)OOD模型的五個(gè)部分問(wèn)題域部分的設(shè)計(jì)人機(jī)交互部分的設(shè)計(jì)控制流管理部分的設(shè)計(jì)數(shù)據(jù)管理部分的設(shè)計(jì)構(gòu)件部署設(shè)計(jì)前4項(xiàng)不強(qiáng)調(diào)次序每個(gè)部分均采用與OOA一致的概念、表示法及活動(dòng),但具有自己獨(dú)特的策略。進(jìn)行構(gòu)件部署設(shè)計(jì)要在其前面四個(gè)部分完成后進(jìn)行。2.3.1問(wèn)題域部分的設(shè)計(jì)面向?qū)ο笤O(shè)計(jì)從技術(shù)實(shí)現(xiàn)角度,對(duì)面向?qū)ο蠓治鏊贸龅膯?wèn)題域模型作補(bǔ)充或修改,主要是增添、合并或分解類(lèi)與對(duì)象屬性及服務(wù)調(diào)整繼承關(guān)系等。如果在面向?qū)ο蠓治鲞^(guò)程中已經(jīng)對(duì)系統(tǒng)作了相當(dāng)仔細(xì)的分析,而且假設(shè)所使用的實(shí)現(xiàn)環(huán)境能完全支持面向?qū)ο蠓治瞿P偷膶?shí)現(xiàn),那么在面向?qū)ο笤O(shè)計(jì)階段無(wú)須對(duì)已有的問(wèn)題域模型作實(shí)質(zhì)性的修改或擴(kuò)充。2.3.1.1為復(fù)用設(shè)計(jì)與編程的類(lèi)而增加結(jié)構(gòu)OOA識(shí)別和定義的類(lèi)是本次開(kāi)發(fā)中新定義的,需要進(jìn)行編程。如果已存在一些可復(fù)用的類(lèi),而且這些類(lèi)既有分析、設(shè)計(jì)時(shí)的定義,又有源程序;那么,復(fù)用這些類(lèi)即可提高開(kāi)發(fā)效率與質(zhì)量??蓮?fù)用的類(lèi)可能只是與OOA模型中的類(lèi)相似,而不是完全相同,因此需對(duì)二者進(jìn)行修改。目標(biāo)盡可能使復(fù)用成分增多,新開(kāi)發(fā)的成分減少不同程度的復(fù)用=直接復(fù)用>刪除可復(fù)用類(lèi)的多余信息<通過(guò)繼承復(fù)用≈刪除多余信息,通過(guò)繼承而復(fù)用當(dāng)前所需的類(lèi)的信息比可復(fù)用類(lèi)定義的信息直接復(fù)用復(fù)用已定義好的類(lèi)。如果已存在一些可復(fù)用的類(lèi)(許多面向?qū)ο箝_(kāi)發(fā)工具都提供了基類(lèi)),而且這些類(lèi)既有定義,又有源代碼,那么復(fù)用這些類(lèi)可以提高開(kāi)發(fā)效率和質(zhì)量。Java的API類(lèi)庫(kù)就是預(yù)定義的,開(kāi)發(fā)人員直接從相關(guān)的類(lèi)復(fù)用即可。刪除可復(fù)用類(lèi)的多余信息如果已定義好的類(lèi)中包括不需要的屬性和服務(wù),就把多余的屬性和服務(wù)刪除后再?gòu)?fù)用。通過(guò)繼承復(fù)用可以利用繼承關(guān)系,基于可復(fù)用類(lèi)添加一般-特殊關(guān)系,派生出與問(wèn)題域相關(guān)的子類(lèi),復(fù)用從父類(lèi)繼承來(lái)的屬性和服務(wù),以減少新開(kāi)發(fā)的成分。例如,有可復(fù)用的Book類(lèi),書(shū)店管理系統(tǒng)可以用子類(lèi)RetailBook繼承Book類(lèi),圖書(shū)館管理系統(tǒng)可以用子類(lèi)CollectionBook繼承Book類(lèi)。相似如果可復(fù)用的類(lèi)只是與面向?qū)ο蠓治瞿P椭械念?lèi)相似,就需要進(jìn)行修改。應(yīng)用多態(tài)機(jī)制,子類(lèi)中可以通過(guò)繼承擁有父類(lèi)的屬性或服務(wù),可以定義新的屬性或服務(wù),可以拒絕繼承父類(lèi)的屬性或服務(wù)。第四種情況的做法把要復(fù)用的類(lèi)加到問(wèn)題域,標(biāo)以“復(fù)用”劃掉(或標(biāo)出)不用的屬性與服務(wù)建立從復(fù)用類(lèi)到問(wèn)題域原有的類(lèi)之間的泛化關(guān)系由于問(wèn)題域的類(lèi)繼承了“復(fù)用”類(lèi)的特征,所以有些屬性和服務(wù)不需要了——?jiǎng)澋?。修改?wèn)題域原有類(lèi)的結(jié)構(gòu)和連接,必要時(shí)移到“復(fù)用”類(lèi)2.3.1.2增加一般類(lèi)以建立共同協(xié)議如果確實(shí)沒(méi)有可供復(fù)用的類(lèi)而必須創(chuàng)建新類(lèi)時(shí),也應(yīng)當(dāng)充分考慮新類(lèi)的內(nèi)容,以利于今后的復(fù)用。如果多個(gè)新類(lèi)有具有共同的實(shí)現(xiàn)策略,應(yīng)將多個(gè)類(lèi)都具有的共同特征提升到一般類(lèi)中,用一般類(lèi)集中地描述多個(gè)類(lèi)的實(shí)現(xiàn)都要使用的屬性和操作。這與在面向?qū)ο蠓治鲋卸x一般類(lèi)不同,面向?qū)ο蠓治隹紤]的是問(wèn)題域中的事物的共同特征。2.3.1.3按編程語(yǔ)言調(diào)整繼承起因:OOA強(qiáng)調(diào)如實(shí)地反映問(wèn)題域,OOD考慮實(shí)現(xiàn)問(wèn)題,所用語(yǔ)言不支持多繼承,甚至不支持繼承如果面向?qū)ο蠓治龅膶?duì)象模型中包含了多重繼承關(guān)系,而使用的程序設(shè)計(jì)語(yǔ)言沒(méi)有多重繼承機(jī)制,那么在問(wèn)題域子系統(tǒng)的設(shè)計(jì)中,應(yīng)該對(duì)面向?qū)ο蠓治龅膶?duì)象模型中的多重繼承進(jìn)行調(diào)整。多繼承模式1.把繼承關(guān)系展平,取消繼承關(guān)系2.采用聚合把多繼承調(diào)整為單繼承或取消繼承因?yàn)榫酆虾头夯遣煌母拍?,這種方法并不是通用的(按定義)。在大多數(shù)情況下,需要考慮形成多繼承的原因,將本來(lái)在特殊類(lèi)中顯式定義的信息離出來(lái),作為部分對(duì)象,以原來(lái)的一般類(lèi)作為整體對(duì)象。classA{//……}classB{//……}classCextendsA{Bb=newB();}或者classC{Aa=newA();Bb=newB();}多媒體教室的例子:把繼承關(guān)系換為聚合關(guān)系在有些情況下,轉(zhuǎn)換之后的類(lèi)之間的關(guān)系語(yǔ)義可能有悖于客觀世界的常理。下面的例子,在轉(zhuǎn)換之前的結(jié)構(gòu)表明在職研究生既是一種教職工又是一種研究生,轉(zhuǎn)換之后的結(jié)構(gòu)所表達(dá)的卻是在職研究生是由一個(gè)教職工和一個(gè)研究生構(gòu)成的,這是不合理的。另外,當(dāng)子類(lèi)的多個(gè)父類(lèi)具有共同的更高層的父類(lèi)時(shí),按這種轉(zhuǎn)換方法所得到的結(jié)果將出現(xiàn)重復(fù)的信息。classA{//……}classBextendsA{//……}classCextendsA{//……}classDextendsB{Cc=newC();}3.重新定義類(lèi)針對(duì)上一種方法所存在的問(wèn)題,可以采用重新定義類(lèi)的方法,使調(diào)整之后的結(jié)果仍能自然地映射問(wèn)題域,并且不產(chǎn)生重復(fù)信息——避免重復(fù)信息、語(yǔ)義不變classTeacherIdentity{//……}classPostgraduateIdentity{//……}classPerson{TeacherIdentityt=newTeacherIdentity();PostgraduateIdentityp=newPostgraduateIdentity();//……}classIdentity{//……}classTeacherIdentityextendsIdentity{//……}classPostgraduateIdentityextendsIdentity{//……}classPerson{Identityi1=newTeacherIdentity();Identityi2=newPostgraduateIdentity();//……}重新定義類(lèi)方法的缺點(diǎn)重新定義類(lèi)的方法的缺點(diǎn)是不直觀。原先多重繼承的一般-特殊結(jié)構(gòu)是一種顯式的分類(lèi)結(jié)構(gòu),用這種方法調(diào)整之后,顯式的分類(lèi)就變成了隱式的分類(lèi)。例如各類(lèi)人員都是同人員類(lèi)的成員,都用同一個(gè)類(lèi)創(chuàng)建對(duì)象實(shí)例。人員的不同分類(lèi)是通過(guò)不同的人員對(duì)象具有不同身份而隱含表示的。這樣,人員分類(lèi)看起來(lái)就不直觀了。4.采用壓平的方式在調(diào)整之前的結(jié)構(gòu)中,子類(lèi)通過(guò)繼承獲得父類(lèi)中定義的屬性與服務(wù),因此不需要重復(fù)地編寫(xiě)這些代碼,調(diào)整時(shí)最好保留這種由繼承帶來(lái)的好處。但是,如果不考慮增加實(shí)現(xiàn)時(shí)的編程工作量的話,可以采用壓平的方法。classPerson{//……}classTeacherextendsPerson{//……}classPostgraduateextendsPerson{//……}classOnjobPostgraduateextendsPerson{//……}壓平缺點(diǎn):在職研究生中重復(fù)書(shū)寫(xiě)教職工和研究生中的信息增加不必要的代碼壓平
+聚合克服了前面方法的缺點(diǎn)問(wèn)題:有什么缺點(diǎn)?——增加了類(lèi)的數(shù)量classPerson{//……}classTeacherInfo{//……}classPostgraduateInfo{//……}classTeacherextendsPerson{TeacherInfot=newTeacherInfo();//……}classPostgraduateextendsPerson{
PostgraduateInfop=newPostgraduateInfo();//……}classOnjobPostgraduateextendsPerson{TeacherInfot=newTeacherInfo();
PostgraduateInfop=newPostgraduateInfo();//……}2.3.1.4對(duì)多態(tài)性的調(diào)整(覆蓋)
——有些語(yǔ)言不支持多態(tài):去掉父類(lèi)中的內(nèi)容當(dāng)面向?qū)ο蠓治瞿P椭胁捎枚鄳B(tài)性表示,而編程語(yǔ)言不支持多態(tài)性時(shí),需要進(jìn)行調(diào)整。多態(tài)是指同一個(gè)命名可以有不同的語(yǔ)義。繼承中的多態(tài)是指在父類(lèi)中定義的屬性和服務(wù),被各個(gè)子類(lèi)繼承之后可以有各自不同的語(yǔ)義,即屬性可以定義為不同的數(shù)據(jù)類(lèi)型,服務(wù)可以有不同的算法。采用多態(tài)性表示的意義是在編程時(shí)對(duì)屬性和服務(wù)的引用較為方便。2.3.1.5提高性能影響系統(tǒng)性能的因素大體上可分為三類(lèi):數(shù)據(jù)傳輸?shù)臅r(shí)間、數(shù)據(jù)存取的時(shí)間和數(shù)據(jù)處理的時(shí)間。為了提高性能,需要對(duì)問(wèn)題域模型做一些處理。(1)調(diào)整對(duì)象的分布。盡量把需要頻繁交換信息的對(duì)象放在一臺(tái)處理機(jī)上,減少不同處理機(jī)之間的數(shù)據(jù)傳輸量,縮短數(shù)據(jù)傳輸路徑。在甲處理機(jī)上類(lèi)B的對(duì)象接收到類(lèi)A的對(duì)象一個(gè)消息,類(lèi)B的對(duì)象根據(jù)類(lèi)A的對(duì)象的要求訪問(wèn)乙處理機(jī)上類(lèi)C的對(duì)象的大量屬性數(shù)據(jù),然后對(duì)這些數(shù)據(jù)進(jìn)行計(jì)算,并將計(jì)算結(jié)果回送給類(lèi)A的對(duì)象。類(lèi)B和類(lèi)C之間要在甲、乙兩臺(tái)處理之間的網(wǎng)絡(luò)上傳送大量數(shù)據(jù)。調(diào)整對(duì)象分布把需要頻繁交換信息的對(duì)象,盡量地放在一臺(tái)處理機(jī)上。(2)合并通信頻繁的類(lèi)根據(jù)封裝原則,不允許操作直接從其他對(duì)象獲取數(shù)據(jù)。所以,如果對(duì)象之間的信息交流特別頻繁,或者交流的信息量較大,就需要把這些對(duì)象類(lèi)進(jìn)行合并。使兩類(lèi)對(duì)象之間消息變?yōu)橥粚?duì)象內(nèi)部的直接存取,從而提高執(zhí)行效率。(3)用聚合關(guān)系描述復(fù)雜類(lèi)如果一個(gè)類(lèi)的對(duì)象描述了一種構(gòu)造比較復(fù)雜的事物,因?yàn)槠渲锌赡馨ǘ囗?xiàng)工作內(nèi)容,那么為了表現(xiàn)這種復(fù)雜事物的行為,對(duì)象的服務(wù)往往也比較復(fù)雜。用聚合關(guān)系描述復(fù)雜類(lèi)顯示的每一幀包括前景和背景一般背景變化少,前景變化多。分開(kāi)可以提高效率。(4)增加低層細(xì)節(jié)——細(xì)化對(duì)象的分類(lèi)在一個(gè)類(lèi)中定義的服務(wù)必須能描述這個(gè)類(lèi)的所有對(duì)象實(shí)例的共同行為。如果一個(gè)類(lèi)的概念范疇較廣,那么用它所描述的對(duì)象實(shí)例的實(shí)際情況就可能有若干差異。為了使該類(lèi)的一個(gè)服務(wù)能夠定義一種對(duì)所有的對(duì)象實(shí)例都適合的行為,就要兼顧多種不同的情況,因而使得服務(wù)算法比較復(fù)雜,而且執(zhí)行效率低下。(5)增加保存中間結(jié)果的屬性減少重復(fù)計(jì)算——增加屬性或類(lèi),以保存中間結(jié)果如果對(duì)象的一個(gè)服務(wù)要經(jīng)常進(jìn)行重復(fù)的某種計(jì)算,可增加一些屬性用來(lái)記錄己經(jīng)計(jì)算過(guò)的結(jié)果,就可避免以后的重復(fù)計(jì)算。例如一個(gè)“流水賬”對(duì)象,其屬性記錄著每一筆賬目,它的服務(wù)經(jīng)常要累計(jì)本年度以來(lái)的全部賬目或指定月份的賬目,那么針對(duì)每個(gè)月增加一個(gè)屬性“月累計(jì)”,記錄每月的計(jì)算結(jié)果,便可使以后的計(jì)算都得到簡(jiǎn)化。2.3.2人機(jī)交互部分的設(shè)計(jì)2.3.2.1概述人機(jī)交互部分是面向?qū)ο笤O(shè)計(jì)模型的組成部分之一把人機(jī)交互部分作為系統(tǒng)中一個(gè)獨(dú)立的組成部分,進(jìn)行分析和設(shè)計(jì),有利于隔離界面支持系統(tǒng)的變化對(duì)問(wèn)題域部分的影響。當(dāng)界面支持系統(tǒng)變化時(shí),問(wèn)題域部分可基本保持不變。人機(jī)交互部分包含的對(duì)象構(gòu)成了系統(tǒng)的人機(jī)界面,稱(chēng)做界面對(duì)象。界面支持系統(tǒng)支持圖形用戶(hù)界面開(kāi)發(fā)的軟件系統(tǒng)窗口系統(tǒng)(如Windows)圖形用戶(hù)界面(GraphicsUserInterface,GUI)系統(tǒng)(如Motif)與編程語(yǔ)言結(jié)合為一體的可視化編程環(huán)境(如VisualC++)。利用界面支持系統(tǒng),圖形用戶(hù)界面的開(kāi)發(fā)效率可得到顯著提高,因此應(yīng)用系統(tǒng)的人機(jī)界面開(kāi)發(fā)大多依賴(lài)某種界面支持系統(tǒng)。2.3.2.2可視化編程環(huán)境下的人機(jī)界面設(shè)計(jì)策略采用可視化編程環(huán)境作為界面支持系統(tǒng)時(shí),人機(jī)界面的設(shè)計(jì)相對(duì)比較簡(jiǎn)單。針對(duì)可視化編程環(huán)境的設(shè)計(jì)策略,減少或簡(jiǎn)化了許多工作內(nèi)容。設(shè)計(jì)者利用可視化編程環(huán)境及其類(lèi)庫(kù),降低了設(shè)計(jì)的工作強(qiáng)度,簡(jiǎn)化了設(shè)計(jì)文檔;但是需要掌握所依賴(lài)的環(huán)境和類(lèi)庫(kù),并在設(shè)計(jì)中把復(fù)用類(lèi)庫(kù)中提供的類(lèi)作為基本出發(fā)點(diǎn)。1.掌握可視化編程環(huán)境及其類(lèi)庫(kù)軟件設(shè)計(jì)人員不負(fù)責(zé)系統(tǒng)實(shí)現(xiàn),但是為了使設(shè)計(jì)能與環(huán)境的實(shí)際情況相吻合,必須掌握或了解實(shí)現(xiàn)設(shè)計(jì)的語(yǔ)言、類(lèi)庫(kù)、編程環(huán)境等軟件。正如一個(gè)建筑設(shè)計(jì)師,雖然不負(fù)責(zé)施工,卻必須了解施工所用的材料、機(jī)械和建筑工藝。2.根據(jù)人機(jī)交互需求選擇界面元素根據(jù)人機(jī)交互需求,在可視化編程環(huán)境所能支持的界面元素中進(jìn)行選擇。必要時(shí),設(shè)計(jì)者應(yīng)該在環(huán)境中實(shí)際操作和演示一下準(zhǔn)備選擇的各種界面元素,以決定哪些元素最適合本系統(tǒng)的人機(jī)交互。3.類(lèi)圖的設(shè)計(jì)1)根據(jù)復(fù)用原則確定類(lèi)的選擇確定類(lèi)圖中表示界面對(duì)象的類(lèi)時(shí),應(yīng)首先使用環(huán)境及其類(lèi)庫(kù)所提供的可復(fù)用類(lèi)。這些類(lèi)通常能滿足應(yīng)用系統(tǒng)的大部分人機(jī)交互需求,充分復(fù)用這些類(lèi)會(huì)大大簡(jiǎn)化界面的設(shè)計(jì)和實(shí)現(xiàn)。所以,除非所需要的界面對(duì)象的功能或風(fēng)格很特殊,在類(lèi)庫(kù)中也沒(méi)有提供相應(yīng)的類(lèi),否則都要首先想到復(fù)用已有的類(lèi)??梢灾苯訌?fù)用類(lèi)庫(kù)中的類(lèi),通過(guò)將可復(fù)用類(lèi)某些參數(shù)具體化(例如屬性的初始值)對(duì)可復(fù)用類(lèi)進(jìn)行定制。2)定義表示邏輯特征的屬性,忽略物理特征的屬性通過(guò)繼承可復(fù)用類(lèi)而定義的新類(lèi),可以對(duì)繼承來(lái)的屬性設(shè)置不同的初始值,也可以在新類(lèi)中增添新的屬性。設(shè)計(jì)人員主要定義那些描述界面對(duì)象邏輯特征的屬性,特別是表現(xiàn)命令的組織結(jié)構(gòu)、界面元素之間組成關(guān)系的屬性。例如在一個(gè)菜單類(lèi)中,每個(gè)選項(xiàng)表示一條命令。要用屬性來(lái)描述菜單的每個(gè)選項(xiàng),屬性的名稱(chēng)應(yīng)該與它所對(duì)應(yīng)的命令相符。又如在一個(gè)對(duì)話框中包含若干控件,應(yīng)該用屬性表示這個(gè)對(duì)話框含有的控件對(duì)象。3)特別標(biāo)注從高層類(lèi)繼承的服務(wù)面向?qū)ο笤O(shè)計(jì)中界面對(duì)象對(duì)應(yīng)的類(lèi)在類(lèi)圖中不填寫(xiě)被復(fù)用類(lèi)的屬性和服務(wù),也不需要畫(huà)出比它層次更高的一般類(lèi)。這樣簡(jiǎn)化了面向?qū)ο笤O(shè)計(jì)的文檔。但是,這樣的類(lèi)圖表示不出一個(gè)特殊類(lèi)中含有一個(gè)通過(guò)繼承得到,并提供其他對(duì)象使用的服務(wù),因而也難以表達(dá)其他對(duì)象請(qǐng)求該項(xiàng)服務(wù)的消息。解決方案是在本系統(tǒng)定義的特殊類(lèi)中顯式地表示它從類(lèi)庫(kù)中的類(lèi)繼承的,并且將在本系統(tǒng)中被使用的服務(wù)。4)用整體-部分結(jié)構(gòu)表示界面的組織結(jié)構(gòu)和命令層次要正確區(qū)分對(duì)象的普通屬性和它的部分對(duì)象。當(dāng)一個(gè)界面對(duì)象帶有內(nèi)部組織結(jié)構(gòu)時(shí),可視化編程環(huán)境對(duì)不同的情況有不同的定義方式。有些組成部分(例如下拉菜單的選項(xiàng)、窗口的邊框)被作為對(duì)象的一個(gè)普通屬性有些組成部分(例如對(duì)話框的一個(gè)下拉菜單或按鈕)則被作為一個(gè)部分對(duì)象。環(huán)境類(lèi)庫(kù)對(duì)這種組成部分給出相應(yīng)的類(lèi)定義,則建立整體-部分結(jié)構(gòu)。否則只用屬性表示,不建立整體-部分結(jié)構(gòu)。5)采用一般-特殊結(jié)構(gòu)從可復(fù)用類(lèi)直接繼承如果一個(gè)應(yīng)用系統(tǒng)中使用的兩個(gè)或兩個(gè)以上界面對(duì)象有許多共同特征,按照通常的設(shè)計(jì)策略是運(yùn)用一般-特殊結(jié)構(gòu),在一般類(lèi)中定義共同擁有的屬性和服務(wù),特殊類(lèi)繼承一般類(lèi),從而簡(jiǎn)化設(shè)計(jì)和實(shí)現(xiàn)。6)表達(dá)手工編程實(shí)現(xiàn)的消息,忽略自動(dòng)實(shí)現(xiàn)的消息界面類(lèi)庫(kù)中的每個(gè)類(lèi)都定義了許多服務(wù),應(yīng)用系統(tǒng)在這些類(lèi)的基礎(chǔ)上定制的類(lèi)提供的服務(wù)也很多,每個(gè)服務(wù)都對(duì)應(yīng)著一種消息。但有大量的消息,特別是處理界面對(duì)象常規(guī)操作的消息,是在可視化編程環(huán)境支持下生成應(yīng)用程序代碼時(shí)自動(dòng)實(shí)現(xiàn)的。例如改變窗口的大小或位置,在對(duì)話框中將焦點(diǎn)轉(zhuǎn)移到其中的某個(gè)控件,滾動(dòng)條的上下、左右滾動(dòng)等這些消息不需要程序員通過(guò)手工編程去實(shí)現(xiàn),因此設(shè)計(jì)類(lèi)圖時(shí)可以忽略對(duì)這些消息的表示。2.3.2.3界面類(lèi)與問(wèn)題域類(lèi)間通訊的設(shè)計(jì)有些界面對(duì)象要與問(wèn)題域中的對(duì)象進(jìn)行通訊,所以要對(duì)二者之間的通訊進(jìn)行設(shè)計(jì)。設(shè)計(jì)時(shí)應(yīng)注意以下三點(diǎn):(1)人機(jī)界面負(fù)責(zé)輸入與輸出和窗口更新這樣的工作,并把所有面向問(wèn)題域部分的請(qǐng)求轉(zhuǎn)發(fā)給問(wèn)題域部分,在界面對(duì)象中不應(yīng)該對(duì)業(yè)務(wù)邏輯進(jìn)行處理。(2)問(wèn)題域部分的對(duì)象不主動(dòng)發(fā)起與界面部分對(duì)象之間的通訊,只是對(duì)界面部分對(duì)象進(jìn)行響應(yīng)。把界面對(duì)象向問(wèn)題域部分對(duì)象傳輸?shù)男畔⒒虬l(fā)布命令看作是請(qǐng)求,而把從問(wèn)題域部分對(duì)象向界面部分對(duì)象傳輸?shù)男畔⒖醋魇腔貞?yīng)。(3)盡量減少界面部分與問(wèn)題域部分的耦合。由于界面是易變的,從易于維護(hù)和易于復(fù)用的角度出發(fā),問(wèn)題域部分和界面部分應(yīng)是低耦合的。可以通過(guò)在人機(jī)交互部分和問(wèn)題域部分之間增加控制器或協(xié)調(diào)類(lèi)的方式解決這種問(wèn)題。如采用觀察者模式等相關(guān)設(shè)計(jì)模式。2.3.3數(shù)據(jù)管理部分的設(shè)計(jì)2.3.3.1概述數(shù)據(jù)管理部分面向?qū)ο笤O(shè)計(jì)模型中負(fù)責(zé)與具體的數(shù)據(jù)管理系統(tǒng)銜接的部分負(fù)責(zé)利用文件或數(shù)據(jù)庫(kù)管理系統(tǒng)為系統(tǒng)中需要長(zhǎng)久存儲(chǔ)的對(duì)象進(jìn)行數(shù)據(jù)存儲(chǔ)與恢復(fù)永久對(duì)象面向?qū)ο筌浖こ虒?shù)據(jù)組織到對(duì)象中作為對(duì)象的屬性,數(shù)據(jù)存儲(chǔ)問(wèn)題表現(xiàn)為對(duì)象存儲(chǔ),長(zhǎng)期存儲(chǔ)的對(duì)象稱(chēng)做永久對(duì)象。在面向?qū)ο蠓治龌蛟O(shè)計(jì)中需指明永久對(duì)象;同時(shí),在設(shè)計(jì)中需要給出具體的措施來(lái)解決它們的永久存儲(chǔ)問(wèn)題。在數(shù)據(jù)管理部分的設(shè)計(jì)中要對(duì)此做出抉擇,并以面向?qū)ο蟮母拍詈捅硎痉ǎo出解決永久存儲(chǔ)問(wèn)題的設(shè)計(jì)決策。數(shù)據(jù)管理部分解決的問(wèn)題面向?qū)ο笤O(shè)計(jì)模型中的數(shù)據(jù)管理部分就是負(fù)責(zé)將應(yīng)用系統(tǒng)中的永久對(duì)象在選定的數(shù)據(jù)管理系統(tǒng)中進(jìn)行存儲(chǔ),并將存儲(chǔ)結(jié)果恢復(fù)到應(yīng)用系統(tǒng)。解決的問(wèn)題的具體內(nèi)容如下。(1)解決應(yīng)用系統(tǒng)中的對(duì)象在外存空間的存儲(chǔ)問(wèn)題,對(duì)象在內(nèi)存空間的存儲(chǔ)是由編程語(yǔ)言自動(dòng)解決的,不需要設(shè)計(jì)者做什么事。(2)只需考慮對(duì)象屬性值的存儲(chǔ),對(duì)象的服務(wù)是由語(yǔ)言系統(tǒng)自動(dòng)保存和管理的。數(shù)據(jù)管理部分解決的問(wèn)題(3)解決永久對(duì)象的存儲(chǔ)問(wèn)題。并非所有的對(duì)象都需要長(zhǎng)期保存,只有狀態(tài)信息(屬性值)在系統(tǒng)運(yùn)行結(jié)束后仍然有保留價(jià)值的永久對(duì)象才需要長(zhǎng)期保存。這些對(duì)象在OOA中,以及在OOD的問(wèn)題域部分設(shè)計(jì)中被標(biāo)識(shí)為永久對(duì)象。數(shù)據(jù)接口部分的設(shè)計(jì)就是要解決這些對(duì)象的永久存儲(chǔ)問(wèn)題。在系統(tǒng)運(yùn)行時(shí)存在的對(duì)象(類(lèi)似于全局變量),在某個(gè)對(duì)象的服務(wù)執(zhí)行時(shí)存在的對(duì)象(類(lèi)似局部變量)都不需要長(zhǎng)期保存。數(shù)據(jù)管理部分解決的問(wèn)題(4)面向?qū)ο笕绻褂玫拿嫦驅(qū)ο缶幊陶Z(yǔ)言支持永久對(duì)象的表示和存儲(chǔ)管理,或者采用了面向?qū)ο蟮臄?shù)據(jù)庫(kù)管理系統(tǒng),而且其對(duì)象模型與編程語(yǔ)言的對(duì)象模型是一致的,則對(duì)象的永久存儲(chǔ)問(wèn)題可以簡(jiǎn)單地得到解決,不需要設(shè)計(jì)者做更多的工作。2.3.3.2針對(duì)關(guān)系數(shù)據(jù)庫(kù)的數(shù)據(jù)存儲(chǔ)設(shè)計(jì)1.面向?qū)ο?、?shí)體-關(guān)系以及關(guān)系數(shù)據(jù)庫(kù)中的概念間的對(duì)應(yīng)關(guān)系關(guān)系數(shù)據(jù)庫(kù)中一個(gè)類(lèi)對(duì)應(yīng)數(shù)據(jù)庫(kù)的一張表表的每行存儲(chǔ)一個(gè)對(duì)象類(lèi)之間的一個(gè)關(guān)系可以用數(shù)據(jù)庫(kù)的一張表存儲(chǔ)也可以用其中的一個(gè)類(lèi)所對(duì)應(yīng)的表來(lái)存放。2.對(duì)象標(biāo)識(shí)——在應(yīng)用中使用對(duì)象名,在表中使用主關(guān)鍵字在程序運(yùn)行時(shí)的對(duì)象標(biāo)識(shí)是唯一的,對(duì)程序員來(lái)說(shuō)通常是不可以訪問(wèn)的,只是通過(guò)對(duì)象名來(lái)訪問(wèn)對(duì)象在表中使用永久對(duì)象的標(biāo)識(shí)來(lái)訪問(wèn)對(duì)象,永久對(duì)象的標(biāo)識(shí)在存放它的表中是唯一的。永久類(lèi)導(dǎo)出的表用一個(gè)主關(guān)鍵字作為表中所存儲(chǔ)對(duì)象的惟一標(biāo)識(shí);永久類(lèi)的關(guān)系導(dǎo)出的表,用相關(guān)聯(lián)的表的主關(guān)鍵字的組合作為標(biāo)識(shí)。3.對(duì)永久類(lèi)的存儲(chǔ)設(shè)計(jì)每個(gè)需要存儲(chǔ)的永久類(lèi),分別用一個(gè)表進(jìn)行存儲(chǔ)。(1)確定要存儲(chǔ)對(duì)象的哪些屬性值,據(jù)此列出一個(gè)永久類(lèi)的所有需要存儲(chǔ)的屬性。(2)按時(shí)間與空間要求進(jìn)行權(quán)衡,對(duì)這些屬性規(guī)范化,規(guī)范化后的屬性至少滿足第一范式——每個(gè)屬性都是原子的。(3)定義數(shù)據(jù)庫(kù)表。規(guī)范化后的類(lèi)的屬性是一列,要存儲(chǔ)的每一個(gè)對(duì)象是一行。列:規(guī)范化之后的一個(gè)屬性行:一個(gè)對(duì)象實(shí)例也可把相互間有關(guān)系的幾個(gè)永久表的對(duì)象用一個(gè)表存儲(chǔ)4.對(duì)關(guān)系的存儲(chǔ)(1)對(duì)關(guān)聯(lián)的存儲(chǔ)設(shè)計(jì)。1)對(duì)于每個(gè)一對(duì)一的關(guān)聯(lián),可以所有類(lèi)映射到一張獨(dú)立的表;也可以每個(gè)類(lèi)對(duì)應(yīng)一張表,在其中一個(gè)類(lèi)對(duì)應(yīng)的表中用外鍵隱含關(guān)聯(lián)。2)對(duì)于每個(gè)一對(duì)多的關(guān)聯(lián),在多重性為“多”的類(lèi)所對(duì)應(yīng)的表中用外鍵隱含關(guān)聯(lián)。3)對(duì)應(yīng)多對(duì)多的關(guān)聯(lián),把它轉(zhuǎn)化為一對(duì)多的關(guān)聯(lián),然后按一對(duì)多方式處理。否則,將一個(gè)多對(duì)多關(guān)聯(lián)映射到一張獨(dú)立的表,該表的主關(guān)鍵字是兩個(gè)關(guān)聯(lián)的表達(dá)主關(guān)鍵字的拼接。一對(duì)一關(guān)聯(lián)只映射到一個(gè)表使用得較多,能提高性能。分別映射把永久類(lèi)分別映射到一張表,并把表之間的關(guān)聯(lián)也映射到其中的一個(gè)表。表2-2職員類(lèi)及關(guān)聯(lián)所對(duì)應(yīng)的表的結(jié)構(gòu)表中用外鍵“辦公室編號(hào)”表示兩個(gè)類(lèi)之間的關(guān)聯(lián)。表2-3辦公室類(lèi)所對(duì)應(yīng)的表的結(jié)構(gòu)一對(duì)多關(guān)聯(lián)Customer類(lèi)到Orders類(lèi)的一對(duì)多關(guān)聯(lián)把多重性為多的訂單類(lèi)和關(guān)聯(lián)映射為一張表??蛻?hù)類(lèi)單獨(dú)映射為一張表。表2-4訂單類(lèi)及關(guān)聯(lián)所對(duì)應(yīng)的表的結(jié)構(gòu)表2-5客戶(hù)類(lèi)所對(duì)應(yīng)的表的結(jié)構(gòu)客戶(hù)ID屬性作為表的外鍵多對(duì)多關(guān)聯(lián)多對(duì)多關(guān)聯(lián)多對(duì)多關(guān)聯(lián)轉(zhuǎn)化為一對(duì)多關(guān)聯(lián)將多對(duì)多關(guān)聯(lián)轉(zhuǎn)化為一對(duì)多關(guān)聯(lián),然后按照一對(duì)多關(guān)聯(lián)的處理方式進(jìn)行處理。(2)對(duì)聚合/組合的存儲(chǔ)設(shè)計(jì)由于聚合就是一種關(guān)聯(lián),所以對(duì)聚合的存儲(chǔ)設(shè)計(jì)的規(guī)則與對(duì)關(guān)聯(lián)進(jìn)行存儲(chǔ)設(shè)計(jì)的規(guī)則相同。由于組合中的整體與部分之間的關(guān)系是緊密的,有時(shí)把作為整體的類(lèi)和作為部分的類(lèi)都映射為一個(gè)表。(3)對(duì)繼承的存儲(chǔ)設(shè)計(jì)關(guān)系數(shù)據(jù)庫(kù)中對(duì)單繼承進(jìn)行存儲(chǔ)的方法如下,多繼承的處理與此類(lèi)似。1)把各個(gè)特殊類(lèi)(子類(lèi))的屬性都集中到一般類(lèi)(父類(lèi))中,創(chuàng)建一張表。2)父類(lèi)和各個(gè)子類(lèi)分別創(chuàng)建一張表。父類(lèi)的表與各子類(lèi)的表用同樣屬性作為主關(guān)鍵字。3)父類(lèi)為抽象類(lèi)時(shí),把父類(lèi)的屬性放于各個(gè)子類(lèi)中,每個(gè)子類(lèi)各建立一張表。將泛化映射到表第一種方法是父類(lèi)和所有子類(lèi)創(chuàng)建的所有對(duì)象都使用同一個(gè)表。其中的收藏品類(lèi)型(type),用于區(qū)分本行的數(shù)據(jù)是描述油畫(huà)的,還是描述音樂(lè)的。第二種方法是父類(lèi)和子類(lèi)各對(duì)應(yīng)一張表。各表中的主關(guān)鍵字都為收藏品編號(hào),檢索時(shí)用收藏品編號(hào)查找相應(yīng)表中的行。在父類(lèi)對(duì)應(yīng)的表中,要用收藏品類(lèi)型確定子表。表2-7父類(lèi)收藏品類(lèi)所對(duì)應(yīng)的表的結(jié)構(gòu)表2-8子類(lèi)油畫(huà)類(lèi)所對(duì)應(yīng)的表的結(jié)構(gòu)表2-9子類(lèi)音樂(lè)類(lèi)所對(duì)應(yīng)的表的結(jié)構(gòu)height油畫(huà)高度否width油畫(huà)寬度否id收藏品編號(hào)主鍵字段名屬性名主鍵/外鍵performer演奏者否id收藏品編號(hào)主鍵字段名屬性名主鍵/外鍵第三種方法是假設(shè)父類(lèi)收藏品類(lèi)是抽象類(lèi)時(shí),每個(gè)子類(lèi)各對(duì)應(yīng)一張表的方法。表2-10父類(lèi)收藏品類(lèi)是抽象類(lèi)時(shí)子類(lèi)油畫(huà)類(lèi)所對(duì)應(yīng)的表的結(jié)構(gòu)表2-11父類(lèi)收藏品類(lèi)是抽象類(lèi)時(shí)子類(lèi)音樂(lè)類(lèi)所對(duì)應(yīng)的表的結(jié)構(gòu)2.3.3.3設(shè)計(jì)數(shù)據(jù)管理部分的其他方法(1)針對(duì)面向?qū)ο髷?shù)據(jù)庫(kù)的數(shù)據(jù)存儲(chǔ)設(shè)計(jì)面向?qū)ο髷?shù)據(jù)庫(kù)管理系統(tǒng)本身提供了“存儲(chǔ)自己”的功能,使每個(gè)對(duì)象能自己保存。只要把需要長(zhǎng)期保存的對(duì)象標(biāo)識(shí)出來(lái)即可,至于如何保存和恢復(fù),由這種面向?qū)ο髷?shù)據(jù)庫(kù)管理系統(tǒng)自己去管。(2)針對(duì)文件的數(shù)據(jù)存儲(chǔ)設(shè)計(jì)針對(duì)文件系統(tǒng)的數(shù)據(jù)存儲(chǔ)設(shè)計(jì)的具體方法與使用關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)進(jìn)行設(shè)計(jì)類(lèi)似。先根據(jù)需要存儲(chǔ)的對(duì)象的屬性值,列出永久類(lèi)的相應(yīng)屬性,使類(lèi)的屬性列表符合所需要的范式定義,再把每個(gè)符合范式定義的那些屬性定義為一個(gè)文件。進(jìn)而可以按文件的結(jié)構(gòu)讀寫(xiě)文件,或按串讀寫(xiě)文件。只是數(shù)據(jù)接口部分的工作要麻煩一些,需要考慮并發(fā)存取和進(jìn)行記錄更新期間的鎖定和安全,以及對(duì)文件進(jìn)行檢索等問(wèn)題。2.3.4控制驅(qū)動(dòng)部分的設(shè)計(jì)2.3.4.1概述控制驅(qū)動(dòng)部分,也叫任務(wù)管理部分,是面向?qū)ο笤O(shè)計(jì)模型中的一個(gè)組成部分。該部分由系統(tǒng)中主動(dòng)類(lèi)構(gòu)成,這些主動(dòng)類(lèi)是對(duì)系統(tǒng)主動(dòng)對(duì)象的描述,每個(gè)主動(dòng)對(duì)象驅(qū)動(dòng)了系統(tǒng)中一個(gè)控制流。所有的主動(dòng)類(lèi)構(gòu)成面向?qū)ο笤O(shè)計(jì)模型的控制驅(qū)動(dòng)部分??刂屏魇且粋€(gè)在處理機(jī)上順序執(zhí)行的動(dòng)作序列,可以是進(jìn)程(process)或者線程(thread)。在順序程序中只有一個(gè)控制流,在并行/并發(fā)程序中含有多個(gè)控制流。主動(dòng)對(duì)象的主動(dòng)服務(wù)發(fā)起控制流的執(zhí)行。程序運(yùn)行時(shí),當(dāng)一個(gè)主動(dòng)對(duì)象被創(chuàng)建時(shí),它的主動(dòng)服務(wù)將被創(chuàng)建為一個(gè)進(jìn)程或者線程。主動(dòng)服務(wù)按照程序定義的操作邏輯調(diào)用其他對(duì)象的服務(wù),形成了一個(gè)控制流。2.3.4.2系統(tǒng)的并行/并發(fā)順序程序(SequenceProgram)中只有一件事在進(jìn)行處理,即使程序中包括多項(xiàng)工作,也不會(huì)在一個(gè)時(shí)間段同時(shí)做兩項(xiàng)或者更多工作。程序中可以有分支、循環(huán)、子程序調(diào)用等各種復(fù)雜情況,但是一切都按確定的邏輯進(jìn)行。給程序相同的輸入,無(wú)論把這個(gè)程序執(zhí)行多少次,其控制線路和執(zhí)行結(jié)果都是相同的。順序程序?qū)?yīng)的系統(tǒng)就是順序系統(tǒng)。并發(fā)并發(fā)系統(tǒng)在同一段時(shí)間內(nèi)執(zhí)行多個(gè)任務(wù),這些任務(wù)之間又沒(méi)有確定的時(shí)間關(guān)系。描述并發(fā)系統(tǒng)的程序叫做并發(fā)程序(ConcurrentProgram)。程序要執(zhí)行的多個(gè)任務(wù)在時(shí)間上沒(méi)有確定的邏輯關(guān)系,但是又相互影響。這些任務(wù)的執(zhí)行是相互交叉的,并且競(jìng)爭(zhēng)地?fù)屨继幚頇C(jī)資源和其他資源。各個(gè)任務(wù)的交互和切換情況是隨機(jī)的,甚至在一段時(shí)間內(nèi)將有多少個(gè)任務(wù)并發(fā)執(zhí)行也不能事先料定。并行并行計(jì)算(ParallelComputation)的目標(biāo)是,把一個(gè)本來(lái)可以順序執(zhí)行的任務(wù),分解成多個(gè)可并行處理的子任務(wù),把它分布到多個(gè)處理機(jī)上同時(shí)進(jìn)行計(jì)算,以加快提高計(jì)算速度。一個(gè)任務(wù)能否被分解以及如何分解,是并行計(jì)算理論所研究的問(wèn)題。并行(Parallelism)是指多個(gè)工作任務(wù)在擁有多核CPU(或多個(gè)單核CPU)的多處理器計(jì)算機(jī)上同時(shí)執(zhí)行。在這些工作任務(wù)運(yùn)行的過(guò)程中,除非有任務(wù)提前結(jié)束或者延遲啟動(dòng),否則,在任一時(shí)間點(diǎn)總有兩個(gè)以上的工作任務(wù)同時(shí)運(yùn)行。只要是同時(shí)運(yùn)行的,就可以稱(chēng)之為是并行的。2.3.4.3設(shè)計(jì)控制驅(qū)動(dòng)部分的方法設(shè)計(jì)控制驅(qū)動(dòng)部分的關(guān)鍵是識(shí)別系統(tǒng)中所有并發(fā)執(zhí)行的任務(wù),再用主動(dòng)對(duì)象來(lái)表示這些任務(wù)。在網(wǎng)絡(luò)環(huán)境下,系統(tǒng)中并發(fā)執(zhí)行的任務(wù)與軟件體系結(jié)構(gòu)風(fēng)格和系統(tǒng)分布方案等有關(guān)。1.選擇軟件體系結(jié)構(gòu)風(fēng)格分布式系統(tǒng)分布在不同處理機(jī)上的系統(tǒng)成分之間的通信方式,是由軟件體系結(jié)構(gòu)風(fēng)格決定的。現(xiàn)在的技術(shù)條件下主要選擇客戶(hù)-服務(wù)器體系結(jié)構(gòu)的幾個(gè)變種:對(duì)等式客戶(hù)-服務(wù)器體系結(jié)構(gòu)、二層客戶(hù)-服務(wù)器體系結(jié)構(gòu)、三層客戶(hù)-服務(wù)器體系結(jié)構(gòu)、瀏覽器-服務(wù)器體系結(jié)構(gòu)。2.確定系統(tǒng)分布方案系統(tǒng)的分布方案可以從數(shù)據(jù)分布和功能分布兩個(gè)方面進(jìn)行考慮,將系統(tǒng)的數(shù)據(jù)和功能分布到各個(gè)節(jié)點(diǎn)上。面向?qū)ο蠓椒ㄩ_(kāi)發(fā)的系統(tǒng)中,所有的數(shù)據(jù)和功能都是以對(duì)象為單位的。要對(duì)對(duì)象在各個(gè)節(jié)點(diǎn)上的分布進(jìn)行設(shè)計(jì),并把對(duì)象分布情況在類(lèi)圖中表示出來(lái)。下面從對(duì)象的分布、類(lèi)的分布等方面考慮,把對(duì)象分布到通過(guò)網(wǎng)絡(luò)相連的各臺(tái)計(jì)算機(jī)上的設(shè)計(jì)方案。在模型中表示這種分布方案,每個(gè)節(jié)點(diǎn)是整個(gè)類(lèi)圖的一個(gè)局部,用一個(gè)包表示。把集中式的類(lèi)圖分散到各個(gè)結(jié)點(diǎn)上作為包(1)對(duì)象的分布策略面向?qū)ο蠓椒ㄩ_(kāi)發(fā)的應(yīng)用系統(tǒng),數(shù)據(jù)分布和功能分布都將通過(guò)對(duì)象的分布而體現(xiàn)。總的原則是,把通信頻繁、聯(lián)系緊密的對(duì)象分布在同一個(gè)節(jié)點(diǎn)或者傳輸距離相近的節(jié)點(diǎn)上,盡可能減少網(wǎng)絡(luò)上的通信頻度和傳輸量。(2)類(lèi)的分布如果整個(gè)系統(tǒng)只需要在一個(gè)節(jié)點(diǎn)上創(chuàng)建某個(gè)類(lèi)的對(duì)象,那么這個(gè)類(lèi)就分布在這個(gè)節(jié)點(diǎn)上,以便于用這個(gè)類(lèi)創(chuàng)建相應(yīng)的對(duì)象。如果系統(tǒng)需要在多個(gè)節(jié)點(diǎn)上創(chuàng)建同一個(gè)類(lèi)的對(duì)象實(shí)例,那么這個(gè)類(lèi)就要分布到每個(gè)需要它的節(jié)點(diǎn)上??梢园哑渲幸粋€(gè)節(jié)點(diǎn)上的這個(gè)類(lèi)作為正本,把其他節(jié)點(diǎn)上出現(xiàn)的這個(gè)類(lèi)表示為副本。一般的做法是服務(wù)器上的這個(gè)類(lèi)作為正本,多個(gè)客戶(hù)端上的這個(gè)類(lèi)作為副本。副本的類(lèi)在類(lèi)名之后注明“《副本》”字樣,屬性欄和服務(wù)欄不寫(xiě)任何內(nèi)容。表明在這個(gè)節(jié)點(diǎn)上需要用這個(gè)類(lèi)創(chuàng)建對(duì)象,但它的定義是由該類(lèi)的正本給出。(3)類(lèi)圖的劃分把系統(tǒng)的集中式的類(lèi)圖分散到各個(gè)節(jié)點(diǎn)上,分別描述分布在各個(gè)節(jié)點(diǎn)上的對(duì)象,把每個(gè)節(jié)點(diǎn)上的類(lèi)組織成一個(gè)包,從而表明對(duì)象和類(lèi)在各個(gè)節(jié)點(diǎn)上的分布情況。①可以把每個(gè)節(jié)點(diǎn)上的包作為一個(gè)獨(dú)立的子系統(tǒng),用完整的類(lèi)圖表示。圖中要包括所有在這個(gè)節(jié)點(diǎn)上直接創(chuàng)建對(duì)象的類(lèi),還要把這些類(lèi)所要引用的其他類(lèi)表示出來(lái),例如這些類(lèi)繼承的父類(lèi)。這種策略的優(yōu)點(diǎn)是每個(gè)節(jié)點(diǎn)的類(lèi)圖都可以在這個(gè)節(jié)點(diǎn)上獨(dú)立地編程實(shí)現(xiàn),缺點(diǎn)是各個(gè)節(jié)點(diǎn)上相互重復(fù)的類(lèi)較多用副本表示法來(lái)表示重復(fù)出現(xiàn)的類(lèi),包括副本的祖先。②也可以把每個(gè)節(jié)點(diǎn)的包作為在整個(gè)類(lèi)圖的一部分,而不是一個(gè)獨(dú)立的類(lèi)圖。只需要把直接創(chuàng)建對(duì)象的類(lèi)表示出來(lái),這些類(lèi)所要引用的其他類(lèi)不需要表示出來(lái)了。在多個(gè)節(jié)點(diǎn)重復(fù)出現(xiàn)的類(lèi)采用副本表示法,但是副本的祖先就不再以副本的形式出現(xiàn)。按節(jié)點(diǎn)劃分包3.識(shí)別控制流首先,識(shí)別系統(tǒng)分布方案所要求的多控制流識(shí)別控制流的關(guān)鍵是以節(jié)點(diǎn)為單位識(shí)別控制流。以每個(gè)節(jié)點(diǎn)為單位考慮在不同節(jié)點(diǎn)間和每個(gè)節(jié)點(diǎn)上運(yùn)行的程序的并行/并發(fā),設(shè)計(jì)進(jìn)程或線程控制流,以及節(jié)點(diǎn)間相互通信。(1)系統(tǒng)分布方案確定后,分布在不同節(jié)點(diǎn)的程序在各自的計(jì)算機(jī)上運(yùn)行,彼此間自然是并行/并發(fā)的。——每個(gè)節(jié)點(diǎn)至少一個(gè)控制流(2)同時(shí),分布在各個(gè)節(jié)點(diǎn)上(每個(gè)節(jié)點(diǎn)上有多臺(tái)計(jì)算機(jī))的功能通過(guò)在不同的計(jì)算機(jī)上執(zhí)行達(dá)到并行/并發(fā),這樣從用戶(hù)需求出發(fā)也部分地確定了系統(tǒng)中并行/并發(fā)執(zhí)行的任務(wù)。
——各個(gè)節(jié)點(diǎn)中每臺(tái)計(jì)算機(jī)上的控制流——為實(shí)現(xiàn)方便設(shè)立的控制流(例如:負(fù)責(zé)處理機(jī)之間通訊的控制流)(3)每個(gè)節(jié)點(diǎn)提供的系統(tǒng)功能中,也需要考慮在同一臺(tái)計(jì)算機(jī)上并行/并發(fā)執(zhí)行的任務(wù)。例如,用戶(hù)要求在同一臺(tái)計(jì)算機(jī)上不同的窗口中同時(shí)處理多項(xiàng)業(yè)務(wù),或者為提高計(jì)算速度而把順序執(zhí)行的任務(wù)分解成可并行計(jì)算的多個(gè)子任務(wù)。
然后,在選定的軟件體系結(jié)構(gòu)和系統(tǒng)分布方案的基礎(chǔ)上,進(jìn)一步采取下面的策略識(shí)別控制流。要避免多余的并行/并發(fā),多余的并行/并發(fā)意味著系統(tǒng)復(fù)雜性和運(yùn)行開(kāi)銷(xiāo)的增加。(1)通過(guò)用例識(shí)別控制流面向?qū)ο蠓治龆x的每一個(gè)用例都描述了一項(xiàng)獨(dú)立的系統(tǒng)功能。它描述了一項(xiàng)系統(tǒng)功能的業(yè)務(wù)處理流程,有可能需要通過(guò)一個(gè)控制流來(lái)實(shí)現(xiàn)業(yè)務(wù)處理流程。不是每個(gè)用例都需要設(shè)計(jì)成控制流。例如,一個(gè)用例中所含的人機(jī)交互,如果是由系統(tǒng)首先發(fā)起的,表明它只是在某個(gè)控制流的驅(qū)動(dòng)下完成了一項(xiàng)功能,作為其他控制流的一個(gè)組成部分去實(shí)現(xiàn),它本身并不構(gòu)成一個(gè)完整的控制流。通常,下面情況應(yīng)考慮針對(duì)一個(gè)用例專(zhuān)門(mén)設(shè)計(jì)相應(yīng)的控制線程:一個(gè)用例描述的功能能夠與系統(tǒng)的其他功能同時(shí)進(jìn)行處理,一個(gè)用例描述的功能可以在未經(jīng)系統(tǒng)提示的情況下隨時(shí)要求執(zhí)行,一個(gè)用例描述的功能是對(duì)系統(tǒng)中發(fā)生的異常事件進(jìn)行異常處理的。(2)通過(guò)主動(dòng)對(duì)象識(shí)別控制流在面向?qū)ο蠓治瞿P偷闹鲃?dòng)對(duì)象是問(wèn)題域中一些其有主動(dòng)行為的事物的抽象描述——這是由業(yè)務(wù)邏輯所決定的主動(dòng)對(duì)象的一個(gè)主動(dòng)服務(wù),是創(chuàng)建后不必接收其他對(duì)象的消息就可以主動(dòng)執(zhí)行的服務(wù),從系統(tǒng)運(yùn)行的角度看是一個(gè)控制流的源頭。面向?qū)ο笤O(shè)計(jì)可以通過(guò)主動(dòng)對(duì)象確定這些控制流。(3)從設(shè)計(jì)策略上識(shí)別控制流1)增設(shè)控制流改善性能增設(shè)執(zhí)行以下幾類(lèi)任務(wù)的控制流,可以改善性能,通常采用進(jìn)程。①高優(yōu)先級(jí)任務(wù):系統(tǒng)中的某些工作要求在限定的時(shí)間或者盡可能短的時(shí)間內(nèi)完成。把這些對(duì)時(shí)間要求較高的工作從其他工作中分離出米,作為獨(dú)立的任務(wù),用專(zhuān)門(mén)設(shè)計(jì)的控制流實(shí)現(xiàn),在執(zhí)行時(shí)賦予較高的優(yōu)先級(jí)。②低優(yōu)先級(jí)任務(wù)——后臺(tái)進(jìn)程:系統(tǒng)中
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024鋼結(jié)構(gòu)安裝工程合同
- 壽光橋梁聲屏障施工方案
- 寧德強(qiáng)夯工程施工方案
- 油炸流水線設(shè)備安全操作規(guī)程
- 油田井下施工方案
- 2025年滬科版八年級(jí)科學(xué)上冊(cè)月考試卷
- 2025年度社會(huì)組織招標(biāo)采購(gòu)合同3篇
- 樁基雙面焊接施工方案
- 2025年魯教五四新版九年級(jí)物理下冊(cè)月考試卷
- 2025年冀少新版三年級(jí)數(shù)學(xué)下冊(cè)月考試卷含答案
- 中國(guó)省市地圖模板可編輯模板課件
- 《中國(guó)潰瘍性結(jié)腸炎診治指南(2023年)》解讀
- 三年級(jí)數(shù)學(xué)上冊(cè)《寒假作業(yè)》
- 兒童社區(qū)獲得性肺炎的診斷和治療
- 中職班主任德育培訓(xùn)
- DB-T29-74-2018天津市城市道路工程施工及驗(yàn)收標(biāo)準(zhǔn)
- 小學(xué)一年級(jí)20以?xún)?nèi)加減法混合運(yùn)算3000題(已排版)
- 病機(jī)-基本病機(jī) 邪正盛衰講解
- 中科院簡(jiǎn)介介紹
- 《小石潭記》教學(xué)實(shí)錄及反思特級(jí)教師-王君
- 【高中語(yǔ)文】《錦瑟》《書(shū)憤》課件+++統(tǒng)編版+高中語(yǔ)文選擇性必修中冊(cè)+
評(píng)論
0/150
提交評(píng)論