Что такое диаграмма классов 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()
{
}
}
Эпилог
Наконец, рекомендуется онлайн-инструмент для рисования: