
- •Передмова
- •Розділ 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.4.Доступ до даних в Java
В Java передбачено три специфікатори доступу, правила дії яких наведені в табл. 2.2.
Таблиця 2.2
Правила дії специфікаторів доступу в Java
-
Специфікатор доступу
клас
підклас
пакет
оточення
private
v
protected
v
v
v
public
v
v
v
v
Якщо елемент класу оголошений як private, то він буде доступний тільки усередині даного класу. З інших класів доступ до нього одержати неможливо. У випадку оголошення елемента як protected, він буде доступний усередині класу, а також будь-якому класу усередині свого пакета й класам-нащадкам поза своїм пакетом. Якщо елемент буде оголошений як public, він буде видний з будь-якого місця програми й з будь-якого класу будь-якого пакета. Нарешті, якщо в елемента класу відсутній специфікатор, рівень доступу до нього визначається за замовчуванням: елемент доступний у тім пакеті, де оголошений сам клас.
Особливості доступу до даних:
Використовується тільки оператор '.', тому що немає розходження між змінними - все є покажчиками.
До змінних класу можна звертатися, як через об'єкти даного класу, так і використовуючи ім'я класу:
MyClass a;
a.classVar=3 ;
int i=MyClass.classVar;
До змінних екземпляра можна звертатися тільки через об'єкти:
a.instVar=5;
2.5.Спеціальні змінні
Необхідність у цих змінних виникає тоді, коли потрібно усередині методу звернутися до об'єкта, для якого цей метод буде викликаний. До спеціальним змінних відносяться: self, super, this, sender. Дані змінні в різних мовах програмування існують для вказівки об'єктів-одержувачів повідомлень.
2.5.1.Спеціальні змінні в SmallTalk
В SmallTalk використовуються дві спеціальні змінні : self і super.
Усередині опису методу змінна self служить для позначення об'єкта-одержувача повідомлення, реалізованого за допомогою даного методу. Наприклад, в описі методу sqr, що забезпечує зведення в ступінь цілого числа, дана змінна використається в такий спосіб:
class Integer
instanceMethods 'sqr'
sqr
^(self*self)
При виклику методу sqr замість змінної self буде підставлений об'єкт, для якого даний метод викликається. Для приклада, показаного нижче, це буде ціле число, рівне 5:
a:=Integer new
a:=5
a sqr 25
Примітка: змінна self може використовуватись, як усередині методів екземпляра , так і усередині методів класу екземпляра. В останньому випадку замість її буде підставлятися об'єкт-клас.
Змінна super також указує на об'єкт-одержувач повідомлення, що реалізується за допомогою методу у якому вона застосовується Однак для цієї змінної викликається не метод даного класу, а однойменний метод суперкласу, тобто відбувається автоматична підстановка методу із суперкласу.
class Object
c
lassMethods
‘new’
…………………………
class A
classMethods ‘new’
instanceMethods 'go'
go
super new
……………
При виконанні методу go для екземпляра класу А буде викликаний метод new класу Object.
2.5.2.Спеціальні змінні в C++
У С++ роль self виконує this, що є покажчиком на об'єкт класу, у методах в яких він використовується. Даний покажчик присутній неявно у всіх методах. Однак він може викликатися і явно:
Class X { X* this ;
int i;
int readme() {return i;}
};
//насправді мається на увазі:
int readme() {return this->i;}