- •2. Інтегроване середовище розробки Delphi: призначення і загальний опис середовища
- •3. Загальна організація програми в Delphi
- •4. Деякі довідкові відомості для роботи у середовищі Delphi
- •Цикл (программирование)
- •[Править]Определения
- •[Править]Виды циклов [править]Безусловные циклы
- •[Править]Цикл с предусловием
- •[Править]Цикл с постусловием
- •[Править]Цикл с выходом из середины
- •[Править]Цикл со счётчиком
- •[Править]Совместный цикл
- •[Править]Досрочный выход и пропуск итерации
- •[Править]Досрочный выход из цикла
- •[Править]Пропуск итерации
- •[Править]Необходимость
- •[Править]Вложенные циклы
- •[Править]Циклы с несколькими охраняемыми ветвями [править]Цикл Дейкстры
- •[Править]Цикл «паук»
- •[Править]Интересные факты
- •3.1 Інкапсуляція
- •3.2 Класи, компоненти і об'єкти
- •3.3 Спадкоємство
- •3.4 Розробка класів
- •3.4.1 Оголошення базового класу
- •3.4.2 Конструктори і деструкції
- •3.4.3 Оголошення похідних класів
- •3.5 Поліморфізм
- •3.5.1 Віртуальні функції
- •3.5.2 Дружні функції
- •3.6.1 Компоненти
- •3.6.1.1 Оголошення компонентних класів
- •3.6.1.2 Оголошення властивостей
- •3.6.1.3 Оголошення обробників подій
- •3.6.1.4 Оголошення автоматизованих властивостей і методів
- •3.6.1.5 Швидкий виклик функцій
- •3.6.1.6 Розширені типи даних Delphi
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.
