Отношения между классами
Большая часть классов приложения связаны между собой. В этом разделе рассмотрим какие бывают отношения между классами в Java.
1. IS-A отношения
В ООП принцип IS-A основан на наследовании классов или реализации интерфейсов. Например, если класс HeavyBox
наследует Box
, мы говорим, что HeavyBox
является Box
(HeavyBox
IS-A Box
). Или другой пример - класс Lorry
расширяет класс Car
. В этом случае Lorry
IS-A Car
.
То же самое относится и к реализации интерфейсов. Если класс Transport
реализует интерфейс Moveable
, то они находятся в отношении Transport
IS-A Moveable
.
2. HAS-A отношения
HAS-A отношения основаны на использовании. Выделяют три варианта отношения HAS-A: ассоциация, агрегация и композиция.
Начнем с ассоциации. В этих отношениях объекты двух классов могут ссылаться друг на друга. Например, класс Horse
HAS-A Halter
если код в классе Horse
содержит ссылку на экземпляр класса Halter
:
Ассоциация
public class Halter {}
public class Horse{
private Halter halter;
}
Агрегация и композиция являются частными случаями ассоциации. Агрегация - отношение когда один объект является частью другого. А композиция - еще более тесная связь, когда объект не только является частью другого объекта, но и вообще не может принадлежать другому объекту. Разница будет понятна при рассмотрении реализации этих отношений.
Агрегация
Объект класса Halter
создается извне Horse
и передается в конструктор для установления связи. Если объект класса Horse
будет удален, объект класса Halter
может и дальше использоваться, если, конечно, на него останется ссылка:
public class Horse {
private Halter halter;
public Horse(Halter halter) {
this.halter = halter;
}
}
Композиция
Теперь посмотрим на реализацию композиции. Объект класса Halter
создается в конструкторе, что означает более тесную связь между объектами. Объект класса Halter
не может существовать без создавшего его объекта Horse:
public class Horse {
private Halter halter;
public Horse() {
this.halter = new Halter();
}
}
Зарегистрируйтесь или войдите, чтобы иметь возможность оставить комментарий.