Я пережив багато теорій про те, що таке інкапсуляція та три методики її здійснення, які є асоціація, агрегація та склад.
Інкапсуляція
Інкапсуляція - це техніка зробити поля в класі приватними та забезпечити доступ до полів відкритими методами. Якщо поле оголошено приватним, до нього не може отримати доступ хтось поза класом, тим самим приховуючи поля всередині класу. З цієї причини інкапсуляцію також називають приховуванням даних.
Інкапсуляція може бути описана як захисний бар'єр, який запобігає випадковому доступу до коду та даних іншим кодом, визначеним поза класом. Доступ до даних та коду жорстко контролюється інтерфейсом.
Основна перевага інкапсуляції - це можливість змінювати наш реалізований код, не порушуючи код інших, хто використовує наш код. Завдяки цій функції інкапсуляція забезпечує ремонтопридатність, гнучкість та розширюваність нашого коду.
Асоціація
Асоціація - це відносини, коли всі об'єкти мають свій життєвий цикл і немає власника. Візьмемо приклад вчителя та учня. Кілька учнів можуть асоціюватися з одним вчителем, а один студент може зв’язатися з декількома вчителями, але між об'єктами немає власності і обидва мають свій життєвий цикл. Обидва можуть створювати та видаляти самостійно.
Агрегація
Агрегація - це спеціалізована форма об'єднання, де всі об'єкти мають власний життєвий цикл, але існує право власності, і дочірній об’єкт не може належати іншому батьківському об'єкту. Візьмемо приклад кафедри та викладача. Один вчитель не може належати до декількох кафедр, але якщо ми видалимо кафедру, об'єкт викладача не буде знищений. Ми можемо думати про це як про відносини "має".
Склад
Склад - це знову спеціалізована форма агрегації, і ми можемо назвати це відносинами "смерті". Це сильний тип Агрегації. Дочірній об’єкт не має свого життєвого циклу, і якщо батьківський об’єкт видаляє всі дочірні об’єкти, він також буде видалений. Візьмемо ще раз приклад стосунків між будинком та кімнатами. Будинок може містити кілька номерів, але немає самостійного життя кімнати, і жодна кімната не може належати до двох різних будинків. Якщо ми видалимо будинок, кімната автоматично буде видалена.
Питання:
Тепер це все приклади реального світу. Я шукаю деякий опис про те, як використовувати ці методи в фактичному коді класу. Я маю на увазі, в чому сенс використання трьох різних технік інкапсуляції , як ці методи можна було б реалізувати та як вибрати, яку техніку застосувати в даний момент.