|
Зауваження. Всі наведенні вище викладки поки що не демонструють жодної переваги ООП, точніше можна сказати, отримали зворотний ефект, програма стала громісткою. Проте всі ці оголошення матимуть ефект, якщо застосувати наступні визначені принципи ООП: наслідування та поліморфізм.
Тема: Ієрархія об’єктів за принципом наслідування.
Як вже відмічалося об’єктно-орієнтовні програми являють собою поведінку в залежності від стану. Об’єкти можуть належати одному класу, це відповідає ієрархії по складу, або ієрархії об’єктів.
Наприклад. Автомобіль складається з двигуна, трансмісії, шасі, електрообладнання, кузова.
Інший варіант ієрархії називається ієрархією по номенклатурі, або ієрархією класів.
Наприклад. Тепловий двигун – різновид механічної машини, двигун внутрішнього згорання – різновид теплового двигуна, карбюраторний двигун – різновид ДВЗ, двигун ВАЗ2106 – різновид карбюраторного двигуна.
Для побудови ієрархії класів використовують другий визначальний принцип – наслідування, при цьому це відношення пов'язує два класи об’єктів, що називаються відповідно предком та нащадком.
Нащадок успадковує всю структуру предка. Він може мати без власного оголошення ті ж поля даних і методів, окремі методи можуть бути перевизначені. Також можуть бути добавленні нові поля даних і методи. Звузити ж структуру не можна. Це означає, що наслідування дає такий же ж за кількістю полів або ширший клас об’єктів.
При оголошенні нового класу нащадка, описуються тільки нові і перевизначені поля даних. Новий клас будується теж при допомозі службового слова object, після якого в дужках вказується ім'я предка.
На основі класу „точка” можна побудувати декілька класів нащадків, що визначають класи як контури, а з них нові класи фігур, як площі, обмежені цим контуром. Є три ієрархії в глибину і на кожному рівні три класи у ширину. Остання ієрархія буде ієрархією по-складу.
Наприклад. В якості прикладу розглянемо клас нащадок „коло на екрані”, що побудоване від предка „точка”.
Поля даних x,y,c,f повністю успадковуються, потрібно добавити елемент стану радіус, також успадковуються методи, потрібно перевизначити методи ON,OFF, крім цього потрібно добавити методи задання та повідомлення радіусу, таким чином оголошення класу має вигляд:
CIRCLE=object(POINT)
R:integer;
PROCEDURE SETR(rr:integer);
FUNCTION GETR: integer;
PROCEDURE ON;
PROCEDURE OFF;
END;
PROCEDURE CIRCLE.SETR;
BEGIN
r:=rr
END;
FUNCTION CIRCLE.GETR;
BEGIN
GETR:=r
END;
PROCEDURE CIRCLE.ON;
BEGIN
Дата добавления: 2015-09-11; просмотров: 16 | Поможем написать вашу работу | Нарушение авторских прав |