第1章_模式設(shè)計(jì)_第1頁(yè)
第1章_模式設(shè)計(jì)_第2頁(yè)
第1章_模式設(shè)計(jì)_第3頁(yè)
第1章_模式設(shè)計(jì)_第4頁(yè)
第1章_模式設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩76頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Copyright 2008 TietoEnator Corporation模式設(shè)計(jì)(JAVA)商學(xué)院商學(xué)院 信管專業(yè)教研室信管專業(yè)教研室韓韓 娜娜電話電話: 661905辦公室辦公室: HG406課程名:模式設(shè)計(jì)(JAVA)選用教材:程杰.大話設(shè)計(jì)模式 . 清華大學(xué)出版社,2007 學(xué)時(shí)與學(xué)分:共計(jì)32學(xué)時(shí); 2學(xué)分考核模式:二段式模式 成績(jī)?cè)u(píng)定方法:期末總評(píng)成績(jī)=期末總評(píng)成績(jī)平時(shí)成績(jī)40期末成績(jī)60 補(bǔ)考方法:總評(píng)成績(jī)低于60分的學(xué)生,須參加學(xué)校統(tǒng)一組織的補(bǔ)考授課對(duì)象:12信管13 班課程介紹計(jì)算機(jī)學(xué)院 趙卓君3本課程目標(biāo)掌握面向?qū)ο蟮恼莆彰嫦驅(qū)ο蟮闹匾瓌t重要原則:開(kāi)閉原則、里氏代換原則

2、、依開(kāi)閉原則、里氏代換原則、依賴倒轉(zhuǎn)原則、接口隔離原則、合成賴倒轉(zhuǎn)原則、接口隔離原則、合成/ /聚合復(fù)用原則、最小知聚合復(fù)用原則、最小知識(shí)原則(也叫迪米特法則)。識(shí)原則(也叫迪米特法則)。掌握掌握GOF GOF 的的2323種設(shè)計(jì)模式種設(shè)計(jì)模式:?jiǎn)卫J?、抽象工廠模式、建:?jiǎn)卫J健⒊橄蠊S模式、建造者模式、工廠模式、原型模式、適配器模式、橋接模式、造者模式、工廠模式、原型模式、適配器模式、橋接模式、裝飾模式、組合模式、外觀模式、享元模式、代理模式、裝飾模式、組合模式、外觀模式、享元模式、代理模式、模版方法模式、命令模式、迭代器模式、觀察者模式、中模版方法模式、命令模式、迭代器模式、觀察者模式

3、、中介者模式、備忘錄模式、解釋器模式、狀態(tài)模式、策略模介者模式、備忘錄模式、解釋器模式、狀態(tài)模式、策略模式、職責(zé)鏈模式、訪問(wèn)者模式。式、職責(zé)鏈模式、訪問(wèn)者模式。對(duì)學(xué)生的要求: :不遲到、不早退、嚴(yán)格的請(qǐng)消假制度;懂禮貌、保證教室的清潔(擦黑板、早餐在教室外食用、嚴(yán)禁教室吃零食);遵守課堂紀(jì)律。上課前將手機(jī)調(diào)為靜音、嚴(yán)禁課堂上接電話、交談;未經(jīng)允許,上機(jī)嚴(yán)禁上網(wǎng)。如發(fā)現(xiàn)一次警告,第二次按照曠課處理;布置的作業(yè)按照規(guī)定的時(shí)間節(jié)點(diǎn)交到班級(jí)負(fù)責(zé)人處,過(guò)時(shí)不候,按未交處理電子版作業(yè)格式:班級(jí)+學(xué)號(hào)+姓名紙質(zhì)版作業(yè)格式:統(tǒng)一使用實(shí)驗(yàn)紙,班級(jí)+學(xué)號(hào)+姓名預(yù)備知識(shí)與參考書預(yù)備知識(shí)預(yù)備知識(shí) 面向?qū)ο蟮恼n程設(shè)計(jì)(

4、面向?qū)ο蟮恼n程設(shè)計(jì)(JAVAJAVA)、)、JAVA EEJAVA EE參考書參考書 代碼整潔之道 Head First 設(shè)計(jì)模式最好的參考資料是最好的參考資料是網(wǎng)絡(luò)資料網(wǎng)絡(luò)資料!寄 語(yǔ)(共 勉)學(xué)如春草不見(jiàn)其長(zhǎng)日有所增Copyright 2008 TietoEnator Corporation第一講第一講模式設(shè)計(jì)概述模式設(shè)計(jì)概述8本講目標(biāo)1. 1. 什么是設(shè)計(jì)模式什么是設(shè)計(jì)模式 2. 2. GOF95GOF95定義的定義的2323種模式種模式3.3.模式中所謂的關(guān)系模式中所謂的關(guān)系4. OO4. OO的編程思想與的編程思想與UMLUML簡(jiǎn)介簡(jiǎn)介(難點(diǎn))(難點(diǎn))5.OO5.OO設(shè)計(jì)中的通常原則

5、設(shè)計(jì)中的通常原則(重點(diǎn))(重點(diǎn))1.1 1.1 什么是設(shè)計(jì)模式什么是設(shè)計(jì)模式 2022-4-89 每一個(gè)設(shè)計(jì)模式描述一個(gè)在我們周圍每一個(gè)設(shè)計(jì)模式描述一個(gè)在我們周圍不斷重復(fù)發(fā)生的問(wèn)題,以及該問(wèn)題的解不斷重復(fù)發(fā)生的問(wèn)題,以及該問(wèn)題的解決方案的核心。這樣,你就能一次一次決方案的核心。這樣,你就能一次一次地使用該方案而不必做重復(fù)勞動(dòng)。地使用該方案而不必做重復(fù)勞動(dòng)。為什么學(xué)習(xí)設(shè)計(jì)模式?p學(xué)習(xí)設(shè)計(jì)模式不僅可以使我們學(xué)習(xí)設(shè)計(jì)模式不僅可以使我們使用好這些成功的使用好這些成功的模式模式,利用已有的設(shè)計(jì)經(jīng)驗(yàn),利用已有的設(shè)計(jì)經(jīng)驗(yàn)p更重要的是可以使我們更重要的是可以使我們更加深刻地理解面向?qū)ο蟾由羁痰乩斫饷嫦驅(qū)ο蟮?/p>

