UML: задачи и структура; диаграммы
Выбери формат для чтения
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
План лекции
n
n
UML: задачи и структура
Краткое описание видов диаграмм:
l
l
l
l
l
l
l
l
l
Диаграммы прецедентов
Диаграммы классов
Диаграммы объектов
Диаграммы компонентов
Диаграммы развертывания
Диаграммы последовательности
Диаграммы кооперации
Диаграммы состояний
Диаграммы деятельности
1
Метод моделирования
n
Язык моделирования
Нотация, используемая методами для
описания проектов
n
Процесс
Рекомендация относительно этапов,
которые необходимо выполнить при
разработке проекта
2
UML
UML (Unified Modeling Language) –
унифицированный язык моделирования
n
n
n
n
1995
Unified Method (v0.8)
1997
UML 1.0 (Буч, Рамбо, Джекобсон)
UML 1.1 (OMG)
2005
UML 2.0
2010
UML 2.3
3
Состав UML
n
Нотация
Совокупность графических элементов,
обычно используемых в моделях;
является синтаксисом языка
моделирования
n
Метамодель
Диаграммы, определяющие нотацию
4
Области применения
n
Общение между разработчиками
n
Объектно-ориентированный подход
n
Общение с экспертами предметной
области
Передача информации в графическом виде на
различных уровнях разработки
Работа с ОО-приемами в графичекой форме
Описание вариантов использования
(концептуальный подход)
5
Процесс разработки
Начало
Исследование
Построение
1
2
3
Внедрение
...
n
Все фазы могут быть итеративными
n
UML может быть использован в любой фазе
6
Модель в UML
n
Элементы модели
l
l
l
n
Сущности
Структурные, Поведенческие, Группировки,
Примечания
Отношения
Зависимость, Ассоциация, Обобщение
Диаграммы
Модель определяется с помощью диаграмм, но
сущности и отношения существуют вне
диаграмм
7
Аналитическая модель
n
Определение круга лиц и систем,
заинтересованных и участвующих в
работе системы
n
Определение их типичных задач и
потребностей
Диаграммы прецедентов
n
Выделение бизнес-объектов и выяснения
связей между ними
Диаграммы классов
8
Виды диаграмм
Диаграммы
прецедентов
Элементы
модели
9
Прецедент
n
Прецедент (вариант использования, use
case) – это модель поведения системы
n
Представляет собой последовательность
действий системы и пользователя,
направленных на осуществление бизнесоперации
n
Может включать в себя несколько
сценариев
10
Документирование прецедентов
n
Описывается бизнес-процесс прецедента:
кто и как выполняет действия
n
UML не регламентирует способ описания
прецедента
n
Но обычно это документ, описывающий
прецедент в виде последовательности
действий с альтернативами
11
Диаграмма прецедентов
n
Диаграмма прецедентов (диаграмма
вариантов использования, use case
diagram)
n
Не описывает прецеденты как таковые
n
Но описывает их взаимоотношения и
участников
12
Элементы диаграммы
прецедентов
n
Действующие лица
(actors)
Кто-либо,
осуществляющий
взаимодействие с
системой
Шеф-повар
Поставщик
Приготовление второго
Покупка мяса
n
Прецеденты
n
Отношения между
прецедентами
«extends»
«uses»
Приготовление мяса
13
Пример диаграммы прецедентов
Осуществление сделки
Отдел продаж
Клиент
«uses»
Изучение спроса
Отдел маркетинга
14
Виды диаграмм
Диаграммы
прецедентов
Диаграммы
классов
Элементы
модели
15
Диаграмма классов
n
Диаграмма классов (class diagram)
n
Описывает типы объектов системы и
различного рода существующие между
ними статические отношения
n
Статические отношения: ассоциации и
подтипы
n
Также отображаются атрибуты и операции
классов и ограничения, накладываемые на
связи между объектами
16
Подходы к использованию
n
Концептуальная точка зрения
Представление понятий предметной
области
n
Точка зрения спецификации
Программная система на уровне
интерфейсов
n
Точка зрения реализации
Программная система на уровне
реализации
17
Пример диаграммы классов
Заказ
-датаПолучения
-оплачен
-номер : Строка
-цена : Деньги
+отправить()
+закрыть()
1
*
класс
Клиент
-имя
атрибуты
-адрес
+рейтингКредита() : Строка операции
ассоциация
*
1
кратность: обязательная
обобщение
ограничение
{Если Заказ.клиент.рейтингКредита
== "низкий", то значение Заказ.оплачен
должно быть истинным}
-Позиции заказа
Строка заказа
-количество : Целое
-цена : Деньги
-удовлетворен : Булев
Корпоративный клиент
-контактноеИмя
-рейтингКредита
-лимитКредита
+напомнить()
+счетЗаМесяц()
{рейтингКредита() == "низкий"}
кратность: *
многозначная
Товар
*
Индивидуальный клиент
-номер кредитной карточки
имя роли
-Отчет о продажах
1
Сотрудник
0..1
кратность: необязательная
18
Класс
n
n
n
Элемент описывает
тип объекта
Описание состоит из
трех частей:
l
Имя класса
l
Список атрибутов
l
Список операций
Заказ
-датаПолучения
-оплачен
-номер : Строка
-цена : Деньги
+отправить()
+закрыть()
Атрибуты и операции
необязательны
19
Видимость элементов
n
Модификаторы
видимости
+ общедоступная
(public)
# защищенная
(protected)
– закрытая
(private)
Class
+publicAttr
#protectedAttr
-privateAttr
+publicOp()
#protectedOp()
-privateOp()
20
Атрибуты
n
Формат записи
<видимость> <имя>: <тип>= <значение по
умолчанию>
Могут быть необязательными
n Единственное направление навигации
n Тип скорее обладает значением, чем
семантикой ссылки
n
21
Операции
n
Представляют собой процессы,
реализуемые классом
n
Формат записи
<видимость><имя>(<список параметров>):
<выражение-возвращающее-значениетипа> {<строка свойств>}
n
Список параметров
<направление> <имя> : <тип> = <значение
по умолчанию>
22
Ассоциации
n
Концы ассоциации
n
Имена ролей
n
Кратность
1, 1..3, 3..*, *, 0..1
n
Направление
ассоциации
(навигация)
n
Агрегация и
композиция
Class1
Class3
1
-Role one
0..1
-Role one
*
-Role two
1..*
-Role two
Class2
Class4
23
Обобщение
n
Обозначает подтипы
(во всех смыслах)
n
Позволяет
использование
принципа замещения
n
Различается с точки
зрения спецификации
и реализации
Class1
Class2
24
Ограничения
n
n
n
Не все ограничения описываются средствами
атрибута, ассоциации и обобщения
Ограничения записываются в фигурных скобках
Допускаются:
l
l
l
естественный язык
язык объектных ограничений (OCL)
утверждения на языке программирования
{Здесь записывается текст ограничения}
25
Стереотипы
n
Стереотипы являются механизмом
расширения ядра языка UML
n
Обычно записываются с помощью текста,
заключенного в кавычки
n
Профиль – часть языка UML, расширяет
его с помощью стереотипов,
предназначенных для специальных целей
26
Интерфейсы и абстрактные
классы
n
n
Курсив
Ограничение
(стереотип)
InputStream
FileInputStream
+read() : int
+read() : int
Editor
InputStream
зависимость
«interface»
DataInput
+readInt() : int
обобщение
SomeReader
DataInputStream
реализация
n
Специальный вид
SomeReader
зависимость
интерфейс
DataInput
DataInputStream
InputStream
27
Операции и атрибуты в
контексте класса
Контекст класса
Контекст класса
n
Class
-objectAttr
-classAttr
+objectOp()
+classOp()
Контекст экземпляра
Контекст экземпляра
В Java реализуется статическими полями и
методами
28
Применение диаграмм классов
+ Являются основой почти всех объектноориентированных методов
– Весьма богатая нотация
n
Выбор точки зрения модели должен
соответствовать конкретному этапу
работы над проектом
n
Следует концентрироваться на главных
аспектах
29
Виды диаграмм
Диаграммы
прецедентов
Элементы
модели
Диаграммы
классов
Диаграммы
объектов
30
Диаграмма объектов
n
Диаграмма объектов
(object diagram)
v1 : LinkedListVector
itemCount : int = 3
head
n
Мгновенный снимок
объектов системы с
точки зрения времени
head : ListItem
value : double = NaN
prev
next
next
prev
: ListItem
value : double = 11
n
Могут быть указаны
значения атрибутов и
связей
: ListItem
value : double = 33
next
prev
next
prev
: ListItem
value : double = 22
31
Виды диаграмм
Диаграммы
прецедентов
Элементы
модели
Диаграммы
классов
Диаграммы
объектов
Диаграммы
компонентов
32
Диаграмма компонентов
n
n
Диаграмма компонентов
(component diagram)
Показывает различные
компоненты системы и
зависимости между ними
n
Компонент представляет собой
физический модуль
программного кода
n
Зависимости между
компонентами показывают, как
изменения одного компонента
могут повлиять на изменения
других компонентов
SomeClient
Vector
Vector
LinkedListVector
ArrayVector
ListItem
Array
33
Виды диаграмм
Диаграммы
прецедентов
Диаграммы
классов
Диаграммы
объектов
Элементы
модели
Диаграммы
компонентов
Диаграммы
развертывания
34
Диаграмма развертывания
n
n
n
n
Диаграмма развертывания
(deployment diagram)
Отражает физические
взаимосвязи между
программными и аппаратными
компонентами системы
Средство для представления
маршрутов перемещения
объектов и компонентов в
распределенной системе
Узел представляет собой
некоторый тип
вычислительного устройства –
в большинстве случаев
самостоятельную часть
аппаратуры
Cell Phone
DBMS Server
JavaME
DBMS
MobileClient.jar
Listener
*
*
1
1
Application Server
JavaEE Envioroment
Connection Session Bean
DBMS Thin Client
JDBC
Entity Bean
35
Виды диаграмм
Диаграммы
прецедентов
Диаграммы
классов
Диаграммы
объектов
Элементы
модели
Диаграммы
кооперации
Диаграммы
последовательности
Диаграммы
компонентов
Диаграммы
развертывания
36
Диаграммы взаимодействия
n
Представляют собой модели,
предназначенные для описания поведения
взаимодействующих групп объектов
n
Обычно описывают поведение только в
рамках одного прецедента
n
Существует два вида диаграмм
взаимодействия:
l диаграммы
последовательности
l диаграммы
кооперации
37
Диаграмма последовательности
n
n
n
n
Диаграмма последовательности (sequential diagram)
Порядок действий определяется расположением
Показывает скорее порядок действий, чем
взаимодействующие объекты
Элементы диаграммы:
l
l
l
l
l
l
l
l
l
Линия жизни
Сообщения
Активность
Условия сообщений
Итерации
Возврат
Создание
Удаление
Самовызов
38
Диаграмма последовательности
окно Ввода Заказа
Заказ
приготовиться()
сообщение
Строка Заказа
Запас Товара
объект
итерация
* приготовиться()
проверитьЗапасТовара()
[имеетЗапас] удалить()
условие
возврат
самовызов
необходимостьДоказана:=
необходимоДоказать()
[необходимостьДоказана]
новый
Повторный Заказ Товара
[имеетЗапас] новый
создание
ПозицияДоставки
удаление
39
Диаграмма кооперации
Диаграмма кооперации (collaboration
diagram)
n Временная последовательность
указывается нумерацией
n Показывает скорее группы
взаимодействующих объектов, чем
порядок действий
n Нумерация может быть вложенной
n Допускается управляющая информация
n
40
Диаграмма кооперации
2: * [для всех строк заказа]: приготовиться()
1: приготовиться()
: Окно Ввода Заказа
: Заказ
номер в последовательности
строка Макаллена : Строка
Заказа
()
ка
р
е
()
ов ить
р
п
л
:= уда
с
:
па с]
За апа
ь
т
ес тьЗ
3: : [ес
4
5: нуженПовторынйЗаказ := сделатьПовторныйЗаказ()
запас Макаллена: Элемент
Запаса
в
но
в
По
н
же
[н у
н
то р
6:
: Элемент Повторного
объект
заказа
З
ый
ый
з]:
а
к
сообщение
а
7: [естьЗапас]: новый
самоделегирование
: Элемент Поставки
41
Применение диаграмм
взаимодействия
n
Когда вы хотите описать поведение
нескольких объектов в рамках прецедента
n
Если необходимо описать один объект в
различных прецедентах?
Диаграмма состояний
n
Если необходимо описать несколько
прецедентов или несколько нитей
процесса?
Диаграмма деятельности
42
Виды диаграмм
Диаграммы
деятельности
Диаграммы
состояний
Диаграммы
прецедентов
Диаграммы
классов
Диаграммы
объектов
Элементы
модели
Диаграммы
кооперации
Диаграммы
последовательности
Диаграммы
компонентов
Диаграммы
развертывания
43
Диаграмма состояний
n
Диаграмма состояний (state diagram)
n
Описывает состояния объекта и переходы
между ними под воздействием внешних событий
n
Переходы могут сопровождаться деятельностью
n
Переходы могут иметь условия перехода
n
Состояния могут сопровождаться деятельностью
n
Два выделенных состояния: начало
(обязательно) и конец (необязательно)
44
Диаграмма состояний
[Не все позиции проверены] / получить следующую позицию
рефлексивный
переход
[Все позиции проверены &&
все позиции доступны]
Проверка
состояние
Отправка
условие
[Все позиции проверены &&
некоторые позиции
отсутствуют на складе]
переход
[все позиции доступны] / Позиция получена
/ Отправлен
/ получить первую позицию заказа
Ожидание
начало
Доставка
[некотоные позиции отсутствуют на складе] / Позиция получена
45
Диаграмма деятельности
n
Диаграмма деятельности (activity diagram)
n
Описывает выполняемую деятельность и
последовательность ее выполнения
n
Допускает выбор направления деятельности
n
Допускает одновременность выполнения
различной деятельности
n
Сходна с диаграммой состояний, если
рассматривать выполнение деятельности как
состояние системы
46
Диаграмма деятельности
начало
Поступление заказа
Заполнить Бланк Заказа
сторожевое
[срочный
условие
заказ]
разделение
деятельность
Выставить счет
[иначе]
ветвление
Срочная доставка
Обычная доставка
Получить оплату
слияние
соединение
Закрыть Заказ
окончание
47
Виды диаграмм
Диаграммы
деятельности
Диаграммы
состояний
Диаграммы
прецедентов
Диаграммы
классов
Диаграммы
объектов
Элементы
модели
Диаграммы
кооперации
Диаграммы
последовательности
Диаграммы
компонентов
Диаграммы
развертывания
48
Виды диаграмм
n
Структурные диаграммы (structure diagrams)
Описывают структуру системы и статические
отношения ее элементов
n
Диаграммы поведения (behavior diagrams)
Описывают поведение системы, то, что в ней
происходит
n
Диаграммы взаимодействия (interaction diagrams)
Описывают поведение системы на более
детальном уровне, указывая порядок
взаимодействия и потоки данных
49
Спасибо за внимание!
Дополнительные источники
n
Фаулер, М. UML. Основы. Краткое руководство по стандартному
языку объектного моделирования [Текст] / Мартин Фаулер. – М. :
Символ-плюс, 2011. – 192 с.
n
Максимчук, Р.А. UML для простых смертных [Текст] / Роберт А.
Максимчук, Эрик Дж. Нейбург. – М. : Лори, 2008. – 304 с.
n
UML Resource Page [Электронный ресурс]. – Режим доступа:
http://www.uml.org/, дата доступа: 21.10.2011.
n
UML Quick Reference [Электронный ресурс]. – Режим доступа:
http://www.holub.com/goodies/uml/, дата доступа: 21.10.2011.
n
Architecture and Design: Unified Modeling Language (UML)
[Электронный ресурс]. – Режим доступа:
http://www.cetus-links.org/oo_uml.html, дата доступа: 21.10.2011.
План лекции
n
Общие принципы
n
Document type definition
n
SAX и DOM
n
Работа с SAX и DOM в Java
n
Запись XML в Java
n
XML-сериализация в Java
1
У истоков
n
Standard Generalized Markup Language
(SGML)
l Предназначался
для описания структуры
сложных документов
l Был разработан в 1970 году
l Основные цели:
Все документы должны быть выполнены в строгом
соответствии с правилами
n Уменьшение количества документации
n
2
Наследники
n
Hypertext Markup Language (HTML)
Язык разметки гипертекста (описание
представления Web-страницы)
n
Extensible Markup Language (XML)
Язык для описания иерархических данных
(портируемое хранение данных)
http://www.w3.org/XML/
3
Отличия XML от HTML
n
XML чувствителен к регистру
n
В XML нельзя «опускать» закрывающие тэги
n
В XML часто встречаются тэги, одновременно
открывающие и закрывающие
n
В XML значения атрибутов должны быть
заключены в кавычки
n
В XML все атрибуты должны иметь значения
4
Пример XML
Helvetica 36
Times Roman 12
400 200
0
50
100
5
Структура XML-документа
n
Заголовок
n
Объявления типа документа
n
Корневой элемент
6
Структура XML-документа
n
Смешанное наполнение не рекомендуется
Helvetica
36
n
Существуют атрибуты
Helvetica
36
7
Некоторые инструкции
n
Символы
é, ™
n
Стандартные символы
< > & " '
n
Инструкции обработки
n
Комментарии
8
Правильный документ
n
Начинается с объявления
n
Содержит один уникальный корневой элемент
n
Все открытые теги закрываются
n
Учтена чувствительность к регистру
n
Теги корректно вложены друг в друга
n
Значения всех атрибутов заключены в кавычки
n
Специальные символы задаются с помощью
инструкций
9
Document Type Definition
(DTD)
n
n
n
n
Содержит правила, описывающие структуру
документа
Транслятор может автоматически проверять
документ на соответствие этим правилам
Описывает дочерние элементы и атрибуты для
каждого элемента
Включение в XML-документ
10
Регулярные выражения
Правило
Смысл
E*
E+
E?
E1|E2|…|En
E1, E2, …, En
#PCDATA
(#PCDATA|E1|…|En)*
ANY
0 или больше вхождений Е
1 или больше вхождений Е
0 или 1 вхождение Е
Одно из Е1, Е2, …, Еn
Последовательность E1, E2, …, En
Текст
Смешанное наполнение
Произвольный дочерний тэг
EMPTY
Нет дочерних тэгов
11
Примеры выражений
Описание меню
Описание шрифта
Описание главы в книге
12
Описание атрибутов: типы
Тип
CDATA
(A1|A2|…|An)
Смысл
Произвольная строка
Один из строковых атрибутов A1,
A2, …, An
NMTOKEN, NMTOKENS Одна или более строк, записанных
по правилам имен
ID
IDREF, IDREFS
Уникальный ID
Одна или более ссылка на
уникальный ID
ENTITY, ENTITIES
Ссылки на внешние сущности
13
Описание атрибутов: значения
Значение
Смысл
#REQUIRED
Атрибут обязателен
#IMPLIED
Атрибут опционален
A
Атрибут опционален, если значение не
указано, то принимается равным A
#FIXED A
Атрибут не указывается или равен A
14
Примеры выражений
15
XML Schema
n
n
n
Предназначена для того же, что и DTD
Для описания правил используется непосредственно
XML
Имеет более гибкие возможности, чем DTD
l
l
l
l
n
n
Расширяема
Более гибкие возможности
Есть понятие типа данных
Есть понятие пространства имен
Сложнее в восприятии и программировании средств, ее
обрабатывающих
www.w3.org/XML/Schema
http://www.w3schools.com/Schema/default.asp
16
Поддержка типов данных
n
Проще описывать допустимое содержимое
документа
n
Проще проверять корректность данных
n
Проще накладывать ограничения на
данные
n
Проще определять формат данных
17
XML Schema описывается на XML
n
Не требуется изучение еще одного языка
n
Вы можете использовать свой любимый
XML-редактор для работы со схемой
n
Вы можете работать со схемой
программно
n
Вы можете изменять свою схему с
помощью XSLT
18
Документ и тип DTD
Tove
Jani
Reminder
Don't forget me this weekend!
to (#PCDATA)>
from (#PCDATA)>
heading (#PCDATA)>
body (#PCDATA)>
19
XML Schema для документа
20
Указание типа документа
21
Extensible Stylesheet Language
(XSL)
n
n
n
n
n
Комплекс технологий, связанных с преобразованием
и представлением XML-документов
Обычно используется для преобразования
документов в XML, HTML, текст и PDF (XSL-FO)
XSL Transformations (XSLT) – язык, на котором
описываются правила преобразования
XPath – язык, позволяющий формулировать
используемые в процессе преобразования
выражения, использующие различные фрагменты
документа
http://www.w3.org/Style/XSL/
http://www.w3schools.com/xsl/
22
XPath
Вспомогательный язык, позволяющий
обращаться к элементам документа
n Имя элемента представляется в виде пути
/bookstore/book/title
n Обращение может происходить и к
атрибутам
n http://www.w3.org/TR/xpath
http://www.w3schools.com/Xpath/default.asp
n
23
Примеры выражений XPath
Выражение
Результат
bookstore
Все дочерние элементы для элемента
bookstore
/bookstore
Корневой элемент bookstore
bookstore/book
Все элементы book, дочерние для bookstore
//book
Все элементы book в документе
bookstore//book Все элементы book в рамках элемента
bookstore
@lang
Атрибуты lang
.
Текущий элемент
..
Родительский элемент
24
Принципы XSL
n
n
Контекстно-зависимый язык
Основные элементы – выводимый текст и
шаблоны
l
l
Текст просто выводится
Шаблоны описывают некоторые действия
n
n
n
n
Могут быть вызваны явно
Могут быть вызваны неявно, по условию совпадения шаблона
Имеются средства управления ходом
выполнения
Позволяет создавать и вызывать бибилиотеки с
помощью тега
25
Пример XSL
26
Обработка XML
Два подхода
n Simple API for XML (SAX)
Порождает события в процессе чтения
XML документа
n
Document Object Model (DOM)
Представляет XML документ в форме
древовидной структуры элементов
27
Логика SAX
Events
XML
SAX
Parser
Document
Handler
Business
Logic
Error
Handler
DTD
Handler
Entity
Resolver
SAX Parser Factory
28
Логика DOM
DOM
Tree
XML
DOM
Document
Builder
Business
Logic
Error
Handler
Entity
Resolver
Document Builder
Factory
29
Особенности SAX и DOM
SAX
DOM
Модель обработки событий
Древовидная структура данных
Последовательный доступ (поток
событий)
Произвольный доступ (структура
данных в памяти)
Используется мало памяти
(порождаются только события)
Используется много памяти
(документ загружен полностью)
Для обработки частей документа
(обработка релевантных
событий)
Для редактирования документа
(обработка данных в памяти)
Для однократной обработки
документа
Для многократной обработки
документа
30
Работа с XML в Java
n
Стандартные интерфейсы
lВ
оригинале описаны на Interface Definition
Language (OMG IDL)
l Пакет org.w3c.dom
l Пакет org.xml.sax
n
Реализующие классы
l Предоставляются
отдельно…
l JAVA API for XML Processing (JAXP)
Пакет javax.xml
31
Работа с SAX
n
Обработку документа производит транслятор,
передающий информацию зарегистрировавшимся
обработчикам событий
n
Обработчики должны реализовывать интерфейсы
l
l
l
l
l
l
l
l
l
org.xml.sax.ContentHandler
org.xml.sax.DTDHandler
org.xml.sax.EntityResolver
org.xml.sax.ErrorHandler
org.xml.sax.Locator
org.xml.sax.ext.DeclHandler
org.xml.sax.ext.EntityResolver2
org.xml.sax.ext.LexicalHandler
org.xml.sax.ext.Locator2
SAX
SAX2
32
Пакет javax.xml.parsers
n
Класс SAXParserFactory
Образец проектирования Singleton,
позволяет настроить и получить экземпляр
фабрики для производства SAXParser
n
Класс SAXParser
Непосредственно транслятор, экземпляры
получаются от фабрики
SAXParserFactory
33
Семантика документа
n
Возникающие события
l
l
l
startElement /
endElement
Открывающий и
закрывающий тэг
characters
Символы
startDocument /
endDocument
Начало и конец
документа
n
Интерфейс
ContentHandler
l
startElement()
l
endElement()
l
characters()
l
startDocument()
l
endDocument()
34
Создание обработчика событий
n
Реализация нужного интерфейса,
настройка на него используемого
транслятора
n
Использование класса
org.xml.sax.helpers.DefaultHandler или
org.xml.sax.helpers.DefaultHandler2
реализующих все интерфейсы обработки
событий (все методы имеют пустые тела)
35
Пример. Часть 1
import
import
import
import
import
import
org.xml.sax.*;
org.xml.sax.helpers.*;
org.xml.sax.SAXException;
org.xml.sax.SAXParseException;
javax.xml.parsers.*;
java.io.IOException;
public class ReaderSAX extends DefaultHandler {
private int indent = 0;
final static int INDENT = 4;
public void startDocument() throws SAXException {
printString ("Начало документа");
}
public void endDocument() throws SAXException {
printString ("Конец документа");
}
36
Пример. Часть 2
public void startElement (String uri, String localName,
String qName, Attributes attributes)
throws SAXException {
indent += INDENT;
printString ("Элемент " + qName + ":");
}
public void endElement (String uri, String localName,
String qName) throws SAXException {
printString ("Конец элемента " + qName + ".");
indent -= INDENT;
}
public void warning (SAXParseException e) throws SAXException {
System.out.println ("Предупреждение :" + e.getPublicId());
}
37
Пример. Часть 3
public void error (SAXParseException e) throws SAXException {
System.out.println ("Ошибка :" + e.getPublicId());
}
public void fatalError (SAXParseException e) throws SAXException {
System.out.println ("Фатальная ошибка :" + e.getPublicId());
}
public void characters (char[] ch, int start, int length)
throws SAXException {
indent += INDENT;
String str = new String (ch, start, length);
printString (str);
indent -= INDENT;
}
38
Пример. Часть 4
public void printString (String str) {
String ind_s;
if (indent > 0) {
char[] ind = new char[indent];
java.util.Arrays.fill(ind, ' ');
ind_s = new String (ind, 0, indent);
}
else {
ind_s = "";
}
System.out.println (ind_s + str);
}
39
Пример. Часть 5
public static void main (String[] args) {
DefaultHandler handler = new ReaderSAX();
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = null;
try {
parser = factory.newSAXParser();
parser.parse ("test.xml", handler);
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
40
Работа с DOM
n
Считывание документа, опять же,
реализует транслятор
n
Результат считывания возвращается в
виде дерева объектов, реализующих
интерфейс org.w3c.dom.Node
n
Дальнейшая обработка ведется уже на
уровне бизнес-логики
41
Пакет org.w3c.dom
n
n
Базовый интерфейс Node, содержит основные методы
работы с узлом
От него наследуют специфические интерфейсы для
конкретных видов узлов:
l
l
l
l
l
l
n
Document
Element
Text
Comment
Attr
и др.
Каждый интерфейс добавляет новую
функциональность (например Document, является
фабрикой для создания остальных узлов)
42
Пакет javax.xml.parsers
n
Класс DocumentBuilderFactory
Образец проектирования Singleton,
позволяет настроить и получить экземпляр
фабрики для производства
DocumentBuilder
n
Класс DocumentBuilder
Непосредственно транслятор, экземпляры
получаются от фабрики
DocumentBuilderFactory
43
Пример. Часть 1
import
import
import
import
org.w3c.dom.*;
org.xml.sax.SAXException;
javax.xml.parsers.*;
java.io.IOException;
public class ReaderDOM {
private int indent = 0;
final static int INDENT = 4;
private static final String[] TYPE_NAMES = {
"ELEMENT_NODE", "ATTRIBUTE_NODE", "TEXT_NODE",
"CDATA_SECTION_NODE", "ENTITY_REFERENCE_NODE",
"ENTITY_NODE", "PROCESSING_INSTRUCTION_NODE",
"COMMENT_NODE", "DOCUMENT_NODE", "DOCUMENT_TYPE_NODE",
"DOCUMENT_FRAGMENT_NODE", "NOTATION_NODE"
};
public String getTypeName (short nodeType) {
return TYPE_NAMES[nodeType - 1];
}
44
Пример. Часть 2
public static void main(String[] args) {
try {
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse("test.xml");
ReaderDOM obj = new ReaderDOM();
obj.myPrint (document);
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
}
45
Пример. Часть 3
public void myPrint (Document document) {
printDocInfo (document);
printNodeInfo (document);
}
public void printDocInfo (Document document) {
printString ("Имя узла документа : " + document.getNodeName());
}
public void printElementInfo (Element element) {
NamedNodeMap nnm = element.getAttributes();
for (int i = 0; i < nnm.getLength(); i++) {
Attr attr = (Attr)nnm.item (i);
printString ("Attribute name = " + attr.getName() +
", value = " + attr.getValue());
}
}
public void printTextInfo (Text text) {
printString ("Значение поля : " + text.getData());
}
46
Пример. Часть 4
public void printNodeInfo (Node node) {
indent += INDENT;
printString ("Node name = " + node.getNodeName() +
", node type = " + getTypeName (node.getNodeType()));
if (node instanceof Element) {
printElementInfo ((Element)node);
} else if (node instanceof Text) {
printTextInfo ((Text)node);
}
NodeList nl = node.getChildNodes();
for (int i = 0; i < nl.getLength(); i++) {
printNodeInfo (nl.item (i));
}
indent -= INDENT;
}
47
Пример. Часть 5
public void printString (String str) {
String ind_s;
if (indent > 0) {
char[] ind = new char[indent];
java.util.Arrays.fiil(ind, ' ');
ind_s = new String (ind, 0, indent);
}
else {
ind_s = "";
}
System.out.println (ind_s + str);
}
}
48
Запись XML
n Средствами
пакета
javax.xml.transform
n Средствами
API третьих фирм
JDOM (www.jdom.org)
l Тот
же DOM, но реализованный более
дружелюбно для Java
l Поддерживает XPath и XSLT
49
Пример. Часть 1
import
import
import
import
import
import
import
org.w3c.dom.*;
org.xml.sax.SAXException;
javax.xml.parsers.*;
javax.xml.transform.*;
javax.xml.transform.dom.*;
javax.xml.transform.stream.*;
java.io.IOException;
public class WriterDOM {
public static void main(String[] args) {
try {
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder = null;
builder = factory.newDocumentBuilder();
Document document = builder.parse("test.xml");
DOMSource dom_source = new DOMSource (document);
StreamResult out_stream = new StreamResult("test2.xml");
50
Пример. Часть 2
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer(/* !!!! */);
//
//
//
//
Вспомогательные действия, связанные с тем, что такая
элементарная трансформация не "копирует" директиву
!DOCTYPE. В зависимости от PUBLIC- или SYSTEM-описания DTD,
можно использовать разные свойства transformer'а
DocumentType docType = document.getDoctype();
String systemID = docType.getSystemId();
String publicID = docType.getPublicId();
String res = publicID + "\" \"" + systemID;
// transformer.setOutputProperty
// (OutputKeys.DOCTYPE_SYSTEM, systemID);
transformer.setOutputProperty (OutputKeys.DOCTYPE_PUBLIC, res);
51
Пример. Часть 3
// Прочие настройки преобразователя
t.setOutputProperty(OutputKeys.INDENT, "yes");
t.setOutputProperty(OutputKeys.METHOD, "xml");
t.setOutputProperty("{http://xml.apache.org/xslt}indent-amount”,"2");
transformer.transform (dom_source, out_stream);
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (TransformerConfigurationException e){
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
}
}
52
Настройка преобразователя
n
Метод создания объекта преобразователя
TransformerFactory.newTransformer()
имеет 2 формы:
l
l
n
без аргументов – будет создаваться «копия»
исходного документа
с аргументом типа Source – ссылка на загруженный
объект xml-документа, в котором описано XSLпреобразование
Метод Transformer.setOutputProperty()
позволяет настроить некоторые параметры
вывода (см. класс OutputKeys)
53
Размышления на тему
n
Итак, что мы научились делать:
l Считывать
n
SAX
n
DOM
информацию из XML-документов
l Записывать
информацию в XML-документы
Какой еще инструмент был бы удобен?..
n А если бы мы умели записывать и
считывать из XML непосредственно
объекты Java?..
n
54
Шаг 1. Сохранение JavaBeans
n
В версии JavaSE 1.4 для объектов
JavaBeans появились механизмы, сходные
с сериализацией
n
Реализовывали их классы
java.beans.XMLEncoder и
java.beans.XMLDecoder
n
Недостаток: механизм основан на
интроспекции, требует соблюдения правил
именования и т.д.
55
Пример. Часть 1
XMLEncoder e = new XMLEncoder(
new BufferedOutputStream(
new FileOutputStream("Test.xml")));
e.writeObject(new JButton("Hello, world"));
e.close();
57
Шаг 2. Java Architecture for XML
Binding (JAXB)
В версии JavaSE 1.5 появились новые
механизмы JAXB
n Связанные с ними классы находятся в
пакете javax.xml.bind
n Позволяют производить «сериализацию»
объектов и их структур в XML
n Классы объектов должны быть
специальным образом подготовлены
n Активно использует механизм аннотаций…
n
58
Пример. RootClass
import javax.xml.bind.annotation.*;
@XmlRootElement
public class RootClass {
private int value;
@XmlElement
private NodeClass name = new NodeClass();
public RootClass() {
value = 0;
name.setInnerValue("");
}
public NodeClass getName() { return name; }
public int getValue() { return value; }
public void setValue(int newValue) { value = newValue; }
}
59
Пример. NodeClass (1)
public class NodeClass {
private String innerValue = "";
private double rval = Math.random();
public String getInnerValue() {
return innerValue;
}
public void setInnerValue(String newInnerValue) {
innerValue = newInnerValue;
}
public void print() {
System.out.println(rval);
}
}
60
Пример. WriterJAXB
import javax.xml.bind.*;
import java.io.*;
public class WriterJAXB {
public static void main(String[] args){
try {
RootClass object1 = new RootClass();
object1.setValue(5);
object1.getName().setInnerValue("ABC");
JAXBContext jc = JAXBContext.newInstance(RootClass.class);
Marshaller m = jc.createMarshaller();
OutputStream os = new FileOutputStream("test.xml");
m.marshal(object1, os);
os.close();
}
catch (JAXBException e) {e.printStackTrace();}
catch (FileNotFoundException e) {e.printStackTrace();}
catch (IOException e) {e.printStackTrace();}
}
}
61
Содержимое файла после
выполнения (1)
ABC
5
n
Что сохранено:
l
значение name, помеченное аннотацией
n
n
l
n
значение innerValue, не помеченное аннотацией
значение rval не сохранено
значение value, не помеченное аннотацией
Сохранились элементы, являющиеся свойствами
JavaBeans
62
Пример. NodeClass (2)
import javax.xml.bind.annotation.*;
public class NodeClass {
private String innerValue = "";
@XmlElement
private double rval = Math.random();
public String getInnerValue() {
return innerValue;
}
public void setInnerValue(String newInnerValue) {
innerValue = newInnerValue;
}
public void print() {
System.out.println(rval);
}
}
63
Содержимое файла после
выполнения (2)
0.9878295088863659
ABC
5
n
Сохранились элементы, являющиеся
свойствами JavaBeans
n
Сохранились элементы, помеченные
аннотациями
64
Пакет javax.xml.bind.annotation
n
Содержит разнообразнейшие аннотации,
описывающие параметры маршалинга и
анмаршалинга
n
@XmlRootElement
Обозначает корневой элемент сохраняемой
структуры
n
@XmlElement
Обозначает поля и свойства (для JavaBeans)
n
@XmlTransient
Обозначает то, что поле не будет сохраняться
65
Пример. ReaderJAXB
import javax.xml.bind.*;
import java.io.*;
public class ReaderJAXB {
public static void main(String[] args) {
try {
JAXBContext jc = JAXBContext.newInstance(RootClass.class);
InputStream is = new FileInputStream("test.xml");
Unmarshaller um = jc.createUnmarshaller();
RootClass object2 = (RootClass) um.unmarshal(is);
System.out.println(object2.getValue());
System.out.println(object2.getName().getInnerValue());
is.close();
}
catch (JAXBException e) {e.printStackTrace();}
catch (FileNotFoundException e) {e.printStackTrace();}
catch (IOException e) {e.printStackTrace();}
}
}
66
Спасибо за внимание!
Дополнительные источники
n
n
n
n
n
n
n
Хорстманн, К.С. Java2. Библиотека профессионала. Том 2. Тонкости
программирования [Текст] / Кей Хорстманн, Гари Корнелл. – М. : Издательский дом
«Вильямс», 2010. – 816 с.
Extensible Markup Language [Электронный ресурс]. – Режим доступа:
http://www.w3.org/XML/, дата доступа: 21.10.2011.
XML Tutorial [Электронный ресурс]. – Режим доступа: http://www.w3schools.com/xml/,
дата доступа: 21.10.2011.
Язык XML – практическое введение [Электронный ресурс]. – Режим доступа:
http://www.codenet.ru/webmast/xml/, доступ: 21.10.2011.
Java API for XML Processing [Электронный ресурс]. – Режим доступа:
http://download.oracle.com/javaee/1.4/tutorial/doc/JAXPIntro.html, дата доступа:
21.10.2011.
Java Architecture for XML Binding (JAXB) [Электронный ресурс]. – Режим доступа:
http://www.oracle.com/technetwork/articles/javase/index-140168.html, дата доступа:
21.10.2011.
JAXB Reference Implementation [Электронный ресурс]. – Режим доступа:
http://jaxb.java.net/, дата доступа: 21.10.2011.
План занятия
n
Общие сведения об HTML
n
Структура документа, основные теги
n
Взаимодействие с сервером
n
Основные принципы CSS
1
Давным-давно в одной
далёкой галактике…
n
Generalized Markup Language (GML)
Charles Goldfarb, Edward Mosher ,Raymond Lorie (IBM, 1969)
l В тексте размещаются т.н. теги, которые определяют структуру текста в
терминах абзацев, заголовков, списков и т.д.
l Форматирование документа может производиться автоматически для
конкретного устройства с применением конкретного профиля
l
:h1.Chapter 1: Introduction
:p.GML supported hierarchical containers, such as
:ol
:li.Ordered lists (like this one),
:li.Unordered lists, and
:li.Definition lists
:eol.
as well as simple structures.
:p.Markup minimization (later generalized and formalized in SGML), allowed the
end-tags to be omitted for the "h1" and "p" elements.
2
SGML
n
Standard Generalized
Markup Language,
1970
l
l
n
Разметка носит
декларативный
характер
Разметка должна
регламентироваться
строгими правилами
Document Type
Definition
The SICK ROSE
O Rose thou art sick.
The invisible worm,
That flies in the night
In the howling storm:
Has found out thy bed
Of crimson joy:
And his dark secret love
Does thy life destroy.
3
HTML
n
n
HyperText Markup Language –
язык разметки для web-документов
История
l
l
l
l
l
l
l
HTML – Tim Berners-Lee, 1991
HTML 2.0 – IETF,1995 г.
HTML 3.0 – W3C, 1995 г.
HTML 3.2 – W3C, 1997 г.
HTML 4.0 – W3C, 1997 г.
HTML 4.1 – W3C, 1999 г.
HTML 5 – WHATWG, W3C???
l
l
l
l
XHTML 1.0 – W3C, 1998 г.
XHTML 1.1 – W3C, 2000 г.
XHTML 2.0 – W3C,
закрыт в 2009 г.
XHTML5 – ???
4
HTML-файлы
Заголовок
Hello HTML
Тело
Тег без наполнения src="http://www.w3.org/html/logo/img/html5-display.png" Атрибут 5 Результат 6 Теги n Открывающий тег ()
n
Закрывающий тег ( )
Есть теги, традиционно не требующие закрытия (
) l n Теги вкладываются друг в друга l n Желательно образуя древовидную структуру HTML не чувствителен к регистру тегов l Рекомендуется писать в нижнем регистре 7 Атрибуты тегов n Атрибут добавляет тегу информацию, не включая её во внутренности тега
n
Атрибуты бывают обязательными и необязательными
n
Значения атрибутов можно не заключать в кавычки
l
n
Лучше всё-таки заключать
В ряде случаев у значений атрибутов можно не указывать
единицы измерения
l
Лучше всё-таки указывать
n
Существуют атрибуты-маркеры, не требующие значения
n
Существуют атрибуты событий, обычно используются со
скриптами
8
Текст
n
Выводимый текст располагается в теле документа внутри тегов
n
Форматирование текста в документе игнорируется
l
Если он только не заключён в специальный тег, например
My CD Collection
Title | Artist |
---|---|
Hello World!
Открывающий тег This is a paragraph Текст with a line break, isn't it?
Закрывающий тегNo, it isn't. This is a paragraph
with a line break.
Тег без наполнения src="http://www.w3.org/html/logo/img/html5-display.png" Атрибут 5 Результат 6 Теги n Открывающий тег (
,
, , …)
l Лучше их всё равно явно закрывать
l Для тегов без наполнения лучше использовать
сокращённую форму (
) l n Теги вкладываются друг в друга l n Желательно образуя древовидную структуру HTML не чувствителен к регистру тегов l Рекомендуется писать в нижнем регистре 7 Атрибуты тегов n Атрибут добавляет тегу информацию, не включая её во внутренности тега
n Реальное форматирование определяется тегами n Текст формируется в блоки l l l l l l l l– абзац
– текстовый блок– текстовый блок с предварительным форматированием, …,
– заголовки
,
,
– списки
– таблицы