Лекция 4 - диаграмма классов.ppt
- Количество слайдов: 25
Тема цикла: “Групповая работа над проектом”. Объектно-ориентированный анализ и проектирование. Часть 2.
Диаграмма классов. Общие сведения. Центральное место в ООАП занимает разработка логической модели системы в виде диаграммы классов. Назначение: Диаграмма классов (class diagram) служит для представления статической структуры модели системы в терминологии классов объектно-ориентированного программирования. Диаграмма классов отражает различные взаимосвязи между отдельными сущностями предметной области, а также описывает их внутреннюю структуру и типы отношений. На диаграмме классов не указывается информация о временных аспектах функционирования системы. Диаграмма классов состоит из множества элементов, которые в совокупности отражают декларативные знания о предметной области.
Диаграмма классов. Класс (class) в языке UML служит для обозначения множества объектов, которые обладают идентичной структурой, поведением и отношениями с объектами из других классов. Изображается в виде прямоугольника, который дополнительно может быть разделен горизонтальными линиями на разделы или секции. В этих разделах могут указываться имя класса, атрибуты (переменные) и операции (методы). Обязательным элементом обозначения класса является его имя. На начальных этапах разработки диаграммы отдельные классы могут обозначаться прямоугольником с указанием только имени класса. По мере проработки отдельных компонентов диаграммы, описания классов дополняются атрибутами и операциями.
Диаграмма классов. Класс. Предполагается, что окончательный вариант диаграммы содержит наиболее полное описание классов, которые состоят из трех разделов или секций. Иногда в обозначениях классов используется дополнительный четвертый раздел, в котором приводится информация справочного характера или явно указываются исключительные ситуации. Даже если секция атрибутов и операций является пустой, в обозначении класса она выделяется горизонтальной линией. Это справедливо и для секции методов.
Диаграмма классов. Имя класса должно быть уникальным в пределах пакета, который описывается некоторой совокупностью диаграмм классов (возможно, одной диаграммой). Рекомендуется в качестве имен классов использовать существительные, записанные по практическим соображениям без пробелов. Примеры имен классов: "Сотрудник", "Компания", "Руководитель", "Клиент", "Продавец", "Менеджер", "Офис" и т. д. , имеющие непосредственное отношение к моделируемой предметной области и функциональному назначению проектируемой системы. В некоторых случаях необходимо явно указать, к какому пакету относится тот или иной класс. Для этой цели используется специальный символ разделитель — двойное двоеточие ": : ". Синтаксис строки имени класса в этом случае будет следующий: <Имя_Пакета>: : <Имя_Класса>. Например: "Банк: : Счет"
Диаграмма классов. Атрибуты класса. Каждому атрибуту класса соответствует отдельная строка текста (сигнатура): <квантор видимости><имя атрибута> : <тип атрибута> = <исходное значение>{строка-свойство} Квантор видимости может принимать одно из трех возможных значений и, соответственно, отображается при помощи специальных символов: 1. Символ "+" обозначает атрибут с областью видимости типа общедоступный (public). Атрибут с этой областью видимости доступен или виден из любого другого класса пакета, в котором определена диаграмма. 2. Символ "#" обозначает атрибут с областью видимости типа защищенный (protected). Атрибут с этой областью видимости недоступен или невиден для всех классов, за исключением подклассов данного класса. 3. Символ "-" обозначает атрибут с областью видимости типа закрытый (private). Атрибут с этой областью видимости недоступен для всех классов без исключения.
Диаграмма классов. Атрибуты класса. v Имя атрибута – строка текста, которая используется в качестве идентификатора, должна быть уникальной в пределах данного класса. Имя атрибута является единственным обязательным элементом обозначения атрибута. v Тип атрибута - выражение, семантика которого определяется языком спецификации соответствующей модели. В нотации UML тип атрибута иногда определяется в зависимости от языка программирования, который предполагается использовать для реализации данной модели. v Исходное значение служит для задания некоторого начального значения для соответствующего атрибута в момент создания отдельного экземпляра класса. Необходимо придерживаться правила принадлежности значения типу конкретного атрибута. Если исходное значение не указано, то значение соответствующего атрибута не определено на момент создания нового экземпляра класса. v Строка-свойство служит для указания значений атрибута, которые не могут быть изменены в программе при работе с данным типом объектов.
Диаграмма классов. Атрибуты класса, примеры записи. v +цвет : Color = (255, 0, 0) — в RGB-модели цвета это соответствует чистому красному цвету в качестве исходного значения для данного атрибута; v -видимость : Boolean = true — может соответствовать ситуации, когда в момент создания экземпляра класса создается видимое на экране монитора окно, соответствующее данному объекту. v форма : Многоугольник = прямоугольник — речь идет о геометрической форме создаваемого объекта. v заработная_плата : Currency = {$500} - фиксированная заработная плата для каждого объекта класса "Сотрудник" определенной должности в некоторой организации.
Диаграмма классов. Операции класса. Каждой операции класса соответствует отдельная строка: <квантор видимости><имя операции>(список параметров) : <выражение типа возвращаемого значения>{строка-свойство} Квантор видимости может принимать одно из трех возможных значений, как и в случае атрибутов класса. v "+" - операция с областью видимости типа общедоступный (public). v "#" - операция с областью видимости типа защищенный (protected). v "-" - операция с областью видимости типа закрытый (private). Список параметров является перечнем разделенных запятой формальных параметров, каждый из которых может быть представлен в следующем виде: <имя параметра> : <выражение типа> = <значение параметра по умолчанию>. Строка-свойство служит для указания значений свойств, которые могут быть применены к данному элементу.
Диаграмма классов. Операции класса. Примеры. 1. +создать() —абстрактная операция по созданию отдельного объекта класса, которая является общедоступной и не содержит формальных параметров. Не возвращает никакого значения после своего выполнения. 2. +нарисовать(форма : Многоугольник = прямоугольник, цвет_заливки : Color = (0, 0, 255)) —операция, отображающая на экране монитора прямоугольную область синего цвета. 3. запросить_счет_клиента(номер_счета : Integer) : Currency —операция по установлению наличия средств на текущем счете клиента банка. Аргументом данной операции является номер счета клиента, который записывается в виде целого числа (например, "123456"). Результатом выполнения этой операции является некоторое число, записанное в принятом денежном формате (например, $1 500. 00).
Диаграмма классов. Отношение ассоциации может трактоваться как знание элементов, которые оно связывает друг о друге. Наиболее простой случай ассоциации — бинарная ассоциация. Для бинарной ассоциации на диаграмме может быть указан порядок следования классов с использованием треугольника в форме стрелки рядом с именем данной ассоциации. Классы связаны ассоциацией Работа, имя которой указано на рисунке. Для данного отношения определен порядок следования классов, первым из которых является класс "Сотрудник", а вторым — класс "Компания". Отдельным примером или экземпляром данного отношения может являться пара значений (Петров И. И. , "Сиеста-металл").
Диаграмма классов. XOR-ассоциация. Частным случаем отношения ассоциации является так называемая исключающая ассоциация (Xor-association). Семантика данной ассоциации указывает на тот факт, что из нескольких потенциально возможных вариантов данной ассоциации в каждый момент времени может использоваться только один ее экземпляр. На диаграмме классов исключающая ассоциация изображается пунктирной линией, соединяющей две и более ассоциации, рядом с которой записывается строкаограничение "{Xor}". Счет в банке может быть открыт для клиента, в качестве которого может выступать физическое или юридическое лицо, что изображается с помощью исключающей ассоциации
Диаграмма классов. Ассоциация. С точки зрения кодогенерации наличие на диаграмме отношения ассоциации указывает на возможность одного класса узнавать об общих атрибутах и операциях другого класса. Ниже показана двунаправленная ассоциация между классами Дом и Жилец. Класс Жилец знает об общих атрибутах и операциях Дома, а Дом - об общих атрибутах и операциях Жильца. Таким образом, на диаграммах последовательности Дом может посылать сообщения Жильцу, и наоборот.
Диаграмма классов. Ассоциация. Ассоциации можно сделать и однонаправленными. Такими отношениями легче управлять, и проще обнаружить классы, допускающие повторное использование. Жилец знает об общих атрибутах и операциях Дома, но Дом не знает об атрибутах и операциях Жильца. Сообщения на диаграммах последовательности и кооперации могут отправляться Жильцом и приниматься Домом, но не наоборот. Однонаправленные отношения позволяют выявить классы, являющиеся кандидатами на повторное использование. Если ассоциация двунаправленная, каждый класс-участник должен знать о другом, и ни один из них не может применяться без другого. Класс с большим количеством исходящих однонаправленных связей повторно использовать трудно, а класс, все связи которого входящие - чрезвычайно легко.
Диаграмма классов. Ассоциация. В случае однонаправленной ассоциации атрибут Дом будет помещен внутри Жильца, но не наоборот. Программный код для класса Жилец: public class Person { public House m_House; public Person() {} } Программный код для класса Дом: public class House { public House() {} }
Диаграмма классов. Ассоциация. Для отношения "один к одному" Rational Rose создает атрибуты, необходимые для поддержки ассоциации: в одном классе должен содержаться набор элементов другого класса. Программный код для Class_A: public class Class_A { public Class_B the. Class_B[]; public Class_A() {} } Программный код для Class_B: public class Class_B { public Class_A the. Class_A; public Class_B() {} }
Диаграмма классов. Агрегация. Отношение агрегации имеет место между несколькими классами в том случае, если один из классов представляет собой некоторую сущность, включающую в себя в качестве составных частей другие сущности. Данное отношение имеет фундаментальное значение для описания структуры сложных систем, поскольку применяется для представления системных взаимосвязей типа "часть-целое". Раскрывая внутреннюю структуру системы, отношение агрегации показывает, из каких компонентов состоит система и как они связаны между собой.
Диаграмма классов. Агрегация. Используя обозначения языка UML, компонентный состав ПК можно представить в виде соответствующей диаграммы классов, которая в данном случае иллюстрирует отношение агрегации
Диаграмма классов. Композиция. Отношение композиции является частным случаем отношения агрегации. Это отношение служит для выделения специальной формы отношения "часть-целое", при которой составляющие части в некотором смысле находятся внутри целого. Специфика взаимосвязи между ними заключается в том, что части не могут выступать в отрыве от целого, т. е. с уничтожением целого уничтожаются и все его составные части.
Диаграмма классов. Композиция. В качестве дополнительных обозначений для отношений композиции и агрегации могут использоваться те же дополнительные обозначения, что для отношения ассоциации. А именно: указание кратности связанных классов и имени отношения, которые не являются обязательными.
Диаграмма классов. Обобщение. Отношение обобщения является обычным таксономическим отношением между более общим элементом (родителем или предком) и более частным или специальным элементом (дочерним или потомком). Данное отношение может использоваться для представления взаимосвязей между пакетами, классами, прецедентами и другими элементами языка UML.
Диаграмма классов. Обобщение. Как правило, на диаграмме может указываться несколько линий для одного отношения обобщения, что отражает его таксономический характер. В этом случае более общий класс разбивается на подклассы одним отношением обобщения.
Диаграмма классов. Зависимость. Отношение зависимости в общем случае указывает некоторое семантическое отношение между двумя элементами модели или двумя множествами таких элементов, которое не является отношением ассоциации, обобщения или реализации. Отношение зависимости используется в такой ситуации, когда некоторое изменение одного элемента модели может потребовать изменения другого зависимого от него элемента модели. В качестве класса-клиента и класса-источника зависимости могут выступать целые множества элементов модели. В этом случае одна линия со стрелкой, выходящая от источника зависимости, расщепляется в некоторой точке на несколько линий, каждая из которых имеет отдельную стрелку для класса-клиента.
Диаграмма классов. Зависимость. При генерации кода для классов, между которыми установлено отношение зависимости, Rational Rose не добавляет к ним никаких новых атрибутов. Если между классами Жилец и Дом существует отношение зависимости, при генерации кода для этих классов к ним не добавляются новые атрибуты, но создаются специфические для языка операторы, необходимые для поддержки связи.
Диаграмма классов. Зависимость. Класс Жилец должен узнавать о Доме одним из трех способов. Во-первых, класс Дом можно сделать глобальным, и тогда Жилец будет знать о его существовании. Во-вторых, Дом можно инстанцировать как локальную переменную внутри операции класса Жилец. В-третьих, Дом можно передавать операциям класса Жилец в качестве параметра. При наличии на диаграмме отношения зависимости необходимо следовать одному из трех указанных подходов. Отличие отношения зависимости от отношения ассоциации состоит в том, что ассоциации могут быть двунаправленными, но зависимости всегда однонаправленные. Кроме того, зависимости часто используются для описания отношений между пакетами.
Лекция 4 - диаграмма классов.ppt