Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Віртуальні та динамічні методи, їхнє призначення та використання↑ Стр 1 из 4Следующая ⇒ Содержание книги
Поиск на нашем сайте
Статичні методи зручні, коли в програмі заздалегідь відомо, які типи об'єктів будуть використовуватися, і приведення типів, як правило, не потрібно. У ряді випадків, особливо у великих проектах, часто доводиться зберігати в змінні об'єкти-нащадки (як у прикладі з TCar і TMAZ), причому конкретний тип цих об'єктів може бути невідомий. Тому в Object Pascal реалізований новий тип методів - віртуальні методи (для їхнього опису існує зарезервоване слово virtual). Описати віртуальний метод можна так. type Такі методи в класах-нащадках можуть бути перекриті методами з однойменними заголовками. Щоб явно вказати компілятору, що визначений метод перекриває віртуальний метод батька, треба використовувати ключове слово override. type Тепер у наведеному прикладі можна не виконувати приведення типів. Під час роботи програми вона самостійно визначить тип збереженого в змінній Car об'єкта і викличе потрібний метод. Car:= TMAZ.Create; Викличеться метод Move класу TMAZ. Якщо ж цей метод не перекрити (не вказати ключове слово override), то викличеться метод Move класу TCar. Замість ключового слова virtual можна застосовувати ключове слово dynamic, що виконує ті ж функції й описує метод як динамічний. type Різниця між віртуальними і динамічними методами полягає тільки в деталях програмної реалізації. Віртуальні методи оптимізовані для максимальної швидкодії, динамічні - для максимальної економії пам'яті (створення компактного коду). Абстрактні методи. У деяких випадках немає змісту виконувати реалізацію визначених методів базового класу, наприклад, коли всі реалізації деякого методу сильно відрізняються одне від одного, а метод батьківського класу не використовується. Разом з тим відповідний метод зобов'язаний бути реалізований у кожному з класів-нащадків. Такий метод треба оголосити в батьківському класі як абстрактний. type Тепер описувати реалізацію методу TStudent.Name не треба. Абстрактним може бути тільки динамічний або віртуальний метод. Що таке поліморфізм. Види поліморфізму. Поліморфі́зм — концепція в програмуванні, відповідно до якої використовується спільний інтерфейс для обробки даних різних спеціалізованих типів. В контексті об'єктно-орієнтованого програмування, найпоширенішим різновидом поліморфізму є здатність екземплярів підкласу грати роль об'єктів батьківського класу, завдяки чому екземпляри підкласу можна використовувати там, де використовуються екземпляри батьківського класу.[1] Прикладом поліморфізму в більшості мов програмування є бінарний оператор +, який може мати своїми аргументами дані різного типу: цілі числа, числа з плаваючою точкою, комплексні числа навіть рядки: 1 + 2 - операнди цілого типу, результат цілого типу. 1.2 + 1.0e3 - операнди дійсних типів, результат дійсного типу "коля" + "маня" - операнди рядки, результат конкатенований рядок Поліформізм реалізується в багатьох мовах програмування за домогою перевантаження функцій. Характеристики Поліморфізм — один з трьох найважливіших механізмів об'єктно-орієнтованого програмування. Поліморфізм дозволяє писати більш абстрактні програми і підвищити коефіцієнт повторного використання коду. Спільні властивості об'єктів об'єднуються в систему, яку можуть називати по різному: інтерфейс, клас. Спільність має зовнішнє і внутрішнє вираження. Зовнішня спільність проявляється як однаковий набір методів з однаковими іменами і сигнатурами (типами аргументів і результатів). Внутрішня спільність є однакова функціональність методів. Її можна описати інтуїтивно виразити у вигляді строгих законів, правил, яким повинні підкорятись методи. Можливість приписувати різну функціональність одному методу (функції, операції) називається перевантаженням методу (функції, операції). Види поліморфізму: - Статичний і динамічний поліморфізм - Поліморфізм-перевантаження - Поліморфізм включення - Поліморфізм перевизначення - Параметричний поліморфізм Ієрархія стандартних класів Delphi
Клас TObject: Містить конструктор Create, деструктор Destroy; virtual Free-знищує елемент якщо він був створений 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 с.) |