Эмуляция объектной технологии в не ОО-средах
Библиографические замечания
Способы написания пакетов в Fortran, основанные на принципах абстракции данных, описаны в [M1982a]. Они используют подпрограммы, разделяющие блоки COMMON, а не подпрограммы с множественным входом, и идут дальше в реализации ОО-концепций, чем способы, описываемые в данной лекции. Это становится возможным благодаря использованию специфических библиотечных механизмов, эквивалентных динамически размещаемым экземплярам классов. Однако такие механизмы требуют значительных вложений и должны переноситься на каждый тип платформы.
Я благодарен Полю Дюбуа за замечание, что техника Fortran со множественными входами, являясь частью стандарта, не всегда хорошо поддерживается текущими компиляторами.
[Cox 1990] содержит обсуждение технических приемов C для реализации ОО-концепций.
Ссылки на историю классических языков программирования даны в трудах конференции [Wexelblat 1981], см. также [Knuth 1980].
Упражнения
У16.1 Графические объекты (для программистов на Fortran)
Напишите на Fortran набор подпрограмм с множественными входами, реализующих основные графические объекты (точки, окружности, многоугольники). Для спецификации имеющихся абстракций и соответствующих операций можно опираться на графический стандарт GKS.
У16.2 Универсальность (для программистов на C)
Как бы Вы преобразовали на С эмуляцию класса "real stack" в эмуляцию с родовыми параметрами, адаптируемую к стекам любого типа G, а не просто float?
У16.3 ОО-программирование на C (семестровый проект)
Постройте и реализуйте простое ОО-расширение С, используя идеи этой лекции. Вы можете написать либо препроцессор, переводя расширенную версию языка на С, либо функциональный пакет, не изменяющий самого языка.
Подойдите к задаче через три последовательные уточнения:
- сначала реализуйте механизм, позволяя объектам содержать их собственные ссылки на имеющиеся подпрограммы;
- затем посмотрите, как факторизовать ссылки на уровне класса;
- наконец, изучите, как добавить механизм единичного наследования.