Язык Ада, 08 лекция (от 21 апреля)
Материал из eSyr's wiki.
Объектно-ориентированное программирование
В чем удобство ООП? Ада, начиная с версии 95 года, - это вполне полноценный ОО язык. Однако, в этом языке нет ни классов, ни виртуальный операций. Тезис С.И.Рыбина состоит в том, что объектная ориентация – это вовсе не классы, а это решение некоторой вполне определенной технической задачи, и решение это возможно при помощи механизма, которые могут по-разному выглядеть, но делают по сути одно и то же. ООП – это такой механизм, который обеспечивает 3 базовых компонента:
- . Абстракция – объекты, как некие сущности, имеющие структуру и состояние, операции, способные манипулировать объектами, и инкапсуляция – возможность предоставлять интерфейс к объекту.
- . Наследование – возможность пошагового построения новых абстракций из существующих, с наследованием полезных свойств и добавлением новых.
- . Полиморфизм – возможность выносить за скобки несущественные в том или ином смысле различия между абстракциями и программировать в терминах общих свойств этих абстракций.
ООП – программирование, которое позволяет следующие вещи:
- . Вариантное программирование. Конструирование новых абстракций из существующих путем указания только разницы между новой и существующих.
- . Надклассовое программирование. Возможность обрабатывать классы родственных абстракций унифицированным образом, игнорируя разницу между ними, когда можно и нужно
Зачем нужно ООП – для экономии усилий программиста из-за возможности конструирования новых абстракций путем указаний всего лишь различий между существующим и новым. В 1995 году к Аде были добавлены следующие вещи:
- . Теговый тип – улучшил механизм производных типов. Если запись объявлена как теговая, это означает, что когда объявляется производный тип от данной записи, то нужно сказать, что будут добавляться новые поля, либо сказать, то новые поля добавляться не будут.
Если тип описан в видимой части пакета, то они наследуются. Если определяется наследуемый тип, то он наследует все операции родителя, потом переопределяется какая-то операция, и та, которая переопределилась, тоже становится наследуемой.
- . Надклассовое тип – целый класс типов, иерархия, включающая теговый тип и все производные от него типы.
Множество значений этого типа – множество значений корня и все значения всех его потомков, даже тех, которых еще нет, но которые могут появится. Можно определить надклассовую процедуру. Если процедура имеет формальный параметр надклассового типа, то это позволяется ей принимать в качестве фактического параметра любые объекты, тип которых принадлежит данной иерархии типов. Унифицированная обработка схожих объектов при игнорировании разницы между ними на основе общих свойств. Это есть проявление динамического полиморфизма. В Аде нет виртуальных операций, но есть динамический полиморфизм. С помощью информации о теговом типе фактического параметра может выполняться динамическая диспетчеризация. Это значит, что в данном случае присутствует динамическое связывание которое обеспечивает динамическую полиморфность поведения объектов. Таким образом, для выполнения диспетчеризации вызова подпрограммы во время выполнения программы должно соблюдаться два условия:
- подпрограмма должна иметь формальный параметр тэгового типа
- при вызове подпрограммы, фактический параметр, соответствующий параметру тэгового типа должен быть объектом надклассового типа
В Аде множественное наследование не реализуется. В последней версии языка реализуется ограниченное множественное наследование интерфейсных типов. Типу не разрешено иметь компонент, разрешено иметь операции, но пустые(либо абстрактные, либо т.н. «пустые процедуры», которые ничего не делают).