PHP與UML類圖: PHP and UML Class Diagram

UML(Unified Modeling Language, 統一建模語言)是一種通過圖的方式表示軟件的機制。本質上它允許我們通過畫圖來設計我們的程序,並且如果有相應的工具,我們甚至可以從圖來直接產生代碼。
類圖(class diagram)只是PHP的一部分,下面將介紹PHP代碼如何通過使用UML類圖的方式表現出來的。

1. 描述類


1.1. 普通類

<?php
class ShopProduct {
}


1.2. 抽象類

<?php
abstract class ShopProduct {
}


抽象類有兩種,約束定義或斜體類名,常用的是第二種,做筆記的話更傾向於第一種。

  

1.3. 接口

<?php
interface Chargeable {
}



2. 屬性

屬性前面的符號表示該屬性可見性(visibility)的級別或者是訪問控制

可見性符號

符號

可見性

說明

+

public

所有代碼都可訪問

-

private

只有當前類可以訪問

#

protected

只有當前類和它的子類可以訪問

可見性符號之後是屬性名。下面的類圖描述了ShopProduct::$price屬性。冒號用於分隔屬性名和它的類型及默認值(默認值爲可選項,可以不提供)。


3. 操作

操作(operation)用於描述類方法,更準備地說,用於描述可以在類的實例上調用的操作。

操作和屬性使用了相似的語法,可見性符號放在方法名之前。參數列表包含在括號之中。方法如果有返回類型的話,用冒號來描述。參數用逗號來分隔,並且遵守屬性語法,參數名和它的數據類型間用冒號分隔。

4. 描述繼承和實現

UML一般用“泛華”(generalization,也譯爲一般化)來描述繼承關係。這個關係用從子類到父類的一條線來標識,線的頂端有一個空心閉合箭頭。

<?php
class ShopProduct
{
}
class CdProduct extends ShopProduct
{
}
class BookProduct extends ShopProduct
{
}



UML用“實現”來描述接口和實現接口的類之間的關係。這個關係用從實現接口的類到接口類的一條虛線來標識,線的頂端是一個空心閉合箭頭。

<?php
interface Chargeable
{
    public function getPrice();
}
class ShopProduct implements Chargeable
{
    // ...
    public function getPrice()
    {
        return $this->price - $this->discount;
    }
    // ...
}
class CDProduct extends ShopProduct
{
}
class BookProduct extends ShopProduct
{
}




5. 聚合

聚合是關聯關係的一種特例,他體現的是整體與部分、擁有的關係,即has-a的關係,此時整體與部分之間是可分離的,他們可以具有各自的生命週期,部分可以屬於多個整體對象,也可以爲多個整體對象共享表現在代碼層面,和關聯關係是一致的,一般都是被關聯對象以屬性的方式出現在關聯對象中,只能從語義級別來區分

<?php
/**
 * 學生類
 */
class Pupil
{
    public $name;
}
/**
 * 班級類
 */
class SchoolClass
{
    private $_students = array();

    /**
     * 添加學生
     */
    public function addPupil(Pupil $student)
    {
        $this->_students[] = $student;
    }
}



6. 組合

組合也是關聯關係的一種特例,他體現的是一種contains-a的關係,這種關係比聚合更強,也稱爲強聚合;他同樣體現整體與部分間的關係,但此時整體與部分是不可分的,整體的生命週期結束也就意味着部分的生命週期結束;比如你和你的大腦;表現在代碼層面,和關聯關係是一致的,一般都是被關聯對象以屬性的方式出現在關聯對象中,只能從語義級別來區分。

<?php
/**
 * 社保數據
 */
class SocialSecurityData
{
}

/**
 * 自然人
 */
class Person
{
	public SocialSecurityData $p_social_security_data;

	/**
	 * 獲取人的信息
	 */
	public function getPerson($person_id)
	{
		//...
		$p_social_security_data = new SocialSecurityData($person_id);
		// ...
	}
}


未完,待續。。。

發佈了54 篇原創文章 · 獲贊 10 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章