Полиморфизм

Содержание

Слайд 2

Полиморфизм

Полиморфизм – это свойство системы использовать объекты с одинаковым интерфейсом без информации

Полиморфизм Полиморфизм – это свойство системы использовать объекты с одинаковым интерфейсом без
о типе и внутренней структуре объекта.

Слайд 3

Виртуальные методы

Виртуальным называется такой метод, который объявляется как virtual в базовом классе.

Виртуальные методы Виртуальным называется такой метод, который объявляется как virtual в базовом
Виртуальный метод отличается тем, что он может быть переопределен в одном или нескольких производных классах. Следовательно, у каждого производного класса может быть свой вариант виртуального метода.
Вариант выполняемого виртуального метода выбирается по типу объекта, а не по типу ссылки на этот объект. Так, если базовый класс содержит виртуальный метод и от него получены производные классы, то при обращении к разным типам объектов по ссылке на базовый класс выполняются разные варианты этого виртуального метода.
Метод объявляется как виртуальный в базовом классе с помощью ключевого слова virtual, указываемого перед его именем. Когда же виртуальный метод переопределяетсяв производном классе, то для этого используется модификатор override. А сам процесс повторного определения виртуального метода в производном классе называется переопределением метода. При переопределении имя, возвращаемый тип и сигнатура переопределяющего метода должны быть точно такими же, как и у того виртуального метода, который переопределяется. Кроме того, виртуальный метод не может быть объявлен как static или abstract.
Переопределение метода служит основанием для воплощения одного из самых эффективных в C# принципов: динамической диспетчеризации методов, которая представляет собой механизм разрешения вызова во время выполнения, а не компиляции. Значение динамической диспетчеризации методов состоит в том, что именно благодаря ей в C# реализуется динамический полиморфизм.

Слайд 4

Пример. Создадим базовый класс виртуальным методом и два класса потомка, которые переопределяют

Пример. Создадим базовый класс виртуальным методом и два класса потомка, которые переопределяют
данный метод.

class Base
{
// Создать виртуальный метод в базовом классе.
public virtual void Who(Label l)
{
l.Text="Метод Who() в классе Base";
}
}
class Derivedl : Base
{
// Переопределить метод Who() в производном классе.
public override void Who(Label l)
{
l.Text="Метод Who() в классе Derivedl";
}
}
class Derived2 : Base
{
// Вновь переопределить метод Who() в еще одном производном классе.
public override void Who(Label l)
{
l.Text="Метод Who() в классе Derived2";
}
}

Слайд 5

Если в производном классе не предоставляется собственный вариант виртуального метода, то используется

Если в производном классе не предоставляется собственный вариант виртуального метода, то используется
его вариант из базового класса.
Если при наличии многоуровневой иерархии виртуальный метод не переопределяется в производном классе, то выполняется ближайший его вариант, обнаруживаемый вверх по иерархии.

private void button1_Click(object sender, EventArgs e)
{
Base b = new Base();
Derivedl d1 = new Derivedl();
Derived2 d2 = new Derived2();
b.Who(label1);
d1.Who(label2);
d2.Who(label3);
}

Слайд 6

Что дает переопределение методов

Благодаря переопределению методов в C# поддерживается динамический полиморфизм.
В объектно-ориентированном

Что дает переопределение методов Благодаря переопределению методов в C# поддерживается динамический полиморфизм.
программировании полиморфизм играет очень важную роль, потому что он позволяет определить в общем классе методы, которые становятся общими для всех производных от него классов, а в производных классах — определить конкретную реализацию некоторых или же всех этих методов.
Переопределение методов — это еще один способ воплотить в C# главный принцип полиморфизма: один интерфейс — множество методов.
Удачное применение полиморфизма отчасти зависит от правильного понимания той особенности, что базовые и производные классы образуют иерархию, которая продвигается от меньшей к большей специализации. При надлежащем применении базовый класс предоставляет все необходимые элементы, которые могут использоваться в производном классе непосредственно. А с помощью виртуальных методов в базовом классе определяются те методы, которые могут быть самостоятельно реализованы в производном классе. Таким образом, сочетая наследование с виртуальными методами, можно определить в базовом классе общую форму методов, которые будут использоваться во всех его производных классах.

