久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

UML類圖詳解

 waston 2018-08-24

UML類圖是一種結(jié)構(gòu)圖,,用于描述一個(gè)系統(tǒng)的靜態(tài)結(jié)構(gòu)。類圖以反映類結(jié)構(gòu)類之間關(guān)系為目的,,用以描述軟件系統(tǒng)的結(jié)構(gòu),,是一種靜態(tài)建模方法,。類圖中的類,,與面向?qū)ο笳Z言中的類的概念是對(duì)應(yīng)的

1 類結(jié)構(gòu)

在類的UML圖中,,使用長方形描述一個(gè)類的主要構(gòu)成,,長方形垂直地分為三層,以此放置類的名稱,、屬性方法,。

其中,

一般類的類名用正常字體粗體表示,,如上圖,;抽象類名用斜體字粗體,如User,;接口則需在上方加上<>,。

屬性和方法都需要標(biāo)注可見性符號(hào),+代表public,,#代表protected,,-代表private

另外,,還可以用冒號(hào):表明屬性的類型和方法的返回類型,,如+$name:string+getName():string,。當(dāng)然,,類型說明并非必須。

2 類關(guān)系

類與類之間的關(guān)系主要有六種:繼承實(shí)現(xiàn),、組合,、聚合關(guān)聯(lián)依賴,,這六種關(guān)系的箭頭表示如下,,

接著我們來了解類關(guān)系的具體內(nèi)容。

3 六種類關(guān)系

六種類關(guān)系中,,組合,、聚合關(guān)聯(lián)這三種類關(guān)系的代碼結(jié)構(gòu)一樣,,都是用屬性來保存另一個(gè)類的引用,,所以要通過內(nèi)容間的關(guān)系來區(qū)別。

3.1 繼承

繼承關(guān)系也稱泛化關(guān)系(Generalization),,用于描述父類與子類之間的關(guān)系,。父類又稱作基類,子類又稱作派生類,。

繼承關(guān)系中,,子類繼承父類的所有功能,父類所具有的屬性,、方法,,子類應(yīng)該都有。子類中除了與父類一致的信息以外,,還包括額外的信息,。

例如:公交車、出租車和小轎車都是汽車,,他們都有名稱,,并且都能在路上行駛。

PHP代碼實(shí)現(xiàn)如下:

name = '公交車';
    }
}

class Taxi extends Car
{
    public function __construct()
    {
        $this->name = '出租車';
    }
}

// 客戶端代碼
$line2 = new Bus;
echo $line2->name . $line2->run();

3.2 實(shí)現(xiàn)

實(shí)現(xiàn)關(guān)系(Implementation),,主要用來規(guī)定接口和實(shí)現(xiàn)類的關(guān)系,。

接口(包括抽象類)是方法的集合,在實(shí)現(xiàn)關(guān)系中,,類實(shí)現(xiàn)了接口,,類中的方法實(shí)現(xiàn)了接口聲明的所有方法。

例如:汽車和輪船都是交通工具,,而交通工具只是一個(gè)可移動(dòng)工具的抽象概念,,船和車實(shí)現(xiàn)了具體移動(dòng)的功能。 實(shí)現(xiàn)關(guān)系

name . '在路上行駛';
    }
}

class Ship implements Vehicle
{
    public $name = '輪船';
    public function run()
    {
        return $this->name . '在海上航行';
    }
}

// 客戶端代碼
$car = new Car;
echo $car->run();

3.3 組合關(guān)系

組合關(guān)系(Composition):整體與部分的關(guān)系,,但是整體與部分不可以分開,。

組合關(guān)系表示類之間整體與部分的關(guān)系,,整體和部分有一致的生存期。一旦整體對(duì)象不存在,,部分對(duì)象也將不存在,,是同生共死的關(guān)系。

例如:人由頭部和身體組成,,兩者不可分割,,共同存在。
組合關(guān)系
head = $head;
    }

    public function setBody(Body $body)
    {
        $this->body = $body;
    }

    public function display()
    {
        return sprintf('人由%s和%s組成', $this->head->name, $this->body->name);
    }
}

// 客戶端代碼
$man = new Human();
$man->setHead(new Head());
$man->setBody(new Body());
echo $man->display();

3.4 聚合關(guān)系

聚合關(guān)系(Aggregation):整體和部分的關(guān)系,,整體與部分可以分開,。

聚合關(guān)系也表示類之間整體與部分的關(guān)系,成員對(duì)象是整體對(duì)象的一部分,,但是成員對(duì)象可以脫離整體對(duì)象獨(dú)立存在,。

例如:公交車司機(jī)和工衣、工帽是整體與部分的關(guān)系,,但是可以分開,,工衣、工帽可以穿在別的司機(jī)身上,,公交司機(jī)也可以穿別的工衣,、工帽。

