Это следует из требования родовой
Это следует из требования родовой структуры, заключающегося в том, что у каждого кластера имеется свой собственный домен образов. Этот новый объект называется "тип работы" (job-type) и является компонентом объекта "job". Объект "job-type" сам может декомпозироваться на свои объекты-атрибуты.
Во-вторых, заметим, что каждый тип работы является абстракцией всех работ, относящихся к определенному проекту. Поэтому одним из атрибутов типа работы должен быть проект, к которому относятся все его работы. Соответственно, на "project" показан как атрибут "job-type". Объект "project" больше не является непосредственным компонентом объекта "job", как это было на . Теперь он является косвенным компонентом этого объекта через посредство "job-type". Определения объектов "job" и "job-type" приводятся ниже:
var job:
generic
TN = (modemproject job, ... , printer project job)
of
aggregate [E#, TN] E#:
key employee; T: title; PR: payrate; TN:
key job-type
end
var job-type:
generic of
aggregate [TN] TN: typename; P#:
key project; AP: average payrate
end
Заметим, что "job" представляет собой пример отношения, в котором ключ содержит домен образов.
Введение "job-type" иллюстрирует вид реструктуризации, которая часто может стать необходимой по мере эволюционирования приложения модели. В первоначальном приложении пользователей может интересовать общий класс объектов C. В процессе эволюции приложения некоторым пользователям может стать интересна только подкатегория C-объектов, у которых значением атрибута A является некоторое v1, а другим пользователи может стать интересна подкатегория со значением атрибута A, равным v2. Эти подкатегории C относительно атрибута A должны быть далее представлены как кластер в плоскости обобщения C. На этот кластер {modem project job, ... , printer project job} представляет подкатегоризацию "job" по отношению к "project".
Вообще, если появляется необходимость ввести в существующей модели подкатегоризацию некоторого объекта O по отношению к атрибуту A, то требуется следующая реструктуризация:
- определить новый объект S, который абстрагирует класс подкатегорий;
- заместить в O домен, который ссылается на A, доменом, который ссылается на S;
- если ключ O содержит селектор для A, заменить его селектором для S и
- вставить в S домен, который ссылается на A.
Содержание Назад Вперед