




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第1章概述第1章概述.ppt第2章軟件體系結(jié)構(gòu).ppt第3章經(jīng)典軟件體系結(jié)構(gòu)風(fēng)格.ppt第4章分布式軟件體系結(jié)構(gòu)風(fēng)格.ppt第5章MVC風(fēng)格與Struts框架.ppt第6章軟件設(shè)計(jì)目標(biāo).ppt第7章軟件設(shè)計(jì)——面向?qū)ο蠓椒?ppt第8章設(shè)計(jì)原則.ppt第9章設(shè)計(jì)模式.ppt全套可編輯PPT課件1.1軟件工程方法學(xué)軟件生存周期軟件從功能確定、設(shè)計(jì),到開發(fā)成功投入使用,并在使用中不斷地修改、增補(bǔ)和完善,直到停止該軟件的使用的全過程。軟件工程方法學(xué)軟件生命周期全過程中使用的一整套技術(shù)方法的集合軟件工程方法學(xué)三要素方法、工具和過程。常用的軟件開發(fā)方法結(jié)構(gòu)化方法和面向?qū)ο蠓椒ㄜ浖こ谭椒▽W(xué)傳統(tǒng)方法學(xué)SA+SD+SP面向?qū)ο蠓椒▽W(xué)OOA+OOD+OOP1.1.1結(jié)構(gòu)化方法幾個(gè)主要階段分析、設(shè)計(jì)、編碼、測(cè)試、運(yùn)行和維護(hù)。結(jié)構(gòu)化方法分析與設(shè)計(jì)之間具有鴻溝軟件體系結(jié)構(gòu)軟件總是有體系結(jié)構(gòu)的,不存在沒有體系結(jié)構(gòu)的軟件??梢园衍浖茸饕蛔鶚欠浚哂谢A(chǔ)、主體和裝飾:基礎(chǔ)設(shè)施軟件是操作系統(tǒng)主體應(yīng)用程序?qū)崿F(xiàn)計(jì)算邏輯用戶界面程序方便用戶使用從細(xì)節(jié)上來看,每一個(gè)程序也是有結(jié)構(gòu)的。早期的結(jié)構(gòu)化技術(shù)將軟件系統(tǒng)分成許多模塊,模塊間相互作用,自然地形成了體系結(jié)構(gòu)。但是采用結(jié)構(gòu)化技術(shù)開發(fā)的軟件,程序規(guī)模不大,采用自頂向下、逐步求精,并注意模塊的耦合性就可得到相對(duì)良好的結(jié)構(gòu),所以并未特別研究軟件體系結(jié)構(gòu)。1.1.2面向?qū)ο蠓椒嫦驅(qū)ο蟮能浖こ倘圆捎媒Y(jié)構(gòu)化軟件工程某些成熟思想和方法,在軟件開發(fā)過程中仍采用分析、設(shè)計(jì)、編程、測(cè)試等技術(shù),但在構(gòu)造系統(tǒng)的思想方法上進(jìn)行了改進(jìn)。采用一致的概念和表示法
——不存在分析與設(shè)計(jì)之間的鴻溝面向?qū)ο筌浖こ虖?qiáng)調(diào)以問題域中的事物為中心來考慮問題,根據(jù)這些事物的本質(zhì)特征,抽象地表示為對(duì)象,作為系統(tǒng)的基本構(gòu)成單位。因此,面向?qū)ο筌浖こ炭梢允管浖到y(tǒng)直接地映射問題域,使軟件系統(tǒng)保持問題域中事物及其相互關(guān)系的本來面貌。軟件體系結(jié)構(gòu)軟件工程從傳統(tǒng)的結(jié)構(gòu)化軟件工程進(jìn)入到了現(xiàn)代的面向?qū)ο筌浖こ毯螅枰M(jìn)一步研究整個(gè)軟件系統(tǒng)的體系結(jié)構(gòu)尋求質(zhì)量最好、建構(gòu)最快、成本最低的構(gòu)造過程在引入了軟件體系結(jié)構(gòu)的軟件開發(fā)之后,應(yīng)用系統(tǒng)的構(gòu)造過程變?yōu)槊嫦驅(qū)ο蠓治觥④浖w系結(jié)構(gòu)、面向?qū)ο笤O(shè)計(jì)、面向?qū)ο缶幊?、面向?qū)ο鬁y(cè)試和面向?qū)ο缶S護(hù)可以認(rèn)為軟件體系結(jié)構(gòu)架起了面向?qū)ο蠓治龊兔嫦驅(qū)ο笤O(shè)計(jì)之間的一座橋梁1.2軟件設(shè)計(jì)與體系結(jié)構(gòu)1.軟件設(shè)計(jì)軟件設(shè)計(jì)形成一套文檔,根據(jù)這些文檔,程序員能夠完整地設(shè)計(jì)出應(yīng)用程序。軟件設(shè)計(jì)的結(jié)果可以使程序員不需要其他文檔的幫助,就可以編寫程序。軟件設(shè)計(jì)就像是建筑物和機(jī)械零件的圖紙,建筑商和技術(shù)工人根據(jù)圖紙就可以蓋好相應(yīng)的建筑物和加工好相應(yīng)的零件。2.軟件體系結(jié)構(gòu)結(jié)構(gòu)化技術(shù)是以磚、瓦、預(yù)制梁等蓋平房,而面向?qū)ο蠹夹g(shù)以整面墻、整間房、一層樓梯的預(yù)制件蓋高樓大廈。土木工程進(jìn)入到了現(xiàn)代建筑學(xué),怎樣才能容易地構(gòu)造體系結(jié)構(gòu)?什么是合理的組件搭配?重要組件更改以后,如何保證整棟高樓不倒?不同的應(yīng)用領(lǐng)域(學(xué)校、住宅、寫字樓)分別需要什么樣的組件?是否具有實(shí)用、美觀、強(qiáng)度、造價(jià)合理的組件,從而使建造出來的建筑(即體系結(jié)構(gòu))更能滿足用戶的需求?同樣,軟件工程也從傳統(tǒng)的結(jié)構(gòu)化軟件工程進(jìn)入到了現(xiàn)代的面向?qū)ο筌浖こ?,需要進(jìn)一步研究整個(gè)軟件系統(tǒng)的體系結(jié)構(gòu),尋求質(zhì)量最好、建構(gòu)最快、成本最低的構(gòu)造過程。軟件體系結(jié)構(gòu)(Architecture)是設(shè)計(jì)抽象的進(jìn)一步發(fā)展,滿足了更方便地開發(fā)更大、更復(fù)雜的軟件系統(tǒng)的需要。隨著軟件系統(tǒng)規(guī)模越來越大、越來越復(fù)雜,對(duì)軟件總體的系統(tǒng)結(jié)構(gòu)設(shè)計(jì)和規(guī)格說明比起對(duì)計(jì)算的算法和數(shù)據(jù)結(jié)構(gòu)的選擇變得重要得多。軟件體系結(jié)構(gòu)發(fā)展的階段第一個(gè)階段是“無體系結(jié)構(gòu)”設(shè)計(jì)階段,以匯編語言進(jìn)行小規(guī)模應(yīng)用程序開發(fā)為特征。第二個(gè)階段是萌芽階段,出現(xiàn)了程序結(jié)構(gòu)設(shè)計(jì)主題,主要特征是使用了控制流圖和數(shù)據(jù)流圖。第三個(gè)階段是初期階段,出現(xiàn)了以UML為典型代表的從不同側(cè)面描述系統(tǒng)的結(jié)構(gòu)模型。第四個(gè)階段是高級(jí)階段,以描述系統(tǒng)的高層抽象結(jié)構(gòu)為中心,不關(guān)心具體的建模細(xì)節(jié),該階段以Kruchten提出的“4+1”模型為標(biāo)志。解決好軟件的質(zhì)量、復(fù)用性和可維護(hù)性問題,是研究軟件體系結(jié)構(gòu)的根本目的。思考題1.是否存在沒有體系結(jié)構(gòu)的軟件?采用結(jié)構(gòu)化技術(shù)開發(fā)的軟件是否具有體系結(jié)構(gòu)?2.軟件設(shè)計(jì)的含義3.軟件體系結(jié)構(gòu)的發(fā)展階段4.研究軟件體系結(jié)構(gòu)的根本目的第2章軟件體系結(jié)構(gòu)2.1軟件體系結(jié)構(gòu)的定義SA的定義軟件體系結(jié)構(gòu)已經(jīng)在軟件工程領(lǐng)域中有著廣泛的應(yīng)用,但迄今為止還沒有一個(gè)公認(rèn)的定義。許多專家學(xué)者從不同角度對(duì)軟件體系結(jié)構(gòu)進(jìn)行了定義,較為典型的有以下幾種。SA的定義(1)1994年(D.GarlanandM.Shaw)軟件體系結(jié)構(gòu)是軟件設(shè)計(jì)過程中,超越計(jì)算過程中的算法設(shè)計(jì)和數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)的一個(gè)層次。軟件體系結(jié)構(gòu)處理整體系統(tǒng)結(jié)構(gòu)設(shè)計(jì)和描述方面的一些問題,如全局組織和全局控制結(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)的不同部分組合連接起來。軟件體系結(jié)構(gòu)形式(form)是由專有特性(properties)和關(guān)系(relationship)組成。專有特性用于限制軟件體系結(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ī)范,主要包括用其行為來描述的功能組件和組件之間的相互連接、接口和關(guān)系。SA的定義(6)張友生在《軟件體系結(jié)構(gòu)》一書中的定義:軟件體系結(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ì)象、模式等);連接件:將它們組合起來形成完整的軟件系統(tǒng);物理分布:軟件系統(tǒng)拓?fù)浣Y(jié)構(gòu)約束:限制條件性能:軟件質(zhì)量2.2.組件與連接件2.2.1組件(Component)廣義上講,組件是具有某種功能的可復(fù)用的軟件結(jié)構(gòu)單元,是為組裝服務(wù)的,是組成軟件系統(tǒng)的計(jì)算單元或數(shù)據(jù)存儲(chǔ)單元。例如:共享變量函數(shù)、子程序?qū)ο?、類文件程序?shù)據(jù)庫….復(fù)用:代碼復(fù)用、設(shè)計(jì)復(fù)用、分析復(fù)用、測(cè)試復(fù)用…組件(Component)嚴(yán)格意義上講,組件是一種可部署單元,它具有規(guī)范的接口規(guī)約和顯式的語境依賴,而接口功能由組件內(nèi)部封裝的服務(wù)來實(shí)現(xiàn)。由組件組裝出的軟件稱為組件化軟件。組件的定義一般認(rèn)為,組件是指語義完整、語法正確和有可復(fù)用價(jià)值的單位軟件,是軟件復(fù)用過程中可以明確辯識(shí)的系統(tǒng);結(jié)構(gòu)上,它是語義描述、通訊接口和實(shí)現(xiàn)代碼的復(fù)合體。簡(jiǎn)單地說,組件是具有一定的功能,能夠獨(dú)立工作或能同其它組件裝配起來協(xié)調(diào)工作的程序體,組件的使用同它的開發(fā)、生產(chǎn)無關(guān)。組件的粒度函數(shù)函數(shù)、子程序、方法類類級(jí)的復(fù)用(代碼復(fù)用)是以類為封裝的單位,但這樣的復(fù)用粒度還太小,不足以解決異構(gòu)互操作和效率更高的復(fù)用。類的組合通常講的組件是對(duì)一組類的組合進(jìn)行封裝,并代表完成一個(gè)或多個(gè)功能的特定服務(wù),也為用戶提供了多個(gè)接口。整個(gè)組件隱藏了具體的實(shí)現(xiàn),只用接口提供服務(wù)。2.2.2連接與連接件連接(Connection):組件間建立和維護(hù)行為關(guān)聯(lián)與信息傳遞的途徑;連接需要兩方面的支持:連接發(fā)生和維持的機(jī)制——實(shí)現(xiàn)連接的物質(zhì)基礎(chǔ)(連接的機(jī)制);連接能夠正確、無二義、無沖突進(jìn)行的保證——連接正確有效的進(jìn)行信息交換的規(guī)則(連接的協(xié)議)。簡(jiǎn)稱“機(jī)制”(mechanism)和“協(xié)議”(protocol)。連接件(Connector):表示組件之間的交互并實(shí)現(xiàn)組件之間的連接,連接件也可看作一類特殊的組件,區(qū)別在于:一般組件是軟件功能設(shè)計(jì)和實(shí)現(xiàn)的承載體;連接件是負(fù)責(zé)完成組件之間信息交換和行為聯(lián)系的專用組件。連接件(Connector)連接件有哪些?調(diào)用返回管道(pipe)……中間件(Middleware)ODBC/JDBC應(yīng)用服務(wù)器WEB服務(wù)器消息中間件連接件(Connector)2.2.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通過運(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è)類Spot類的對(duì)象s,Trans類的對(duì)象ts,Spot類的對(duì)象p連接件在Test類里面創(chuàng)建Spot類的對(duì)象s、Trans類的對(duì)象ts,Trans類的move()方法的參數(shù)里面有Spot類的對(duì)象pTest類使用Spot類的對(duì)象s,調(diào)用了Spot類的getX()和getY()方法Test類使用Trans類的對(duì)象ts,調(diào)用了Trans類move()方法,并把實(shí)參Spot類的對(duì)象s傳遞給了虛參Spot類的對(duì)象p。2.3軟件體系結(jié)構(gòu)研究?jī)?nèi)容軟件體系結(jié)構(gòu)要解決的問題軟件的基本構(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)行修改?使用何種工具來支持軟件體系結(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)描述語言等形式化工具(ArchtecturalDescriptionLanguage,ADL)軟件體系結(jié)構(gòu)風(fēng)格的研究基于軟件體系結(jié)構(gòu)的軟件開發(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)的專門知識(shí)的整理2.4軟件體系結(jié)構(gòu)風(fēng)格在軟件開發(fā)過程中,通常會(huì)考慮能否使用重復(fù)的體系結(jié)構(gòu)模式,即能否達(dá)到體系結(jié)構(gòu)級(jí)的軟件復(fù)用。也就是說,能否在不同的軟件系統(tǒng)中,使用同一體系結(jié)構(gòu)。這就是軟件體系結(jié)構(gòu)的風(fēng)格需要研究的問題。軟件系統(tǒng)具有若干特定的“風(fēng)格”;這些風(fēng)格在實(shí)踐中被多次設(shè)計(jì)、應(yīng)用,已被證明具有良好的性能、可行性和廣泛的應(yīng)用場(chǎng)景,可以被重復(fù)使用;實(shí)現(xiàn)“軟件體系結(jié)構(gòu)級(jí)”的復(fù)用。描述一類體系結(jié)構(gòu)在實(shí)踐中被多次應(yīng)用是若干設(shè)計(jì)思想的綜合具有已經(jīng)被熟知的特性,并且可以復(fù)用定義:描述特定領(lǐng)域中軟件系統(tǒng)家族的組織方式的慣用模式,反映了領(lǐng)域中眾多系統(tǒng)所共有的結(jié)構(gòu)和語義特性,并指導(dǎo)如何將各個(gè)模塊和子系統(tǒng)有效地組織成一個(gè)完整的系統(tǒng)。“軟件體系結(jié)構(gòu)風(fēng)格”的組成一組組件類型。例如:數(shù)據(jù)容器,過程,對(duì)象一組連接件類型/交互機(jī)制。例如:過程調(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)過實(shí)踐證實(shí)的解決方案可以可靠地用于解決新的問題。只要系統(tǒng)使用規(guī)范的方法來組織,就可以使別的設(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)格的分類:數(shù)據(jù)流風(fēng)格:批處理序列;管道/過濾器調(diào)用/返回風(fēng)格:主程序/子程序;面向?qū)ο箫L(fēng)格;層次結(jié)構(gòu)獨(dú)立組件風(fēng)格:進(jìn)程通訊;事件系統(tǒng)虛擬機(jī)風(fēng)格:解釋器;基于規(guī)則的系統(tǒng)倉庫風(fēng)格:數(shù)據(jù)庫系統(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)格:MVCClusterSOACloud思考題1.軟件體系結(jié)構(gòu)的定義2.組件和連接件的定義3.設(shè)計(jì)簡(jiǎn)單的組件和連接件(相關(guān)程序,語言不限。說明程序中的組件和連接件)(1)設(shè)計(jì)一個(gè)子程序,由主程序調(diào)用(2)設(shè)計(jì)多個(gè)類和對(duì)象,相互調(diào)用4.簡(jiǎn)述軟件體系結(jié)構(gòu)研究的主要內(nèi)容5.軟件體系結(jié)構(gòu)風(fēng)格的定義第3章經(jīng)典軟件體系結(jié)構(gòu)風(fēng)格3.1調(diào)用-返回風(fēng)格3.1.1主程序-子程序風(fēng)格結(jié)構(gòu)化方法設(shè)計(jì)思路:自頂向下、逐步求精。采用模塊分解與功能抽象,自頂向下、分而治之程序結(jié)構(gòu):按功能劃分為若干個(gè)基本模塊,形成一個(gè)樹狀結(jié)構(gòu)各模塊間的關(guān)系盡可能簡(jiǎn)單,功能上相對(duì)獨(dú)立;每一模塊內(nèi)部均是由順序、選擇和循環(huán)三種基本結(jié)構(gòu)組成其模塊化實(shí)現(xiàn)的具體方法是使用函數(shù)(子程序)主程序-子過程風(fēng)格的基本構(gòu)成組件主程序、子程序連接件調(diào)用-返回機(jī)制拓?fù)浣Y(jié)構(gòu)層次化結(jié)構(gòu)本質(zhì):將大系統(tǒng)分解為若干模塊(模塊化),主程序調(diào)用這些模塊實(shí)現(xiàn)完整的系統(tǒng)功能。voidmain(){printstar();printmessage();}例#include<stdio.h>voidprintstar(){printf(“*************\n”);}voidprintmessage(){printf(“Hello,world.\n”);printstar();}組件主程序main()子程序printstar()和printmessage()連接件主程序main()調(diào)用子程序printstar()和printmessage()因?yàn)闆]有參數(shù)的傳遞,所以比較簡(jiǎn)單。含有參數(shù)的子程序的一般調(diào)用過程如下。按從右到左的順序,計(jì)算實(shí)參各表達(dá)式的值;按照位置,將實(shí)參的值一一傳給形參;執(zhí)行被調(diào)用函數(shù)(子程序);當(dāng)遇到return(表達(dá)式)語句時(shí),計(jì)算表達(dá)式的值,并返回主調(diào)函數(shù)(主程序)。函數(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,通過運(yùn)算得到較大值z(mì),并將z返回調(diào)用處,賦值給main()函數(shù)的變量c。主程序-子過程風(fēng)格的優(yōu)點(diǎn)與缺點(diǎn)優(yōu)點(diǎn):有效地將一個(gè)較復(fù)雜的程序系統(tǒng)設(shè)計(jì)任務(wù)分解成許多易于控制和處理的子任務(wù),便于開發(fā)和維護(hù)已被證明是成功的設(shè)計(jì)方法,可以被用于較大程序主程序-子過程風(fēng)格的優(yōu)點(diǎn)與缺點(diǎn)缺點(diǎn):規(guī)模:程序超過10萬行,表現(xiàn)不好
;程序太大,開發(fā)太慢,測(cè)試越來越困難可重用性差、數(shù)據(jù)安全性差,難以開發(fā)大型軟件和圖形界面的應(yīng)用軟件把數(shù)據(jù)和處理數(shù)據(jù)的過程分離為相互獨(dú)立的實(shí)體,當(dāng)數(shù)據(jù)結(jié)構(gòu)改變時(shí),所有相關(guān)的處理過程都要進(jìn)行相應(yīng)的修改圖形用戶界面的應(yīng)用程序,很難用過程來描述和實(shí)現(xiàn),開發(fā)和維護(hù)也都很困難。3.1.2面向?qū)ο箫L(fēng)格OO風(fēng)格基本構(gòu)成組件對(duì)象,或者說是抽象數(shù)據(jù)類型(類)的實(shí)例類連接件對(duì)象是通過函數(shù)和過程的調(diào)用-返回機(jī)制來交互的類通過定義對(duì)象,再采用調(diào)用調(diào)用-返回機(jī)制進(jìn)行交互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è)類Spot的對(duì)象s,Trans的對(duì)象ts。連接件如下在Test類里面創(chuàng)建Spot類的對(duì)象s、Trans類的對(duì)象ts,Trans類的move()方法的參數(shù)里面有Spot類的對(duì)象p。Test類使用Spot類的對(duì)象s,調(diào)用了Spot類的getX()和getY()方法;Test類使用Trans類的對(duì)象ts,調(diào)用了Trans類move()方法,并把實(shí)參Spot類的對(duì)象s傳遞給了虛參Spot類的對(duì)象p。OO特性抽象封裝:限制對(duì)某些信息的訪問多態(tài):在運(yùn)行時(shí)選擇具體的操作繼承:對(duì)共享的功能保持唯一的接口交互:通過過程調(diào)用或類似的協(xié)議動(dòng)態(tài)綁定:運(yùn)行時(shí)決定實(shí)際調(diào)用的操作復(fù)用和維護(hù)OO風(fēng)格優(yōu)點(diǎn)復(fù)用和維護(hù):利用封裝和聚合提高生產(chǎn)力因?yàn)閷?duì)象對(duì)其它對(duì)象隱藏它的表示,所以可以改變一個(gè)對(duì)象的表示,而不影響其它的對(duì)象。某一組件的算法與數(shù)據(jù)結(jié)構(gòu)的修改不會(huì)影響其他組件組件之間依賴性降低,提高了復(fù)用度反映現(xiàn)實(shí)世界容易分解一個(gè)系統(tǒng)設(shè)計(jì)者可將一些數(shù)據(jù)存取操作的問題分解成一些交互的代理程序的集合OO風(fēng)格缺點(diǎn)管理大量的對(duì)象:怎樣確立大量對(duì)象的結(jié)構(gòu)繼承引起復(fù)雜度,關(guān)鍵系統(tǒng)中慎用必須知道對(duì)象的身份為了使一個(gè)對(duì)象和另一個(gè)對(duì)象通過過程調(diào)用等進(jìn)行交互,必須知道對(duì)象的標(biāo)識(shí)。只要一個(gè)對(duì)象的標(biāo)識(shí)改變了,就必須修改所有其他明確顯式調(diào)用它的對(duì)象,并消除由此帶來的一些副作用(例如,如果A使用了對(duì)象B,C也使用了對(duì)象B,那么,C對(duì)B的使用所造成的對(duì)A的影響可能是料想不到的)對(duì)比:在管道-過濾器系統(tǒng)中,一個(gè)過濾器無需知道其他過濾器的任何信息不是特別適合功能的擴(kuò)展。為了增加新功能,要么修改已有的模塊,要么就加入新的模塊,從而影響性能3.2數(shù)據(jù)流風(fēng)格3.2.1數(shù)據(jù)流體系結(jié)構(gòu)風(fēng)格的基本特征數(shù)據(jù)流風(fēng)格由數(shù)據(jù)控制計(jì)算系統(tǒng)結(jié)構(gòu)由數(shù)據(jù)在處理之間的有序移動(dòng)決定數(shù)據(jù)流系統(tǒng)的結(jié)構(gòu)是顯而易見的在純數(shù)據(jù)流系統(tǒng)中,處理之間除了數(shù)據(jù)交換,沒有任何其他的交互一個(gè)直觀實(shí)例:在MSExcel中,改變某個(gè)單元格的值,則依賴于該單元格的其他單元格的值也會(huì)隨之改變。三種典型的數(shù)據(jù)流風(fēng)格批處理管道-過濾器過程控制,3.73.2.1批處理風(fēng)格每個(gè)處理步驟是一個(gè)獨(dú)立的程序每一步必須在前一步結(jié)束后才能開始數(shù)據(jù)必須是完整的,以整體的方式傳遞典型應(yīng)用:傳統(tǒng)的數(shù)據(jù)處理程序編譯/CASE(computeraidedsoftwareengineering)工具
批處理風(fēng)格-基本構(gòu)成基本組件獨(dú)立的應(yīng)用程序連接件某種類型的媒質(zhì)(magnetic
tape)表達(dá)拓?fù)浣Y(jié)構(gòu)連接件定義了相應(yīng)的數(shù)據(jù)流圖每一步驟必須在前一步驟完全結(jié)束之后方能開始程序1將一批數(shù)據(jù)以二進(jìn)制形式存放在磁盤文件中。#include<fstream>usingnamespacestd;structstudent{charname[20];intnum;intage;charsex;};intmain(){studentstud[3]={"Li",1001,18,'f',"Fun",1002,19,'m',"Wang",1004,17,'f'};ofstreamoutfile("stud.dat",ios::binary);if(!outfile){cerr<<"openerror!"<<endl;abort();//退出程序
}for(inti=0;i<3;i++)outfile.write((char*)&stud[i],sizeof(stud[i]));outfile.close();return0;}程序2將剛才以二進(jìn)制形式存放在磁盤文件中的數(shù)據(jù)讀入內(nèi)存并在顯示器上顯示。#include<fstream>usingnamespacestd;structstudent{stringname;intnum;intage;charsex;};intmain(){studentstud[3];inti;ifstreaminfile("stud.dat",ios::binary);if(!infile){cerr<<"openerror!"<<endl;abort();}for(i=0;i<3;i++)infile.read((char*)&stud[i],sizeof(stud[i]));infile.close();for(i=0;i<3;i++){cout<<"NO."<<i+1<<endl;cout<<"name:"<<stud[i].name<<endl;cout<<"num:"<<stud[i].num<<endl;;cout<<"age:"<<stud[i].age<<endl;cout<<"sex:"<<stud[i].sex<<endl<<endl;}return0;}組件程序1程序2連接件文件stud.dat第一個(gè)java文件importjava.io.BufferedInputStream;importjava.io.DataInputStream;importjava.io.FileNotFoundException;importjava.io.FileInputStream;importjava.io.IOException;publicclassreceiver{FiletempFile=newFile("Data.dat");if(tempFile.exists()){System.out.println("文件Data.dat已經(jīng)存在!");System.exit(0);}publicvoidgetNumber(){DataInputStreamin=null;try{in=newDataInputStream(newBufferedInputStream(newFileInputStream(tempFile)));}catch(FileNotFoundExceptione){e.printStackTrace();}for(inti=0;i<6;i++)try{ System.out.print(""+in.readInt());}catch(IOExceptione){e.printStackTrace();}if(in!=null){try{ in.close();}catch(IOExceptione){e.printStackTrace();}}} }第二個(gè)java文件importjava.io.BufferedOutputStream;importjava.io.DataOutputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;publicclasssender{FiletempFile=newFile("Data.dat");if(tempFile.exists()){System.out.println("文件Data.dat已經(jīng)存在!");System.exit(0);}publicvoidoutNumber(){DataOutputStreamout=null;try{out=newDataOutputStream(newBufferedOutputStream(newFileOutputStream(tempFile)));}catch(FileNotFoundExceptione){e.printStackTrace();}for(inti=0;i<6;i++)try{out.writeInt((int)(Math.random()*100));}catch(IOExceptione){e.printStackTrace();}if(out!=null) {try{out.close();}catch(IOExceptione){e.printStackTrace();}}} }組件receiver程序sender程序;連接件文件Data.datsender程序,使用File類判斷當(dāng)前目錄中是否已存在文件Data.dat,如存在,則中斷程序的運(yùn)行,否則繼續(xù);然后使用DataOutputStream及相關(guān)IO流類將隨機(jī)產(chǎn)生的6個(gè)整數(shù)存入數(shù)據(jù)文件Data.dat;receiver程序,使用DataInputStream及相關(guān)IO流類從Data.dat文件中讀取數(shù)據(jù),并在屏幕上顯示出來。3.2.2管道與過濾器風(fēng)格管道過濾器風(fēng)格的基本構(gòu)成(1)組件:過濾器,處理數(shù)據(jù)流一個(gè)過濾器封裝了一個(gè)處理步驟數(shù)據(jù)源點(diǎn)和數(shù)據(jù)終止點(diǎn)可以看作是特殊的過濾器過濾器對(duì)輸入流進(jìn)行處理、轉(zhuǎn)換,處理后的結(jié)果在輸出端流出。每個(gè)組件都有輸入/輸出集合,組件在輸入處讀取數(shù)據(jù)流,經(jīng)過內(nèi)部處理,在輸出處生成數(shù)據(jù)流。管道過濾器風(fēng)格的基本構(gòu)成(2)連接件:管道,連接一個(gè)源和一個(gè)目的過濾器轉(zhuǎn)發(fā)數(shù)據(jù)流數(shù)據(jù)可能是ASCII字符形成的流連接件位于過濾器之間,起到信息流的導(dǎo)管的作用,被稱為管道。連接件就象是數(shù)據(jù)流傳輸?shù)墓艿?,將一個(gè)過濾器的輸出傳到另一過濾器的輸入。管道只是對(duì)數(shù)據(jù)傳輸?shù)某橄螅赡苁枪艿?,也可能是其它通信方式,甚至什么都沒有(所有過濾器都在原始數(shù)據(jù)基礎(chǔ)上進(jìn)行處理)
管道過濾器風(fēng)格的基本構(gòu)成(3)拓?fù)浣Y(jié)構(gòu):連接器定義了數(shù)據(jù)流圖管道-過濾器風(fēng)格的優(yōu)點(diǎn)(一)由于每個(gè)組件的行為不受其他組件的影響,整個(gè)系統(tǒng)的行為易于理解系統(tǒng)中的組件具有良好的隱蔽性和高內(nèi)聚、低耦合的特點(diǎn)支持軟件復(fù)用:允許設(shè)計(jì)者將整個(gè)系統(tǒng)的輸入/輸出行為看成是多個(gè)過濾器的行為的簡(jiǎn)單合成;只要提供適合在兩個(gè)過濾器之間傳送的數(shù)據(jù),任何兩個(gè)過濾器都可被連接起來;系統(tǒng)維護(hù)和增強(qiáng)系統(tǒng)性能簡(jiǎn)單:新的過濾器可以添加到現(xiàn)有系統(tǒng)中來,舊的可以被改進(jìn)的過濾器替換掉;管道-過濾器風(fēng)格的優(yōu)點(diǎn)(二)允許對(duì)一些如吞吐量、死鎖等屬性的分析;支持并行執(zhí)行:每個(gè)過濾器是作為一個(gè)單獨(dú)的任務(wù)完成,因此可與其它任務(wù)并行執(zhí)行。管道-過濾器風(fēng)格的缺點(diǎn)(一)通常導(dǎo)致進(jìn)程成為批處理的結(jié)構(gòu)這是因?yàn)殡m然過濾器可增量式地處理數(shù)據(jù),但它們是獨(dú)立的,所以設(shè)計(jì)者必須將每個(gè)過濾器看成一個(gè)完整的從輸入到輸出的轉(zhuǎn)換;不適合處理交互的應(yīng)用當(dāng)需要增量地顯示改變時(shí),這個(gè)問題尤為嚴(yán)重;管道-過濾器風(fēng)格的缺點(diǎn)(二)在數(shù)據(jù)傳輸上沒有通用的標(biāo)準(zhǔn),每個(gè)過濾器都增加了解析和合成數(shù)據(jù)的工作,這樣就導(dǎo)致了系統(tǒng)性能下降,并增加了編寫過濾器的復(fù)雜性。
絕大部分處理時(shí)間消耗在格式轉(zhuǎn)換上(需要對(duì)數(shù)據(jù)傳輸進(jìn)行特定的處理時(shí),會(huì)導(dǎo)致對(duì)于每個(gè)過濾器的解析輸入和格式化輸出要做更多的工作,帶來系統(tǒng)復(fù)雜性的上升)批處理與管道-過濾器的比較相似點(diǎn):把任務(wù)分解成為一系列固定順序的計(jì)算單元
彼此間只通過數(shù)據(jù)傳遞交互批處理與管道-過濾器的比較不同點(diǎn):BatchSequentialPipe-and-Filter整體傳遞數(shù)據(jù)組件粒度較大延遲高,實(shí)時(shí)性差無并發(fā)增量組件粒度較小實(shí)時(shí)性好可并發(fā)管道-過濾器風(fēng)格的例子:DOSDOS中也有管道命令。DOS允許在命令中出現(xiàn)用豎線字符“|”分開的多個(gè)命令,將符號(hào)“|”前面的命令的輸出,作為“|”之后命令的輸入,這就是“管道功能”,豎線字符“|”就是管道操作符。例如,命令“dir|more”使得當(dāng)前目錄列表在屏幕上逐屏顯示。dir的輸出的是整個(gè)目錄列表,它不出現(xiàn)在屏幕上而是由于符號(hào)“|”的規(guī)定,成為下一個(gè)命令more的輸入,more命令則將其輸入一屏一屏地顯示,成為命令行的輸出。Java管道流JavaI/O流中的管道流類PipedInputStream和PipedOutputStream可以方便地實(shí)現(xiàn)管道-過濾器體系結(jié)構(gòu),這兩個(gè)類的實(shí)例對(duì)象要通過connect方法連接。JavaI/O流中有管道流類PipedInputStream、PipedOutputStream和PipedReader、PipedWriter,它們的對(duì)象總是成對(duì)出現(xiàn)。寫入類PipedOutputStream的對(duì)象的數(shù)據(jù),可以由與之相連接的類PipedInputStream的對(duì)象讀出;寫入類PipedWriter的對(duì)象的數(shù)據(jù),可以由與之相連接的類PipedReader的對(duì)象讀出??梢?,這兩組管道流類與管道組件的要求相吻合,可以借助它們實(shí)現(xiàn)管道。所以,使用它們,可以方便地實(shí)現(xiàn)管道-過濾器體系結(jié)構(gòu)。這兩個(gè)類的實(shí)例對(duì)象通過connect()方法連接。Java管道流下面程序的功能是sender發(fā)送“Hello,receiver!I`msender”給receiver,然后receiver接受后顯示出來并且在前面加上“thefollowingisfromsender”的信息。管道流內(nèi)部在實(shí)現(xiàn)時(shí)還有大量的對(duì)同步數(shù)據(jù)的處理,管道輸出流和管道輸入流執(zhí)行時(shí)不能互相阻塞,所以一般要開啟獨(dú)立線程分別執(zhí)行,順便復(fù)習(xí)了多線程操作。importjava.io.*;importjava.util.*;publicclassTestPiped{publicstaticvoidmain(String[]args){senders=newsender();receiverr=newreceiver();PipedOutputStreamout=s.getOut();PipedInputStreamin=r.getIn();try{in.connect(out);s.start();r.start();}catch(Exceptione){e.printStackTrace();}}}classsenderextendsThread{PipedOutputStreamout=newPipedOutputStream();publicPipedOutputStreamgetOut(){returnout;}publicvoidrun(){Stringstr="Hello,receiver!I`msender\n";try{out.write(str.getBytes());out.close();}catch(Exceptione){e.printStackTrace();}}}classreceiverextendsThread{PipedInputStreamin=newPipedInputStream();publicPipedInputStreamgetIn(){returnin;}publicvoidrun(){byte[]buf=newbyte[1024];try{intlen=in.read(buf);System.out.println("thefollowingisfromsender:\n“+newString(buf,0,len));in.close();}catch(Exceptione){e.printStackTrace();}}}程序的執(zhí)行結(jié)果:
thefollowingisfromsender:Hello,receiver!I`msender組件對(duì)數(shù)據(jù)的處理的過濾器sender和receiver。連接件關(guān)鍵語句(1)PipedOutputStreamout=s.getOut();這條語句作用是發(fā)送端送出數(shù)據(jù)。(2)PipedInputStreamin=r.getIn();這條語句作用是接收端接收數(shù)據(jù)。(3)in.connect(out);這條語句作用是銜接管道兩端。3.3基于事件的隱式調(diào)用風(fēng)格顯式調(diào)用vs.隱式調(diào)用顯式調(diào)用各個(gè)組件之間的互動(dòng)是由顯性調(diào)用函數(shù)或程序完成的。調(diào)用過程與次序是固定的、預(yù)先設(shè)定的。隱式調(diào)用在很多情況下,軟件更多的變成被動(dòng)性系統(tǒng),組件持續(xù)的與其所處的環(huán)境打交道,但并不知道確切的交互次序3.3.1基于事件的隱式調(diào)用隱式調(diào)用:組件不直接調(diào)用一個(gè)過程一個(gè)組件(事件源)可以觸發(fā)或廣播一個(gè)或多個(gè)事件。系統(tǒng)中的其它組件(事件處理器)可以注冊(cè)自己感興趣的事件,并將自己的某個(gè)過程與相應(yīng)的事件進(jìn)行關(guān)聯(lián)。當(dāng)一個(gè)事件被發(fā)布,系統(tǒng)(事件管理器)自動(dòng)調(diào)用在該事件中注冊(cè)的所有過程。這樣,一個(gè)事件的觸發(fā)就導(dǎo)致了另一模塊中的過程的調(diào)用。這種系統(tǒng),稱為基于事件的系統(tǒng)(Event-basedsystem),采用隱式調(diào)用(Implicitinvocation)的方式?;窘M件:對(duì)象或過程,并分類為以下更小的組件
過程或函數(shù),充當(dāng)事件源或事件處理器的角色事件連接件:事件-過程綁定過程(事件處理器,事件的接收和處理方)向特定的事件進(jìn)行注冊(cè);組件(事件源)發(fā)布事件;當(dāng)某些事件被發(fā)布(觸發(fā))時(shí),向其注冊(cè)的過程被隱式調(diào)用;調(diào)用的次序是不確定的;基于事件的隱式調(diào)用特點(diǎn)優(yōu)點(diǎn)為軟件復(fù)用提供了強(qiáng)大的支持,功能擴(kuò)展比較容易當(dāng)需要將一個(gè)組件加入現(xiàn)存系統(tǒng)中時(shí),只需將它注冊(cè)到系統(tǒng)的事件中數(shù)據(jù)通過接口訪問,數(shù)據(jù)格式的變化不會(huì)影響其他部分各模塊之間的調(diào)用隱式化,從而復(fù)用性提高為系統(tǒng)動(dòng)態(tài)演化帶來了方便組件獨(dú)立存在,當(dāng)用一個(gè)組件代替另一個(gè)組件時(shí),不會(huì)影響到其它組件的接口健壯性一個(gè)組件出錯(cuò)將不會(huì)影響其他組件支持實(shí)現(xiàn)交互式系統(tǒng)(用戶輸入/網(wǎng)絡(luò)通訊)異步執(zhí)行,不必同步等待執(zhí)行結(jié)果對(duì)事件的并發(fā)處理將提高系統(tǒng)性能;缺點(diǎn)分布式控制方式使系統(tǒng)的同步、驗(yàn)證和調(diào)試變得異常困難:組件放棄了對(duì)系統(tǒng)計(jì)算的控制,難以控制各模塊之間的處理次序。一個(gè)組件觸發(fā)一個(gè)事件時(shí),不能確定其它組件是否會(huì)響應(yīng)它。而且即使它知道事件注冊(cè)了哪些組件的構(gòu)成,它也不能保證這些過程被調(diào)用的順序。既然過程的語義必須依賴于被觸發(fā)事件的上下文約束,關(guān)于正確性的推理則難以保證。傳統(tǒng)的基于先驗(yàn)和后驗(yàn)條件的驗(yàn)證變得不可能。數(shù)據(jù)交換的問題:數(shù)據(jù)可通過事件直接在系統(tǒng)間傳遞(無調(diào)度模塊時(shí))。但在具有獨(dú)立調(diào)度模塊的事件系統(tǒng)中,數(shù)據(jù)則需要經(jīng)過調(diào)度模塊的傳遞(基于事件的系統(tǒng)必須依靠一個(gè)共享的倉庫進(jìn)行交互)。在這些情況下,全局性能和資源管理成為了系統(tǒng)的瓶頸。使用更多的存儲(chǔ)空間基于事件的隱式調(diào)用風(fēng)格應(yīng)用領(lǐng)域基于事件的隱式調(diào)用風(fēng)格常常被用于如下領(lǐng)域:(1)在程序設(shè)計(jì)環(huán)境中用于集成各種工具。(2)在數(shù)據(jù)庫管理系統(tǒng)中用于檢查數(shù)據(jù)庫的一致性約束條件。(3)在用戶界面中分離數(shù)據(jù)和表示。(4)在編輯器中支持語法檢查。例如在某系統(tǒng)中,編輯器和變量監(jiān)視器可以登記相應(yīng)Debugger的斷點(diǎn)事件。當(dāng)Debugger在斷點(diǎn)處停下時(shí),它聲明該事件,由系統(tǒng)自動(dòng)調(diào)用處理程序,如編輯程序可以顯示到斷點(diǎn),變量監(jiān)視器刷新變量數(shù)值。而Debugger本身只聲明事件,并不關(guān)心哪些過程會(huì)啟動(dòng),也不關(guān)心這些過程做什么處理。3.3.2JAVA的事件處理處理事件的一般步驟是注冊(cè)監(jiān)聽器以監(jiān)聽事件源產(chǎn)生的事件(如通過ActionListener來響應(yīng)用戶點(diǎn)擊按鈕);定義處理事件的方法(如在ActionListener中的actionPerformed中定義相應(yīng)方法)。importjava.awt.*;importjava.awt.event.*; //引入java.awt.event包處理事件classBtnLabelActionextendsFrameimplementsActionListener{//聲明窗口類(BtnLabelAction)并實(shí)現(xiàn)動(dòng)作事件接口(ActionListener)
Labelprompt;Buttonbtn;voidCreateWindow(){setTitle("MyButton");prompt=newLabel("你好");//創(chuàng)建標(biāo)簽對(duì)象
btn=newButton("操作"); //創(chuàng)建按鈕對(duì)象
setLayout(newFlowLayout());//布局設(shè)計(jì),用于安排按鈕、標(biāo)簽的位置
add(prompt); //將標(biāo)簽放入容器
add(btn); //將按鈕放入容器
btn.addActionListener(this); //將監(jiān)聽器(窗體對(duì)象本身)注冊(cè)給按鈕對(duì)象
setSize(300,100);setVisible(true);}
publicvoidactionPerformed(ActionEvente){//接口ActionListener的事件處理方法if(e.getSource()==btn)//判斷動(dòng)作事件是否是由按鈕btn引發(fā)的
if(prompt.getText()=="你好")prompt.setText("再見");elseprompt.setText("你好");}}publicclassex604{publicstaticvoidmain(Stringargs[]){BtnLabelActionbla=newBtnLabelAction();事件源
bla.CreateWindow();}}事件源注冊(cè):btn.addActionListener(監(jiān)聽器對(duì)象);監(jiān)聽器動(dòng)作事件處理方法:publicvoidactionPerformed(ActionEvente)動(dòng)作事件(ActionEvent)先注冊(cè)監(jiān)聽器觸發(fā)事件調(diào)用并傳遞參數(shù)e組件注冊(cè)方法addActionListener()處理事件的方法actionPerformed()發(fā)生的事件ActionEvente事件源btn監(jiān)聽器this(窗體對(duì)象本身,實(shí)現(xiàn)了Actionlistener接口的類的對(duì)象)。連接件(1)btn.addActionListener(this):將事件源按鈕對(duì)象注冊(cè)到監(jiān)聽器(this,窗體對(duì)象本身implementsActionlistener)。(2)系統(tǒng)定義對(duì)事件的處理方法,發(fā)生的事件為參數(shù):publicvoidactionPerformed(ActionEvente)。(3)點(diǎn)擊btn,觸發(fā)ActionEvent事件,事件管理器(實(shí)現(xiàn)了Actionlistener接口的類,本程序?yàn)榇绑w對(duì)象本身this)會(huì)根據(jù)發(fā)生的ActionEvent事件,自動(dòng)調(diào)用actionPerformed()方法,執(zhí)行方法體中的語句。3.4層次風(fēng)格3.4.1層次風(fēng)格概念層次系統(tǒng)在層次系統(tǒng)中,系統(tǒng)被組織成若干個(gè)層次,每個(gè)層次由一系列組件組成下層組件向上層組件提供服務(wù)上層組件被看作是下層組件的客戶核心層-功能層-應(yīng)用層層次軟件體系風(fēng)格基本組件:各層次內(nèi)部包含的組件連接件:層間的交互協(xié)議拓?fù)浣Y(jié)構(gòu):分層拓?fù)浼s束:對(duì)相鄰層間交互的約束集中式部署(Mainframe)分布式部署(Distributed)優(yōu)點(diǎn)支持基于抽象程度遞增的系統(tǒng)設(shè)計(jì),有利于設(shè)計(jì)者對(duì)一個(gè)復(fù)雜系統(tǒng)進(jìn)行分解;局部依賴性,因?yàn)槊恳粚又炼嗪拖噜彽纳舷聦咏换ィ虼斯δ艿母淖兺ǔS绊懴噜彽纳舷聦?;可?fù)用性,如果某獨(dú)立層保證了功能的完整性并且提供了文檔化的接口,便可在多個(gè)語境中復(fù)用??商鎿Q性,只要提供的服務(wù)接口定義不變,同一層的不同實(shí)現(xiàn)可以交換使用。這樣,就可以定義一組標(biāo)準(zhǔn)的接口,而允許各種不同的實(shí)現(xiàn)方法。對(duì)標(biāo)準(zhǔn)化的支持。清晰定義并且廣泛接受的抽象層次能夠促進(jìn)實(shí)現(xiàn)標(biāo)準(zhǔn)化的任務(wù)和接口開發(fā),同樣接口的不同實(shí)現(xiàn)能夠互換使用??蓽y(cè)試性。具有定義明確的層接口以及交換層接口的各個(gè)實(shí)現(xiàn)的能力提高了可測(cè)試性。缺點(diǎn)并不是每個(gè)系統(tǒng)都可以很容易地劃分為分層的模式,甚至即使一個(gè)系統(tǒng)的邏輯結(jié)構(gòu)是層次化的,出于對(duì)系統(tǒng)性能的考慮,系統(tǒng)設(shè)計(jì)師不得不把一些低級(jí)或高級(jí)的功能綜合起來;效率的降低:由分層風(fēng)格構(gòu)成的系統(tǒng),運(yùn)行效率往往低于整體結(jié)構(gòu)。在上層中的服務(wù)如果有很多依賴于最底層,則相關(guān)的數(shù)據(jù)必須通過一些中間層的若干次轉(zhuǎn)化,才能傳到;很難找到合適的、正確的層次抽象方法:層數(shù)太少,分層不能完全發(fā)揮這種風(fēng)格的可復(fù)用性、可更改性和可移植性上的潛力。層數(shù)過多,則引入不必要的復(fù)雜性和層間隔離冗余以及層間傳輸開銷。目前,沒有可行的廣為人們所認(rèn)可的層粒度的確定和層任務(wù)的分配方法。3.4.2實(shí)例ISO/OSI網(wǎng)絡(luò)的分層模型傳輸介質(zhì)接口通信控制項(xiàng)(通信子網(wǎng))應(yīng)用層物理傳輸介質(zhì)應(yīng)用層表示層表示層會(huì)話層會(huì)話層傳輸層傳輸層網(wǎng)絡(luò)層網(wǎng)絡(luò)層數(shù)據(jù)鏈路層數(shù)據(jù)鏈路層物理層物理層應(yīng)用控制項(xiàng)(資源子網(wǎng))軟件自動(dòng)測(cè)試系統(tǒng)該測(cè)試軟件被設(shè)計(jì)成三層第一層為圖形用戶界面(GUILayer),用于用戶選擇測(cè)試案例、用戶輸入以及顯示測(cè)試結(jié)果;第二層為測(cè)試案例層(TestcaseLayer),軟件測(cè)試工程師所編寫的測(cè)試案例都部署在該層;第三層為被測(cè)試軟件層(ProgramUnerTestLayer),包含所有被測(cè)試軟件。
在本設(shè)計(jì)中,用戶圖形界面層調(diào)用測(cè)試案例層,選擇執(zhí)行某個(gè)測(cè)試案例;測(cè)試案例層調(diào)用被測(cè)試軟件,調(diào)用某個(gè)或者幾個(gè)被測(cè)試程序。組件第一層里的TestingGUI類第二層里的Testcase接口、TestcaseBubble類、TestcaseHeap類、TestcaseInscrtion類、ResultVerification類第三層里的BubbleSort類、HeapSort類、InscrtSort類、SortAlgorithm接口。連接件(1)在第一層TestingGUI類中聲明了第二層TestcaseBubble類的對(duì)象、TestcaseHeap類的對(duì)象和TestcaseInsertion類的對(duì)象,并調(diào)用它們的execute()方法,第二層的各類的execute()方法將一個(gè)數(shù)組結(jié)果返回給第一層。(2)在第二層的TestcaseBubble類中聲明了第三層的BubbleSort類的對(duì)象,并調(diào)用該類中的sort方法;第三層的BubbleSort類的sort方法將對(duì)數(shù)組的排序結(jié)果返回給第二層。TestcaseHeap類和TestcaseInsertion類類似。3.5倉庫風(fēng)格
在倉庫風(fēng)格中,有兩種不同的組件:一個(gè)是中央數(shù)據(jù)結(jié)構(gòu),它說明當(dāng)前狀態(tài)。另一個(gè)是獨(dú)立組件的集合,它對(duì)中央數(shù)據(jù)結(jié)構(gòu)進(jìn)行操作。根據(jù)系統(tǒng)中數(shù)據(jù)和狀態(tài)的控制方法的不同,可以分為兩種類型。一種類型是傳統(tǒng)的數(shù)據(jù)庫體系結(jié)構(gòu),它是由輸入事務(wù)選擇進(jìn)行何種處理,并把執(zhí)行結(jié)果作為當(dāng)前狀態(tài)存儲(chǔ)到中央數(shù)據(jù)結(jié)構(gòu)中。另一種類型是黑板(blackboard)體系結(jié)構(gòu),它是由中央數(shù)據(jù)結(jié)構(gòu)的當(dāng)前狀態(tài)決定進(jìn)行何種處理。內(nèi)存計(jì)算知識(shí)源黑板(共享數(shù)據(jù))知識(shí)源知識(shí)源知識(shí)源直接存取黑板體系結(jié)構(gòu)是倉庫體系結(jié)構(gòu)的特殊化。它反映的是一種信息共享的系統(tǒng)——如同教室里的黑板一樣,有多個(gè)人讀也有多個(gè)人寫。內(nèi)存計(jì)算知識(shí)源黑板(共享數(shù)據(jù))知識(shí)源知識(shí)源知識(shí)源直接存取黑板系統(tǒng)通常由三部分組成:(1)知識(shí)源(knowledgesources,KSs)。軟件專家模塊,每個(gè)知識(shí)源提供應(yīng)用程序所需要的具體的專家知識(shí)。知識(shí)源之間不直接進(jìn)行通訊,只通過黑板來完成它們之間的交互。(2)黑板數(shù)據(jù)結(jié)構(gòu)(blackboard)。一個(gè)共享知識(shí)庫,包含了問題、部分解決方案、建議和已經(jīng)貢獻(xiàn)的信息。按照與應(yīng)用程序相關(guān)的層次來組織的解決問題的數(shù)據(jù)。黑板可以被認(rèn)為是一個(gè)動(dòng)態(tài)的“庫”,知識(shí)源通過不斷地改變黑板數(shù)據(jù)來解決問題。(3)控制機(jī)制(controlshell)。知識(shí)源需要控制機(jī)制來保證以一種最有效和連貫的方式來工作,正如人類專家得有一個(gè)主持人來防止他們亂搶粉筆??刂仆耆珊诎宓臓顟B(tài)驅(qū)動(dòng),黑板狀態(tài)的改變決定使用的特定知識(shí)。黑板系統(tǒng)的傳統(tǒng)應(yīng)用是信號(hào)處理領(lǐng)域,如語音和模式識(shí)別;另一應(yīng)用是松散耦合的組件訪問共享數(shù)據(jù)的應(yīng)用程序。3.6解釋器風(fēng)格
基于解釋器(Interpreters)風(fēng)格的系統(tǒng)的核心是虛擬機(jī),解釋器實(shí)際上創(chuàng)建了一個(gè)軟件虛擬出來的機(jī)器,所以這種風(fēng)格又稱為虛擬機(jī)風(fēng)格。一個(gè)基于解釋器風(fēng)格的系統(tǒng)通常包括正在被解釋執(zhí)行的偽碼和解釋引擎。偽碼由需要被解釋執(zhí)行的源代碼和解釋引擎分析所得的中間代碼組成;解釋引擎包括語法解釋器和解釋器當(dāng)前的運(yùn)行狀態(tài)。所以,解釋器風(fēng)格中有四個(gè)組件:一個(gè)狀態(tài)機(jī)和三個(gè)存儲(chǔ)器。一個(gè)狀態(tài)機(jī)是完成解釋工作的解釋引擎;第一個(gè)存儲(chǔ)器是偽碼的數(shù)據(jù)存儲(chǔ)區(qū)——正在被解釋的程序、第二個(gè)存儲(chǔ)器記錄源代碼被解釋執(zhí)行的進(jìn)度(被解釋的程序的狀態(tài)),第三個(gè)存儲(chǔ)器記錄解釋引擎當(dāng)前工作狀態(tài)。連接件包括過程調(diào)用和直接存儲(chǔ)器訪問。解釋器風(fēng)格的優(yōu)點(diǎn)是有助于應(yīng)用程序的可移植性和程序設(shè)計(jì)語言的跨平臺(tái)能力,并且可以對(duì)未實(shí)現(xiàn)的硬件進(jìn)行仿真(實(shí)際測(cè)試可能是復(fù)雜的、昂貴的或危險(xiǎn)的)。解釋器風(fēng)格的缺點(diǎn)是額外的間接層次帶來了系統(tǒng)性能的下降。例如,在不引入JIT(JustInTime)技術(shù)的情況下,Java應(yīng)用程序的速度相當(dāng)慢。解釋器風(fēng)格適用于不能直接運(yùn)行在最適合的機(jī)器上的應(yīng)用程序,或不能直接以最適合的語言執(zhí)行的應(yīng)用程序。解釋器風(fēng)格已經(jīng)應(yīng)用在模式匹配系統(tǒng)和語言編譯器等方面:程序設(shè)計(jì)語言的編譯器,比如Java、Ssmalltalk等;基于規(guī)則的系統(tǒng),比如專家系統(tǒng)領(lǐng)域的Prolog等;腳本語言,比如Awk、Perl等。3.7反饋控制環(huán)風(fēng)格
控制系統(tǒng)在運(yùn)行的過程中,通過自身不斷的測(cè)量被控對(duì)象的特性,認(rèn)識(shí)被控對(duì)象具有的性質(zhì)和特征,掌握這些性質(zhì)和特征隨環(huán)境等因素變化的情況。根據(jù)所掌握的被控對(duì)象當(dāng)前的特征信息,控制系統(tǒng)作出控制決策,使這個(gè)被控對(duì)象(或被控過程)的功能或特性有效地達(dá)到所期望的預(yù)期目標(biāo),實(shí)現(xiàn)對(duì)一個(gè)對(duì)象(或過程)的控制,從而使系統(tǒng)的性能按所規(guī)定的標(biāo)準(zhǔn)達(dá)到最優(yōu)或者接近最優(yōu)。控制系統(tǒng)可以分為開環(huán)控制系統(tǒng)和閉環(huán)控制系統(tǒng)。一個(gè)自動(dòng)控制系統(tǒng)主要包括被控對(duì)象、測(cè)量環(huán)節(jié)、調(diào)節(jié)器和執(zhí)行環(huán)節(jié)。閉環(huán)控制系統(tǒng)也叫反饋控制系統(tǒng),閉環(huán)控制系統(tǒng)比開環(huán)控制系統(tǒng)多了比較環(huán)節(jié)和檢測(cè)裝置。閉環(huán)(反饋)控制系統(tǒng)可以看作是基于反饋控制環(huán)風(fēng)格軟件體系結(jié)構(gòu)的系統(tǒng)。機(jī)器學(xué)習(xí)知識(shí)工程包括使用知識(shí)、知識(shí)表示、獲取知識(shí),機(jī)器學(xué)習(xí)就是計(jì)算機(jī)自動(dòng)獲取知識(shí)的過程,其模型如圖所示。環(huán)境組件和知識(shí)庫組件是以某種知識(shí)表示形式表達(dá)的信息的集合,分別代表外界信息來源和系統(tǒng)具有的知識(shí)。環(huán)境組件向系統(tǒng)的學(xué)習(xí)組件提供某些信息,而學(xué)習(xí)組件則處理環(huán)境組件提供的信息,利用這些信息對(duì)系統(tǒng)的知識(shí)庫組件進(jìn)行改進(jìn),改善知識(shí)庫組件中的顯式知識(shí),以增進(jìn)系統(tǒng)執(zhí)行組件完成任務(wù)的效能。執(zhí)行組件利用知識(shí)庫組件中的知識(shí)來完成某種任務(wù),同時(shí)把執(zhí)行中獲得的信息反饋給學(xué)習(xí)組件。通過這一反饋,學(xué)習(xí)組件的學(xué)習(xí)能力得到提高,知識(shí)得到增長。這里,執(zhí)行組件把執(zhí)行結(jié)果反饋給學(xué)習(xí)組件,學(xué)習(xí)組件的學(xué)習(xí)能力得到提高,就是反饋控制環(huán)風(fēng)格的具體應(yīng)用。思考題1.簡(jiǎn)述主程序-子程序風(fēng)格的組件、連接件、工作機(jī)制、特點(diǎn)、實(shí)例。編寫相關(guān)程序,并指出該程序中具體的組件和連接件。2.簡(jiǎn)述面向?qū)ο箫L(fēng)格的組件、連接件、工作機(jī)制、特點(diǎn)、實(shí)例。編寫相關(guān)程序,并指出該程序中具體的組件和連接件。3.簡(jiǎn)述批處理風(fēng)格的組件、連接件、工作機(jī)制、特點(diǎn)、實(shí)例。它與管道-過濾器風(fēng)格的區(qū)別是什么?編寫相關(guān)程序,并指出該程序中具體的組件和連接件。4.簡(jiǎn)述管道-過濾器風(fēng)格的組件、連接件、工作機(jī)制、特點(diǎn)、實(shí)例。它與批處理風(fēng)格的區(qū)別是什么?編寫相關(guān)程序,并指出該程序中具體的組件和連接件。5.簡(jiǎn)述基于事件的隱式調(diào)用風(fēng)格的組件、連接件、工作機(jī)制、特點(diǎn)、實(shí)例。編寫相關(guān)程序,并指出該程序中具體的組件和連接件。6.簡(jiǎn)述層次風(fēng)格的組件、連接件、工作機(jī)制、特點(diǎn)、實(shí)例。根據(jù)類圖,分析實(shí)際程序中具體的組件和連接件。7.倉庫風(fēng)格可以分為哪幾種類型?了解黑板風(fēng)格的組件、連接件、特點(diǎn)、實(shí)例。8.了解解釋器風(fēng)格的組件、連接件、特點(diǎn)、實(shí)例。9.機(jī)器學(xué)習(xí)系統(tǒng)的基本模型是什么?它是什么體系結(jié)構(gòu)風(fēng)格,為什么?第4章分布式軟件體系結(jié)構(gòu)風(fēng)格4.1概述1.集中式計(jì)算模式所有的計(jì)算能力均屬于中央宿主計(jì)算機(jī)。在集中式計(jì)算技術(shù)時(shí)代廣泛使用的是大型機(jī)/小型機(jī)計(jì)算模型用戶通過一臺(tái)物理上與宿主機(jī)相連接的非智能終端來訪問宿主機(jī)上的應(yīng)用程序客戶機(jī)可能為PC或工作站在多用戶環(huán)境中,宿主機(jī)應(yīng)用程序既負(fù)責(zé)與用戶的交互,又負(fù)責(zé)對(duì)數(shù)據(jù)的管理;宿主機(jī)上的應(yīng)用程序一般也分為與用戶交互的前端和管理數(shù)據(jù)的后端,即數(shù)據(jù)庫管理系統(tǒng)。集中式的系統(tǒng)使用戶能共享貴重的硬件設(shè)備,如磁盤機(jī)、打印機(jī)和調(diào)制解調(diào)器等。但隨著用戶的增多,對(duì)宿主機(jī)能力的要求很高,而且開發(fā)者必須為每個(gè)新的應(yīng)用重新設(shè)計(jì)同樣的數(shù)據(jù)管理組件。2.文件共享體系結(jié)構(gòu)文件共享體系結(jié)構(gòu):文件存儲(chǔ)在一個(gè)中央計(jì)算機(jī)或者共享服務(wù)器中,被網(wǎng)絡(luò)上的多個(gè)計(jì)算機(jī)同時(shí)訪問。文件共享體系結(jié)構(gòu)最初的PC網(wǎng)絡(luò)就是基于此類結(jié)構(gòu),從共享服務(wù)器下載文件到客戶機(jī)的桌面環(huán)境下被請(qǐng)求的用戶任務(wù)(包括業(yè)務(wù)邏輯和數(shù)據(jù)),在客戶機(jī)環(huán)境下執(zhí)行適合應(yīng)用于數(shù)據(jù)量較低的場(chǎng)合文件共享體系結(jié)構(gòu)缺陷:客戶端和服務(wù)器之間需要移動(dòng)大量不必要的數(shù)據(jù),降低了應(yīng)用性能;客戶端必須相當(dāng)健壯,它要完成幾乎所有的功能,同時(shí)必須有足夠的磁盤空間來存儲(chǔ)下載的文件和表;容易破壞數(shù)據(jù)完整性(多個(gè)用戶共同訪問同一個(gè)文件);對(duì)環(huán)境變化及用戶需求變更的適應(yīng)性差,一旦發(fā)生變化,客戶機(jī)與服務(wù)器的程序都要修改,增加了維護(hù)工作量。3.客戶機(jī)/服務(wù)器C/S軟件體系結(jié)構(gòu)是基于資源不對(duì)等,且為實(shí)現(xiàn)共享而提出來的,是20世紀(jì)90年代成熟起來的技術(shù)。C/S體系結(jié)構(gòu)定義了工作站如何與服務(wù)器相連,以實(shí)現(xiàn)數(shù)據(jù)和應(yīng)用分布到多個(gè)處理機(jī)上。C/S體系結(jié)構(gòu)有三個(gè)主要組成部分?jǐn)?shù)據(jù)庫服務(wù)器客戶應(yīng)用程序網(wǎng)絡(luò)客戶機(jī)/服務(wù)器文件共享結(jié)構(gòu)的缺陷導(dǎo)致了C/S架構(gòu)的出現(xiàn)數(shù)據(jù)庫服務(wù)器代替了文件服務(wù)器服務(wù)器使用DBMS,快速應(yīng)答用戶請(qǐng)求RPC或SQL是客戶機(jī)和服務(wù)器之間的典型通訊模式在一個(gè)C/S體系結(jié)構(gòu)的軟件系統(tǒng)中客戶應(yīng)用程序是針對(duì)一個(gè)小的、特定的數(shù)據(jù)集,如一個(gè)表的行來進(jìn)行操作,而不是像文件服務(wù)器那樣針對(duì)整個(gè)文件進(jìn)行;對(duì)某一條記錄進(jìn)行封鎖,而不是對(duì)整個(gè)文件進(jìn)行封鎖因此保證了系統(tǒng)的并發(fā)性,并使網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)量減到最少,從而改善了系統(tǒng)的性能??蛻魴C(jī)/服務(wù)器優(yōu)點(diǎn):C/S降低了網(wǎng)絡(luò)通訊量:提供請(qǐng)求/應(yīng)答模式,而非文件傳輸多用戶通過GUI訪問共享數(shù)據(jù)庫客戶機(jī)/服務(wù)器C/S結(jié)構(gòu)的發(fā)展歷程:兩層C/S三層C/S多層C/S4.B/SC/S模式是指客戶端/服務(wù)器模式:client/server。最明顯的就是大型的網(wǎng)游,必須下載客戶端,在本地運(yùn)行,人物屬性之類的數(shù)據(jù)要跟服務(wù)器交換數(shù)據(jù)。B/S模式是指瀏覽器/服務(wù)器模式:browser/server。如IE瀏覽器,你想訪問某個(gè)網(wǎng)站,網(wǎng)站實(shí)際就是網(wǎng)站所在ip的服務(wù)器的頁面和內(nèi)容,你通過瀏覽器訪問。瀏覽器可以解析html等網(wǎng)頁,顯示頁面效果給用戶。4.2兩層C/S體系結(jié)構(gòu)風(fēng)格
兩層C/S結(jié)構(gòu)(2-TierClient/Server)兩層C/S結(jié)構(gòu)
用戶界面處于客戶機(jī)數(shù)據(jù)庫管理服務(wù)處于服務(wù)器端,通常是存儲(chǔ)過程/觸發(fā)器的形式業(yè)務(wù)處理過程—即業(yè)務(wù)邏輯—被分解為客戶機(jī)與服務(wù)器兩部分兩層C/S體系結(jié)構(gòu)將應(yīng)用一分為二,服務(wù)器(后臺(tái))負(fù)責(zé)數(shù)據(jù)管理,客戶機(jī)(前臺(tái))完成與用戶的交互任務(wù)。服務(wù)器為多個(gè)客戶應(yīng)用程序管理數(shù)據(jù),而客戶程序發(fā)送、請(qǐng)求和分析從服務(wù)器接收的數(shù)據(jù),這是一種“胖客戶機(jī)”、“瘦服務(wù)器”的體系結(jié)構(gòu)。兩層C/S結(jié)構(gòu)(2-TierClient/Server)基本組件:數(shù)據(jù)庫服務(wù)器存放數(shù)據(jù)的數(shù)據(jù)庫、負(fù)責(zé)數(shù)據(jù)處理的業(yè)務(wù)邏輯;客戶機(jī)應(yīng)用程序:GUI:用戶界面業(yè)務(wù)邏輯:利用客戶機(jī)上的應(yīng)用程序?qū)?shù)據(jù)進(jìn)行處理;連接件:經(jīng)由網(wǎng)絡(luò)的調(diào)用-返回機(jī)制或隱式調(diào)用機(jī)制??蛻魴C(jī)服務(wù)器:客戶機(jī)向服務(wù)器發(fā)送請(qǐng)求;服務(wù)器進(jìn)行相關(guān)處理,將結(jié)果發(fā)給客戶端;客戶端接收返回結(jié)果。服務(wù)器負(fù)責(zé)有效地管理系統(tǒng)的資源,其任務(wù)集中于:數(shù)據(jù)庫安全性的要求。數(shù)據(jù)庫訪問并發(fā)性的控制。數(shù)據(jù)庫前端的客戶應(yīng)用程序的全局?jǐn)?shù)據(jù)完整性規(guī)則。數(shù)據(jù)庫的備份與恢復(fù)??蛻魬?yīng)用程序的主要任務(wù)是:提供用戶與數(shù)據(jù)庫交互的界面。向數(shù)據(jù)庫服務(wù)器提交用戶請(qǐng)求,并接收來自數(shù)據(jù)庫服務(wù)器的信息利用客戶應(yīng)用程序?qū)Υ嬖谟诳蛻舳说臄?shù)據(jù)執(zhí)行應(yīng)用邏輯要求網(wǎng)絡(luò)通信軟件的主要作用是完成數(shù)據(jù)庫服務(wù)器和客戶應(yīng)用程序之間的數(shù)據(jù)傳輸。兩層C/S結(jié)構(gòu)(2-TierClient/Server)C/S結(jié)構(gòu)的一般處理流程兩層C/S體系結(jié)構(gòu)優(yōu)點(diǎn)兩層C/S體系結(jié)構(gòu)具有強(qiáng)大的數(shù)據(jù)操作和事務(wù)處理能力,模型思想簡(jiǎn)單,易于人們理解和接受。系統(tǒng)的客戶應(yīng)用程序和服務(wù)器組件分別運(yùn)行在不同的計(jì)算機(jī)上,系統(tǒng)中每臺(tái)服務(wù)器都可以適合各組件的要求,這對(duì)于硬件和軟件的變化顯示出極大的適應(yīng)性和靈活性,而且易于對(duì)系統(tǒng)進(jìn)行擴(kuò)充和縮小。在兩層C/S體系結(jié)構(gòu)中,系統(tǒng)中的功能組件充分隔離,客戶應(yīng)用程序的開發(fā)集中于數(shù)據(jù)的顯示和分析,而數(shù)據(jù)庫服務(wù)器的開發(fā)則集中于數(shù)據(jù)的管理。將大的應(yīng)用處理任務(wù)分布到許多通過網(wǎng)絡(luò)連接的低成本計(jì)算機(jī)上,以節(jié)約大量費(fèi)用。兩層C/S體系結(jié)構(gòu)缺點(diǎn)兩層C/S體系結(jié)構(gòu)雖然
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 高考美術(shù)課題研究申報(bào)書
- 動(dòng)畫項(xiàng)目合同范例
- 臺(tái)灣房屋抵押合同范本
- led器材租賃合同范本
- 食品化學(xué)試題庫(含答案)
- 原木訂制采購合同范本
- 業(yè)務(wù)經(jīng)理工作計(jì)劃
- 上半年公司領(lǐng)導(dǎo)總結(jié)
- 單位外包電梯合同范本
- 四級(jí)(中級(jí))眼鏡驗(yàn)光員考試
- 【屋頂花園的防水設(shè)計(jì)與施工探究6500字(論文)】
- 自導(dǎo)式教學(xué)心得體會(huì)范文【3篇】
- 防范游戲充值詐騙保護(hù)個(gè)人游戲賬號(hào)安全
- 數(shù)學(xué)與體育融合課程設(shè)計(jì)
- 七年級(jí)英語閱讀理解專項(xiàng)訓(xùn)練(含答案)共20篇
- 初步設(shè)計(jì)法律規(guī)范
- 社區(qū)獲得性肺炎疾病查房
- 神奇的光:如何形成彩虹
- 三、膽石癥課件
- 兔子坡(閱讀課上課課件)
- 固定資產(chǎn)清查盤點(diǎn)明細(xì)表
評(píng)論
0/150
提交評(píng)論