clothes = $clothes;
    }

    public function wearHat(Hat $hat)
    {
        $this->hat = $hat;
    }

    public function show()
    {
        return sprintf('公交車司機(jī)穿著%s和%s', $this->clothes->name, $this->hat->name);
    }
}

// 客戶端代碼
$driver = new Driver();
$driver->wearClothes(new Clothes());
$driver->wearHat(new Hat());
echo $driver->show();

3.5 關(guān)聯(lián)關(guān)系

關(guān)聯(lián)關(guān)系(Association):表示一個(gè)類的屬性保存了對(duì)另一個(gè)類的一個(gè)實(shí)例(或多個(gè)實(shí)例)的引用,。

關(guān)聯(lián)關(guān)系是類與類之間最常用的一種關(guān)系,,表示一類對(duì)象與另一類對(duì)象之間有聯(lián)系。組合,、聚合也屬于關(guān)聯(lián)關(guān)系,只是關(guān)聯(lián)關(guān)系的類間關(guān)系比其他兩種要弱,。

關(guān)聯(lián)關(guān)系有四種:雙向關(guān)聯(lián),、單向關(guān)聯(lián)自關(guān)聯(lián),、多重?cái)?shù)關(guān)聯(lián),。

例如:汽車和司機(jī),一輛汽車對(duì)應(yīng)特定的司機(jī),,一個(gè)司機(jī)也可以開多輛車,。

在UML圖中,雙向的關(guān)聯(lián)可以有兩個(gè)箭頭或者沒有箭頭,,單向的關(guān)聯(lián)或自關(guān)聯(lián)有一個(gè)箭頭,。上圖對(duì)應(yīng)的PHP代碼如下:

cars[] = $car;
    }
}

class Car
{
    public $drivers = array();
    public function addDriver(Driver $driver)
    {
        $this->drivers[] = $driver;
    }
}

// 客戶端代碼
$jack = new Driver();
$line1 = new Car();
$jack->addCar($line1);
$line1->addDriver($jack);
print_r($jack);

在多重性關(guān)系中,可以直接在關(guān)聯(lián)直線上增加一個(gè)數(shù)字,,表示與之對(duì)應(yīng)的另一個(gè)類的對(duì)象的個(gè)數(shù),。

  • 1..1:僅一個(gè)
  • 0..*:零個(gè)或多個(gè)
  • 1..*:一個(gè)或多個(gè)
  • 0..1:沒有或只有一個(gè)
  • m..n:最少m、最多n個(gè) (m<=n)

3.6 依賴關(guān)系

依賴關(guān)系(Dependence):假設(shè)A類的變化引起了B類的變化,則說名B類依賴于A類,。

大多數(shù)情況下,,依賴關(guān)系體現(xiàn)在某個(gè)類的方法使用另一個(gè)類的對(duì)象作為參數(shù)

依賴關(guān)系是一種“使用”關(guān)系,,特定事物的改變有可能會(huì)影響到使用該事物的其他事物,,在需要表示一個(gè)事物使用另一個(gè)事物時(shí)使用依賴關(guān)系。

例如:汽車依賴汽油,,如果沒有汽油,,汽車將無法行駛。
依賴關(guān)系
type;
    }
}

class Car
{
    public function beforeRun(Oil $oil)
    {
        return '添加' . $oil->add();
    }
}

// 客戶端代碼
$car = new Car;
echo $car->beforeRun(new Oil());

4 總結(jié)

這六種類關(guān)系中,,組合,、聚合和關(guān)聯(lián)的代碼結(jié)構(gòu)一樣,可以從關(guān)系的強(qiáng)弱來理解,,各類關(guān)系從強(qiáng)到弱依次是:繼承→實(shí)現(xiàn)→組合→聚合→關(guān)聯(lián)→依賴,。如下是完整的一張UML關(guān)系圖。

(點(diǎn)擊圖片查看大圖)

UML類圖是面向?qū)ο笤O(shè)計(jì)的輔助工具,,但并非是必須工具,,如果暫時(shí)不理解本文的內(nèi)容,可以繼續(xù)看設(shè)計(jì)模式部分,,并不會(huì)影響,。

說明:本文所有UML類圖均使用免費(fèi)的UMLet工具,在比較了Viso和StartUML后,,感覺UMLet要好用很多,,強(qiáng)烈推薦使用。另外,,本文所有的UML類圖源文件請(qǐng)點(diǎn)里下載,。

參考資料:

  1. UML圖中類之間的關(guān)系:依賴,泛化,關(guān)聯(lián),聚合,組合,實(shí)現(xiàn)
  2. PHP程序員如何理解依賴注入容器(dependency injection container)
  3. php 組合模式
  4. UML類圖畫法及其之間的幾種關(guān)系

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多