Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
sitmetheng_nov09 (1).doc
Скачиваний:
17
Добавлен:
29.03.2016
Размер:
847.36 Кб
Скачать

Применение Clabjects и Powertype

Разработчики систем не работают непосредственно с метамоделями. В своей деятельности они используют методы, которые обеспечивают руководства по выполнению конкретных задач. Эти методы описываются с помощью моделей. Когда разработчики применяют подобную модель, они порождают ее экземпляр, соответствующий нуждам конкретного проекта. Подобный экземпляр должен соответствовать модели набора методов. Качество набора методов определяется его способностью порождать полезные экземпляры.

Очевидна граница между набором методов, который определяет, что и как должно быть сделано, и его экземпляром, который непосредственно это реализует. Такая граница находится также между метамоделью и методом. Проектируя метод, инженер использует метамодель и создает ее экземпляр. В этом контексте метамодель служит в качестве руководства, обеспечивающего спецификацию возможных элементов метода.

Эти рассмотрения помогают выделить три уровня абстракции, предложенные в ISO 24744: метамодель, метод и проект (экземпляр ЖЦ). Разные заинтересованные стороны работают на разных уровнях. Инженеры методов используют метамодели, чтобы создавать и модифицировать методы. Разработчики систем применяют метод для генерации конкретного проекта. Таким образом, методы служат в качестве моста между метамоделями и проектами и обеспечивают косвенное взаимодействие разработчиков, работающих над проектом, и метамоделью, которая была использована для создания применяемого метода.

Для описания трех уровней моделирования процесса жизненного цикла применяется следующая схема. Элементы уровней метамодели и методов описывается с помощью классов. Классы метода являются подтипами классов метамодели. При генерации проекта создаются объекты-экземпляры классов метода, которые будут являться также экземплярами классов метамодели. Этот подход приводит к тому, что элементы метамодели не могут передавать информацию элементам слоя методов. У элемента метода нет возможности получить значения любых атрибутов или связей, так как он тоже является классом, а не объектом [23].

Наполнение элементов методов информацией зачастую является практичным и даже необходимым. Иногда требуется описать свойство, которым обладают не все экземпляры элемента метода, а только какая-то их часть. Например, инженер методов может захотеть описать цель каждого типа работ, которые могут выполняться в проекте. Работы по написанию программного кода будут иметь цель «написать код, реализующий требования, описанные в начальной спецификации», в то время как работы по модификации списка требований будут иметь цель «изменить список требований так, чтобы он отражал утвержденные запросы на изменения». Эти атрибуты не принадлежат каждой работе по написанию кода и модификации списка требований, но принадлежат типам этих работ. Инженер методов нуждается в инструменте присвоения конкретных значений набору объектов уровня проекта, таких как набор работ.

Обычно набор объектов описывается как класс, а свойство, которым должен обладать каждый объект этого набора, будет иметь значение, описанное атрибутом класса. Таким образом, в продолжение примера, требуется, чтобы метамодель обеспечивала класс, описывающий разные типы работ проекта и имеющий атрибут Цель. Такой класс можно назвать ТипРаботы. Экземпляр этого класса будет находиться на уровне метода. В нашем примере могут быть созданы экземпляры «НаписаниеКода» и «МодификацияТребований», имеющие соответствующие значение атрибута Цель.

Мы упоминали, что инженер методов использует классы метамодели для создания подклассов и сборки их в метод. Но теперь получается, что инженеру требуется создавать экземпляры некоторых классов метамодели и размещать их на уровне метода. В нашем примере, инженер на уровне метода создаст подкласс НаписаниеКода класса Работа и объект «НаписаниеКода», который будет экземпляром класса ТипРаботы уровня метамодели. Очевидно, что эти подкласс и объект отражают одно и то же, то есть работы, целью которых является написание кода, реализующего требования ТЗ. Подкласс унаследует свойства и отношения класса Работа и позволит своим экземплярам на уровне проекта получать их значения и связи. С другой стороны, объект принимает значения и связи из атрибутов и отношений класса ТипРаботы уровня метамодели. Для обращения к этому набору класса и объекта применяется специальный термин “clabject”. В нашем случае мы имеем clabject #НаписаниеКода (см. рис. 12).

Важно понимать, что два элемента метамодели, которые являются базой для clabject’a, это два разных класса со своими наборами свойств и отношений. Но, в то же время, они тесно связаны. Фактически, один класс (ТипРаботы) отражает группу экземпляров другого класса (Работа); экземпляры класса Работа представляют собой реальные работы, выполняемые в проекте, а экземпляры класса ТипРаботы представляют наборы работ, которые разделяют общие свойства, то есть имеют один тип. В этом смысле, экземпляры класса ТипРаботы дробят экземпляры класса Работа. Такое отношение получило название powertype. В нашем примере, ТипРаботы – это powertype класса Работа, так как его экземпляры составляют аспект объектов clabject’а, аспекты классов которого представлены подтипами класса Работа. Сложная композиция уровня метамодели, сформированная разделяемым классом и его powertype, может использоваться в качестве шаблона (powertype pattern).

Дополнительно clabject’ы позволяют переносить свойства классов метамодели уровень метода в объекты уровня проекта (deep instantiation) и задавать им значения. В нашем примере, свойство Продолжительность, заданное на уровне метамодели, будет перенесено в объекты проекта и получит значение при создании экземпляра «Работа 2.1» (см. рис. 16)

Рис. 16 Пример использования Powertype и Clabject

С точки зрения инструментария, Clabject’ы являются мощными средствами, которые могут быть легко реализованы. Аспект объектов может храниться в БД, в то время как аспект классов будет использоваться инструментом как шаблон для создания экземпляров. Их реализация облегчается тем, что clabject’ы состоят из общепринятых концепций (классов и объектов).

В настоящий момент широко распространено строгое метамоделирование (strict metamodeling), которое предполагает, что элементы любого уровня должны быть экземплярами элементов второго уровня, который располагается сразу над первым. В таких ситуациях невозможно применять clabject и powertype Очевидно, что строгое метамоделирование не позволяет описать все ситуации, которые возникают в реальном мире. Поэтому выразительность метамодели стоит оценивать, в том числе, и по наличию поддержки clabject’ов.

Интересно, что сама концепция clabject и PowerType развивается сейчас главным образом исходя из требований деятельностного подхода – ситуационной инженерии методов.