java課件chapter 7 面向?qū)ο蟮膸讉€基本原則_第1頁
java課件chapter 7 面向?qū)ο蟮膸讉€基本原則_第2頁
java課件chapter 7 面向?qū)ο蟮膸讉€基本原則_第3頁
java課件chapter 7 面向?qū)ο蟮膸讉€基本原則_第4頁
java課件chapter 7 面向?qū)ο蟮膸讉€基本原則_第5頁
已閱讀5頁,還剩58頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Java語言程序設(shè)計shelly200607@126.comUML類圖簡介面向抽象原則開-閉原則多用組合少用繼承原則高內(nèi)聚-低耦合原則主要內(nèi)容7.1UML類圖簡介UML(UnifiedModelingLanguage)類圖(ClassDiagram)屬于結(jié)構(gòu)圖,常被用于描述一個系統(tǒng)的靜態(tài)結(jié)構(gòu)。類圖是由若干類關(guān)聯(lián)在一起,反映系統(tǒng)或者子系統(tǒng)組成結(jié)構(gòu)的靜態(tài)圖。類圖的建模貫穿工程的分析和設(shè)計階段的始終,通常從用戶能夠理解的類開始建模,最終往往成為只有開發(fā)小組才能夠完全理解的類。類圖由如下元素組成:類(Class):是具有共同結(jié)構(gòu)特征、行為特征、聯(lián)系和語義的對象集合的抽象形式。關(guān)聯(lián)(Association):它表示類與類之間的關(guān)系。在類的UML圖中,使用一個長方形描述一個類的主要構(gòu)成,將長方形垂直地分為三層?!舻?層是名字層◆第2層是變量層,也稱屬性層,列出類的成員變量及類型,格式是“變量名字:類型”?!舻?層是方法層,也稱操作層,列出類的方法及返回類型,格式是“方法名字(參數(shù)列表):類型”。7.1.1類的UML圖在類圖中,根據(jù)建模的不同景象,類圖標(biāo)中不一定列出全部的內(nèi)容。如在建立分析模型或設(shè)計模型時,甚至可以只列出類名,在圖中著重表達(dá)的是類與類之間的聯(lián)系;在建立實(shí)現(xiàn)模型時,則應(yīng)當(dāng)在類圖標(biāo)中詳細(xì)給出類的屬性和方法等細(xì)節(jié)。1.屬性

屬性(Attribute)在UML類圖標(biāo)的矩形框中用文字串說明,如下圖所示。

可視性(Visibility)標(biāo)記表示:

+ 公共# 保護(hù)-私用可視性也可以用以下關(guān)鍵字表示:public(公共)、protected(保護(hù))、private(私用)。若可視性標(biāo)記為“+”或“public”,則為公共屬性,可以被外部對象訪問。若可視性標(biāo)記為“#’或“protected”,則為保護(hù)屬性,可以被本類或子類的對象訪問。若可視性標(biāo)記為“-”或“private”,則為私用屬性,不可以被外部對象訪問,只能為本類的對象使用??梢曅钥梢匀笔?,表示該屬性不可視。Student類

屬性類型表示:冒號“:”后跟屬性值的數(shù)據(jù)類型。數(shù)據(jù)類型的表示依賴于實(shí)現(xiàn)語言,如有的程序設(shè)計語言規(guī)定浮點(diǎn)數(shù)用保留字“Float”表示,有的則規(guī)定用保留字“Real”表示。Student類數(shù)據(jù)類型可以是任何用戶需要的內(nèi)容,包括:來自程序設(shè)計語言如VisualBasic、C++、C#和Java的任何標(biāo)準(zhǔn)數(shù)據(jù)類型。一個已經(jīng)定義的類。接口定義語言(InterfaceDefinitionLanguage,IDL)中的數(shù)據(jù)類型列表中的數(shù)據(jù)類型。讀者在自己的系統(tǒng)建模中能夠使用的其他類型。屬性初始值設(shè)置:可以通過在屬性名稱和數(shù)據(jù)類型之后添加等于號(=)來為屬性指定默認(rèn)值,如下圖所示。屬性多重性:多重性為可選項,它表達(dá)該類的每個實(shí)例的屬性值的個數(shù)??梢韵駪?yīng)用于類之間的關(guān)系中那樣把多重性應(yīng)用于屬性。例如,Student類具有屬性Grades。不希望該屬性只包含單個值,而是希望它包含該學(xué)生的所有成績,可以是任意多個。派生的屬性:另一種可以為屬性提供的信息是派生值,它可以使用數(shù)學(xué)函數(shù)、字符串函數(shù)或者將要在應(yīng)用程序中實(shí)現(xiàn)的其他商務(wù)邏輯。要想指出一個屬性是派生的,需要在屬性名之前添加一個前斜線(/),并且要附加一個注釋,其中包含了派生屬性值的指令,如下圖所示。2.操作(方法)

