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

   ⁄ 

 Обновлено 15 Июн 2018  ⁄ 

⁄   487

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

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

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

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

Например:

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

Point(5, 6, 7)

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

Зависимости vs Ассоциации в C++

Очень часто возникает путаница, чем зависимость отличается от ассоциации.

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

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

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

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (4 оценок, среднее: 5,00 из 5)
Загрузка...
Подписаться на обновления:

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

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

ПОДПИСЫВАЙТЕСЬ

НА КАНАЛ RAVESLI В TELEGRAM

@ravesli

ПОДПИСАТЬСЯ БЕСПЛАТНО