Дж. Рамбо, М. Блаха - UML 2.0 - Объектно-ориентированное моделирование и разработка (1158633), страница 85
Текст из файла (страница 85)
Операция г(е!еге применима только к верхней карте стопки (Руе). Операция гюгг (сортировка) осуществляет сортировку карт на руках (Напг!) по масти (зшг) и по старшинству (гапй). Класс Р!!е является абстрактным. Операции гоРО/Р!!е и Ьоггот07Р!!е — это запросы. Вгаге (взять) снимает верхнюю карту со стопки н помещает ее в руку (Нано'), которая передается в качестве аргумента.
Операция зйиО)е (перемешивание) перемешивает колоду. Прн раздаче (с1еа1) карты по одной берутся из колоды н разлаются игрокам на руки (объекты класса Напк! при этом создаются и возвращаются в виде массива). Операция г7!зр!ау отображает карту. Сотрвге сравнивает карты и определяет, какая из них старше. РЬсагг! удаляет карту из совокупности и помещает ее в стопку, переданную в качестве аргумента.
Упражнения 353 Рис. У15.3. Часть диаграммы классов для программы, играющей в карты 15.11. (5) Напишите псевдокод для вычисления суммы очков, набранных за попытку (рис, У12.4). Каждая попытка участника (Тпа!) оценивается несколькими судьями. Каждый из них поднимает карточку с числом очков. Специально назначенный человек зачитывает очки секретарям. Трое секретарей записывают очки, выбрасывают одно минимальное н одно максимальное значения, после чего суммируют оставшиеся очки. Они сравнивают результаты между собой, чтобы исключить арифметические н иные ошибки.
В некоторых случаях они могут попросить зачитать очки повторно. Полученные результаты передаются трем другим секретарям, которые умножают результат на коэффициент сложности и вычисляют среднее значение. Полученные значения сравниваются для исключения арифметических и других ошибок. 15.12. Напишите псевдокод для перечисленных ниже операций классов (рнс. У12А). Вам придется добавить на диаграмму ассоциацию Рея(згегвс(Рог (Зарегистрирован) типа многне-ко-многим между множеством выступлений Епелгз и упорядоченным списком участников Соглреп)огз, чтобы отслеживать тех участников, которые зарегистрированы на какое-либо выступление.
Планирование попыток осуществляйте с учетом порядка регистрации участников. 1) (3) Поиск выступления (Епепг) по упражнению (Ггяиге) и соревнова- нию (Меег). 2) (3) Регистрация участника (Сотрегйог) на выступление (Евепг). 12 Зм 699 Глава 15 ° Проектирование классов 3) (3) Регистрация участника (Сотрейгог) на все выступления (Еиепг) со- ревнования (Меег). 4) (5) Выбор и планирование выступлений (Епепгз) соревнования (Меег). 5) (3) Планирование соревнований (Меег) сезона (5еавоп).
б) (4) Распределение судей (упггйе) и секретарей (5согеггеерег) по станци- ям (5гаггоп). 15.13. (8) На рис. У15.4 приведена часть диаграммы классов метамодели, которая может использоваться в компиляторе объектно-ориентированного языка. Напишите псевдокод для метода ггасе7п)гегггапсераг)г, который будет прослеживать иерархию наследования так, как это описано ниже. Метод возвращает упорядоченный список классов от более общего класса к более конкретному. Прослеживание осушествляется только по цепочке обобшений; агрегации и ассоциации не учитываются. Если прослеживание не дает результатов, возврашается пустой список.
Вы можете исходить из предположения, что множественное наследование не поддерживается. Епд С!авв 1 * 1 не!вцопвтир гегваопв~ирйвпге с!аввйагпе соппесеоп епойагпе ~1' г ту Рис. у15.4. Часп диаграммы классов метамодели 15.14. (8) Усовершенствуйте рис. У15.4, удалив ассоциации классов Епгг' и Яе)аггел зпгр, заменив их ассоциациями с подклассами Ела и Ее!аггопзгггр. Это пример преобразования диаграммы классов.
Напишите псевдокод операции Ггасе1пггептапсеРаггг для новой диаграммы классов. 15.15. (7) В соответствии с рис. У15А напишите алгоритм операции, которая будет генерировать имя для безымянной ассоциации. На вход операции поступает экземпляр ассоциации (Аягосгаггоп). Операция должна возвратить глобально уникальное имя ге!аггопзгггрМате. Если у ассоциации уже есть имя, операция должна возвратить именно его. В противном случае имя генерируется в соответствии со стратегией, которую вы должны придумать самостоятельно. Какую именно стратегию вы выберете, не так уж важно, но имена обязательно должны быть уникальными, причем по имени вы должны иметь возможность определить, к какой ассоциации оно относится.
Вы можете предположить, что все ассоциации являются бинарными. Можете предположить также, что аналогичная операция для класса Ела уже есть: она возврашает имя полюса епгавате, уникальное в контексте данного отношения. Если имя, которое вы формируете, конфликтует с уже имеющимися, измените его таким образом, чтобы оно стало уникальным.
Если вы хотите Упражнения 355 изменить диаграмму или использовать дополнительные структуры данных, можете это сделать, но не забудьте описать все добавленные элементы. (7) Усовершенствуйте диаграмму классов (рис. У15.5), трансформировав ее путем добавления класса Ро)к(са)Ратту (ПолитическаяПартия). Свяжите классы )гогег (Избиратель) и Ройг(са!Ратту (ПолитическаяПартия) ассоциацией. Обьясните, почему это преобразование улучшает модель.
(7) Иногда авиакомпании выпускают на рейсы с недостаточным количеством пассажиров самолеты с меньшим числом мест. Напишите алгоритм перераспределения мест, причем такой, чтобы места с небольшими номерами рядов не переназначались. Предполагается, что количество кресел в ряду в обеих моделях самолетов одинаковое. (8) Необходимость создания эффективной реализации вынуждает добавлять в модель классы, не содержащиеся в исходной постановке задачи. Например, двухмерная система автоматизированного проектирования может использовать специализированные структуры для определения попадания точек внутрь прямоугольного окна, заданного пользователем.
Один из методов решения задачи заключается в хранении совокупности точек, отсортированных сначала по х, а затем по у. При этом точки, попадающие в прямоугольное окно, можно выделить, не проверяя координаты всех. Постройте диаграмму классов, описывающую совокупность точек, упорядоченных по х и по у. Напишите псевдокод для операций зеагсл (поиск), атЫ (добавление), тге!еге (удаление). В качестве аргументов операция зеагсл принимает описание прямоугольной области и собственно совокупность точек. Операция возвращает множество всех точек входной совокупности, попадающих внутрь прямоугольной области.
Операции агЫ и к(е!еге принимают в качестве аргументов точку и совокупность точек (при этом точка добавляется в совокупность или удаляется из нее). 15.16. 15.17. 15.18. %:Я (Примечание: имеется в виду конкретный избиратель) з ирвтель (Перечислены только некоторые политические партии) 15.19. 15.20. (8) Определите, по какому закону время поиска в предыдущем упражне- нии зависит от количества точек в совокупности. Перечислите все сделан- ные предположения.
(3) При выборе алгоритма важно оценить его требования к ресурсам. Каким образом время выполнения перечисленных ниже алгоритмов зависит от указанных параметров? 1) Алгоритм из упражнения 15.13, глубина иерархии наследования. 2) Алгоритм из упражнения 15.17, количество пассажиров. Рис. У1$.5. Диаграмма классов, описывающая членство избирателей в политических партиях Резюме процесса разработки Процесс разработки лежит в основе организованного производства программно- го обеспечения (рис.
16.1). Мы считаем, что этот процесс должен задействовать объектно-ориентированные концепции и систему обозначений УМ1.. Пользователи Разработчики Менеджеры Бизнес-эксперт Концептуализация системы Интервью с пользователя Опыт Родственные системы Анализ: Анализ предметной области Анализ приложения Архитектура Варианты пользования Алтритмы Оптимизация Рис. 16.1.
Обзор процесса разработки Проектирование: Проектирование системы Проектирование классов Обратите внимание: разработчику не приходится переходить от одной модели к другой, потому что объектно-ориентированная парадигма охватывает этапы анализа, проектирования и реализации. Эта парадигма одинаково хорошо подходит для описания реального мира и компьютерной реализации. Мы описываем процесс разработки как последовательность этапов, но на практике объектно-ориентированная разработка представляет собой итерационный процесс. Когда модель кажется завершенной на одном уровне абстракций, вы должны рассмотреть следующий, более низкий уровень.
На каждом уровне вам придется добавлять новые операции, атрибуты и классы. Возможно, вам 16.2. Анализ 357 даже придется пересмотреть отношения между объектами (и даже внести изменения в иерархию наследования). Подробнее об итерационной разработке рассказывается в главе 2В 16.1. Концептуализация системы Концептуализация системы — это рождение приложения. Человеку, который разбирается и в технологии, и в потребностях бизнеса, приходит в голову идея приложения. Цель этапа концептуализации — охватить всю картину целиком: зачем нужна система, можно ли ее разработать за разумную цену, покроет ли спрос на систему затратгя на ее создание. До этапа концептуализации у вас есть идея нового приложения. После него — постановка задачи, которая является отправной точкой для анализа.
162. Анализ Анализ — это разработка моделей, позволяющих лучше понять требования к системе. Цель анализа — описать, что именно нужно сделать, а не то, каким образом это следует сделать. Вы должны понять проблему прежде, чем начнете решать ее. Важно учесть все доступные источники информации, включая описание задачи, интервью с пользователями, предыдущий опыт и артефакты из родственных систем.
На выходе этапа анализа получается набор моделей, детально и полностью описывающих систему. Анализ делится на два этапа: анализ предметной области и анализ приложения. 16.2.1. Анализ предметной области Анализ предметной области охватывает общие знания о приложении: понятия и отношения между ними, известные экспертам в данной области. Цель состоит в том, чтобы выработать точную, четкую, понятную и корректную модель реального мира.
В результате анализа предметной области обычно формируется модель классов и, в некоторых случаях, модели состояний. Реже подготавливаются модели взаимодействия. Самое важное в построении модели предметной области — решить, какую именно информацию следует включить в модель (определить границы приложения) и каким образом ее представить (выбрать уровень абстрагирования). 16.2.2. Анализ приложения Анализ приложения охватывает компьютерные аспекты системы, видимые пользователям. Объекты приложения — это не просто внутренние проектные решения. Их важность обусловлена тем, что с ними будут иметь дело пользователи. Классы приложения делятся на контроллеры, устройства и пограничные объекты.