ПОЛИМОРФИЗМ Лекция 3 1. π ολυμορφισμός 2 Полиморфизм кристаллов – углерод: графит, алмаз. Гендерный полиморфизм – человек: мужчина, женщина. Полиморфизм.

Презентация:



Advertisements
Похожие презентации
АССОЦИАТИВНЫЕ КОЛЛЕКЦИИ Лекция 6 1. Отличие от последовательных 2 В последовательной коллекции каждый элемент ассоциируется с номером, начиная с 0. В.
Advertisements

Наследование Полиморфизм ВЫЗОВ КОНСТРУКТОРОВ И ДЕСТРУКТОРОВ ПРИ НАСЛЕДОВАНИИ.
ДЕЛЕГАТЫ Лекция 7 1. Зачем нужны делегаты 2 И данные, и код располагаются в памяти компьютера по определенным адресам. Передача адресов данных в C# происходит.
Учебный курс Объектно-ориентированный анализ и программирование Лекция 7 Методы как средство реализации операций Лекции читает кандидат технических наук.
Наследование Наследование – это отношение является между классами. class Person { string first_name; int birth_year;... } class Student : Person { float.
Полиморфизм. Полиморфизм – это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.
1 ©Павловская Т.А. (СПбГУ ИТМО) Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
Лекция 4. Введение в С++ Наследование, множественное наследование. Конструкторы, деструкторы. Виртуальные функции.
Интерфейсы Лекция 4. Реализуйте очередь в виде списка, содержащую комплексные числа Реализуйте методы void Enqueue(Complex с ) – помещает число в очередь.
Прикладное программирование кафедра прикладной и компьютерной оптики Наследование.
ИТЕРАТОРЫ И LINQ Лекция 1. Интерфейс IEnumerable и IEnumerator Любая коллекция реализует интерфейс IEnumerable. public interface IEnumerable : IEnumerable.
Полиморфизм Полиморфизм (polymorphism) - последний из трех "китов", на которых держится объектно-ориентированное программирование Слово это можно перевести.
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
Разработчики: Деникин А.В., Деникина Н.В.1 МАССИВЫ В C#. Содержание Принципы работы с массивами Типовые алгоритмы обработки массивов Сортировка массивов.
Наследование time time_with_sec В чем преимущества наследования? Наследование кода – поля, метод inc Появилось два класса с которыми точно можно обращаться.
Информационные технологии Стандартные библиотечные функции манипулирование данными преобразование и шифрование определение пользователями функций.
C++ Объектно-ориентированное программирование. Первая программа C++ #include int n = 5; // глобальная переменная void main() {int n; // локальная переменная.
Интерфейсы Интерфейс представляет собой полностью абстрактный класс, все методы которого абстрактны. Методы интерфейса имеют модификаторы public и abstract,
НГТУ, каф. ВТ Наследование в С++ Макаревич Л. Г.НГТУ, каф. ВТ Наследование в С++ Макаревич Л. Г.
Наследование и полиморфизм. «Быть» или «Иметь» а так же «Точно» или «Как получится»
Транксрипт:

ПОЛИМОРФИЗМ Лекция 3 1

π ολυμορφισμός 2 Полиморфизм кристаллов – углерод: графит, алмаз. Гендерный полиморфизм – человек: мужчина, женщина. Полиморфизм пород – собака: болонка, мопс, бультерьер,…

Полиморфизм в программировании 3 П. нужен для того, чтобы решать разные по существу задачи при помощи одного и того же кода. П. упрощает жизнь программистам и удешевляет программы, т.к. увеличивает степень повторного использования кода. Простые примеры П. 1)знак + означает сложение чисел и соединение строк; 2)функция len() В Питоне определяет длину строк, списков, кортежей; 3)метод Console.Write(x) способен вывести на экран все что угодно; 4)цикл foreach применяется к массивам, коллекциям, пользовательским классам и к итераторам (итератор – вид алгоритма).

Виды программного полиморфизма 4 Ситуативный (Ad hoc) Один и тот же код (операция, функция) выполняется по-разному для разных типов своих аргументов, при этом число возможных типов ограничено и заранее известно. Пример - перегрузка операций и методов, например, операция / для вещественных и целых, метод Console.Write(). Параметрический Код имеет параметры, от которых зависит результат его выполнения. Пример – обобщенные функции и типы, например, List В Питоне – функции для последовательностей: len(L), max(L), sorted(L),… Полиморфизм наследования Достигается путем наследования разными классами общего предка с виртуальными методами.

Не виртуальные методы 5 При вызове обычного метода, компилятор руководствуется типом ссылки на объект. class Point { public int X {set; get;} public int Y {set; get;} public void Print() { Console.WriteLine("x={0} y={1}", X, Y); } class ColPoint : Point { public Color C { set; get; } public void Print() { Console.WriteLine("x={0} y={1} c={2}", X, Y, C); } Point p = new ColPoint(); p.Print(); // x=0 y=0

Виртуальные методы 6 class Point { public int X {set; get;} public int Y {set; get;} public virtual void Print() { Console.WriteLine("x={0} y={1}", X, Y); } class ColPoint : Point { public Color C { set; get; } public override void Print() { Console.WriteLine("x={0} y={1} c={2}", X, Y, C); } При вызове виртуального метода учитывается истинный тип объекта. Point p = new ColPoint(); p.Print(); // x=0 y=0 c=Black

Полиморфизм в действии 7 Имеется массив точек, простых и цветных вперемежку. Распечатать его.

Как устроены виртуальные методы 8 Связывание – замена вызова метода по имени переходом по адресу метода. Раннее связывание – происходит во время компиляции. Позднее связывание – происходит во время выполнения программы. Обычные методы подвергаются раннему связыванию. Виртуальные методы требуют позднего связывания.

Почему не все методы виртуальные 9 1. Позднее связывание отнимает время у выполнения программы. 2. Это время может оказаться значительным, если цепочка наследования длинная. Позднее связывание начинается с поиска метода в классе объекта вызова. Если метода в этом классе нет, поиск проводится в классе родителя, и т.д., пока метод не будет найден.

Перекрытие виртуальных методов 10 Метод однажды виртуальный – всегда виртуальный. Б.Страуструп (предположительно) virtual – виртуальный override – замещает new – перекрывает

11

Пример: Модель редактора 12 Рисунок в графическом редакторе состоит из фигур – отрезков прямых, прямоугольников, окружностей и т.п. Разработать систему классов для модели графического редактора. Picture Figure[] figures Figure int X, Y Rect int W, H Circle int W, H Здесь не полиморфное наследование

Полиморфное наследование 13 Picture Figure[] figures Figure int X, Y, W, H RectCircle Figure – полиморфный тип. Он должен иметь все методы и свойства, какие есть у потомков.

Абстрактные классы 14 Абстрактные классы нельзя инстанцировать, их можно только наследовать. Picture Figure[] figures Figure int X, Y, W, H RectCircle

Самостоятельно 15 Разработайте систему классов для обслуживания газетного киоска: «Товар», «Журнал», «Газета» с общим предком «Товар». В киоске должна быть кассовая книга (класс «Касса»), в которой регистрируются акты получения и продажи товара.