Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Об'єктно орієнтовне програмування1.doc
Скачиваний:
5
Добавлен:
17.11.2019
Размер:
1.38 Mб
Скачать

2.2. Ієрархія та успадкування

Для класифікації об'єктів використовується ієрархія. Наприк­лад, опис домашніх тварин (pets), можна подати так: собаки (dogs), кішки (cats), миші (mouses) тощо. class pet {

Master person;//власник тварини

Int weight, age,eatTime[ ]; //вага, вік, час приймання їжі Int eat (int food, int drink, int time){II процес їжі //початкові дії...

if (Time = = eatTime [і]) persion.getFood (food, drink); //метод

void voice(); //конкретні дії тварини //інше...

;

Далі створюємо класи, які описують більш конкретні об'єкти і пов'язані із загальним класом:

class Cat extends Pet {// властивості кішки int mouse Catched; //кількість пійманих мишей void toMouse(); //дії кішки //інші властивості

}

class Dog extends Pet ///властивості собак

voidpreserve(); //охороняти

}

Тут загальні властивості класу Pet не повторюються, а успад-ковуються автоматично.

Далі визначаємо об'єкт класу Dog і використовуємо в ньому всі властивості класу Pet так, неначе їх описано в класі Dog:

Dog kesi = new Dog (), charly = new Dog ();

Після цього можна ініціалізувати змінні:

kesi. age = 5;

Intp = charly.eat (50,10,12);

Процес можна продовжити:

class Kolly extends Dog {...} //колі

class Spaniel extends Dog{...} //спанієль.

Таким чином, може йтися про успадкування класів: клас Dog успадковує клас Pet, причому на кожному рівні ієрархії до класу додаються нові властивості.

Питання і завдання

  1. Дати визначення термінів: підклас, надклас, суперклас. На­ вести приклади.

  2. Описати клас Master (власник тварин).

  3. Ієрархія та успадкування: схожість та відмінності.

  4. Множинне успадкування.

2.3. Відповідальність і модульність

Процес взаємодії між об'єктами описується за допомогою ме­тодів. Звернення до методу виконується за допомогою повідом­лення (message). Існують кілька особливостей при опису повід­омлень.

  1. Повідомлення рухається до конкретного об'єкта, який знає метод розв'язування

  2. задачі. У кожного об'єкта свій поточний стан, свої значення полів класу, а це може впливати на виконання методу. Приклад — поточне значення змінної person.

  3. Спосіб виконання доручення, яке містить повідомлення, за­ лежить від об'єкта приймача. Наприклад, один власник кішки дасть їй (scass), другий — принесе мишу, а третій — візьме її до себе в квартиру. Ця властивість називається поліморфізмом.

Звернення до методу здійснення тільки на етапі виконання програми. Компілятор нічого не знає про мову! Приклад: об'єкт charly, виконує свій метод eat (), надсилає повідомлення об'єк тові, посилання на який містить змінна person. Повідомлення за­писано в рядок person. getFood (food, drink). Суть цієї тези поля­гає в тому, що об'єкт charly бере на себе відповідальність задати правильні параметри в повідомленні, а об'єкт — поточне значен­ня person — бере на себе відповідальність застосувати метод приготування getFood (), яким би він не був.

Для правильної реалізації відповідальності використовується принцип модульності. Тобто кожний клас має складати окремий модуль. До того ж члени класу, до яких не планується звернення зовні, мають бути інкапсульовані. Наприклад:

private string name;

private void preserve ();

Ці члени класів будуть закритими, а користуватися ними мо­жуть тільки примірники того самого класу: kessi може дати дору­чення charly.preserve ().

У мові Java ключові слова private, public і protected познача­ють кожний окремий клас, а принцип модульності рекомендує відкривати члени класу тільки в разі необхідності.

При зверненні до поля класу слід включати до класу спеціаль­ні методи доступу: окремо для читання цього поля (get method) і окремо для запису в це поле (set method). Наприклад, якщо створити клас Master

class Master ///власник собаки і кішки

String name; //прізвище, ім'я

//інші повідомлення

void getFood (int food, int drink);//

}, то методи доступу до поля name можуть мати такий вигляд:

public String getName; return name;

}

public void setName (string newName)

name=newName;

}

Реальні програмні фрагменти для обмеження доступу викори­стовують перевірки, які змінюють значення відповідних полів: перевірка типу значення, що вводиться, встановлення діапазону чначень, порівняння зі списком допустимих значень. Ці методи мають назву set-методи.

Дуже часто крім методів допуску створюються методи переві­рки, які повертають ті значення, що були true або false.

Таким чином, для взаємодії між об'єктами методи мають бути відкритими, а залежність між класами — якомога меншою. Це спрощує структуру програми і дає можливість використовувати належні класи для побудови інших програм. Водночас примірни­ки класу мають активно взаємодіяти один з одним за рахунок включення до класу всіх компонентів, достатніх для опису пово­дження модельованого об'єкта.

Як життєвий приклад можна навести підводний човен, що ви­конує окреме, розраховане тільки на нього завдання з відповід­ними ресурсами. Крім методу доступу public існують закриті члени класу private і захищені protected. Наприклад, опис private String name вказує на те, що даним примірником можуть корис­туватися тільки примірники одного й того самого класу; protected Sharly дозволяє доступ тільки спадкоємцям класу.

Початкове ознайомлення з основами ООП створює платформу для докладнішого вивчення змісту та структури класу.

Питання і завдання

  1. Навести життєві приклади поліформізму.

  2. Основні ознаки acces methods.

  3. Особливості is-методів.