UML类图看这篇文章就够了

栏目: 编程工具 · 发布时间: 6年前

内容简介:UML类图用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。所以建议大家可以学习一波UML类图,对于自己,可以理清楚自己设计的系统中类与类之间关系。对于其他人,只需要观看你的UML类图就能理解你的设计思路。可见性:公有(public) “+”

UML类图用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。所以建议大家可以学习一波UML类图,对于自己,可以理清楚自己设计的系统中类与类之间关系。对于其他人,只需要观看你的UML类图就能理解你的设计思路。

UML类图可见性符号的表示

可见性:

公有(public) “+”

受保护(protected) “#”

私有(private) “-”

类与类之间的关系主要有六中:继承、实现、组合、聚合、关联和依赖,这六种关系的箭头表示都不一样

UML类图看这篇文章就够了

继承关系

继承:继承指的是建立一个新的派生类,从一个或多个先前定义的类中继承数据和函数,可以重新定义或加进新数据和函数,从而建立了类的层次或等级。

UML类图看这篇文章就够了
<?php
class A
{
    public $param1;
    protected $param2;
    private $param3;
    
    public function method1(): string
    {
        return "test code";
    }
}

class B extends A
{
     public $test;
     public function method2(int $num): int
     {
        return $num;
     }
}
复制代码

实现关系

接口实现:实现关系(Implementation),主要用来规定接口和实现类的关系。

UML类图看这篇文章就够了
<?php

interface animal
{
    public function move(int $distance);
    public function jump(int $height);
}

class cat implements animal
{
    public function move(int $distance)
    {
        return $distance;

    }
    public function jump(int $height)
    {
         return $distance;
    }
}

class cow implements animal
{
    public function move(int $distance)
    {
        return $distance;
    }
    
    public function jump(int $height)
    {
         return $distance;
    }
}
复制代码

组合关系

组合关系(Composition):整体与部分的关系,但是整体与部分不可以分开。

组合关系表示类之间整体与部分的关系,整体和部分有一致的生存期。一旦整体对象不存在,部分对象也将不存在,是同生共死的关系。

例如:人由头部和身体组成,两者不可分割,共同存在。

UML类图看这篇文章就够了
<?php

class Head
{
    public function eye()
    {
        echo "this is eye";
    }
}

class Body
{
    public function tummy()
    {
        echo "this is tummy";
    }
}

class Human
{
    private $head;
    private $body;

    public function setHead(Head $head)
    {
        $this->head = $head;
    }

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

    public function show()
    {
        $this->head->eye();
        echo "<br>";
        $this->body->tummy();
    }
}
复制代码

聚合关系

聚合关系(Aggregation):整体和部分的关系,整体与部分可以分开。

聚合关系也表示类之间整体与部分的关系,成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在。

例如:汽车 = 发动机+轮子。当汽车报废时,发动机和轮子不一定会报废,可能会进入二手市场。

聚合和组合的关系有点微妙~

UML类图看这篇文章就够了
<?php

class Engine
{
    public function getEngine()
    {
        echo "this is Engine";
    }
}

class Wheel
{
    public function getWheel()
    {
        echo "this is getWheel";
    }
}

class Car
{
    private $engine;
    private $wheel;

    public function setEngine(Engine $engine)
    {
        $this->engine = $engine;
    }

    public function setWheel(Wheel $wheel)
    {
        $this->wheel = $wheel;
    }

    public function show()
    {
        $this->engine->getEngine();
        echo "<br>";
        $this->wheel->getWheel();
    }
}
复制代码

关联关系

关联(Association)关系是类与类之间最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一类对象之间有联系,如汽车和轮胎、师傅和徒弟、班级和学生等等。

(1)双向关联

默认情况下,关联是双向的。例如:顾客(Customer)购买商品(Product)并拥有商品,反之,卖出的商品总有某个顾客与之相关联。因此,Customer类和Product类之间具有双向关联关系。

UML类图看这篇文章就够了
<?php

class Customer
{
    public $product = [];
}

class Product
{
    public $customer;
}
复制代码

(2)单向关联

类的关联关系也可以是单向的,单向关联用带箭头的实线表示。例如:顾客(Customer)拥有地址(Address),则Customer类与Address类具有单向关联关系。

UML类图看这篇文章就够了
<?php

class Customer
{
    public $address = [];
}

class Address
{
    
}
复制代码

(3)自关联

在系统中可能会存在一些类的属性对象类型为该类本身,这种特殊的关联关系称为自关联。例如:单例模式。

UML类图看这篇文章就够了
<?php
final class Singleton
{
    /**
    * @var Singleton
    */
    private static $instance;

    /**
    * 通过懒加载获得实例(在第一次使用的时候创建)
    */
    public static function getInstance(): Singleton
    {
        if (null === static::$instance) {
            static::$instance = new static();
        }

        return static::$instance;
    }

    /**
    * 不允许从外部调用以防止创建多个实例
    * 要使用单例,必须通过 Singleton::getInstance() 方法获取实例
    */
    private function __construct()
    {
    }

    /**
    * 防止实例被克隆(这会创建实例的副本)
    */
    private function __clone()
    {
    }

    /**
    * 防止反序列化(这将创建它的副本)
    */
    private function __wakeup()
    {
    }
}
复制代码

(4)多重性关联

多重性关联关系又称为重数性(Multiplicity)关联关系,表示两个关联对象在数量上的对应关系。在UML中,对象之间的多重性可以直接在关联直线上用一个数字或一个数字范围表示。

对象之间可以存在多种多重性关联关系,常见的多重性表示方式如表1所示:

表示方法 多重性说明
1..1 表示另一个类的一个对象只与该类的一个对象有关系
0..* 表示另一个类的一个对象与该类的零个或多个对象有关系
1..* 表示另一个类的一个对象与该类的一个或多个对象有关系
0..1 表示另一个类的一个对象没有或只与该类的一个对象有关系
m..n 表示另一个类的一个对象与该类最少m,最多n个对象有关系 (m≤n)

例如:一个界面(Form)可以拥有零个或多个按钮(Button),但是一个按钮只能属于一个界面,因此,一个Form类的对象可以与零个或多个Button类的对象相关联,但一个Button类的对象只能与一个Form类的对象关联。

UML类图看这篇文章就够了
<?php

class Form
{
    private $button = [];

}

class Button
{

}
复制代码

依赖关系

依赖关系(Dependence):假设A类的变化引起了B类的变化,则说名B类依赖于A类。

大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数。依赖关系是一种“使用”关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系。

例如:例如:驾驶员开车,在Driver类的drive()方法中将Car类型的对象car作为一个参数传递,以便在drive()方法中能够调用car的move()方法,且驾驶员的drive()方法依赖车的move()方法,因此类Driver依赖类Car。

UML类图看这篇文章就够了
<?php

class Driver
{
    public function drive(Car $car)
    {
        $car->move();
    }
}

class Car
{
    public function move()
    {

    }
}

复制代码

以上所述就是小编给大家介绍的《UML类图看这篇文章就够了》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Design for Hackers

Design for Hackers

David Kadavy / Wiley / 2011-10-18 / USD 39.99

Discover the techniques behind beautiful design?by deconstructing designs to understand them The term ?hacker? has been redefined to consist of anyone who has an insatiable curiosity as to how thin......一起来看看 《Design for Hackers》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

MD5 加密
MD5 加密

MD5 加密工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具