Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Властивості класів,,,.docx
Скачиваний:
8
Добавлен:
26.10.2018
Размер:
253 Кб
Скачать
☆

3.2 Класи, компоненти і об'єкти

Клас не має фізичної суті, його найближчою аналогією є оголошення структури. Пам'ять виділяється тільки тоді, коли клас використовується для створення об'єкту. Цей процес також називається створенням екземпляра класу (class instance).

Будь-який об'єкт мови C++ має однакові атрибути і функціональність з іншими об'єктами того ж класу. За створення своїх класів і поведінку об'єктів цих класів повну відповідальність несе сам програміст. Працюючи в деякому середовищі, програміст дістає доступ до обширних бібліотек стандартних класів (наприклад, до Бібліотеки Візуальних Компонентів C++Builder).

Зазвичай, об'єкт знаходиться в деякому унікальному стані, визначений поточними значеннями його атрибутів. Функціональність об'єктного класу визначається можливими операціями над екземпляром цього класу.

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

C++Builder вводить поняття компонент (components) - спеціальних класів, властивості яких представляють атрибути об'єктів, а їх методи реалізують операції над відповідними екземплярами компонентних класів. Поняття метод зазвичай використовується в контексті компонентних класів і зовні не відрізняється від терміну функція-член звичайного класу. C++Builder дозволяє маніпулювати виглядом і функціональною поведінкою компонентів не тільки за допомогою методів (як це роблять функції-члени звичайних класів), але і за допомогою властивостей і подій, властивих тільки класам компоненів. Працюючи в середовищі C++Builder, ви напевно відмітите, що маніпулювати з компонентним об'єктом можна як на стадії проектування додатку, так і під час його виконання.

Властивості (properties) компонента є розширення поняття членів даних і хоча не зберігають дані як такі, проте забезпечують доступ до членів даних об'єктів. C++Builder використовує ключове слово _property для оголошення властивостей. За допомогою подій (events) компонент повідомляє користувача про те, що на неї надана деяка зумовлена дія. Основна сфера застосування методів в програмах, що розробляються в середовищі C++Builder - це обробники подій (event handlers), які реалізують реакцію програми на виникнення певних подій. Легко відмітити деяку схожість подій і повідомлень операційної системи Windows. Типові прості події — натискання кнопки або клавіші на клавіатурі. Компоненти інкапсулюють свої властивості, методи і події.

На перший погляд компоненти нічим не відрізняються від інших об'єктних класів мови C++, за винятком ряду особливостей, серед яких поки відзначимо наступні:

• Більшість компонентів є елементами управління інтерфейсом з користувачем, причому деякі володіють дуже складною поведінкою.

• Всі компоненти є прямими або непрямими нащадками одного загального класу - нащадок (TComponent).

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

• Компоненти розміщуються тільки в динамічній пам'яті купи (heap) за допомогою оператора new а не на стеку, як об'єкти звичайних класів.

• Властивості компоненів містять в собі RTTI - ідентифікацію динамічних типів.

• Компоненти можна додавати до Палітри компоненів і далі маніпулювати з ними за допомогою Редактора форм інтегрованого середовища візуальної розробки C++Builder.

ООП інтерпретує взаємодія з об'єктами як посилку запитів деякому об'єкту або між об'єктами. Об'єкт, що прийняв запит, реагує викликом відповідного методу. На відміну від інших мов ООП, таких як SmallTalk, C++ не заохочує використання поняття "запит". Запит - це те, що робиться з об'єктом, а метод - це те, як об'єкт реагує на запит, що поступив.

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

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