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



ЗНАЕТЕ ЛИ ВЫ?

Віртуальні та динамічні методи, їхнє призначення та використання

Поиск

Статичні методи зручні, коли в програмі заздалегідь відомо, які типи об'єктів будуть використовуватися, і приведення типів, як правило, не потрібно. У ряді випадків, особливо у великих проектах, часто доводиться зберігати в змінні об'єкти-нащадки (як у прикладі з TCar і TMAZ), причому конкретний тип цих об'єктів може бути невідомий. Тому в Object Pascal реалізований новий тип методів - віртуальні методи (для їхнього опису існує зарезервоване слово virtual). Описати віртуальний метод можна так.

type
TCar = class(TObject)
procedure Move; virtual;
end;

Такі методи в класах-нащадках можуть бути перекриті методами з однойменними заголовками. Щоб явно вказати компілятору, що визначений метод перекриває віртуальний метод батька, треба використовувати ключове слово override.

type
TMAZ = class(TCar)
procedure Move; override;
end;

Тепер у наведеному прикладі можна не виконувати приведення типів. Під час роботи програми вона самостійно визначить тип збереженого в змінній Car об'єкта і викличе потрібний метод.

Car:= TMAZ.Create;
Car.Move;

Викличеться метод Move класу TMAZ. Якщо ж цей метод не перекрити (не вказати ключове слово override), то викличеться метод Move класу TCar.

Замість ключового слова virtual можна застосовувати ключове слово dynamic, що виконує ті ж функції й описує метод як динамічний.

type
TCar = class(TObject)
procedure Move; dynamic;
end;

Різниця між віртуальними і динамічними методами полягає тільки в деталях програмної реалізації. Віртуальні методи оптимізовані для максимальної швидкодії, динамічні - для максимальної економії пам'яті (створення компактного коду).

Абстрактні методи.

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

Такий метод треба оголосити в батьківському класі як абстрактний.

type
TStudent = class(TObject)
procedureName; virtual; abstract;
end;

Тепер описувати реалізацію методу TStudent.Name не треба.

Абстрактним може бути тільки динамічний або віртуальний метод.

Що таке поліморфізм. Види поліморфізму.

Поліморфі́зм — концепція в програмуванні, відповідно до якої використовується спільний інтерфейс для обробки даних різних спеціалізованих типів.

В контексті об'єктно-орієнтованого програмування, найпоширенішим різновидом поліморфізму є здатність екземплярів підкласу грати роль об'єктів батьківського класу, завдяки чому екземпляри підкласу можна використовувати там, де використовуються екземпляри батьківського класу.[1]

Прикладом поліморфізму в більшості мов програмування є бінарний оператор +, який може мати своїми аргументами дані різного типу: цілі числа, числа з плаваючою точкою, комплексні числа навіть рядки:

1 + 2 - операнди цілого типу, результат цілого типу.

1.2 + 1.0e3 - операнди дійсних типів, результат дійсного типу

"коля" + "маня" - операнди рядки, результат конкатенований рядок

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

Характеристики

Поліморфізм — один з трьох найважливіших механізмів об'єктно-орієнтованого програмування. Поліморфізм дозволяє писати більш абстрактні програми і підвищити коефіцієнт повторного використання коду.

Спільні властивості об'єктів об'єднуються в систему, яку можуть називати по різному: інтерфейс, клас. Спільність має зовнішнє і внутрішнє вираження. Зовнішня спільність проявляється як однаковий набір методів з однаковими іменами і сигнатурами (типами аргументів і результатів).

Внутрішня спільність є однакова функціональність методів. Її можна описати інтуїтивно виразити у вигляді строгих законів, правил, яким повинні підкорятись методи. Можливість приписувати різну функціональність одному методу (функції, операції) називається перевантаженням методу (функції, операції).

Види поліморфізму:

- Статичний і динамічний поліморфізм

- Поліморфізм-перевантаження

- Поліморфізм включення

- Поліморфізм перевизначення

- Параметричний поліморфізм

Ієрархія стандартних класів Delphi

TObject  

 

TPersistent  

 

 

TComponent     TPicture   TCanvas
TControl
TGraphicControl   TWinControl

Клас TObject:

Містить конструктор Create, деструктор Destroy; virtual

Free-знищує елемент якщо він був створений
Free-якщо там не Nil то

DefaultHandler –обробляє повідомлення за замрвчуванням

TPersistant – забезпечує коректну роботу ObjectInspector; published

