Розділ ІІІ. МОВИ ПРОГРАМУВАННЯ С ТА С++
меження доступу до зміни значень елементів структури. Як наслідок це може викликати внесення неправильних дат (напр.: {35, 35, 35000}). Звичайно, можна замість int використовувати деякі його обмеження, але це не може адекватно розв'язати проблему різної кі- лькості днів у місяцях тощо. Крім того, нехай після реалізації певної кількості функцій із використанням цієї структури ми вирішили, що зручніше буде змінити спосіб збереження часу, а саме зберігати кіль- кість днів, починаючи від фіксованої дати. Для цього потрібно:
•змінити структуру CppDate, видаливши старі атрибути й додавши довге ціле (можна взагалі не використовувати структуру);
•змінити всі функції, що використовують CppDate, а також модифі- кувати всі оператори, які оперують компонентами структури CppDate.
Для великих програм (кілька тисяч рядків) здійснити такі зміни до- сить складно, знадобиться повторне налагодження.
Упроцедурному програмуванні внутрішнє подання даних визнача- ється на ранній стадії розробки, що обмежує свободу внесення змін. Використовуючи ООП, можна усунути подібні проблеми. В ООП форма зображення даних може змінюватися з обмеженим впливом на код.
Основним засобом організації даних у мові C++ є класи. Зовні цей тип даних схожий на тип структур, однак полями (членами) у класі можуть бути не лише дані, але й методи (функції):
<клас>::=class <ім'я-класу>[:<список-батьківських класів>] \ {<cписок-секцій>};
<батьківський-клас>::=(public <ім'я-класу>|private <ім'я-класу>| protected <ім'я-класу>)
<секція>::=(public: <список-атрибутів-і-методів>| protected: <список-атрибутів-і-методів>| private: <список-атрибутів-і-методів>) <арибут>::=<опис-змінної> <метод>>::=<прототип-функції>|<опис-функції>
Клас інкапсулює свої елементи. Атрибути й методи (функції) бува- ють публічними (public), захищеними (protected) і приватними (private). До публічних атрибутів і методів є повний доступ для зміни й читання як із самого класу, так і ззовні. До захищених і приватних атрибутів і методів не можна звертатися ззовні класу для збереження цілісності даних класу. Спроба неправильного звернення викликає помилку компіляції. До таких атрибутів і методів можуть звертатися лише функції-члени класу, а також функції-друзі (див. підрозд. 3.12.3) і функції-члени класів-друзів. Зокрема, до захищених атрибу- тів можна звертатися із самого класу й класів-нащадків, а до закри- тих – лише із самого класу.