Книга: Основы объектно-ориентированного программирования

Упражнения

Упражнения

У14.1 Многоугольники и прямоугольники

Дополните версии классов POLYGON и RECTANGLE, наброски которых приведены в начале лекции. Включите в них подходящие процедуры создания.

У14.2 Многоугольник с малым числом вершин

Инвариант класса POLYGON требует, чтобы у каждого многоугольника было, по крайней мере, три вершины; отметим, что функция perimeter не будет работать для пустого многоугольника. Измените определение этого класса так, чтобы он покрывал и случаи вырожденных многоугольников с числом вершин меньше трех.

У14.3 Геометрические объекты с двумя координатами

Опишите класс TWO_COORD, задающий объекты с двумя вещественными координатами, среди наследников которого были бы классы POINT (ТОЧКА), COMPLEX (КОМПЛЕКСНОЕ_ЧИСЛО) и VECTOR (ВЕКТОР). Будьте внимательны при помещении каждого компонента на подходящий для него уровень иерархии.

У14.4 Наследование без классов

В этой лекции были представлены два взгляда на наследование: будучи модулем, класс-наследник предлагает службы своего родителя плюс еще некоторые, будучи типом, он реализует отношение "является" (каждый экземпляр наследника является также экземпляром каждого из родителей). "Пакетами" модульных, но не ОО-языков (таких как Ада (Ada) или Модула-2 (Modula-2)) являются модули, но не типы. При первой интерпретации к ним можно было бы применить наследование. Обсудите, в каком виде наследование может быть введено в модульные языки. Не забудьте рассмотреть при этом принцип Открыт-Закрыт.

У14.5 Классы без объектов

Не разрешается создавать объекты отложенных классов. В одной из предыдущих лекций был указан другой способ создания класса без объектов: включить в него пустую процедуру создания. Эквивалентны ли эти два механизма? Можно ли выделить случаи, когда использование одного из них предпочтительнее, чем другого? (Указание: в отложенном классе должен быть хоть один отложенный компонент.)

У14.6 Отложенные классы и прототип

Отложенные классы нельзя инициализировать. С другой стороны, были приведены аргументы в пользу того, чтобы в первой версии класса в проекте все компоненты оставались отложенными. Может появиться желание "выполнить" такой проект: при проектировании ПО иногда хочется вступить в игру как можно раньше, исполнить неполные реализации, чтобы получить практический опыт и проверить некоторые аспекты системы даже при неполностью реализованных других аспектах. Обсудите доводы за и против того, чтобы иметь в компиляторе специальную параметр "прототип", позволяющий инициализировать отложенный класс и выполнить отложенный компонент (как пустую операцию). Обсудите детали.

У14.7 Библиотека поиска в таблицах (семестровый проект)

Основываясь на обсуждении таблиц в этой лекции и в лекции о повторном использовании, спроектируйте библиотеку классов таблиц, включающую различные категории представлений таблиц: хеш-таблицы, последовательные (линейные) таблицы, древообразные таблицы и др.

У14.8 Виды отложенных компонентов

Может ли атрибут быть отложенным?

У14.9 Комплексные числа

(Это упражнение предполагает знакомство со всеми лекциями вплоть до 5-й курса "Основы объектно-ориентированного проектирования".) В примере, рассмотренном при обсуждении интерфейса модулей, использовались комплексные числа с двумя разными представлениями, при этом соответствующие изменения в представлениях остались "за кадром". Определите можно ли получить эквивалентный результат с помощью наследования, а именно, создать класс COMPLEX (КОМПЛЕКСНЫЕ) и его наследников CARTESIAN_COMPLEX (КОМПЛЕКСНЫЕ_В_ДЕКАРТОВЫХ_КООРДИНАТАХ) и POLAR_COMPLEX (КОМПЛЕКСНЫЕ_В_ПОЛЯРНЫХ_КООРДИНАТАХ).

Оглавление книги


Генерация: 0.047. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз