На этой итерации реализуем методы классов Menu и Menu_title, а также добавим необходимые вспомогательные методы в класс Window.
Отметим, что операции, обеспечивающие сценарий Использование простого окна, в основном уже реализованы (на первой итерации). Осталось запрограммировать следующие операции — методы класса Window:
q call_call_back — вызов функции обратного вызова;
q initialize — управляемая инициализация окна;
q clear — очистка окна с помощью пробелов;
q new_line — перемещение на следующую строку окна.
Для обеспечения сценария Использование окна меню создаются следующие операции.
1. В классе Menu:
q framework — создание каркаса окна-меню;
q send_to — обработка пользовательского ввода в окно-меню;
q menu_spot — выделение выбранного элемента меню;
q set_up — заполнение окна-меню именами элементов;
q get_menu_name — возврат имени выбранного элемента меню;
q get_cur_selected_detaits — возврат указателя на выбранное окно и функцию обратного вызова.
2. В классе Menu_title:
q send_to — выделение новой строки меню или вызов функции обратного вызова;
q switch_away — возврат в базовое окно-меню более высокого уровня;
q set_up — установки окна меню-заголовка.
Результаты оценки качества второй итерации представлены в табл. 15.4.
Таблица 15.4. Оценки качества WUI после второй итерации
Метрика | lnput_ Manager | Window_ Manager | Screen | Root_ Window | Window | Menu | Menu title | Среднее значение |
WMC | 0,12 | 0,42 | 0,11 | 0,98 | 0,33 | 0,27 | 0,32 | |
NOC | - | - | - | 0,4 | ||||
СВО | ||||||||
RFC | 9,4 | |||||||
LCOM | 1,1 | |||||||
CS | 3/2 | 10/8 | 5/1 | 0/2 | 22/22 | 28/24 | 11/12 | 11,3/10,1 |
NOO | - | - | - | 0,7 | ||||
NOA | - | - | - | |||||
SI | - | - | - | 0,23 | 0,46 | 0,1 | ||
oswe | 4,2 | 2,2 | 4,45 | 4,13 | 4,0 | |||
NPAVG | 1,3 | 2,18 | 4,63 | 1,67 | 1,5 | |||
Метрики, вычисляемые для системы | ||||||||
DIT | ||||||||
NC | ||||||||
MOM | ||||||||
LOCZ |
Сравним оценки качества первой и второй итераций.
1. Рост системных оценок LOC , NOM, а также средних значений метрик WMC, RFC, CS, СВО и NOO — свидетельство возрастания сложности продукта.
2. Увеличение значения DIT и среднего значения NOC говорит об увеличении возможности многократного использования классов.
3. На второй итерации в среднем была ослаблена абстракция классов, о чем свидетельствует увеличение средних значений NOC, NOA, SI.
4. Рост средних значений OSAVG и NPAVG говорит о том, что сотрудничество между объектами усложнилось.
5. Среднее значение СВО указывает на увеличение сцепления между классами (это нежелательно), зато снижение среднего значения LCOM свидетельствует, что связность внутри классов увеличилась (таким образом, снизилась вероятность ошибок в ходе разработки).
Вывод: качество разработки в среднем возросло, так как, несмотря на увеличение средних значений сложности и сцепления (за счет добавления в иерархию наследования новых классов), связность внутри классов была увеличена.
В практике проектирования достаточно типичны случаи, когда в процессе разработки меняются исходные требования или появляются дополнительные требования к продукту. Предположим, что в конце второй итерации появилось дополнительное требование — ввести в WUI новый тип окна — диалоговое окно. Диалоговое окно должно обеспечивать не только вывод, но и ввод данных, а также их обработку.
Для реализации этого требования вводится третья итерация конструирования.