6、設(shè)計(jì)思想的設(shè)計(jì)思想,非常有利于我們更好地使用面向?qū)?,非常有利于我們更好地使用面向?qū)ο笳Z(yǔ)言解決設(shè)計(jì)中的問(wèn)題。象語(yǔ)言解決設(shè)計(jì)中的問(wèn)題。 1.2 1.2 設(shè)計(jì)模式的起源設(shè)計(jì)模式的起源 2022-4-811 軟件領(lǐng)域的設(shè)計(jì)模式軟件領(lǐng)域的設(shè)計(jì)模式起源于建筑學(xué)起源于建筑學(xué)。 19771977年,建筑大師年,建筑大師AlexanderAlexander出版了出版了A Pattern A Pattern LanguageLanguage:Towns, Building, ConstructionTowns, Building, Construction一一書。受書。受AlexanderAlexander著作的

7、影響著作的影響 ,Kent BeckKent Beck和和Ward Ward CunninghamCunningham在在19871987年舉行的一次面向?qū)ο蟮臅?huì)議上年舉行的一次面向?qū)ο蟮臅?huì)議上發(fā)表了論文:發(fā)表了論文:在面向?qū)ο缶幊讨惺褂媚J皆诿嫦驅(qū)ο缶幊讨惺褂媚J健?設(shè)計(jì)模式之四人幫(GOF)p GOF:Gang of FourErich Gamma、Richard Helm、Ralph Johnson、John Vlissides)1.3 GOF1.3 GOF之著作之著作 2022-4-813 目前,被公認(rèn)在設(shè)計(jì)模式領(lǐng)域最具影響力的著作是目前,被公認(rèn)在設(shè)計(jì)模式領(lǐng)域最具影響力的著作是Eric

8、h Gamma、Richard Helm、Ralph Johnson和和John Vlissides在在19941994年合作出版的著作:年合作出版的著作:Design PatternsDesign Patterns:Elements Elements of Reusable Object-Oriented Softwareof Reusable Object-Oriented Software(中譯本(中譯本設(shè)設(shè)計(jì)模式:可復(fù)用的面向?qū)ο筌浖幕驹碛?jì)模式:可復(fù)用的面向?qū)ο筌浖幕驹?或或設(shè)計(jì)模設(shè)計(jì)模式式),該書被廣大喜愛(ài)者昵稱為),該書被廣大喜愛(ài)者昵稱為GOFGOF(Gang of F

9、ourGang of Four)之)之書,被認(rèn)為是學(xué)習(xí)設(shè)計(jì)模式的必讀著作,書,被認(rèn)為是學(xué)習(xí)設(shè)計(jì)模式的必讀著作,GOFGOF之書已經(jīng)被公之書已經(jīng)被公認(rèn)為是設(shè)計(jì)模式領(lǐng)域的奠基之作。認(rèn)為是設(shè)計(jì)模式領(lǐng)域的奠基之作。1.4 學(xué)習(xí)設(shè)計(jì)模式的重要性 2022-4-814 學(xué)習(xí)設(shè)計(jì)模式不僅可以使我們使用好這些學(xué)習(xí)設(shè)計(jì)模式不僅可以使我們使用好這些成功的模式,更重要的是可以使我們更加深成功的模式,更重要的是可以使我們更加深刻地理解面向?qū)ο蟮脑O(shè)計(jì)思想,非常有利于刻地理解面向?qū)ο蟮脑O(shè)計(jì)思想,非常有利于我們更好地使用面向?qū)ο笳Z(yǔ)言解決設(shè)計(jì)中的我們更好地使用面向?qū)ο笳Z(yǔ)言解決設(shè)計(jì)中的問(wèn)題。問(wèn)題。 1.5 合理使用模式 202

10、2-4-815 1 1正確使用正確使用 2避免教條避免教條 3模式挖掘模式挖掘2.1 2.1 GOF95GOF95定義的定義的2323種模式種模式幾乎所有的模式的書都以幾乎所有的模式的書都以GOF95定義的定義的23種模式種模式為本源為本源模式可以定義為下面的幾個(gè)大類模式可以定義為下面的幾個(gè)大類Creational 模式Structural 模式Behavioral 模式 2.2 Creational 2.2 Creational 模式模式目標(biāo):有效率的產(chǎn)生、管理與操作對(duì)象,目標(biāo):有效率的產(chǎn)生、管理與操作對(duì)象,Creational Creational 模式即與對(duì)象的建立相關(guān)模式即與對(duì)象的建立

11、相關(guān)Simple Factory Simple Factory 模式模式 Abstract Factory Abstract Factory 模式模式 Builder Builder 模式模式 Factory Method Factory Method 模式模式 Prototype Prototype 模式模式 Singleton Singleton 模式模式 Registry of Singleton Registry of Singleton 模式模式 2.3 Structural 2.3 Structural 模式模式目標(biāo):設(shè)計(jì)對(duì)象之間的靜態(tài)結(jié)構(gòu),完成對(duì)象之間的繼承、實(shí)目標(biāo):設(shè)計(jì)對(duì)象之間

12、的靜態(tài)結(jié)構(gòu),完成對(duì)象之間的繼承、實(shí)現(xiàn)與依賴關(guān)系現(xiàn)與依賴關(guān)系Default Adapter Default Adapter 模式模式 Adapter Adapter 模式模式 Bridge Bridge 模式模式 Composite Composite 模式模式 Decorator Decorator 模式模式 Facade Facade 模式模式 Flyweight Flyweight 模式模式 Proxy Proxy 模式模式2.5 Behavioral 2.5 Behavioral 模式模式目標(biāo):目標(biāo): 對(duì)象之間設(shè)計(jì)良好的行為互動(dòng),使得程序執(zhí)行時(shí)更有效率,對(duì)象之間設(shè)計(jì)良好的行為互動(dòng),使得程

