18.1.1、面向抽象原則
抽象類特點: a、抽象類中可以有abstract方法,也可以有非abstract方法。 b、抽象類不能用new運算符建立對象。 c、如果一個非抽象類是某個抽象類的子類,那麼它必須重寫父類的abstract方法,即在子類中将abstract方法重新聲明,但必須去掉abstract修飾符,同時要保證聲明的方法名字、傳回類型、參數個數和類型與父類的abstract方法完全相同。 d、作為上轉型對象。盡管抽象類不能用new運算符建立對象,但其非abstract子類必須要重寫全部abstract方法,這樣一來,就可以讓抽象類聲明的對象成為其子類對象的上轉型對象,并調用子類重寫的方法。 接口特點: a、接口中隻可以有public權限的abstract方法,不能有非abstract方法。 b、接口由類去實作,即一個類如果實作一個接口,那麼它必須重寫接口中的abstract方法,即将abstract方法重新聲明,但必須去掉abstract修飾符,同時要保證聲明的方法名字、傳回類型、參數個數和接口中的方法完全相同。 c、接口回調。接口回調是指可以把實作接口的類的對象的引用賦給該接口聲明的接口變量中,那麼該接口變量就可以調用被類實作的接口中的方法,當接口變量調用被類實作的接口中的方法時,就是通知相應的對象調用接口的方法,這一過程稱為對象方法的接口回調。 面向對象程式設計:當設計一個類時,不讓該類面向具體的類,而是面向抽象類或接口,即所設計類中的重要資料是抽象類或接口聲明的變量,而不是具體類聲明的變量。
18.1.2、開—閉原則
所謂“開—閉原則”(open-closed principle)就是讓設計對擴充開放,對修改關閉,即:當一個設計中增加新的子產品時,不需要修改現有的子產品。在給出一個設計時,應當首先考慮到使用者需求的變化,将應對使用者變化的部分設計為對擴充開放,而設計的核心部分是經過精心考慮之後确定下來的基本結構,這部分應當是對修改關閉的,即不能因為使用者的需求變化而再發生變化,因為這部分不是用來應對需求變化的。
18.1.3、多用組合少用繼承原則
繼承與複用:子類繼承父類的方法作為自己的一個方法,就好像它們是在子類中直接聲明一樣,可以被子類中自己聲明的任何執行個體方法調用。即:父類方法可以被子類以繼承的方式複用。 繼承複用優點:子類可以重寫父類方法,易于修改或擴充被複用的方法。 繼承複用缺點:1)子類從父類繼承的方法在編譯時就确定下來了,是以無法在運作期間改變從父類繼承的方法的行為;2)子類和父類的關系是強耦合關系,即當父類的方法的行為更改時,必然導緻子類發生變化;3)通過繼承進行複用也稱“白盒”複用,其缺點是父類的内部細節對于子類而言是可見的。 組合與複用:對象可以将其它對象作為自己的組成部分(Has-A),如果一個對象a組合了對象b,那麼對象a就可以委托對象b調用其方法,即對象a以組合的方式複用對象b的方法。 組合複用優點:1)通過組合對象來複用方法也稱為“黑盒”複用,目前對象所包含對象方法的細節對目前對象是不可見的;2)對象與所包含的對象屬于弱耦合關系,如果修改目前對象所包含對象類的代碼,不必修改目前對象類的代碼;3)目前對象可以在運作時動态指定所包含的對象。 組合複用缺點:1)容易導緻系統中的對象過多;2)為了能組合多個對象,必須仔細地對接口進行定義。
18.1.4、高内聚-低耦合原則
如果類中有方法是一組相關的行為,則稱該類是高内聚的,反之稱為低内聚的。
18.2.1、類
在用UML表示類時,可以根據設計的需要隻列出最重要的成員變量的名字。如果變量的通路權限是public的,需要在變量的名字前面用“+”符号修飾;如果變量的通路權限是protected的,需要在變量的名字前面用“#”符号修飾;如果變量的通路權限是private的,需要在變量的名字前面用“—”符号修飾;如果變量的通路權限是友好的,變量的名字前面不使用符号修飾。
18.2.2、接口
頂部第1層是名字層,接口的名字必須是斜體字形,而且需要《interface》修飾名字,并且該修飾和名字分開在2行。第2層是常量層,列出接口中的常量及類型,格式是:“常量名字:類型”,在Java接口中,常量的通路權限都是public的。第3層是方法層,也稱操作層,列出接口中的方法及傳回類型,格式是“方法名字(參數清單):類型”,在Java接口中,方法的通路權限都是public的。
18.2.3、泛化關系(類的繼承關系)
18.2.4、關聯關系:A類中的成員變量是用B類(接口)來聲明的,那麼A和B的關系是關聯關系。
18.2.5、依賴關系:如果A類中某個方法的參數是用B類(接口)來聲明的變量或某個方法傳回的資料類型是B類型的,那麼A和B的關系是依賴關系,稱A依賴于B。
18.2.6、實作關系:如果一個類實作了一個接口,那麼類和接口的關系是實作關系,稱為實作接口。
18.2.7、注釋:UML使用注釋為類圖提供附加的說明。