romanov-uml-metamodel-2018 11 07 -...

92
Объектно-ориентированные CASE-технологии Язык UML. 2. Метамодель языка UML Романов Владимир Юрьевич, Московский Государственный Университет им. М.В.Ломоносова Факультет Вычислительной Математики и Кибернетики [email protected], [email protected]

Upload: vokhanh

Post on 11-Nov-2018

228 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Объектно-ориентированные CASE-технологии

Язык UML. 2. Метамодель языка UML

Романов Владимир Юрьевич,Московский Государственный Университет им. М.В.Ломоносова

Факультет Вычислительной Математики и Кибернетики[email protected],

[email protected]

Page 2: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

UML – Unified Modeling Language.Унифицированный язык моделирования

� Стандарт на язык моделирования разработанный консорциумом фирм Object Management Group:

http://www.omg.org

2

� Стандартизация языка UML консорциумом OMG:http://www.omg.org/uml

http://www.uml.org/

� Текущие версии стандарта доступные для свободного скачивания:http://www.omg.org/spec/

Page 3: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

UML – Unified Modeling Language.Стандарты связанные с языком UML

3

Page 4: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

UML – Unified Modeling Language.Инфраструктура и суперструктура языка UML

� Текущая версия языка UML: http://www.omg.org/spec/UML/2.4.1/

� Инфраструктура (база для последующего расширения):http://www.omg.org/spec/UML/2.4.1/Infrastructure/PDF