13、序執(zhí)行時(shí)更有效率,對(duì)象的職責(zé)更為清晰、整個(gè)程序的動(dòng)態(tài)結(jié)構(gòu)(像是對(duì)象調(diào)度)對(duì)象的職責(zé)更為清晰、整個(gè)程序的動(dòng)態(tài)結(jié)構(gòu)(像是對(duì)象調(diào)度)更有彈性。更有彈性。Chain of Responsibility Chain of Responsibility 模式模式 Command Command 模式模式 Interpreter Interpreter 模式模式 Iterator Iterator 模式模式 Mediator Mediator 模式模式 Memento Memento 模式模式 Observer 模式模式 State 模式模式 Strategy 模式模式 Template Method 模式

14、模式 Visitor 模式模式3.1 3.1 模式中所謂的關(guān)系模式中所謂的關(guān)系實(shí)際是實(shí)際是UMLUML中的關(guān)系中的關(guān)系模式的應(yīng)用要求正確設(shè)計(jì)對(duì)象之間的關(guān)系模式的應(yīng)用要求正確設(shè)計(jì)對(duì)象之間的關(guān)系模式中的關(guān)系是一種靜態(tài)的關(guān)系模式中的關(guān)系是一種靜態(tài)的關(guān)系3.1 3.1 一般化關(guān)系一般化關(guān)系一般化(一般化(GeneralizationGeneralization)表達(dá)繼承關(guān)系:表達(dá)繼承關(guān)系:extends,implementsextends,implements方向從子類指向父類方向從子類指向父類3.2 3.2 關(guān)聯(lián)關(guān)系關(guān)聯(lián)關(guān)系一個(gè)類知道另一個(gè)類的屬性和方法一個(gè)類知道另一個(gè)類的屬性和方法JavaJava

15、中是用實(shí)例變量來(lái)實(shí)現(xiàn)的中是用實(shí)例變量來(lái)實(shí)現(xiàn)的關(guān)聯(lián)可以單向也可以雙向但是一般不贊成使用雙關(guān)聯(lián)可以單向也可以雙向但是一般不贊成使用雙向關(guān)聯(lián)向關(guān)聯(lián)3.3 3.3 聚合關(guān)系聚合關(guān)系強(qiáng)的關(guān)聯(lián)關(guān)系,可以理解為一個(gè)類不能缺少的屬?gòu)?qiáng)的關(guān)聯(lián)關(guān)系,可以理解為一個(gè)類不能缺少的屬性,在性,在JavaJava語(yǔ)法中是不能和關(guān)聯(lián)關(guān)系分辨開(kāi)的語(yǔ)法中是不能和關(guān)聯(lián)關(guān)系分辨開(kāi)的可以理解為整體和個(gè)體之間的關(guān)系可以理解為整體和個(gè)體之間的關(guān)系聚合關(guān)系也是通過(guò)實(shí)例變量來(lái)實(shí)現(xiàn)的聚合關(guān)系也是通過(guò)實(shí)例變量來(lái)實(shí)現(xiàn)的3.4 3.4 合成關(guān)系合成關(guān)系比聚合關(guān)系還強(qiáng)的關(guān)聯(lián)關(guān)系。一個(gè)屬性只有在類比聚合關(guān)系還強(qiáng)的關(guān)聯(lián)關(guān)系。一個(gè)屬性只有在類存在的時(shí)候才存在

16、,不能在存在的時(shí)候才存在,不能在JavaJava語(yǔ)法中和上兩種語(yǔ)法中和上兩種關(guān)系分開(kāi)。關(guān)系分開(kāi)。合成關(guān)系不能共享合成關(guān)系不能共享3.5 3.5 依賴關(guān)系依賴關(guān)系類與類之間的連接,總是單向的關(guān)系。類與類之間的連接,總是單向的關(guān)系。在在JavaJava語(yǔ)法中表示為局部變量、方法的參數(shù)語(yǔ)法中表示為局部變量、方法的參數(shù)A A類調(diào)用類調(diào)用B B類,那么類,那么A A依賴依賴B B4.1 OOOO的編程思想的編程思想談?wù)劰ぞ咚枷胧菓?zhàn)略高度的東西工具是戰(zhàn)術(shù)高度的東西工具的學(xué)習(xí):敢用勤用項(xiàng)目背景老張開(kāi)車去東北撞了肇事司機(jī)耍流氓跑了多虧一個(gè)東北人送到醫(yī)院縫五針好了老張請(qǐng)他吃頓飯喝得少了他不干他說(shuō).俺們那嘎都是東

17、北人.俺們那嘎盛產(chǎn)高麗參.俺們那嘎豬肉燉粉條.俺們都是活雷鋒.俺們那嘎沒(méi)有這種人.撞了車哪能不救人. 俺們哪嘎山上有珍蘑.那個(gè)人他不是東北人 .翠花上酸菜面向過(guò)程的思維OO思維(Object Oriented)考慮類名詞屬性不可脫離具體的應(yīng)用環(huán)境方法類之間的關(guān)系隱藏(封裝)降低耦合度繼承多態(tài)多態(tài)核心中的核心可擴(kuò)展性(Extensibility)注意:設(shè)計(jì)沒(méi)有絕對(duì)的對(duì)與錯(cuò)Over Design也是一種罪過(guò)沒(méi)有任何實(shí)際中的設(shè)計(jì)會(huì)一步到位初學(xué)者不要考慮太多的原則和條條框框,最重要是動(dòng)手寫抽象類與接口享受OO的樂(lè)趣吧總結(jié)O O思想慢慢來(lái)封裝繼承和多態(tài)設(shè)計(jì)層層無(wú)止境適可而止樂(lè)開(kāi)懷作業(yè)封裝剩下的歌詞放輕松

18、,任意發(fā)揮農(nóng)場(chǎng)一頭小母牛,每年生頭小母牛,母牛五歲產(chǎn)母牛,二十年上多少牛?UMLUML簡(jiǎn)介簡(jiǎn)介 UML (Unified Modeling Language)為面向?qū)ο筌浖O(shè)計(jì)提供統(tǒng)一的、標(biāo)準(zhǔn)的、可視化的建模語(yǔ)言。適用于描述以用例為驅(qū)動(dòng),以體系結(jié)構(gòu)為中心的軟件設(shè)計(jì)的全過(guò)程。 UML的定義包括UML語(yǔ)義和UML表示法兩個(gè)部分。 (1) UML(1) UML語(yǔ)義語(yǔ)義:UML對(duì)語(yǔ)義的描述使開(kāi)發(fā)者能在語(yǔ)義上取得一致認(rèn)識(shí),消除了因人而異的表達(dá)方法所造成的影響。 (2) UML(2) UML表示法表示法:UML表示法定義UML符號(hào)的表示法,為開(kāi)發(fā)者或開(kāi)發(fā)工具使用這些圖形符號(hào)和文本語(yǔ)法為系統(tǒng)建模提供了標(biāo)準(zhǔn)。

19、4.2 UML簡(jiǎn)介4.2.1 UML模型圖的構(gòu)成事物事物( (Things)Things):UML模型中最基本的構(gòu)成元素,是具有代表性的成分的抽象關(guān)系關(guān)系( (Relationships)Relationships):關(guān)系把事物緊密聯(lián)系在一起圖圖( (Diagrams )Diagrams ):圖是事物和關(guān)系的可視化表示4.2UML概述 4.2.2 UMLUML關(guān)系關(guān)系依賴 依賴(dependency)是兩個(gè)事物之間的語(yǔ)義關(guān)系,其中一個(gè)事物(獨(dú)立事物)發(fā)生變化,會(huì)影響到另一個(gè)事物(依賴事物)的語(yǔ)義關(guān)聯(lián)關(guān)聯(lián) 關(guān)聯(lián)(association)是一種結(jié)構(gòu)關(guān)系,它指明一個(gè)事物的對(duì)象與另一個(gè)事物的對(duì)象間的聯(lián)

20、系泛化泛化 泛化(generalization)是一種特殊/一般的關(guān)系。也可以看作是常說(shuō)的繼承關(guān)系實(shí)現(xiàn)實(shí)現(xiàn) 實(shí)現(xiàn)(realization)是類元之間的語(yǔ)義關(guān)系,其中的一個(gè)類元指定了由另一個(gè)類元保證執(zhí)行的契約4.2.3 各UML圖及特征1. 1. 用例圖用例圖( ( Use Case Diagram )Use Case Diagram )用例圖是用例圖是從用戶角度描述系從用戶角度描述系統(tǒng)功能,統(tǒng)功能, 是用戶所能觀察到是用戶所能觀察到的系統(tǒng)功能的模型圖,用例的系統(tǒng)功能的模型圖,用例是系統(tǒng)中的一個(gè)功能單元是系統(tǒng)中的一個(gè)功能單元類圖描述系統(tǒng)中類的靜態(tài)結(jié)構(gòu)。不僅定義系統(tǒng)中的類,表示類圖描述系統(tǒng)中類的靜

21、態(tài)結(jié)構(gòu)。不僅定義系統(tǒng)中的類,表示類之間的聯(lián)系如關(guān)聯(lián)、依賴、聚合等,也包括類的內(nèi)部結(jié)構(gòu)類之間的聯(lián)系如關(guān)聯(lián)、依賴、聚合等,也包括類的內(nèi)部結(jié)構(gòu)( (類的屬性和操作類的屬性和操作) )類圖是以類為中心來(lái)組織的,類圖中的其他元素或?qū)儆谀硞€(gè)類圖是以類為中心來(lái)組織的,類圖中的其他元素或?qū)儆谀硞€(gè)類或與類相關(guān)聯(lián)類或與類相關(guān)聯(lián) 2.2.類圖類圖(Class Diagram)(Class Diagram)3. 3. 對(duì)象圖對(duì)象圖( ( Object Object DiagramDiagram ) )對(duì)象圖是類圖的實(shí)例對(duì)象圖是類圖的實(shí)例,幾乎使用與類圖完全相同的標(biāo)識(shí)。幾乎使用與類圖完全相同的標(biāo)識(shí)。他們的不同點(diǎn)在于對(duì)象

22、圖顯示類的多個(gè)對(duì)象實(shí)例他們的不同點(diǎn)在于對(duì)象圖顯示類的多個(gè)對(duì)象實(shí)例,而不是而不是實(shí)際的類實(shí)際的類4. 4. 順序圖順序圖(Sequence Diagram)(Sequence Diagram)順序圖顯示對(duì)象之間的動(dòng)態(tài)順序圖顯示對(duì)象之間的動(dòng)態(tài)合作關(guān)系,它強(qiáng)調(diào)對(duì)象之間合作關(guān)系,它強(qiáng)調(diào)對(duì)象之間消息發(fā)送的順序,同時(shí)顯示消息發(fā)送的順序,同時(shí)顯示對(duì)象之間的交互對(duì)象之間的交互 順序圖的一個(gè)用途是用來(lái)表順序圖的一個(gè)用途是用來(lái)表示用例中的行為順序。當(dāng)執(zhí)示用例中的行為順序。當(dāng)執(zhí)行一個(gè)用例行為時(shí),順序圖行一個(gè)用例行為時(shí),順序圖中的每條消息對(duì)應(yīng)了一個(gè)類中的每條消息對(duì)應(yīng)了一個(gè)類操作或引起狀態(tài)轉(zhuǎn)換的觸發(fā)操作或引起狀態(tài)轉(zhuǎn)換的

