Диаграммы классов UML достаточно, чтобы прочитать эту статью

PHP

Что такое диаграмма классов UML и что она делает?

Диаграмма классов UML используется для описания классов, содержащихся в системе, и их взаимосвязей, помогая людям упростить понимание системы.Это важный продукт этапа системного анализа и проектирования, а также важная модельная основа для системного кодирования. и тестирование. Поэтому предлагается изучить волну диаграмм классов UML, чтобы вы могли сами понять взаимосвязь между классами и классами в системе, которую вы проектируете. Для других просто посмотрите на свои диаграммы классов 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;
     }
}

отношения реализации

Реализация интерфейса: связь реализации (реализация), в основном используемая для указания связи между интерфейсом и классом реализации.

<?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;
    }
}

Комбинированные отношения

Композиция: Связь между целым и частями, но целое и части не могут быть разделены.

Отношение композиции представляет отношение целое-часть между классами, а целое и часть имеют постоянное время жизни. Как только весь объект не существует, частичный объект также не будет существовать, это отношения жизни и смерти.

Например: человек состоит из головы и тела, которые неразделимы и существуют вместе.

<?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();
    }
}

Отношения агрегации

Агрегация: отношения между целым и частью, целым и частью могут быть разделены.

Отношение агрегации также представляет отношение между целым и частями между классами.Объект-член является частью целого объекта, но объект-член может существовать независимо от всего объекта.

Например: автомобиль = двигатель + колеса. Когда автомобиль утилизируется, двигатель и колеса не обязательно утилизируются и могут быть отправлены на рынок бывших в употреблении.

Связь между агрегацией и композицией немного тонкая~

<?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();
    }
}

отношение связи

Отношение ассоциации — это наиболее часто используемое отношение между классами.Это структурное отношение, используемое для представления отношения между одним классом объектов и другим классом объектов, таких как автомобили и шины, мастера и ученики, классы и студенты и т. д.

(1) Двусторонняя ассоциация

По умолчанию ассоциации являются двунаправленными. Например, клиент покупает продукт и владеет продуктом, и наоборот, всегда есть клиент, связанный с проданным продуктом. Таким образом, существует двунаправленная связь между классом Customer и классом Product.

<?php

class Customer
{
    public $product = [];
}

class Product
{
    public $customer;
}

(2) Односторонняя ассоциация

Ассоциации классов также могут быть однонаправленными, и однонаправленные ассоциации представлены сплошными линиями со стрелками. Например: у клиента (Customer) есть адрес (Address), тогда класс Customer имеет отношение односторонней ассоциации с классом Address.

<?php

class Customer
{
    public $address = [];
}

class Address
{
    
}

(3) Самоассоциация

В системе могут быть некоторые классы, тип объекта атрибута которых является самим классом, и эта особая ассоциация называется самоассоциацией. Например: одноэлементный шаблон.

<?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) Множественные ассоциации

Отношение множественности, также известное как отношение множественности, представляет собой количественное соответствие между двумя связанными объектами. В UML множественность объектов может быть представлена ​​числом или диапазоном чисел непосредственно на линии ассоциации.

Между объектами может быть несколько ассоциаций множественности, и общие представления множественности показаны в таблице 1:

метод отображения Заявление о множественности
1..1 Представляет объект другого класса, который связан только с одним объектом этого класса
0..* Представляет, что объект другого класса имеет связь с нулем или более объектами этого класса.
1..* Представляет, что объект другого класса имеет связь с одним или несколькими объектами этого класса.
0..1 Указывает, что объект другого класса не имеет отношения или имеет только отношения с объектом этого класса.
m..n Объект, представляющий другой класс, связан не менее чем с m и не более чем с n объектами этого класса (m≤n)

Например: интерфейс (Форма) может иметь ноль или более кнопок (Кнопка), но кнопка может принадлежать только одному интерфейсу, поэтому объект класса Форма может быть связан с нулем или более объектами класса Кнопка, но объект Класс Button может быть связан только с объектом класса Form.

<?php

class Form
{
    private $button = [];

}

class Button
{

}

зависимости

Зависимость: если предположить, что изменения в классе А вызывают изменения в классе В, говорят, что класс В зависит от класса А.

В большинстве случаев зависимости проявляются, когда методы одного класса принимают в качестве параметра объект другого класса. Зависимость — это отношение «использования», изменение конкретной вещи может повлиять на другие вещи, которые используют эту вещь, и зависимость используется, когда необходимо указать, что одна вещь использует другую.

Например: например, когда водитель ведет машину, объект car типа Car передается в качестве параметра в метод drive() класса Driver, так что метод move() автомобиля может быть вызван в классе Driver. drive(), а метод drive() водителя зависит от метода move() автомобиля, поэтому класс Driver зависит от класса Car.

<?php

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

class Car
{
    public function move()
    {

    }
}

Эпилог

Наконец, рекомендуется онлайн-инструмент для рисования:

processon.com