自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

四大UML類(lèi)設(shè)計(jì)原則詳盡解讀

開(kāi)發(fā) 架構(gòu)
UML類(lèi)設(shè)計(jì)原則你是否熟悉,現(xiàn)在不少OO先驅(qū)提出了很多有關(guān)面向?qū)ο蟮脑O(shè)計(jì)原則用于指導(dǎo)OO的設(shè)計(jì)和開(kāi)發(fā)。本文就向大家介紹一下與UML類(lèi)設(shè)計(jì)相關(guān)的幾條原則。

本文和大家重點(diǎn)討論一下UML類(lèi)設(shè)計(jì)原則,主要包括開(kāi)閉原則,替換原則,依賴(lài)原則和接口分離原則四種,希望通過(guò)本文的學(xué)習(xí)你對(duì)UML類(lèi)設(shè)計(jì)原則有全面的認(rèn)識(shí)。

面向?qū)ο蟮脑O(shè)計(jì)原則-UML類(lèi)設(shè)計(jì)原則

在面向?qū)ο笤O(shè)計(jì)中,如何通過(guò)很小的設(shè)計(jì)改變就可以應(yīng)對(duì)設(shè)計(jì)需求的變化,這是令設(shè)計(jì)者極為關(guān)注的問(wèn)題。為此不少OO先驅(qū)提出了很多有關(guān)面向?qū)ο蟮脑O(shè)計(jì)原則用于指導(dǎo)OO的設(shè)計(jì)和開(kāi)發(fā)。下面是幾條與類(lèi)設(shè)計(jì)相關(guān)的設(shè)計(jì)原則。

1.開(kāi)閉原則(theOpenClosedPrincipleOCP)

UML類(lèi)設(shè)計(jì)原則中開(kāi)閉原則是指一個(gè)模塊在擴(kuò)展性方面應(yīng)該是開(kāi)放的而在更改性方面應(yīng)該是封閉的。因此在進(jìn)行面向?qū)ο笤O(shè)計(jì)時(shí)要盡量考慮接口封裝機(jī)制、抽象機(jī)制和多態(tài)技術(shù)。該原則同樣適合于非面向?qū)ο笤O(shè)計(jì)的方法,是軟件工程設(shè)計(jì)方法的重要原則之一。

我們以收音機(jī)的例子為例,講述面向?qū)ο蟮拈_(kāi)閉原則。我們收聽(tīng)節(jié)目時(shí)需要打開(kāi)收音機(jī)電源,對(duì)準(zhǔn)電臺(tái)頻率和進(jìn)行音量調(diào)節(jié)。但是對(duì)于不同的收音機(jī),實(shí)現(xiàn)這三個(gè)步驟的細(xì)節(jié)往往有所不同。比如自動(dòng)收縮電臺(tái)的收音機(jī)和按鈕式收縮在操作細(xì)節(jié)上并不相同。因此,我們不太可能針對(duì)每種不同類(lèi)型的收音機(jī)通過(guò)一個(gè)收音機(jī)類(lèi)來(lái)實(shí)現(xiàn)(通過(guò)重載)這些不同的操作方式。但是我們可以定義一個(gè)收音機(jī)接口,提供開(kāi)機(jī)、關(guān)機(jī)、增加頻率、降低頻率、增加音量、降低音量六個(gè)抽象方法。不同的收音機(jī)繼承并實(shí)現(xiàn)這六個(gè)抽象方法。這樣新增收音機(jī)類(lèi)型不會(huì)影響其它原有的收音機(jī)類(lèi)型,收音機(jī)類(lèi)型擴(kuò)展極為方便。此外,已存在的收音機(jī)類(lèi)型在修改其操作方法時(shí)也不會(huì)影響到其它類(lèi)型的收音機(jī)。

圖1是一個(gè)應(yīng)用OCP生成的收音機(jī)類(lèi)圖的例子:

 

圖1OCP應(yīng)用(收音機(jī))

2.替換原則(theLiskovSubstitutionPrincipleLSP)

