Агрегация и композиция или обход множественного наследования в Java

Когда нас спрашивают про принципы ООП многие (большинство новичков) говорят лишь о 3(4) принципах — Инкапсуляция, Наследование, Полиморфизм (+Абстракция). Некоторые также перчисляют принципы SOLID. Но лишь немногие также вспоминают про еще 2 понятия, такие как Агрегация и Композиция (они являются частными случаями Ассоциации, когда 2 объекта имеют некую связь).

Агрегация — это когда в одном классе содержится другой класс (или же он состоит полностью из экземпляров других классов). Как только в классе встречается нечто иное чем примитивы и классы языка, а написанный программистом класс, то это считается агрегацией.

Композиция — это более жесткая связь между двумя классами, когда в одном содержится другой или несколько других, которые самостоятельно не используются, а лишь в этом классе. Рассмотрим пример


class A {
public void doSomethingA(){}
public void doElseA(){}
}
class B {
public void doThingB(){}
}


class Main {
private A a;
private B b;
public doSomething() {
a.doSomethingA();
}
public void doElse{
a.doElseA();
}
public void doThing(){
b.doThingB();
}
}

Теперь, в классе Мейн имеем экземпляры классов А и В, но не доступ к ним самим, а к их методам. Теперь складывается ощущение что мы обошли множественное наследование, так как доступны все методы и все переменные 2 классов.

п.с. зачастую те классы, которые отдельно не используются пишутся как внутренние приватные классы одного большого класса.

Запись опубликована в рубрике Программирование Java. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *