Наше життя сповнене повторюваних шаблонів, відносин і ієрархій між об’єктами. Вивчаючи їх, ми отримуємо більш глибоке уявлення про те, як вони працюють і взаємодіють між собою в реальному житті.
Наприклад, ми йдемо по вулиці і бачимо яскраво-жовтий об’єкт на зеленому довгому об’єкті. Ми розуміємо, що яскраво-жовтий об’єкт — це квітка, а зелений — стебло. Навіть якщо ми до цього моменту ніколи не бачили таку рослину, ми все одно розуміємо, що об’єктами на стеблі є листя, яке взаємодіє з сонячним світлом, а квітка допомагає рослині в розмноженні і виживанні. Ми також знаємо, що, якщо зірвати рослину, квітка теж загине.
Але як ми можемо це знати і судити про цей об’єкт як про рослину, ніколи не зустрічаючи його до цього моменту? Справа в тому, що у нас є знання про рослини і ми усвідомлюємо, що об’єкт, який ми зустріли на вулиці, відноситься саме до рослин. Ми знаємо, що більшість рослин мають листя, а деякі ще й квітки. Також ми знаємо, що листя взаємодіє з сонячним світлом (навіть якщо не розуміємо повний процес цієї взаємодії), і існування квітки безпосередньо залежить від рослини. І оскільки ми все це знаємо, і це відноситься до рослин, то ми можемо робити подібні висновки і про об’єкт на вулиці, який відповідає нашим знанням про рослини.
Аналогічно, в програмуванні також багато повторюваних шаблонів, відносин і ієрархій. Зокрема, коли мова заходить про об’єкти в програмуванні, то ті ж шаблони, якими ми керуємося по відношенню до об’єктів в реальному житті, можна застосувати й до об’єктів в програмуванні, які ми створюємо самі. Вивчаючи ці відносини, шаблони і ієрархії докладніше, ми можемо зрозуміти, як поліпшити код для його повторного використання в інших програмах і як писати класи, функціонал яких можна буде легко розширити.
На попередніх уроках ми вже розглядали принципи, які стосуються повторюваних шаблонів: ми писали цикли і функції, які виконували певні дії багато разів. Крім того, ми створювали свої власні перерахування, структури, класи і об’єкти цих перерахувань, структур і класів.
Ми також вивчили деякі примітивні форми ієрархії, такі як масиви (які дозволяють групувати елементи в більшу структуру) і рекурсія (коли функція викликає сама себе).
Однак ми ще достатньо не фокусувалися на взаємозв’язках між об’єктами в програмуванні.
Зв’язки між об’єктами в програмуванні
Існує багато різних типів відносин, які два об’єкти можуть мати в реальному житті, і ми використовуємо певні слова (типи відносин) для їх опису, наприклад:
Квадрат «є» геометричною фігурою.
Автомобіль «має» кермо.
Програміст «використовує» клавіатуру.
Квітка «залежить від» рослини.
Учень є «членом» класу.
Наш мозок існує як «частина» нас самих.
Всі ці типи відносин мають свої аналоги в мові С++.
На наступних уроках ми розглянемо нюанси типів відносин «має», «використовує», «залежить від», «член чогось» і «частина чогось», і покажемо, як вони можуть бути корисними в контексті класів в C++.
Потім ми перейдемо до вивчення відносин типу «є», розглядаючи спадкування і віртуальні функції в C++.