1. Процедурная декомпозиция

advertisement
Московский государственный технический университет им. Н.Э. Баумана
Кафедра Компьютерные системы и сети
Г. С. Иванова, Т.Н. Ничушкина
ПРОЦЕДУРНАЯ И ОБЪЕКТНАЯ ДЕКОМПОЗИЦИИ ПРОГРАММ
Методические указания по выполнению домашнего задания № 2
по курсу «Алгоритмические языки и программирование»
для студентов 1 курса специальностей ИУ6 и АК5
МОСКВА
2003
2
Оглавление
1. Процедурная декомпозиция .....................................................................................................3
1.1. Понятие процедурной декомпозиции. Схема структурная и алгоритмы подпрограмм
при процедурной декомпозиции ..............................................................................................3
1.2. Использование метода пошаговой детализации для процедурной декомпозиции ......4
2. Объектная декомпозиция..........................................................................................................8
2.1. Понятие объектной декомпозиции ...................................................................................8
2.2. Построение диаграмм классов ........................................................................................10
3. Методические указания по выполнению домашнего задания ............................................18
Список литературы ..................................................................................................................19
3
1. ПРОЦЕДУРНАЯ ДЕКОМПОЗИЦИЯ
1.1. Понятие процедурной декомпозиции. Схема структурная и алгоритмы
подпрограмм при процедурной декомпозиции
При разработке сравнительно несложного программного обеспечения обычно
используют процедурную декомпозицию. Процедурной декомпозицией называют процесс
представления разрабатываемого программного обеспечения в виде совокупности
вызывающих друг друга подпрограмм. Каждая подпрограмма в этом случае выполняет
некоторую операцию, а вся совокупность подпрограмм решает поставленную задачу.
Документирование программ, включающих подпрограммы предполагает разработку
алгоритмов, как самих программ, так и используемых подпрограмм.
Пример 1. Разработать программу, которая определяет площадь четырехугольника
по заданным длинам сторон и диагонали.
Будем считать площадь четырехугольника, как сумму площадей двух треугольников
по формуле Герона. Вычисление площади треугольника оформим как подпрограмму.
Исходные данные такой подпрограммы – длины сторон треугольника. Подпрограмма не
должна менять их значения, поэтому длины можно передать как параметры-значения или
параметры-константы. Результат работы этой подпрограммы – скалярное значение,
значит, она может быть реализована как функция. Однако она может быть реализована и
как процедура, которая возвращает результат через параметр-переменную. Схемы
алгоритма проектируемой программы с использованием подпрограмм обоих типов
приведены на рисунке 1.
Начало
Stf(x,y,z)
Начало
Stp(x,y,z,S)
Ввод
a,b,c,d,e
p:=(x+y+z)/2
Ввод
a,b,c,d,e
p:=(x+y+z)/2
Вывод
Strf(.)+Stf(.)
Stf= ...
Stp
(a,b,e,S1)
S= ...
Конец
Return
Stp
(c,d,e,S2)
Return
Вывод
S1+S2
Конец
a
б
Рисунок 1 - Схемы алгоритмов программы определения площади четырехугольника с использованием функции (а)
и процедуры (б)
Для документирования программного обеспечения, включающего подпрограммы,
помимо алгоритмов используют структурные схемы. Структурной называют схему,
4
отражающую состав программного обеспечения и взаимодействие по управлению его
частей (при процедурной декомпозиции подпрограмм) разрабатываемого программного
обеспечения.
Структурная схема программы определения площади четырехугольника приведена
на рисунке 2. Ее вид не зависит от типа подпрограмм.
Основная
программа
Подпрограмма определения
площади треугольника
Рисунок 2 - Схема структурная программы определения площади четырех угольника
1.2. Использование метода пошаговой детализации для процедурной декомпозиции
Метод пошаговой детализации позволяет не только разрабатывать алгоритмы, но и
осуществлять процедурную декомпозицию, т. е. выделять подпрограммы, соблюдая все
требования, предъявляемые структурным программированием.
Пример 2. Разработать программу исследования элементарных функций, которая
для функций
y=sin x,
y=cos x,
y=tg x,
y=ln x,
y=ex
выполняет следующие действия на заданном отрезке:
 строит таблицу значений функции с заданным шагом;
 определяет корни функции;
 определяет максимум и минимум функции.
