Урок №150. Зависимость

  Юрий  | 

  |

  Обновл. 13 Сен 2021  | 

 23976

Мы уже успели рассмотреть 3 типа отношений в языке C++: композицию, агрегацию и ассоциацию. Самый простой тип отношений — зависимость, мы приберегли напоследок.

В повседневной жизни мы используем термин «зависимость», чтобы указать, что один объект зависит от второго объекта для выполнения определенного задания. Например, если вы сломаете ногу, то будете зависеть от костылей, чтобы иметь возможность передвигаться (но не наоборот). Цветковые растения зависят от пчёл, которые опыляют их, чтобы те имели возможность размножаться (но не наоборот).

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

Хорошим примером зависимости, которую вы уже видели много раз, являются отношения классов и std::cout (типа std::ostream). Классы используют std::cout для вывода чего-либо в консоль, но не наоборот. Например:

Результат выполнения программы:

Point(5, 6, 7)

Здесь класс Point не имеет прямого отношения к std::cout, но имеет зависимость от std::cout, так как функция перегрузки оператора << использует std::cout для вывода объектов класса Point в консоль.

Зависимость vs. Ассоциация

Очень часто возникает путаница: «А чем зависимость отличается от ассоциации?».

В языке C++ ассоциация — это отношения между двумя классами на уровне классов. То есть, первый класс сохраняет прямую или косвенную связь со вторым классом через переменную-член. Например, в классе Врач есть массив указателей на объекты класса Пациент в виде переменной-члена. Вы всегда можете спросить у Врача, кто его Пациенты. Класс Водитель содержит Идентификатор Автомобиля в виде целочисленной переменной-члена. Водитель всегда знает к чему привязан Автомобиль, и как получить к нему доступ.

Зависимости обычно не представлены на уровне классов, то есть зависимый объект не связан со вторым объектом через переменную-член. Зависимый объект обычно создается при необходимости (например, открытие файла для записи данных) или передается в функцию в качестве параметра (например, как std::ostream, участвующий в перегрузке оператора <<, в приведенной выше программе).


Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (188 оценок, среднее: 4,90 из 5)
Загрузка...

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

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