Опис: Розглянутий у попередній лекції поняття спадкування дозволяє використовувати методи і дані базових класів, але при цьому розрізняють два види спадкування - статична і динамічна спадкування (статичну і динамічну зв'язування методів).
Розмір файлу: 41.49 KB
Роботу скачали: 3 чол.
Якщо ця робота Вам не підійшла внизу сторінки є список схожих робіт. Так само Ви можете скористатися кнопкою пошук
Лекція 10 ПРИНЦИП поліморфізм
10.1 Поняття поліморфізму
Розглянуте в попередній лекції поняття спадкування дозволяє використовувати методи і дані базових класів, але при цьому розрізняють два види спадкування # 150; статичне і динамічне спадкування (статичну і динамічну зв'язування методів).
Статична успадкування це таке спадкування, всі зв'язки якого формуються під час компіляції програми і фактично визначаються в самій структурі опису класів.
Динамічне успадкування, і пов'язане з ним властивість поліморфізму, припускають, що деякі зв'язки формуються в процесі виконання програми.
Поліморфізм це різноманіття форм реалізації однойменних методів в ланцюжку успадкованих класів.
Реалізація властивості поліморфізму здійснюється за допомогою спеціальних віртуальних методів і, так званих, абстрактних базових класів.
Розглянемо поняття абстрактних базових класів.
Для отримання переваг успадкування класів розробники ООП стали створювати базові класи, що включають в себе всі можливі методи обробки даних певного безлічі об'єктів, але, при цьому, базові класи, як правило, не включали елементи даних.
Наприклад, при створенні базового класу «геометричні фігури» можна включити методи знаходження площі або обсягу. Природно, якщо похідним класом є клас «точка» або клас «відрізок», то такі методи для цих об'єктів позбавлені сенсу.
Базові класи, для яких створення об'єктів неможливо або не має сенсу, стали називати абстрактними базовими класами. Абстрактні базові класи служать тільки для породження нащадків. Як правило, в них задаються тільки набори методів, які кожен з нащадків буде реалізовувати по-своєму. Подібні методи абстрактних базових класів розраховані на неіснуючі # 150; віртуальні елементи даних (тобто на елементи даних майбутніх класів в ланцюжку спадкування).
Методи, розраховані на неіснуючі, віртуальні елементи даних майбутніх класів в ланцюжку спадкування, стали називати віртуальними методами.
Для позначення віртуальних методів в мові C # використовується спеціальна вказівка (спеціальний термін # 150; virtual), що означає, що метод є віртуальним. наприклад:
virtual public double ploc ()
При цьому під час виконання програми в кожен створюваний об'єкт додатково включається покажчик на створену таблицю VMT.
Якщо похідний клас має свою реалізацію однойменного віртуального методу, то в ньому цей метод повинен оголошуватися як замісник або перекриває метод з атрибутом override. наприклад,
override public double ploc ()
Перевизначати віртуальний метод в кожному з похідних класів не обов'язково. Якщо він виконує влаштовують похідний клас дії, то метод просто успадковується.
Заміщає віртуальний метод повинен володіти таким же набором параметрів, як і однойменний метод базового класу.
Принцип поліморфізму базується на «перекритті» віртуальних методів абстрактного базового класу заміщають методами. При цьому кожен похідний клас може мати свою індивідуальну форму реалізації успадкованих віртуальних або заміщають методів.
При цьому властивість поліморфізму # 150; це можливість для об'єктів різних класів, пов'язаних спадкуванням, реагувати по-різному при зверненні до однієї і тієї ж (за назвою) віртуальної функції базового класу.
Поліморфізм, в перекладі з грецької мови, означає «багато форм», що в даному випадку означає «один виклик # 151; багато методів ».
При описі базових класів рекомендується визначати в якості віртуальних ті методи, які в похідних класах повинні реалізовуватися по-іншому. Якщо у всіх класах ієрархії метод буде виконуватися однаково, його краще визначити як звичайний метод.
10.2 Приклад статичного успадкування методів
Розробляємо ланцюжок успадкованих класів найпростіших геометричних фігур базовий, точка і коло.
В якості базового візьмемо клас, який не має полів і містить тільки віртуальну функцію обчислення площі і «чисто віртуальну функцію» друку.
Приклад статичного успадкування # 150; звичайне створення об'єктів, присвоювання полях даних (координат точки або координатами центру кола і радіусу) деяких випадкових значень в діапазоні від 0 до 100 і друк цих значень.
Вихідний код програми: