Языки программирования. Позднее и раннее связывание. Полиморфизм. Основные понятия

Содержание

Слайд 2

Понятие позднего и раннего связывания

При изучении темы полиморфизма важно понять понятие позднего

Понятие позднего и раннего связывания При изучении темы полиморфизма важно понять понятие
и раннего связывания, которое используется компилятором при построении кода программы в случае наследования.
Если классы образовывают иерархию наследования, то при обращении к элементам класса, компилятор может реализовывать один из двух возможных способов связывания кода:
Раннее связывание – связанное с формированием кода на этапе компиляции. При раннем связывании, программный код формируется на основе известной информации о типе (класс) ссылки. Как правило, это ссылка на базовый класс в иерархии классов.
Позднее связывание – связанное с формированием кода на этапе выполнения. Если в иерархии классов встречается цепочка виртуальных методов (с помощью слов virtual, override), то компилятор строит так называемое позднее связывание. При позднем связывании вызов метода происходит на основании типа объекта, а не типа ссылки на базовый класс. Позднее связывание используется, если нужно реализовать полиморфизм

Слайд 3

Понятие позднего и раннего связывания

Выбор того или иного вида связывания для каждого

Понятие позднего и раннего связывания Выбор того или иного вида связывания для
отдельного элемента (метода, свойства, индексатора и т.п.) определяется компилятором по следующим правилам:
если в иерархии унаследованных классов объявляется невиртуальный элемент, то реализуется раннее связывание;
если в иерархии унаследованных классов объявляется виртуальный элемент, то выполняется позднее связывание. Виртуальный элемент в базовом классе обозначается ключевым словом virtual, во всех унаследованных классах ключевым словом override.

Слайд 4

Необходимые условия для реализации позднего связывания:
классы должны образовывать иерархию наследования;
в классах должны

Необходимые условия для реализации позднего связывания: классы должны образовывать иерархию наследования; в
быть методы с одинаковой сигнатурой. Элементы (методы) производных классов должны перекрывать (override) соответствующие элементы (методы) базовых классов;
элементы (методы) класса должны быть виртуальными, то есть должны быть обозначены ключевыми словами virtual, override.

Слайд 5

Раннее связывание

Раннее связывание

Слайд 6

Позднее связывание

В случае позднего связывания, сначала на основе описания классов A, B компилятор определяет, что

Позднее связывание В случае позднего связывания, сначала на основе описания классов A,
метод Print() есть виртуальным. Для виртуального метода компилятор строит таблицу виртуальных методов Print(), которая содержит смещение адресов каждого виртуального метода для каждого класса иерархии.

Слайд 8

Что такое полиморфизм? Динамический полиморфизм

Полиморфизм – это свойство программного кода изменяться в зависимости

Что такое полиморфизм? Динамический полиморфизм Полиморфизм – это свойство программного кода изменяться
от ситуации, которая возникает в момент выполнения программы.
Главный принцип полиморфизма – один интерфейс, много реализаций (методов). В терминах языка программирования, полиморфизм – это возможность с помощью ссылки на базовый класс обращаться к элементам (методов) экземпляров унаследованных классов единым унифицированным способом.

Слайд 9

Использование преимуществ полиморфизма возможно в ситуациях:

когда классы образовывают иерархию с помощью концепции

Использование преимуществ полиморфизма возможно в ситуациях: когда классы образовывают иерархию с помощью
наследования;
когда в классах, которые образовывают иерархию, есть элементы (методы, свойства и т.п.) с одинаковой сигнатурой. В таких случаях возникает понятие «переопределение метода» (method override).

Слайд 10

Полиморфизм. Ключевые слова

В языке программирования C# полиморфизм обеспечивается с помощью ключевых слов virtual и override.

Полиморфизм. Ключевые слова В языке программирования C# полиморфизм обеспечивается с помощью ключевых
Благодаря использованию этих ключевых слов обеспечивается динамический полиморфизм. Термин «динамический» означает, что вызов виртуального элемента осуществляется динамично во время выполнения программы в зависимости от типа объекта, для которого этот элемент вызывается.

Слайд 12

Какие требования накладываются на элемент класса для того, чтобы он поддерживал полиморфизм?

Для

Какие требования накладываются на элемент класса для того, чтобы он поддерживал полиморфизм?
того, чтобы элемент класса (например метод) поддерживал полиморфизм, его нужно сделать виртуальным. Чтобы элемент класса был виртуальным, нужно выполнить следующие требования:
в базовом классе этот элемент (метод, свойство) должен быть обозначен как virtual или abstract. Ключевое слово abstract также делает элемент виртуальным. Это слово используется, если элемент класса есть абстрактным.
в производных классах одноименные элементы должны быть обозначены как override. Если в производном классе нужно реализовать невиртуальный метод, имя которого совпадает с виртуальным методом базового класса, то этот метод обозначается ключевым словом new

Слайд 13

Использование ключевого слова new в цепочке виртуальных методов.

Как известно, элемент класса, который объявлен виртуальным

Использование ключевого слова new в цепочке виртуальных методов. Как известно, элемент класса,
(virtual), передает возможность реализовать полиморфизм в одноименных элементах унаследованных классов. Таким образом, виртуальные элементы образовывают цепочку вниз по иерархии.
Для того, чтобы элемент класса, который переопределяет (override) виртуальный элемент базового класса, не поддерживал полиморфизм нужно указать ключевое слово new. Если в цепочке одноименных виртуальных методов встречается один невиртуальный метод (с ключевым словом new) то этот метод разрывает цепочку.
Имя файла: Языки-программирования.-Позднее-и-раннее-связывание.-Полиморфизм.-Основные-понятия.pptx
Количество просмотров: 37
Количество скачиваний: 0