Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Uml Book (Rus).doc
Скачиваний:
15
Добавлен:
11.08.2019
Размер:
58.74 Mб
Скачать

Механизмы

Наиболее значительная проблема, возникающая при освоении такой богатой библиотеки, как у языка Java, - понять, как ее части работают совместно. Как, на­пример, вызывается функция paint в приложении Hel loWorld? Какие операции следует использовать, чтобы изменить поведение этого апплета, например заставить

его выводить строку другим цветом? Для ответа на эти и подобные вопросы необ­ходимо иметь концептуальную модель, показывающую, как эти классы совместно работают в динамике. (Вам пригодится материал главы 28, где рассматриваются образцы поведения и каркасы.)

Как можно понять из библиотеки языка Java, операция paint наследуется от класса Component. Но все еще остается открытым вопрос, как происходит ее вы­зов. Ответ состоит в том, что paint вызывается в контексте нити (см. главу 22), в которой работает весь апплет, как показано на рис. 3.5.

На рисунке представлена кооперация нескольких объектов, включая один экземпляр класса HelloWorld. Другие объекты являются частью рабочей сре­ды Java и в основном остаются на заднем плане создаваемых вами апплетов. В UML экземпляры (см. главу 11) изображаются в точности как классы, но, в отличие от последних, с подчеркнутыми именами. Первые три объекта на диа­грамме являются анонимными, то есть не имеют уникального имени. Объекту HelloWorld принадлежит имя (target), известное объекту Component Peer.

Порядок событий можно моделировать с помощью диаграммы последователь­ностей (см. главу 18), представленной на рис. 3.5. Последовательность начинается с запуска объекта Thread, который вызывает операцию run объекта Toolkit. Объект Toolkit обращается затем к одной из своих собственных операций (callbackLoop), которая, в свою очередь, вызывает операцию handleExpose объекта Component Peer. Только после этого Component Peer обращается к опе­рации paint целевого объекта. ComponentPeer предполагает, что целевой объект является экземпляром класса Component, но в данном случае мы фактически имеем дело с его потомком (а именно HelloWorld), так что полиморфно вызыва­ется операция paint класса HelloWorld.

Компоненты

Программа «Здравствуй, мир!» реализована в виде апплета и поэтому не за­пускается самостоятельно, а существует как часть Web-страницы. Приложение начинает выполняться, только когда открывается содержащая его страница: за­пуск осуществляет механизм браузера, активизирующий выполнение объекта Thread этого апплета. Однако частью Web-страницы является не сам класс HelloWorld, а его двоичная форма, создаваемая компилятором Java, который преобразует исходный код в выполняемый компонент. Это позволяет взглянуть на систему совершенно с другой стороны. На всех предшествующих диаграммах мы видели логическое представление апплета, теперь же посмотрим на приложе­ние как на набор физических компонентов (см. главу 25). Такой взгляд на систе­му представляет диаграмма компонентов (см. рис. 3.6).

Каждая из показанных на этом рисунке пиктограмм соответствует элемен­ту UML в представлении системы с точки зрения реализации. Компонент hello. Java - это исходный код логического класса HelloWorld, то есть файл, которым можно манипулировать из среды разработки и с помощью инструмен­тальных средств по управлению конфигурацией системы. Исходный код преобра­зуется в двоичный файл hello.class компилятором Java, после чего может быть выполнен виртуальной машиной Java, установленной на компьютере.

Каноническая пиктограмма компонента - прямоугольник с двумя вкладками. Двоичный апплет HelloWorld. class является разновидностью этого символа, но границы прямоугольника толще, благодаря чему можно понять, что это испол­няемый компонент (аналогично активному классу). Компоненту hello. Java присвоена определенная пользователем пиктограмма, которая представляет тек­стовый файл. Аналогично и пиктограмма Web-страницы hello, html получена путем расширения нотации UML. Как видно из рисунка, в Web-страницу входит

еще один компонент, hello, jpg, также изображенный при помощи поль.юва-тельской пиктограммы, которая в данном случае содержит схематическое изобра­жение рисунка. Так как последние три компонента представлены графическими символами, определенными пользователем, их имена расположены снаружи пик­тограмм. (Механизмы расширения UML рассматриваются в главе 6.)

Примечание Отношения между классом (HelloWorld,), его исходным текстом (hello.Java,) и объектным кодом (HelloWorld.class,) редко моделируются явным образом, хотя иногда это и бывает полезно для визуализации физической конфигурации системы. С другой стороны, организацию Web-систем, подобных вышеприведенной, часто визуализируют с помощью диаграмм компонентов, с целью моделирования страниц и других исполняемых компонентов.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]