




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Java語(yǔ)言程序設(shè)計(jì)shelly200607@126.comUML類(lèi)圖簡(jiǎn)介面向抽象原則開(kāi)-閉原則多用組合少用繼承原則高內(nèi)聚-低耦合原則主要內(nèi)容7.1UML類(lèi)圖簡(jiǎn)介UML(UnifiedModelingLanguage)類(lèi)圖(ClassDiagram)屬于結(jié)構(gòu)圖,常被用于描述一個(gè)系統(tǒng)的靜態(tài)結(jié)構(gòu)。類(lèi)圖是由若干類(lèi)關(guān)聯(lián)在一起,反映系統(tǒng)或者子系統(tǒng)組成結(jié)構(gòu)的靜態(tài)圖。類(lèi)圖的建模貫穿工程的分析和設(shè)計(jì)階段的始終,通常從用戶能夠理解的類(lèi)開(kāi)始建模,最終往往成為只有開(kāi)發(fā)小組才能夠完全理解的類(lèi)。類(lèi)圖由如下元素組成:類(lèi)(Class):是具有共同結(jié)構(gòu)特征、行為特征、聯(lián)系和語(yǔ)義的對(duì)象集合的抽象形式。關(guān)聯(lián)(Association):它表示類(lèi)與類(lèi)之間的關(guān)系。在類(lèi)的UML圖中,使用一個(gè)長(zhǎng)方形描述一個(gè)類(lèi)的主要構(gòu)成,將長(zhǎng)方形垂直地分為三層?!舻?層是名字層◆第2層是變量層,也稱(chēng)屬性層,列出類(lèi)的成員變量及類(lèi)型,格式是“變量名字:類(lèi)型”?!舻?層是方法層,也稱(chēng)操作層,列出類(lèi)的方法及返回類(lèi)型,格式是“方法名字(參數(shù)列表):類(lèi)型”。7.1.1類(lèi)的UML圖在類(lèi)圖中,根據(jù)建模的不同景象,類(lèi)圖標(biāo)中不一定列出全部的內(nèi)容。如在建立分析模型或設(shè)計(jì)模型時(shí),甚至可以只列出類(lèi)名,在圖中著重表達(dá)的是類(lèi)與類(lèi)之間的聯(lián)系;在建立實(shí)現(xiàn)模型時(shí),則應(yīng)當(dāng)在類(lèi)圖標(biāo)中詳細(xì)給出類(lèi)的屬性和方法等細(xì)節(jié)。1.屬性
屬性(Attribute)在UML類(lèi)圖標(biāo)的矩形框中用文字串說(shuō)明,如下圖所示。
可視性(Visibility)標(biāo)記表示:
+ 公共# 保護(hù)-私用可視性也可以用以下關(guān)鍵字表示:public(公共)、protected(保護(hù))、private(私用)。若可視性標(biāo)記為“+”或“public”,則為公共屬性,可以被外部對(duì)象訪問(wèn)。若可視性標(biāo)記為“#’或“protected”,則為保護(hù)屬性,可以被本類(lèi)或子類(lèi)的對(duì)象訪問(wèn)。若可視性標(biāo)記為“-”或“private”,則為私用屬性,不可以被外部對(duì)象訪問(wèn),只能為本類(lèi)的對(duì)象使用??梢曅钥梢匀笔?,表示該屬性不可視。Student類(lèi)
屬性類(lèi)型表示:冒號(hào)“:”后跟屬性值的數(shù)據(jù)類(lèi)型。數(shù)據(jù)類(lèi)型的表示依賴(lài)于實(shí)現(xiàn)語(yǔ)言,如有的程序設(shè)計(jì)語(yǔ)言規(guī)定浮點(diǎn)數(shù)用保留字“Float”表示,有的則規(guī)定用保留字“Real”表示。Student類(lèi)數(shù)據(jù)類(lèi)型可以是任何用戶需要的內(nèi)容,包括:來(lái)自程序設(shè)計(jì)語(yǔ)言如VisualBasic、C++、C#和Java的任何標(biāo)準(zhǔn)數(shù)據(jù)類(lèi)型。一個(gè)已經(jīng)定義的類(lèi)。接口定義語(yǔ)言(InterfaceDefinitionLanguage,IDL)中的數(shù)據(jù)類(lèi)型列表中的數(shù)據(jù)類(lèi)型。讀者在自己的系統(tǒng)建模中能夠使用的其他類(lèi)型。屬性初始值設(shè)置:可以通過(guò)在屬性名稱(chēng)和數(shù)據(jù)類(lèi)型之后添加等于號(hào)(=)來(lái)為屬性指定默認(rèn)值,如下圖所示。屬性多重性:多重性為可選項(xiàng),它表達(dá)該類(lèi)的每個(gè)實(shí)例的屬性值的個(gè)數(shù)??梢韵駪?yīng)用于類(lèi)之間的關(guān)系中那樣把多重性應(yīng)用于屬性。例如,Student類(lèi)具有屬性Grades。不希望該屬性只包含單個(gè)值,而是希望它包含該學(xué)生的所有成績(jī),可以是任意多個(gè)。派生的屬性:另一種可以為屬性提供的信息是派生值,它可以使用數(shù)學(xué)函數(shù)、字符串函數(shù)或者將要在應(yīng)用程序中實(shí)現(xiàn)的其他商務(wù)邏輯。要想指出一個(gè)屬性是派生的,需要在屬性名之前添加一個(gè)前斜線(/),并且要附加一個(gè)注釋?zhuān)渲邪伺缮鷮傩灾档闹噶?,如下圖所示。2.操作(方法)
操作(Operation)表示類(lèi)能夠提供的功能服務(wù)。它在UML類(lèi)矩形框中用文字串說(shuō)明,如下圖所示。操作名指示類(lèi)可提供的功能服務(wù),它后跟圓括號(hào)中的參數(shù)列表是可選項(xiàng),即一個(gè)操作可以有參數(shù),也可以沒(méi)有參數(shù)。參數(shù)列表由逗號(hào)分隔的操作的形式參數(shù)組成,其格式為:
參數(shù)名:類(lèi)型=缺省值,…Student類(lèi)返回列表是返回給調(diào)用者的單個(gè)變量值,它可以表示該操作程序運(yùn)行的一個(gè)成功標(biāo)志或者計(jì)算的值。7.1.2接口(Interface)表示接口的UML圖使用一個(gè)長(zhǎng)方形描述一個(gè)接口的主要構(gòu)成,將長(zhǎng)方形垂直地分為三層。◆頂部第1層是名字層,用<<interface>>修飾名字?!舻?層是常量層,列出接口中的常量及類(lèi)型,格式是“常量名字:類(lèi)型”。
◆第3層是方法層,也稱(chēng)操作層,列出接口中的方法及返回類(lèi)型,格式是“方法名字(參數(shù)列表):類(lèi)型”。
類(lèi)的關(guān)系類(lèi)之間可以建立四種關(guān)系:泛化、關(guān)聯(lián)、依賴(lài)和實(shí)現(xiàn)。其標(biāo)記如下圖所示。如果一個(gè)類(lèi)是另一個(gè)類(lèi)的子類(lèi),那么UML通過(guò)使用一個(gè)實(shí)線連接兩個(gè)類(lèi)的UML圖來(lái)表示二者之間的繼承關(guān)系。如果A類(lèi)中成員變量是用B類(lèi)(接口)來(lái)聲明的變量,那么A和B的關(guān)系是關(guān)聯(lián)關(guān)系,稱(chēng)A關(guān)聯(lián)于B。實(shí)現(xiàn)關(guān)系如果A類(lèi)中某個(gè)方法的參數(shù)用B類(lèi)(接口)來(lái)聲明的變量或某個(gè)方法返回的數(shù)據(jù)類(lèi)型是B類(lèi)型的,那么A和B的關(guān)系是依賴(lài)關(guān)系,稱(chēng)A依賴(lài)于B。如果一個(gè)類(lèi)實(shí)現(xiàn)了一個(gè)接口,那么類(lèi)和接口的關(guān)系是實(shí)現(xiàn)關(guān)系,稱(chēng)類(lèi)實(shí)現(xiàn)接口7.1.7注釋?zhuān)ˋnnotation)UML使用注釋為類(lèi)圖提供附加的說(shuō)明。UML在一個(gè)帶卷角的長(zhǎng)方形中顯示給出的注釋?zhuān)⑹褂锰摼€將這個(gè)帶卷角的長(zhǎng)方形和所它所注釋的實(shí)體連接起來(lái)。
1)關(guān)聯(lián)關(guān)系關(guān)聯(lián)關(guān)系是指類(lèi)之間的語(yǔ)義聯(lián)系。關(guān)聯(lián)可以具有如下特性:關(guān)聯(lián)名稱(chēng)角色名稱(chēng)多重性導(dǎo)航性多個(gè)類(lèi)可以關(guān)聯(lián)到同一個(gè)類(lèi)多重性:
多重性(mutiplicity)用來(lái)指示一個(gè)類(lèi)的多少對(duì)象與另一個(gè)類(lèi)的一個(gè)對(duì)象相關(guān)??梢栽陬?lèi)關(guān)系的任何一端添加多重性,來(lái)指示出多重性,如下圖所示。多重性是一個(gè)數(shù)值或者數(shù)值范圍,用來(lái)指示一個(gè)類(lèi)的幾個(gè)對(duì)象與另一個(gè)類(lèi)的一個(gè)對(duì)象相關(guān)。如下圖所示。關(guān)聯(lián)的多重性角色
類(lèi)關(guān)系還可以通過(guò)添加角色來(lái)進(jìn)一步豐富。在類(lèi)圖中使用角色可以幫助讀者理解第一個(gè)類(lèi)對(duì)于第二個(gè)類(lèi)的作用。角色與多重性顯示在相同的位置,在指示類(lèi)之間關(guān)系線的上面或者下面,如下圖所示。下圖顯示了player類(lèi)和Team類(lèi)在關(guān)聯(lián)中分別扮演兩個(gè)角色。關(guān)聯(lián)的限定關(guān)聯(lián)的限定
類(lèi)的關(guān)聯(lián)還可以通過(guò)限定條件來(lái)明確類(lèi)之間的關(guān)系。如下圖所示。類(lèi)的自反關(guān)聯(lián)自反關(guān)聯(lián):
類(lèi)具有到自身的關(guān)聯(lián),稱(chēng)為自反關(guān)聯(lián)。2聚集聚集也稱(chēng)為聚合,是關(guān)聯(lián)的特例。聚集表示一類(lèi)對(duì)象與另一類(lèi)對(duì)象之間的關(guān)系,是整體與部分的關(guān)系。在陳述需求時(shí)使用的“包含”、“組成”、“分為……部分”等字句,往往意味著存在聚集關(guān)系。除了一般的聚集關(guān)系之外,還有兩種特殊的聚集關(guān)系,分別稱(chēng)為共享聚集和復(fù)合聚集。圖9.10共享聚集示例①共享聚集如果在聚集關(guān)系中處于部分方的對(duì)象可以同時(shí)參與多個(gè)處于整體方對(duì)象的構(gòu)成,則該聚集稱(chēng)為共享聚集。①共享聚集②組合聚集如果部分類(lèi)對(duì)象完全隸屬于整體類(lèi)對(duì)象,部分與整體共存,整體不存在了部分也會(huì)隨之消失(或失去存在價(jià)值了),則該聚集稱(chēng)為組合聚集。②組合聚集練習(xí):建模聚合關(guān)聯(lián)和組合關(guān)聯(lián)在這個(gè)練習(xí)中,將會(huì)使用目前為止學(xué)習(xí)到的所有類(lèi)型的關(guān)系來(lái)創(chuàng)建一個(gè)類(lèi)圖,這些關(guān)系包括普通關(guān)聯(lián)、泛化、聚合和組合。讀者將會(huì)綜合運(yùn)用自己的知識(shí)從需求構(gòu)造一個(gè)類(lèi)圖。下面是一個(gè)制造商和維修店使用的存貨清單系統(tǒng)的需求列表,從這些信息構(gòu)造一個(gè)類(lèi)圖:存貨由兩個(gè)部分組成(零件和產(chǎn)品)。產(chǎn)品由兩個(gè)或者更多零件組成,系統(tǒng)可以擁有無(wú)限多個(gè)零件和產(chǎn)品。存貨中的部分零件包括調(diào)速輪、輪齒和加力燃燒室。一名倉(cāng)庫(kù)保管員維護(hù)貨存。一名裝配工組裝產(chǎn)品,一名維修員維修產(chǎn)品。完成的產(chǎn)品包括1-3個(gè)標(biāo)簽:Manufacturer標(biāo)簽指示產(chǎn)品已經(jīng)完成;Repair標(biāo)簽指示產(chǎn)品已經(jīng)檢修過(guò);FCC標(biāo)簽指示產(chǎn)品中包含加力燃燒室。練習(xí)設(shè)計(jì)一組幾何對(duì)象類(lèi)圖。組中父類(lèi)為“幾何單項(xiàng)”,由之衍生“線”、“圓”、“方”,“橢圓”、“多邊形”、“點(diǎn)”等類(lèi)。幾何單項(xiàng)多邊形圓矩形橢圓線點(diǎn)幾何單項(xiàng)多邊形圓矩形橢圓線點(diǎn)11..*{有序}7.2面向抽象原則7.2.1抽象類(lèi)和接口抽象(abstract)類(lèi)具有如下特點(diǎn):◆抽象類(lèi)中可以有abstract方法,也可以有非abstract方法?!舫橄箢?lèi)不能用new運(yùn)算符創(chuàng)建對(duì)象?!羧绻粋€(gè)非抽象類(lèi)是某個(gè)抽象類(lèi)的子類(lèi),那么它必須重寫(xiě)父類(lèi)的abstract方法?!舫橄箢?lèi)聲明的對(duì)象做上轉(zhuǎn)型對(duì)象。A.java,B.java,Application.java
publicabstractclassA{publicabstractintadd(intx,inty);}publicclassBextendsA{publicintadd(intx,inty){returnx+y;}}publicclassApplication{publicstaticvoidmain(Stringargs[]){Aa;a=newB();//a是B類(lèi)對(duì)象的上轉(zhuǎn)型對(duì)象intm=a.add(3,2);//a調(diào)用子類(lèi)B重寫(xiě)的add()方法System.out.println(m);//輸出結(jié)果為5}}接口(interface)具有如下特點(diǎn):◆接口中只可以有public權(quán)限的abstract方法,不能有非abstract方法?!艚涌谟深?lèi)去實(shí)現(xiàn),即一個(gè)類(lèi)如果實(shí)現(xiàn)一個(gè)接口,那么它必須重寫(xiě)接口中的abstract方法?!艚涌诨卣{(diào)。Com.java,ComImp.java,Application.java
publicinterfaceCom{publicabstractintsub(intx,inty);}classComImpimplementsCom{publicintsub(intx,inty){returnx-y;}}publicclassApplication{publicstaticvoidmain(Stringargs[]){Comcom;com=newComImp();//com變量存放ComImp類(lèi)的對(duì)象的引用
intm=com.sub(8,2);//com回調(diào)ComImp類(lèi)實(shí)現(xiàn)的接口方法System.out.println(m);//輸出結(jié)果為6}}7.2.2面向抽象所謂面向抽象編程,是指當(dāng)設(shè)計(jì)一個(gè)類(lèi)時(shí),不讓該類(lèi)面向具體的類(lèi),而是面向抽象類(lèi)或接口,即所設(shè)計(jì)類(lèi)中的重要數(shù)據(jù)是抽象類(lèi)或接口聲明的變量,而不是具體類(lèi)聲明的變量。
◆
Circle.java,Pillar.java
publicclassCircle{doubler;Circle(doubler){this.r=r;}publicdoublegetArea(){return(3.14*r*r);}}publicclassPillar{
Circlebottom;doubleheight;Pillar(Circlebottom,doubleheight){this.bottom=bottom;this.height=height;}publicdoublegetVolume(){returnbottom.getArea()*height;//bottom可以調(diào)用子類(lèi)重寫(xiě)的getArea方法}}面向抽象重新設(shè)計(jì)Pillar類(lèi)。首先編寫(xiě)一個(gè)抽象類(lèi)Geometry(或接口),其中定義兩個(gè)一個(gè)抽象的getAre()方法。publicabstractclassGeometry{//如果使用接口需用interface來(lái)定義Geometry。publicabstractdoublegetArea();}接著重新設(shè)計(jì)Pillar類(lèi)以及Circle和Rectangle類(lèi)。publicclassPillar{
Geometrybottom;//bottom是抽象類(lèi)Geometry聲明的變量doubleheight;Pillar(Geometrybottom,doubleheight){this.bottom=bottom;this.height=height;}publicdoublegetVolume(){returnbottom.getArea()*height;//bottom可以調(diào)用子類(lèi)重寫(xiě)的getArea方法}}publicclassCircleextendsGeometry{doubler;Circle(doubler){this.r=r;}publicdoublegetArea(){return(3.14*r*r);}}publicclassRectangleextendsGeometry{doublea,b;Lader(doublea,doubleb){this.a=a;this.b=b;}publicdoublegetArea(){returna*b;}}publicclassApplication{publicstaticvoidmain(Stringargs[]){Pillarpillar;Geometrybottom;bottom=newRectangle(12,22,100);pillar=newPillar(bottom,58);
//pillar是具有矩形底的柱體System.out.println("矩形底的柱體
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 華山醫(yī)院職業(yè)暴露培訓(xùn)
- 知識(shí)產(chǎn)權(quán)行政保護(hù)課件
- 陳鶴琴活教育讀書(shū)分享
- 沖刺搶分卷01 備戰(zhàn)2025年高考考前仿真模擬卷沖刺搶分卷化學(xué)試題01 (遼寧、黑龍江、吉林、內(nèi)蒙古專(zhuān)用) 含解析
- 能發(fā)音的音標(biāo)教學(xué)課件
- 農(nóng)村農(nóng)田水利工程承包合同
- 食品營(yíng)養(yǎng)與加工技術(shù)案例分析題集
- 社交媒體營(yíng)銷(xiāo)策略考試題
- 行政管理2025年公共關(guān)系學(xué)的關(guān)鍵問(wèn)題
- 生物化學(xué)在醫(yī)藥領(lǐng)域的知識(shí)練習(xí)題
- 河北鋼鐵集團(tuán)礦業(yè)有限公司司家營(yíng)鐵礦礦山地質(zhì)環(huán)境保護(hù)與土地復(fù)墾方案評(píng)審意見(jiàn)書(shū)
- 國(guó)家開(kāi)放大學(xué)《Python語(yǔ)言基礎(chǔ)》實(shí)驗(yàn)2:基本數(shù)據(jù)類(lèi)型和表達(dá)式計(jì)算參考答案
- 員工關(guān)系管理專(zhuān)項(xiàng)職業(yè)能力考核規(guī)范cxy
- 2024統(tǒng)編本語(yǔ)文二年級(jí)下冊(cè)第四、第五單元測(cè)試題及答案(各一套)
- 美術(shù)學(xué)校工藝美術(shù)專(zhuān)業(yè)傳承和創(chuàng)新研究
- 多目標(biāo)粒子群優(yōu)化算法的改進(jìn)及應(yīng)用研究
- 兩家公司合作可行性方案
- 項(xiàng)目管理培訓(xùn)課程
- 數(shù)據(jù)庫(kù)性能優(yōu)化策略
- 糖尿病性周?chē)窠?jīng)病的護(hù)理查房
- 微電子機(jī)械系統(tǒng)(MEMS)傳感器電路
評(píng)論
0/150
提交評(píng)論