Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекцій.doc
Скачиваний:
15
Добавлен:
03.11.2018
Размер:
1.12 Mб
Скачать

2.4 Передача повідомлень об’єктам.

Синтаксично, визначення об’єкта (екземпляра класу) у найпростішому випадку нічим не відрізняється від визначення елемента типу struct:

class ClassName

{

public:

int p;

};

ClassName object;

Можемо визначити вказівник на клас ClassName:

ClassName * objectPointer;

Очевидно, що і доступ до відкритих полів екземпляра класу буде синтаксично реалізований аналогічно, як і для структур, за допомогою операцій “.” та ”->”:

cout<<ClassName .p;

objectPointer = new ClassName;

cout<<objectPointer->p;

З точки зору концепції ООП доступ до полів об’єкта означає передачу об’єкту деякого повідомлення. Наприклад, у випадку класу Тtime, звертаючись до функції Display ми ніби запитуємо, котра година. Тобто повідомляємо об’єкт про наш запит, передаємо йому повідомлення. Таким чином , під повідомленням формально будемо розуміти програмну конструкцію звертання до поля об’єкту. Якщо звертаємось до поля-функції, то повідомлення схематично можемо зобразити так: ім’я_класу.ім’я_функції(список фактичних параметрів). Таке повідомлення викликає якусь дію, реакцію об’єкта. Можемо вважати, що звертання до звичайного поля даних класу також є елементарним повідомленням (повідомленням без параметрів): ім’я_класу.ім’я_поля. При такому підході ООП - програма являє собою послiдовнiсть виразiв, у яких об’єктам передаються деякі повідомлення.

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

Контрольні запитання

1. В чому полягають основні положення концепції ООП?

2. Що дає можливість об’єднання даних та функцій їх обробки в структурах ?

3. Як синтаксично задається клас ?

4. Як пов’язані класи та типи даних ?

5. В чому специфіка закритого розділу класу?

6. Яку специфікацію доступу мають дані при відсутності специфікатора доступу ?

7. Що ви розумієте під повідомленням, яке передається об’єку?

8. Які переваги у використанні закритих даних?

Завдання 2.

1. Описати клас Сомplex , що містить поля даних - дійсну та уявну частину

комплексного числа. Написати програму для ілюстрації доступу до полів даних з різними специфікаторами доступу.

2. Описати клас , полями якого є змінна типу FILE* та функціі запису та читання з файлу.

3. Описати клас Літак, який максимально підходить для моделювання реального об’єкта (відкриті поля даних - положення, тип, розміри, колір тощо; закриті - паливо, боєприпаси, справність систем. Написати методи руху літака , його зображення в графічному режимі.

4. Описати (на основі класу Ttime) клас годинник, який містить методи малювання годинника та показує дату та час при передачі йому деякого повідомлення :

а) за допомогою натискання деякої “гарячої” клавіші;

б) за допомогою маніпулятора “миші”;

5.Описати клас Океан, який містить поле -двовимірний масив елементів, які визначають стан океану:

0 - в даній частині немає нічого

1-N -в даній частині знаходиться рибка(чи тварина) відповідного типу

N+1 -в даній частині знаходиться певний статичний об’єкт(перешкода)

6. Описати клас Клітина , який містить

а) інформацію про стан 8 різних елементів клітини (ядро, ядерце,тощо) у вигляді бітових полів деякої змінної(1-елемент здоровий, 0-пошкоджений або відсутній).

б) набір векторів, що задають просторовий напрям можливого поділу клітини(породження нової).

в) інформацію про просторовий вигляд клітини (наприклад, у вигляді методу, який схематично малює клітину чи певних параметрів функціонального представлення границі клітини).