操作(Operation)表示類能夠提供的功能服務(wù)。它在UML類矩形框中用文字串說明,如下圖所示。操作名指示類可提供的功能服務(wù),它后跟圓括號中的參數(shù)列表是可選項,即一個操作可以有參數(shù),也可以沒有參數(shù)。參數(shù)列表由逗號分隔的操作的形式參數(shù)組成,其格式為:

參數(shù)名:類型=缺省值,…Student類返回列表是返回給調(diào)用者的單個變量值,它可以表示該操作程序運(yùn)行的一個成功標(biāo)志或者計算的值。7.1.2接口(Interface)表示接口的UML圖使用一個長方形描述一個接口的主要構(gòu)成,將長方形垂直地分為三層?!繇敳康?層是名字層,用<<interface>>修飾名字?!舻?層是常量層,列出接口中的常量及類型,格式是“常量名字:類型”。

◆第3層是方法層,也稱操作層,列出接口中的方法及返回類型,格式是“方法名字(參數(shù)列表):類型”。

類的關(guān)系類之間可以建立四種關(guān)系:泛化、關(guān)聯(lián)、依賴和實(shí)現(xiàn)。其標(biāo)記如下圖所示。如果一個類是另一個類的子類,那么UML通過使用一個實(shí)線連接兩個類的UML圖來表示二者之間的繼承關(guān)系。如果A類中成員變量是用B類(接口)來聲明的變量,那么A和B的關(guān)系是關(guān)聯(lián)關(guān)系,稱A關(guān)聯(lián)于B。實(shí)現(xiàn)關(guān)系如果A類中某個方法的參數(shù)用B類(接口)來聲明的變量或某個方法返回的數(shù)據(jù)類型是B類型的,那么A和B的關(guān)系是依賴關(guān)系,稱A依賴于B。如果一個類實(shí)現(xiàn)了一個接口,那么類和接口的關(guān)系是實(shí)現(xiàn)關(guān)系,稱類實(shí)現(xiàn)接口7.1.7注釋(Annotation)UML使用注釋為類圖提供附加的說明。UML在一個帶卷角的長方形中顯示給出的注釋,并使用虛線將這個帶卷角的長方形和所它所注釋的實(shí)體連接起來。

1)關(guān)聯(lián)關(guān)系關(guān)聯(lián)關(guān)系是指類之間的語義聯(lián)系。關(guān)聯(lián)可以具有如下特性:關(guān)聯(lián)名稱角色名稱多重性導(dǎo)航性多個類可以關(guān)聯(lián)到同一個類多重性:

多重性(mutiplicity)用來指示一個類的多少對象與另一個類的一個對象相關(guān)??梢栽陬愱P(guān)系的任何一端添加多重性,來指示出多重性,如下圖所示。多重性是一個數(shù)值或者數(shù)值范圍,用來指示一個類的幾個對象與另一個類的一個對象相關(guān)。如下圖所示。關(guān)聯(lián)的多重性角色

類關(guān)系還可以通過添加角色來進(jìn)一步豐富。在類圖中使用角色可以幫助讀者理解第一個類對于第二個類的作用。角色與多重性顯示在相同的位置,在指示類之間關(guān)系線的上面或者下面,如下圖所示。下圖顯示了player類和Team類在關(guān)聯(lián)中分別扮演兩個角色。關(guān)聯(lián)的限定關(guān)聯(lián)的限定

類的關(guān)聯(lián)還可以通過限定條件來明確類之間的關(guān)系。如下圖所示。類的自反關(guān)聯(lián)自反關(guān)聯(lián):

