Какие виды отношений существуют в структурной диаграмме классов?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
В структурной диаграмме классов UML можно выделить следующие основные виды отношений:
-
Ассоциация (Association): Представляет собой связь между экземплярами классов. Может быть однонаправленной или двунаправленной.
- Множественность (Multiplicity): Указывает, сколько экземпляров одного класса может быть связано с экземплярами другого класса. Примеры: 1 (один), 0..1 (ноль или один), 1..* (один или более), * (ноль или более).
- Роль (Role): Указывает, какую роль играет класс в отношении.
-
Агрегация (Aggregation): Особый тип ассоциации, представляющий отношение "часть-целое", где "целое" может существовать без своих "частей". Обозначается пустым ромбом со стороны "целого".
-
Композиция (Composition): Более сильная форма агрегации. Отношение "часть-целое", где "часть" не может существовать без "целого". Если "целое" уничтожается, то и "части" уничтожаются. Обозначается закрашенным ромбом со стороны "целого".
-
Зависимость (Dependency): Указывает, что изменение в одном элементе (независимом) может повлиять на другой элемент (зависимый), но не наоборот. Обозначается пунктирной стрелкой.
-
Наследование (Inheritance / Generalization): Представляет отношение между родительским классом (superclass) и дочерним классом (subclass), где дочерний класс наследует атрибуты и методы родительского класса. Обозначается полой стрелкой, указывающей на родительский класс.
-
Реализация (Realization): Используется для показа того, что класс реализует интерфейс. Класс предоставляет конкретную реализацию операций, объявленных в интерфейсе. Обозначается пунктирной стрелкой с полой головой, указывающей на интерфейс.
Пример отношений:
// Пример для иллюстрации отношений
class Engine { // Часть автомобиля
// ...
}
class Wheel { // Часть автомобиля
// ...
}
class Car { // Целое (композиция с Engine и Wheel)
private Engine engine; // Композиция: Car владеет Engine
private Wheel[] wheels; // Композиция: Car владеет Wheel (множество)
public Car() {
this.engine = new Engine();
this.wheels = new Wheel[4];
for (int i = 0; i < 4; i++) {
this.wheels[i] = new Wheel();
}
}
}
class Garage { // Агрегация: Garage содержит Car, но Car может существовать без Garage
private List<Car> storedCars; // Агрегация: Garage содержит список Car
public Garage() {
this.storedCars = new ArrayList<>();
}
public void addCar(Car car) {
storedCars.add(car);
}
}
class Vehicle { // Родительский класс (наследование)
// Общие свойства всех транспортных средств
}
class Truck extends Vehicle { // Дочерний класс (наследование)
// Свойства грузовика, наследует от Vehicle
}
interface Drivable { // Интерфейс
void drive();
}
class Motorcycle implements Drivable { // Реализация интерфейса
@Override
public void drive() {
// Реализация метода drive
}
}
class Driver { // Зависимость от Car (нужен Car, чтобы ехать)
public void operate(Car car) { // Зависимость: Driver зависит от Car
// Вождение автомобиля
}
}
В диаграмме классов UML эти отношения показываются соответствующими символами и линиями между классами.