Опубликован: 23.10.2005 | Доступ: свободный | Студентов: 4094 / 202 | Оценка: 4.44 / 4.19 | Длительность: 33:04:00
Специальности: Программист
Лекция 16:

Эмуляция объектной технологии в не ОО-средах

< Лекция 15 || Лекция 16: 1234 || Лекция 17 >

Библиографические замечания

Способы написания пакетов в 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 (семестровый проект)

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

Подойдите к задаче через три последовательные уточнения:

  • сначала реализуйте механизм, позволяя объектам содержать их собственные ссылки на имеющиеся подпрограммы;
  • затем посмотрите, как факторизовать ссылки на уровне класса;
  • наконец, изучите, как добавить механизм единичного наследования.
< Лекция 15 || Лекция 16: 1234 || Лекция 17 >