Понятие о статическом и динамическом связывании

Полиморфизм как средство разработки классов

При создании иерархии классов может обнаружиться, что некоторые свойства объектов, сохраняя название, изменяются по сути. Для реализации таких иерархий в языке программирования должен быть предусмотрен механизм полиморфизма, обеспечивающийвозможностьзадания различных реализаций некоторого единого по названию метода для классов различных уровней иерархии. В ООП такой полиморфизм называется простым, а методы, имеющие одинаковое название - статическими полиморфными. Совокупность полиморфных методов с одним именем для иерархии классов образует единый полиморфный метод иерархии, в котором реализация полиморфного метода для конкретного класса представляет отдельный аспект.

Различают несколько терминов, связанных с конкретными механизмами реализации полиморфизма для различных случаев:

1) чистый полиморфизм - используется для обозначения того, что один код функции может по-разному интерпретироваться в зависимости от типа аргументов; используется в языках высокого уровня абстракции, например, в языке Lisp или Smalltalk;

2) перегрузка (полиморфные имена функций) - используется, когда определяется несколько функций с одним именем - одно и то же имя функции может много кратно использоваться в разных местах программы; выбор нужной функции может определяется типами аргументов, областью видимости (внутри модуля, файла, класса и т.д.); если выбор определяется типом аргументов, то перегрузка называется параметрической; например, язык С++ позволяет разработчику выполнять параметрическую перегрузку функций вне классов;

3) переопределение - используется в ООП при необходимости задания различных реализаций одноименных методов в иерархии классов; различают:

а) простой полиморфизм – конкретный метод определяется типом объекта при компиляции программы (раннее связывание); одноименные методы при использовании простого полиморфизма называются статическими полиморфными;

б) сложный полиморфизм (полиморфные объекты) – конкретный метод определяется типом объекта при выполнении программы (позднее связывание); одноименные методы при использовании сложного полиморфизма называются виртуальными полиморфными (рассмотрены далее);

4) обобщенные функции или шаблоны - используется в ООП при реализации в языке параметризованных классов (например, в С++), параметрами такого класса являются типы аргументов методов класса (рассмотрены далее).

Связыванием называется привязка тела ф-ии или процедуры к месту ее вызова в главной программе или в другой процедуре или ф-ии. В процедурных языках задача связывания решается на этапе компиляции. Если определенная ф-я находится в том же модуле, что и обращение к ней или на этапе компоновки если определ ф-ия находится в другом модуле. Этап компоновки назыв редактированием связей. В этом случае на момент выполнения программы для каждого вызова ф-ии точно известен адрес ее вызова. Такое связывание называют ранним или статическим. При этом связывании используются типы, известные во время компиляции программы. В программах на ОО языках переменная – указатель на любой объект базового типа может быть связан с объектом производного типа. Это делать невозможно. Установление в момент компиляции или компоновки программы, действительного вида метода, кот. Необходимо вызвать заключается в том, что ф-я, аргументом которой явл-ся указатель на объект базового класса, может принять в кач-ве значения указатель на объект производного класса, но не позволяет обратиться к полям и методам производного класса, Принцип связывания при котором все решения относительно типов объектов принимают на стадии компиляции недостаточен для реализации концепции наследования. Решение проблемы заключ в использовании динамического позднего связывания. В этом случае определение конкретного метода производного класса может происходить не во время компиляции, а во время выполнения программы, Если язык поддерживает динамическое связывание он должен иметь средства, позвол определить тип объекта во время выполнения программы и вызвать подходящий метод в зависимости от этого типа. В Pascal эти средства основываются на виртуальных динамических методах.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: