- •Список рисунков
- •Список таблиц
- •Предисловие
- •Лекция 1. Проблемы разработки сложных программных систем
- •Программы «большие» и «маленькие»
- •Принципы работы со сложными системами
- •Литература к Лекции 1
- •Лекция 2. Жизненный цикл и процессы разработки ПО
- •Понятие жизненного цикла ПО
- •Стандарты жизненного цикла
- •Группа стандартов ISO
- •Группа стандартов IEEE
- •Группа стандартов CMM, разработанных SEI
- •Модели жизненного цикла
- •Литература к Лекции 2
- •«Тяжелые» и «легкие» процессы разработки
- •Унифицированный процесс Rational
- •Экстремальное программирование
- •Литература к Лекции 3
- •Лекция 4. Анализ предметной области и требования к ПО
- •Анализ предметной области
- •Выделение и анализ требований
- •Варианты использования
- •Литература к Лекции 4
- •Лекция 5. Качество ПО и методы его контроля
- •Качество программного обеспечения
- •Методы контроля качества
- •Тестирование
- •Проверка на моделях
- •Ошибки в программах
- •Литература к Лекции 5
- •Лекция 6. Архитектура программного обеспечения
- •Анализ области решений
- •Архитектура программного обеспечения
- •Разработка и оценка архитектуры на основе сценариев
- •UML. Виды диаграмм UML
- •Статические диаграммы
- •Динамические диаграммы
- •Литература к Лекции 6
- •Лекция 7. Образцы проектирования
- •Образцы человеческой деятельности
- •Образцы анализа
- •Архитектурные стили
- •Каналы и фильтры
- •Многоуровневая система
- •Литература к Лекции 7
- •Лекция 8. Образцы проектирования (продолжение)
- •Данные–представление–обработка
- •Образцы проектирования
- •Подписчик
- •Идиомы
- •Шаблонный метод
- •Образцы организации и образцы процессов
- •Инспекция программ по Фагану
- •Литература к Лекции 8
- •Удобство использования программного обеспечения
- •Психологические и физиологические факторы
- •Человеку свойственно ошибаться
- •Скоростные показатели деятельности человека
- •Внимание человека
- •Понятность
- •Память человека
- •Разные категории пользователей
- •Методы разработки удобного программного обеспечения
- •Контроль удобства программного обеспечения
- •Литература к Лекции 9
- •Лекция 10. Основные конструкции языков Java и C#
- •Платформы Java и .NET
- •Лексика
- •Целочисленные типы
- •Типы чисел с плавающей точкой
- •Инструкции и выражения
- •Выражения
- •Наследование
- •Шаблонные типы и операции
- •Дополнительные элементы описания операций
- •Описание метаданных
- •Средства создания многопоточных программ
- •Библиотеки
- •Основные понятия компонентных технологий
- •Общие принципы построения распределенных систем
- •Синхронное и асинхронное взаимодействие
- •Транзакции
- •Литература к Лекции 12
- •Лекция 13. Компонентные технологии разработки Web-приложений
- •Web-приложения
- •Расширяемый язык разметки XML
- •Платформа Java 2 Enterprise Edition
- •Связь
- •Именование
- •Процессы и синхронизация
- •Целостность
- •Отказоустойчивость
- •Защита
- •Работа с XML
- •Платформа .NET
- •Связь
- •Именование
- •Процессы и синхронизация
- •Целостность
- •Отказоустойчивость
- •Защита
- •Работа с XML
- •Литература к Лекции 13
- •Общая архитектура Web-приложений
- •Уровень бизнес-логики и модели данных в J2EE
- •Компоненты данных и сеансовые компоненты
- •Компоненты, управляемые сообщениями
- •Дескрипторы развертывания компонентов EJB
- •Уровень модели данных в .NET
- •Протокол HTTP
- •Уровень пользовательского интерфейса в J2EE
- •Сервлеты
- •Серверные страницы Java
- •Уровень пользовательского интерфейса в .NET
- •Литература к Лекции 14
- •Лекция 15. Развитие компонентных технологий
- •Развитие технологий J2EE
- •Jakarta Struts
- •Java Server Faces
- •Управление данными приложения. Hibernate
- •Java Data Objects
- •Enterprise Java Beans 3.0
- •Среда Spring
- •Ajax
- •Web-службы
- •Описание интерфейса Web-служб
- •Связь
- •Именование
- •Процессы
- •Синхронизация и целостность
- •Отказоустойчивость
- •Защита
- •Литература к Лекции 15
- •Лекция 16. Управление разработкой ПО
- •Задачи управления проектами
- •Окружение проекта
- •Структура организации-исполнителя проекта
- •Организационная культура
- •Заинтересованные в проекте лица
- •Виды деятельности, входящие в управление проектом
- •Управление содержанием проекта и качеством
- •Метрики ПО
- •Управление ресурсами
- •Специфика управления персоналом
- •Управление рисками
- •Управление коммуникациями и информационным обеспечением
- •Литература к Лекции 16
Описание метаданных
В обоих языках (в Java — начиная с версии 5) имеются встроенные средства для некоторого их расширения, для описания так называемых метаданных — данных, описывающих элементы кода. Это специальные модификаторы у типов, элементов типов и параметров операций, называемые в
Java аннотациями (annotations), а в C# — атрибутами (attributes). Один элемент кода может иметь несколько таких модификаторов.
Такие данные служат для указания дополнительных свойств классов, полей, операций и параметров операций. Например, можно пометить специальным образом поля класса, которые должны записываться при преобразовании объекта этого класса в поток байтов для долговременного хранения или передачи по сети. Можно пометить методы, которые должны работать только в рамках транзакций или, наоборот, только вне транзакций.
Метаданные служат встроенным механизмом расширения языка, позволяя описывать простые дополнительные свойства сущностей этого языка в нем самом, не разрабатывая каждый раз специализированные трансляторы. Обработка метаданных должна, конечно, осуществляться дополнительными инструментами, но такие инструменты могут быть достаточно просты — им не нужно реализовывать функции компилятора исходного языка.
Вобоих языках аннотации могут иметь структуру — свойства или параметры, которым можно присваивать значения. Эту структуру можно определить в описании специального аннотационного типа.
Вприведенных ниже примерах определяются несколько типов аннотаций, которые затем используются для разметки элементов кода. Класс A помечен аннотацией, имеющей указанные значения свойств, оба метода помечены простой аннотаций (указывающей, например, что такой метод должен быть обработан особым образом), кроме того, метод n() помечен еще одной аннотацией. Параметр метода n() также помечен простой аннотацией.
@interface SimpleMethodAnnotation {} |
class SimpleMethodAttribute |
||
|
|
: Attribute |
|
|
|
{} |
|
@interface SimpleParameterAnnotation{} |
class SimpleParameterAttribute |
||
|
|
: Attribute |
|
|
|
{} |
|
@interface ComplexClassAnnotation |
class ComplexClassAttribute |
||
{ |
|
: Attribute |
|
int id(); |
{ |
|
|
public int id; |
|||
String author() default |
public String author = |
||
"Victor Kuliamin"; |
"Victor Kuliamin"; |
||
String date(); |
public String date; |
||
} |
|
} |
|
@interface AdditionalMethodAnnotation |
class AdditionalMethodAttribute |
||
{ |
|
: Attribute |
|
String value() default ""; |
{ |
|
|
public String value = ""; |
|||
} |
|
} |
|
@ComplexClassAnnotation |
[ComplexClassAttribute |
||
( |
= 126453, |
( |
= 126453, |
id |
id |
||
date |
= "23.09.2005" |
date |
= "23.09.2005" |
) |
|
)] |
|
public class A |
public class A |
||
{ |
|
{ |
|
@SimpleMethodAnnotation |
[SimpleMethodAttribute] |
||
public void m() { ... } |
public void m() { ... } |
||
@SimpleMethodAnnotation |
[SimpleMethodAttribute, |
196
@AdditionalMethodAnnotation ( value = "123" )
public void n (@SimpleParameterAnnotation int k)
{ ... }
}
В Java аннотации могут помечать также пакеты (т.е. использоваться в директиве декларации пакета, к которому относится данный файл), декларации локальных переменных и константы перечислимых типов.
Аннотационный тип декларируется с модификатором @interface и неявно наследует интерфейсу
java.lang.annotation.Annotation.
Такой тип не может иметь типовых параметров или явным образом наследовать другому типу.
Свойства аннотационного типа описываются как абстрактные методы без параметров, с возможным значением по умолчанию.
При определении значений свойств аннотации через запятую перечисляются пары <имя свойства> = <значение>.
Помимо свойств, в аннотационном типе могут быть описаны константы (public static final поля) и вложенные типы, в том числе аннотационные.
Свойство аннотационного типа может иметь примитивный тип, тип String, Class, экземпляр шаблонного типа Class, перечислимый тип, аннотационный тип или быть массивом элементов одного из перечисленных типов.
AdditionalMethodAttribute (value = "123")]
public void n ([SimpleParameterAttribute] int k) { ... }
}
В C# могут быть описаны глобальные атрибуты, помечающие сборку, в рамках кода которой они встречаются. Такие атрибуты помещаются вне описаний пространств имен.
Также атрибутами могут помечаться отдельные методы доступа к свойствам, индексерам и событиям.
Атрибутный тип описывается как класс, наследующий System.Attribute или его наследнику.
Такой тип не может иметь типовых параметров.
Свойства атрибутного типа могут быть
именованными параметрами и позиционными параметрами.
Позиционные параметры определяются при помощи конструкторов атрибутного типа.
Именованные параметры определяются как доступные для чтения и записи нестатические поля и свойства атрибутного типа.
При определении значений свойств атрибута сначала через запятую перечисляются значения позиционных параметров, а затем пары <имя именованного параметра> = <значение>.
В атрибутном типе могут быть описаны такие же элементы, как и в обычном классе.
Ниже приведен пример использования позиционного параметра.
class ClassAttribute : Attribute
{
public ClassAttribute(int id)
{
this.id = id;
}
int id;
public string value;
}
[ClassAttribute(4627, value = "")] public class A { ... }
Свойство атрибутного типа может иметь один из типов bool, byte, char, double, float, int,
long, short, string, object, System.Type,
перечислимый тип или быть массивом элементов одного из таких типов.
197