� Суперструктура (+ элементы для моделирования конструкций языков

4

� Суперструктура (+ элементы для моделирования конструкций языков программирования):http://www.omg.org/spec/UML/2.4.1/Superstructure/PDF

� XML Metadata Interchange (XMI) формат для обмена моделями инструментами:http://www.omg.org/spec/XMI/2.4.1/

� Спецификация суперструктуры в формате XMIhttp://www.omg.org/spec/UML/20110701/Superstructure.xmi

Page 5: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

UML – Unified Modeling Language.Стандарт для обмена UML-диаграммами

� Diagram Definition (DD)http://www.omg.org/spec/DD/1.0/

� XMI of the Diagram Graphics v1.0 packagehttp://www.omg.org/spec/DD/20110901/DG.cmof

5

� XMI of the Diagram Interchange v1.0 packagehttp://www.omg.org/spec/DD/20110901/DI.cmof

� XMI of the Diagram Common v1.0 packagehttp://www.omg.org/spec/DD/20110901/DС.cmof

Page 6: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

UML – Unified Modeling Language.Фрагмент спецификации метамодели UML

6

Page 7: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

UML – Unified Modeling Language.Объектный язык ограничений (OCL)

� Object Constraint Language (OCL)http://www.omg.org/spec/OCL/2.3.1/

� Спецификация языка OCL на языке XMLhttp://www.omg.org/spec/OCL/20090501/OCL.cmof

7

Page 8: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

UML – Unified Modeling Language.Фрагмент спецификации метамодели OCL

� if memberEnd->size() > 2 then ownedEnd->includesAll(memberEnd)

� parents()->select(oclIsKindOf(Association)).oclAsType(Association)-> forAll(p | p.memberEnd->size() = self.memberEnd->size())

� Sequence{1..self.memberEnd->size()}-> forAll(i |

8

forAll(i | self.general->select(oclIsKindOf(Association)).oclAsType(Association)-> forAll(ga | self.memberEnd->

at(i).type.conformsTo(ga.memberEnd->at(i).type)))

Page 9: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

4-х уровневая иерархия метамоделей

Class

Class Association InstanceSpecificationM2 – UML metamodel

M3 – UML metametamodel

«instanceof»«instanceof» «instanceof»

Person

age : IntegerCar Mike : Person

age = 11

*car

M0 - runtime

M1 – user model

aMan

«instanceof»

«instanceof»«instanceof» «instanceof»

Page 10: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Ядро метамодели языка UML

Page 11: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Ядро метамодели языка UML

Page 12: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Моделирование отношения ассоциации собственник ------- собственность

Element

/owner { union }0..1

*/ownedElement { union }

/owner { union }

Element - абстрактный базовый класс для всех классов метамодели.

Атрибуты и отношения этого класса наследуются всеми классами

метамодели.

В частности, всеми классами наследуется и отношение ассоциации:собственник (owner ) ----------- собственность (ownedElement )

Page 13: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Моделирование отношения ассоциации собственник ---- собственность

Element

0..1

*/ownedElement { union }

Окончание ассоциации с ролью owner

/owner { union }0..1

У каждого элемента модели может быть не более одного собственника (owner ).

Page 14: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Моделирование отношения ассоциации собственник ---- собственность

Element

0..1

*/ownedElement { union }

Окончание ассоциации с ролью ownedElement

/owner { union }0..1

У каждого элемента модели может быть (по умолчанию нижняя граница от

нуля) неограниченное количество собственных элементов (ownedElement ).

Время жизни собственного элемента (ownedElement ) совпадает с временем

жизни элемента-собственника (owner ).

Page 15: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Моделирование отношения ассоциации собственник ---- собственность

Element

0..1

*/ownedElement { union }

Свойство union на окончаниях ассоциации

/owner { union }0..1

В классах-потомках класса Element могут быть свойства этих классов:{ subsets owner } и / или{ subsets ownedElement }

Page 16: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Моделирование отношения ассоциации собственник ---- собственность

Element

0..1

*/ownedElement { union }

Свойство / (derived) на окончаниях ассоциации

/owner { union }0..1

Свойство / (derived) на окончаниях ассоциации означает, что собственники и собственные элементы не хранятся в экземпляре класса Element , а получаются объединением (union) элементов в классах-потомках класса Element .

Page 17: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Что моделирует отношение ассоциации собственник ---- собственность

Element

/owner { union }0..1

*/ownedElement { union }

// Javapackage casetool.graph;

public class Node {}

// Javapackage casetool.graph;

public class Node {String name;

} // Javapackage casetool.graph;

Page 18: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Программный интерфейс для отношениясобственник ---- собственность

Element

/owner { union }0..1

*/ownedElement { union }

public static void dump(Element element, int level) {String blanks = String. format("%" + 5*level + "s" , " ");

for ( Element owned : element. getOwnedElements()) {System. out.println(blanks + owned);

if (! owned. getOwnedElements().isEmpty())dump(owned, level + 1);

}}

Page 19: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Дамп UML-модели на консоль

org.eclipse.uml2.uml.internal.impl.PackageImpl@7bfd270d (name: signature, visibility: <unset>) (URI: null)

org.eclipse.uml2.uml.internal.impl.ClassImpl@290f0613 (name: SignatureReader, visibility: <unset>) (isLeaf: false, isAbstract: false, isFinalSpecialization: false) (isActive: false)

org.eclipse.uml2.uml.internal.impl.ElementImportImpl@22a79bc (alias: <unset>, visibility: public)

org.eclipse.uml2.uml.internal.impl.PropertyImpl@61d729ab org.eclipse.uml2.uml.internal.impl.PropertyImpl@61d729ab (name: a, visibility: private) (isLeaf: true) (isStatic: false) (isOrdered: false, isUnique: true, isReadOnly: false) (aggregation: none, isDerived: false, isDerivedUnion: false, isID: false)

org.eclipse.uml2.uml.internal.impl.OperationImpl@7c6c1995 (name: SignatureReader, visibility: public) (isLeaf: false, isStatic: false, concurrency: sequential, isAbstract: false) (isQuery: false)

org.eclipse.uml2.uml.internal.impl.ParameterImpl@1d03c504 (name: p0, visibility: <unset>) (isOrdered: false, isUnique: true, direction: in, effect: <unset>, isException: false, isStream: false)

org.eclipse.uml2.uml.internal.impl.OperationImpl@627b987d (name: accept, visibility: public) (isLeaf: false, isStatic: false, concurrency: sequential, isAbstract: false) (isQuery: false)

org.eclipse.uml2.uml.internal.impl.ParameterImpl@2058690e (name: p0, visibility: <unset>) (isOrdered: false, isUnique: true, direction: in, effect: <unset>, isException: false, isStream: false)

Page 20: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Ядро метамодели языка UML

Page 21: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Моделирование комментариев к элементам модели

Element/owner { union }

0..1*/ownedElement { union }

Comment

0..1

/ownedComment

{ subset ownedElement }*

Comment - конкретный класс для комментирования экземпляров всех классов

метамодели.

У каждого экземпляра элемента модели может быть неограниченное

количество экземпляров комментариев.

Каждый комментарий может относится не более чем к одному элементу

модели.

0..1

Page 22: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Моделирование комментариев к элементам модели

Element/owner { union }

0..1*/ownedElement { union }

Comment

0..1

/ownedComment

{ subset ownedElement }*

Время жизни комментария совпадает со временем жизни комментируемого

элемента.

Собственный комментарий (ownedComment ) является подмножеством (subset )объединения (union ) ownedElement .

Это означает, что при запросе с помощью метода getOwnedElements() всех

элементов, которыми владеет данный элемент, в объединение ownedElementпопадут и все комментарии для этого элемента.

0..1

Page 23: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Моделирование комментариев к элементам модели

Element/owner { union }

0..1*/ownedElement { union }

Comment

0..1

/ownedComment

{ subset ownedElement }*

Время жизни комментария совпадает со временем жизни комментируемого

элемента.

Поэтому для каждого элемента модели существует метод

createOwnedComment() .

0..1

Page 24: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Программный интерфейс для работы с комментариями элементов модели

Element/owner { union }

0..1*/ownedElement { union }

Comment

0..1

/ownedComment

{ subset ownedElement }*body : String0..1 body : String

public static void commenting( Element element, int level) {Comment comment = element.createOwnedComment() ;comment.set Body(“The comment”);

}

Page 25: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Моделирование отношений между элементами UML-модели

Relationship Element

0..1

/relatedElement

{ union } *1..

Element

Relationship – абстрактный базовый класс для всех отношений в UML- модели.

Каждое отношение может связывать 1 и более элементов. Если множественность1, то отношение элемента с сами собой.

union – означает, что можно считать все связанные отношением элементы

модели с помощью метода getRelatedElement().

Page 26: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Программный интерфейс для работы с комментариями элементов модели

Element/owner { union }

0..1*/ownedElement { union }

Comment

0..1

/ownedComment

{ subset ownedElement }*body : String0..1 body : String

public static void commenting( Element element, int level) {Comment comment = element.createOwnedComment() ;comment.set Body(“The comment”);

}

Page 27: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Моделирование отношений между элементами UML-модели

Relationship

DirectedRelationship Element

/target

{ union, subsets relatedElement }*1..

DirectedRelationship – абстрактный базовый класс для всех направленных

отношений в UML- модели.

DirectedRelationship Element{ union, subsets relatedElement }

/source

{ union, subsets relatedElement }*1..

Page 28: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Представление пространств имен в метамодели языка UML

Page 29: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Моделирование именованных элементов в метамодели языка UML

Element

NamedElement

name : String [0..1]

<<enumeration>>VisibilityKind

publicprotectedprivate

/qualifiedName – означает, что интерфейсе есть метод getQualifiedName()позволяющий считать квалифицированное имя именованного элемента модели

(имя состоящее из цепочки охватывающих именованный элемент пространствимен).

name : String [0..1]visibility : VisibilityKind [0..1]/qualifiedName : String [0..1]

privatepackage

Page 30: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Вывод именованных элементов модели

public static void dumpNamed (Element element) {if (!(element instanceof NamedElement)) return;

NamedElement ne = (NamedElement ) element;

String kind = "";if (ne instanceof Class) kind = "class";if (ne instanceof Interface) kind = "interface";if (ne instanceof Package) kind = "package";if (ne instanceof Package) kind = "package";

if (!kind.isEmpty())out.format("%10s: %s %n", kind, ne.getQualifiedName() );

for (Element owned : ne.getOwnedElements() ) {if (!(owned instanceof NamedElement))

continue;

if (! owned.getOwnedElements(). isEmpty())dumpNamed(owned);

}}

Page 31: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Вывод именованных элементов модели

package: Guava package: Guava::com package: Guava::com::googlepackage: Guava::com::google::common package: Guava::com::google::common::annotations

interface: Guava::com::google::common::annotations: :Beta interface: Guava::com::google::common::annotations: :GwtCompatibleinterface: Guava::com:: google ::common::annotations:: GwtIncompatibleinterface: Guava::com:: google ::common::annotations:: GwtIncompatibleinterface: Guava::com::google::common::annotations: :VisibleForTestingpackage: Guava::com::google::common::base class: Guava::com::google::common::base::Absent class: Guava::com::google::common::base::Optional class: Guava::com::google::common::base::AbstractIt erator$1 class: Guava::com::google::common::base::AbstractIt eratorclass: Guava::com::google::common::base::Ascii

Page 32: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Вывод классификаторов в поток вывода

public static void dumpClassifiers (Element element) {if (!(element instanceof NamedElement)) return;NamedElement ne = (NamedElement ) element;

String kind = "";if (ne instanceof Class ) kind = "class";if (ne instanceof Interface ) kind = "interface";if (ne instanceof Enumeration ) kind = "enum";

if (!kind.isEmpty())out.format("%s %s { %n} %n%n", kind, ne.getName() );

for (Element owned : ne.getOwnedElements()) {if (!( owned instanceof NamedElement ))

continue;

if (! owned .getOwnedElements(). isEmpty())dumpClassifiers(owned);

}}

Page 33: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Вывод классификаторов модели

interface Beta { }

interface GwtCompatible { }

interface GwtIncompatible { }

interface VisibleForTesting { interface VisibleForTesting { }

class Absent { }

class Optional { }

class AbstractIterator$1 { }

enum AbstractIterator$State { }

Page 34: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Представление пространств имен в метамодели языка UML

Page 35: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Моделирование пространств имен в метамодели языка UML

NamedElement

Namespace NamedElement

/member

{ union }*

/ownedMember */namespace0..1

/member – собственные элементы, идентифицируемые элементы,импортированные элементы и унаследованные элементы

/ownedMember – собственные элементы

/ownedMember

{ union, subsets member, subsets ownedElement }

*/namespace0..1

{ union, subsets owner }

Page 36: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Представление пространств имен в метамодели языка UML

Page 37: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Моделирование пространств имен в метамодели языка UML

NamedElement

NamespacePackageableElement

/importedMember

{ subset member }

*

/importedMember – импортированные элементы:• импортированные по отдельности (ElementImport )• импортированные часть импорта всего пакета (PackageImport )

Page 38: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Вывод пакета в поток вывода

public static void dumpPackages (Element element) {if (!(element instanceof Package)) return;Package p = (Package ) element;

out.format("package %s { %n", p.getName() );

for ( NamedElement member : p.getOwnedMembers() ) dumpClassifier(member);

for ( NamedElement member : p.getOwnedMembers() ) {if (!( member instanceof Package ))

continue;

if (! member .getOwnedElements().isEmpty())dumpPackages(member);

}out.format("} %n%n");

}

Page 39: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Вывод классификатора в поток вывода

private static void dumpClassifier (NamedElement ne) {String kind = "";if (ne instanceof Class ) kind = "class";if (ne instanceof Interface ) kind = "interface";if (ne instanceof Enumeration ) kind = "enum";

if (!kind.isEmpty())out.format(" %s %s { %n } %n", kind, ne.getName() );

}}

Page 40: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Вывод пакетов и классификаторов модели

package Guava { package com { package google { package common { package annotations { interface Beta { } interface GwtCompatible { } } interface GwtIncompatible { } interface VisibleForTesting { } }

package base { class Absent { } class Optional { }

Page 41: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Импорт в пространства имен в метамодели языка UML

Page 42: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Импорт в пространства имен в метамодели языка UML

Page 43: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Моделирование импорта элементов в метамодели языка UML

NamedElement

Namespace ElementImport/elementImport

*/importingNamespace

1

DirectedRelationship

visibility : VisibilityKindalias : String [0:1]

{ subsets ownedElement }*1{ subsets source, subsets owner }

PackageableElement

/importedElement

{ subsets target} 1

Page 44: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Моделирование импорта элементов в метамодели языка UML

NamedElement

Namespace ElementImport/elementImport

*/importingNamespace

1

DirectedRelationship

visibility : VisibilityKindalias : String [0:1]

{ subsets ownedElement }*1{ subsets source, subsets owner }

PackageableElement

/importedElement

{ subsets target} 1

import graphics. Color;

class Node {Color borderColor;

}

Page 45: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Моделирование импорта элементов в метамодели языка UML

NamedElement

Namespace ElementImport/elementImport

*/importingNamespace

1

DirectedRelationship

visibility : VisibilityKindalias : String [0:1]

{ subsets ownedElement }*1{ subsets source, subsets owner }

PackageableElement

/importedElement

{ subsets target} 1

Node graphics::Color<<import>>

Page 46: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Импорт в пространства имен в метамодели языка UML

Page 47: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Моделирование импорта элементов в метамодели языка UML

NamedElement

Namespace PackageImport/packageImport

*/importingNamespace

1

DirectedRelationship

visibility : VisibilityKind

{ subsets ownedElement }*1{ subsets source, subsets owner }

Package

/importedPackage

{ subsets target} 1

Page 48: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Моделирование импорта элементов в метамодели языка UML

NamedElement

Namespace PackageImport/packageImport

*/importingNamespace

1

DirectedRelationship

visibility : VisibilityKind

{ subsets ownedElement }*1{ subsets source, subsets owner }

Package

/importedPackage

{ subsets target} 1

Page 49: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Моделирование импорта элементов в метамодели языка UML

NamedElement

Namespace PackageImport/packageImport

*/importingNamespace

1

DirectedRelationship

visibility : VisibilityKindalias : String [0:1]

{ subsets ownedElement }*1{ subsets source, subsets owner }

Package

/importedPackage

{ subsets target} 1

Node graphics<<import>>

Page 50: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Представление множественных значенийв метамодели языка UML

Page 51: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Моделирование множественных значенийв метамодели языка UML

Element

Multiplicity ValueSpecification

upperValue{ subsets ownedElement }

0:1

owningUpper

isOrdered: Boolean = falseisUnique:Boolean = true/upper : UnlimitedNatural

{ subsets owner}

1

/upper : UnlimitedNatural/lower : Integer

1

lowerValue

0:1

owningLower

{ subsets owner}{ subsets ownedElement }

Page 52: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Отношение ассоциации.Уникальность, упорядоченность и язык OCL

Set Bag

OrderedSet Sequence

{unordered}

{ordered}

{ununique}{unique}

52

CollectionT

SetT

OrderedSetT

BagT

SequenceT

Тип свойства(property)

Page 53: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Типы и типизированные элементыв метамодели языка UML

Page 54: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Моделирование импорта элементов в метамодели языка UML

NamedElement

TypedElement Type/type

0:1

PackagebleElement

0:1

import graphics. *;

class Node {Color borderColor;void draw( Graphics graphics) {}

}

Page 55: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Классификаторы в метамодели языка UML

Page 56: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Классификаторы в метамодели языка UML

Page 57: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Моделирование классификаторов метамодели языка UML

RedefinableElement

Classifier

isAbstract : Boolean = false

Type PackageableElement

Page 58: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Моделирование отношения наследования (обобщения) метамодели языка UML

Classifier

isAbstract : Boolean = falseGeneralization

DirectedRelationship

/generalization/specific

/general

{ subsets target }

1

{ subsets ownedElement }*1

{ subsets source, subsets owner }

interface FlyingFish extends Swimming, Flying {

}

Page 59: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Моделирование отношения наследования (обобщения) метамодели языка UML

Classifier

isAbstract : Boolean = falseGeneralization

DirectedRelationship

/generalization/specific

/general

{ subsets target }

1

{ subsets ownedElement }*1

{ subsets source, subsets owner }

class Node extends View {

}

Page 60: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Генерация текстов класса на языке Java

public static void generateClass (Class class_ , String packageDir) {makePackageDir(packageDir);

PrintStream ps = null;try { ps = new PrintStream(packageDir + "/" + class_.getName() + ".java"); } catch (FileNotFoundException e) { return; }

genPackage(class_, ps);

genImports(class_, ps);

String modifiers = visibilityToJava (class_.getVisibility() );

if (class_.isAbstract() )modifiers += "abstract " ;

if (class_.isLeaf() )modifiers += "final " ;

ps.format("%n%s class %s ", modifiers , class_.getName() );// …

Page 61: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Генерация текстов класса на языке Java

genParents( class_, ps);

ps.format(" { %n");

genFields( class_ , ps);

genMethods( class_ , ps);

ps.format(" } %n");

ps.close();}

Page 62: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Импорт в пространства имен в метамодели языка UML

Page 63: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Представление пространств имен в метамодели языка UML

Page 64: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Генерация текстов класса на языке Java.Генерация импортов класса

private static void genImports (Classifier classifier, PrintStream ps) {int length = classifier.getModel().getName().length( );

for (PackageableElement ie : classifier.getImportedMembers() ) {String qName = ie.getQualifiedName() .replace("::", ".");qName = qName.substring(length+1);ps.format(" import %s ;%n", qName);

}}}

Page 65: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Генерация текстов класса на языке Java.Получение текста для видимости элемента.

/*** Получить ключевое слово Java для представления видимости в модели UML.* @param visibility значение видимости* @return ключевое слово Java*/public static String visibilityToJava (VisibilityKind visibility) {

return visibility == VisibilityKind. PACKAGE_LITERAL? "" : visibility.getName () + ' ';: visibility.getName () + ' ';

}

Page 66: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Генерация текстов класса на языке Java.Генерация предков класса

private static void genParents (Class class_, PrintStream ps) {for (Generalization g : class_. getGeneralizations( )) {

Classifier parent = g.getGeneral() ;

String parentName = parent.getName();if (parentName.equals("Object"))

return;

ps.format(" extends %s %n", parent.getName() );return;

}}

Page 67: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Классы, их свойства и операции в метамодели языка UML

Page 68: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Отношения ассоциации между свойствамив метамодели языка UML

Page 69: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Генерация текстов класса на языке Java.Генерация полей класса

private static void genFields (Class class_, PrintStream ps) {for (Property f : class_. getOwnedAttributes() ) {

String typeName = f.getType(). getName();

String modifiers = visibilityToJava(class_.getVisib ility());if (f.isStatic())

modifiers += "static";

String fieldName = f.getName();ps.format(" %s %s %s;%n", modifiers, typeName , fiel dName );

}}

Page 70: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Структура и поведение классификаторовв метамодели языка UML

Page 71: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Структура и поведение классификаторовв метамодели языка UML

Page 72: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Моделирование возможностями в метамодели языка UML

RedefinableElement

Feature

isStatic : Boolean = falseMultiplicity

Element Namespace

TypedElement

StructuredFeature BehavioralFeature

Page 73: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Структура и поведение классификаторовв метамодели языка UML

Page 74: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Моделирование параметров в метамодели языка UML

TypedElement

MultiplicityElement

*0..1Parameter*BehavioralFeature

ownerFormalParameter{ subsets namespace }

0..1

/ownedParameter { subsets ownedMember }

direction : directionKind

Page 75: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Операции классификаторовв метамодели языка UML

Page 76: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Операции классификаторовв метамодели языка UML

Page 77: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Генерация текстов класса на языке Java.Генерация методов класса (1)

private static void genMethods (Class class_, PrintStream ps) {

for (Operation op : class_. getOwnedOperations() ) {String operationName = op.getName();

String modifiers = visibilityToJava(class_.getVisibility());

if (op.isStatic ())if (op.isStatic ())modifiers += "static";

//…

Page 78: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Генерация текстов класса на языке Java.Генерация методов класса (2)

//…String returns = "void" ;String parameters = "";

for(Parameter p : op.getOwnedParameters()) {String typeName = p.getType().getName();

if (p.getDirection () == ParameterDirectionKind. RETURN_LITERAL ) {if (p.getDirection () == ParameterDirectionKind. RETURN_LITERAL ) {returns = typeName;continue;

}

if (!parameters.isEmpty())parameters += ", ";

parameters += typeName + " " + p.getName();}//…

Page 79: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Генерация текстов класса на языке Java.Генерация методов класса (3)

//…

String tail = op.isAbstract() ? ";" : "{ \n }";

ps.format(" %s %s %s (%s) %s %n%n ", modifiers, returns, operationName, parameters, tail );

}}}

Page 80: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Представление пакетов в метамодели языка UML

Page 81: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Представление пакетов в метамодели языка UML

Page 82: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Моделирование классификаторов метамодели языка UML

Namespace

Package

PackageableElement

Page 83: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Представление пакетов в метамодели языка UML

Page 84: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Моделирование отношения между пакетами

Package

0..1

*/nestedPackage { subsets ownedMember }

/nestingPackage { subsets namespace }

0..1

package graphics.core;

Page 85: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Моделирование пакетов в метамодели языка UML

Namespace

Package Type

PackagebleElement

*0..1

package graph;

class Node {}

*/ownedType { subsets ownedMember }package{ subsets namespace }

0..1

Page 86: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Представление значенийв метамодели языка UML

Page 87: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Представление типов данных и перечислений в метамодели языка UML

Page 88: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Представление пакетов в метамодели языка UML

Page 89: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Представление отношений зависимостив метамодели языка UML

Page 90: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Представление интерфейсовв метамодели языка UML

Page 91: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Генерация текстов класса на языке Java.Генерация реализуемых классом интерфейсов

public static void generateClass (Class class_, String packageDir) {// …genPackage(class_, ps);genImports(class_, ps);

String modifiers = visibilityToJava(class_.getVisibility());if (class_.isAbstract())

modifiers += "abstract ";if (class_.isLeaf())if (class_.isLeaf())

modifiers += "final ";

ps.format("%n%sclass %s ", modifiers, name);genParents(class_, ps);

genInterfaces(class_, ps);

ps.format("{ %n");genFields(class_, ps);genMethods(class_, ps);

ps.format("} %n");// …

Page 92: romanov-uml-metamodel-2018 11 07 - master.cmc.msu.rumaster.cmc.msu.ru/files/romanov-uml-metamodel-2018_11_07.pdf · UML – Unified Modeling Language. Унифицированный

Романов Владимир Юрьевич ©2018МГУ им. М.В.Ломоносова. Факультет ВМК.

Генерация текстов класса на языке Java.Генерация реализуемых классом интерфейсов

private static void genInterfaces (Class cls, PrintStream ps) {String interfaces = "";

for ( InterfaceRealization ir : cls. getInterfaceRealizations() ) {Interface implementedInterface = ir.getContract() ;

if (interfaces.isEmpty())interfaces = "implements ";

else interfaces += ", ";else interfaces += ", ";

interfaces += implementedInterface.getName();}ps.format(" %s ", interfaces);

}