Назад Зміст Вперед

5.1. Поняття інкапсуляції, структура класу

Кожний стиль програмування має свою концептуальну базу. Для об'єктно-орієнтованого стилю такою базою є об’єктна модель. Її побудова основана на використанні 3-х основних концепцій.
Інкапсуляція – механізм, який поєднує дані та методи, що обробляють ці дані і захищає і те і інше від зовнішнього впливу або невірного використання. Коли і методи і данні об’єднуються таким чином — створюється об’єкт.
Або:
Інкапсуляція - це приховування внутрішнього стану та надання можливості працювати зі станом тільки через методи.

Поліморфізм – властивість, яка дозволяє одне і те саме ім’я використовувати для вирішення декількох технічно різних задач, тобто основною метою поліморфізму є використання одного імені для задання загальних класу дій. На практиці це значить спроможність об’єктів вибирати внутрішній метод або процедуру, виходячи із типу даних, прийнятих в повідомленні.
Наслідування – процес, завдяки якому один об’єкт може придбати властивості іншого, тобто наслідувати властивість іншого об'єкту і додавати риси характерні тільки для нього самого.

Інкапсуляція

Одною із переваг ООП є те, що користувачі класів можуть використовувати їх, майже не знаючи як вони реалізовані, використовуючи лише кілька методів для роботи з конкретним об’єктом. Таке закриття реалізації класу слугує також і певним захистом від неправильної роботи з даними. Даний принцип реалізації називається «інкапсуляцією». Якщо візьмемо реальний світ, то, наприклад, ви не знаєте як влаштований телевізор, проте ви можете його увімкнути та за допомогою кнопок переключати канали. Сама ж схемо-технічна реалізація прикрита корпусом телевізора і переважно невідома глядачам ТВ. Аналогічно і класи розробляються за схожим принципом. Створюються певні методи, через які відбувається доступ до полів класу(змінних) та його методів. Всі інші класи, методи, поля, які слугують лише для обслуговування внутрішнього функціонування класу намагаються захистити, щоб до них не було доступу без крайньої на те потреби. Це в свою чергу зменшує кількість помилок в програмі через невмілі дії користувача цього класу.

Доступ до стану об'єкта напряму заборонено, і ззовні з ним можна взаємодіяти виключно через заданий інтерфейс, що дозволяє контролювати правильність звернення до полів та їхню ініціалізацію. Також інкапсулюються методи, які виконують допоміжну роль і не бажано, щоб користувач-програміст мав доступ до них. Оскільки користувачі-програмісти працюють лише через відкриті елементи класів, то розробники класу можуть як-завгодно змінювати всі закриті елементи і навіть перейменовувати та видаляти їх, не турбуючись, що десь хтось їх використовує у своїх програмах.

Клас, структура класу

Клас - це елемент, що становить основу Java. А оскільки клас визначає форму і сутність об'єкта, то він є тією логічною конструкцією, на основі якої побудовано всю мову jаvа. Будь-яке поняття, яке потрібно реалізувати в програмі нa java, повинно бути інкапсульоване в межах класу.

Клас - це шаблон для створення об'єкту, а об'єкт - це екземпляр класу. А, оскільки, об'єкт є екземпляром класу, то поняття об'єкт і екземпляр вживають як синоніми.

При визначенні класу оголошується його конкретна форма і сутність. Для цього вказуються дані, які він містить, а також код, що впливає на ці дані. І хоча дуже прості класи можуть містити тільки код або тільки дані, більшість класів, застосовуваних у реальних програмах, містить обидва компоненти. Як буде показано далі, код класу визначає інтерфейс з його даними.

Для оголошення класу служить ключове слово class. Згадувані досі класи насправді представляли собою дуже обмежені приклади повної форми їх оголошення. Класи можуть бути (і зазвичай є) значно більш складними. Спрощена загальна форма визначення класу має наступний вигляд:

class ім'я_класу {
      тип змінна_екземпляру1;
      тип змінна_екземпляру2;
       //...
      тип змінна_екземпляруN;

      тип ім'я_методу1(список_параметрів){
         //тіло методу;
      }
      тип ім'я_методу2(список_параметрів){
         //тіло методу;
      }
      //...
      тип ім'я_методуN(список_параметрів){
         //тіло методу;
     }
}

Дані, або змінні, визначені в класі, називаються змінними екземпляраКод міститься в тілі методів. Разом з змінними екземпляра методи, визначені в класі, називаються членами класу. У більшості класів дії над змінними екземпляра і доступ до них здійснюють методи, визначені в цьому класі. Таким чином, саме методи, як правило, визначають порядок використання даних класу.

Всі методи мають ту ж загальну форму, що і метод  main(). Але більшість методів рідко оголошуються як static або public. Зверніть увагу на те, що в загальній формі класу немає визначення методу main(). Класи jаvа можуть і не містити цей метод. Його обов'язково вказувати тільки в тих випадках, коли даний клас служить відправною точкою для виконання програми. Більш того, в деяких видах додатків jаvа, методу main() взагалі не потрібно.

Отже, почнемо розгляд класів з простого прикладу. Нижче наведений код класу Вох (Паралелепіпед), який визначає три змінні екземпляра: width (ширина), height (висота) і depth (глибина). На даний момент клас Вох не містить жодних методів (але надалі вони будуть введені в нього).

class Вох {
double width;
double height;
double depth;
}



Цей клас визначає новий тип даних. В даному випадку новий тип даних називається Вох. Це ім'я буде використовуватися для оголошення об'єктів типу Вох. Не слід забувати, що оголошення class створює тільки шаблон, але не конкретний об'єкт. Таким чином, наведений вище код не призводить до появи яких-небудь об'єктів типу Вох. Щоб дійсно створити об'єкт класу Вох, потрібно скористатися оператором:

Вох mybox = new Вох ( ) ; //створити об'єкт mybox класу Вох

Після виконання цього оператора об'єкт mybox стане екземпляром класу Вох. Таким чином, він знайде "фізичне" існування.

При наявності двох об'єктів класу Вох кожен з них буде містити власні копії змінних depthwidth і  height. Слід, однак, мати на увазі, що зміни в змінних екземпляра одного об'єкта не впливають на змінні екземпляра іншого.




.