19821

Віртуальні методи. Абстрактні класи

Доклад

Информатика, кибернетика и программирование

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

Украинкский

2015-01-12

17.72 KB

8 чел.

Абстрактний клас в об'єктно-орієнтованому програмуванні - базовий клас, який не передбачає створення екземплярів. Абстрактні класи реалізують на практиці один з принципів ООП - поліморфізм. Абстрактний клас може містити (і не містити [1]) абстрактні методи і властивості. Абстрактний метод не реалізується для класу, в якому описаний, однак повинен бути реалізований для його неабстрактних нащадків. Абстрактні класи являють собою найбільш загальні абстракції, тобто мають найбільший обсяг і найменше зміст.
В одних мовах створювати екземпляри абстрактних класів заборонено, в інших це допускається (наприклад, Delphi), але звернення до абстрактного методу об'єкта цього класу в процесі виконання програми призведе до помилки. У багатьох мовах допустимо оголосити будь-який клас абстрактним, навіть якщо в ньому немає абстрактних методів (наприклад, Java), саме для заборони створення екземплярів.Абстрактний клас можна розглядати в якості інтерфейсу до сімейства класів, породженому ним, але, на відміну від класичного інтерфейсу, абстрактний клас може мати певні методи, а також властивості.
Абстрактні методи часто є і віртуальними, у зв'язку з чим поняття «абстрактний» і «віртуальний» іноді плутають.

Віртуальний метод (віртуальна функція) - в об'єктно-орієнтованому програмуванні метод (функція) класу, який може бути перевизначений в класах-спадкоємців так, що конкретна реалізація методу для виклику буде визначатися під час виконання.Таким чином, програмісту необов'язково знати точний тип об'єкта для роботи з ним через віртуальні методи: достатньо лише знати, що об'єкт належить класу або спадкоємцю класу, в якому метод оголошений.
Віртуальні методи - один з найважливіших прийомів реалізації поліморфізму. Вони дозволяють створювати загальний код, який може працювати як з об'єктами базового класу, так і з об'єктами будь-якого його класу-спадкоємця. При цьому базовий клас визначає спосіб роботи з об'єктами і будь-які його спадкоємці можуть надавати конкретну реалізацію цього способу. У деяких мовах програмування, наприклад в Java, немає поняття віртуального методу, дане поняття слід застосовувати лише для мов, в яких методи батьківського класу не можуть бути перевизначені за замовчуванням, а тільки за допомогою деяких допоміжних ключових слів. У деяких же (як, наприклад, в Python), всі методи - віртуальні.
Базовий клас може і не надавати реалізації віртуального методу, а лише декларувати його існування. Такі методи без реалізації називаються «чистими віртуальними» (переклад англ. Pure virtual) або абстрактними. Клас, у якому хоча б один такий метод, теж буде абстрактним. Об'єкт такого класу створити не можна (в деяких мовах допускається, але виклик абстрактного методу призведе до помилки).Спадкоємці абстрактного класу повинні надати реалізацію для всіх його абстрактних методів, інакше вони, в свою чергу, будуть абстрактними класами.
Для кожного класу, що має хоча б один віртуальний метод, створюється таблиця віртуальних методів. Кожен об'єкт зберігає покажчик на таблицю свого класу. Для виклику віртуального методу використовується такий механізм: з об'єкта береться покажчик на відповідну таблицю віртуальних методів, а з неї, за фіксованим зсуву, - покажчик на реалізацію методу, використовуваного для даного класу. При використанні множинного спадкування або інтерфейсів ситуація дещо ускладнюється за рахунок того, що таблиця віртуальних методів стає нелінійною.


 

А также другие работы, которые могут Вас заинтересовать

37928. Изучение процессов заряда и разряда конденсатора 452 KB
  12 Лабораторная работа № 37 Изучение процессов заряда и разряда конденсатора 1. Цель работы Целью данной работы является изучение заряда и разряда конденсатора при различных параметрах электрической цепи и вычисление времени релаксации. В качестве примера квазистационарных токов рассмотрим процессы заряда и разряда конденсатора в электрической цепи содержащей последовательно соединенные конденсатор С сопротивление R включающие и внутреннее сопротивление источника и источник ЭДС ε рис. Пусть I q U мгновенные значения тока заряда и...
