Разрабатывая код на основе отношений ООП, мы можем сделать его пригодным для повторного использования, удобным в сопровождении и хорошо структурированным. И в этой статье мы собираемся объяснить шесть типов отношений, которые можно найти в объектно-ориентированном программировании.

Итак, приступим.

Связь 1: зависимость

Зависимость относится к взаимосвязи между двумя объектами, где один объект использует/ссылается на другой объект в качестве параметра метода, экземпляра или типа возвращаемого значения. Это самый слабый тип отношений среди всех типов.

Например, предположим, что есть два класса: Кошка и Игрушка.

Отношение зависимости между Cat и Toy указывает на то, что Cat использует Toy. Если есть изменение в определении класса Toy, это также повлияет на класс Cat, тем самым установив это отношение зависимости.

Рассмотрим простой метод playToy в классе Cat. Следующий код демонстрирует его реализацию.

playToy(Toy t){
    t.turnOn()
}

Представьте, что в один прекрасный день класс Toy обновляется, и имя метода «turnOn» меняется на «toggleOn».

Безусловно, это изменение нарушитметод playToy в классе Cat, поскольку метод playToy использует метод turnOn() в классе игрушек, который больше не используется. доступный.

Таким образом, мы можем сказать, что между Cat и Toy существуют отношения зависимости, поскольку изменения в классе Toy повлияют на класс Cat.

Связь 2: Ассоциация

Ассоциация - это отношение зависимости, но более сильное, в то время как отношение зависимости означает, что объект используетдругой объект, отношение ассоциации указывает, что объект владеет (и использует) другой объект. Это также известно как отношения «имеет-а».

Например, допустим, у нас есть два класса: Dog и Hat.

Собака, связанная с Hat, означает, что объект Dog имеет объект Hat. В отличие от отношения зависимости, где метод ссылается на другой объект через параметр, отношение ассоциации означает, что любой метод в классе Dog может получить доступ к объекту Hat, поскольку он является частью поля класса.

У собаки есть шляпа

class Dog{
Hat hat = new Hat('Basketball Hat');
goOutSide(){
   hat.equip()
}
goInside(){
   hat.unequip()
}
// Hat could be accessed by every methods
}

Связь 3: Агрегация

Отношения агрегации аналогичны отношениям ассоциации. В ассоциации мы имеем в виду отношения один на один, такие как шляпа у собаки (ОДНА). С другой стороны, агрегация относится к отношениям «один ко многим» или «многие ко многим», например Человек владеет (многими) собаками.

Мы также называем это отношение отношением «имеет-а».

Отношения агрегации между человеком и собакой означают, что объект Human владеет многими объектами Dog. Можно сказать, что класс Human действует как контейнер, а класс Dog действует как компонент. Другими словами, человек является вместилищем компонентов, называемых собаками.

У человека есть собаки

Связь 4: Состав

Отношение "Композиция" похоже на отношение "Агрегация" за одним исключением: компонент может существовать только как часть контейнера. Или, другими словами, класс компонента не может быть отдельным классом; он должен принадлежать классу контейнера.

Например, предположим, что у нас есть два класса, Fishbowl и Goldfish.
Золотая рыбка имеет связь композиции с Fishbowl, что означает, что Fishbowl должен содержать (много) Золотых рыбок, а объекты Goldfish должны принадлежать Fishbowl.

Этот тип отношений также можно назвать отношениями «часть».

Золотые рыбки являются частью аквариума

Связь 5: Реализация

Реализация — это связь между классом и интерфейсом. Это указывает на то, что класс определяет методы интерфейса.

Например, предположим, что есть один интерфейс, Charger, и два класса, WiredCharger и WirelessCharger.

Допустим, у нас есть простой абстрактный метод в интерфейсе Charger с именем charge().

interface Charger {
    charge()
}

WiredCharger и WirelessCharger имеют отношения реализации, что означает, что WiredCharger и WirelessCharger определяют все методы в интерфейсе Charger.

class WiredCharger{
     charge(){
        print("Sending Energy Through Cable")
     }
}
class WirelessCharger{
     charge(){
        print("Emitting Electromagnetic Energy")
     }
}

Отношения 6: Наследование

Отношение наследования указывает на то, что один класс наследует все свойства другого, включая его интерфейсы и реализации. Кроме того, унаследованный класс также имеет возможность расширять дополнительные методы или поля.

Например, предположим, что у нас есть два класса, Bird и Parrot.
Наследование между Parrot и классом Bird означает, что Parrot получает все свойства и методы класса Bird. Кроме того, Parrot может реализовать новые методы, такие как speak().

Это отношение также можно назвать отношением «есть-а».

попугай это птица

Краткое содержание

1. Зависимость — объект A используетобъект B
2. Ассоциация — объект A имеет(один ) Объект B
3. Агрегация — Объект A имеет (много) Объект B
4. Композиция — (много) Объект B — часть объекта A
5. Реализация — класс A определяетинтерфейс B
6. Наследование — Класс B является классом A (и может расширять дополнительные методы/поля).

Я надеюсь, что эта статья будет полезна для начинающих и поможет освежить в памяти опытных пользователей.
Сообщите мне, если вы обнаружите какие-либо ошибки. Буду признателен за любые исправления.

Спасибо, что прочитали.