![深入淺出UML類圖_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/2/3dcfa4f3-aed2-4e5f-b278-ae6a99d40183/3dcfa4f3-aed2-4e5f-b278-ae6a99d401831.gif)
![深入淺出UML類圖_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/2/3dcfa4f3-aed2-4e5f-b278-ae6a99d40183/3dcfa4f3-aed2-4e5f-b278-ae6a99d401832.gif)
![深入淺出UML類圖_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/2/3dcfa4f3-aed2-4e5f-b278-ae6a99d40183/3dcfa4f3-aed2-4e5f-b278-ae6a99d401833.gif)
![深入淺出UML類圖_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/2/3dcfa4f3-aed2-4e5f-b278-ae6a99d40183/3dcfa4f3-aed2-4e5f-b278-ae6a99d401834.gif)
![深入淺出UML類圖_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/2/3dcfa4f3-aed2-4e5f-b278-ae6a99d40183/3dcfa4f3-aed2-4e5f-b278-ae6a99d401835.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、深入淺出UML類圖 在UML 2.0的13種圖形中,類圖是使用頻率最高的UML圖之一。Martin Fowler在其著作UML Distilled: A Brief Guide to the Standard Object Modeling Language, Third Edition(UML精粹:標(biāo)準(zhǔn)對象建模語言簡明指南(第3版)中有這么一段:“If someone were to come up to you in a dark alley and say, 'Psst, wanna see a UML diagram?' that diagram
2、would probably be a class diagram. The majority of UML diagrams I see are class diagrams.”(“如果有人在黑暗的小巷中向你走來并對你說:嘿,想不想看一張UML圖?那么這張圖很有可能就是一張類圖,我所見過的大部分的UML圖都是類圖”),由此可見類圖的重要性。 類圖用于描述系統(tǒng)中所包含的類以及它們之間的相互關(guān)系,幫助人們簡化對系統(tǒng)的理解,它是系統(tǒng)分析和設(shè)計(jì)階段的重要產(chǎn)物,也是系統(tǒng)編碼和測試的重要模型依據(jù)。1. 類類(Class)封裝了數(shù)據(jù)和行為,是面向?qū)ο蟮闹匾M成部分,它是具有相同屬性、操作、關(guān)系的對象集合的
3、總稱。在系統(tǒng)中,每個(gè)類都具有一定的職責(zé),職責(zé)指的是類要完成什么樣的功能,要承擔(dān)什么樣的義務(wù)。一個(gè)類可以有多種職責(zé),設(shè)計(jì)得好的類一般只有一種職責(zé)。在定義類的時(shí)候,將類的職責(zé)分解成為類的屬性和操作(即方法)。類的屬性即類的數(shù)據(jù)職責(zé),類的操作即類的行為職責(zé)。設(shè)計(jì)類是面向?qū)ο笤O(shè)計(jì)中最重要的組成部分,也是最復(fù)雜和最耗時(shí)的部分。在軟件系統(tǒng)運(yùn)行時(shí),類將被實(shí)例化成對象(Object),對象對應(yīng)于某個(gè)具體的事物,是類的實(shí)例(Instance)。類圖(Class Diagram)使用出現(xiàn)在系統(tǒng)中的不同類來描述系統(tǒng)的靜態(tài)結(jié)構(gòu),它用來描述不同的類以及它們之間的關(guān)系。在系統(tǒng)分析與設(shè)計(jì)階段,類通??梢苑譃槿N,分別是實(shí)體
4、類(Entity Class)、控制類(Control Class)和邊界類(Boundary Class),下面對這三種類加以簡要說明:(1) 實(shí)體類:實(shí)體類對應(yīng)系統(tǒng)需求中的每個(gè)實(shí)體,它們通常需要保存在永久存儲體中,一般使用數(shù)據(jù)庫表或文件來記錄,實(shí)體類既包括存儲和傳遞數(shù)據(jù)的類,還包括操作數(shù)據(jù)的類。實(shí)體類來源于需求說明中的名詞,如學(xué)生、商品等。(2) 控制類:控制類用于體現(xiàn)應(yīng)用程序的執(zhí)行邏輯,提供相應(yīng)的業(yè)務(wù)操作,將控制類抽象出來可以降低界面和數(shù)據(jù)庫之間的耦合度。控制類一般是由動賓結(jié)構(gòu)的短語(動詞+名詞)轉(zhuǎn)化來的名詞,如增加商品對應(yīng)有一個(gè)商品增加類,注冊對應(yīng)有一個(gè)用戶注冊類等(3) 邊界類:邊界
5、類用于對外部用戶與系統(tǒng)之間的交互對象進(jìn)行抽象,主要包括界面類,如對話框、窗口、菜單等。在面向?qū)ο蠓治龊驮O(shè)計(jì)的初級階段,通常首先識別出實(shí)體類,繪制初始類圖,此時(shí)的類圖也可稱為領(lǐng)域模型,包括實(shí)體類及其它們之間的相互關(guān)系。2. 類的UML圖示在UML中,類使用包含類名、屬性和操作且?guī)в蟹指艟€的長方形來表示,如定義一個(gè)Employee類,它包含屬性name、age和email,以及操作modifyInfo(),在UML類圖中該類如圖1所示:圖1 類的UML圖示圖1對應(yīng)的Java代碼片段如下:public class Employee private String name;private int ag
6、e;private String email;public void modifyInfo() .在UML類圖中,類一般由三部分組成:(1) 第一部分是類名:每個(gè)類都必須有一個(gè)名字,類名是一個(gè)字符串。(2) 第二部分是類的屬性(Attributes):屬性是指類的性質(zhì),即類的成員變量。一個(gè)類可以有任意多個(gè)屬性,也可以沒有屬性UML規(guī)定屬性的表示方式為:可見性 名稱:類型 = 缺省值 其中:· “可見性”表示該屬性對于類外的元素而言是否可見,包括公有(public)、私有(private)和受保護(hù)(protected)三種,在類圖中分別用符號+、-和#表示。 · “名稱”表示
7、屬性名,用一個(gè)字符串表示。 · “類型”表示屬性的數(shù)據(jù)類型,可以是基本數(shù)據(jù)類型,也可以是用戶自定義類型。 · “缺省值”是一個(gè)可選項(xiàng),即屬性的初始值。 (3) 第三部分是類的操作(Operations):操作是類的任意一個(gè)實(shí)例對象都可以使用的行為,是類的成員方法。UML規(guī)定操作的表示方式為:可見性 名稱(參數(shù)列表) : 返回類型其中:· “可見性”的定義與屬性的可見性定義相同。 · “名稱”即方法名,用一個(gè)字符串表示。 · “參數(shù)列表”表示方法的參數(shù),其語法與屬性的定義相似,參數(shù)個(gè)數(shù)是任意的,多個(gè)參數(shù)之間用逗號“,”隔開。 · “返回
8、類型”是一個(gè)可選項(xiàng),表示方法的返回值類型,依賴于具體的編程語言,可以是基本數(shù)據(jù)類型,也可以是用戶自定義類型,還可以是空類型(void),如果是構(gòu)造方法,則無返回類型。 在類圖2中,操作method1的可見性為public(+),帶入了一個(gè)Object類型的參數(shù)par,返回值為空(void);操作method2的可見性為protected(#),無參數(shù),返回值為String類型;操作method3的可見性為private(-),包含兩個(gè)參數(shù),其中一個(gè)參數(shù)為int類型,另一個(gè)為int類型,返回值為int類型。圖2 類圖操作說明示意圖由于在Java語言中允許出現(xiàn)內(nèi)部類,因此可能會出現(xiàn)包含四個(gè)部分的類
9、圖,如圖3所示:圖3 包含內(nèi)部類的類圖類與類之間的關(guān)系(1)在軟件系統(tǒng)中,類并不是孤立存在的,類與類之間存在各種關(guān)系,對于不同類型的關(guān)系,UML提供了不同的表示方式。1. 關(guān)聯(lián)關(guān)系關(guān)聯(lián)(Association)關(guān)系是類與類之間最常用的一種關(guān)系,它是一種結(jié)構(gòu)化關(guān)系,用于表示一類對象與另一類對象之間有聯(lián)系,如汽車和輪胎、師傅和徒弟、班級和學(xué)生等等。在UML類圖中,用實(shí)線連接有關(guān)聯(lián)關(guān)系的對象所對應(yīng)的類,在使用Java、C#和C+等編程語言實(shí)現(xiàn)關(guān)聯(lián)關(guān)系時(shí),通常將一個(gè)類的對象作為另一個(gè)類的成員變量。在使用類圖表示關(guān)聯(lián)關(guān)系時(shí)可以在關(guān)聯(lián)線上標(biāo)注角色名,一般使用一個(gè)表示兩者之間關(guān)系的動詞或者名詞表示角色名(有
10、時(shí)該名詞為實(shí)例對象名),關(guān)系的兩端代表兩種不同的角色,因此在一個(gè)關(guān)聯(lián)關(guān)系中可以包含兩個(gè)角色名,角色名不是必須的,可以根據(jù)需要增加,其目的是使類之間的關(guān)系更加明確。如在一個(gè)登錄界面類LoginForm中包含一個(gè)JButton類型的注冊按鈕loginButton,它們之間可以表示為關(guān)聯(lián)關(guān)系,代碼實(shí)現(xiàn)時(shí)可以在LoginForm中定義一個(gè)名為loginButton的屬性對象,其類型為JButton。如圖1所示:圖1 關(guān)聯(lián)關(guān)系實(shí)例圖1對應(yīng)的Java代碼片段如下:public class LoginForm private JButton loginButton; /定義為成員變量public class
11、 JButton 在UML中,關(guān)聯(lián)關(guān)系通常又包含如下幾種形式:(1) 雙向關(guān)聯(lián)默認(rèn)情況下,關(guān)聯(lián)是雙向的。例如:顧客(Customer)購買商品(Product)并擁有商品,反之,賣出的商品總有某個(gè)顧客與之相關(guān)聯(lián)。因此,Customer類和Product類之間具有雙向關(guān)聯(lián)關(guān)系,如圖2所示:圖2 雙向關(guān)聯(lián)實(shí)例圖2對應(yīng)的Java代碼片段如下:public class Customer private Product products;public class Product private Customer customer;(2) 單向關(guān)聯(lián)類的關(guān)聯(lián)關(guān)系也可以是單向的,單向關(guān)聯(lián)用帶箭頭的實(shí)線表示。例
12、如:顧客(Customer)擁有地址(Address),則Customer類與Address類具有單向關(guān)聯(lián)關(guān)系,如圖3所示:圖3 單向關(guān)聯(lián)實(shí)例圖3對應(yīng)的Java代碼片段如下:public class Customer private Address address;public class Address (3) 自關(guān)聯(lián)在系統(tǒng)中可能會存在一些類的屬性對象類型為該類本身,這種特殊的關(guān)聯(lián)關(guān)系稱為自關(guān)聯(lián)。例如:一個(gè)節(jié)點(diǎn)類(Node)的成員又是節(jié)點(diǎn)Node類型的對象,如圖4所示:圖4 自關(guān)聯(lián)實(shí)例圖4對應(yīng)的Java代碼片段如下:public class Node private Node subNode
13、;(4) 多重性關(guān)聯(lián)多重性關(guān)聯(lián)關(guān)系又稱為重?cái)?shù)性(Multiplicity)關(guān)聯(lián)關(guān)系,表示兩個(gè)關(guān)聯(lián)對象在數(shù)量上的對應(yīng)關(guān)系。在UML中,對象之間的多重性可以直接在關(guān)聯(lián)直線上用一個(gè)數(shù)字或一個(gè)數(shù)字范圍表示。對象之間可以存在多種多重性關(guān)聯(lián)關(guān)系,常見的多重性表示方式如表1所示:表1 多重性表示方式列表表示方式多重性說明1.1表示另一個(gè)類的一個(gè)對象只與該類的一個(gè)對象有關(guān)系0.*表示另一個(gè)類的一個(gè)對象與該類的零個(gè)或多個(gè)對象有關(guān)系1.*表示另一個(gè)類的一個(gè)對象與該類的一個(gè)或多個(gè)對象有關(guān)系0.1表示另一個(gè)類的一個(gè)對象沒有或只與該類的一個(gè)對象有關(guān)系m.n表示另一個(gè)類的一個(gè)對象與該類最少m,最多n個(gè)對象有關(guān)系 (mn)
14、例如:一個(gè)界面(Form)可以擁有零個(gè)或多個(gè)按鈕(Button),但是一個(gè)按鈕只能屬于一個(gè)界面,因此,一個(gè)Form類的對象可以與零個(gè)或多個(gè)Button類的對象相關(guān)聯(lián),但一個(gè)Button類的對象只能與一個(gè)Form類的對象關(guān)聯(lián),如圖5所示:圖5 多重性關(guān)聯(lián)實(shí)例圖5對應(yīng)的Java代碼片段如下:public class Form private Button buttons; /定義一個(gè)集合對象public class Button (5) 聚合關(guān)系聚合(Aggregation)關(guān)系表示整體與部分的關(guān)系。在聚合關(guān)系中,成員對象是整體對象的一部分,但是成員對象可以脫離整體對象獨(dú)立存在。在UML中,聚合關(guān)
15、系用帶空心菱形的直線表示。例如:汽車發(fā)動機(jī)(Engine)是汽車(Car)的組成部分,但是汽車發(fā)動機(jī)可以獨(dú)立存在,因此,汽車和發(fā)動機(jī)是聚合關(guān)系,如圖6所示:圖6 聚合關(guān)系實(shí)例在代碼實(shí)現(xiàn)聚合關(guān)系時(shí),成員對象通常作為構(gòu)造方法、Setter方法或業(yè)務(wù)方法的參數(shù)注入到整體對象中,圖6對應(yīng)的Java代碼片段如下:public class Car private Engine engine; /構(gòu)造注入public Car(Engine engine) this.engine = engine; /設(shè)值注入public void setEngine(Engine engine) this.engine =
16、 engine;public class Engine (6) 組合關(guān)系組合(Composition)關(guān)系也表示類之間整體和部分的關(guān)系,但是在組合關(guān)系中整體對象可以控制成員對象的生命周期,一旦整體對象不存在,成員對象也將不存在,成員對象與整體對象之間具有同生共死的關(guān)系。在UML中,組合關(guān)系用帶實(shí)心菱形的直線表示。例如:人的頭(Head)與嘴巴(Mouth),嘴巴是頭的組成部分之一,而且如果頭沒了,嘴巴也就沒了,因此頭和嘴巴是組合關(guān)系,如圖7所示:圖7 組合關(guān)系實(shí)例在代碼實(shí)現(xiàn)組合關(guān)系時(shí),通常在整體類的構(gòu)造方法中直接實(shí)例化成員類,圖7對應(yīng)的Java代碼片段如下:public class Head
17、private Mouth mouth;public Head() mouth = new Mouth(); /實(shí)例化成員類public class Mouth 類與類之間的關(guān)系(2)2. 依賴關(guān)系依賴(Dependency)關(guān)系是一種使用關(guān)系,特定事物的改變有可能會影響到使用該事物的其他事物,在需要表示一個(gè)事物使用另一個(gè)事物時(shí)使用依賴關(guān)系。大多數(shù)情況下,依賴關(guān)系體現(xiàn)在某個(gè)類的方法使用另一個(gè)類的對象作為參數(shù)。在UML中,依賴關(guān)系用帶箭頭的虛線表示,由依賴的一方指向被依賴的一方。例如:駕駛員開車,在Driver類的drive()方法中將Car類型的對象car作為一個(gè)參數(shù)傳遞,以便在drive()
18、方法中能夠調(diào)用car的move()方法,且駕駛員的drive()方法依賴車的move()方法,因此類Driver依賴類Car,如圖1所示:圖1 依賴關(guān)系實(shí)例在系統(tǒng)實(shí)施階段,依賴關(guān)系通常通過三種方式來實(shí)現(xiàn),第一種也是最常用的一種方式是如圖1所示的將一個(gè)類的對象作為另一個(gè)類中方法的參數(shù),第二種方式是在一個(gè)類的方法中將另一個(gè)類的對象作為其局部變量,第三種方式是在一個(gè)類的方法中調(diào)用另一個(gè)類的靜態(tài)方法。圖1對應(yīng)的Java代碼片段如下:public class Driver public void drive(Car car) car.move(); public class Car public voi
19、d move() . 3. 泛化關(guān)系泛化(Generalization)關(guān)系也就是繼承關(guān)系,用于描述父類與子類之間的關(guān)系,父類又稱作基類或超類,子類又稱作派生類。在UML中,泛化關(guān)系用帶空心三角形的直線來表示。在代碼實(shí)現(xiàn)時(shí),我們使用面向?qū)ο蟮睦^承機(jī)制來實(shí)現(xiàn)泛化關(guān)系,如在Java語言中使用extends關(guān)鍵字、在C+/C#中使用冒號“:”來實(shí)現(xiàn)。例如:Student類和Teacher類都是Person類的子類,Student類和Teacher類繼承了Person類的屬性和方法,Person類的屬性包含姓名(name)和年齡(age),每一個(gè)Student和Teacher也都具有這兩個(gè)屬性,另外S
20、tudent類增加了屬性學(xué)號(studentNo),Teacher類增加了屬性教師編號(teacherNo),Person類的方法包括行走move()和說話say(),Student類和Teacher類繼承了這兩個(gè)方法,而且Student類還新增方法study(),Teacher類還新增方法teach()。如圖2所示:圖2 泛化關(guān)系實(shí)例圖2對應(yīng)的Java代碼片段如下:/父類public class Person protected String name;protected int age;public void move() public void say() /子類public class
21、 Student extends Person private String studentNo;public void study() /子類public class Teacher extends Person private String teacherNo;public void teach() 4. 接口與實(shí)現(xiàn)關(guān)系在很多面向?qū)ο笳Z言中都引入了接口的概念,如Java、C#等,在接口中,通常沒有屬性,而且所有的操作都是抽象的,只有操作的聲明,沒有操作的實(shí)現(xiàn)。UML中用與類的表示法類似的方式表示接口,如圖3所示:圖3 接口的UML圖示接口之間也可以有與類之間關(guān)系類似的繼承關(guān)系和依賴關(guān)系,但
22、是接口和類之間還存在一種實(shí)現(xiàn)(Realization)關(guān)系,在這種關(guān)系中,類實(shí)現(xiàn)了接口,類中的操作實(shí)現(xiàn)了接口中所聲明的操作。在UML中,類與接口之間的實(shí)現(xiàn)關(guān)系用帶空心三角形的虛線來表示。例如:定義了一個(gè)交通工具接口Vehicle,包含一個(gè)抽象操作move(),在類Ship和類Car中都實(shí)現(xiàn)了該move()操作,不過具體的實(shí)現(xiàn)細(xì)節(jié)將會不一樣,如圖4所示:圖4 實(shí)現(xiàn)關(guān)系實(shí)例實(shí)現(xiàn)關(guān)系在編程實(shí)現(xiàn)時(shí),不同的面向?qū)ο笳Z言也提供了不同的語法,如在Java語言中使用implements關(guān)鍵字,而在C+/C#中使用冒號“:”來實(shí)現(xiàn)。圖4對應(yīng)的Java代碼片段如下:public interface Vehicle
23、 public void move();public class Ship implements Vehicle public void move() public class Car implements Vehicle public void move() 實(shí)例分析1登錄模塊某基于C/S的即時(shí)聊天系統(tǒng)登錄模塊功能描述如下:用戶通過登錄界面(LoginForm)輸入賬號和密碼,系統(tǒng)將輸入的賬號和密碼與存儲在數(shù)據(jù)庫(User)表中的用戶信息進(jìn)行比較,驗(yàn)證用戶輸入是否正確,如果輸入正確則進(jìn)入主界面(MainForm),否則提示“輸入錯誤”。根據(jù)以上描述繪制初始類圖。參考解決方案:參考類圖如下:考
24、慮到系統(tǒng)擴(kuò)展性,在本實(shí)例中引入了抽象數(shù)據(jù)訪問接口IUserDAO,再將具體數(shù)據(jù)訪問對象注入到業(yè)務(wù)邏輯對象中,可通過配置文件(如XML文件)等方式來實(shí)現(xiàn),將具體的數(shù)據(jù)訪問類類名存儲在配置文件中,如果需要更換新的具體數(shù)據(jù)訪問對象,只需修改配置文件即可,原有程序代碼無須做任何修改。類說明:類 名說 明LoginForm登錄窗口,省略界面組件和按鈕事件處理方法(邊界類)LoginBO登錄業(yè)務(wù)邏輯類,封裝實(shí)現(xiàn)登錄功能的業(yè)務(wù)邏輯(控制類)IUserDAO抽象數(shù)據(jù)訪問類接口,聲明對User表的數(shù)據(jù)操作方法,省略除查詢外的其他方法(實(shí)體類)UserDAO具體數(shù)據(jù)訪問類,實(shí)現(xiàn)對User表的數(shù)據(jù)操作方法,省略除查
25、詢外的其他方法(實(shí)體類)MainForm主窗口(邊界類)方法說明:方法名說 明LoginForm類的LoginForm()方法LoginForm構(gòu)造函數(shù),初始化實(shí)例成員LoginForm類的validate()方法界面類的驗(yàn)證方法,通過調(diào)用業(yè)務(wù)邏輯類LoginBO的validate()方法實(shí)現(xiàn)對用戶輸入信息的驗(yàn)證LoginBO類的validate()方法業(yè)務(wù)邏輯類的驗(yàn)證方法,通過調(diào)用數(shù)據(jù)訪問類的findUserByAccAndPwd()方法驗(yàn)證用戶輸入信息的合法性LoginBO類的setIUserDAO()方法Setter方法,在業(yè)務(wù)邏輯對象中注入數(shù)據(jù)訪問對象(注意:此處針對抽象數(shù)據(jù)訪問類編程
26、IUserDAO接口的findUserByAccAndPwd()方法業(yè)務(wù)方法聲明,通過用戶賬號和密碼在數(shù)據(jù)庫中查詢用戶信息,判斷該用戶身份的合法性UserDAO類的findUserByAccAndPwd()方法業(yè)務(wù)方法實(shí)現(xiàn),實(shí)現(xiàn)在IUserDAO接口中聲明的數(shù)據(jù)訪問方法實(shí)例分析2注冊模塊某基于Java語言的C/S軟件需要提供注冊功能,該功能簡要描述如下:用戶通過注冊界面(RegisterForm)輸入個(gè)人信息,用戶點(diǎn)擊“注冊”按鈕后將輸入的信息通過一個(gè)封裝用戶輸入數(shù)據(jù)的對象(UserDTO)傳遞給操作數(shù)據(jù)庫的數(shù)據(jù)訪問類,為了提高系統(tǒng)的擴(kuò)展性,針對不同的數(shù)據(jù)庫可能需要提供不同的數(shù)據(jù)訪問類,因此提
27、供了數(shù)據(jù)訪問類接口,如IUserDAO,每一個(gè)具體數(shù)據(jù)訪問類都是某一個(gè)數(shù)據(jù)訪問類接口的實(shí)現(xiàn)類,如OracleUserDAO就是一個(gè)專門用于訪問Oracle數(shù)據(jù)庫的數(shù)據(jù)訪問類。根據(jù)以上描述繪制類圖。為了簡化類圖,個(gè)人信息僅包括賬號(userAccount)和密碼(userPassword),且界面類無需涉及界面細(xì)節(jié)元素。參考解決方案:在以上功能說明中,可以分析出該系統(tǒng)包括三個(gè)類和一個(gè)接口,這三個(gè)類分別是注冊界面類RegisterForm、用戶數(shù)據(jù)傳輸類UserDTO、Oracle用戶數(shù)據(jù)訪問類OracleUserDAO,接口是抽象用戶數(shù)據(jù)訪問接口IUserDAO。它們之間的關(guān)系如下:(1) 在R
28、egisterForm中需要使用UserDTO類傳輸數(shù)據(jù)且需要使用數(shù)據(jù)訪問類來操作數(shù)據(jù)庫,因此RegisterForm與UserDTO和IUserDAO之間存在關(guān)聯(lián)關(guān)系,在RegisterForm中可以直接實(shí)例化UserDTO,因此它們之間可以使用組合關(guān)聯(lián)。(2) 由于數(shù)據(jù)庫類型需要靈活更換,因此在RegisterForm中不能直接實(shí)例化IUserDAO的子類,可以針對接口IUserDAO編程,再通過注入的方式傳入一個(gè)IUserDAO接口的子類對象(在本書后續(xù)章節(jié)中將學(xué)習(xí)如何具體實(shí)現(xiàn)),因此RegisterForm和IUserDAO之間具有聚合關(guān)聯(lián)關(guān)系。(3) OracleUserDAO是實(shí)現(xiàn)
29、了IUserDAO接口的子類,因此它們之間具有類與接口的實(shí)現(xiàn)關(guān)系。(4) 在聲明IUserDAO接口的增加用戶信息方法addUser()時(shí),需要將在界面類中實(shí)例化的UserDTO對象作為參數(shù)傳遞進(jìn)來,然后取出封裝在UserDTO對象中的數(shù)據(jù)插入數(shù)據(jù)庫,因此addUser()方法的函數(shù)原型可以定義為:public boolean addUser(UserDTO user),在IUserDAO的方法addUser()中將UserDTO類型的對象作為參數(shù),故IUserDAO與UserDTO存在依賴關(guān)系。通過以上分析,該實(shí)例參考類圖如圖1所示:圖1 注冊功能參考類圖注意:在繪制類圖或其他UML圖形時(shí),可以通過注釋(Comment)來對圖中的符號或元素進(jìn)行一些附加說明,如果需要詳細(xì)說明類圖中的某一方法的功能或者實(shí)現(xiàn)過程,可以使用如圖2所示表示方式:圖2 類圖注釋實(shí)例實(shí)例分析3售票機(jī)控制程序某運(yùn)輸公司決定為新的售票機(jī)開發(fā)車票銷售的控制軟件。圖I給出了售票機(jī)的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度化工行業(yè)安全生產(chǎn)培訓(xùn)服務(wù)合同
- 二零二五年度農(nóng)民工技能培訓(xùn)合同
- 2025年度國際貨物貿(mào)易結(jié)算合同模板
- 2025年度酒水店產(chǎn)品銷售區(qū)域代理合同范本
- 二零二五版企業(yè)員工股權(quán)激勵與員工福利改善合同
- 二零二五年度葡萄園智能化灌溉承包合同4篇
- 電子商務(wù)模式創(chuàng)新與運(yùn)營策略分析匯報(bào)
- 2025年中國建筑虛擬電廠行業(yè)市場運(yùn)行動態(tài)、市場監(jiān)測及投資發(fā)展?jié)摿Ψ治鰣?bào)告
- 電商物流中的自動化技術(shù)應(yīng)用
- 電子商務(wù)與科技創(chuàng)新的緊密結(jié)合
- 基于學(xué)生主體的整本書閱讀-《鋼鐵是怎樣煉成的》(一等獎創(chuàng)新教學(xué)設(shè)計(jì))
- (完整word版)高中英語3500詞匯表
- 社會政策概論課件
- 工程量清單及招標(biāo)控制價(jià)編制服務(wù)采購實(shí)施方案(技術(shù)標(biāo))
- 全國住戶收支調(diào)查業(yè)務(wù)知識考試復(fù)習(xí)題庫(含答案)
- 復(fù)方氨基酸注射液的匯總
- 2023年上海市秋考語文真題試卷含答案(整理版)
- 2023年心理咨詢師之心理咨詢師基礎(chǔ)知識考試題庫附完整答案【有一套】
- 一級建造師繼續(xù)教育最全題庫及答案(新)
- 直線加速器專項(xiàng)施工方案
- 聯(lián)苯二氯芐生產(chǎn)工藝及產(chǎn)排污分析
評論
0/150
提交評論