37929. Изучение электрических свойств твердых диэлектриков 259.5 KB
  Типы диэлектриков Диэлектриками называются вещества которые при обычных условиях практически не проводят электрический ток. Согласно представлениям классической физики в диэлектриках в отличие от проводников нет свободных носителей заряда заряженных частиц которые могли бы под действием электрического поля прийти в упорядоченное движение и образовать электрический ток проводимости. К диэлектрикам относятся все газы если они не подвергались ионизации некоторые жидкости дистиллированная вода бензол и др. Все молекулы диэлектрика...
37930. Определение электродвижущей силы 377 KB
  Эти частицы называют носителями тока. За положительное направление тока выбрано направление движения положительно заряженных частиц. Если бы в электрической цепи действовали только электростатические силы то положительные носители тока под действием этих сил перемещались бы от большего потенциала к меньшему и таким образом снижали больший и повышали меньший потенциал. Это привело бы к выравниванию потенциала во всех точках проводника и прекращению тока.
37931. ИЗУЧЕНИЕ ГАЗОВОГО РАЗРЯДА 946 KB
  Цель работы Изучение газового разряда измерение вольтамперной характеристики газонаполненной лампы изучение релаксационных колебаний.2 Газонаполненные лампы часто используют для получения релаксационных колебаний. Принципиальная схема генератора релаксационных колебаний полказана на рисунке 2. При нажатой кнопке режим получается схема генератора релаксационных колебаний смотри рисунок 2.
37932. ИЗУЧЕНИЕ ДИЭЛЕКТРИЧЕСКИХ СВОЙСТВ СЕГНЕТОЭЛЕКТРИКОВ 1.1 MB
  Цель работы Изучение поляризации сегнетоэлектриков в зависимости от напряженности электрического поля E получение кривой E = fE изучение диэлектрического гистерезиса определение диэлектрических потерь в сегнетоэлектриках. Это связано с тем что они не содержат зарядов способных направленно перемещаться под действием электрического поля. Внешнее электрическое поле либо упорядочивает ориентацию жестких диполей ориентационная поляризация в диэлектриках с полярными молекулами либо приводит к появлению полностью упорядоченных...
37933. ОПРЕДЕЛЕНИЕ ЭДС ИСТОЧНИКА ТОКА С ПОМОЩЬЮ ЗАКОНА ОМА 199 KB
  Контрольные вопросы 11 Список литературы 11 ЛАБОРАТОРНАЯ РАБОТА № 45 ОПРЕДЕЛЕНИЕ ЭДС ИСТОЧНИКА ТОКА С ПОМОЩЬЮ ЗАКОНА ОМА Цель работы.1 Закон Ома Количественной мерой электрического тока служит сила тока скалярная величина определяемая электрическим зарядом проходящим через поперечное сечение проводника в единицу времени: . Для постоянного тока . Единица силы тока ампер 1 А = Кл с.
37934. Движения заряженных частиц в магнитном поле. Определение удельного заряда электрона методом магнетрона 365 KB
  Действие магнитного поля на движущийся заряд. Действие магнитного поля на движущийся заряд. Процесс взаимодействия магнитных полей исследовался Лоренцем который вывел формулу для расчета силы действующей со стороны магнитного поля на движущуюся заряженную частицу.2 Тогда на n движущихся зарядов со стороны магнитного поля действует сила равная .
37935. Определение горизонтальной составляющей магнитного поля земли. Методические указания 160.64 KB
  Методические указания предназначены для студентов, изучающих раздел курса общей физики «Электричество и магнетизм». Приведены основные положения геомагнетизма и методика экспериментального определения горизонтальной составляющей магнитного поля Земли с помощью тангенс гальванометра.
37936. Исследование затухающих колебаний в колебательном контуре 223.5 KB
  14 Лабораторная работа № 48 Исследование затухающих колебаний в колебательном контуре 1. Получим уравнение колебаний в контуре без активного сопротивления рисунок 2.3 получаем дифференциальное уравнение свободных колебаний в контуре без активного сопротивления 2.5 где φ начальная фаза колебаний.