Классика баз данных - статьи

       

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


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

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

В приложениях, использующих традиционные системы, мы имели бы три операции: отобразить объект человек (display-person), отобразить растровое изображение (display-bitmap) и отобразить граф (display-graph). Программист проверил бы тип каждого объекта, входящего во множество, и использовал бы соответствующую операцию отображения. Это обязывает программиста знать все возможные типы объектов, которые могут входить в заданное множество, а также соответствующие им операции отображения, и использовать их согласованным образом.

for x in X do begin case of type(x) person: display(x); bitmap: display-bitmap(x); graph: display-graph(x); end end

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



Содержание  Назад  Вперед