子類(lèi)應(yīng)當(dāng)可以替換父類(lèi)并出現(xiàn)在父類(lèi)能夠出現(xiàn)的任何地方。UML類(lèi)設(shè)計(jì)原則中這個(gè)原則是Liskov于1987年提出的設(shè)計(jì)原則。它同樣可以從BertrandMeyer的DBC(DesignbyContract)的概念推出。

我們以學(xué)生為例,夜校生為學(xué)生的子類(lèi),因此在任何學(xué)生可以出現(xiàn)的地方,夜校生均可出現(xiàn)。這個(gè)例子有些牽強(qiáng),一個(gè)能夠反映這個(gè)原則的例子時(shí)圓和橢圓,圓是橢圓的一個(gè)特殊子類(lèi)。因此任何出現(xiàn)橢圓的地方,圓均可以出現(xiàn)。但反過(guò)來(lái)就可能行不通。

Liskov的相關(guān)圖示見(jiàn)圖2:

 

圖2Liskov原則

運(yùn)用替換原則時(shí),我們盡量把類(lèi)B設(shè)計(jì)為抽象類(lèi)或者接口,讓C類(lèi)繼承類(lèi)B(接口B)并實(shí)現(xiàn)操作A和操作B,運(yùn)行時(shí),類(lèi)C實(shí)例替換B,這樣我們即可進(jìn)行新類(lèi)的擴(kuò)展(繼承類(lèi)B或接口B),同時(shí)無(wú)須對(duì)類(lèi)A進(jìn)行修改。#p#

3.依賴(lài)原則(theDependencyInversionPrincipleDIP)

在進(jìn)行業(yè)務(wù)設(shè)計(jì)時(shí),與特定業(yè)務(wù)有關(guān)的依賴(lài)關(guān)系應(yīng)該盡量依賴(lài)接口和抽象類(lèi),而不是依賴(lài)于具體類(lèi)。具體類(lèi)只負(fù)責(zé)相關(guān)業(yè)務(wù)的實(shí)現(xiàn),修改具體類(lèi)不影響與特定業(yè)務(wù)有關(guān)的依賴(lài)關(guān)系。

在結(jié)構(gòu)化設(shè)計(jì)中,我們可以看到底層的模塊是對(duì)高層抽象模塊的實(shí)現(xiàn)(高層抽象模塊通過(guò)調(diào)用底層模塊),這說(shuō)明,抽象的模塊要依賴(lài)具體實(shí)現(xiàn)相關(guān)的模塊,底層模塊的具體實(shí)現(xiàn)發(fā)生變動(dòng)時(shí)將會(huì)嚴(yán)重影響高層抽象的模塊,顯然這是結(jié)構(gòu)化方法的一個(gè)"硬傷"。

面向?qū)ο蠓椒ǖ囊蕾?lài)關(guān)系剛好相反,具體實(shí)現(xiàn)類(lèi)依賴(lài)于抽象類(lèi)和接口(見(jiàn)圖-3)。

為此,我們?cè)谶M(jìn)行業(yè)務(wù)設(shè)計(jì)時(shí),應(yīng)盡量在接口或抽象類(lèi)中定義業(yè)務(wù)方法的原型,并通過(guò)具體的實(shí)現(xiàn)類(lèi)(子類(lèi))來(lái)實(shí)現(xiàn)該業(yè)務(wù)方法,業(yè)務(wù)方法內(nèi)容的修改將不會(huì)影響到運(yùn)行時(shí)業(yè)務(wù)方法的調(diào)用。

 

圖3依賴(lài)原則圖示

4.接口分離原則(theInterfaceSegregationPrincipleISP)

采UML類(lèi)設(shè)計(jì)原則中用多個(gè)與特定客戶類(lèi)有關(guān)的接口比采用一個(gè)通用的涵蓋多個(gè)業(yè)務(wù)方法的接口要好。

ISP原則是另外一個(gè)支持諸如COM等組件化的使能技術(shù)。缺少I(mǎi)SP,組件、類(lèi)的可用性和移植性將大打折扣。

