- •Передмова
- •Розділ 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.4.Доступ до даних
2.4.1.Доступ до даних в SmallTalk
Мова SmallTalk є нетипізованою мовою. Тут немає поняття оголошення змінної певного типу. Змінні можуть вказувати на будь-який об'єкт і протягом виконання програми можуть вказувати на різні об'єкти.
Доступ до змінних класу може бути здійснений тільки через екземпляри класу й ні як інакше. Тобто змінні класу сховані для всіх інших об'єктів, включаючи й об'єкти даного класу. Тільки сам об'єкт може змінити значення змінної через свої методи. Наприклад для об'єкта а класу Point це буде виглядати в такий спосіб:
“одержати значення змінної x об'єкта а”
a x
“одержати значення змінної y об'єкта а”
a y
До змінних класу можна звертатися прямо, тому що вони є глобальними для всіх екземплярів класу, але тільки через відповідні методи екземплярів. Наприклад, якщо в класі Point визначити метод pointCount, що буде видавати значення змінної класу Count, те доступ до цієї змінної може бути здійснений таким чином:
a pointCount.
2.4.2.Доступ до даних в C++
У С++ можливості доступу до змінних значно ширше, ніж в SmallTalk. Насамперед це пов'язане з використанням специфікаторів доступу public, private, protected, які мають наступне значення:
Public: – змінні повністю відкриті для будь-яких функцій.
Private: – змінні можуть бути використані тільки в методах даного класу (або в методах “дружньої” функції).
Protected: – змінна може бути використана в методах даного класу й у методах похідних класах від даного класу.
У табл. 2.1 наведені умови дії специфікаторів для різних класів.
Таблиця 2.1
Правила дії специфікаторів доступу в C++
-
Правило
class
struct
union
за замовчуванням
private
public
public
зазначений явно
public
private
—
зазначений явно
protected
protected
—
Нижче приводиться приклад опису класу зі специфікаторами доступу до змінного.
class C { int a; // private
public: double b;
private: char *s; };
struct C { int a; // public
public double b;
private: char *s; };
Особливості доступу до даних:
Пам'ять для статичних змінних виділяється компілятором у сегменті даних, тому до цих змінних можна звертатися ще до створення об'єкта, використовуючи ім'я класу:
A::k=3; // для приклада з п. 2.3. 2
Доступ до полів даних об'єктів може бути здійснений тільки через об'єкт, використовуючи оператор « . »:
a.i=2;
pa->i=3;
2.4.3.Доступ до даних в Delphi
Object Pascal ще більш багатий відносно специфікаторів, чим С++. У ньому допускається використання чотирьох специфікаторів:
Public – загальнодоступні змінні; видимі в будь-якій програмі, у будь-якому модулі, що має доступ до даного модуля.
Private – змінні видимі тільки усередині модуля, у якому визначені (визначені усередині класу).
Protected – усередині модуля діють як private, а поза модулем – змінні доступні тільки усередині методів підкласу.
Published – ідентичні public, але вказують компіляторові додати додаткову інформацію про тип часу виконання (run-time type information). Використовуються на етапі проектування, наприклад при створенні нових компонентів. Змінні, зазначені з даним специфікатором, будуть представлені у вікні властивостей даного об'єкта.
Особливості застосування специфікаторів:
Специфікатори повинні бути явно зазначені.
Існує строгий порядок проходження специфікаторів доступу за алфавітом: private, protected, public, published.
Всі поля, що оголошені в розділі published, повинні бути класового типу