Программы такого рода обычно взаимодействуют с пользователем через меню. В
данной программе будет использовано два меню: меню функций, в котором пользователь
будет выбирать функцию, и меню операций, в котором пользователь будет выбирать вид
обработки. Так, меню функций (см. рисунок 3, а) должно выводиться на экран при запуске
программы.
После ввода номера функции на экране должно появиться меню операций (см.
рисунок 3, б). Введя номер операции, пользователь должен увидеть на экране запрос на
ввод данных, необходимых для выполнения этой операции (см. рисунок 3, в-д). Задав
данные, он должен получить на экране результаты. После анализа результатов
необходимо любую клавишу, чтобы вернуться в меню операций.
Далее пользователь может выбрать другую операцию, а может вернуться в меню
функций, если закажет операцию 4 (выход).
5
Программа исследования функций:
1 - sin x
2 - cos x
3 - ln x
4 - e^ x
5 - выход
Введите номер функции: _
Список операций:
1 - получение таблицы значений;
2 - определение корней;
3 - определение экстремумов;
4 - выход.
Определите операцию: _
а
б
Введите интервал: _
Введите погрешность: _
Введите интервал: _
Введите шаг: _
Таблица значений функции.
x=...
y=...
x=...
y=...
x=...
y=...
Нажмите любую клавишу.
Корень x=...
значение функции в корне y=...
Нажмите любую клавишу.
в
г
Введите интервал: _
Введите погрешность: _
Минимум y=... при x=...
Максимум y=... при x=...
Нажмите любую клавишу.
д
Рисунок 3 - Состояния интерфейса программы исследования функций: меню функций (а), меню операций (б),
оформление операций (в-д)
Вернувшись в меню функций, пользователь может выбрать другую функцию, а
может выйти из программы.
На рисунке 4 представлен граф состояний интерфейса пользователя, который
показывает, в какой последовательности и по нажатию каких клавиш осуществляется
переключение форм (экранов) интерфейса.
5
М еню
функций
1, 2, 3, 4
4
x нажатие
любой
клавиши
М еню
операций
1
Форма
Таблица
x
2
x
Форма
Корень
3
x
Форма
M axmin
Рисунок 4 - Диаграмма (граф) состояний интерфейса программы исследования функции
6
При разработке алгоритма методом пошаговой детализации будем использовать
псевдокод. Начинаем разработку алгоритма «сверху», т. е. с реализации меню функций.
Меню функций работает следующим образом. При запуске программы выводим
меню на экран. Затем вводим номер функции и, если номер функции не равен 5, то
передаем управление меню операций, сообщая ему номер выбранной функции. Когда
меню операций завершит свою работу, то на экран вновь необходимо вывести меню
функций и опять ввести номер функции:
Программа исследования элементарных функций:
ВЫВЕСТИ_МЕНЮ_ФУНКЦИЙ.
Ввести Номер_функции.
Цикл-пока Номер_функции <> 5
Вызвать МЕНЮ_ОПЕРАЦИЙ (Номер_функции)
ВЫВЕСТИ_МЕНЮ_ФУНКЦИЙ.
Ввести Номер_функции.
Все-цикл.
Конец.
На этом шаге определились две подпрограммы: ВЫВЕСТИ_МЕНЮ_ФУНКЦИЙ и
МЕНЮ_ОПЕРАЦИЙ (Номер_функции). Подпрорамма ВЫВЕСТИ_МЕНЮ_ФУНКЦИЙ
будет иметь линейную структуру:
Подпрограмма ВЫВЕСТИ_МЕНЮ_ФУНКЦИЙ:
ОЧИСТИТЬ_ЭКРАН.
Вывести «Программа исследования функций.»
Вывести «1 – sin x;».
Вывести «2 – cos x;».
Вывести «3 – ln x;».
Вывести «4 – e^x;».
Вывести «5 – Выход.».
Конец подпрограммы.
Подпрограмма МЕНЮ_ОПЕРАЦИЙ (Номер_функции) также должна реализовать
меню:
Подпрограмма МЕНЮ_ОПЕРАЦИЙ (Номер_функции):
ВЫВЕСТИ_МЕНЮ_ОПЕРАЦИЙ.
Ввести Номер_операции.
Цикл-пока Номер_ операции <> 4
Выбор Номер_ операции:
1: Вызвать ТАБЛИЦА (Номер_функции);
2: Вызвать КОРЕНЬ (Номер_функции);
3: Вызвать МАКСМИН (Номер_функции);
Все-выбор.
ВЫВЕСТИ_МЕНЮ_ОПЕРАЦИЙ. .
Ввести Номер_ операции.
Все-цикл.
Конец подпрограммы.
7
Подпрограмма
ВЫВЕСТИ_МЕНЮ_ОПЕРАЦИЙ
похожа
на
подпрограмму
ВЫВЕСТИ_МЕНЮ_ФУНКЦИЙ:
Подпрограмма ВЫВЕСТИ_МЕНЮ_ОПЕРАЦИЙ:
ОЧИСТИТЬ_ЭКРАН.
Вывести «Список операций:».
Вывести «1 – получение таблицы значений;».
Вывести «2 – определение корней;».
Вывести «3 – определение экстремумов;».
Вывести «4 – выход.».
Вывести «Определите операцию: ».
Конец подпрограммы.
Подпрограмма ТАБЛИЦА(Номер_функции) должна вводить дополнительные
данные о границах интервала и значении шага:
Подпрограмма ТАБЛИЦА(Номер_функции):
ОЧИСТИТЬ_ЭКРАН.
Вывести «Введите границы интервала»
Ввести A, B.
Вывести «Введите шаг».
Ввести h.
x=A
Цикл-пока x  B
Если ФУНКЦИЯ(Номер_функции, x, y)
то Вывести «x=», x, « y=», y
иначе «x=», x, «значение функции не определено»
Все-если
x=x+h
Bce-цикл.
ОЖИДАТЬ_НАЖАНИЯ_КЛАВИШИ.
Конец подпрограммы.
Подпрограммы КОРЕНЬ (Номер_функции) и
МАКСМИН (Номер_функции)
определяются аналогично. Естественно они также обращаются к подпрограмме
ФУНКЦИЯ для определения конкретного значения функции в точке.
Подпрограмма ФУНКЦИЯ будет возвращать логическое значение: true – если
значение функции определено, и false – в противном случае. Посчитанное значение
исследуемой функции подпрограмма будет возвращать через параметр-переменную y:
Подпрограмма ФУНКЦИЯ(Номер_функции, x, y):
ФУНКЦИЯ=true
Выбор Номер_функции:
1: y=sin(x);
2: y=cos(x);
3: Если x>0
то y=ln(x)
иначе ФУНКЦИЯ=false
Все-если
8
4: y=exp(x)
Все-выбор
Конец подпрограммы.
Таким образом, выполняя пошаговую детализацию программы, мы осуществили ее
декомпозицию на основную программу и семь
подпрограмм (подпрограммы
ОЧИСТИТЬ_ЭКРАН и ОЖИДАТЬ_НАЖАНИЯ_КЛАВИШИ являются стандартными
процедурами библиотеки управления экраном в текстовом режиме и их можно не
учитывать).
Результат процедурной декомпозиции представим в виде структурной схемы (см.
рисунок 5).
Основная
программа
Вывести меню
функций
Меню
операций
Вывести меню
операций
Таблица
Корень
Mаксмин
Функция
Рисунок 5 - Схема структурная программы исследования функций
Использование метода пошаговой детализации, таким образом, существенно
облегчает процедурную декомпозицию.
2. ОБЪЕКТНАЯ ДЕКОМПОЗИЦИЯ
2.1. Понятие объектной декомпозиции
Объектной декомпозицией называют процесс представления предметной области
задачи в виде совокупности функциональных элементов (объектов), обменивающихся в
процессе выполнения программы входными воздействиями (сообщениями).
Каждый выделяемый объект предметной области должен уметь выполнять
некоторые действия, зависящие от полученных сообщений и параметров самого объекта.
Совокупность
значений
параметров
объекта
называют
его
состоянием,
а
совокупность реакций на получаемые сообщения – поведением.
Параметры состояния и элементы поведения объектов определяются условием
задачи.
В процессе решения задачи объект, получив некоторое сообщение, выполняет
заранее определенные действия, например, может изменить собственное состояние,
9
выполнить некоторые вычисления, нарисовать окно или график и, в свою очередь,
сформировать сообщения другим объектам. Таким образом, процессом решения задачи
управляет последовательность сообщений. Передавая эти сообщения от объекта к
объекту, система выполняет необходимые действия.
Различие процедурной и объектной декомпозиции предметной области задачи
рассмотрим на примере разработки программы исследования элементарных функций,
приведенной в примере 2.
Пример 3. Разработать программу исследования элементарных функций, которая
для функций y=sin x, y=cos x, y=tg x, y=ln x, y=ex выполняет следующие действия на
заданном отрезке:
 строит таблицу значений функции с заданным шагом;
 определяет корни функции;
 определяет максимум и минимум функции.
