Здравствуй, мир!




НазваниеЗдравствуй, мир!
Дата публикации10.02.2014
Размер80.7 Kb.
ТипДокументы
uchebilka.ru > Военное дело > Документы

Здравствуй, мир!


Авторы языка Си (С) Брайан Керниган (Brian Kernighan) и Деннис Ричи (Dennis Ritchie) сказали как-то, что единственный способ выучить новый язык программирования - это писать на нем программы. Данное замечание верно и в отношении UML. Чтобы выучить этот язык, надо писать на нем модели.

Первая программа, которую обычно пишут новички, осваивая незнакомый язык, очень проста - она предполагает вывод на экран текстовой строки "Здравствуй, мир!". Это резонный подход, поскольку воплощение даже такого элементарного замысла вызывает вполне объяснимое чувство удовлетворения. Кроме того, как бы тривиальна ни была данная программа, она содержит всю инфраструктуру, необходимую для того, чтобы приложение могло работать.

Освоение UML мы начнем традиционным способом. Моделирование вывода фразы "Здравствуй, мир!" - пожалуй, простейшее применение языка, но эта простота обманчива, поскольку за ней скрыты некоторые любопытные механизмы заставляющие приложение функционировать. С помощью UML эти механизмы легко моделируются. Поняв их, вы глубже проникнете в структуру этой незамысловатой программы.
^

Ключевые абстракции


На языке Java апплет для вывода на экран Web-браузера фразы "Здравствуй мир!" не представляет собой ничего сложного:

import Java.awt.Graphics;
class HelloWorld extends Java. applet .Applet {
public void paint (Graphics g) {
g. drawstring ( "Здравствуй, мир!", 10, 10);
}
}

Первая строка кода

import .Java. awt .Graphic s;

делает класс Graphics доступным программе. Префикс java.awt определяет конкретный пакет Java, в котором содержится этот класс.

Вторая строка

