Первый способ решения задачи— использование множественного наследования.
Постановка задачи примера. Вывести на экран фигуру, показанную на рис. 8.4.
Рис. 8.4. Изображение выводимой фигуры
Изображенная на рис. 8.4 фигура состоит из правильного пятиугольника и описанной вокруг него окружности, где хс, yc — координаты центра описанной вокруг пятиугольника окружности; R — радиус описанной вокруг пятиугольника окружности.
Кроме того, фигура рисуется заданным цветом.
Следует отметить, что задача может быть решена несколькими способами.
Шаг 1а. Определение объектов и выявление их свойств.
Объект — Рисунок. Свойства объекта:
— радиус окружности (R);
— координаты центра окружности (xc; yc);
— цвет линий.
Объект — Пятиугольник. Свойства объекта:
— радиус описанной вокруг него окружности (R);
— координаты центра описанной вокруг него окружности (хс; yc):
— цвет линии.
Объект — Окружность. Свойства объекта:
— радиус (R);
— координаты центра (хс; yc);
— цвет линии.
Решение задачи примера с использованием множественного наследования.
Шаг 1б. Классификация объектов (составление словаря).
Пятиугольник — центрально-симметричная фигура с пятью вершинами.
Окружность — центрально-симметричная фигура, каждая точка которой отстоит от заданной точки — центра, на заданную величину — радиус окружности.
Полученный граф наследования классов изображен на рис. 8.5.
Шаг 2. Уточнение классов с точным определением их зависимостей от других классов. Выясняется наследование и использование зависимостей.
Рис. 8.5. Граф наследования классов согласно первому способу
Поскольку Пятиугольник и Окружность — это разновидности центрально-симметричных фигур, то им может соответствовать следующая иерархия классов. Базовый класс: Центрально-симметричная фигура с данными R, хс, yc. Классы Пятиугольник и Окружность являются наследниками этого класса, а класс Рисунок является наследником классов Окружность и Пятиугольник, поскольку в данной задаче рисунок является сочетанием пятиугольника и окружности.
Шаг 3. Уточнение классов с определением наборов операций для каждого. Здесь анализируется потребность в конструкторах, деструкторах и операциях копирования. При этом принимается во внимание минимальность, полнота и удобство.
Класс Рисунок. Экземпляр этого класса должен создаваться и рисоваться, а следовательно, в интерфейсе класса Рисунок должны присутствовать конструкторы и функция — член рисования рисунка. Тогда получаем:
• конструктор без параметров;
• конструктор с параметрами (Радиус, х-координата, y-координата, Цвет);
• функцию-член вывода рисунка — "Начертить".
Класс Пятиугольник. Экземпляр этого класса должен создаваться и рисоваться, а следовательно, в интерфейсе класса Пятиугольник должны присутствовать конструкторы и функция-член рисования пятиугольника. Тогда получаем:
• конструктор без параметров;
• конструктор с параметрами (Радиус, х-координата, y-координата);
• функцию-член вывода пятиугольника на экран — "Начертить".
Класс Окружность. Экземпляр этого класса должен создаваться и рисоваться, а следовательно, в интерфейсе класса Окружность должны присутствовать конструкторы и функция-член вывода окружности на экран. Тогда получаем:
• конструктор без параметров;
• конструктор с параметрами (Радиус, х-координата, у-координата);
• функцию-член вывода окружности на экран — "Начертить".
Класс Центрально-симметричная фигура. Экземпляр данного класса должен содержать информацию о центрально-симметричной фигуре в виде данных с защищенным доступом (не интерфейсная часть класса) и иметь чисто-виртуальную функцию перерисовки вместе с конструкторами. Тогда получаем:
• конструктор без параметров;
• конструктор с параметрами (Радиус, х-координата, y-координата);
• чисто-виртуальную функцию-член вывода изображения на экран.
Шаг 4. Задание интерфейсов классов. Более точно определяются отношения классов. Методы разделяются на общие и защищенные методы. Определяются типы операций над классами.
Читать дальше