23、觸發(fā)事件事件 5. 5. 協(xié)作圖協(xié)作圖(Collaboration Diagram)(Collaboration Diagram)協(xié)作圖描述對(duì)象間的協(xié)作關(guān)系,協(xié)作圖跟順序圖協(xié)作圖描述對(duì)象間的協(xié)作關(guān)系,協(xié)作圖跟順序圖 相似,相似,顯示對(duì)象間的動(dòng)態(tài)合作關(guān)系。除顯示信息交換外,協(xié)作顯示對(duì)象間的動(dòng)態(tài)合作關(guān)系。除顯示信息交換外,協(xié)作圖還顯示對(duì)象以及它們之間的關(guān)系圖還顯示對(duì)象以及它們之間的關(guān)系. .協(xié)作圖的一個(gè)用途是表示一個(gè)類操作的實(shí)現(xiàn)協(xié)作圖的一個(gè)用途是表示一個(gè)類操作的實(shí)現(xiàn) 6. 狀態(tài)圖狀態(tài)圖(State Chart Diagram)狀態(tài)圖是一個(gè)類對(duì)象所可能經(jīng)歷的所有歷程的模型圖。狀態(tài)圖是一個(gè)類對(duì)象所可能

24、經(jīng)歷的所有歷程的模型圖。狀態(tài)圖由對(duì)象的各個(gè)狀態(tài)和連接這些狀態(tài)的轉(zhuǎn)換組成狀態(tài)圖由對(duì)象的各個(gè)狀態(tài)和連接這些狀態(tài)的轉(zhuǎn)換組成 Available Locked Sold 初始狀態(tài) assigned to lock time out unlock buy 狀態(tài) exchange 轉(zhuǎn)換 觸發(fā)器事件 7. 7. 活動(dòng)圖活動(dòng)圖(Activity Diagram)(Activity Diagram)活動(dòng)圖是狀態(tài)圖的一個(gè)變體,活動(dòng)圖是狀態(tài)圖的一個(gè)變體,用來(lái)描述執(zhí)行算法的工作流程用來(lái)描述執(zhí)行算法的工作流程中涉及的活動(dòng)中涉及的活動(dòng)活動(dòng)圖描述了一組順序的或并活動(dòng)圖描述了一組順序的或并發(fā)的活動(dòng)發(fā)的活動(dòng) 8. 構(gòu)構(gòu)件圖件圖

25、(Component Diagram)構(gòu)件圖為系統(tǒng)的構(gòu)件建模型構(gòu)件圖為系統(tǒng)的構(gòu)件建模型構(gòu)件即構(gòu)造應(yīng)用的軟件單構(gòu)件即構(gòu)造應(yīng)用的軟件單元元還包括各構(gòu)件之間的依賴關(guān)系,以便通過(guò)這些依賴還包括各構(gòu)件之間的依賴關(guān)系,以便通過(guò)這些依賴關(guān)系來(lái)估計(jì)對(duì)系統(tǒng)構(gòu)件的修改給系統(tǒng)可能帶來(lái)的影響關(guān)系來(lái)估計(jì)對(duì)系統(tǒng)構(gòu)件的修改給系統(tǒng)可能帶來(lái)的影響 9. 9. 部署部署圖圖(Deployment Diagram)(Deployment Diagram)部署視圖描述位于節(jié)點(diǎn)實(shí)例上的運(yùn)行構(gòu)件實(shí)例的安部署視圖描述位于節(jié)點(diǎn)實(shí)例上的運(yùn)行構(gòu)件實(shí)例的安排。節(jié)點(diǎn)是一組運(yùn)行資源,如計(jì)算機(jī)、設(shè)備或存儲(chǔ)器。排。節(jié)點(diǎn)是一組運(yùn)行資源,如計(jì)算機(jī)、設(shè)備或存儲(chǔ)

26、器。這個(gè)視圖允許評(píng)估分配結(jié)果和資源分配這個(gè)視圖允許評(píng)估分配結(jié)果和資源分配類圖順序圖需求分析需求分析BDFD/DD類圖順序圖用例圖用例文檔用例圖順序圖主要圖之間的關(guān)系主要圖之間的關(guān)系4.2.4 各UML圖的關(guān)系4.4.3習(xí)題 判斷題判斷題1、UML中一共有九種圖:它們是用例圖、類圖、對(duì)象圖、順序圖、協(xié)作圖、狀態(tài)圖、活動(dòng)圖、構(gòu)件圖、部署圖2、用例圖是從程序員角度來(lái)描述系統(tǒng)的功能3、類圖是描述系統(tǒng)中類的靜態(tài)結(jié)構(gòu),對(duì)象圖是描述系統(tǒng)中類的動(dòng)態(tài)結(jié)構(gòu)4、活動(dòng)圖和狀態(tài)圖用來(lái)描述系統(tǒng)的動(dòng)態(tài)行為5、協(xié)作圖的一個(gè)用途是表示一個(gè)類操作的實(shí)現(xiàn) 選擇題選擇題6、請(qǐng)?jiān)谙旅孢x項(xiàng)目中選出兩種可以互相轉(zhuǎn)換的圖 (a) 順序圖 (

27、b)協(xié)作圖 (c) 活動(dòng)圖 (d) 狀態(tài)圖7、下面哪些圖可用于BD階段 (a)用例圖 (b)構(gòu)件圖 (c)類圖 (d)順序圖 1. 用例圖用例圖概要概要 4.4.4 用例圖用例圖用例圖是被稱為參與者的外部用戶所能觀察到的系統(tǒng)功能的用例圖是被稱為參與者的外部用戶所能觀察到的系統(tǒng)功能的模型圖。模型圖。 ( (UMLUML參考手冊(cè)參考手冊(cè)) )用例圖列出系統(tǒng)中的用例和系統(tǒng)外的參與者,并顯示哪個(gè)參用例圖列出系統(tǒng)中的用例和系統(tǒng)外的參與者,并顯示哪個(gè)參與者參與了哪個(gè)用例的執(zhí)行與者參與了哪個(gè)用例的執(zhí)行 ( (或稱為發(fā)起了哪個(gè)用例或稱為發(fā)起了哪個(gè)用例) )。用例圖多用于靜態(tài)建模階段用例圖多用于靜態(tài)建模階段(

28、(主要是業(yè)務(wù)建模和需求建模主要是業(yè)務(wù)建模和需求建模) )。事物事物名稱名稱解釋解釋UML表示表示參與者(Actor)在系統(tǒng)外部與系統(tǒng)直接交互的人或事物(如另一個(gè)計(jì)算機(jī)系統(tǒng)或一些可運(yùn)行的進(jìn)程)。我們需要注意的是:1.參與者是角色(role)而不是具體的人,它代表了參與者在與系統(tǒng)打交道的過(guò)程中所扮演的角色。所以在系統(tǒng)的實(shí)際運(yùn)作中,一個(gè)實(shí)際用戶可能對(duì)應(yīng)系統(tǒng)的多個(gè)參與者。不同的用戶也可以只對(duì)應(yīng)于一個(gè)參與者,從而代表同一參與者的不同實(shí)例。2.參與者作為外部用戶(而不是內(nèi)部)與系統(tǒng)發(fā)生交互作用,是它的主要特征。3.在后面的順序圖等中出現(xiàn)的“參與者”,與此概念相同,但具體指代的含義,視具體情況而定。用例(U

29、se Case)系統(tǒng)外部可見(jiàn)的一個(gè)系統(tǒng)功能單元。系統(tǒng)的功能由系統(tǒng)單元所提供,并通過(guò)一系列系統(tǒng)單元與一個(gè)或多個(gè)參與者之間交換的消息所表達(dá) 。創(chuàng)建新用例,確認(rèn)候選用例和劃分用例范圍的優(yōu)秀法則-“WAVE”測(cè)試(見(jiàn)附錄) 2. 用例圖中的事物及解釋用例圖中的事物及解釋關(guān)系解釋圖參與者與用例之間的關(guān)系關(guān)聯(lián)表示參與者與用例之間的交互,通信途徑。(關(guān)聯(lián)有時(shí)候也用帶箭頭的實(shí)線來(lái)表示,這樣的表示能夠顯示地表明發(fā)起用例的是參與者。)用例之間的關(guān)系包含箭頭指向的用例為被包含的用例,稱為包含用例;箭頭出發(fā)的用例為基用例。包含用例是必選的,如果缺少包含用例,基用例就不完整;包含用例必須被執(zhí)行,不需要滿足某種條件;其執(zhí)

