
- •Передмова
- •Розділ 1 об'єктний підхід у програмуванні
- •1.1.Причини виникнення ооп
- •1.1.1.Складність об'єкта дослідження
- •1.1.2.Складність процесу розробки програмного забезпечення
- •1.1.3.Складність опису окремих елементів
- •1.2.Парадигма ооп
- •1.3.Історія розвитку ооп
- •Розділ 2 об'єкти й класи: інкапсуляція
- •2.1.Структура об'єкта й класу
- •2.2.Особливості опису класів у мовах ооп
- •2.2.1.Опис класів в SmallTalk
- •2.2.3.Опис класів в Delphi
- •2.2.4.Опис класів в Java
- •2.3.Поля даних та їх ініціалізація
- •2.3.1.Визначення полів даних в SmallTalk
- •2.3.3.Визначення полів даних в Delphi
- •2.3.4.Визначення змінних в Java
- •2.4.Доступ до даних
- •2.4.1.Доступ до даних в SmallTalk
- •2.4.3.Доступ до даних в Delphi
- •2.4.4.Доступ до даних в Java
- •2.5.Спеціальні змінні
- •2.5.1.Спеціальні змінні в SmallTalk
- •2.5.3.Спеціальні змінні в Java
- •2.5.4.Спеціальні змінні в Delphi
- •2.6.Посилання
- •2.6.1.Визначення посилань в SmallTalk, Delphi і Java
- •2.7.Методи
- •2.7.1.Загальна схема визначення методу
- •2.7.2.Визначення методів в SmallTalk
- •2.7.4.Визначення методів в Delphi
- •2.7.5.Визначення методів в Java
- •2.8."Дружні" методи
- •2.8.2.Аналог дружніх функцій в Delphi
- •2.9.Конструктори й деструктори
- •2.9.1.Конструктори й деструктори в SmallTalk
- •2.9.3.Конструктори й деструктори в Delphi
- •2.9.4.Конструктори й деструктори в Java
- •2.10.Властивості
- •2.10.1.Властивості в Delphi
- •2.10.2.Властивості в Java
- •2.12.Абстрактні методи
- •Розділ 3 успадкування
- •3.1.Форми успадкування
- •3.2.Успадкування в SmallTalk
- •3.3.1.Віртуальне успадкування
- •3.3.2.Правило сумісності типів
- •3.3.3.Використання конструкторів і деструкторів при успадкуванні
- •3.4.Успадкування в Delphi
- •3.4.1.Ієрархія класів в Delphi
- •3.4.2.Створення нових компонентів
- •3.5.Успадкування в Java
- •3.5.1.Використання ключового слова super
- •3.5.2.Клас Object
- •Розділ 4 поліморфізм
- •4.1.Віртуальні методи
- •4.2.1.Механізм пізнього зв'язування
- •4.2.2.Таблиця віртуальних методів
- •4.3.Поліморфізм в Delphi
- •4.3.1.Заміщення віртуальних і динамічних методів
- •4.3.2.Приведення типів
- •4.4.Поліморфізм в Java
- •4.5.Поліморфізм в SmallTalk
- •5.1.Потокові класи
- •5.1.1.Ієрархія потокових класів
- •5.1.2.Форматоване введення/ виведення
- •5.1.3.Маніпулятори
- •5.1.4.Введення/виведення у файл
- •5.2.Контейнерні класи
- •5.2.1.Ітератори
- •5.2.2.Визначення контейнерних класів
- •5.2.3.Стандартні контейнерні класи
- •5.3.1.Параметиізовані класи (шаблони)
- •5.3.2.Ітератори stl
- •5.3.3.Узагальнені алгоритми
- •Література
- •Додатки лабораторна робота №1 об'єкти й повідомлення в smalltalk
- •Лабораторна робота №2 класи й методи в smalltalk
- •Листинг 3.1
- •Листинг 3.2
- •Листинг 3.3
- •Лабораторна робота 5 компоненти в delphi
- •Лабораторна робота 6 меню й вікна в delphi
- •Лабораторна робота 7 розробка меню в java
- •Лабораторна робота 8 робота з подіями в java
2.3.Поля даних та їх ініціалізація
Т
е,
що об'єкт має стан, означає,
що він займає місце в пам'яті.
Рис. 2.4. Структура об'єктів у пам'яті
При створенні об'єкта пам'ять виділяється тільки під поля даних. Методи реалізуються за допомогою реєнтерабельних програм (місце розташування програми не міняється в процесі виконання).
Полям даних відповідають змінні які позначають ці поля Змінні підрозділяються на два види: змінні класу й змінні екземпляра класу (або змінні об'єкта). Змінні класу є глобальними для всього класу. Змінні екземпляра класу властиві тільки об'єктам класу й дублюються для кожного об'єкта. У мовах компілюючого типу (C++ і Object Pascal) змінні класу створюються на етапі компіляції. Це означає, що для доступу до них не потрібно створення об'єкта. Однак одержати доступ до змінних екземпляра класу можна тільки попередньо створивши об'єкт.
Після знищення об'єктів необхідно звільнити ділянку пам'яті, яку вони займають. Для цього використовуються спеціальні процедури, що називаються “збирачами сміття”. ”Збирачі сміття” повертають у купу пам'ять, що займали об'єкти, на які відсутні посилання в програмі.
2.3.1.Визначення полів даних в SmallTalk
В SmallTalk змінні класу й змінні екземпляра визначаються в різних розділах визначення класу Наприклад, для класу Point крім змінних екземпляра класу може бути визначена змінна класу Count, що буде підраховувати число створених об'єктів –точок:
ClassName: Point
instanceVariableNames: 'x y visible'
ClassVariableNames: '< список змінних класу >'
ClassVariableNames: 'Count'
Змінні класу пишуться з великої букви.
2.3.2.Визначення полів даних в C++
В C++ строгої послідовності в описі змінних класу й екземпляра не існує. Змінні класу визначається зі словом static:
class A { int i,j ; // змінні екземпляра класу
static int k=5 ; // змінні класу
……………
} a, *pa;
Особливості визначення:
Статичні змінні даних повинні бути обов'язково проініціалізовані до запуску програми усередині класу при оголошенні змінної
Static int k=5;
або поза класом
A::k=5;
Змінні екземпляра класу не повинні бути проініціалізовані при оголошенні. Для ініціалізації змінних екземпляра існують спеціальні методи, які називаються конструкторами.
2.3.3.Визначення полів даних в Delphi
Змінні екземплярів класу визначаються усередині опису класу. Однак у класі не існує окремого розділу для опису змінних класу. Як змінні класу слід розглядати глобальні змінні, які визначаються усередині модуля, що містить опис класу, у розділі var:
unit <ім'я модуля >
interface
uses
<список використаних модулів >
type
<визначення класів >
end
var
<список змінних >
implementation
<реалізації методів >
end.
2.3.4.Визначення змінних в Java
В Java всі змінні визначаються усередині класу. Вони повинні бути оголошені поза методами на самому початку визначення класу.
Для статичних змінних, які мають спеціфікатор static, пам'ять виділяється інтерпретатором з першою появою змінної. Ці змінні існують в однині.
class MyClass {
static int classVar; // змінна класу
int instVar; // змінна екземпляра класу
………… }
Як змінну класу, так і змінну екземпляра можна оголосити з модифікатором final, і тоді вона буде константою (аналогічно оператору #define у С++). Прийнято константи йменувати великими літерами, і вони повинні бути проініціалізовані при оголошенні.
final double PI=3.14;
final static int T=10;