類具有到自身的關(guān)聯(lián),稱為自反關(guān)聯(lián)。2聚集聚集也稱為聚合,是關(guān)聯(lián)的特例。聚集表示一類對象與另一類對象之間的關(guān)系,是整體與部分的關(guān)系。在陳述需求時使用的“包含”、“組成”、“分為……部分”等字句,往往意味著存在聚集關(guān)系。除了一般的聚集關(guān)系之外,還有兩種特殊的聚集關(guān)系,分別稱為共享聚集和復(fù)合聚集。圖9.10共享聚集示例①共享聚集如果在聚集關(guān)系中處于部分方的對象可以同時參與多個處于整體方對象的構(gòu)成,則該聚集稱為共享聚集。①共享聚集②組合聚集如果部分類對象完全隸屬于整體類對象,部分與整體共存,整體不存在了部分也會隨之消失(或失去存在價值了),則該聚集稱為組合聚集。②組合聚集練習(xí):建模聚合關(guān)聯(lián)和組合關(guān)聯(lián)在這個練習(xí)中,將會使用目前為止學(xué)習(xí)到的所有類型的關(guān)系來創(chuàng)建一個類圖,這些關(guān)系包括普通關(guān)聯(lián)、泛化、聚合和組合。讀者將會綜合運(yùn)用自己的知識從需求構(gòu)造一個類圖。下面是一個制造商和維修店使用的存貨清單系統(tǒng)的需求列表,從這些信息構(gòu)造一個類圖:存貨由兩個部分組成(零件和產(chǎn)品)。產(chǎn)品由兩個或者更多零件組成,系統(tǒng)可以擁有無限多個零件和產(chǎn)品。存貨中的部分零件包括調(diào)速輪、輪齒和加力燃燒室。一名倉庫保管員維護(hù)貨存。一名裝配工組裝產(chǎn)品,一名維修員維修產(chǎn)品。完成的產(chǎn)品包括1-3個標(biāo)簽:Manufacturer標(biāo)簽指示產(chǎn)品已經(jīng)完成;Repair標(biāo)簽指示產(chǎn)品已經(jīng)檢修過;FCC標(biāo)簽指示產(chǎn)品中包含加力燃燒室。練習(xí)設(shè)計一組幾何對象類圖。組中父類為“幾何單項”,由之衍生“線”、“圓”、“方”,“橢圓”、“多邊形”、“點(diǎn)”等類。幾何單項多邊形圓矩形橢圓線點(diǎn)幾何單項多邊形圓矩形橢圓線點(diǎn)11..*{有序}7.2面向抽象原則7.2.1抽象類和接口抽象(abstract)類具有如下特點(diǎn):◆抽象類中可以有abstract方法,也可以有非abstract方法。◆抽象類不能用new運(yùn)算符創(chuàng)建對象?!羧绻粋€非抽象類是某個抽象類的子類,那么它必須重寫父類的abstract方法?!舫橄箢惵暶鞯膶ο笞錾限D(zhuǎn)型對象。A.java,B.java,Application.java

publicabstractclassA{publicabstractintadd(intx,inty);}publicclassBextendsA{publicintadd(intx,inty){returnx+y;}}publicclassApplication{publicstaticvoidmain(Stringargs[]){Aa;a=newB();//a是B類對象的上轉(zhuǎn)型對象intm=a.add(3,2);//a調(diào)用子類B重寫的add()方法System.out.println(m);//輸出結(jié)果為5}}接口(interface)具有如下特點(diǎn):◆接口中只可以有public權(quán)限的abstract方法,不能有非abstract方法?!艚涌谟深惾?shí)現(xiàn),即一個類如果實(shí)現(xiàn)一個接口,那么它必須重寫接口中的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類的對象的引用

intm=com.sub(8,2);//com回調(diào)ComImp類實(shí)現(xiàn)的接口方法System.out.println(m);//輸出結(jié)果為6}}7.2.2面向抽象所謂面向抽象編程,是指當(dāng)設(shè)計一個類時,不讓該類面向具體的類,而是面向抽象類或接口,即所設(shè)計類中的重要數(shù)據(jù)是抽象類或接口聲明的變量,而不是具體類聲明的變量。

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)用子類重寫的getArea方法}}面向抽象重新設(shè)計Pillar類。首先編寫一個抽象類Geometry(或接口),其中定義兩個一個抽象的getAre()方法。publicabstractclassGeometry{//如果使用接口需用interface來定義Geometry。publicabstractdoublegetArea();}接著重新設(shè)計Pillar類以及Circle和Rectangle類。publicclassPillar{

Geometrybottom;//bottom是抽象類Geometry聲明的變量doubleheight;Pillar(Geometrybottom,doubleheight){this.bottom=bottom;this.height=height;}publicdoublegetVolume(){returnbottom.getArea()*height;//bottom可以調(diào)用子類重寫的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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論