16.1 – Связи между объектами

Добавлено 25 июля 2021 в 06:26

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

Например, предположим, что однажды вы идете по улице и видите ярко-желтый объект, прикрепленный к объекту зеленого куста. Вы, вероятно, узнаете, что ярко-желтый предмет – это цветок, а зеленый куст – это растение. Даже если вы никогда раньше не видели этот конкретный вид растений, вы знаете, что зеленые штуковины – это листья, собирающие солнечный свет. Вы знаете, что цветок помогает растению размножаться. Вы также знаете, что если вы убьете растение, погибнет и цветок.

Но как можно всё это узнать, не встречая раньше растений этого типа? Вы знаете это, потому что понимаете абстрактную концепцию растений и понимаете, что это растение является экземпляром этой абстракции. Вы знаете, что большинство растений состоит (частично) из листьев, а у некоторых есть цветы. Вы знаете, что листья взаимодействуют с солнечным светом (даже если не знаете, как именно) и что существование цветка зависит от растения. Поскольку вы знаете всё это о растениях в целом, вы можете о многом сделать выводы, относительно конкретного растения.

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

В предыдущих главах мы уже исследовали некоторые идеи, связанные с повторяющимися шаблонами: мы создавали циклы и функции, которые позволяют нам выполнять определенную задачу множество раз. Кроме того, мы создавали собственные перечисления, структуры и классы, позволяющие создавать экземпляры объектов заданного типа.

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

Однако мы еще не уделяли особого внимания связям между объектами, особенно в том, что касается программирования.

Связи между объектами

В реальной жизни два объекта могут иметь разные виды связи, и мы используем определенные слова «типа связи» для описания этих связей. Например: квадрат «является» фигурой. У автомобиля «есть» рулевое колесо. Программист «использует» клавиатуру. Цветок «зависит» от пчелы относительно опыления. Студент – это «член» класса. И ваш мозг существует как «часть» вас (по крайней мере, мы можем обоснованно предположить это, если вы зашли так далеко).

Все эти типы связей имеют в C++ полезные аналогии.

В этой главе мы исследуем нюансы типов связей «часть чего-либо», «имеет что-либо», «использует что-либо», «зависит от чего-либо» и «член чего-либо» и покажем, как они могут быть полезным в контексте классов C++. Мы также рассмотрим несколько связанных тем, которые больше никуда не подходят.

Затем мы посвятим следующие две главы изучению связей «является чем-либо» с помощью модели наследования C++ и виртуальных функций. Да, это важно.

Хорошо, достаточно контекста. Перейдем к делу.

Теги

C++ / CppLearnCppДля начинающихОбучениеОбъектно-ориентированное программирование (ООП)Программирование

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.