- Главная
- Информатика
- Полиморфизм
Содержание
- 2. Полиморфизм Полиморфизм – это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и
- 3. Виртуальные методы Виртуальным называется такой метод, который объявляется как virtual в базовом классе. Виртуальный метод отличается
- 4. Пример. Создадим базовый класс виртуальным методом и два класса потомка, которые переопределяют данный метод. class Base
- 5. Если в производном классе не предоставляется собственный вариант виртуального метода, то используется его вариант из базового
- 6. Что дает переопределение методов Благодаря переопределению методов в C# поддерживается динамический полиморфизм. В объектно-ориентированном программировании полиморфизм
- 7. Пример. Составить программу с одним родительским классом и двумя потомками. Потомки должны содержать виртуальные функции. Создать
- 8. Диаграмма классов
- 9. Описание классов Базовый класс для трехмерной фигуры
- 10. Класс для конуса Класс для пирамиды
- 11. Основная программа
- 12. Применение абстрактных классов Иногда требуется создать базовый класс, в котором определяется лишь самая общая форма для
- 13. Для определения абстрактного метода служит приведенная ниже общая форма. abstract тип имя(список_параметров); У абстрактного метода отсутствует
- 14. Пример. Составить программу с абстрактным родительским классом и двумя объектами - потомками. Для этого модифицировать задание
- 15. Класс для пирамиды
- 16. Основная программа
- 18. Скачать презентацию
Слайд 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Пример. Составить программу с одним родительским классом и двумя потомками. Потомки должны
Пример. Составить программу с одним родительским классом и двумя потомками. Потомки должны
Слайд 8Диаграмма классов
Диаграмма классов
Слайд 9Описание классов
Базовый класс для трехмерной фигуры
Описание классов
Базовый класс для трехмерной фигуры
Слайд 10Класс для конуса
Класс для пирамиды
Класс для конуса
Класс для пирамиды
Слайд 11Основная программа
Основная программа
Слайд 12Применение абстрактных классов
Иногда требуется создать базовый класс, в котором определяется лишь самая
Применение абстрактных классов
Иногда требуется создать базовый класс, в котором определяется лишь самая
Подобная ситуация разрешается двумя способами. Один из них, состоит в том, чтобы просто выдать предупреждающее сообщение. Второй состоит в использовании абстрактного метода.
Абстрактный метод создается с помощью указываемого модификатора типа abstract. У абстрактного метода отсутствует тело, и поэтому он не реализуется в базовом классе. Это означает, что он должен быть переопределен в производном классе, поскольку его вариант из базового класса просто непригоден для использования.
Абстрактный метод автоматически становится виртуальным и не требует указания модификатора virtual. В действительности совместное использование модификаторов virtual и abstract считается ошибкой.
Слайд 13Для определения абстрактного метода служит приведенная ниже общая форма.
abstract тип имя(список_параметров);
У абстрактного
Для определения абстрактного метода служит приведенная ниже общая форма.
abstract тип имя(список_параметров);
У абстрактного
Модификатор abstract может применяться только в методах экземпляра, но не в статических методах (static).
Абстрактными могут быть также индексаторы и свойства.
Класс, содержащий один или больше абстрактных методов, должен быть также объявлен как абстрактный, и для этого перед его объявлением class указывается модификатор abstract. А поскольку реализация абстрактного класса не определяется полностью, то у него не может быть объектов. Следовательно, попытка создать объект абстрактного класса с помощью оператора new приведет к ошибке во время компиляции.
Когда производный класс наследует абстрактный класс, в нем должны быть реализованы все абстрактные методы базового класса. В противном случае производный класс должен быть также определен как abstract. Таким образом, атрибут abstract наследуется до тех пор, пока не будет достигнута полная реализация класса.
Слайд 14Пример. Составить программу с абстрактным родительским классом и двумя объектами - потомками.
Пример. Составить программу с абстрактным родительским классом и двумя объектами - потомками.
Задание. Найти объект с максимальной площадью.
Базовый класс для трехмерной фигуры
Класс для конуса
Слайд 15Класс для пирамиды
Класс для пирамиды
Слайд 16Основная программа
Основная программа