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);
// ...
}
}
未完,待續。。。