Основы программирования — второй семестр 08-09; Михалкович С.С.; VIII часть

Материал из Вики ИТ мехмата ЮФУ
Версия от 15:03, 21 мая 2009; Juliet (обсуждение | вклад) (Вводные понятия)

Перейти к: навигация, поиск

Полиморфизм и виртуальные методы

Вводные понятия

Инкапсуляция — хранение в классе одновременно данных и методов (класс представляет собой «капсулу»).
Инкапсуляция тесно связана с защитой данных: лишь некоторые члены в этой «капсуле» являются открытыми.

Полиморфизм — это, дословно, многообразие форм.
Более точно, полиморфизм — это способность родственных классов выполнять одинаковые действия сходным образом.

Пример.
Есть класс

Студент
    Готовиться_к_экзамену()

И два его наследника:

Хороший_студент
    Готовиться_к_экзамену()

и

Плохой студент
    Готовиться_к_экзамену()

Действие Готовиться_к_экзамену() они выполняют по-разному.

Рассмотрим следующий код:

var p: Person;
p := new Student('Иванов', 17, 1, 11);
p.Print();

Вопрос: какой метод Print вызовется?
Ответ: В разных языках программирования вызовутся Print разных классов:

в таких языках, как Java, EiffelStudent.Print,
а в C++, C#, PasacalABC.NETPerson.Print.

Т.о. в PascalABC.NET вызовется метод Person.Print, но, хотелось бы, чтобы вызывался метод Student.Print.

Если решение о том, какой метод вызывать, принимается на этапе компиляции (рано), то связывание имени метода с конкретным кодом называется ранним связыванием.

Если же решение о том, какой метод вызывать, принимается на этапе выполнения программы (поздно), то связывание имени метода с конкретным кодом называется поздним связыванием.
Позднее связывание осущесвляется с методом того класса, на который ссылается переменная в процессе выполнения программы.

Итак, в PascalABC.NET по умолчанию реализовано раннее связывание.

Позднее связывание и виртуальные методы

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

Класс Object — неявный предок всех классов .NET

Переопределение методов Equals и ToString в классах Person и Student

Цепочка виртуальности и её разрыв

Алгоритм поиска в цепочке виртуальности