
- •Практика 8. Работа с классами
- •Практика 9. Операции над классами.
- •Практика 10. Типы классов.
- •Практика 11. Возможности классов.
- •Практика 12. Работа с атрибутами.
- •Практика 13. Работа с операциями.
- •Практика 14. Связи
- •Практика 15. Поведение объекта.
- •Практика 16. Представление компонентов.
- •Практика 17. Представление размещения.
Практика 11. Возможности классов.
Задание видимости класса
Параметр Visibility (Видимость) показывает, будет ли класс виден вне своего пакета. Вы можете указать для класса одно из трех значений:
Public (Открытый) Этот класс виден всем остальным классам системы.
(98i) Protected, Private (Защищенный, закрытый) Класс может быть виден во вложенных в него классах, "друзьям" (friends) этого класса или из самого класса.
Package or Implementation (Пакет или реализация) Класс может быть виден только из классов того же пакета.
Для установки видимости класса:
Щелкните правой кнопкой мыши на классе в браузере или диаграмме классов,.
В открывшемся меню выберите пункт Open Specification (Открыть спецификацию).
Установите параметр Export control (Контроль экспорта) в значение Public; Protected, Private или Implementation.
Задание множественности класса
Поле Cardinality (Множественность) позволяет указать, сколько у данного класса должно быть экземпляров. Например, в системе обработки информации о сотрудниках можно ожидать наличия множества экземпляров у класса Employee: Джон Доу, Билл Смит и другие. Следовательно, множественность этого класса нужно определить как п.
Множественность управляющего класса обычно равна 1.
Во время работы приложения вам скорее всего понадобится только один экземпляр менеджера безопасности.
Для задания множественности класса:
Откройте окно спецификации класса.
Перейдите на вкладку Detail (Подробно).
Укажите множественность в раскрывающемся списке или введите ее значение сами.
Задание требований к хранению класса
Строя модель, вы можете указать количество абсолютной или относительной памяти, которая, по вашему мнению, потребуется для каждого объекта класса. Для этой цели служит поле Space (Пространство) окна спецификации класса.
Это поле не применимо для утилит классов, утилит классов-наполнителей и утилит параметризованных классов.
Для указания пространства класса:
Откройте окно спецификации класса.
Перейдите на вкладку Detail.
В поле Space введите требования по хранению класса.
Задание устойчивости класса
В среде Rose на основе модели можно генерировать DDL (Data Definition Language — Язык Описания Данных). DDL определяет структуру вашей базы данных.
При генерации DDL приложение Rose ищет устойчивые (persistent) классы. Поле Persistence окна спецификации класса применяется для определения этого параметра. Он может-принимать одно из следующих значений:
Persistent (Устойчивый) Класс сохраняется и после завершения работы приложения. Иначе говоря, содержащаяся в объектах класса информация будет сохраняться в базе данных или каким-то другим способом, обеспечивающим длительное хранение.
Transient (Временный) Информация, содержащаяся в объектах класса, не будет сохраняться после завершения работы приложения.
Это поле нельзя использовать для утилит классов, утилит параметризованных классов и утилит классов-наполнителей.
Задать устойчивость класса можно следующим образом:
Откройте окно спецификации класса.
Перейдите на вкладку Detail (Подробно).
В области Persistence выберите пункт Persistent или Transient.
Задание параллелизма класса
Параллелизм (concurrency) позволяет описать, как будет вести себя класс в присутствии нескольких потоков управления. Для класса доступны четыре значения этого параметра:
Sequential (Последовательный) Это значение по умолчанию, оно показывает, что класс будет вести себя нормально (т.е. операции будут выполняться так, как ожидается) при наличии только одного потока управления, но в присутствии нескольких потоков управления поведение класса не гарантируется.
Guarded (Ограждающий) При наличии нескольких потоков управления класс будет вести себя, как ожидается, но чтобы классы различных потоков не мешали друг другу, они должны взаимодействовать друг с другом.
Active (Активный) Класс будет иметь свой собственный поток управления.
Synchronous (Синхронный) При наличии нескольких потоков управления класс будет вести себя, как ожидается. Между ним и классами других потоков не требуется какого-то специального взаимодействия, так как класс может самостоятельно обрабатывать взаимные исключения.
Для указания параллелизма класса:
Откройте окно спецификации класса.
Перейдите на вкладку Detail (Подробно).
Установите переключатель Concurrency в значение, соответствующее требуемому параллелизму.
Создание абстрактного класса
Абстрактным называется класс, который не наполняется конкретным содержанием (не инстанцируется). Иными словами, если класс А абстрактный, в памяти никогда не будет объектов типа А.
Обычно абстрактные классы применяют при работе с наследованием. В них содержатся данные и поведение, общие для нескольких других классов. Например, у нас может быть класс Животное с ат рибутами Рост, Цвет и Разновидность. От этого класса наследуют три других класса: Кошка, Собака и Птица. Каждый из них наследует свойства Рост, Цвет и Разновидность от класса Животное
Для создания абстрактного класса:
Создайте класс одним из описанных выше способов
Откройте окно спецификации класса.
Перейдите на вкладку Detail (Подробно).
Установите флажок Abstract.
Просмотр атрибутов класса
В следующей главе подробно описываются методы добавления, удаления и работы с атрибутами класса. Окно спецификации класса содержит информацию о том, какие атрибуты класса уже были созданы.
Если нужно просмотреть атрибуты класса:
Откройте окно спецификации класса.
Перейдите на вкладку Attributes (Атрибуты). Здесь перечисляются атрибуты класса с указанием их видимости, стереотипа, имени, типа данных и значения по умолчанию.
Просмотр операций класса
В следующей главе подробно рассматриваются добавление, удаление и работа с операциями класса. Информация об операциях содержится в окне спецификации класса.
Если требуется просмотреть операции класса:
Откройте окно спецификации класса
Перейдите на вкладку Operations (Операции). Здесь перечисляются все операции класса, включая их видимость, стереотип, сигнатуру и тип возвращаемого значения.
Просмотр связей класса
В главе 7 подробно рассматриваются все типы связей, которые можно добавить к классу. Рассказывается о методах задания и удаления связей, а также о вводе их подробного описания. В окне спецификации класса можно просмотреть связи, добавленные к классу.
Для просмотра связей класса:
Откройте окно спецификации класса.
Перейдите на вкладку Relations. Здесь перечисляются все связи, в которых участвует класс
Использование вложенных классов
В Rose классы можно вкладывать друг в друга. Во вложенные (nested) классы можно вкладывать другие классы, организуя столько уровней вложения, сколько необходимо.
Для создания вложенного класса:
Откройте окно спецификации родительского класса.
Перейдите на вкладку Nested (Вложенные).
Щелкните правой кнопкой мыши на белом поле этой вкладки.
В открывшемся меню выберите пункт Insert (Вставить).
Введите имя вложенного класса.
Если нужно показать вложенный класс на диаграмме Классов:
Откройте диаграмму Классов.
Выберите в меню модели пункт Query Add Classes (Запрос >► Добавить классы).
Перетащите вложенный класс из списка Classes (Классы) в список Selected Classes (Выбранные классы). Вложенный класс представлен в формате: Родительский класс :: Вложенный класс.
Щелкните мышью на ОК. Вложенный класс появится на диаграмме с именем родительского класса, заключенным в скобки.
Для удаления из модели вложенного класса:
Откройте окно спецификации родительского класса.
Перейдите на вкладку Nested (Вложенные).
Щелкните правой кнопкой мыши на имени вложенного класса, который нужно удалить.
В открывшемся меню выберите пункт Delete (Удалить). Вложенный класс будет удален со всех диаграмм Класса
Работа с пакетами
Пакеты (packages) применяются для группирования классов, обладающих некоторой общностью. На языке UML пакет изображают следующим символом:
Объединять классы можно, как угодно, однако существует несколько наиболее распространенных подходов. Во-первых, можно группировать классы по стереотипу. В таком случае получается один пакет с классами-сущностями, один с пограничными классами, один с управляющими классами и т.д. Этот подход может быть полезен с точки зрения размещения готовой системы, поскольку все находящиеся на клиентских машинах пограничные классы уже оказываются в одном пакете.
Второй подход заключается в объединении классов по их функциональности. Например, в пакете Security (Безопасность) будут содержаться все классы, отвечающие за безопасность приложения.
Другие пакеты могут называться Employee Maintenance (Работа с сотрудниками), Reporting (Подготовка отчетов) и Error Handling (Обработка ошибок). Преимущество этого метода заключается в возможности повторного использования пакетов. Если внимательно подойти к группированию классов, можно получить практически не зависящие друг от друга пакеты. Например, пакет Security можно использовать и в других приложениях.
Наконец, применяют комбинацию двух указанных подходов. Для дальнейшей организации классов разрешается вкладывать пакеты друг в друга. На высоком уровне, например, можно сгруппировать классы по функциональности, создав пакет Security. Внутри него можно создать другие пакеты, сгруппировав отвечающие за безопасность классы по функциональности или по стереотипу.
Добавление пакетов
Очередным этапом разработки модели является добавление пакетов, Пакеты классов создают в Логическом представлении браузера.
Для добавления на диаграмму Классов существующего пакета:
Перетащите пакет на диаграмму из браузера.
Поместить на диаграмму Классов новый пакет можно следующим образом:
Нажмите кнопку Package (Пакет) панели инструментов.
Щелкните мышью внутри диаграммы Классов, чтобы поместить туда пакет.
Введите его имя.