Пусть требуется разработать пакет программ для решения расчетных задач, настраиваемый на конкретную предметную область. Каждая предметная область определяется совокупностью переменных и связей между этими переменными — формулами и алгоритмами для вычисления некоторых переменных по известным значениям других переменных. Такой пакет должен состоять из двух частей, универсальной, обеспечивающей ввод и представления данных пользователям и общее управление работой пакета, и функциональной части, содержащей алгоритмы вычислений для конкретной предметной области.
Предметная область ППП для решения расчетных задач может быть формально описана совокупностью трех множеств:
— множества данных X;
— множества функциональных связей (задач, решаемых с использованием пакета) F;
— множества связей по определению R.
При использовании пакета пользователь может вводить некоторые данные из заранее определенного набора данных и запрашивать решение одной или нескольких задач, а затем выводить вычисленные данные на экран, в файл или на принтер. Пакет должен настраиваться на конкретную предметную область путем определения множеств X, F и R и подключения соответствующего набора обрабатывающих модулей (подпрограмм).
Объектно-ориентированный анализ проще всего начать с неформального описания и построения словаря предметной области. В данном случае такой словарь может включать понятия:
Данные (множество X):
множество данных,
элемент множества данных.
Элемент множества данных должен описываться его типом, уровнем агрегирования и наличием или отсутствием конкретного значения.
Задачи (множество F):
множество задач,
элемент множества задач (конкретная задача),
набор аргументов (входных и выходных данных задачи),
аргумент задачи.
Связи по определению (множество R):
множество связей,
элемент множества связей,
тип связи (старший — младший, функция-предикат).
Поскольку каждая задача должна реализовываться вызовом некоторого обрабатывающего модуля (подпрограммы), добавим соответствующие понятия.
Модули (множество M):
множество модулей,
элемент множества модулей,
список параметров модуля,
параметр модуля.
Элементы перечисленных множеств находятся в определенных отношениях между собой. Элемент множества задач использует элементы множества данных для передачи аргументов связанному с задачей модулю. Элементы множества связей либо связывают между собой пары данных, либо описывают некоторый предикат, аргументами которого служат элементы множества данных.
Кроме понятий — существительных следует выделить понятия — глаголы (действия), относящиеся к понятиям — существительным. В рассматриваемом примере действиями могут быть:
— определить новый элемент множества данных, задач или связей;
— добавить новый элемент в множество (данных, задач, связей);
— удалить элемент из множества (данных. задач. связей);
— ввести значение элемента множества данных;
— вывести на экран (в файл, на принтер) значение элемента множества данных;
— выполнить задачу.
Предполагается, что перечисленные действия должны выполняться по командам пользователя. следовательно, все предыдущие рассуждения следует повторить для процесса диалога с пользователем. Отличие будет лишь в том, что для организации диалога, как правило, применяются готовые инструментальные средства и свойственные им основные понятия: диалоговое окно, объект ввода строкового данного, независимые и зависимые, списки строк.
Результаты ООА документируются наборами диаграмм и таблиц, отражающих как структуру выделенных классов объектов, так и отношения между ними.
Понятия, которые принимаются как кандидаты в используемые классы, описываются более подробно по специальному шаблону, который включает следующие характеристики класса:
— Имя класса, т.е. присвоенный классу идентификатор.
— Множественность экземпляров класса (0/1/n).
— Иерархия класса ( базовые классы).
— Структура и интерфейс класса.
Здесь под структурой понимаются как атрибуты класса (элементы-данные), так и действия (методы). Данные и методы разбиваются по уровням доступа, например, предполагая использование при программировании C++, выделяются уровни доступа public, protected и private.
Под интерфейсом класса понимаются элементы-данные, доступные из экземпляров других классов, и методы, которые могут вызываться из других классов.
Для классов желательно определить жизненные циклы экземпляров класса: когда, при каких условиях создается экземпляр класса, когда изменяется его состояние и когда он уничтожается. .
Поскольку в объектно-ориентированной системе экземпляры классов обмениваются сообщениями, следует определить для каждого класса поступающие его экземплярам сообщения и на их основе построить диаграммы перехода (описать класс как конечный автомат). В ряде случаев целесообразно построить модели состояний для каждого объекта и определить списки событий, изменяющих состояние объектов.
После выделения классов и их неформального описания могут быть построены модели процессов, которые должны быть реализованы в будущем программном изделии. В такой модели отражаются внешние события (действия пользователя) и вызываемые этими событиями действия с экземплярами классов.
Например, в рассматриваемом примере процесс определения нового данного должен включать ввод имени данного и его описания, включающего тип данного, уровень агрегирования, границы индексов для массива. После ввода пользователем имени данного нужно проверить, является ли это имя уникальным.
После ввода границ индекса для массива также нужно проверить их допустимость.
Если пользователь указал все характеристики данного правильно, нужно построить экземпляр объекта “данное” и включить его в множество данных.