Віртуальні методи можуть працювати дійсно як віртуальні або як звичайні методи. Необхідний режим пізнього зв’язування, якщо ж цього режиму немає, то віртуальний Метод працює як звичайно. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Віртуальні методи можуть працювати дійсно як віртуальні або як звичайні методи. Необхідний режим пізнього зв’язування, якщо ж цього режиму немає, то віртуальний Метод працює як звичайно.



Тема: Конструктори та деструктори.

Вище було сказано, що віртуальність методу залежить від режиму зв’язування коду методу із іменем об’єкта. Перемикання режимів раннього і пізньог7о зв’язування здійснюється за допомогою застосування спеціальних методів, що називаються конструкторами та деструкторами.

Метод конструктор використовується для активізації режиму пізнього зв’язування, після явного виклику одного із конструкторів деякого об’єкта. Всі методи, які оголошуються як віртуальні будуть працювати як віртуальні.

Конструктор оголошується за допомогою службового слова CONSTRUCTOR, що замінює procedure або function відповідно. Все решта в оголошенні методу залишається без змін.

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

TYPE

POINT=object

x,y:integer;

c:byte;

f:boolean;

CONSTRUCTOR INIT;

............

END;

CONSTRUCTOR POINT.INIT;

BEGIN

END;

Використання конструкторів повинно здійснюватися згідно наступних правил:

Конструкторів може бути декілька у одного об’єкта. Явний виклик будь-якого з них ініціалізує режим пізнього зв’язування.

Конструктором варто вибирати, або ініціалізуючий метод, або пустий.

Конструктор не може бути віртуальним.

Конструктори можуть успадковуватися при наслідуванні.

5. Конструктор включає пізнє зв’язування лише для „свого” об’єкта.

Оскільки режим пізнього зв’язування дещо сповільнює роботу програми і збільшує код, то цей режим варто виключати лише при необхідності. Для закриття режиму пізнього зв’язування використовується ще один вид методів - деструктор.

Оголошується деструктор за допомогою службового слова DESTRUCTOR. Це слово замінює відповідно слово procedure або function у заголовку відповідного методу. Як і конструктор деструктор може бути один з значущих методів, який виконує деяку завершальну операцію об’єкта. Також деструктор може бути пустим, тоді його основне призначення закрити режим пізнього зв’язування.

Застосування деструктора варто проводити згідно з наступними правилами:

Деструкторів у об’єкта може бути декілька. Пізнє зв’язування закривається явним викликом будь-якого з них.

В якості деструктора варто вибирати, або завершальний метод, або пустий метод.

Деструктор може бути віртуальним.

Деструктори можуть успадковуватися за принципом наслідування.

Свій режим зв’язування у об’єкта закриває свій деструктор.

Таким чином для реалізації методу рух у попередньому прикладі потрібно, щоб оголошення структури класу point або circle мало наступний вигляд:

TYPE

POINT=object

x,y:integer;

c:byte;

f:boolean;

CONSTRUCTOR INIT;

PROCEDURE SETCOORD (xx,yy:integer);

PROCEDURE SETCOL (cc:byte);

FUNCTION GETXX: integer;

FUNCTION GETYY: integer;

PROCEDURE ON; virtual;

PROCEDURE OFF;virtual;

PROCEDURE RUH(dx,dy:integer);

DESTRUCTOR DONE;

END;

CIRCLE=object(POINT)

r:integer;

PROCEDURE SETR(rr:integer);

FUNCTION GETR: integer;

PROCEDURE ON; VIRTUAL;

PROCEDURE OFF; VIRTUAL;

END;

.........

{реалізація методів}

VAR

a:POINT;

b:CIRCLE;

BEGIN

b.SETCOORD(200,200);

b.SETCOL(9);

b.SETR(20);

b.INIT;

b.RUH(50,50);

b.DONE;

END.

Тема: Динамічні об’єкти.

Можна будувати відповідні вказівні типи. Застосування вказівників дозволяє оперувати із динамічними об’єктами. Використання саме динамічних об’єктів є зручним у тих випадках, коли структура цих об’єктів і реалізація їх поведінки є достатньо громісткою, а отже код у пам'яті виявиться великим.

В статичній пам'яті не вдасться розмістити достатню кількість таких об’єктів, при цьому можуть бути задачі, в яких кількість об’єктів не є фіксованою, тобто вони постійно утворюються і знищуються.

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

TYPE

POINT=object

.........

END;

CIRCLE=object(POINT)

.........

END;

PPOINT=^POINT;

PCIRCLE:=^CIRCLE;

VAR

a:POINT;

b:CIRCLE;

pa:PPOINT;

pb:PCIRCLE;

Так оголошені вказівники на об’єкти класів є статичними змінними – це чотирибайтні числа-адреси у пам'яті.

Створюються динамічні об’єкти явним викликом

New(pa);

New(pb);

При цьому в динамічній пам'яті відводиться ділянка відповідного розміру, що відповідає структурі об’єкта.

Задати стан чи реалізувати поведінку через вказівник на динамічний об’єкт можна таким чином:

pa^.SETCOORD(100,100);

pa^.SETCOL(5);

pa^.ON;

Використання процедури New для створення динамічного об’єкту має одну особливість від використання у випадках інших динамічних змінних. Якщо об’єкт має метод конструктор, то цей метод може бути виконаний одночасно із створенням динамічного об’єкта, при цьому ідентифікатор методу вказується другим параметром процедури New.

New(pa,INIT);

New(pb,INIT);

Використання конструктора в якості другого параметру не обов’язково.

Знищуються динамічні об’єкти явним чином.

Dispose(pa);

Dispose(pb);

При цьому відповідні вказівники звільняються від своїх значень і відповідні ділянки пам'яті звільняються від відповідних об’єктів.

Якщо динамічний об’єкт має методи-деструктори, то їх можна одночасно викликати із знищенням динамічного об’єкта, при цьому в якості другого параметру процедури Dispose використовується ідентифікатор деструктора.

Dispose(pa,DONE);

Dispose(pb,DONE);

Тема: Особливості операції присвоєння між динамічними об’єктами.

Між динамічними об’єктами як і між статичними можна виконувати присвоєння, при цьому присвоєння можливе між обертами одного класу та між об’єктами різних класів, що пов’язані принципом наслідування і лише від нащадка до предка, проте операція присвоєння у випадку динамічних об’єктів повинна виконуватися з певною обережністю. Взагалі присвоєння копіює стан і реалізацію поведінки між об’єктами. Якщо операція присвоєння виконується між вказівниками, то про ніяке копіювання стану немає мови.

VAR

pa1,pa2:PPOINT;

pb1,pb2:PCIRCLE;

BEGIN

New(pa1);

New(pa2);

pa2^.SETCOORD(100,100);

pa2^.SETCOL(5);

pa2^.ON;

pa1:=pa2;

Присвоєння виду в даному випадку не скопіює стан і поведінку другого об’єкта до першого, а надасть другому об’єкту два вказівники.

Перший об’єкт втратить свій вказівник і перетвориться у „сміття” у пам'яті. Така ситуація називається структурною невизначеністю, оскільки деякі маніпуляції з двома об’єктами можна буде виконати через вказівник ра1. хоча коди всіх методів другого об’єкта пов’язані з вказівником ра2.

Для того, щоб за допомогою операції присвоєння скопіювати стан потрібно використовувати операцію розіменування вказівника.

Тема: Методи розробки алгоритмів і програм.

Зрозуміло, що багато прикладних задач можна розв’язати різними способами. Вибір методу розв'язку визначається із:

1. постановки задачі;

2. наявними програмними ресурсами;

Вимогами по швидкодії, використанням ресурсів ЕОМ.

Останній пункт означає, що обраний варіант програмування задачі повинен реалізувати її за найменший час або якомога менше використовувати ресурси оперативної та зовнішньої пам'яті. Зрозуміло, що час роботи програми в часових одиницях не є критерієм ефективності, оскільки він ще суттєво залежить від архітектури ЕОМ, тому цей варіант оцінювання ефективності проводять за кількістю так званих важких операцій даної задачі.

Враховуючи багатоманіття способів розв'язку конкретної задачі, потрібно володіти основними методами побудови алгоритмів та способами оцінювання їх ефективності. Окрім розглянутої часової ефективності це може бути критерій стійкості розв'язку, повноти розв'язку, оптимальності.

Тема: Метод повного перебору.

Застосовується так званих задачах вибору оптимального варіанту. Полягає у наступному: перебираються всі можливі варіанти розв'язку і для кожного з них визначається деяка цільова функція, яка має набувати

Переваги: простота методу як в алгоритмічному варіанті, так і в програмній реалізації.



Поделиться:


Последнее изменение этой страницы: 2016-09-19; просмотров: 266; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 54.147.123.159 (0.018 с.)