Слайд 7

Пример. Составить программу с одним родительским классом и двумя потомками. Потомки должны

Пример. Составить программу с одним родительским классом и двумя потомками. Потомки должны
содержать виртуальные функции. Создать виртуальную функцию выдачи результатов расчета методов на экран монитора с указанием названий и полей и их значений соответствующего объекта. Составить тестирующую программу с выдачей протокола на экран монитора. При этом создать объекты базового и производных типов, используя полиморфный контейнер - массив ссылок базового класса на объекты базового и производных классов (количество объектов >=5).

Слайд 8

Диаграмма классов

Диаграмма классов

Слайд 9

Описание классов

Базовый класс для трехмерной фигуры

Описание классов Базовый класс для трехмерной фигуры

Слайд 10

Класс для конуса

Класс для пирамиды

Класс для конуса Класс для пирамиды

Слайд 11

Основная программа

Основная программа

Слайд 12

Применение абстрактных классов

Иногда требуется создать базовый класс, в котором определяется лишь самая

Применение абстрактных классов Иногда требуется создать базовый класс, в котором определяется лишь
общая форма для всех его производных классов, а наполнение ее деталями предоставляется каждому из этих классов. В таком классе определяется лишь характер методов, которые должны быть конкретно реализованы в производных классах, а не в самом базовом классе.
Подобная ситуация разрешается двумя способами. Один из них, состоит в том, чтобы просто выдать предупреждающее сообщение. Второй состоит в использовании абстрактного метода.
Абстрактный метод создается с помощью указываемого модификатора типа abstract. У абстрактного метода отсутствует тело, и поэтому он не реализуется в базовом классе. Это означает, что он должен быть переопределен в производном классе, поскольку его вариант из базового класса просто непригоден для использования.
Абстрактный метод автоматически становится виртуальным и не требует указания модификатора virtual. В действительности совместное использование модификаторов virtual и abstract считается ошибкой.

Слайд 13

Для определения абстрактного метода служит приведенная ниже общая форма.
abstract тип имя(список_параметров);
У абстрактного

Для определения абстрактного метода служит приведенная ниже общая форма. abstract тип имя(список_параметров);
метода отсутствует тело.
Модификатор abstract может применяться только в методах экземпляра, но не в статических методах (static).
Абстрактными могут быть также индексаторы и свойства.
Класс, содержащий один или больше абстрактных методов, должен быть также объявлен как абстрактный, и для этого перед его объявлением class указывается модификатор abstract. А поскольку реализация абстрактного класса не определяется полностью, то у него не может быть объектов. Следовательно, попытка создать объект абстрактного класса с помощью оператора new приведет к ошибке во время компиляции.
Когда производный класс наследует абстрактный класс, в нем должны быть реализованы все абстрактные методы базового класса. В противном случае производный класс должен быть также определен как abstract. Таким образом, атрибут abstract наследуется до тех пор, пока не будет достигнута полная реализация класса.

Слайд 14

Пример. Составить программу с абстрактным родительским классом и двумя объектами - потомками.

Пример. Составить программу с абстрактным родительским классом и двумя объектами - потомками.
Для этого модифицировать задание 1. Составить тестирующую программу с выдачей протокола на экран монитора. В ней нужно реализовать циклический вывод параметров объектов, используя полиморфный контейнер - массив объектов базового класса (количество объектов >=5).
Задание. Найти объект с максимальной площадью.

Базовый класс для трехмерной фигуры

Класс для конуса

Слайд 15

Класс для пирамиды

Класс для пирамиды

Слайд 16

Основная программа

Основная программа
Имя файла: Полиморфизм.pptx
Количество просмотров: 35
Количество скачиваний: 0