這個(gè)原則的本質(zhì)相當(dāng)簡(jiǎn)單。如果你擁有一個(gè)針對(duì)多個(gè)客戶的類(lèi),為每一個(gè)客戶創(chuàng)建特定業(yè)務(wù)接口,然后使該客戶類(lèi)繼承多個(gè)特定業(yè)務(wù)接口將比直接加載客戶所需所有方法有效。

圖4展示了一個(gè)擁有多個(gè)客戶的類(lèi)。它通過(guò)一個(gè)巨大的接口來(lái)服務(wù)所有的客戶。只要針對(duì)客戶A的方法發(fā)生改變,客戶B和客戶C就會(huì)受到影響。因此可能需要進(jìn)行重新編譯和發(fā)布。這是一種不幸的做法。

 

圖4帶有集成接口的服務(wù)類(lèi)

我們?cè)倏磮D-5中所展示的技術(shù)。每個(gè)特定客戶所需的方法被置于特定的接口中,這些接口被Service類(lèi)所繼承并實(shí)現(xiàn)。

 

圖5使用接口分離的服務(wù)類(lèi)設(shè)計(jì)

如果針對(duì)客戶A的方法發(fā)生改變,客戶B和客戶C并不會(huì)受到任何影響,也不需要進(jìn)行再次編譯和重新發(fā)布。

以上四個(gè)UML類(lèi)設(shè)計(jì)原則是面向?qū)ο笾谐3S玫降脑瓌t。此外,除上述四原則外,還有一些常用的經(jīng)驗(yàn)諸如類(lèi)結(jié)構(gòu)層次以三到四層為宜、類(lèi)的職責(zé)明確化(一個(gè)類(lèi)對(duì)應(yīng)一個(gè)具體職責(zé))等可供我們?cè)谶M(jìn)行面向?qū)ο笤O(shè)計(jì)參考。但就上面的幾個(gè)原則看來(lái),我們看到這些類(lèi)在幾何分布上呈現(xiàn)樹(shù)型拓?fù)涞年P(guān)系,這是一種良好、開(kāi)放式的線性關(guān)系、具有較低的設(shè)計(jì)復(fù)雜度。一般說(shuō)來(lái),在軟件設(shè)計(jì)中我們應(yīng)當(dāng)盡量避免出現(xiàn)帶有閉包、循環(huán)的設(shè)計(jì)關(guān)系,它們反映的是較大的耦合度和設(shè)計(jì)復(fù)雜化。

【編輯推薦】

  1. 技術(shù)分享 UML類(lèi)圖建模技術(shù)揭秘
  2. UML解惑:圖說(shuō)六大UML類(lèi)圖關(guān)系
  3. 深入剖析四大UML類(lèi)圖依賴(lài)關(guān)系
  4. 五大UML建模工具免費(fèi)體驗(yàn)
  5. UML類(lèi)圖關(guān)系中關(guān)聯(lián) 聚合 依賴(lài)關(guān)系及其區(qū)別


 

責(zé)任編輯:佚名 來(lái)源: csdn.net
相關(guān)推薦

2010-07-07 11:02:47

UML類(lèi)圖關(guān)系

2010-07-05 09:34:45

UML類(lèi)關(guān)系圖

2010-07-02 14:34:53

UML類(lèi)圖

2010-06-18 14:43:28

UML關(guān)系圖

2010-07-05 09:48:00

UML類(lèi)關(guān)系圖

2010-07-08 15:56:52

UML類(lèi)圖依賴(lài)關(guān)系

2024-11-22 14:28:00

2010-06-30 10:16:56

UML建模

2010-07-05 11:12:43

常用UML圖

2019-06-05 13:00:36

2010-07-06 10:30:58

UML關(guān)系圖

2010-07-09 14:28:59

UML組成

2015-07-23 17:01:53

app設(shè)計(jì)四大原則

2012-02-01 13:24:37

2010-07-01 14:13:51

UML時(shí)序圖

2013-09-17 09:55:58

企業(yè)PC

2010-07-12 13:56:33

UML圖形

2011-07-07 08:53:15

真相TitaniumPhoneGap

2015-07-17 09:50:16

Carthage優(yōu)劣比較

2010-06-29 15:54:36

UML建模
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)