Учебник Технология программирования. Технология программирования
Скачать 7.85 Mb.
|
Контрольные вопросы и задания 1. Что понимают под структурной и функциональной схемами программного обеспечения? В каких случаях их применяют? Чем отличаются структурные и функ- циональные схемы программного обеспечения с различной архитектурой? 2. На каких свойствах программных систем основан метод пошаговой детализации? Почему с его применением получают только структурные алгоритмы? В чем, по-вашему, заключается основная сложность данного метода? 3. Как используется метод пошаговой детализации при разработке алгоритмов и структуры программного обеспечения? 4. Используя метод пошаговой детализации, разработайте алгоритм сложения чисел (n, m < 1000), записанных римскими цифрами: I - 1; II - 2; III - 3; IV - 4; V - 5; VI-6; IX-9; X- 10; L-50; С-100; D-500; М-1000. 5. Для чего строят структурные карты Константайна? Постройте структурные карты Константайна для задания 4. Чем структурные карты Джексона отличаются от структурных карт Константайна? 7. Что положено в основу методик Джексона и Варнье-Орра? Чем различаются данные методики? 8. Какие вопросы решают при проектировании структур данных? Какие характеристики проектируемых структур при этом учитывают? Предложите несколько вариантов структур данных для программы задания 3. Какая из них является лучшей и почему? 9. Для каких разработок целесообразно использовать структурные методологии? 167 6. АНАЛИЗ ТРЕБОВАНИЙ И ОПРЕДЕЛЕНИЕ СПЕЦИФИКАЦИЙ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ПРИ ОБЪЕКТНОМ ПОДХОДЕ Модели разрабатываемого программного обеспечения при объектном подходе ос- нованы на предметах и явлениях реального мира. В основе этих моделей также лежит описание требуемого поведения разрабатываемого программного обеспечения, т. е. его функциональности, но это поведение связывается с состояниями элементов (объектов) конкретной предметной области. Таким образом, на этапе анализа ставятся две задачи: • уточнить требуемое поведение разрабатываемого программного обеспечения; • разработать концептуальную модель его предметной области с точки зрения по- ставленных задач. 6.1. UML - стандартный язык описания разработки программных продуктов с использованием объектного подхода В основе объектного подхода к разработке программного обеспечения лежит объектная декомпозиция, т. е. представление разрабатываемого программного обеспечения в виде совокупности объектов, в процессе взаимодействия которых через передачу сообщений и происходит выполнение требуемых функций (рис. 6.1). Однако при объектном подходе так же, как при структурном подходе, сразу можно выполнить декомпозицию только очень простого программного обеспечения. Поэтому на заре эпохи объектно-ориентированного программирования были предложены различные методы анализа и проектирования программного обеспечения в рамках объектного подхода, использующие различные модели и нотации. Спорить о достоинствах и недостатках этих методов и моделей можно было бесконечно. Эта ситуация получила название «войны методов». Конец «войне методов» положило появление в 1995 г. первой версии языка UML (Unified Modeling Language - унифицированный язык моделирования - см. приложение), который в настоящее время фактически признан 168 стандартным средством описания проектов, создаваемых с использованием объектно- ориентированного подхода. Его создателями являются ведущие специалисты в этой области: Гради Буч, Ивар Якобсон и Джеймс Рамбо, которые использовали в своем языке все лучшее, что появилось в подходах этих авторов во время «войны методов». Спецификация разрабатываемого программного обеспечения при использовании UML объединяет несколько моделей: использования, логическую, реализации, процессов, развертывания (рис. 6.2). Модель использования представляет собой описание функциональности программного обеспечения с точки зрения пользователя. Логическая модель описывает ключевые абстракции программного обеспечения (классы, интерфейсы и т. п.), т. е. средства, обеспечивающие требуемую функциональность. Модель реализации определяет реальную организацию программных модулей в среде разработки. Модель процессов отображает организацию вычислений и оперирует понятиями «процессы» и «нити». Она позволяет оценить производительность, масштабируемость и надежность программного обеспечения. И, наконец, модель развертывания показывает особенности размещения программных компонентов на конкретном оборудовании. Таким образом, каждая из указанных моделей характеризует определенный аспект проектируемой системы, а все они вместе составляют относительно полную модель разрабатываемого программного обеспечения. Всего UML предлагает девять дополняющих друг друга диаграмм, входящих в различные модели: 169 • диаграммы вариантов использования (см. § 6.2); • диаграммы классов (см. § 6.3, 7.3 и 7.4); • диаграммы пакетов (см. § 7.1); • диаграммы последовательностей действий (см. § 6.4 и 7.4); • диаграммы кооперации (см. § 7.3); • диаграммы деятельностей (см. § 6.5 и 7.4); • диаграммы состояний объектов (см. § 7.4); • диаграммы компонентов (см. § 7.5); • диаграммы размещения (см. § 7.6). Все указанные диаграммы по возможности используют единую графическую нотацию, что облегчает их понимание. Помимо указанных диаграмм, как и при структурном подходе, спецификация обязательно включает словарь терминов, а также различного рода описания и текстовые спецификации. Конкретный набор документации определяется разработчиком. UML и предлагаемая теми же авторами методика Rational Unified Process поддерживаются пакетом Rational Rose фирмы Rational Software Corporation. Ряд диаграмм UML можно построить также средствами программы Microsoft Visual Modeler и других CASE-средств. По данным «USA Today» в настоящее время 49 из 50-ти ведущих компьютерных компаний используют UML при разработке программного обеспечения с использованием объектного подхода, что и позволяет говорить о том, что сегодня UML фактически стал стандартом описания подобных разработок. 170 6.2. Определение «вариантов использования» Разработку спецификаций программного обеспечения начинают с анализа требований к функциональности, указанных в техническом задании. В процессе анализа выявляют внешних пользователей разрабатываемого программного обеспечения и перечень отдельных аспектов его поведения в процессе взаимодействия с конкретными пользователями. Аспекты поведения программного обеспечения были названы «вариантами использования» или «прецедентами» (use cases). Примечание. Варианты использования основаны на неформальном описании сценариев функционирования проектируемых программных систем, применяемом многими разработчи- ками программного обеспечения в 1980-1990 голах. Вариант использования представляет собой характерную процедуру применения разрабатываемой системы конкретным действующим лицом, в качестве которого могут выступать не только люди, но и другие системы или устройства. Не следует путать вариант использования с конкретными операциями будущей системы. Каждый вариант использования связан с некоторой целью, имеющей самостоятельное значение, например для текстового редактора Формирование оглавления - это вариант использования, а Связывание заголовков со специальными стилями - операция, которую необходимо выполнить, чтобы стало возможно автоматическое построение оглавления. В зависимости от цели выполнения конкретной процедуры различают следующие варианты использования: • основные - обеспечивают требуемую функциональность разрабатываемого программного обеспечения: • вспомогательные - обеспечивают выполнение необходимых настроек системы и ее обслуживание (например, архивирование информации и т. п.): • дополнительные - обеспечивают дополнительные удобства для пользователя (как правило, реализуются в том случае, если не требуют серьезных затрат каких-либо ресурсов ни при разработке, ни при эксплуатации). Вариант использования можно описать кратко или подробно. Краткая форма описания содержит: название варианта использования, его цель, действующих лиц, тип варианта использования (основная, второстепенная или дополнительная) и его краткое описание. Краткое описание варианта использования Выполнение задания системы решения комбинаторно-оптимизационных задач можно представить в следующем виде: 171 Название варианта Цель Действующие лица Краткое описание Тип варианта Выполнение задания Получение результатов решения задачи Пользователь Решение задачи предполагает выбор задачи, выбор алгоритма, задание данных и получение результатов решения. Основной Основные варианты использования обычно описывают подробно, стараясь отразить особенности предметной области разрабатываемого программного обеспечения. Подробная форма, кроме указанной выше информации, включает описание типичного хода событий и возможных альтернатив. Типичный ход событий представляют в виде диалога между пользователями и системой, последовательно нумеруя события. Если пользователь может выбирать варианты, то их описывают в отдельных таблицах. Также отдельно приводят альтернативы, связанные с нарушением типичного хода событий. Ниже представлено подробное описание варианта использования Выполнение задания: Вариант использования Выполнение задания Типичный ход событий Действия исполнителя Отклик системы /. Пользователь инициирует новое задание 3. Пользователь выбирает тип зада- чи 5. Пользователь выбирает способ задания данных а) Если выбран ввод с клавиатуры, см. раздел Ввод данных б) Если выбран ввод из базы данных, см. раздел Выбор данных из базы 7. Пользователь выбирает алгоритм 9. Пользователь инициирует процесс решения 2. Система регистрирует новое задание и предлагает список типов задач 4. Система регистрирует тип задачи и предлагает список способов задания данных 6. Система регистрирует данные и предлагает список алгоритмов решения 8. Система регистрирует алгоритм и предлагает начать решение 10. Система проверяет полноту оп- ределения задания и запускает подпро- грамму решения задачи 172 Типичный ход событий (окончание) Действия исполнителя Отклик системы 11. Пользователь ожидает 13. Пользователь анализирует результаты и выбирает, сохранять их в базе или нет 12. Система демонстрирует пользователю результаты и предлагает сохранить их в базе данных 14. Если выбрано сохранение данных, то система выполняет запись данных задания в базу 15. Система переходит в состояние ожидания Альтернатива 11. Если время выполнения программы с точки зрения пользователя велико, то он прерывает процесс выполнения. 12. Система прерывает расчеты, предлагает список алгоритмов решения и возвращается на шаг 7. Раздел Ввод данных Типичный ход событий Действия исполнителя Отклик системы 1. Пользователь выбрал Ввод данных 2. Пользователь вводит данные 3. Пользователь отвечает на запрос 2. Система последовательно запрашивает ввод данных 4. Система проверяет данные и запрашивает, сохранять ли данные в базе 6. Если выбран вариант сохранения данных, то система выполняет запись данных в базу и регистрирует их в текущем задании Альтернатива 4. Если обнаружены некорректные данные, то система выдает сообщение об ошибке и предлагает их исправить, возвращаясь на предыдущий шаг. 173 Раздел Выбор данных из базы Типичный ход событий Действия исполнителя Отклик системы 1. Пользователь выбрал Выбор данных из базы 3. Пользователь выбирает данные 2. Система демонстрирует список данных в базе 4. Система читает данные и регистрирует их в текущем задании Диаграммы вариантов использования. Диаграммы вариантов использования позволяют наглядно представить ожидаемое поведение системы. Основными понятиями диаграмм вариантов использования являются: действующее лицо, вариант использования, связь. Действующее лицо - внешняя по отношению к разрабатываемому программному обеспечению сущность, которая взаимодействует с ним с целью получения или предоставления какой-либо информации. Как уже упоминалось выше, действующими лицами могут быть пользователи, другое программное обеспечение или какие-либо технические средства, взаимодействующие с разрабатываемым программным обеспечением. Вариант использования - некоторая очевидная для действующего лица процедура, решающая его конкретную задачу. Все варианты использования, так или иначе, связаны с требованиями к функциональности разрабатываемой системы и могут сильно отличаться по объему выполняемой работы. Связь - взаимодействие действующих лиц и соответствующих вариантов использования. Варианты использования также могут быть связаны между собой. При этом фиксируют связи использования и расширения. Использование подразумевает, что существует некоторый фрагмент поведения разрабатываемого программного обеспечения, который повторяется в нескольких вариантах использования. Этот фрагмент оформляют, как отдельный вариант использования и указывают связь с ним типа «использование». Расширение применяют, если имеется два подобных варианта использования, различающиеся наличием в одном из них некоторых дополнительных действий. В этом случае дополнительные действия определяют как отдельный вариант использования, который связан с основным вариантом связью типа «расширение». На рис. 6.3 приведены условные обозначения, которые применяют при изображении диаграмм вариантов использования. Пример 6.1. Построить диаграмму вариантов использования для системы решения комбинаторно-оптимизационных задач. 174 Действующее лицо у данной системы одно - Пользователь, который, по сути дела, обращается к системе либо для решения новой задачи, либо для просмотра результатов ранее решенной задачи, которые должны сохраняться в базе данных. Представим эти варианты использования на диаграмме (рис. 6.4). 175 Вариант Выполнение задания на самом деле включает несколько вариантов, различающихся способом определения данных (ввод с клавиатуры или чтение из базы) и сохранением введенных данных в базе. Изобразим эти варианты на схеме, указав соответствующие расширения данного варианта (см. рис. 6.4). Помимо двух основных вариантов использования, система должна также предусматривать вспомогательные прецеденты для удаления лишних данных и результатов из базы. Пример 6.2. Построить диаграмму вариантов использования для системы учета успеваемости студентов. Действующими лицами системы являются Декан, Заместитель декана по курсу и Сотрудник деканата. Варианты использования выявляем, анализируя техническое задание, и изображаем на диаграмме, связывая с соответствующими действующими лицами (рис. 6.5). 176 Анализ вариантов использования показывает, что вариант получения сводки успеваемости по факультету «использует» вариант получения сводки по курсу, что и представлено на диаграмме. Полученная диаграмма вариантов использования отражает типичное взаимодействие пользователя с разрабатываемым программным обеспечением. Ее необходимо обсудить с заказчиком для определения как можно большего числа основных вариантов использования и проанализировать на полноту обслуживания системы. Естественно, все варианты использования определить, как правило, не удается: новые варианты фиксируют постоянно, даже в процессе эксплуатации. Но, чем больше вариантов выявлено в процессе уточнения спецификаций, тем лучше, так как при этом получают более точную модель предметной области, что уменьшает вероятность ее пересмотра при добавлении функций. 6.3. Построение концептуальной модели предметной области Диаграммы классов - центральное звено объектно-ориентированных методов разработки программного обеспечения, поэтому все существующие методы используют диаграммы классов в одной из известных нотаций. Однако в основном диаграммы классов в этих методах применяют на этапе проектирования, для того чтобы показать особенности построения конкретных классов. В отличие от ранее существовавших нотаций, UML предлагает ис- пользовать три уровня диаграмм классов в зависимости от степени их детализации: • концептуальный уровень, на котором диаграммы классов, называемые в этом случае контекстными, демонстрируют связи между основными понятиями предметной области; • уровень спецификаций, на котором диаграммы классов отображают интерфейсы классов предметной области, т. е. связи объектов этих классов; • уровень реализации, на котором диаграммы классов непосредственно показывают поля и операции конкретных классов. Практически это три разных модели, связь между которыми неоднозначна. Так, если концептуальная модель определяет некоторое понятие предметной области как класс, то это не означает, что для реализации этого понятия будет использован отдельный класс. Однако во всех трех моделях нас интересуют типы объектов (классы) и их статические отношения, что позволяет использовать единую нотацию. Каждую из перечисленных моделей используют на конкретном этапе разработки программного обеспечения: • концептуальную модель - на этапе анализа; • диаграммы классов уровня спецификации - на этапе проектирования; • диаграммы классов уровня реализации - на этапе реализации. 177 Концептуальные модели в соответствии с определением оперируют понятиями предметной области, атрибутами этих понятий и отношениями между ними. Понятию в предметной области разрабатываемого программного обеспечения могут соответствовать как материальные предметы, так и абстракции, которые применяют специалисты предметной области. Основным понятиям в модели ставятся в соответствие классы. Класс при этом традиционно понимают как совокупность общих признаков заданной группы объектов предметной области. В соответствии с этим определением на диаграмме классов каждому классу соответствует группа объектов, общие признаки которых и фиксирует класс. Так класс Студент объединяет общие признаки группы людей, обучающихся в высших учебных заведениях. Экземпляр класса или объект (например, Иванов И.И.) обязательно обладает всей совокупностью признаков своего класса и может иметь собственные признаки, не фиксированные в классе. Так, например, помимо того, что Иванов И.И. является студентом, он еще может быть спортсменом, музыкантом и т. д. Строго говоря, таким собственным признаком является и идентифицирующее студента имя. На диаграммах класс изображается в виде прямоугольника, внутри которого указано имя класса (рис. 6.6, а). При необходимости допускается указывать характеристики класса, например атрибуты, используя специальные секции условного обозначения (рис. 6.6, б). В качестве атрибутов представляют некоторые, существенные с точки зрения решаемой задачи характеристики объектов, например идентифицирующие значения (имя, номер). Для конкретного объекта атрибут всегда имеет определенное значение. На диаграмме классов атрибуты обычно показывают в секции атрибутов. Под отношением классов понимают статическую, т. е. не зависящую от времени, связь между классами. Различают два основных вида отношений: ассоциация и обобщение. Отношение ассоциации означает наличие связи между экземплярами классов или объектами, например, класс Студент ассоциирован с классом Институт. Ассоциация может иметь имя, например Обучается. Рядом с именем ассоциации обычно ставят стрелку, указывающую направление чтения имени («Студент обучается в институте», а не наоборот). Связь между экземплярами классов подразумевает некоторые роли, которые соответствующие объекты играют по отношению друг к другу. Роль связана с направлением ассоциации. Так по отношению к студентам инсти- 178 тут - организация, осуществляющая их обучение, т. е. роль института можно назвать Место учебы. Студент для института - объект обучающей деятельности института, т. е. Обучаемый. Если роль собственного имени не имеет, то можно считать, что ее имя совпадает с именем класса, по отношению к которому определяется эта роль. Для рассматриваемого примера это соответственно роли Студент и Институт (рис. 6.7, а), но роль можно указать и явно (рис. 6.7, б). Роль также обладает характеристикой множественности, которая показывает, сколько объектов может участвовать в одной связи с каждой стороны. Допускается указывать множественность: * - от 0 до бесконечности; <целое>.. * - от заданного числа до бесконечности; <целое> - точно определенное количество объектов; <целое1>, <целое2> - несколько вариантов точного количества объектов; <целое1>..<целое2> - диапазон объектов. С теоретической точки зрения атрибут тоже класс, экземпляры которого жестко ассоциированы с рассматриваемым классом. В концептуальной модели для отображения соответствующих отношений могут использоваться как ассоциации, так и атрибуты. Например, отношение двух понятий Студент и Имя можно представить, как в виде ассоциации соответствующих классов, так и в варианте, когда классу Студент ставится в соответствие атрибут Имя. Чтобы избежать излишних нагромождений рекомендуется следовать простому правилу [37]: если некоторый объект X в реальном мире не является числом или текстам, то это скорее всего понятие. В противном случае - это атрибут. 179 Обобщением называют такое отношение между классами, при котором любой объект одного класса (подтипа) обязательно является также и объектом другого класса, называемого в данном контексте супертипом. Так, если некоторый конкретный студент Иванов И.И. является объектом подтипа Студент первого курса супертипа Студент, то тот же самый Иванов И.И. является объектом указанного супертипа. Следовательно, все, что известно об объектах супертипа (ассоциации, атрибуты, операции), касается и объектов подтипа. На диаграмме классов обобщение обозначают линией с треугольной стрелкой на конце, подходящей к супертипу (рис. 6.8). На практике определение основных понятий предметной области, которые должны представляться на контекстной диаграмме в виде классов, является не тривиальной задачей. Обычно используют следующий способ: • формируют множество понятий-кандидатов из существительных, характеризующих предметную область в описании вариантов использования; • исключают понятия, не существенные для данного варианта использования, например, в предыдущем примере, «информация», «ввод» и т. п. Для определения множества понятий-кандидатов полезно использовать перечень возможных категорий понятий-кандидатов, приведенный в табл. 6.1. |