class HelloWorld extends Java. applet .Applet {

определяет новый класс HelloWorldи указывает, что он является разновидностью класса Applet, находящегося в пакете java.applet.
В следующих трех строках

public void paint (Graphics g) {
g. drawstring ( "Здравствуй, мир!", 10, 10);
}

объявляется операция с именем paint, при реализации которой вызывается другая операция, называемая drawstring, ответственная за вывод фразы "Здравствуй, мир ! "в указанное место на экране. В полном соответствии с принятым в объектно- ориентированном программировании стиле drawstring- это операция над параметром с именем g, типом которого является класс Graphics.

Моделирование этого приложения на языке UML не вызывает затруднений.



UML не является языком визуального программирования, хотя его модели можно - впрочем, не обязательно - выражать на различных языках программирования, таких, например, как Java. Конструкция UML позволяет трансформировать модели в код, а код - обратно в модели. Некоторые формы лучше записывать непосредственно на языке программирования (например, математические выражения), а другие удобнее визуализировать графически с помощью UML (например, иерархии классов).



На этой диаграмме классов представлена суть приложения "Здравствуй, мир!", но многие детали опущены. Как видно из приведенного выше кода, в программе задействованы два других класса - Appletи Graphics- и каждый по-разному. Appletявляется родителем HelloWorld, а класс Graphicsнеобходим для реализации одной из его операций - paint. Эти классы и их отношения с классом HelloWorld можно изобразить в виде другой диаграммы классов.

Классы Applet и Graphics показаны в виде прямоугольных пиктограмм. Операции не представлены и на пиктограммах скрыты. Незакрашенная стрелка, направленная от класса HelloWorld к классу Applet, соответствует отношению обобщения; в данном случае это означает, что HelloWorldявляется потомком Applet. Пунктирная стрелка от класса HelloWorld к классу Graphics означает отношение зависимости, поскольку HelloWorld использует класс Graphics.

Это, однако, еще не завершение структуры, лежащей в основе класса HelloWorld. Изучив библиотеки языка Java, содержащие классы Applet и Graphics, вы обнаружите, что оба они являются частью более обширной иерархии. На рис. 3.3 показана диаграмма классов, которые расширяет и реализует класс HelloWorld.



На этом рисунке приведен характерный пример диаграммы, созданной методом обратного проектирования готовой системы. Как вы уже знаете, обратное проектирование - это построение модели системы на основе ее кода.



Из рисунка видно, что HelloWorld- всего лишь листовой узел большой иерархии классов. Он выступает в качестве потомка класса Applet, который, в свою очередь, является потомком класса Panel, и так далее вплоть до Object- родителя всех классов в языке Java. Таким образом, данная модель соответствует библиотеке Java - у каждого класса есть родитель.

Отношение между элементами ImageObserverи Componentотличается от остальных, и диаграмма классов передает это отличие. В библиотеке Java ImageObserverявляется интерфейсом. Это означает, в частности, что у него нет реализации, а потому необходимо, чтобы его реализовывали другие классы. Как видно из рисунка, интерфейсы в UML обозначаются кружочком. О том, что класс Componentреализует этот интерфейс, свидетельствует линия направленная от реализации (Component)к интерфейсу (ImageObserver).



рис. 3.3. Иерархия наследования класса HelloWorld

Итак, HelloWorldнепосредственно сотрудничает только с двумя классам ( Appletи Graphics), но они являются всего лишь малой частью огромной библиотеки предопределенных классов Java. Для облегчения работы ее интерфейсы и классы организованы в виде нескольких пакетов. Корневой пакет среды разработки Java назван, как и следовало ожидать, java. Внутри него содержится не сколько других пакетов, а внутри них - еще несколько пакетов, классы и интерфейсы. Класс Objectзаключен внутри пакета lang, так что его полное имя будет Java.lang.Object. Аналогично классы Panel, Container и Componentсодержатся в пакете awt, а класс Applet- в пакете applet. Интерфейс ImageObserverвходит в состав пакета image, который, в свою очередь, находится в пакете awt, поэтому полное имя интерфейса будет выражено в виде довольно длинной строки Java.awt.image.ImageObserver.

Разбивку на пакеты можно визуализировать с помощью диаграммы классов представленной на рис. 3.4.



Рис. 3.4. Организация в пакеты классов, участвующих в приложении HelloWorld.

Пакеты на языке UML изображают в виде папок с закладками Пакеты могут быть вложенными; существующие между ними зависимости показаны с помощью пунктирных стрелок. Например, класс HelloWorldзависит от пакета java.applet, а java.applet- от java.awt.

Механизмы


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



Рис. 3.5. Механизм изображения

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

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

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



Рис. 3.6. Компоненты

Компоненты


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

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

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

Добавить документ в свой блог или на сайт

Похожие:

Здравствуй, мир! iconПраздник "здравствуй, школа!"
Здравствуй, школа!, рисунки в круге с фрагментами из школьной жизни, плакат с учениками, бордовое полотно

Здравствуй, мир! iconУрок Знакомство с учебником. Здравствуй, школа! Е. Сама «Что значит учиться?»
Урок Знакомство с учебником. Здравствуй, школа! Е. Сама «Что значит учиться?». Пословицы и загадки об учёбе. Слова приветствия 7

Здравствуй, мир! iconКристофер Прист Опрокинутый мир «Опрокинутый мир: нф роман /Пер с...
«Опрокинутый мир» (1974), самый знаменитый роман Приста фантаста, действие которого происходит в загадочном городе на колесах, блуждающем...

Здравствуй, мир! iconТолько "здравствуй" и "спасибо"

Здравствуй, мир! iconОт редактора Здравствуйте, дорогие друзья!
Это мир счастья, гармонии и любви. Мир, в котором мы можем найти ответы на все мучающие нас вопросы. Мир, в котором все мы можем...

Здравствуй, мир! iconФрансуаза Саган «Здравствуй, грусть»

Здравствуй, мир! iconМир как достоверность содержание
Каждый, кто сколько-нибудь успевает в этом, получает не более чем свой собственный – личный и неоспоримый мир. Но ведь и такой мир...

Здравствуй, мир! iconСеверная керала
У входа в отель есть надпись: "Оставь внешний мир здесь". Клиенты облачаются в специальную одинаковую одежду, получают специальную...

Здравствуй, мир! iconБолезнь и Я. Опыт медицинского справочника для всех. Выпуск Пермь: риц "Здравствуй", 1996
Болезнь и Я. Опыт медицинского справочника для всех. Выпуск – Пермь: риц "Здравствуй", 1996

Здравствуй, мир! iconЗдравствуй, Новый год!
Ведущий. Ребята! К нам на праздник пожаловала Метелица — повелительница всех снежинок

Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
uchebilka.ru
Главная страница


<