java課件chapter 7 面向對象的幾個基本原則_第1頁
java課件chapter 7 面向對象的幾個基本原則_第2頁
java課件chapter 7 面向對象的幾個基本原則_第3頁
java課件chapter 7 面向對象的幾個基本原則_第4頁
java課件chapter 7 面向對象的幾個基本原則_第5頁
已閱讀5頁,還剩58頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

可視性(Visibility)標記表示:

+ 公共# 保護-私用可視性也可以用以下關鍵字表示:public(公共)、protected(保護)、private(私用)。若可視性標記為“+”或“public”,則為公共屬性,可以被外部對象訪問。若可視性標記為“#’或“protected”,則為保護屬性,可以被本類或子類的對象訪問。若可視性標記為“-”或“private”,則為私用屬性,不可以被外部對象訪問,只能為本類的對象使用。可視性可以缺省,表示該屬性不可視。Student類

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

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

參數名:類型=缺省值,…Student類返回列表是返回給調用者的單個變量值,它可以表示該操作程序運行的一個成功標志或者計算的值。7.1.2接口(Interface)表示接口的UML圖使用一個長方形描述一個接口的主要構成,將長方形垂直地分為三層。◆頂部第1層是名字層,用<<interface>>修飾名字。◆第2層是常量層,列出接口中的常量及類型,格式是“常量名字:類型”。

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

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

1)關聯關系關聯關系是指類之間的語義聯系。關聯可以具有如下特性:關聯名稱角色名稱多重性導航性多個類可以關聯到同一個類多重性:

多重性(mutiplicity)用來指示一個類的多少對象與另一個類的一個對象相關。可以在類關系的任何一端添加多重性,來指示出多重性,如下圖所示。多重性是一個數值或者數值范圍,用來指示一個類的幾個對象與另一個類的一個對象相關。如下圖所示。關聯的多重性角色

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

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

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

publicabstractclassA{publicabstractintadd(intx,inty);}publicclassBextendsA{publicintadd(intx,inty){returnx+y;}}publicclassApplication{publicstaticvoidmain(Stringargs[]){Aa;a=newB();//a是B類對象的上轉型對象intm=a.add(3,2);//a調用子類B重寫的add()方法System.out.println(m);//輸出結果為5}}接口(interface)具有如下特點:◆接口中只可以有public權限的abstract方法,不能有非abstract方法。◆接口由類去實現,即一個類如果實現一個接口,那么它必須重寫接口中的abstract方法。◆接口回調。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回調ComImp類實現的接口方法System.out.println(m);//輸出結果為6}}7.2.2面向抽象所謂面向抽象編程,是指當設計一個類時,不讓該類面向具體的類,而是面向抽象類或接口,即所設計類中的重要數據是抽象類或接口聲明的變量,而不是具體類聲明的變量。

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

Geometrybottom;//bottom是抽象類Geometry聲明的變量doubleheight;Pillar(Geometrybottom,doubleheight){this.bottom=bottom;this.height=height;}publicdoublegetVolume(){returnbottom.getArea()*height;//bottom可以調用子類重寫的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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論