30、行并不會(huì)改變基用例的行為。 include擴(kuò)展箭頭指向的用例為被擴(kuò)展的用例,稱為擴(kuò)展用例;箭頭出發(fā)的用例為基用例。擴(kuò)展用例是可選的,如果缺少擴(kuò)展用例,不會(huì)影響到基用例的完整性;擴(kuò)展用例在一定條件下才會(huì)執(zhí)行,并且其執(zhí)行會(huì)改變基用例的行為。參與者之間的關(guān)系泛化發(fā)出箭頭的事物“is a”箭頭指向的事物。泛化關(guān)系是一般和特殊關(guān)系,發(fā)出箭頭的一方代表特殊的一方,箭頭指向的一方代表一般一方。特殊一方繼承了一般方的特性并增加了新的特性。extend3. 用例圖中的關(guān)系及解釋用例圖中的關(guān)系及解釋實(shí)例1 參與者之間的泛化關(guān)系 參與者參與者:經(jīng)理,安全主管,保安 用例用例: 管理人事,批準(zhǔn)預(yù)算,批準(zhǔn)安全證書,監(jiān)視

31、周邊在參與者之間不存在泛化關(guān)系的情況下,各個(gè)參與者參與 用例的情況分別是:經(jīng)理參與用例管理人事和批準(zhǔn)預(yù)算;安全主管參與用例批準(zhǔn)安全證書;保安參與用例監(jiān)視周邊。由于安全主管與經(jīng)理,安全主管與保安之間泛化關(guān)系的存在,意味著安全主管可以擔(dān)任經(jīng)理和保安的角色,就能夠參與經(jīng)理和保安參與的用例。這樣,安全主管就可以參與全部4個(gè)用例。但經(jīng)理或者保安卻不能擔(dān)任安全主管的角色,也就不能參與用例批準(zhǔn)安全證書。4. 例子例子2. 用例圖用例圖實(shí)例2 用例之間擴(kuò)展和包含關(guān)系 用例的上下文是:短途旅行但汽車的油不足以應(yīng)付全部路程。那么為汽車加油的動(dòng)作在旅行的每個(gè)場(chǎng)景(事件流)中都會(huì)出現(xiàn),不加油就不會(huì)完成旅行。吃飯則可以

32、由司機(jī)決定是否進(jìn)行,不吃飯不會(huì)影響旅行的完成。實(shí)例3. 航空售票的用例圖參與者(actor):clerk,監(jiān)督員,信用卡服務(wù)商,信息亭用例(use case): Buy tickets, Buy Subscription, Make charges, Survey sales參與者Clerk參與(或稱發(fā)起)Buy tickets和Buy Subscription 兩個(gè)用例(關(guān)聯(lián)關(guān)系)。這兩個(gè)用例的事件流都包含Make charges用例(包含關(guān)系)。系統(tǒng)由:Buy tickets, Buy Subscription, Make charges, Survey sales組成。該系統(tǒng)主要包含:B

33、uy tickets, Buy Subscription, Make charges, Survey sales這幾個(gè)功能。該系統(tǒng)主要面向的用戶(參與者):clerk,監(jiān)督員,信用卡服務(wù)商,信息亭。 信息亭 Clerk Buy tickets Buy Subscription 信用卡服務(wù)商 Make charges 監(jiān)督員 Survey sales 參與者 用例 Box Office 系統(tǒng) 關(guān)系 右圖中的參與者有? (a) 1 (b) 2 (c) 3(d) 4 右圖中的用例有?(a) 1(b) 2(c) 3(d) 4 2和3之間是什么關(guān)系?5和6呢?(a) 擴(kuò)展,包含(b) 包含,擴(kuò)展 5缺少