В основе объектной декомпозиции также лежит граф состояний интерфейса (см.
рисунки 3 – 4). Будем считать, что каждое состояние интерфейса – это состояние
некоторого функционального элемента системы, т. е. объекта. Состояний интерфейса
пять, соответственно получаем пять объектов. Назовем эти объекты следующим образом:
Главное меню, Меню операций, Табулятор, Определитель корней, Определитель
экстремумов. Эти объекты передают управление друг другу, генерируя сообщение
Активизировать.
Кроме этого можно выделить еще один объект Функция, который должен
обеспечивать вычисление выбранной функции по заданному аргументу. Номер функции
сообщается данному объекту Главным меню, после того, как пользователь осуществит
выбор.
Результат объектной декомпозиции изображают в виде диаграммы объектов (см.
рисунок 6).
10
Главное
меню
Установить номер
функции (f)
Активизировать
М еню
операций
Активизировать
Активизировать
Активизировать
Табулятор
Определитель
корней
Определитель
экстремумов
Вычислить(x)
Вычислить(x)
Вычислить(x)
Функция
Рисунок 6 - Диаграмма объектов
Полная характеристика объекта включает идентифицирующее условное имя, а также
перечень и описание параметров состояния и аспектов поведения.
Так состояние объекта Функция характеризуется единственным параметром:
номером функции, который передает ему Главное меню. А поведение включает реакции
на два типа сообщений: получив номер функции, объект должен сохранить его, изменив
свое состояние, а получив запрос на вычисление значения функции, сопровождающийся
определенным значением аргумента – вернуть значение функции в заданной точке.
Таким образом, при выполнении объектной декомпозиции определяют и описывают
множество объектов предметной области и множество сообщений, которое формирует и
получает каждый объект.
2.2. Построение диаграмм классов
Для реализации объектов используют специальные типы – классы. Класс – это
структурный тип данных, который включает описание полей данных, а также процедур и
функций, работающих с этими полями данных.
Одним из наиболее значимых достоинств ООП является то, что большинство
классов для реализации объектов не приходится разрабатывать «с нуля». Обычно классы
строят на базе уже существующих, используя механизмы, реализующие определенное
отношение
существующего
и
строящего
классов
между
собой:
наследование,
композицию, наполнение, полиморфное наследование.
Наследованием называют отношение между классами, при котором один класс
строится на базе второго посредством добавления полей и определения новых методов.
При этом исходный класс, на базе которого выполняется построение, называют
родительским или базовым, а строящейся класс – потомком или производным классом.
11
При наследовании поля и методы родительского класса повторно не определяют,
предусмотренный механизм наследования позволяет использовать эти компоненты
класса, специально этого не оговаривая.
Отношения между различными классами проекта принято иллюстрировать
диаграммой отношений классов или просто диаграммой классов. Если на диаграмме
отношений классов показано только отношение наследования, то такую диаграмму
называют иерархией классов.
На диаграмме классов наследование изображают линией со стрелкой, направленной
к классу-родителю (см. рисунок 7).
Классродитель
Класспотомок
а
Классродитель
Класспотомок 1
Класспотомок 2
б
Класспотомок
Классродитель
в
Рисунок 7 - Примеры иерархий классов: с одним потомком (а, в) и с двумя потомками (б)
Кроме отношения между классами на диаграмме классов целесообразно бывает
указать поля и методы каждого или только строящегося класса, так как это позволяет
уточнить структуру разрабатываемых классов. Поля и методы перечисляют в
специальных секциях уточненного обозначения класса (см. рисунок 8).
Имя класса
Список полей
Список методов
Рисунок 8 - Условное обозначение класса с указанием полей и методов
Композицией называют такое отношение между классами, когда один является
частью второго. Физически, композиция реализуется включением в класс фиксированного
количества полей, являющихся объектами другого класса. Такие поля обычно называют
объектными.
На диаграмме классов композицию изображают линией с ромбом на конце,
подходящем к более сложному классу (см. рисунок 9).
12
2..4
Класс-часть
1
1
Основной
класс
Основной
класс
1
2
1
а
Класс 1
Класс 2
Класс 3
б
Рисунок 9 - Примеры диаграмм классов, изображающих композицию: с одним объектным полем (а) и несколькими
объектными полями различных типов (б)
Наполнением называют такое отношение между классами, при котором точное
количество объектов одного класса, включаемых в другой класс, не ограничено и может
меняться от 0 до достаточно больших значений. Физически наполнение реализуется с
использованием указателей на объекты. В отличие от объектного поля, которое включает
в класс точно указанное количество объектов (1 или более – при использовании массива
объектов или нескольких объектных полей) конкретного класса, использование
указателей позволяет включить 0 или более объектов, если они собраны в массив или
списковую (линейную или нелинейную) структуру.
На диаграмме классов наполнение изображают аналогично композиции, но ромб не
закрашивают, показывая более слабую связь объектов классов (см. рисунок 10).
Класс-часть
0..*
Классагрегат
Рисунок 10 - Пример диаграммы классов с наполнением
Для определения отношения имеющегося и строящегося классов необходимо
выполнить анализ структуры объектов предметной области, полученных в результате
объектной декомпозиции.
Если объекты предметной области слишком сложны, чтобы ставить им в
соответствие некий простой класс, то процесс декомпозиции можно продолжить, выделяя
внутри сложных объектов более простые.
При этом возможны следующие варианты.
1. Внутри объекта можно выделить объект близкого назначения, но с более простой
структурой и/или поведением – класс для реализации данного объекта следует строить на
базе более простого, используя наследование. Если при этом объекты строящего класса
отличаются от объектов базового класса некоторыми аспектами поведения, то следует
изменить
поведение
объектов
строящего
класса
полиморфное наследование с переопределение методов.
при
наследовании,
используя
13
2. Внутри объекта можно выделить определенное количество объектов более
простой структуры со своим поведением – класс конструируется объединением объектов
других классов с добавлением полей и методов строящегося класса – композиция классов.
3. Внутри объекта можно выделить заранее не предсказуемое количество объектов
более простой структуры со своим поведением – класс конструируется с возможностью
динамического подключения объектов других классов (наполнение) и добавлением полей
и методов строящегося класса.
Рассмотрим два примера.
Пример 4. Разработать класс для реализации объекта «Текст», который должен:
 для каждого слова некоторой последовательности слов хранить его атрибуты (тип
шрифта и размер букв);
 определять количество слов в тексте;
 добавлять слова после слов с указанными номерами;
 удалять заданные слова из теста;
 менять местами слова с заданными номерами;
 заменять одно заданное слово на другое во всем тексте;
 позволять переопределять атрибуты слова с заданным номером.
