- •Цели проведения анализа
- •Подход к проектированию программ в целом
- •Рекомендации:
- •30 Принципов объектно-ориентированного дизайна
- •Пример построения диаграммы классов. Задание: Построить диаграмму классов dom демонстрационно-обучающей системы решения квадратных уравнений. Шаг 1. «Вначале было слово…»
- •Оценка модели:
- •Шаг 2. «Раз ромашка, два ромашка…»
- •Примечания:
- •Оценка модели:
- •Справка:
- •Шаг 3. «Позовите Вия!..»
- •Примечания:
- •Оценка модели:
- •Заключение
Пример построения диаграммы классов. Задание: Построить диаграмму классов dom демонстрационно-обучающей системы решения квадратных уравнений. Шаг 1. «Вначале было слово…»
Квадратное уравнение имеет вид ax2+bx+c=0. Очевидно, что на данном этапе имеем один класс «квадратное уравнение». Используя русско-английский словарь и нотацию Borland, назовем его TQuadraticEquation. Полями (данными) класса будут коэффициенты уравнения, методами (функциями) – функция вычисления корней.
Таблица 1
Класс |
Атрибуты/методы |
Описание |
TQuadraticEquation |
double a |
Коэффициент уравнения a |
double b |
Коэффициент уравнения b |
|
double c |
Коэффициент уравнения c |
|
int Roots(double* x1, double* x2) |
Функция вычисления корней. Входные параметры: x1 – адрес переменной для записи значения х1; х2 – адрес переменной для записи значения х2. Возвращаемое значение: Количество корней уравнения (0, 1 или 2) |
Рис 1. Диаграмма классов на первом шаге.
Шаг 1.1.
Поскольку программа демонстрационно-обучающая, очевидно, что ход вычислений пользователю будет интересен. Следовательно, класс TQuadraticEquation нужно расширить методами, позволяющими получать промежуточные результаты вычислений и получить данные для постройки графика.
Таблица 1.1
Класс |
Атрибуты/методы |
Описание |
TQuadraticEquation |
… |
… |
double D() |
Функция вычисления D |
|
int RootCount() |
Функция, возвращающая количество корней уравнения (0, 1 или 2) |
|
double x1() |
Функция вычисления корня x1 |
|
double x2() |
Функция вычисления корня x2 |
|
double y(double x) |
Функция y(x) |
|
bool vertex(double* x, double *y) |
Функция вычисления направления ветвей и точки вершины параболы. Входные параметры: x – адрес переменной для записи значения координаты х точки вершины параболы; y – адрес переменной для записи значения координаты у точки вершины параболы. Возвращаемое значение: Направление ветвей вверх (true) или вниз (false) |
Оценка модели:
Очевидно, что данная модель не соответствует принципам high cohesion (сильного сцепления) и единственности ответственности, поскольку класс несет как функционал описания квадратного уравнения, так и функционал для его решения и для построения графика. Класс перегружен методами, что затрудняет понимание и сопровождение. А при изменении алгоритма решения или добавления нового алгоритма (например, теоремы Виета), класс необходимо будет дополнить (как? еще дополнить?!) новыми методами, что является нарушением принципа открытости/закрытости.
Рис 1.1. Окончательная диаграмма классов на первом шаге.
Вывод:
Необходимо разделить «зоны ответственности» между различными классами. Кроме того, неплохо было бы дополнить классы конструкторами и деструкторами.