TComponent – від нього успадковується вся палітра компонент і клам Tapplication

TControl – визначає методи обробки повідомлень від мишки і клавіатури

TWinControl- відповідає за створення віконної системи Delphi

30.Напишіть програму Sphere!

program Project7;

{$APPTYPE CONSOLE}

{$R *.res}

uses

SysUtils;

Const Pi=3.14;

Type Sphere = class(Tobject)

private

R:real;

public

Constructor Creat (x:Real);

Procedure SetRadius(NewRadius:real);

Function GetRadius:real;

Function GetDiametr:real;

Function GetLKola:real;

Function GetArea:real;

Function GetVolume:real;

Procedure DisplayStatistic;

End;

Procedure Sphere.SetRadius(NewRadius:Real);

Begin

if R>0 then R:=NewRadius

else R:=1;

End;

Constructor Sphere.Creat(x: Real);

Begin

R:=x;

End;

Function Sphere.GetRadius;

Begin

GetRadius:=R;

End;

Function Sphere.GetDiametr;

Begin

GetDiametr:=2.0*R;

end;

Function Sphere.GetLKola;

Begin

GetLKola:=Pi*GetDiametr;

end;

Function Sphere.GetArea;

Begin

GetArea:=4.0*Pi*R*R;

End;

Function Sphere.GetVolume;

Begin

GetVolume:=(4.0*Pi*R*R*R)/3.0;

End;

Procedure Sphere.DisplayStatistic;

Begin

Writeln('Radius=',GetRadius);

Writeln('Diametr=',GetDiametr);

Writeln('Lenght=',GetLKola:10:4);

Writeln('Area=',GetArea:10:4);

Writeln('Volume=',GetVolume:10:4);

End;

Var MySphere:Sphere;

nSphere: Sphere;

newRadius: Real;

T:integer;

Begin

Write('My Radius='); read(newRadius);

MySPhere:=Sphere.Creat(newRadius);

nSphere:=Sphere.Creat(6.0);

MySphere.SetRadius(newRadius);

Writeln(pi*nSphere.GetRadius);

MySphere.DisplayStatistic;

Writeln;

Writeln('======Statistic=====');

nSphere.DisplayStatistic;

end.

Повідомлення в Delphi.

Повідомлення – це динамічні методи. Спеціалізованою функцією динамічних методів є методи обробки повідомлень.Їх оголошують за допомогою ключового слова message, за яким слідує цілочисельна константна – номер повідомлення.

Type TWControl = class(TControl); ……..

Procedure CMKeyDown(var Msg:TCMKeyDown); message CM_KeyDown;

……. End;

За ключовим словом message,яке стоїть в кінці заголовка процедури стоїть зарезервована константа в якій зашифровано номер повідомлення

CM- компонента Message;

WM- Windows message;

Метод обробки повідомлення має формат процедури і містить єдиний var-параметр.

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

Події в Delphi.

Подія - властивість процедурного типу, призначена для створення реакції користувача на ту або іншу вхідну дію.

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

Список подій для даного обєкта, на який він реагує, можна побачити в Обджект Інспектор на сторінці Івентс. Із сказаного випливає що існує 2-і категорії подій і способів їх обробки

Одні спрацьовуються засобами Віндовс, інші – засобами бібліотеки VLC Delphi. Окрім передбачуваних, є ще не стандартні які може обробляти Delphi або ми самі:

MessageDlg(‘Привіт’,mtlnformation,[mbOk]);

При винекнені події ОС передає певну інформацію повязану з нею:

Procedure TForm1.FormMouseDown(Sender:TObject; Button:TMouseButton; Shift: TShift State; X,Y:Integer);

Begin

Canvas.TextOut(x,y; ‘x’+intotstr(x)+’y’+inttostr(y));

End;

Procedure TForm1.FormKeyDown(………..);

Begin

MessageDlg(Chr(key),mtlnformation,[mbOk], 0);

End;

- FonMyEvent - поле процедурного типу, що містить адресу деякого методу. Такі методи називають обробники подій. При активації об`єкту Application.OnAtcive:=MyActivatingMethod буде викликано метод-обробник.

Події мають різні параметри.Sender в казує на обєкт-джерело події. Всі події в Делфі принято позначати з префіксом Оn.

Висновки:

-Віндовс є системою яка орієнтована на події.

-Події у Віндовс мають форму повідомлень



Поделиться:


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

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