Итак, реализуемый объект должен оперировать с некоторыми внутренними
объектами «Словами», для которых можно определить собственное состояние и
поведение. Естественно создать специальный класс TWord для реализации «Слов». Класс
TText для реализации «Текста» может быть построен как с использованием композиции,
так и с использованием наполнения.
В первом случае он должен включать массив объектов класса TWord. Максимальное
количество элементов массива должно быть определено заранее и, следовательно,
ограничено (см. рисунок 11, а). При выполнении операций удаления и вставки придется
сдвигать и раздвигать элементы массива.
Во втором случае класс TText должен включать список объектов класса TWord (см.
рисунок 11, б). Ограничения предыдущей реализации будут сняты, но реализация со
списком имеет несколько большую трудоемкость, и, кроме того, при обращении к слову
по номеру придется каждый раз последовательно отсчитывать нужный элемент. Выбор
конкретного варианта реализации зависит от условий решаемой задачи.
14
TWord
font, size
SetFont( )
SetSize( )
TText
n, nmax, MasW(nmax)
Length ( ), Add ( ), Del( ),
SetAttr( ), Chang1( ),
Chang2( )
1..nmax
а
TWord
font, size, next
SetFont( )
SetSize( )
TText
pFirst:^TWord
Length ( ), Add ( ), Del( ),
SetAttr( ), Chang1( ),
Chang2( )

