Отношения между классами в UML

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

Зависимость между объектами (или классами) – это такое отношение, при котором изменение одного объекта может повлечь за собой изменение другого объекта.

Отношение зависимости между классами на диаграммах UML отражается пунктирной линией со стрелкой, как показано на рисунке:

Отношение зависимости между классами
Отношение зависимости между классами.

На этом рисунке класс Class1 зависит от Class2.

В коде это могло бы выглядеть так:

public class Class1 {
    public void SomeVoid( Class2 class2 ) { }
}

Ассоциация между объектами показывает что один объект включает другой объект:

Например в следующем коде:

public class Presenter {
    public View TargetView { get; set; }
}

класс Presenter содержит ссылку на класс View. На диаграмме UML это отображается следующим образом:

Отношение ассоциации между классами
Отношение ассоциации между классами

Наследование (или обобщение) – показывает что один класс является подклассом другого, более общего класса.

В исходных кодах WinForms, части .net framework есть класс Form, вот сокращенная часть кода этого класса:

public class Form : ContainerControl { }

Из этого кода видно что класс Form наследуется от класса ContainerControl. На диаграмме UML это будет выглядеть следующим образом:

Отношение наследования между классами
Отношение наследования между классами

Агрегация – разновидность ассоциации при которой один объект является частью другого объекта как коллекция. Для примера реализации можно привести следующий код:

public class Form {
    private List<Control> _controls;
}

На диаграммах UML агрегация обозначается линией с пустым ромбом на конце:

Отношение агрегации между классами
Отношение агрегации между классами

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

Пример отношения композиции:

public class Circle {
    private Point _center;

    public Point Center {
        get {
            return _center;
        }
        set {
            _center = value;
        }
    }    

    public Circle() {
        _center = new Point( 0, 0 );
    }
}

На диаграммах UML композиция обозначается также как и агрегация, но с закрашенным ромбом:

Отношение композиции между классами
Отношение композиции между классами
avatar
5000
  Подписаться  
Уведомление о