34、了3仍然是個(gè)完整的用例?(a) 是的(b) 不是 4能夠參與2嗎?1能夠參與5嗎?(a) 可以,不可以 (b) 不可以,可以5. 習(xí)題習(xí)題4.4.5 類圖類圖1. 類圖概要類圖概要類圖以反映類的結(jié)構(gòu)(屬性、操作)以及類之間的關(guān)系為主要目的,描述了軟件系統(tǒng)的結(jié)構(gòu),是一種靜態(tài)建模方法類圖中的“類”與面向?qū)ο笳Z(yǔ)言中的“類”的概念是對(duì)應(yīng)的,是對(duì)現(xiàn)實(shí)世界中的事物的抽象2. 類圖中的事物及解釋類圖中的事物及解釋l類類從上到下分為三部分,分別是類名、屬性和操作。類名是必須有的類如果有屬性,則每一個(gè)屬性都必須有一個(gè)名字,另外還可以有其它的描述信息,如可見(jiàn)性、數(shù)據(jù)類型、缺省值等類如果有操作,則每一個(gè)操作也都有一

35、個(gè)名字,其它可選的信息包括可見(jiàn)性、參數(shù)的名字、參數(shù)類型、參數(shù)缺省值和操作的返回值的類型等Account- balance : double = 1+ Deposit(amount : double) : int+ ComputeInterest() : double可見(jiàn)性可見(jiàn)性-代表private+代表public#代表protected也可以使用圖形表示返回值類型返回值類型操作名稱操作名稱斜體為抽象操作缺省值缺省值類名類名斜體為抽象類屬性名稱屬性名稱參數(shù)列表參數(shù)列表Shape(標(biāo)準(zhǔn)圖形)Shape+ Draw ()(變體圖形)接口Vehicle- fMaxSpeed : float+ Sta

36、rt() : int+ Stop() : int抽象類模版參數(shù)模版參數(shù)模版類l接口接口一組操作的集合,只有操作的聲明而沒(méi)有實(shí)現(xiàn)l抽象類抽象類不能被實(shí)例化的類,一般至少包含一個(gè)抽象操作l模版類模版類一種參數(shù)化的類,在編譯時(shí)把模版參數(shù)綁定到不同的數(shù)據(jù)類型,從而產(chǎn)生不同的類UML表示法表示法角色角色類的角色是“事物“多重性多重性(用數(shù)字和*表示)1*:1個(gè)或多個(gè)1個(gè)類圖有1個(gè)或多個(gè)類1個(gè)類屬于1個(gè)或多個(gè)類圖ClassDiagramClass+thing+diagram1.*1.*use1.*1.*方向方向雙向關(guān)聯(lián)(省略箭頭)名字名字關(guān)系的名字是“使用”實(shí)例實(shí)例3. 類圖中的關(guān)系及解釋類圖中的關(guān)系及解

37、釋l 關(guān)聯(lián)關(guān)系關(guān)聯(lián)關(guān)系 描述了類的結(jié)構(gòu)之間的關(guān)系。具有方向、名字、角色和多重性等信息。一般的關(guān) 聯(lián)關(guān)系語(yǔ)義較弱。也有兩種語(yǔ)義較強(qiáng),分別是聚合與組合UML表示法表示法聚合關(guān)系聚合關(guān)系特殊關(guān)聯(lián)關(guān)系,指明一個(gè)聚集(整體)和組成部分之間的關(guān)系組合關(guān)系組合關(guān)系語(yǔ)義更強(qiáng)的聚合,部分和整體具有相同的生命周期UML表示法表示法UML表示法表示法ThingClassDiagramRelation(空心菱形)實(shí)例實(shí)例類圖包含有事物和關(guān)系,類圖不存在了,事物和關(guān)系還可用于其它的類圖ClassAssociation(實(shí)心菱形)實(shí)例實(shí)例類與關(guān)聯(lián)關(guān)系之間有組合關(guān)系,類不存在了,則相應(yīng)的關(guān)聯(lián)關(guān)系也不存在UML表示法表示法實(shí)

38、現(xiàn)關(guān)系實(shí)現(xiàn)關(guān)系對(duì)應(yīng)于對(duì)應(yīng)于類和接口類和接口之間的關(guān)系之間的關(guān)系UML表示法表示法類Circle、Rectangle實(shí)現(xiàn)了接口Shape的操作Shape+ Draw ()Circle+ Draw ()Rectangle+ Drarw ()RelationAssociationGeneralizationRealizationDependency關(guān)聯(lián)、泛化、實(shí)現(xiàn)、依賴都是一種關(guān)系ThingClassInterface類、接口都是一種事物泛化關(guān)系泛化關(guān)系在面向?qū)ο笾幸话惴Q為繼承關(guān)系,存在在面向?qū)ο笾幸话惴Q為繼承關(guān)系,存在于父類與子類、父接口與子接口之間于父類與子類、父接口與子接口之間* * 依賴關(guān)系

39、依賴關(guān)系描述了一個(gè)類的變化對(duì)依賴于它的類產(chǎn)生影響的情況。有多種表現(xiàn)形式, 例如綁定(bind)、友元(friend)等UML表示法表示法模板類Stack定義了棧相關(guān)的操作;IntStack將參數(shù)T與實(shí)際類型int綁定,使得所有操作都針對(duì)int類型的數(shù)據(jù)類Memento和類Originator建立了友元依賴關(guān)系,以便Originator使用Memento的私有變量stateC+代碼class Vehiclepublic: virtual int Start() = 0; virtual int Stop() = 0; virtual int Run(float fSpeed) = 0;priva

40、te: float fMaxSpeed;Java代碼public abstract class Vehicle public abstract int Start(); public abstract int Stop(); public abstract int Run(float fSpeed); private float fMaxSpeed;Vehicleabstract - fMaxSpeed : float+Start ()Stop ()Run (float fSpeed): int: int: int4 類圖與代碼的映射類圖與代碼的映射l 類的映射類的映射n關(guān)聯(lián)關(guān)系的映射關(guān)聯(lián)關(guān)系

41、的映射 C+代碼class Dialog private: Button btnOK; Button btnCancel; TextBox txtInfo;class Button;class TextBox;組合關(guān)系,代碼表現(xiàn)為Dialog的屬性有Button和TextBox的對(duì)象TextBoxButtonDialog- btnOK : Button- btnCancel : Button- txtInfo : TextBoxn泛化關(guān)系的映射泛化關(guān)系的映射Java代碼public class SavingsAccount extends Account C+代碼class SavingsAc