б
Рисунок 11 - Диаграммы классов для реализации объекта Текст: с композицией (а) и с наполнением (б)
Пример 5. Разработать классы для реализации объектов Табулятор, Определитель
корней и Определитель экстремумов из примера 3.
Объекты Табулятор, Определитель корней и Определитель экстремумов отвечают за
реализацию методов решения некоторых частных задач при исследовании функций. Они
имеют много общего. Попробуем определить это общее.
Любой объект, получив управление должен ввести диапазон изменения аргумента [a,
b], решить подзадачу, вывести результаты, а затем вернуть управление меню операций.
Общее поведение и поля объектов опишем в классе TMetod. Основной метод этого класса
Run должен реализовывать общее поведение и обеспечивать возможность изменения
элементов этого поведения (решения конкретных подзадач) для объектов классов,
которые будут от него наследоваться. Решение конкретной подзадачи реализуем как
внутренний метод Task, вызываемый из метода Run. Этот внутренний метод для класса
TMetod определять не будем (абстрактный метод).
Классы для реализации разрабатываемых объектов наследуем от
TMetod,
переопределяя метод Task и добавляя недостающие поля (см. рисунок 12).
TMetod
a, b:real
Run ( )
Task ( )
TTable
h:real
Task ( )
TM axM in
eps:real
Task ( )
TRoot
eps:real
Task ( )
Рисунок 12 - Иерархия классов для реализации объектов Табулятор, Определитель корней и Определитель экстремумов
При разработке программ с использованием объектного подхода часто строят
диаграммы классов, на которых показывают также отношение ассоциации, которое
отражает взаимодействие объектов классов между собой в процессе работы программы.
15
Поскольку наполнение и композиция также предполагают взаимодействие, ассоциацию
используют либо на ранних этапах разработки, либо, если отношение классов не подходит
под определение композиции или агрегации. Ассоциация может иметь имя, каждый
элемент ассоциации может иметь имя и указание множественности (см. рисунок 13).
Институт
Институт
Институт
1
М есто
обучения
Обучается
Обучаемый
12000
Студент
Студент
Студент
а
б
в
Рисунок 13 - Обозначение ассоциации:
а – с указанием имени ассоциации и ее направления; б – с указанием имен ролей;
в – с указанием множественности
Пример
6.
Разработать
программу «Записная книжка», которая должна
осуществлять: создание новой книжки (файла), добавление записей (фамилии, имени и
телефона), поиск записей по фамилии и/или имени.
По сути дела данная программа должна обеспечивать удобный интерфейс для
хранения и поиска информации в некотором файле. Разработку начинаем с уточнения
интерфейса.
Главное меню программы в соответствии с условием задачи должно вызывать
основные функции для работы с «Записной книжкой» (см. рисунок 14).
Записная книжка
Создать/
открыть
книжку
Записать
телефон
Найти
телефон
Выход
Рисунок 14 - Окно главного меню
Граф состояний интерфейса, отражающий процесс работы пользователя с
программой, приведен на рисунок 15.
16
4
Главное
меню
1
2
5
Создание/
открытие
файла
5
5
3
Добавление
записей
Поиск
записей
Рисунок 15 - Граф состояний интерфейса:
1-4 – выбор пунктов «Открытие файла», «Добавление записей», «Поиск записей» и «Выход» соответственно;
5 – выбор пунктов «Выход» на формах «Открытие файла», «Добавление записей», «Поиск записей»
При выполнении пункта «Создать или открыть книжку» на экране должно появиться
окно ввода имени файла (см. рисунок 16), причем до ввода имени файла выбор прочих
пунктов меню, кроме «Завершения работы», должен быть блокирован. После ввода имени
файла, которое должно быть проверено с точки зрения синтаксиса имен файлов,
программа будет пытаться открыть файл. Если файл с указанным именем не будет
обнаружен, то программа создаст файл с таким именем.
Введите
имя файла:
Рисунок 16 - Окно ввода имени файла
При выборе пункта «Добавление записей» на экране должна появляться форма ввода
записей (см. рисунок 17), которая содержит поля ввода и локальное меню. Добавление
записей происходит при выборе пункта «Добавить» локального меню. После внесения
всех записей пользователь должен выбрать пункт «Выход», и вновь вернуться в главное
меню.
Добавление записей
Фамилия
Имя
Телефон
Добавить
Выход
Рисунок 17 - Форма ввода записей
При выборе пункта «Поиск записей» на экране должна появляться форма поиска
записей (см. рисунок 18, а), которая содержит поле ввода фамилии, имени, поле вывода
телефона и локальное меню из 3-х пунктов.
17
Поиск записей
Фамилия
Имя
Данных нет.
Телефон
Продолжить
Найти
Следующий
Выход
а
б
Рисунок 18 - Форма поиска записей (а) и сообщение об отсутствии данных (б)
Поиск должен осуществляться по вводу фамилии и/или имени. Начало поиска по
выбору пункта «Поиск». Если запись не найдена, то программа должна выдавать
сообщение об отсутствии данных (см. рисунок 18, б). Если записей несколько, то доступ к
следующим записям осуществляется по выбору пункта «Следующий» (см. граф состояний
на рисунок 19). После завершения поиска мы вновь должны вернуться в главное меню.
Ввод
данных
1 [Запись найдена]
2 [Запись найдена]
Вывод
данных
1
[Запись не найдена]
3
2 [Запись не найдена]
"Запись не
найдена"
4
Рисунок 19 - Граф состояний интерфейса пункта «Поиск записей»: 1 – выбор пункта «Поиск»; 2 – выбор пункта
«Следующий»; 3 – выбор пункта «Выход»; 4 – подтверждение получения сообщения об отсутствии данных.
Выход из системы должен выполняться при выборе соответствующего пункта
меню или при нажатии клавиши Esc.
Будем считать, что каждому элементу интерфейса соответствует интерфейсный
объект, полученная при этом диаграмма интерфейсных объектов – результат объектной
декомпозиции интерфейсной части предметной области программы, приведена на рисунке
20.
18
Главное
меню
Активизировать
Активизировать
Активизировать
Ввод
имени файла
Добавление
записей
Поиск
записей
Найти
Добавить
Открыть/создать
Активизировать
Сообщение об
отсутствии
данных
Файл
Рисунок 20 - Диаграмма объектов – результат декомпозиции программы
На рисунке 21 показана диаграмма классов, реализующих соответствующие
объекты. Темным показаны универсальные классы, которые были разработаны отдельно,
помещены в библиотеку и могут быть использованы в других разработках.
TWin
TInput
TM essage
TIName
TMenu
TM ain
may
Enter( ), Init( )
TForm
Error( )
TAdd
TFind
Enter( )
Enter( ), Input( ), Show( )
Формирует
TBase
Открывает
Обрабатывает
Рисунок 21 - Диаграмма классов программы
3. МЕТОДИЧЕСКИЕ УКАЗАНИЯ ПО ВЫПОЛНЕНИЮ ДОМАШНЕГО
ЗАДАНИЯ
Домашнее задание №2 выдается на 9-ой неделе и включает разработку проектов
программ практических занятий №№ 9–15. При проектировании заданий 9-12 необходимо
использовать процедурный подход, соответственно документация к ним должна включать
схему структурную и схемы алгоритмов.
При проектировании заданий 13-15 следует использовать объектный подход. Для
задания 13 необходимо представить диаграмму объектов и схематическое описание
класса. Для задания 14 – показать диаграмму объектов и иерархию классов с указанием их
19
атрибутов и методов. Для задания 15 – представить экранные формы, диаграмму объектов
и диаграмму классов.
Проверка домашнего задания осуществляется поэтапно, по мере выполнения
практических занятий. Окончательный срок завершения задания – 16 неделя 1-го
семестра. Студент считается выполнившим домашнее задание, если у него к этому
моменту завершены и проверены преподавателем отчеты по выполнению указанных
практик.
Список литературы
1. Иванова Г.С. Основы программирования. Учеб. для вузов – М.: Из-во МГТУ им.
Баумана, 2002.
2. Иванова Г.С., Ничушкина Т.Н., Пугачев Е.К. Объектно-ориентированное
программирование. Учеб. для вузов – М.: Из-во МГТУ им. Баумана, 2001.
Download