tehnologia (1018792), страница 33
Текст из файла (страница 33)
7.12, б) и используя условное обозначение уточнения (рис.7.12, в).Диаграммы классов позволяют также отобразить ограничения, которые невозможнопоказать, используя только понятия, рассмотренные выше (ассоциации, обобщения,атрибуты, операции). Например, показать, что средний198балл студентов должен определяться по соответствующей формуле. Подобную информациюна диаграмме классов можно представить в виде записи на естественном языке или в видематематической формулы, поместив их в фигурные скобки.Особое место в процессе проектирования классов занимает проектированиеинтерфейсов.Интерфейсы.
Интерфейсом в UML называют класс, содержащий только объявлениеопераций. Отдельное описание интерфейсов улучшает технологические качествапроектируемого программного обеспечения. Интерфейсы широко применяют при разработкесетевого программного обеспечения, которое должно идентично функционировать вгетерогенных средах, а также для организации взаимодействия с системами управлениябазами данных и т. п., так как механизм полиморфного наследования позволяет создаватьразличные реализации одного и того же интерфейса.С точки зрения теории объектно-ориентированного программирования интерфейспредставляет собой особый вид абстрактного класса, отличающийся тем, что он не содержитметодов, реализующих указанные операции, и объявлений полей.
Другими словами,абстрактные классы позволяют определить реализацию некоторых методов, а интерфейсытребуют отложить определение всех методов.На диаграмме классов интерфейс можно показать двумя способами: с помощьюспециального условного обозначения (рис. 7.13, а) или, объявив для класса стереотип«interface» (рис. 7.13, б).Реализацию интерфейса также можно показать двумя способами: сокращенно (рис.7.14, а) или, используя отношение реализации (рис. 7.14, б).199Дляостальныхклассов,ассоциированных с интерфейсом, следуетуточнить ассоциацию, показавотношениезависимости.Этоотношение в данном случае означает, чтокласс использует указанный интерфейс(рис.
7.15), т. е. обращается к описанным винтерфейсе функциям.Одновременносуточнениемотношений классов в пакете следует продумать и отношения классов, включенных вразличные пакеты, между собой.Пример 7.5. Уточнить отношения классов пакета Объекты задачи между собой и склассом Решение из пакета Объекты управления, используя результаты детализацииотношений между объектами рассматриваемых классов.Анализ диаграммы кооперации, представленной на рис.
7.10, показывает, что:• класс Задание по сути дела представляет собой таблицу, в которой фиксируется всяинформация о конкретной задаче: вид задачи, алгоритм решения, данные и результат,причем результат связан с заданием неразрывно, так как теряет смысл вне контекста задания(отношение композиции), а данные имеют смысл сами по себе (отношение агрегации);• класс Алгоритм целесообразно разрабатывать как абстрактный; этот класс будетописывать интерфейс между объектом класса Решение и конкретным алгоритмом, а такжемежду объектом класса Задание и опять же конкретным алгоритмом;• отношение между классами Задание и Алгоритм, Решение и Алгоритм, а такжеЗадание и Решение - ассоциации, направленные к классу Задание (рис.
7.16).Кроме того, анализ структур исходных данных и результатов решаемых задачпоказывает их существенное различие, следовательно, классы Данные и Результаты такженеобходимо реализовать как абстрактные и наследовать от них классы, уточняющиеструктуры данных и результатов для каждого случая. При дальнейшем анализе следуетвыяснить, будут ли классы Данные и Результаты описывать какие-либо поля или они толькоопределят интерфейсы, через которые будет осуществляться доступ к данным и результатамконкретных заданий.На диаграмме классов целесообразно также указать множественность» объектов.Поскольку каждый раз решается одна задача с единственными данными, используяконкретный алгоритм, и в результате получают единствен-200ное решение, все перечисленные выше ассоциации связывают объекты «один к одному».7.4.
Проектирование классовСобственно проектирование классов предполагает окончательноё определениеструктуры и поведения его объектов. Структура объектов определяется совокупностьюатрибутов и операций класса. Каждый атрибут - это поле или совокупность полей данных,содержащихся в объекте класса.201Поведение объектов класса определяется реализуемыми обязанностями. Обязанностивыполняются посредством операций класса.Таким образом, при проектировании класса, помимо имени и максимально полногосписка атрибутов, необходимо уточнить его ответственность и операции.
Причем какатрибуты, так и операции в процессе проектирования целесообразно дополнительноспецифицировать. В зависимости от степени детализации диаграммы классов обозначениеатрибута может, помимо имени, включать: тип, описание видимости и значение поумолчанию. Для этого используют следующий формат:<признак видимости> <имя>:<тип> = <значение по умолчанию>,где признак видимости может принимать одно из трех значений: «+» - общий; «#» защищенный; «-» - скрытый.Как упоминалось выше, операциями называют основные действия, реализуемыеклассом. В отличие от методов, операции не всегда реализуются классом непосредственно.Например, операция Ввод числа может быть реализована агрегатированным интерфейснымэлементом «окно ввода».Полное описание операции на диаграмме класса в UML может выглядеть следующимобразом:<признак видимости> <имя>(<список параметров>):<тип возвращаемого значения>.Ответственностью класса называют краткое неформальное перечисление основныхфункций объектов класса.
Ответственность класса обычно определяют на начальных этапахпроектирования, когда атрибуты и операции класса еще не определены. Эту информациюотображают на диаграмме классов в специальных секциях условного изображения класса(рис. 7.17).Исходный список операций класса формируют, анализируя диаграммы деятельностей,диаграммы взаимодействия и диаграммы последовательностей действий, построенные дляразличных сценариев с участием объектов проектируемого класса. На начальных этапахпроектирования в секции операций класса обычноуказываютлишьименаосновныхопераций,определяющих наиболее общее поведение объектовсоответствующих классов.
По мере уточнения добавляютновые операции, а информацию об уже имеющихсяоперациях детализируют.Большинство атрибутов выявляется при анализепредметной области, требований технического задания иописаний потоков событий.202Кроме того, как указывалось выше, отношение ассоциации и его подвиды - агрегацияи композиция - означают наличие обмена сообщениями между объектами классов.
Дляорганизации передачи сообщений необходимо, чтобы генерирующий сообщения объектсодержал информацию о вызываемом объекте, что означает наличие у этого объектасоответствующего указателя. Причем при отношении композиции объекты-части могут бытьорганизованы как объектные поля объекта-целого.В том случае, если объекты проектируемого класса должны реализовывать сложноеповедение, для них целесообразно разрабатывать диаграммы состояний.Диаграммы состояний объекта. Под состоянием объекта применительно кдиаграмме состояний понимают ситуацию в жизненном цикле объекта, во время которой он:удовлетворяет некоторому условию, осуществляет определенную деятельность или ожидаетнекоторого события.
Изменение состояния, связанное с нарушением условия или,соответственно, завершением дёятельности или наступлением события называют переходом.Диаграммы состояний показывают состояния объекта, возможные переходы, а такжесобытия или сообщения, вызывающие каждый переход.Условные обозначения состояний приведены на рис. 7.18. Действие, указанное послеслова Вход, выполняется при входе в состояние, а действие, указанное после слова Выход при выходе из него. Деятельность связывается с нахождением в состоянии.Переход обозначается линией со стрелкой и может быть помечен меткой, состоящейиз трех частей, каждую из которых можно опустить;<Событие> [<Условие>]/<Действие>.Если событие не указано, то это означает, что переход выполняется позавершению деятельности, связанной с данным состоянием.
Если же оно указано - то при наступлении события.203Условие записывается в виде логического выражения. Переход происходит, если результат выражения - «истина». Объект не может одновременноперейти в два разных состояния, поэтому условия перехода для любого события должны быть взаимоисключающими.В отличие от деятельностей, действия, указанные для перехода, связывают с последним и рассматривают как мгновенные и непрерываемые.При необходимости можно определять суперсостояния (рис. 7.18, г),которые объединяют несколько состояний в одно. Этот механизм обычно используют, чтобы показать переход из нескольких состояний в одно и то жёсостояние, например, при отмене каких-либо действий.Пример 7.6. Разработать диаграмму состояний для объекта класса Решение.Диаграмму состояний объекта строим, анализируя соответствующиедиаграммы последовательности действий (см.
рис. 7.8 и 7.9). При этом необходимо уточнить, в какой момент разрешить прерывание процесса извне.Чтобы показать, что прерывание процесса возможно еще во время егоинициализации, вводим суперсостояние Процесс. При реализации следуетучесть возможность прерывания процесса до активации Алгоритма (рис. 7.19).204Результаты уточнения структуры и поведения объектов классов отразим на диаграммеклассов.Пример 7.7. Уточнить атрибуты и операции классов Решение, Задание, Алгоритм,Данные и Результаты, используя полученные в данном параграфе сведения.К л а с с З а д а н и е.
Поскольку объект класса Задание должен хранитьидентификатор задачи и тип алгоритма, то он должен иметь соответствующие поля ивключать операции Определить задачу(), Определить алгоритм(), Сообщить тип задачи(),Сообщить тип алгоритма().Кроме того, объект класса Задание отвечает за объекты классов Данные и Результаты,связанные с ним, следовательно, он должен хранить их адреса и выполнять операции:Определить данные(), Сообщить данные(), Фиксировать результаты(), Сообщитьрезультаты(),К л а с с ы Д а н н ы е и Р е з у л ь т а т ы. Данные задач и их результаты должныхраниться в базе данных, но они имеют различные структуры.