42、count : public Account ;Shape+ Draw ()Circle-ptCenternRadius: Point: int+ Draw ()Rectangle-ptUpperLeftnWidthnHeight: Point: int: int+ Drarw ()在C+語(yǔ)言里面,使用抽象類代替接口,使用泛化關(guān)系代替實(shí)現(xiàn)關(guān)系在Java語(yǔ)言里面,有相應(yīng)的關(guān)鍵字interface、implementsn實(shí)現(xiàn)關(guān)系的映射實(shí)現(xiàn)關(guān)系的映射 C+代碼class Shape public: virtual void Draw() = 0;class Circle : public Shape

43、public: void Draw();private; Point ptCenter; int nRadius;Java代碼public interface Shape public abstract void Draw();public class Circle implements Shape public void Draw(); private Point ptCenter; private int nRadius;n3.4.5 3.4.5 依賴關(guān)系的映射依賴關(guān)系的映射綁定依賴TStack- size : int+ Push(elem : T) : int+ Pop() : int+

44、 GetTop() : const T&IntStackFloatStackC+代碼templateclass Stack private: int size;public: int Push(T elem); int Pop(); const T& GetTop();typedef Stack FloatStack;C+代碼(編譯器生成)class FloatStack private: int size;public: int Push(float elem); int Pop(); const float& GetTop();泛化組合組合模式5. 類圖例子類圖例子

45、l 圖形編輯器圖形編輯器圖形編輯器一般都具有一些基本圖形,如直線、矩形等,用戶可以直接使用基本圖形畫圖,也可以把基本圖形組合在一起創(chuàng)建復(fù)雜圖形如果區(qū)別對(duì)待基本圖形和組合圖形,會(huì)使代碼變得復(fù)雜,而且多數(shù)情況下用戶認(rèn)為二者是一樣的組合模式可以用相同的方式處理兩種圖形Graphics: 基本圖形和組合圖形的父類,聲明了所有圖形共同的操作,如Draw;也聲明了專用于組合圖形管理子圖形的操作,如Add、RemoveLine、Rectangle: 基本圖形類GroupGraphics: 組合圖形類,與父類有組合關(guān)系,從而可以組合所有圖形對(duì)象(基本圖形和組合圖形)演出售票系統(tǒng)演出售票系統(tǒng) 在用例驅(qū)動(dòng)的開(kāi)發(fā)過(guò)

46、程中,通過(guò)分析各個(gè)用例及參與者得到類圖。分析用例圖的過(guò)程中需要根據(jù)面向?qū)ο蟮脑瓌t設(shè)計(jì)類和關(guān)系,根據(jù)用例的細(xì)節(jié)設(shè)計(jì)類的屬性和操作設(shè)計(jì)類的屬性和操作v(1)哪兩個(gè)類之間存在組合關(guān)系MenuMenu、MenuItem MenuItem MenuItemMenuItem、CommandCommandCommandCommand、OpenCommandOpenCommandCommandCommand、PasteCommandPasteCommandv(2)OpenCommand和PasteCommand是什么關(guān)系組合組合泛化泛化聚合聚合沒(méi)關(guān)系沒(méi)關(guān)系Command+ Execute()OpenComma

47、nd+ Execute()PasteCommand+ Execute()MenuItem- command : Command*+ Click()1.*0.*1.*+executive0.*Menu+ Add(item : MenuItem)6.習(xí)題習(xí)題 右圖描述了菜單(Menu)、菜單項(xiàng)(MenuItem)、抽象命令類(Command)和具體命令類(OpenCommand, PasteCommand)之間的關(guān)系,完成1-2題右圖描述了圖形接口(Graphics)、線段(Segment)、矩形(Rectangle)、點(diǎn)(Point)和三維點(diǎn)(Point3D)之間的關(guān)系v(3)下面哪份代碼(Ja

48、va)最接近于圖中對(duì)Segment的描述public class Segment implements Graphicsprivatc void Draw();public Point ptStart;public Point ptEnd;public class Segment extends Graphicspublic void Draw();private Point ptStart;private Point ptEnd;public class Segment implements Graphicsprivate Point ptStart;private Point ptEnd;

49、public void Draw();public class segment implements graphicspublic void Draw();private Point ptStart;private Point ptEnd;Graphics+ Draw ()Segment-ptStartptEnd: Point: Point+ Draw ()Rectangle-ptUpperLeftnWidthnHeight: Point: int: int+ Drarw ()Point-xy: int: int+ Draw ()Point3D-xyz: int: int: int+ Draw

50、 ()5.1 OO5.1 OO設(shè)計(jì)中的通常原則設(shè)計(jì)中的通常原則原則只是原則,不是真理,具體實(shí)現(xiàn)要根據(jù)不同原則只是原則,不是真理,具體實(shí)現(xiàn)要根據(jù)不同的具體情況。的具體情況。原則都是為了保證軟件的可維護(hù)性和可復(fù)用性。原則都是為了保證軟件的可維護(hù)性和可復(fù)用性。設(shè)計(jì)的目標(biāo)是可擴(kuò)展性、靈活性、可插入性設(shè)計(jì)的目標(biāo)是可擴(kuò)展性、靈活性、可插入性5.2 5.2 開(kāi)閉原則開(kāi)閉原則A module should be open for extension but A module should be open for extension but closed for modification.closed for modification.一個(gè)模塊應(yīng)該只在擴(kuò)一個(gè)模塊應(yīng)該只在擴(kuò)展的時(shí)候被打開(kāi)(暴露模塊內(nèi)部),在修改的時(shí)展的時(shí)候被打開(kāi)(暴露模塊內(nèi)部),在修改的時(shí)候是關(guān)閉的(模塊是黑盒子)候是關(guān)閉的(模塊是黑盒子) 對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉就是對(duì)可變性進(jìn)行封裝就是對(duì)可變性進(jìn)行

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論