OMG Unified Modeling Language
Specification
Version 1.3
First Edition: March 2000
Copyright © 1997, 1998, 1999 Electronic Data Systems Corporation
Copyright © 1997, 1998, 1999 Hewlett-Packard Company
Copyright © 1997, 1998, 1999 IBM Corporation
Copyright © 1997, 1998, 1999 ICON Computing
Copyright © 1997, 1998, 1999 i-Logix
Copyright © 1997, 1998, 1999 IntelliCorp
Copyright © 1997, 1998, 1999 Microsoft Corporation
Copyright © 2000, Object Management Group
Copyright © 1997, 1998, 1999 ObjecTime Limited
Copyright © 1997, 1998, 1999 Oracle Corporation
Copyright © 1997, 1998, 1999 Platinum Technology, Inc.
Copyright © 1997, 1998, 1999 Ptech Inc.
Copyright © 1997, 1998, 1999 Rational Software Corporation
Copyright © 1997, 1998, 1999 Reich Technologies
Copyright © 1997, 1998, 1999 Softeam
Copyright © 1997, 1998, 1999 Sterling Software
Copyright © 1997, 1998, 1999 Taskon A/S
Copyright © 1997, 1998, 1999 Unisys Corporation
PATENT
The attention of adopters is directed to the possibility that compliance with or adoption of OMG specifications may
require use of an invention covered by patent rights. OMG shall not be responsible for identifying patents for which a
license may be required by any OMG specification, or for conducting legal inquiries into the legal validity or scope of
those patents that are brought to its attention. OMG specifications are prospective and advisory only. Prospective users are
responsible for protecting themselves against liability for infringement of patents.
NOTICE
The information contained in this document is subject to change without notice.
The material in this document details an Object Management Group, Inc. specification. This document does not represent
a commitment to implement any portion of this specification in any companies' products.
GENERAL USE RESTRICTIONS
The owners of the copyright in the UML specifications version 1.3 hereby grant you a fully-paid up, non-exclusive, nontransferable, perpetual, worldwide license (without the right to sublicense), to create and distribute software and special
purpose specifications which are based upon the UML specifications, and to use, copy, and distribute the UML specifications as provided under the Copyright Act; provided that: (1) both the copyright notice identified above and this permission notice appear on any copies of the UML specifications; (2) the use of the specifications is for informational purposes
and will not be copied or posted on any network computer or broadcast in any media and will not be otherwise resold or
transferred for commercial purposes; and (3) no modifications are made to the UML specifications themselves. This limited permission automatically terminates without notice if you breach any of these terms or conditions. Upon termination,
you will destroy immediately any copies of the specifications in your possession or control.
Software developed under the terms of this license may claim compliance or conformance with UML version 1.3 if and
only if the software compliance is of a nature fully matching the applicable compliance points as stated in the specifications. Software developed only partially matching the applicable compliance points may claim only that the software was
based on the UML specifications, but may not claim compliance or conformance with any particular UML version. In the
event that testing suites are implemented by Object Management Group, Inc., software developed using the UML specifi-
cations may claim compliance or conformance with the specifications only if the software satisfactorily completes the
testing suites.
Any unauthorized use of the UML specifications may violate copyright laws, trademark laws, and communications regulations and statutes.
DISCLAIMER OF WARRANTY
WHILE THE INFORMATION IN THIS PUBLICATION IS BELIEVED TO BE ACCURATE, THE UML SPECIFICATIONS ARE PROVIDED "AS IS" AND MAY CONTAIN ERRORS OR MISPRINTS. THE SPECIFICATIONS ARE
PROVIDED FREE OF CHARGE OR AT A NOMINAL COST, AND ACCORDINGLY ARE PROVIDED ON AN "AS
IS" BASIS, WITHOUT WARRANTY OF ANY KIND, INCLUDING WITHOUT LIMITATION THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO
EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ERRORS CONTAINED HEREIN OR FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES IN CONNECTION WITH THE FURNISHING, PERFORMANCE, OR
USE OF THIS MATERIAL, EVEN IF ADVISED OF SUCH DAMAGES. The entire risk as to the quality and performance of software developed using the specifications is borne by you. This disclaimer of warranty constitutes an essential
part of this Agreement.
RESTRICTED RIGHTS LEGEND
Use, duplication or disclosure by the U.S. Government subcontractor is subject to the restrictions set forth in subparagraph
(c) (1) (ii) of The Rights in Technical Data and Computer Software Clause at DFARS 252.227-7013 or in subparagraph
(c)(1) and (2) of the Commercial Computer Software - Restricted Rights clauses at 48 C.F.R. 52.227-19 or as specified in
48 C.F.R. 227-7202-2 of the DoD F.A.R. Supplement and its successors, or as specified in 48 C.F.R. 12.212 of the Federal
Acquisition Regulations and its successors, as applicable. The specification owners are Rational Software Corporation,
18880 Homestead Road, Cupertino, CA 95014, and Object Management Group, Inc., 492 Old Connecticut Path, Framingham, MA 01701.
TRADEMARKS
OMG OBJECT MANAGEMENT GROUP, CORBA, CORBA ACADEMY, CORBA ACADEMY & DESIGN, THE
INFORMATION BROKERAGE, OBJECT REQUEST BROKER, OMG IDL, CORBAFACILITIES,
CORBASERVICES, CORBANET, CORBAMED, CORBADOMAINS, GIOP, IIOP, OMA, CORBA THE GEEK,
UNIFIED MODELING LANGUAGE, UML, and UML CUBE LOGO are registered trademarks or trademarks of the
Object Management Group, Inc.
Rational Software is a trademark of Rational Software Corporation.
ISSUE REPORTING
All OMG specifications are subject to continuous review and improvement. As part of this process we encourage readers
to report any ambiguities, inconsistencies, or inaccuracies they may find by completing the Issue Reporting Form at
http://www.omg.org/library/issuerpt.htm.
Foreword
The Unified Modeling Language (UML) is a graphical language for visualizing,
specifying, constructing, and documenting the artifacts of a software-intensive system.
The UML offers a standard way to write a system's blueprints, including conceptual
things such as business processes and system functions as well as concrete things such
as programming language statements, database schemas, and reusable software
components.
The UML represents the culmination of best practices in practical object-oriented
modeling. The UML is the product of several years of hard work, in which we focused
on bringing about a unification of the methods most used around the world, the
adoption of good ideas from many quarters of the industry, and, above all, a
concentrated effort to make things simple.
We mean "we" in the most general sense. The three of us started the UML effort at
Rational and were its original chief methodologists, but the final product was a team
effort among many UML partners under the sponsorship of OMG. All partners came
with their own perspectives, areas of concern, and areas of interest; this diversity of
experience and viewpoints has enriched and strengthened the final result. We extend
our personal thanks to everyone who was a part of making the UML a reality. We
would like to thank Rational for giving us the opportunity to work freely so that we
might focus on unification, and we want to recognize all the other companies
representing the UML partners for seeing the importance of the UML to the industry as
a whole and giving their representatives time to work on this project. We must also
thank the OMG for providing the framework under which we could bring together
many diverse opinions to develop a consensus result. We expect that OMG’s ownership
of the UML standard and the public’s free access to it will ensure the widespread use
and advancement of UML technology over the coming years.
In an effort that involved so many companies and individuals with so many agendas,
one would think that the resulting product would be the software equivalent of a camel:
a most dysfunctional-looking animal that appears to have been the work product of an
OMG-UML V1.3
March 2000
ill-formed committee of misfits. The UML most decidedly is not a random collection
of political compromises. If anything, because of the focus we placed upon creating a
complete and formal model, the UML is coherent and has harmony of design.
In this context it is also exciting to point out that the UML was developed alongside,
and with the full collaboration, of the OMG's Meta-Object Facility (MOF) team. The
MOF, which represents the state of the art in distributed object repository architectures,
is OMG's adopted technology for modeling and representing metadata (including the
UML metamodel) as CORBA objects. The UML and MOF standards are key building
blocks of OMG's development environment for building and deploying distributed
object systems.
It is a very real sign of maturity of the industry that the UML exists as a standard. At
a time when software is increasingly more complex and more central to the mission of
companies and countries, the UML comes at the right time to help organizations deal
with this complexity. Already, without a lot of the fanfare or hype sometimes
associated with programming languages, the UML is in use in hundreds (if not
thousands) of projects around the world, a sign that it is part of the mainstream of
engineering software.
Grady Booch
Ivar Jacobson
Jim Rumbaugh
Rational Software Corporation
March 2000
OMG-UML V1.3
March 2000
Table of Contents
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
xxv
1. UML Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1-1
1.1
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1-1
1.2
Primary Artifacts of the UML . . . . . . . . . . . . . . . . . . . . . .
1.2.1 UML-defining Artifacts . . . . . . . . . . . . . . . . . .
1.2.2 Development Project Artifacts . . . . . . . . . . . . .
1-2
1-2
1-2
1.3
Motivation to Define the UML . . . . . . . . . . . . . . . . . . . . . .
1.3.1 Why We Model. . . . . . . . . . . . . . . . . . . . . . . . .
1.3.2 Industry Trends in Software . . . . . . . . . . . . . . .
1.3.3 Prior to Industry Convergence . . . . . . . . . . . . .
1-3
1-3
1-3
1-4
1.4
Goals of the UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1-4
1.5
Scope of the UML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.5.1 Outside the Scope of the UML . . . . . . . . . . . . .
1-6
1-7
1.5.1.1 Programming Languages . . . . . . . . . . . . .
1.5.1.2 Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.5.1.3 Process . . . . . . . . . . . . . . . . . . . . . . . . . . .
1-7
1-7
1-8
1.5.2
1.5.3
1.6
Comparing UML to Other Modeling Languages 1-8
Features of the UML. . . . . . . . . . . . . . . . . . . . . 1-9
UML - Past, Present, and Future . . . . . . . . . . . . . . . . . . . . 1-11
1.6.1 UML 0.8 - 0.91 . . . . . . . . . . . . . . . . . . . . . . . . . 1-11
1.6.1.1 Precursors to UML . . . . . . . . . . . . . . . . .
1.6.1.2 Booch, Rumbaugh, and Jacobson Join
Forces . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.6.2
1.6.3
1-11
UML Partners . . . . . . . . . . . . . . . . . . . . . . . . . 1-12
UML - Present and Future . . . . . . . . . . . . . . . . 1-13
1.6.3.1 Standardization of the UML . . . . . . . . . .
1.6.3.2 Revision of the UML . . . . . . . . . . . . . . . .
OMG-UML V1.3
1-11
March 2000
1-13
1-14
i
Contents
1.6.3.3 Industrialization . . . . . . . . . . . . . . . . . . . .
1.6.3.4 Future UML Evolution . . . . . . . . . . . . . .
1-14
1-14
2. UML Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2-1
2.1
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.1 Purpose and Scope . . . . . . . . . . . . . . . . . . . . . .
2.1.2 Approach . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2-2
2-2
2-2
2.2
Language Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.1 Four-Layer Metamodel Architecture . . . . . . . .
2-3
2-3
2.2.1.1 Architectural Alignment with the MOF
Meta-Metamodel . . . . . . . . . . . . . . . . . . .
2-5
Package Structure . . . . . . . . . . . . . . . . . . . . . . .
2-5
Language Formalism . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.1 Levels of Formalism . . . . . . . . . . . . . . . . . . . . .
2.3.2 Package Specification Structure . . . . . . . . . . . .
2-7
2-8
2-8
2.3.2.1 Abstract Syntax . . . . . . . . . . . . . . . . . . . .
2.3.2.2 Well-Formedness Rules . . . . . . . . . . . . .
2.3.2.3 Semantics . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.2.4 Standard Elements . . . . . . . . . . . . . . . . . .
2.3.2.5 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2-9
2-9
2-9
2-9
2-10
2.2.2
2.3
2.3.3
2.3.4
2.3.5
Use of a Constraint Language. . . . . . . . . . . . . . 2-10
Use of Natural Language . . . . . . . . . . . . . . . . . 2-10
Naming Conventions and Typography . . . . . . . 2-10
2.4
Foundation Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-11
2.5
Core . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-12
2.5.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-12
2.5.2 Abstract Syntax . . . . . . . . . . . . . . . . . . . . . . . . 2-12
2.5.2.1 Abstraction . . . . . . . . . . . . . . . . . . . . . . .
2.5.2.2 Association . . . . . . . . . . . . . . . . . . . . . . .
2.5.2.3 AssociationClass . . . . . . . . . . . . . . . . . . .
2.5.2.4 AssociationEnd . . . . . . . . . . . . . . . . . . . .
2.5.2.5 Attribute . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5.2.6 BehavioralFeature . . . . . . . . . . . . . . . . . .
2.5.2.7 Binding . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5.2.8 Class . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5.2.9 Classifier . . . . . . . . . . . . . . . . . . . . . . . . .
2.5.2.10 Comment . . . . . . . . . . . . . . . . . . . . . . . .
2.5.2.11 Component . . . . . . . . . . . . . . . . . . . . . .
2.5.2.12 Constraint . . . . . . . . . . . . . . . . . . . . . . .
2.5.2.13 DataType . . . . . . . . . . . . . . . . . . . . . . . .
2.5.2.14 Dependency . . . . . . . . . . . . . . . . . . . . . .
2.5.2.15 Element . . . . . . . . . . . . . . . . . . . . . . . . .
2.5.2.16 ElementOwnership . . . . . . . . . . . . . . . .
2.5.2.17 ElementResidence . . . . . . . . . . . . . . . . .
2.5.2.18 Feature . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5.2.19 Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5.2.20 GeneralizableElement . . . . . . . . . . . . . .
2.5.2.21 Generalization . . . . . . . . . . . . . . . . . . . .
ii
OMG-UML V1.3
March 2000
2-17
2-19
2-20
2-20
2-23
2-25
2-25
2-26
2-27
2-28
2-29
2-30
2-31
2-31
2-31
2-32
2-32
2-33
2-33
2-34
2-35
Contents
2.5.2.22 Interface . . . . . . . . . . . . . . . . . . . . . . . . .
2.5.2.23 Method . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5.2.24 ModelElement . . . . . . . . . . . . . . . . . . . .
2.5.2.25 Namespace . . . . . . . . . . . . . . . . . . . . . . .
2.5.2.26 Node . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5.2.27 Operation . . . . . . . . . . . . . . . . . . . . . . . .
2.5.2.28 Parameter . . . . . . . . . . . . . . . . . . . . . . . .
2.5.2.29 Permission . . . . . . . . . . . . . . . . . . . . . . .
2.5.2.30 PresentationElement . . . . . . . . . . . . . . .
2.5.2.31 Relationship . . . . . . . . . . . . . . . . . . . . . .
2.5.2.32 StructuralFeature . . . . . . . . . . . . . . . . . .
2.5.2.33 TemplateParameter . . . . . . . . . . . . . . . .
2.5.2.34 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5.3
2-37
2-38
2-38
2-40
2-41
2-41
2-43
2-43
2-44
2-44
2-44
2-45
2-45
Well-Formedness Rules . . . . . . . . . . . . . . . . . . 2-46
2.5.3.1 Association . . . . . . . . . . . . . . . . . . . . . . . 2-46
2.5.3.2 AssociationClass . . . . . . . . . . . . . . . . . . . 2-47
2.5.3.3 AssociationEnd . . . . . . . . . . . . . . . . . . . . 2-47
2.5.3.4 Attribute . . . . . . . . . . . . . . . . . . . . . . . . . . 2-47
2.5.3.5 BehavioralFeature . . . . . . . . . . . . . . . . . . 2-48
2.5.3.6 Binding . . . . . . . . . . . . . . . . . . . . . . . . . . 2-48
2.5.3.7 Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-49
2.5.3.8 Classifier . . . . . . . . . . . . . . . . . . . . . . . . . 2-49
2.5.3.9 Comment . . . . . . . . . . . . . . . . . . . . . . . . . 2-52
2.5.3.10 Component . . . . . . . . . . . . . . . . . . . . . . 2-52
2.5.3.11 Constraint . . . . . . . . . . . . . . . . . . . . . . . 2-53
2.5.3.12 DataType . . . . . . . . . . . . . . . . . . . . . . . . 2-53
2.5.3.13 Dependency . . . . . . . . . . . . . . . . . . . . . . 2-53
2.5.3.14 Element . . . . . . . . . . . . . . . . . . . . . . . . . 2-53
2.5.3.15 ElementOwnership . . . . . . . . . . . . . . . . 2-53
2.5.3.16 ElementResidence . . . . . . . . . . . . . . . . . 2-53
2.5.3.17 Feature . . . . . . . . . . . . . . . . . . . . . . . . . . 2-54
2.5.3.18 GeneralizableElement . . . . . . . . . . . . . . 2-54
2.5.3.19 Generalization . . . . . . . . . . . . . . . . . . . . 2-54
2.5.3.20 ImplementationClass (stereotype of Class) 2-54
2.5.3.21 Interface . . . . . . . . . . . . . . . . . . . . . . . . . 2-55
2.5.3.22 Method . . . . . . . . . . . . . . . . . . . . . . . . . . 2-55
2.5.3.23 ModelElement . . . . . . . . . . . . . . . . . . . . 2-56
2.5.3.24 Namespace . . . . . . . . . . . . . . . . . . . . . . . 2-57
2.5.3.25 Node . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-57
2.5.3.26 Operation . . . . . . . . . . . . . . . . . . . . . . . . 2-58
2.5.3.27 Parameter . . . . . . . . . . . . . . . . . . . . . . . . 2-58
2.5.3.28 PresentationElement . . . . . . . . . . . . . . . 2-58
2.5.3.29 StructuralFeature . . . . . . . . . . . . . . . . . . 2-58
2.5.3.30 Trace . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-58
2.5.3.31 Type (stereotype of Class) . . . . . . . . . . . 2-58
2.5.3.32 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-59
2.5.4
Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-59
2.5.4.1 Association . . . . . . . . . . . . . . . . . . . . . . .
2.5.4.2 AssociationClass . . . . . . . . . . . . . . . . . . .
2.5.4.3 Class . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5.4.4 Inheritance . . . . . . . . . . . . . . . . . . . . . . . .
2.5.4.5 Instantiation . . . . . . . . . . . . . . . . . . . . . . .
2.5.4.6 Interface . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5.4.7 Operation . . . . . . . . . . . . . . . . . . . . . . . . .
OMG-UML V.13
March 2000
2-59
2-61
2-61
2-63
2-64
2-65
2-65
iii
Contents
2.5.4.8 PresentationElement . . . . . . . . . . . . . . . .
2.5.4.9 Template . . . . . . . . . . . . . . . . . . . . . . . . .
2.5.4.10 Miscellaneous . . . . . . . . . . . . . . . . . . . .
2.6
Extension Mechanisms. . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-67
2.6.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-67
2.6.2 Abstract Syntax . . . . . . . . . . . . . . . . . . . . . . . . 2-69
2.6.2.1 Constraint . . . . . . . . . . . . . . . . . . . . . . . .
2.6.2.2 ModelElement (as extended) . . . . . . . . . .
2.6.2.3 Stereotype . . . . . . . . . . . . . . . . . . . . . . . .
2.6.2.4 TaggedValue . . . . . . . . . . . . . . . . . . . . . .
2.6.3
2.6.4
2.6.5
OMG-UML V1.3
2-74
2-74
2-75
2-75
Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-75
Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-76
Data Types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-77
2.7.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-77
2.7.2 Abstract Syntax . . . . . . . . . . . . . . . . . . . . . . . . 2-77
2.7.2.1 ActionExpression . . . . . . . . . . . . . . . . . .
2.7.2.2 AggregationKind . . . . . . . . . . . . . . . . . . .
2.7.2.3 ArgListsExpression . . . . . . . . . . . . . . . . .
2.7.2.4 Boolean . . . . . . . . . . . . . . . . . . . . . . . . . .
2.7.2.5 BooleanExpression . . . . . . . . . . . . . . . . .
2.7.2.6 CallConcurrencyKind . . . . . . . . . . . . . . .
2.7.2.7 ChangeableKind . . . . . . . . . . . . . . . . . . .
2.7.2.8 Expression . . . . . . . . . . . . . . . . . . . . . . . .
2.7.2.9 Geometry . . . . . . . . . . . . . . . . . . . . . . . . .
2.7.2.10 Integer . . . . . . . . . . . . . . . . . . . . . . . . . .
2.7.2.11 IterationExpression . . . . . . . . . . . . . . . .
2.7.2.12 LocationReference . . . . . . . . . . . . . . . . .
2.7.2.13 Mapping . . . . . . . . . . . . . . . . . . . . . . . . .
2.7.2.14 MappingExpression . . . . . . . . . . . . . . . .
2.7.2.15 MessageDirectionKind . . . . . . . . . . . . .
2.7.2.16 Multiplicity. . . . . . . . . . . . . . . . . . . . . . .
2.7.2.17 MultiplicityRange . . . . . . . . . . . . . . . . .
2.7.2.18 Name . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.7.2.19 ObjectSetExpression . . . . . . . . . . . . . . .
2.7.2.20 OrderingKind . . . . . . . . . . . . . . . . . . . . .
2.7.2.21 ParameterDirectionKind . . . . . . . . . . . .
2.7.2.22 ProcedureExpression . . . . . . . . . . . . . . .
2.7.2.23 PseudostateKind . . . . . . . . . . . . . . . . . .
2.7.2.24 ScopeKind . . . . . . . . . . . . . . . . . . . . . . .
2.7.2.25 String . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.7.2.26 Time . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.7.2.27 TimeExpression . . . . . . . . . . . . . . . . . . .
2.7.2.28 TypeExpression . . . . . . . . . . . . . . . . . . .
2.7.2.29 UnlimitedInteger . . . . . . . . . . . . . . . . . .
2.7.2.30 Uninterpreted . . . . . . . . . . . . . . . . . . . . .
2.7.2.31 VisibilityKind . . . . . . . . . . . . . . . . . . . .
iv
2-70
2-71
2-72
2-73
Well-Formedness Rules . . . . . . . . . . . . . . . . . . 2-74
2.6.3.1 Constraint . . . . . . . . . . . . . . . . . . . . . . . .
2.6.3.2 Stereotype . . . . . . . . . . . . . . . . . . . . . . . .
2.6.3.3 ModelElement . . . . . . . . . . . . . . . . . . . . .
2.6.3.4 TaggedValue . . . . . . . . . . . . . . . . . . . . . .
2.7
2-65
2-66
2-66
March 2000
2-78
2-78
2-79
2-79
2-79
2-79
2-80
2-80
2-80
2-81
2-81
2-81
2-81
2-81
2-81
2-81
2-81
2-82
2-82
2-82
2-82
2-83
2-83
2-84
2-84
2-84
2-84
2-84
2-84
2-84
2-85
Contents
2.8
Behavioral Elements Package . . . . . . . . . . . . . . . . . . . . . . 2-85
2.9
Common Behavior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-86
2.9.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-86
2.9.2 Abstract Syntax . . . . . . . . . . . . . . . . . . . . . . . . 2-87
2.9.2.1 Action . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.9.2.2 ActionSequence . . . . . . . . . . . . . . . . . . . .
2.9.2.3 Argument . . . . . . . . . . . . . . . . . . . . . . . . .
2.9.2.4 AttributeLink . . . . . . . . . . . . . . . . . . . . . .
2.9.2.5 CallAction . . . . . . . . . . . . . . . . . . . . . . . .
2.9.2.6 ComponentInstance . . . . . . . . . . . . . . . . .
2.9.2.7 CreateAction . . . . . . . . . . . . . . . . . . . . . .
2.9.2.8 DestroyAction . . . . . . . . . . . . . . . . . . . . .
2.9.2.9 DataValue . . . . . . . . . . . . . . . . . . . . . . . .
2.9.2.10 Exception . . . . . . . . . . . . . . . . . . . . . . . .
2.9.2.11 Instance . . . . . . . . . . . . . . . . . . . . . . . . .
2.9.2.12 Link . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.9.2.13 LinkEnd . . . . . . . . . . . . . . . . . . . . . . . . .
2.9.2.14 LinkObject . . . . . . . . . . . . . . . . . . . . . . .
2.9.2.15 NodeInstance . . . . . . . . . . . . . . . . . . . . .
2.9.2.16 Object . . . . . . . . . . . . . . . . . . . . . . . . . .
2.9.2.17 Reception . . . . . . . . . . . . . . . . . . . . . . . .
2.9.2.18 ReturnAction . . . . . . . . . . . . . . . . . . . . .
2.9.2.19 SendAction . . . . . . . . . . . . . . . . . . . . . .
2.9.2.20 Signal . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.9.2.21 Stimulus . . . . . . . . . . . . . . . . . . . . . . . . .
2.9.2.22 TerminateAction . . . . . . . . . . . . . . . . . .
2.9.2.23 UninterpretedAction . . . . . . . . . . . . . . .
2.9.3
Well-Formedness Rules . . . . . . . . . . . . . . . . . . 2-98
2.9.3.1 Action . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.9.3.2 ActionSequence . . . . . . . . . . . . . . . . . . . .
2.9.3.3 Argument . . . . . . . . . . . . . . . . . . . . . . . . .
2.9.3.4 AssignmentAction . . . . . . . . . . . . . . . . . .
2.9.3.5 AttributeLink . . . . . . . . . . . . . . . . . . . . . .
2.9.3.6 CallAction . . . . . . . . . . . . . . . . . . . . . . . .
2.9.3.7 ComponentInstance . . . . . . . . . . . . . . . . .
2.9.3.8 CreateAction . . . . . . . . . . . . . . . . . . . . . .
2.9.3.9 DestroyAction . . . . . . . . . . . . . . . . . . . . .
2.9.3.10 DataValue . . . . . . . . . . . . . . . . . . . . . . .
2.9.3.11 Exception . . . . . . . . . . . . . . . . . . . . . . . .
2.9.3.12 Instance . . . . . . . . . . . . . . . . . . . . . . . . .
2.9.3.13 Link . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.9.3.14 LinkEnd . . . . . . . . . . . . . . . . . . . . . . . . .
2.9.3.15 LinkObject . . . . . . . . . . . . . . . . . . . . . . .
2.9.3.16 NodeInstance . . . . . . . . . . . . . . . . . . . . .
2.9.3.17 Object . . . . . . . . . . . . . . . . . . . . . . . . . .
2.9.3.18 Reception . . . . . . . . . . . . . . . . . . . . . . . .
2.9.3.19 ReturnAction . . . . . . . . . . . . . . . . . . . . .
2.9.3.20 SendAction . . . . . . . . . . . . . . . . . . . . . .
2.9.3.21 Signal . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.9.3.22 Stimulus . . . . . . . . . . . . . . . . . . . . . . . . .
2.9.3.23 TerminateAction . . . . . . . . . . . . . . . . . .
2.9.3.24 UninterpretedAction . . . . . . . . . . . . . . .
2.9.4
OMG-UML V.13
2-89
2-90
2-90
2-91
2-91
2-91
2-92
2-92
2-92
2-92
2-93
2-93
2-94
2-95
2-95
2-95
2-95
2-96
2-96
2-97
2-97
2-98
2-98
2-98
2-98
2-98
2-98
2-98
2-98
2-99
2-99
2-99
2-99
2-99
2-99
2-101
2-101
2-101
2-101
2-102
2-102
2-102
2-102
2-102
2-102
2-103
2-103
Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-103
March 2000
v
Contents
2.9.4.25 Object and DataValue . . . . . . . . . . . . . .
2.9.4.26 Link . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.9.4.27 Signal, Exception and Stimulus . . . . . .
2.9.4.28 Action . . . . . . . . . . . . . . . . . . . . . . . . . .
2.10
2-103
2-104
2-104
2-105
Collaborations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-106
2.10.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-106
2.10.2 Abstract Syntax . . . . . . . . . . . . . . . . . . . . . . . . 2-106
2.10.2.1 AssociationEndRole . . . . . . . . . . . . . . .
2.10.2.2 AssociationRole . . . . . . . . . . . . . . . . . . .
2.10.2.3 ClassifierRole . . . . . . . . . . . . . . . . . . . .
2.10.2.4 Collaboration . . . . . . . . . . . . . . . . . . . . .
2.10.2.5 Interaction . . . . . . . . . . . . . . . . . . . . . . .
2.10.2.6 Message . . . . . . . . . . . . . . . . . . . . . . . . .
2-107
2-108
2-108
2-109
2-110
2-110
2.10.3 Well-Formedness Rules . . . . . . . . . . . . . . . . . . 2-111
2.10.3.1 AssociationEndRole . . . . . . . . . . . . . . .
2.10.3.2 AssociationRole . . . . . . . . . . . . . . . . . . .
2.10.3.3 ClassifierRole . . . . . . . . . . . . . . . . . . . . .
2.10.3.4 Collaboration . . . . . . . . . . . . . . . . . . . . .
2.10.3.5 Interaction . . . . . . . . . . . . . . . . . . . . . . .
2.10.3.6 Message . . . . . . . . . . . . . . . . . . . . . . . . .
2-111
2-111
2-112
2-112
2-114
2-114
2.10.4 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-115
2.10.4.1 Collaboration . . . . . . . . . . . . . . . . . . . . . 2-115
2.10.4.2 Interaction . . . . . . . . . . . . . . . . . . . . . . . 2-118
2.10.5 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-119
2.11
Use Cases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-119
2.11.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-119
2.11.2 Abstract Syntax . . . . . . . . . . . . . . . . . . . . . . . . 2-120
2.11.2.1 Actor . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.11.2.2 Extend . . . . . . . . . . . . . . . . . . . . . . . . . .
2.11.2.3 ExtensionPoint . . . . . . . . . . . . . . . . . . .
2.11.2.4 Include . . . . . . . . . . . . . . . . . . . . . . . . . .
2.11.2.5 UseCase . . . . . . . . . . . . . . . . . . . . . . . . .
2.11.2.6 UseCaseInstance . . . . . . . . . . . . . . . . . .
2-120
2-121
2-121
2-122
2-122
2-123
2.11.3 Well-FormednessRules . . . . . . . . . . . . . . . . . . . 2-123
2.11.3.1 Actor . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.11.3.2 Extend . . . . . . . . . . . . . . . . . . . . . . . . . .
2.11.3.3 ExtensionPoint . . . . . . . . . . . . . . . . . . .
2.11.3.4 Include . . . . . . . . . . . . . . . . . . . . . . . . . .
2.11.3.5 UseCase . . . . . . . . . . . . . . . . . . . . . . . . .
2.11.3.6 UseCaseInstance . . . . . . . . . . . . . . . . . .
2-123
2-123
2-124
2-124
2-124
2-125
2.11.4 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-125
2.11.4.1 Actor . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-125
2.11.4.2 UseCase . . . . . . . . . . . . . . . . . . . . . . . . . 2-126
2.11.5 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-130
2.12
StateMachines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-130
2.12.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-130
2.12.2 Abstract Syntax . . . . . . . . . . . . . . . . . . . . . . . . 2-131
2.12.2.1 CallEvent . . . . . . . . . . . . . . . . . . . . . . . . 2-132
2.12.2.2 ChangeEvent . . . . . . . . . . . . . . . . . . . . . 2-133
vi
OMG-UML V1.3
March 2000
Contents
2.12.2.3 CompositeState . . . . . . . . . . . . . . . . . . .
2.12.2.4 Event . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.12.2.5 FinalState . . . . . . . . . . . . . . . . . . . . . . . .
2.12.2.6 Guard . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.12.2.7 PseudoState . . . . . . . . . . . . . . . . . . . . . .
2.12.2.8 SignalEvent . . . . . . . . . . . . . . . . . . . . . .
2.12.2.9 SimpleState . . . . . . . . . . . . . . . . . . . . . .
2.12.2.10 State . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.12.2.11 StateMachine . . . . . . . . . . . . . . . . . . . .
2.12.2.12 StateVertex . . . . . . . . . . . . . . . . . . . . .
2.12.2.13 StubState . . . . . . . . . . . . . . . . . . . . . . .
2.12.2.14 SubmachineState . . . . . . . . . . . . . . . . .
2.12.2.15 SynchState . . . . . . . . . . . . . . . . . . . . . .
2.12.2.16 TimeEvent . . . . . . . . . . . . . . . . . . . . . .
2.12.2.17 Transition . . . . . . . . . . . . . . . . . . . . . . .
2-133
2-134
2-134
2-134
2-135
2-136
2-136
2-136
2-137
2-138
2-138
2-139
2-139
2-139
2-140
2.12.3 Well-FormednessRules . . . . . . . . . . . . . . . . . . . 2-140
2.12.3.1 CompositeState . . . . . . . . . . . . . . . . . . .
2.12.3.2 FinalState . . . . . . . . . . . . . . . . . . . . . . . .
2.12.3.3 Guard . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.12.3.4 PseudoState . . . . . . . . . . . . . . . . . . . . . .
2.12.3.5 StateMachine . . . . . . . . . . . . . . . . . . . . .
2.12.3.6 SynchState . . . . . . . . . . . . . . . . . . . . . . .
2.12.3.7 SubmachineState . . . . . . . . . . . . . . . . . .
2.12.3.8 Transition . . . . . . . . . . . . . . . . . . . . . . . .
2-140
2-141
2-141
2-141
2-142
2-143
2-143
2-143
2.12.4 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-144
2.12.4.1 Event . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.12.4.2 State . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.12.4.3 CompositeState . . . . . . . . . . . . . . . . . . .
2.12.4.4 FinalState . . . . . . . . . . . . . . . . . . . . . . . .
2.12.4.5 SubmachineState . . . . . . . . . . . . . . . . . .
2.12.4.6 Transitions . . . . . . . . . . . . . . . . . . . . . . .
2.12.4.7 StateMachine . . . . . . . . . . . . . . . . . . . . .
2.12.4.8 Synch States . . . . . . . . . . . . . . . . . . . . .
2.12.4.9 StubStates . . . . . . . . . . . . . . . . . . . . . . .
2-145
2-145
2-146
2-148
2-148
2-148
2-151
2-153
2-154
2.12.5 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-154
2.12.5.1 Protocol State Machines . . . . . . . . . . . .
2.12.5.2 Example: Modeling Class Behavior . . .
2.12.5.3 Example: State machine refinement . . .
2.12.5.4 Comparison to classical statecharts . . . .
2.13
2-154
2-155
2-156
2-159
Activity Graphs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-160
2.13.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-160
2.13.2 Abstract Syntax . . . . . . . . . . . . . . . . . . . . . . . . 2-160
2.13.2.1 ActivityGraph . . . . . . . . . . . . . . . . . . . .
2.13.2.2 ActionState . . . . . . . . . . . . . . . . . . . . . .
2.13.2.3 CallState . . . . . . . . . . . . . . . . . . . . . . . .
2.13.2.4 ClassifierInState . . . . . . . . . . . . . . . . . . .
2.13.2.5 ObjectFlowState . . . . . . . . . . . . . . . . . . .
2.13.2.6 Partition . . . . . . . . . . . . . . . . . . . . . . . . .
2.13.2.7 SubactivityState . . . . . . . . . . . . . . . . . . .
2-161
2-162
2-163
2-163
2-164
2-164
2-165
2.13.3 Well-Formedness Rules . . . . . . . . . . . . . . . . . . 2-165
2.13.3.1 ActivityGraph . . . . . . . . . . . . . . . . . . . . 2-165
2.13.3.2 ActionState . . . . . . . . . . . . . . . . . . . . . . 2-166
OMG-UML V.13
March 2000
vii
Contents
2.13.3.3 CallState . . . . . . . . . . . . . . . . . . . . . . . .
2.13.3.4 ObjectFlowState . . . . . . . . . . . . . . . . . .
2.13.3.5 PseudoState . . . . . . . . . . . . . . . . . . . . . .
2.13.3.6 SubactivityState . . . . . . . . . . . . . . . . . . .
2-166
2-166
2-167
2-167
2.13.4 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-168
2.13.4.1 ActivityGraph . . . . . . . . . . . . . . . . . . . .
2.13.4.2 ActionState . . . . . . . . . . . . . . . . . . . . . .
2.13.4.3 ObjectFlowState . . . . . . . . . . . . . . . . . .
2.13.4.4 SubactivityState . . . . . . . . . . . . . . . . . . .
2.13.4.5 Transition . . . . . . . . . . . . . . . . . . . . . . . .
2-168
2-168
2-168
2-169
2-169
2.13.5 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-170
2.14
Model Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-171
2.14.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-171
2.14.2 Abstract Syntax . . . . . . . . . . . . . . . . . . . . . . . . 2-171
2.14.2.1 ElementImport . . . . . . . . . . . . . . . . . . . .
2.14.2.2 Model . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.14.2.3 Package . . . . . . . . . . . . . . . . . . . . . . . . .
2.14.2.4 Subsystem . . . . . . . . . . . . . . . . . . . . . . .
2-172
2-173
2-173
2-174
2.14.3 Well-Formedness Rules . . . . . . . . . . . . . . . . . . 2-175
2.14.3.1 ElementImport . . . . . . . . . . . . . . . . . . . . 2-175
2.14.3.2 Model . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-175
2.14.3.3 Package . . . . . . . . . . . . . . . . . . . . . . . . . 2-175
2.14.4 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-178
2.14.4.1 Package . . . . . . . . . . . . . . . . . . . . . . . . . 2-178
2.14.4.2 Subsystem . . . . . . . . . . . . . . . . . . . . . . . 2-180
2.14.4.3 Model . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-182
2.14.5 Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-183
3. UML Notation Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
viii
3-1
3.1
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-4
3.2
Graphs and Their Contents. . . . . . . . . . . . . . . . . . . . . . . . .
3-5
3.3
Drawing Paths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-6
3.4
Invisible Hyperlinks and the Role of Tools . . . . . . . . . . . .
3-7
3.5
Background Information . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5.1 Presentation Options. . . . . . . . . . . . . . . . . . . . .
3-7
3-7
3.6
String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6.3 Presentation Options. . . . . . . . . . . . . . . . . . . . .
3.6.4 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6.5 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-7
3-8
3-8
3-8
3-8
3-8
3.7
Name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.7.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.7.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.7.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-9
3-9
3-9
3-9
OMG-UML V1.3
March 2000
Contents
3.7.4
Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-9
3.8
Label . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.8.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.8.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.8.3 Presentation Options. . . . . . . . . . . . . . . . . . . . .
3.8.4 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-9
3-10
3-10
3-10
3-10
3.9
Keywords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-10
3.10
Expression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.10.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.10.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.10.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.10.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.10.5 OCL Expressions . . . . . . . . . . . . . . . . . . . . . . .
3.10.6 Selected OCL Notation. . . . . . . . . . . . . . . . . . .
3.10.7 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-11
3-11
3-11
3-11
3-12
3-12
3-12
3-12
3.11
Note . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.11.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.11.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.11.3 Presentation Options. . . . . . . . . . . . . . . . . . . . .
3.11.4 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.11.5 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-12
3-13
3-13
3-13
3-13
3-13
3.12
Type-Instance Correspondence. . . . . . . . . . . . . . . . . . . . . . 3-14
3.13
Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.13.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.13.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.13.3 Presentation Options. . . . . . . . . . . . . . . . . . . . .
3.13.4 Style Guidelines . . . . . . . . . . . . . . . . . . . . . . . .
3.13.5 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.13.6 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-15
3-15
3-15
3-16
3-16
3-17
3-18
3.14
Subsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.14.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.14.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.14.3 Presentation Options. . . . . . . . . . . . . . . . . . . . .
3.14.4 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.14.5 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-18
3-18
3-18
3-19
3-20
3-22
3.15
Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.15.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.15.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.15.3 Presentation Options. . . . . . . . . . . . . . . . . . . . .
3-23
3-23
3-23
3-23
OMG-UML V.13
March 2000
ix
Contents
3.15.4 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-24
3.15.5 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-24
3.16
Constraint and Comment . . . . . . . . . . . . . . . . . . . . . . . . . .
3.16.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.16.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.16.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.16.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-25
3-25
3-25
3-26
3-26
3.17
Element Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.17.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.17.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.17.3 Presentation Options. . . . . . . . . . . . . . . . . . . . .
3.17.4 Style Guidelines . . . . . . . . . . . . . . . . . . . . . . . .
3.17.5 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.17.6 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-27
3-27
3-27
3-28
3-28
3-28
3-28
3.18
Stereotypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.18.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.18.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.18.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.18.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-29
3-29
3-29
3-30
3-30
3.19
ClassDiagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.19.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.19.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.19.3 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-31
3-31
3-31
3-31
3.20
Object Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-32
3.21
Classifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-32
3.22
Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-32
3.22.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-32
3.22.2 Basic Notation . . . . . . . . . . . . . . . . . . . . . . . . . 3-33
3.22.3
3.22.4
3.22.5
3.22.6
3.22.2.1 References . . . . . . . . . . . . . . . . . . . . . . .
3-33
Presentation Options. . . . . . . . . . . . . . . . . . . . .
Style Guidelines . . . . . . . . . . . . . . . . . . . . . . . .
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-33
3-33
3-34
3-34
3.23
Name Compartment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-35
3.23.1 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-35
3.23.2 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-35
3.24
ListCompartment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-35
3.24.1 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-35
3.24.1.1 Group properties . . . . . . . . . . . . . . . . . .
3.24.1.2 Compartment name . . . . . . . . . . . . . . . .
x
OMG-UML V1.3
March 2000
3-36
3-36
Contents
3.24.2 Presentation Options. . . . . . . . . . . . . . . . . . . . . 3-36
3.24.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-37
3.24.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-38
3.25
Attribute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.25.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.25.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.25.3 Presentation Options. . . . . . . . . . . . . . . . . . . . .
3.25.4 Style Guidelines . . . . . . . . . . . . . . . . . . . . . . . .
3.25.5 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.25.6 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-38
3-38
3-39
3-40
3-40
3-41
3-41
3.26
Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.26.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.26.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.26.3 Presentation Options. . . . . . . . . . . . . . . . . . . . .
3.26.4 Style Guidelines . . . . . . . . . . . . . . . . . . . . . . . .
3.26.5 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.26.6 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-41
3-41
3-41
3-43
3-44
3-44
3-44
3.27
Type vs. Implementation Class. . . . . . . . . . . . . . . . . . . . . .
3.27.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.27.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.27.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.27.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-44
3-44
3-45
3-46
3-46
3.28
Interfaces
3.28.1
3.28.2
3.28.3
3.28.4
......................................
Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-46
3-46
3-47
3-48
3-48
3.29
Parameterized Class (Template) . . . . . . . . . . . . . . . . . . . . .
3.29.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.29.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.29.3 Presentation Options. . . . . . . . . . . . . . . . . . . . .
3.29.4 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.29.5 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-48
3-48
3-49
3-49
3-50
3-50
3.30
Bound Element. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.30.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.30.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.30.3 Style Guidelines . . . . . . . . . . . . . . . . . . . . . . . .
3.30.4 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.30.5 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-50
3-50
3-51
3-51
3-51
3-51
3.31
Utility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-52
OMG-UML V.13
March 2000
xi
Contents
3.31.1
3.31.2
3.31.3
3.31.4
xii
Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-52
3-52
3-52
3-52
3.32
Metaclass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.32.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.32.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.32.3 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-52
3-52
3-53
3-53
3.33
Enumeration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.33.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.33.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.33.3 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-53
3-53
3-53
3-53
3.34
Stereotype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.34.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.34.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.34.3 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-53
3-53
3-53
3-54
3.35
Powertype. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.35.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.35.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.35.3 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-54
3-54
3-54
3-54
3.36
ClassPathnames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.36.1 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.36.2 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.36.3 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-54
3-54
3-55
3-55
3.37
Accessing or Importing a Package . . . . . . . . . . . . . . . . . . .
3.37.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.37.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.37.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.37.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-55
3-55
3-56
3-57
3-57
3.38
Object. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.38.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.38.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.38.3 Presentation Options. . . . . . . . . . . . . . . . . . . . .
3.38.4 Style Guidelines . . . . . . . . . . . . . . . . . . . . . . . .
3.38.5 Variations . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.38.6 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.38.7 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-57
3-57
3-57
3-58
3-59
3-59
3-59
3-59
3.39
Composite Object. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-60
3.39.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-60
OMG-UML V1.3
March 2000
Contents
3.39.2
3.39.3
3.39.4
3.39.5
3.40
Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Association . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-60
3-60
3-61
3-61
Binary Association . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-61
3.40.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-61
3.40.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-61
3.40.2.1 association name . . . . . . . . . . . . . . . . . .
3.40.2.2 association class symbol . . . . . . . . . . . .
3-61
3-62
3.40.3 Presentation Options. . . . . . . . . . . . . . . . . . . . . 3-62
3.40.4 Style Guidelines . . . . . . . . . . . . . . . . . . . . . . . . 3-62
3.40.5 Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-62
3.40.5.1 Xor-association . . . . . . . . . . . . . . . . . . .
3-62
3.40.6 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-63
3.40.7 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-63
3.41
Association End . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-64
3.41.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-64
3.41.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-64
3.41.2.1 multiplicity . . . . . . . . . . . . . . . . . . . . . .
3.41.2.2 ordering . . . . . . . . . . . . . . . . . . . . . . . . .
3.41.2.3 qualifier . . . . . . . . . . . . . . . . . . . . . . . . .
3.41.2.4 navigability . . . . . . . . . . . . . . . . . . . . . .
3.41.2.5 aggregation indicator . . . . . . . . . . . . . . .
3.41.2.6 rolename . . . . . . . . . . . . . . . . . . . . . . . .
3.41.2.7 interface specifier . . . . . . . . . . . . . . . . .
3.41.2.8 changeability . . . . . . . . . . . . . . . . . . . . .
3.41.2.9 visibility . . . . . . . . . . . . . . . . . . . . . . . . .
3-64
3-64
3-65
3-65
3-65
3-65
3-65
3-66
3-66
Presentation Options. . . . . . . . . . . . . . . . . . . . .
Style Guidelines . . . . . . . . . . . . . . . . . . . . . . . .
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-66
3-67
3-67
3-67
3.42
Multiplicity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.42.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.42.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.42.3 Style Guidelines . . . . . . . . . . . . . . . . . . . . . . . .
3.42.4 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.42.5 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-68
3-68
3-68
3-68
3-68
3-69
3.43
Qualifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.43.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.43.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.43.3 Presentation Options. . . . . . . . . . . . . . . . . . . . .
3.43.4 Style Guidelines . . . . . . . . . . . . . . . . . . . . . . . .
3.43.5 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-69
3-69
3-69
3-70
3-70
3-70
3.41.3
3.41.4
3.41.5
3.41.6
OMG-UML V.13
March 2000
xiii
Contents
3.43.6 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-70
3.44
Association Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.44.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.44.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.44.3 Presentation Options. . . . . . . . . . . . . . . . . . . . .
3.44.4 Style Guidelines . . . . . . . . . . . . . . . . . . . . . . . .
3.44.5 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.44.6 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-70
3-70
3-71
3-71
3-71
3-71
3-72
3.45
N-aryAssociation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.45.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.45.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.45.3 Style Guidelines . . . . . . . . . . . . . . . . . . . . . . . .
3.45.4 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.45.5 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-72
3-72
3-72
3-72
3-72
3-73
3.46
Composition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.46.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.46.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.46.3 Design Guidelines . . . . . . . . . . . . . . . . . . . . . .
3.46.4 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.46.5 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-73
3-73
3-74
3-74
3-75
3-76
3.47
Link . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-76
3.47.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-76
3.47.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-76
3.47.2.1 Implementation stereotypes . . . . . . . . . .
3.47.2.2 N-ary link . . . . . . . . . . . . . . . . . . . . . . . .
3-77
3-77
3.47.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-77
3.47.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-78
xiv
3.48
Generalization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.48.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.48.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.48.3 Presentation Options. . . . . . . . . . . . . . . . . . . . .
3.48.4 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.48.5 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-78
3-78
3-78
3-79
3-80
3-81
3.49
Dependency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.49.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.49.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.49.3 Presentation Options. . . . . . . . . . . . . . . . . . . . .
3.49.4 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.49.5 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-82
3-82
3-82
3-84
3-84
3-85
3.50
Derived Element. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-85
OMG-UML V1.3
March 2000
Contents
3.50.1
3.50.2
3.50.3
3.50.4
3.50.5
Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Style Guidelines . . . . . . . . . . . . . . . . . . . . . . . .
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-85
3-85
3-85
3-86
3-86
3.51
InstanceOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.51.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.51.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.51.3 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-86
3-86
3-86
3-86
3.52
Use Case Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.52.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.52.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.52.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.52.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-87
3-87
3-87
3-88
3-88
3.53
Use Case
3.53.1
3.53.2
3.53.3
3.53.4
3.53.5
......................................
Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Presentation Options. . . . . . . . . . . . . . . . . . . . .
Style Guidelines . . . . . . . . . . . . . . . . . . . . . . . .
Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-89
3-89
3-89
3-89
3-89
3-89
3.54
Actor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.54.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.54.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.54.3 Style Guidelines . . . . . . . . . . . . . . . . . . . . . . . .
3.54.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-90
3-90
3-90
3-90
3-90
3.55
Use Case Relationships . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.55.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.55.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.55.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.55.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-90
3-90
3-91
3-91
3-92
3.56
ActorRelationships. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.56.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.56.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.56.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.56.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3-92
3-92
3-92
3-92
3-93
3.57
Kinds of Interaction Diagrams . . . . . . . . . . . . . . . . . . . . . . 3-93
3.58
Sequence Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-94
3.58.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-94
3.58.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-94
OMG-UML V.13
March 2000
xv
Contents
3.58.3 Presentation Options. . . . . . . . . . . . . . . . . . . . . 3-94
3.58.4 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-96
3.58.5 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-98
3.58.5.1 Sequence diagram . . . . . . . . . . . . . . . . .
3-98
3.59
Object Lifeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-100
3.59.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-100
3.59.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-100
3.59.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-101
3.59.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-101
3.60
Activation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-101
3.60.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-101
3.60.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-101
3.60.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-101
3.60.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-101
3.61
Message and Stimulus . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-102
3.61.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-102
3.61.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-102
3.61.3 Presentation options . . . . . . . . . . . . . . . . . . . . . 3-102
3.61.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-104
3.62
Transition Times . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-104
3.62.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-104
3.62.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-104
3.62.3 Presentation Options. . . . . . . . . . . . . . . . . . . . . 3-104
3.62.4 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-104
3.62.5 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-105
3.63
Collaboration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-105
3.63.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-105
3.63.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-106
3.63.3 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-107
3.64
Collaboration Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-107
3.64.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-107
3.64.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-107
3.64.2.1 Instance level . . . . . . . . . . . . . . . . . . . . . 3-108
3.64.2.2 Specification level . . . . . . . . . . . . . . . . . 3-108
3.64.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-109
3.64.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-110
3.65
xvi
OMG-UML V1.3
Pattern Structure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-110
3.65.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-110
3.65.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-111
3.65.3 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-112
March 2000
Contents
3.66
Collaboration Contents. . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-112
3.66.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-112
3.66.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-113
3.66.3 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-113
3.67
Interactions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.67.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.67.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.67.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.68
Collaboration Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-114
3.68.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-114
3.68.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-115
3.68.3 Presentation options . . . . . . . . . . . . . . . . . . . . . 3-115
3.68.4 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-116
3.68.5 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-116
3.69
Multiobject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-117
3.69.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-117
3.69.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-117
3.69.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-118
3.69.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-118
3.70
Active object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-118
3.70.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-118
3.70.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-118
3.70.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-119
3.70.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-119
3.71
Message and Stimulus . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-120
3.71.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-120
3.71.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-120
3.71.2.1 Control flow type . . . . . . . . . . . . . . . . . .
3.71.2.2 Arrow label . . . . . . . . . . . . . . . . . . . . . .
3.71.2.3 Predecessor . . . . . . . . . . . . . . . . . . . . . .
3.71.2.4 Sequence expression . . . . . . . . . . . . . . .
3.71.2.5 Signature . . . . . . . . . . . . . . . . . . . . . . . .
3-113
3-113
3-114
3-114
3-120
3-121
3-121
3-121
3-122
3.71.3 Presentation Options. . . . . . . . . . . . . . . . . . . . . 3-123
3.71.4 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-123
3.71.5 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-124
3.72
OMG-UML V.13
Creation/Destruction Markers . . . . . . . . . . . . . . . . . . . . . . 3-125
3.72.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-125
3.72.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-125
3.72.3 Presentation options . . . . . . . . . . . . . . . . . . . . . 3-125
3.72.4 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-125
3.72.5 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-125
March 2000
xvii
Contents
3.73
Statechart Diagram. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-126
3.73.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-126
3.73.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-126
3.73.3 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-127
3.74
State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-127
3.74.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-127
3.74.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-128
3.74.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-129
3.74.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-129
3.75
Composite States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-130
3.75.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-130
3.75.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-130
3.75.3 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-131
3.75.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-132
3.76
Events. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-132
3.76.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-132
3.76.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-133
3.76.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-134
3.76.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-134
3.77
Simple Transitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-135
3.77.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-135
3.77.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-135
3.77.2.1 Transition times . . . . . . . . . . . . . . . . . . . 3-135
3.77.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-136
3.77.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-136
3.78
Transitions to and from Concurrent States . . . . . . . . . . . . . 3-136
3.78.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-136
3.78.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-136
3.78.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-137
3.78.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-137
3.79
Transitions to and from Composite States . . . . . . . . . . . . .
3.79.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.79.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.79.3 Presentation Options. . . . . . . . . . . . . . . . . . . . .
3-137
3-137
3-137
3-138
3.79.3.1 Stubbed transitions . . . . . . . . . . . . . . . . 3-138
3.79.4 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-139
3.79.5 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-140
3.80
xviii
OMG-UML V1.3
Factored Transition Paths . . . . . . . . . . . . . . . . . . . . . . . . . . 3-140
3.80.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-140
3.80.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-140
March 2000
Contents
3.80.3 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-141
3.81
Submachine States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-142
3.81.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-142
3.81.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-142
3.81.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-143
3.81.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-144
3.82
Synch States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-144
3.82.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-144
3.82.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-144
3.82.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-145
3.82.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-145
3.83
Activity Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-145
3.83.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-145
3.83.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-146
3.83.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-147
3.83.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-148
3.84
Action State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.84.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.84.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.84.3 Presentation options . . . . . . . . . . . . . . . . . . . . .
3.84.4 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.84.5 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.85
Subactivity State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-149
3.85.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-149
3.85.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-149
3.85.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-149
3.85.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-149
3.86
Decisions
3.86.1
3.86.2
3.86.3
3.86.4
3.87
Swimlanes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-151
3.87.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-151
3.87.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-151
3.87.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-152
3.87.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-152
3.88
Action-Object Flow Relationships . . . . . . . . . . . . . . . . . . . 3-153
3.88.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-153
OMG-UML V.13
3-148
3-148
3-148
3-148
3-148
3-149
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-150
Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-150
Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-150
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-150
Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-151
March 2000
xix
Contents
3.88.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-153
3.88.2.1 Object responsible for an action . . . . . . 3-153
3.88.2.2 Object flow . . . . . . . . . . . . . . . . . . . . . . 3-153
3.88.2.3 Object in state . . . . . . . . . . . . . . . . . . . . 3-153
3.88.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-154
3.88.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-154
3.89
Control Icons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-155
3.89.1 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-155
3.89.1.1 Signal receipt . . . . . . . . . . . . . . . . . . . . . 3-155
3.89.1.2 Signal sending . . . . . . . . . . . . . . . . . . . . 3-155
3.89.1.3 Deferred events . . . . . . . . . . . . . . . . . . . 3-156
3.89.2 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-157
3.90
Synch States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-158
3.91
Dynamic Invocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-158
3.91.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-158
3.91.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-158
3.91.3 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-159
3.92
Conditional Forks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-159
3.93
Component Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-159
3.93.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-159
3.93.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-159
3.93.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-160
3.93.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-160
3.94
Deployment Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-161
3.94.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-161
3.94.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-161
3.94.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-162
3.94.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-162
3.95
Node. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-162
3.95.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-162
3.95.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-163
3.95.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-163
3.95.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-164
3.96
Component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-164
3.96.1 Semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-164
3.96.2 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-165
3.96.3 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-166
3.96.4 Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-166
4. UML Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1
xx
OMG-UML V1.3
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
March 2000
4-1
4-1
Contents
4.2
Summary of Profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.1 TaggedValues . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.2 Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.3 Prerequisite Profiles . . . . . . . . . . . . . . . . . . . . .
4-2
4-3
4-3
4-3
4.3
Stereotypes and Notation . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.1 Model, Package, and Subsystem Stereotypes . .
4-3
4-3
4.3.1.1 Use Case . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.1.2 Analysis . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.1.3 Design . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.1.4 Implementation . . . . . . . . . . . . . . . . . . . .
4.3.1.5 Notation . . . . . . . . . . . . . . . . . . . . . . . . . .
4-4
4-4
4-4
4-4
4-5
Class Stereotypes . . . . . . . . . . . . . . . . . . . . . . .
4-5
4.3.2.1 Entity . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.2.2 Control . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.2.3 Boundary . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.2.4 Notation . . . . . . . . . . . . . . . . . . . . . . . . . .
4-6
4-6
4-6
4-6
Association Stereotypes . . . . . . . . . . . . . . . . . .
4-6
4.3.3.1 Communicate . . . . . . . . . . . . . . . . . . . . . .
4.3.3.2 Subscribe . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.3.3 Notation . . . . . . . . . . . . . . . . . . . . . . . . . .
4-7
4-7
4-7
4.4
Well-Formedness Rules . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4.1 Generalization . . . . . . . . . . . . . . . . . . . . . . . . .
4.4.2 Association . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4.3 Model, Package, and Subsystem Containment .
4-7
4-7
4-7
4-8
4.5
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4-8
4.6
Summary of Profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.6.1 Tagged Values. . . . . . . . . . . . . . . . . . . . . . . . . .
4.6.2 Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.6.3 Prerequisite Profiles . . . . . . . . . . . . . . . . . . . . .
4-9
4-9
4-9
4-9
4.7
Stereotypes and Notation . . . . . . . . . . . . . . . . . . . . . . . . . . 4-10
4.7.1 Model, Package, and Subsystem Stereotypes . . 4-10
4.3.2
4.3.3
4.7.1.1 Use Case . . . . . . . . . . . . . . . . . . . . . . . . .
4.7.1.2 Object . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.7.1.3 Organization Unit . . . . . . . . . . . . . . . . . .
4.7.1.4 Work Unit . . . . . . . . . . . . . . . . . . . . . . . .
4.7.1.5 Notation . . . . . . . . . . . . . . . . . . . . . . . . . .
4.7.2
Class Stereotypes . . . . . . . . . . . . . . . . . . . . . . . 4-11
4.7.2.1 Worker . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.7.2.2 Case Worker . . . . . . . . . . . . . . . . . . . . . .
4.7.2.3 Internal Worker . . . . . . . . . . . . . . . . . . . .
4.7.2.4 Entity . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.7.2.5 Notation . . . . . . . . . . . . . . . . . . . . . . . . . .
4.7.2.6 Example of Alternate Notations . . . . . . .
4.7.3
4-11
4-11
4-11
4-11
4-12
4-12
Association Stereotypes . . . . . . . . . . . . . . . . . . 4-13
4.7.3.1 Communicate . . . . . . . . . . . . . . . . . . . . . .
4.7.3.2 Subscribe . . . . . . . . . . . . . . . . . . . . . . . . .
4.7.3.3 Notation . . . . . . . . . . . . . . . . . . . . . . . . . .
OMG-UML V.13
4-10
4-10
4-10
4-10
4-11
March 2000
4-13
4-13
4-13
xxi
Contents
4.8
Well-Formedness Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-13
4.8.1 Generalization . . . . . . . . . . . . . . . . . . . . . . . . . 4-13
4.8.2 Association . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-13
5. UMLCORBAfacility Interface
Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1.1 Tool Sharing Options . . . . . . . . . . . . . . . . . . . .
5-1
5-2
5.1.1.1 Model Transfer . . . . . . . . . . . . . . . . . . . .
5.1.1.2 General-purpose Repository . . . . . . . . . .
5.1.1.3 UML Facility . . . . . . . . . . . . . . . . . . . . . .
5-2
5-2
5-2
Mapping of UML Semantics to Facility Interfaces . . . . . .
5.2.1 Transformation of UML Semantics Metamodel
into Interfaces Metamodel . . . . . . . . . . . . . . . .
5-3
5.2.1.1 Transformation for Association Classes .
5-4
Mapping from MOF to IDL . . . . . . . . . . . . . . .
MOF Generic Interfaces . . . . . . . . . . . . . . . . . .
5-4
5-4
5.3
Facility Implementation Requirements . . . . . . . . . . . . . . .
5-5
5.4
IDL Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-5
5.4.1 Reflective . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-5
5.4.2 Foundation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-8
5.4.3 BehavioralElements . . . . . . . . . . . . . . . . . . . . . 5-57
5.4.4 ModelManagement . . . . . . . . . . . . . . . . . . . . . . 5-151
5.2
5.2.2
5.2.3
6. UML XMI DTD Specification . . . . . . . . . . . . . . . . . . . . . . .
5-3
6-1
6.1
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6-1
6.2
Physical Metamodel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.1 Names. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.2 Additions . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2.3 Association Classes . . . . . . . . . . . . . . . . . . . . .
6.2.4 MOF stereotypes . . . . . . . . . . . . . . . . . . . . . . .
6-2
6-2
6-2
6-2
6-2
6.3
UML XMI DTD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-21
7. Object Constraint Language Specification . . . . . . . . . . . . .
xxii
5-1
7-1
7.1
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.1.1 Why OCL? . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.1.2 Where to Use OCL . . . . . . . . . . . . . . . . . . . . . .
7-1
7-2
7-3
7.2
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2.1 Legend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2.2 Example Class Diagram . . . . . . . . . . . . . . . . . .
7-3
7-3
7-3
7.3
Connection with the UML Metamodel. . . . . . . . . . . . . . . .
7.3.1 Self . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7-4
7-4
OMG-UML V1.3
March 2000
Contents
7.3.2
7.3.3
7.3.4
7.3.5
Specifying the UML context. . . . . . . . . . . . . . .
Invariants . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Pre- and Postconditions . . . . . . . . . . . . . . . . . .
General Expressions . . . . . . . . . . . . . . . . . . . . .
7-4
7-5
7-5
7-6
7.4
Basic Values and Types . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-6
7.4.1 Types from the UML Model . . . . . . . . . . . . . . . 7-7
7.4.2 Enumeration Types . . . . . . . . . . . . . . . . . . . . . . 7-7
7.4.3 Let Expression . . . . . . . . . . . . . . . . . . . . . . . . . 7-8
7.4.4 Type Conformance . . . . . . . . . . . . . . . . . . . . . . 7-8
7.4.5 Re-typing or Casting. . . . . . . . . . . . . . . . . . . . . 7-9
7.4.6 Precedence Rules . . . . . . . . . . . . . . . . . . . . . . . 7-9
7.4.7 Use of Infix Operators . . . . . . . . . . . . . . . . . . . 7-10
7.4.8 Comment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-10
7.4.9 Undefined Values . . . . . . . . . . . . . . . . . . . . . . . 7-10
7.5
Objects and Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.5.1 Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.5.2 Properties: Attributes . . . . . . . . . . . . . . . . . . . .
7.5.3 Properties: Operations . . . . . . . . . . . . . . . . . . .
7.5.4 Properties: Association Ends and Navigation .
7-11
7-11
7-11
7-11
7-12
7.5.4.1 Missing Rolenames . . . . . . . . . . . . . . . . .
7.5.4.2 Navigation over Associations with
Multiplicity Zero or One . . . . . . . . . . . . .
7.5.4.3 Combining Properties . . . . . . . . . . . . . . .
7-13
Navigation to Association Classes . . . . . . . . . .
Navigation from Association Classes . . . . . . . .
Navigation through Qualified Associations . . .
Using Pathnames for Packages . . . . . . . . . . . . .
Accessing overridden properties of supertypes.
Predefined properties on All Objects . . . . . . . .
Features on Classes Themselves. . . . . . . . . . . .
Collections . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Collections of Collections . . . . . . . . . . . . . . . .
Collection Type Hierarchy and Type
Conformance Rules . . . . . . . . . . . . . . . . . . . . .
7.5.15 Previous Values in Postconditions . . . . . . . . . .
7-14
7-15
7-16
7-16
7-16
7-17
7-18
7-19
7-20
7.5.5
7.5.6
7.5.7
7.5.8
7.5.9
7.5.10
7.5.11
7.5.12
7.5.13
7.5.14
7.6
7-20
7-21
Collection Operations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-22
7.6.1 Select and Reject Operations . . . . . . . . . . . . . . 7-22
7.6.2 Collect Operation . . . . . . . . . . . . . . . . . . . . . . . 7-24
7.6.2.1 Shorthand for Collect . . . . . . . . . . . . . . .
7.6.3
7.6.4
7.6.5
OMG-UML V.13
7-13
7-14
7-24
ForAll Operation . . . . . . . . . . . . . . . . . . . . . . . 7-25
Exists Operation . . . . . . . . . . . . . . . . . . . . . . . . 7-26
Iterate Operation. . . . . . . . . . . . . . . . . . . . . . . . 7-26
March 2000
xxiii
Contents
7.7
The Standard OCL Package . . . . . . . . . . . . . . . . . . . . . . . . 7-27
7.8
Predefined OCL Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-28
7.8.1 Basic Types. . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-28
7.8.1.1 OclType . . . . . . . . . . . . . . . . . . . . . . . . . .
7.8.1.2 OclAny . . . . . . . . . . . . . . . . . . . . . . . . . .
7.8.1.3 OclState . . . . . . . . . . . . . . . . . . . . . . . . . .
7.8.1.4 OclExpression . . . . . . . . . . . . . . . . . . . . .
7.8.1.5 Real . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.8.1.6 Integer . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.8.1.7 String . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.8.1.8 Boolean . . . . . . . . . . . . . . . . . . . . . . . . . .
7.8.1.9 Enumeration . . . . . . . . . . . . . . . . . . . . . .
7.8.2
Collection-Related Types . . . . . . . . . . . . . . . . . 7-37
7.8.2.1 Collection . . . . . . . . . . . . . . . . . . . . . . . .
7.8.2.2 Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.8.2.3 Bag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.8.2.4 Sequence . . . . . . . . . . . . . . . . . . . . . . . . .
7.9
7-28
7-29
7-30
7-31
7-31
7-33
7-35
7-35
7-36
7-37
7-40
7-43
7-46
Grammar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-50
Appendix A - Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A-1
Glossary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Glossary-1
xxiv
OMG-UML V1.3
March 2000
Preface
About the Object Management Group (OMG)
The Object Management Group, Inc. (OMG) is an international organization supported
by over 800 members, including information system vendors, software developers and
users. Founded in 1989, the OMG promotes the theory and practice of object-oriented
technology in software development. The organization's charter includes the
establishment of industry guidelines and object management specifications to provide a
common framework for application development. Primary goals are the reusability,
portability, and interoperability of object-based software in distributed, heterogeneous
environments. Conformance to these specifications will make it possible to develop a
heterogeneous applications environment across all major hardware platforms and
operating systems.
OMG's objectives are to foster the growth of object technology and influence its
direction by establishing the Object Management Architecture (OMA). The OMA
provides the conceptual infrastructure upon which all OMG specifications are based.
Associated OMG Documents
The CORBA documentation set includes the following:
• CORBA: Common Object Request Broker Architecture and Specification
contains the architecture and specifications for the Object Request Broker.
• CORBAservices: Common Object Services Specification contains specifications
for the object services.
• CORBAfacilities: Common Facilities Architecture contains information about the
design of Common Facilities; it provides the framework for Common Facility
specifications.
• Object Management Architecture Guide defines the OMG’s technical objectives
and terminology and describes the conceptual models upon which OMG standards
are based. It also provides information about the policies and procedures of
OMG, such as how standards are proposed, evaluated, and accepted.
OMG-UML V1.3
March 2000
xxv
OMG collects information for each book in the documentation set by issuing Requests
for Information, Requests for Proposals, and Requests for Comment and, with its
membership, evaluating the responses. Specifications are adopted as standards only
when representatives of the OMG membership accept them as such by vote. To obtain
books in the documentation set, or other OMG publications, refer to the enclosed
subscription card or contact the Object Management Group, Inc. at:
OMG Headquarters
250 First Avenue, Suite 201
Needham, MA 02494
Tel: +1-781-444-0404
Fax: +1-781-444-0320
[email protected]
http://www.omg.org
OMG’s adoption of the UML specification reduces the degree of confusion within the
industry surrounding modeling languages. It settles unproductive arguments about
method notations and model interchange mechanisms and allows the industry to focus
on higher leverage, more productive activities. Additionally, it enables semantic
interchange between visual modeling tools.
Introduction to OMG Modeling
The OMG Modeling documents describe the OMG standards for modeling distributed
software architectures and systems along with their CORBA Interfaces. There are two
complementary specifications:
•
•
Unified Modeling Language Specification
Meta-Object Facility Specification
The Unified Modeling Language (UML) Specification defines a graphical language for
visualizing, specifying, constructing, and documenting the artifacts of distributed
object systems. The specification includes the formal definition of a common Object
Analysis and Design (OA&D) metamodel, a graphic notation, and a CORBA IDL
facility that supports model interchange between OA&D tools and metadata
repositories. The UML provides the foundation for specifying and sharing CORBAbased distributed object models.
The Meta-Object Facility (MOF) Specification defines a set of CORBA IDL interfaces
that can be used to define and manipulate a set of interoperable metamodels and their
corresponding models. These interoperable metamodels include the UML metamodel,
the MOF meta-metamodel, as well as future OMG adopted technologies that will be
specified using metamodels. The MOF provides the infrastructure for implementing
CORBA-based design and reuse repositories. The MOF specifies precise mapping
rules that enable the CORBA interfaces for metamodels to be automatically generated,
thus encouraging consistency in manipulating metadata in all phases of the distributed
application development cycle.
xxvi
OMG-UML V1.3
March 2000
Since the UML and MOF are based on a four-layer metamodel architecture it is
essential that the metamodels for each facility are architecturally aligned. For a
description of the four layer metamodel architecture, please refer to Section 2.2,
“Meta-data Architectures,” on page 2-1 in the MOF Specification. In order to achieve
architectural alignment considerable effort has been expended so that the UML and
MOF share the same core semantics. This alignment allows the MOF to reuse the
UML notation for visualizing metamodels. In those areas where semantic differences
are required, well-defined mapping rules are provided between the metamodels. The
OMG distributed repository architecture, which integrates UML and MOF with
CORBA is described in “Resolution of Technical Criteria” in the Preface of the MOF
Specification.
As the first adopted technologies specified using a metamodeling approach, the UML
and MOF establish a rigorous foundation for OMG's metamodel architectures. Future
metamodel standards should reuse their core semantics and emulate their systematic
approach to architecture alignment.
Architectural Alignment of UML, MOF, and CORBA
Introduction
This section explains the architectural alignment of the OA&D Facility (OA&DF)
metamodel and the MOF meta-metamodel, and their relationships to the OMA and
CORBA object models. When discussing specific models, MOF corresponds to the
MOF meta-metamodel also referred to as the MOF Model. The UML is used to refer
to the proposed OA&DF metamodel.
As yet, there is not an MOF meta-metamodel standard or an OA&D metamodel
standard. However, since each of these specifications has been unified, a proactive
approach has been taken towards architectural alignment. Considerable structure
sharing between the two specifications has been accomplished. As the OA&DF and
MOF technologies evolve, additional alignment work will be addressed by standard
OMG processes such as those for Revision Task Forces and subsequent RFPs.
The MOF and OA&DF alignment work has focused on aligning the metamodels and
applying the MOF IDL Mapping for generating the CORBA IDL for both the MOF
and UML models. This was accomplished by defining the MOF and UML models
using the MOF and by generating the IDL interfaces based on the MOF specification.
Note that both the MOF and OADF specifications use the UML notation for
graphically defining the models.
In terms of abstraction levels and the kinds of meta-metaobjects used, the UML and
MOF meta-metamodels are well aligned. There are significant advantages in aligning
the OA&DF meta-metamodel with the MOF meta-metamodel. In the case of the MOF,
meta-metamodel alignment facilitates interoperability between the OA&DF and the
MOF. An example of OA&DF-MOF interoperability is the use of an MOF-compliant
repository to store an OA&DF object model.
OMG-UML V1.3
March 2000
xxvii
Alignment of the UML, MOF, and CORBA paves the way for future extensibility of
CORBA in key areas such as richer semantics, relationships, and constraints. Likewise
the longer-term benefits to UML and MOF include better recognition and addressing
of distributed computing issues in developing CORBA-compliant systems.
Motivation
The primary reason for aligning the OA&DF metamodel with the MOF metametamodel is to facilitate interoperability between the two facilities using CORBA
IDL. When considering interoperability between the OA&DF and the MOF, it is
important to consider the difference in scope between the facilities. The MOF goal is
to allow interoperability across the application development cycle by supporting the
definition of multiple meta models, whereas the OA&DF focuses on supporting the
definition of a single OA&D metamodel. An example of OA&DF-MOF
interoperability is the use of an MOF-compliant repository to store and interchange
OA&DF object models.
The key motivation to align the MOF and OA&DF with CORBA is to address the
requirement of aligning with CORBA and between the two facilities. In addition, the
MOF and OA&DF (especially the UML) specifications signify years of modeling and
metamodeling experience that are being integrated. As such, some of the key concepts
in the UML and MOF are potential candidates to evolve the OMG Core object model
and CORBA IDL in the future.
Approach
The UML and MOF are based on a four-layer metamodel architecture, where the MOF
meta-metamodel is the meta-metamodel for the UML metamodel. As a result, the
UML metamodel may be considered an instance-of the MOF meta-metamodel. This is
sometimes referred to as loose metamodeling, where an Mn level model is an instance
of an Mn+1 level model.
Since the MOF and OA&DF have different scopes, and diverge in the area of
relationships, we have not been able to apply strict metamodeling. In strict
metamodeling, every element of an Mn level model is an instance of exactly one
element of Mn+1 level model. Consequently, there is not a strict isomorphic mapping
between all the MOF meta-metamodel elements and the UML meta-metamodel
elements. In principle strict metamodeling is difficult (or sometimes impossible to
accomplish) as the complexity of new concepts (for example patterns and frameworks)
continues to increase. In any case, using a small set of primitive concepts such as
those defined in the MOF it is possible to define arbitrarily complex metamodels.
In spite of this, since the two models were designed to be interoperable, the two
metamodels are structurally quite similar. The following sections compare the core
MOF and UML modeling concepts, and contrast them with the OMA and
CORBA/IDL core object models. The issues related to mapping metaclasses which are
not isomorphic (e.g., Association classes) are also discussed.
xxviii
OMG-UML V1.3
March 2000
The following tables are comparison tables that summarize the mappings of similar
concepts across the meta-metamodeling layers. Where there is no analog for a concept,
it will be identified and discussed in ”Issues Related to UML-MOF Mapping” on page
xxxi.
Metamodel Comparison
Most of the metaobjects for the UML core metamodel and the MOF core metametamodel can be mapped to each other in a straightforward manner. Similarly, these
metaobjects can also be mapped to the OMA and CORBA core object models in a
direct way.
The following tables compare the core modeling concepts and the data types for these
models.
UML Metamodel
MOF Metametamodel
Association (n-ary)
Association (binary)
AssociationClass
NA
AssociationEnd
AssociationEnd
Attribute
Attribute
BehavioralFeature
BehavioralFeature
Class
Class
Classifier
Classifier
Constraint
Constraint
DataType
DataType
Dependency (class)
/dependsOn (association)
Exception
Exception
Feature
Feature
GeneralizableElement
GeneralizableElement
Generalization (class)
generalizes (association)
Generalization
Generalization
Interface
Class (as Interface)
Interface
Interface
ModelElement
ModelElement
NA
Reference
NA
Constant
Constant
Namespace
Namespace
~ IR Containers
Operation
Operation
Package
Package
OMG-UML V1.3
OMA Core Object Model
CORBA Object Model
CORBA IDL
Attribute
Attribute
Class
Interface (as Class)
Data type
Data type
Exception
Operation
Operation
Module
March 2000
xxix
UML Metamodel
MOF Metametamodel
OMA Core Object Model
CORBA Object Model
CORBA IDL
Parameter
Parameter
Parameter
Parameter
StructuralFeature
StructuralFeature
Type (stereotype)
Class (as Type)
Type
Interface (as Type)
UML Metamodel
MOF Meta-metamodel
CORBA Object Model and IDL
AggregationKind
AggregationKind
Boolean
CORBA Boolean
Boolean
Enumeration
CORBA Enum
Enum
Expression
NameType
Integer
CORBA Short, Long, Unsigned Short,
Unsigned Long, Double, Octet, Float
Short, Long, Unsigned Short, Unsigned
Long, Double, Octet, Float
List
List, Set
Sequence
Multiplicity
MultiplicityKind (simpler than UML
multiplicity)
Name
NameKind
OperationDirectionKind
DirectionKind
dependencies (reified as classes)
DependencyKind (enum)
ScopeKind
ScopeKind
String
CORBA String, Char
String, Char
Time
CORBA Time Service Data Types
Time Service Data Types
NA
TypeDef
TypeDef
Uninterpreted
CORBA Any
Any
VisibilityKind
VisibilityKind
Name
The MOF supports the full range of CORBA data types as well as additional data types
defined using the MOF primitive types. UML supports a subset of CORBA data types
in its semantic model but mapping to a subset of specific CORBA types is clearly
possible.
The following sections discuss issues related to areas where the mapping between
metamodels is not direct.
xxx
OMG-UML V1.3
March 2000
Issues Related to UML-MOF Mapping
In general, the mapping from the UML meta-metamodel to the MOF meta-metamodel
is straightforward.
A review of the previous comparison tables indicates that in most cases the mapping
from the UML meta-metamodel to the MOF meta-metamodel is direct. In fact, for
most of the core constructs there is a structural equivalency in the mapping.
The key differences are due to different usage scenarios of MOF and UML. The MOF
needs to be simpler, directly implementable, and provide a set of CORBA interfaces
for manipulating meta objects. The UML is used as a general-purpose modeling
language, with potentially many implementation targets. These differences are
commonly observed in repository, meta-CASE, and modeling-tool implementations.
The key differences are:
•
The MOF only supports binary associations while UML supports higher-order (also
referred to as 'N-ary') associations. This tradeoff was made because N-ary
relationships are rarely used in meta-modeling and the design goal was to keep the
MOF interfaces simpler. We have anticipated extending the MOF to support higher
order associations in future.
•
Associations in the MOF are limited to simple associations and cannot contain
features. Association Classes in UML can contain features (such as attributes). The
MOF has been defined to be structurally extensible to full-blown association classes
in the future by relaxing this constraint. UML Association Classes are modeled as
MOF Classes with well-defined multiplicity constraints to ensure shared lifetime of
features owned by the association.
•
The MOF supports the concept of a Reference which allows direct navigation from
one Classifier to another. The UML metamodel uses the Target AssociationEnd's
'name' property as a 'pseudo-attribute' for the same purpose, but navigates to another
classifier through an Association. The concept of reference is widely used in object
repositories, as well as object and object-relational databases and optimizes
navigation across a metamodel.
•
Some concepts such as Generalization, Dependency, and Refinement are reified as
classes in UML, but implemented as Associations in the MOF. The MOF does not
require the richness of UML in these areas.
•
The MOF supports the full set of CORBA data types, whereas the UML meta model
does not define data types to this depth. A CORBA-specific implementation of
UML is clearly possible by either creating the additional data types needed or by
providing appropriate mappings.
•
The UML has clearly defined the similarities of the key concepts of Class,
Interface, and Type. The MOF and UML both use the Class concept as the most
general of these in their respective models. The MOF specification is focused only
on specification of meta models and generation of CORBA interfaces; therefore, it
does not deal with implementation concepts such as 'Methods.' UML clearly needs
to support these concepts because UML can be used to model conceptual, logical,
and implementation models. In this sense, the MOF uses the Class concept to
define Types, since MOF Classes do not have any methods, just operations. This is
OMG-UML V1.3
March 2000
xxxi
consistent with the definition of UML Type as a stereotype of Class with a
constraint that Types cannot contain methods. The MOF Class concept is rich
enough to define Interfaces, and in fact the MOF specification itself clearly shows
that an MOF Class can be mapped to multiple CORBA Interfaces.
The previous table shows that the mapping of metadatatypes between the metametamodels is also straightforward. Here also there are more MOF metametaobjects than there are UML meta-metaobjects. The MOF supports the full
range of CORBA data types as well as additional data types defined using the MOF
primitive types. UML supports a subset of CORBA data types in its semantic
model but maps to specific CORBA types in its corresponding interface model.
Relationship to Other Models
A secondary emphasis was placed on the architectural alignment with CDIF and RMODP, both of which have influenced the metamodel architectures. CDIF offers many
useful concepts for a specifying robust stream-based interchange formats. Similary,
ODP provides many useful ideas for specifying model viewpoints.
Document Summary
This document is intended primarily as a precise and self-consistent definition of the
UML’s semantics and notation. The primary audience of this document consists of the
Object Management Group, standards organizations, book authors, trainers, and tool
builders. The authors assume familiarity with object-oriented analysis and design
methods. The document is not written as an introductory text on building object
models for complex systems, although it could be used in conjunction with other
materials or instruction. The document will become more approachable to a broader
audience as additional books, training courses, and tools that apply to UML become
available.
The Unified Modeling Language specification defines compliance to the UML, covers
the architectural alignment with other technologies, and is comprised of the following
topics:
UML Summary (Chapter 1) - provides an introduction to the UML, discussing
motivation and history.
xxxii
OMG-UML V1.3
March 2000
UML Semantics (Chapter 2) - defines the semantics of the Unified Modeling
Language. The UML is layered architecturally and organized by packages. Within each
package, the model elements are defined in the following terms:
1. Abstract syntax
UML class diagrams are used to present the UML
metamodel, its concepts (metaclasses), relationships,
and constraints. Definitions of the concepts are
included.
2. Well-formedness rules
The rules and constraints on valid models are defined.
The rules are expressed in English prose and in a
precise Object Constraint Language (OCL). OCL is a
specification language that uses logic for specifying
invariant properties of systems comprising sets and
relationships between sets.
3. Semantics
The semantics of model usage are described in
English prose.
UML Notation Guide (Chapter 3) - specifies the graphic syntax for expressing the
semantics described by the UML metamodel. Consequently, the UML Notation
Guide’s chapter should be read in conjunction with the UML Semantics chapter.
UML Extensions (Chapter 4) - defines the UML Profile for Software Development
Processes and the UML Profile for Business Modeling.
UML CORBAfacility Interface Definition (Chapter 5) - uses CORBA IDL to specify a
repository that enables the creation, storage, and manipulation of UML models.
UML XMI DTD Specification (Chapter 6) - uses XML DTD to define a physical
mechanism for interchanging UML models that conform to the UML metamodel.
Object Constraint Language Specification (Chapter 7) - defines the Object Constraint
Language (OCL) syntax, semantics, and grammar. All OCL features are described in
terms of concepts defined in the UML Semantics.
In addition, there is an appendix of Standard Elements that defines standard
stereotypes, constraints, and tagged values for UML, and a glossary of terms.
Dependencies Between Chapters
UML Semantics (Chapter 2) can stand on its own, relative to the others, with the
exception of the OCL Specification. The semantics depends upon OCL for the
specification of its well-formedness rules.
The UML Notation Guide, UML CORBAfacility Interface Definition and UML XMI
DTD Specification all depend on the UML Semantics. Specifying these as separate
standards will permit their evolution in the most flexible way, even though they are not
completely independent.
The specifications in the UML Extensions chapter depend on both the notation and
semantics chapters.
OMG-UML V1.3
March 2000
xxxiii
Compliance to the UML
The UML and corresponding facility interface definition are comprehensive. However,
these specifications are packaged so that subsets of the UML and facility can be
implemented without breaking the integrity of the language. The UML Semantics is
packaged as follows:
B e h a vi o ra l E le m e n ts
A c ti vi ty G ra p h s
C o ll a b o r a ti o n s
S ta te M a c h i ne s
U se C a se s
M o d e l M a na g e m e nt
C o m m o n B e h a vi o r
F o u n d ati o n
C o re
E xte n s i o n
M e c ha nis m s
D a ta T yp e s
UML Class Diagram Showing Package Structure
This packaging shows the semantic dependencies between the UML model elements in
the different packages. The IDL in the facility is packaged almost identically. The
notation is also “packaged” along the lines of diagram type. Compliance of the UML is
thus defined along the lines of semantics, notation, and IDL.
Even if the compliance points are decomposed into more fundamental units, vendors
implementing UML may choose not to fully implement this packaging of definitions,
while still faithfully implementing some of the UML definitions. However, vendors
who want to precisely declare their compliance to UML should refer to the precise
language defined herein, and not loosely say they are “UML compliant.”
Compliance to the UML Semantics
The basic units of compliance are the packages defined in the UML metamodel. The
full metamodel includes the corresponding semantic rigor defined in the UML
Semantics chapter of this specification.
xxxiv
OMG-UML V1.3
March 2000
The class diagram illustrates the package dependencies, which are also summarized in
the table below.
Package
Prerequisite Packages
DataTypes
Core
DataTypes, Extension Mechanisms
Extension Mechanisms
Core, DataTypes
Common Behavior
Foundation
State Machines
Common Behavior, Foundation
Activity Graphs
State Machines, Foundation
Collaborations
Common Behavior, Foundation
Use Cases
Common Behavior, Foundation
Model Management
Foundation
Complying with a package requires complying with the prerequisite package.
The semantics are defined in an implementation language-independent way. An
implementation of the semantics, without consistent interface and implementation
choices, does not guarantee tool interoperability. See the OA&D CORBAfacility
Interface Definition (Chapter 5).
In addition to the above packages, compliance to a given metamodel package must
load or know about the predefined UML standard elements (i.e., values for all
predefined stereotypes, tags, and constraints). These are defined throughout the
semantics and notation documents and summarized in the UML Standard Elements
appendix. The predefined constraint values must be enforced consistent with their
definitions. Having tools know about the standard elements is necessary for the full
language and to avoid the definition of user-defined elements that conflict with the
standard UML elements. Compliance to the UML Standard Elements and UML
Standard Profiles is distinct from the UML Semantics, so not all tools need to know
about the UML Standard Elements and UML Standard Profiles.
For any implementation of UML, it is optional that the tool implements the Object
Constraint Language. A vendor conforming to OCL support must support the
following:
•
Validate and store syntactically correct OCL expressions as values for UML data
types.
•
Be able to perform a full type check on the object constraint expression. This check
will test whether all features used in the expression are actually defined in the UML
model and used correctly.
All tools conforming to the UML semantics are expected to conform to the following
aspects of the semantics:
OMG-UML V1.3
March 2000
xxxv
•
abstract syntax (i.e., the concepts, valid relationships, and constraints expressed in
the corresponding class diagrams),
•
•
well-formedness rules, and
semantics of model usage.
However, vendors are expected to apply some discretion on how strictly the wellformedness rules are enforced. Tools should be able to report on well-formedness
violations, but not necessarily force all models to be well formed. Incomplete models
are common during certain phases of the development lifecycle, so they should be
permitted. See the OA&D CORBAfacility Interface Definition (Chapter 5 of this
specification) for its treatment of well-formedness exception handling, as an example
of a technique to report well-formedness violations.
Compliance to the UML Notation
The UML notation is an essential element of the UML to enable communication
between team members. Compliance to the notation is optional, but the semantics are
not very meaningful without a consistent way of expressing them.
Notation compliance is defined along the lines of the UML Diagrams types: use case,
class, statechart, activity graph, sequence, collaboration, component, and deployment
diagrams.
If the notation is implemented, a tool must enforce the underlying semantics and
maintain consistency between diagrams if the diagrams share the same underlying
model. By this definition, a simple "drawing tool" cannot be compliant to the UML
notation.
There are many optional notation adornments. For example, a richly adorned class icon
may include an embedded stereotype icon, a list of properties (tagged values and
metamodel attributes), constraint expressions, attributes with visibilities indicated, and
operations with full signatures. Complying with class diagram support implies the
ability to support all of the associated adornments.
Compliance to the notation in the UML Standard Profiles is described separately.
Compliance to the UML Standard Profiles
Vendors should specify whether they support each of the UML Standard Profiles or
not. Compliance to a profile means knowledge and enforcement of the semantics and
corresponding notation.
Compliance to the UML CORBAfacility Interface Definition
The IDL modules defined in the UML CORBAfacility parallel the packages in the
semantic metamodel. The exception to this is that DataTypes and Extension
Mechanisms have been merged in with the core for the facility. Except for this, a
CORBAfacility implementing the interface modules has the same compliance point
options as described in ”Compliance to the UML Semantics” on page xxxiv.
xxxvi
OMG-UML V1.3
March 2000
Compliance to the UML XMI DTD Specification
The DTD defined in the UML XMI DTD Specification parallel the packages in the
semantic metamodel. The exception to this is that DataTypes and Extension
Mechanisms have been merged in with the core for the facility. Except for this, an
implementation of the XMI DTD has the same compliance point options as described
in ”Compliance to the UML Semantics” on page xxxiv.
Summary of Compliance Points
Compliance Point
Valid Options
Core
no/incomplete, complete, complete including IDL
and/or XMI DTD
Common Behavior
no/incomplete, complete, complete including IDL
and/or XMI DTD
State Machines
no/incomplete, complete, complete including IDL
and/or XMI DTD
Activity Graphs
no/incomplete, complete, complete including IDL
and/or XMI DTD
Collaboration
no/incomplete, complete, complete including IDL
and/or XMI DTD
Use Cases
no/incomplete, complete, complete including IDL
and/or XMI DTD
Model Management
no/incomplete, complete, complete including IDL
and/or XMI DTD
UML Profiles
no/incomplete, complete, complete including IDL
and/or XMI DTD
Use Case diagram
no/incomplete, complete
Class diagram
no/incomplete, complete
Statechart diagram
no/incomplete, complete
Activity Graph diagram
no/incomplete, complete
Sequence diagram
no/incomplete, complete
Collaboration diagram
no/incomplete, complete
Component diagram
no/incomplete, complete
Deployment diagram
no/incomplete, complete
OMG-UML V1.3
March 2000
xxxvii
Compliance Point
Valid Options
UML Profile for
Software Development
Processes
no/incomplete, complete
UML Profile for
Business Modeling
no/incomplete, complete
OCL
no/incomplete, complete
Acknowledgements
The UML was crafted through the dedicated efforts of individuals and companies who
find UML strategic to their future. This section acknowledges the efforts of these
individuals who contributed to defining UML.
UML Core Team
The following persons were members of the core development team for the UML
proposal or served on the UML Revision Task Force:
• Data Access Corporation: Tom Digre
• Electronic Data Systems Corporation: Cris Kobryn, Joaquin Miller
• Enea Data: Karin Palmkvist
• Hewlett-Packard Company: Martin Griss
• IBM Corporation: Steve Brodsky, Steve Cook, Jos Warmer
• I-Logix: Eran Gery, David Harel
• ICON Computing: Desmond D’Souza
• IntelliCorp and James Martin & Co.: Conrad Bock, James Odell
• OAO Technology Solutions: Ed Seidewitz
• ObjecTime Limited: John Hogg, Bran Selic
• Oracle Corporation: Guus Ramackers
• PLATINUM Technology Inc.: Dilhar DeSilva
• Rational Software: Grady Booch, Ed Eykholt, Ivar Jacobson, Gunnar Overgaard,
Jim Rumbaugh
• SAP: Oliver Wiegert
• SOFTEAM: Philippe Desfray
• Sterling Software: John Cheesman, Keith Short
• Taskon: Trygve Reenskaug
• Unisys Corporation: Sridhar Iyengar, GK Khalsa
UML 1.1 Semantics Task Force
During the final submission phase, a team was formed to focus on improving the
formality of the UML 1.0 semantics, as well as incorporating additional ideas from the
partners. Under the leadership of Cris Kobryn, this team was very instrumental in
reconciling diverse viewpoints into a consistent set of semantics, as expressed in the
xxxviii
OMG-UML V1.3
March 2000
revised UML Semantics. Other members of this team were Dilhar DeSilva, Martin
Griss, Sridhar Iyengar, Eran Gery, James Odell, Gunnar Overgaard, Karin Palmkvist,
Guus Ramackers, Bran Selic, and Jos Warmer. Grady Booch, Ivar Jacobson, and Jim
Rumbaugh also provided their expertise to the team.
UML Revision Task Force
After the adoption of the UML 1.1 proposal by the OMG membership in November,
1997, the OMG chartered a revision task force (RTF) to deal with bugs,
inconsistencies, and other problems that could be handled without greatly expanding
the scope of the original proposal. The RTF accepted public comments submitted to
the OMG after adoption of the proposal. This document containing UML version 1.3 is
the result of the work of the UML RTF. The results have been issued in several
preliminary versions with minor changes expected in the final version. If you have a
preliminary version of the specification, you can obtain an updated version from the
OMG web site at www.omg.org.
Contributors and Supporters
We also acknowledge the contributions, influence, and support of the following
individuals.
Jim Amsden, Hernan Astudillo, Colin Atkinson, Dave Bernstein, Philip A. Bernstein,
Michael Blaha, Mike Bradley, Ray Buhr, Gary Cernosek, James Cerrato, Michael Jesse
Chonoles, Magnus Christerson, Dai Clegg, Peter Coad, Derek Coleman, Ward
Cunningham, Raj Datta, Mike Devlin, Philippe Desfray, Bruce Douglass, Staffan
Ehnebom, Maria Ericsson, Johannes Ernst, Don Firesmith, Martin Fowler, Adam
Frankl, Eric Gamma, Dipayan Gangopadhyay, Garth Gullekson, Rick Hargrove, Tim
Harrison, Richard Helm, Brian Henderson-Sellers, Michael Hirsch, Bob Hodges,
Glenn Hollowell, Yves Holvoet, Jon Hopkins, John Hsia, Ralph Johnson, Stuart Kent,
Anneke Kleppe, Philippe Kruchten, Paul Kyzivat, Martin Lang, Grant Larsen, Reed
Letsinger, Mary Loomis, Jeff MacKay, Bev Macmaster, Robert Martin, Terrie
McDaniel, Jim McGee, Bertrand Meyer, Mike Meier, Randy Messer, Greg Meyers,
Fred Mol, Luis Montero, Paul Moskowitz, Andy Moss, Jan Pachl, Paul Patrick, Woody
Pidcock, Bill Premerlani, Jeff Price, Jerri Pries, Terry Quatrani, Mats Rahm, George
Reich, Rich Reitman, Rudolf M. Riess, Erick Rivas, Kenny Rubin, Bernhard Rumpe,
Jim Rye, Danny Sabbah, Tom Schultz, Gregson Siu, Jeff Sutherland, Dan Tasker,
Dave Tropeano, Andy Trice, Dan Uhlar, John Vlissides, Larry Wall, Paul Ward, Oliver
Wiegert, Alan Wills, Rebecca Wirfs-Brock, Bryan Wood, Ed Yourdon, and Steve
Zeigler.
OMG-UML V1.3
March 2000
xxxix
References
xl
[Bock/Odell 94]
C. Bock and J. Odell, “A Foundation For Composition,”
Journal of Object-Oriented Programming, October 1994.
[Booch et al. 99]
Grady Booch, James Rumbaugh, and Ivar Jacobson, The
Unified Modeling Language User Guide, Addison Wesley,
1999.
[Cook 94]
S. Cook and J. Daniels, Designing Object Systems: Objectoriented Modeling with Syntropy, Prentice-Hall ObjectOriented Series, 1994.
[D’Souza 99]
D. D’Souza and A. Wills, Objects, Components and
Frameworks with UML: The Catalysis Approach, AddisonWesley, 1999.
[Fowler 97]
M. Fowler with K. Scott, UML Distilled: Applying the
Standard Object Modeling Language, Addison-Wesley, 1997.
[Griss 96]
M. Griss, “Domain Engineering And Variability In The ReuseDriven Software Engineering Business,” Object Magazine.
December 1996.
[Harel 87]
D. Harel, “Statecharts: A Visual Formalism for Complex
Systems,” Science of Computer Programming 8, (1987), pp.
231-274.
[Harel 96a]
D. Harel and E. Gery, “Executable Object Modeling with
Statecharts,” Proc. 18th Int. Conf. Soft. Eng., Berlin, IEEE
Press, March, 1996, pp. 246-257.
[Harel 96b]
D. Harel and A. Naamad, “The STATEMATE Semantics of
Statecharts,” ACM Trans. Soft. Eng. Method 5:4, October
1996.
[Jacobson et al. 99]
Ivar Jacobson, Grady Booch, and James Rumbaugh, The
Unified Software Development Process, Addison Wesley,
1999.
[Malan 96]
R. Malan, D. Coleman, R. Letsinger et al, “The Next
Generation of Fusion,” Fusion Newsletter, October 1996.
[Martin/Odell 95]
J. Martin and J. Odell, Object-Oriented Methods, A
Foundation, Prentice Hall, 1995
[Ramackers 95]
Ramackers, G. and Clegg, D., “Object Business Modelling,
requirements and approach” in Sutherland, J. and Patel, D.
(eds.), Proceedings of the OOPSLA95 Workshop on Business
Object Design and Implementation, Springer Verlag,
publication pending.
OMG-UML V1.3
March 2000
[Ramackers 96]
Ramackers, G. and Clegg, D., “Extended Use Cases and
Business Objects for BPR,” ObjectWorld UK ‘96, London,
June 18-21, 1996.
[Rumbaugh et al. 99]
Jim Rumbaugh, Ivar Jacobson, and Grady Booch, The Unified
Modeling Language Reference Manual, Addison Wesley,
1999.
[Selic et al. 94]
B. Selic, G. Gullekson, and P. Ward, Real-Time ObjectOriented
Modeling, John Wiley & Sons, 1994.
[Warmer et al. 99]
J. Warmer and A. Kleppe, The Object Constraint Language:
Precise Modeling with UML, Addison-Wesley, 1999.
[UML Web Sites]
www.omg.org
www.rational.com/uml
uml.shl.com
OMG-UML V1.3
March 2000
xli
xlii
OMG-UML V1.3
March 2000
1
UML Summary
The UML Summary provides an introduction to the UML, discussing its motivation
and history.
Contents
This chapter contains the following topics.
Topic
Page
“Overview”
1-1
“Primary Artifacts of the UML”
1-2
“Motivation to Define the UML”
1-3
“Goals of the UML”
1-4
“Scope of the UML”
1-6
“UML - Past, Present, and Future”
1-11
1.1 Overview
The Unified Modeling Language (UML) is a language for specifying, visualizing,
constructing, and documenting the artifacts of software systems, as well as for business
modeling and other non-software systems. The UML represents a collection of the best
engineering practices that have proven successful in the modeling of large and complex
systems.
OMG-UML V1.3
March 2000
1-1
1
1.2 Primary Artifacts of the UML
What are the primary artifacts of the UML? This can be answered from two different
perspectives: the UML definition itself and how it is used to produce project artifacts.
1.2.1 UML-defining Artifacts
To aid the understanding of the artifacts that constitute the Unified Modeling Language
itself, this document consists of chapters describing UML Semantics, UML Notation
Guide, and UML Standard Profiles.
1.2.2 Development Project Artifacts
The choice of what models and diagrams one creates has a profound influence upon
how a problem is attacked and how a corresponding solution is shaped. Abstraction,
the focus on relevant details while ignoring others, is a key to learning and
communicating. Because of this:
•
Every complex system is best approached through a small set of nearly independent
views of a model. No single view is sufficient.
•
•
Every model may be expressed at different levels of fidelity.
The best models are connected to reality.
In terms of the views of a model, the UML defines the following graphical diagrams:
•
•
•
use case diagram
•
implementation diagrams:
• component diagram
• deployment diagram
class diagram
behavior diagrams:
• statechart diagram
• activity diagram
• interaction diagrams:
• sequence diagram
• collaboration diagram
Although other names are sometimes given to these diagrams, this list constitutes the
canonical diagram names.
These diagrams provide multiple perspectives of the system under analysis or
development. The underlying model integrates these perspectives so that a selfconsistent system can be analyzed and built. These diagrams, along with supporting
documentation, are the primary artifacts that a modeler sees, although the UML and
supporting tools will provide for a number of derivative views. These diagrams are
further described in the UML Notation Guide (Chapter 3 of this specification).
1-2
OMG-UML V1.3
March 2000
1
A frequently asked question has been: Why doesn’t UML support data-flow diagrams?
Simply put, data-flow and other diagram types that were not included in the UML do
not fit as cleanly into a consistent object-oriented paradigm. Activity diagrams and
collaboration diagrams accomplish much of what people want from DFDs, and then
some. Activity diagrams are also useful for modeling workflow.
1.3 Motivation to Define the UML
This section describes several factors motivating the UML and includes why modeling
is essential. It highlights a few key trends in the software industry and describes the
issues caused by divergence of modeling approaches.
1.3.1 Why We Model
Developing a model for an industrial-strength software system prior to its construction
or renovation is as essential as having a blueprint for large building. Good models are
essential for communication among project teams and to assure architectural
soundness. We build models of complex systems because we cannot comprehend any
such system in its entirety. As the complexity of systems increase, so does the
importance of good modeling techniques. There are many additional factors of a
project’s success, but having a rigorous modeling language standard is one essential
factor. A modeling language must include:
•
•
•
Model elements — fundamental modeling concepts and semantics
Notation — visual rendering of model elements
Guidelines — idioms of usage within the trade
In the face of increasingly complex systems, visualization and modeling become
essential. The UML is a well-defined and widely accepted response to that need. It is
the visual modeling language of choice for building object-oriented and componentbased systems.
1.3.2 Industry Trends in Software
As the strategic value of software increases for many companies, the industry looks for
techniques to automate the production of software. We look for techniques to improve
quality and reduce cost and time-to-market. These techniques include component
technology, visual programming, patterns, and frameworks. We also seek techniques
to manage the complexity of systems as they increase in scope and scale. In particular,
we recognize the need to solve recurring architectural problems, such as physical
distribution, concurrency, replication, security, load balancing, and fault tolerance.
Development for the worldwide web makes some things simpler, but exacerbates these
architectural problems.
Complexity will vary by application domain and process phase. One of the key
motivations in the minds of the UML developers was to create a set of semantics and
notations that adequately addresses all scales of architectural complexity, across all
domains.
OMG-UML V1.3
Motivation to Define the UML
March 2000
1-3
1
1.3.3 Prior to Industry Convergence
Prior to the UML, there was no clear leading modeling language. Users had to choose
from among many similar modeling languages with minor differences in overall
expressive power. Most of the modeling languages shared a set of commonly accepted
concepts that are expressed slightly differently in various languages. This lack of
agreement discouraged new users from entering the object technology market and from
doing object modeling, without greatly expanding the power of modeling. Users longed
for the industry to adopt one, or a very few, broadly supported modeling languages
suitable for general-purpose usage.
Some vendors were discouraged from entering the object modeling area because of the
need to support many similar, but slightly different, modeling languages. In particular,
the supply of add-on tools has been depressed because small vendors cannot afford to
support many different formats from many different front-end modeling tools. It is
important to the entire object industry to encourage broadly based tools and vendors,
as well as niche products that cater to the needs of specialized groups.
The perpetual cost of using and supporting many modeling languages motivated many
companies producing or using object technology to endorse and support the
development of the UML.
While the UML does not guarantee project success, it does improve many things. For
example, it significantly lowers the perpetual cost of training and retooling when
changing between projects or organizations. It provides the opportunity for new
integration between tools, processes, and domains. But most importantly, it enables
developers to focus on delivering business value and gives them a paradigm to
accomplish this.
1.4 Goals of the UML
The primary design goals of the UML are as follows:
•
Provide users with a ready-to-use, expressive visual modeling language to develop
and exchange meaningful models.
•
•
Furnish extensibility and specialization mechanisms to extend the core concepts.
•
•
•
Provide a formal basis for understanding the modeling language.
•
Integrate best practices.
Support specifications that are independent of particular programming languages
and development processes.
Encourage the growth of the object tools market.
Support higher-level development concepts such as components, collaborations,
frameworks and patterns.
These goals are discussed in detail below.
1-4
OMG-UML V1.3
March 2000
1
Provide users with a ready-to-use, expressive visual modeling language to
develop and exchange meaningful models
It is important that the Object Analysis and Design (OA&D) specification supports a
modeling language that can be used "out of the box" to do normal general-purpose
modeling tasks. If the specification merely provides a meta-meta-description that
requires tailoring to a particular set of modeling concepts, then it will not achieve the
purpose of allowing users to exchange models without losing information or without
imposing excessive work to map their models to a very abstract form. The UML
consolidates a set of core modeling concepts that are generally accepted across many
current methods and modeling tools. These concepts are needed in many or most large
applications, although not every concept is needed in every part of every application.
Specifying a meta-meta-level format for the concepts is not sufficient for model users,
because the concepts must be made concrete for real modeling to occur. If the concepts
in different application areas were substantially different, then such an approach might
work, but the core concepts needed by most application areas are similar and should be
supported directly by the standard without the need for another layer.
Furnish extensibility and specialization mechanisms to extend the core
concepts
OMG expects that the UML will be tailored as new needs are discovered and for
specific domains. At the same time, we do not want to force the common core concepts
to be redefined or re-implemented for each tailored area. Therefore, we believe that the
extension mechanisms should support deviations from the common case, rather than
being required to implement the core modeling concepts themselves. The core concepts
should not be changed more than necessary. Users need to be able to
•
build models using core concepts without using extension mechanisms for most
normal applications,
•
•
add new concepts and notations for issues not covered by the core,
•
specialize the concepts, notations, and constraints for particular application
domains.
choose among variant interpretations of existing concepts, when there is no clear
consensus, and
Support specifications that are independent of particular programming
languages and development processes
The UML must and can support all reasonable programming languages. It also must
and can support various methods and processes of building models. The UML can
support multiple programming languages and development methods without excessive
difficulty.
Provide a formal basis for understanding the modeling language
Because users will use formality to help understand the language, it must be both
precise and approachable; a lack of either dimension damages its usefulness. The
formalisms must not require excessive levels of indirection or layering, use of lowlevel mathematical notations distant from the modeling domain, such as set-theoretic
notation, or operational definitions that are equivalent to programming an
OMG-UML V1.3
Goals of the UML
March 2000
1-5
1
implementation. The UML provides a formal definition of the static format of the
model using a metamodel expressed in UML class diagrams. This is a popular and
widely accepted formal approach for specifying the format of a model and directly
leads to the implementation of interchange formats. UML expresses well-formedness
constraints in precise natural language plus Object Constraint Language expressions.
UML expresses the operational meaning of most constructs in precise natural
language. The fully formal approach taken to specify languages such as Algol-68 was
not approachable enough for most practical usage.
Encourage the growth of the object tools market
By enabling vendors to support a standard modeling language used by most users and
tools, the industry benefits. While vendors still can add value in their tool
implementations, enabling interoperability is essential. Interoperability requires that
models can be exchanged among users and tools without loss of information. This can
only occur if the tools agree on the format and meaning of all of the relevant concepts.
Using a higher meta-level is no solution unless the mapping to the user-level concepts
is included in the standard.
Support higher-level development concepts such as components,
collaborations, frameworks, and patterns
Clearly defined semantics of these concepts is essential to reap the full benefit of
object-orientation and reuse. Defining these within the holistic context of a modeling
language is a unique contribution of the UML.
Integrate best practices
A key motivation behind the development of the UML has been to integrate the best
practices in the industry, encompassing widely varying views based on levels of
abstraction, domains, architectures, life cycle stages, and implementation technologies.
The UML is indeed such an integration of best practices.
1.5 Scope of the UML
The Unified Modeling Language (UML) is a language for specifying, constructing,
visualizing, and documenting the artifacts of a software-intensive system.
First and foremost, the Unified Modeling Language fuses the concepts of Booch, OMT,
and OOSE. The result is a single, common, and widely usable modeling language for
users of these and other methods.
Second, the Unified Modeling Language pushes the envelope of what can be done with
existing methods. As an example, the UML authors targeted the modeling of
concurrent, distributed systems to assure the UML adequately addresses these domains.
Third, the Unified Modeling Language focuses on a standard modeling language, not a
standard process. Although the UML must be applied in the context of a process, it is
our experience that different organizations and problem domains require different
processes. (For example, the development process for shrink-wrapped software is an
interesting one, but building shrink-wrapped software is vastly different from building
1-6
OMG-UML V1.3
March 2000
1
hard-real-time avionics systems upon which lives depend.) Therefore, the efforts
concentrated first on a common metamodel (which unifies semantics) and second on a
common notation (which provides a human rendering of these semantics). The UML
authors promote a development process that is use-case driven, architecture centric,
and iterative and incremental.
The UML specifies a modeling language that incorporates the object-oriented
community’s consensus on core modeling concepts. It allows deviations to be
expressed in terms of its extension mechanisms. The Unified Modeling Language
provides the following:
•
Semantics and notation to address a wide variety of contemporary modeling issues
in a direct and economical fashion.
•
Semantics to address certain expected future modeling issues, specifically related to
component technology, distributed computing, frameworks, and executability.
•
Extensibility mechanisms so individual projects can extend the metamodel for their
application at low cost. We don’t want users to directly change the UML
metamodel.
•
Extensibility mechanisms so that future modeling approaches could be grown on
top of the UML.
•
•
Semantics to facilitate model interchange among a variety of tools.
Semantics to specify the interface to repositories for the sharing and storage of
model artifacts.
1.5.1 Outside the Scope of the UML
1.5.1.1 Programming Languages
The UML, a visual modeling language, is not intended to be a visual programming
language, in the sense of having all the necessary visual and semantic support to
replace programming languages. The UML is a language for visualizing, specifying,
constructing, and documenting the artifacts of a software-intensive system, but it does
draw the line as you move toward code. For example, complex branches and joins are
better expressed in a textual programming language. The UML does have a tight
mapping to a family of object languages so that you can get the best of both worlds.
1.5.1.2 Tools
Standardizing a language is necessarily the foundation for tools and process. Tools and
their interoperability are very dependent on a solid semantic and notation definition,
such as the UML provides. The UML defines a semantic metamodel, not a tool
interface, storage, or run-time model, although these should be fairly close to one
another.
OMG-UML V1.3
Scope of the UML
March 2000
1-7
1
The UML documents do include some tips to tool vendors on implementation choices,
but do not address everything needed. For example, they don’t address topics like
diagram coloring, user navigation, animation, storage/implementation models, or other
features.
1.5.1.3 Process
Many organizations will use the UML as a common language for its project artifacts,
but will use the same UML diagram types in the context of different processes. The
UML is intentionally process independent, and defining a standard process was not a
goal of the UML or OMG’s RFP.
The UML authors do recognize the importance of process. The presence of a welldefined and well-managed process is often a key discriminator between
hyperproductive projects and unsuccessful ones. The reliance upon heroic
programming is not a sustainable business practice. A process
•
•
•
•
provides guidance as to the order of a team’s activities,
specifies what artifacts should be developed,
directs the tasks of individual developers and the team as a whole, and
offers criteria for monitoring and measuring a project’s products and activities.
Processes by their very nature must be tailored to the organization, culture, and
problem domain at hand. What works in one context (shrink-wrapped software
development, for example) would be a disaster in another (hard-real-time, human-rated
systems, for example). The selection of a particular process will vary greatly,
depending on such things as problem domain, implementation technology, and skills of
the team.
Booch, OMT, OOSE, and many other methods have well-defined processes, and the
UML can support most methods. There has been some convergence on development
process practices, but there is not yet consensus for standardization. What will likely
result is general agreement on best practices and potentially the embracing of a process
framework, within which individual processes can be instantiated. Although the UML
does not mandate a process, its developers have recognized the value of a use-case
driven, architecture-centric, iterative, and incremental process, so were careful to
enable (but not require) this with the UML.
1.5.2 Comparing UML to Other Modeling Languages
It should be made clear that the Unified Modeling Language is not a radical departure
from Booch, OMT, or OOSE, but rather the legitimate successor to all three. This
means that if you are a Booch, OMT, or OOSE user today, your training, experience,
and tools will be preserved, because the Unified Modeling Language is a natural
evolutionary step. The UML will be equally easy to adopt for users of many other
methods, but their authors must decide for themselves whether to embrace the UML
concepts and notation underneath their methods.
1-8
OMG-UML V1.3
March 2000
1
The Unified Modeling Language is more expressive yet cleaner and more uniform than
Booch, OMT, OOSE, and other methods. This means that there is value in moving to
the Unified Modeling Language, because it will allow projects to model things they
could not have done before. Users of most other methods and modeling languages will
gain value by moving to the UML, since it removes the unnecessary differences in
notation and terminology that obscure the underlying similarities of most of these
approaches.
With respect to other visual modeling languages, including entity-relationship
modeling, BPR flow charts, and state-driven languages, the UML should provide
improved expressiveness and holistic integrity.
Users of existing methods will experience slight changes in notation, but this should
not take much relearning and will bring a clarification of the underlying semantics. If
the unification goals have been achieved, UML will be an obvious choice when
beginning new projects, especially as the availability of tools, books, and training
becomes widespread. Many visual modeling tools support existing notations, such as
Booch, OMT, OOSE, or others, as views of an underlying model; when these tools add
support for UML (as some already have) users will enjoy the benefit of switching their
current models to the UML notation without loss of information.
Existing users of any object method can expect a fairly quick learning curve to achieve
the same expressiveness as they previously knew. One can quickly learn and use the
basics productively. More advanced techniques, such as the use of stereotypes and
properties, will require some study since they enable very expressive and precise
models needed only when the problem at hand requires them.
1.5.3 Features of the UML
The goals of the unification efforts were to keep it simple, to cast away elements of
existing Booch, OMT, and OOSE that didn’t work in practice, to add elements from
other methods that were more effective, and to invent new only when an existing
solution was not available. Because the UML authors were in effect designing a
language (albeit a graphical one), they had to strike a proper balance between
minimalism (everything is text and boxes) and over-engineering (having an icon for
every conceivable modeling element). To that end, they were very careful about
adding new things, because they didn’t want to make the UML unnecessarily complex.
Along the way, however, some things were found that were advantageous to add
because they have proven useful in practice in other modeling.
There are several new concepts that are included in UML, including
•
•
•
•
•
•
extensibility mechanisms (stereotypes, tagged values, and constraints),
threads and processes,
distribution and concurrency (e.g., for modeling ActiveX/DCOM and CORBA),
patterns/collaborations,
activity diagrams (for business process modeling),
refinement (to handle relationships between levels of abstraction),
OMG-UML V1.3
Scope of the UML
March 2000
1-9
1
•
•
interfaces and components, and
a constraint language.
Many of these ideas were present in various individual methods and theories but UML
brings them together into a coherent whole. In addition to these major changes, there
are many other localized improvements over the Booch, OMT, and OOSE semantics
and notation.
The UML is an evolution from Booch, OMT, OOSE, other object-oriented methods,
and many other sources. These various sources incorporated many different elements
from many authors, including non-OO influences. The UML notation is a melding of
graphical syntax from various sources, with a number of symbols removed (because
they were confusing, superfluous, or little used) and with a few new symbols added.
The ideas in the UML come from the community of ideas developed by many different
people in the object-oriented field. The UML developers did not invent most of these
ideas; rather, their role was to select and integrate the best ideas from object modeling
and computer-science practices. The actual genealogy of the notation and underlying
detailed semantics is complicated, so it is discussed here only to provide context, not to
represent precise history.
Use-case diagrams are similar in appearance to those in OOSE.
Class diagrams are a melding of OMT, Booch, class diagrams of most other object
methods. Stereotypes and their corresponding icons can be defined for various
diagrams to support other modeling styles. Stereotypes, constraints, and taggedValues
are concepts added in UML that did not previously exist in the major modeling
languages.
Statechart diagrams are substantially based on the statecharts of David Harel with
minor modifications. Activity graph diagrams, which share much of the same
underlying semantics, are similar to the work flow diagrams developed by many
sources including many pre-object sources.
Sequence diagrams were found in a variety of object methods under a variety of names
(interaction, message trace, and event trace) and date to pre-object days. Collaboration
diagrams were adapted from Booch (object diagram), Fusion (object interaction
graph), and a number of other sources.
Collaborations are now first-class modeling entities, and often form the basis of
patterns.
The implementation diagrams (component and deployment diagrams) are derived from
Booch’s module and process diagrams, but they are now component-centered, rather
than module-centered and are far better interconnected.
Stereotypes are one of the extension mechanisms and extend the semantics of the
metamodel. User-defined icons can be associated with given stereotypes for tailoring
the UML to specific processes.
1-10
OMG-UML V1.3
March 2000
1
Object Constraint Language is used by UML to specify the semantics and is provided
as a language for expressions during modeling. OCL is an expression language having
its root in the Syntropy method and has been influenced by expression languages in
other methods like Catalysis. The informal navigation from OMT has the same intent,
where OCL is formalized and more extensive.
Each of these concepts has further predecessors and many other influences. We realize
that any brief list of influences is incomplete and we recognize that the UML is the
product of a long history of ideas in the computer science and software engineering
area.
1.6 UML - Past, Present, and Future
The UML was developed by Rational Software and its partners. Many companies are
incorporating the UML as a standard into their development process and products,
which cover disciplines such as business modeling, requirements management, analysis
& design, programming, and testing.
1.6.1 UML 0.8 - 0.91
1.6.1.1 Precursors to UML
Identifiable object-oriented modeling languages began to appear between mid-1970s
and the late 1980s as various methodologists experimented with different approaches to
object-oriented analysis and design. Several other techniques influenced these
languages, including Entity-Relationship modeling, the Specification & Description
Language (SDL, circa 1976, CCITT), and other techniques. The number of identified
modeling languages increased from less than 10 to more than 50 during the period
between 1989-1994. Many users of object methods had trouble finding complete
satisfaction in any one modeling language, fueling the “method wars.” By the mid1990s, new iterations of these methods began to appear, most notably Booch’93, the
continued evolution of OMT, and Fusion. These methods began to incorporate each
other’s techniques, and a few clearly prominent methods emerged, including the
OOSE, OMT-2, and Booch’93 methods. Each of these was a complete method, and
was recognized as having certain strengths. In simple terms, OOSE was a use-case
oriented approach that provided excellent support business engineering and
requirements analysis. OMT-2 was especially expressive for analysis and data-intensive
information systems. Booch’93 was particularly expressive during design and
construction phases of projects and popular for engineering-intensive applications.
1.6.1.2 Booch, Rumbaugh, and Jacobson Join Forces
The development of UML began in October of 1994 when Grady Booch and Jim
Rumbaugh of Rational Software Corporation began their work on unifying the Booch
and OMT (Object Modeling Technique) methods. Given that the Booch and OMT
methods were already independently growing together and were collectively
recognized as leading object-oriented methods worldwide, Booch and Rumbaugh
joined forces to forge a complete unification of their work. A draft version 0.8 of the
OMG-UML V1.3
UML - Past, Present, and Future
March 2000
1-11
1
Unified Method, as it was then called, was released in October of 1995. In the Fall of
1995, Ivar Jacobson and his Objectory company joined Rational and this unification
effort, merging in the OOSE (Object-Oriented Software Engineering) method. The
Objectory name is now used within Rational primarily to describe its UML-compliant
process, the Rational Unified Process.
As the primary authors of the Booch, OMT, and OOSE methods, Grady Booch, Jim
Rumbaugh, and Ivar Jacobson were motivated to create a unified modeling language
for three reasons. First, these methods were already evolving toward each other
independently. It made sense to continue that evolution together rather than apart,
eliminating the potential for any unnecessary and gratuitous differences that would
further confuse users. Second, by unifying the semantics and notation, they could
bring some stability to the object-oriented marketplace, allowing projects to settle on
one mature modeling language and letting tool builders focus on delivering more
useful features. Third, they expected that their collaboration would yield
improvements in all three earlier methods, helping them to capture lessons learned and
to address problems that none of their methods previously handled well.
As they began their unification, they established four goals to focus their efforts:
1. Enable the modeling of systems (and not just software) using object-oriented
concepts
2. Establish an explicit coupling to conceptual as well as executable artifacts
3. Address the issues of scale inherent in complex, mission-critical systems
4. Create a modeling language usable by both humans and machines
Devising a notation for use in object-oriented analysis and design is not unlike
designing a programming language. There are tradeoffs. First, one must bound the
problem: Should the notation encompass requirement specification? (Yes, partially.)
Should the notation extend to the level of a visual programming language? (No.)
Second, one must strike a balance between expressiveness and simplicity: Too simple a
notation will limit the breadth of problems that can be solved; too complex a notation
will overwhelm the mortal developer. In the case of unifying existing methods, one
must also be sensitive to the installed base: Make too many changes, and you will
confuse existing users. Resist advancing the notation, and you will miss the
opportunity of engaging a much broader set of users. The UML definition strives to
make the best tradeoffs in each of these areas.
The efforts of Booch, Rumbaugh, and Jacobson resulted in the release of the UML 0.9
and 0.91 documents in June and October of 1996. During 1996, the UML authors
invited and received feedback from the general community. They incorporated this
feedback, but it was clear that additional focused attention was still required.
1.6.2 UML Partners
During 1996, it became clear that several organizations saw UML as strategic to their
business. A Request for Proposal (RFP) issued by the Object Management Group
(OMG) provided the catalyst for these organizations to join forces around producing a
1-12
OMG-UML V1.3
March 2000
1
joint RFP response. Rational established the UML Partners consortium with several
organizations willing to dedicate resources to work toward a strong UML definition.
Those contributing most to the UML definition included: Digital Equipment Corp., HP,
i-Logix, IntelliCorp, IBM, ICON Computing, MCI Systemhouse, Microsoft, Oracle,
Rational Software, TI, and Unisys. This collaboration produced UML, a modeling
language that was well defined, expressive, powerful, and generally applicable.
In January 1997 IBM & ObjecTime; Platinum Technology; Ptech; Taskon & Reich
Technologies; and Softeam also submitted separate RFP responses to the OMG. These
companies joined the UML partners to contribute their ideas, and together the partners
produced the revised UML 1.1 response. The focus of the UML 1.1 release was to
improve the clarity of the UML 1.0 semantics and to incorporate contributions from
the new partners.
This document is based on the UML 1.1 release and is the result of a collaborative
team effort. The UML Partners have worked hard as a team to define UML. While each
partner came in with their own perspective and areas of interest, the result has
benefited from each of them and from the diversity of their experiences. The UML
Partners contributed a variety of expert perspectives, including, but not limited to, the
following: OMG and RM-ODP technology perspectives, business modeling, constraint
language, state machine semantics, types, interfaces, components, collaborations,
refinement, frameworks, distribution, and metamodel.
1.6.3 UML - Present and Future
The UML is nonproprietary and open to all. It addresses the needs of user and
scientific communities, as established by experience with the underlying methods on
which it is based. Many methodologists, organizations, and tool vendors have
committed to use it. Since the UML builds upon similar semantics and notation from
Booch, OMT, OOSE, and other leading methods and has incorporated input from the
UML partners and feedback from the general public, widespread adoption of the UML
should be straightforward.
There are two aspects of "unified" that the UML achieves: First, it effectively ends
many of the differences, often inconsequential, between the modeling languages of
previous methods. Secondly, and perhaps more importantly, it unifies the perspectives
among many different kinds of systems (business versus software), development phases
(requirements analysis, design, and implementation), and internal concepts.
1.6.3.1 Standardization of the UML
Many organizations have already endorsed the UML as their organization’s standard,
since it is based on the modeling languages of leading object methods. The UML is
ready for widespread use. This document is suitable as the primary source for authors
writing books and training materials, as well as developers implementing visual
modeling tools. Additional collateral, such as articles, training courses, examples, and
books, will soon make the UML very approachable for a wide audience.
OMG-UML V1.3
UML - Past, Present, and Future
March 2000
1-13
1
The Unified Modeling Language v. 1.1 specification which was added to the list of
OMG Adopted Technologies in November 1997. Since then the OMG has assumed
responsibility for the further development of the UML standard.
1.6.3.2 Revision of the UML
After adoption of the UML 1.1 proposal by the OMG membership in November 1997,
the OMG chartered a revision task force (RTF) to accept comments from the general
public and to make revisions to the specifications to handle bugs, inconsistencies,
ambiguities, and minor omissions that could be handled without a major change in
scope from the original proposal. The members of the RTF were drawn from the
original proposers with a few additional persons. The RTF issued several preliminary
reports with the final report containing UML 1.3 due for the second quarter of 1999. It
contains a number of changes to the UML metamodel, semantics, and notation, but in
the big picture this version should be considered a minor upgrade to the original
proposal. More substantive changes and expansion in scope would require the full
OMG proposal and adoption process.
1.6.3.3 Industrialization
Many organizations and vendors worldwide have already embraced the UML. The
number of endorsing organizations is expected to grow significantly over time. These
organizations will continue to encourage the use of the Unified Modeling Language by
making the definition readily available and by encouraging other methodologists, tool
vendors, training organizations, and authors to adopt the UML.
The real measure of the UML’s success is its use on successful projects and the
increasing demand for supporting tools, books, training, and mentoring.
1.6.3.4 Future UML Evolution
Although the UML defines a precise language, it is not a barrier to future
improvements in modeling concepts. We have addressed many leading-edge
techniques, but expect additional techniques to influence future versions of the UML.
Many advanced techniques can be defined using UML as a base. The UML can be
extended without redefining the UML core.
The UML, in its current form, is expected to be the basis for many tools, including
those for visual modeling, simulation, and development environments. As interesting
tool integrations are developed, implementation standards based on the UML will
become increasingly available.
The UML has integrated many disparate ideas, so this integration will accelerate the
use of object-orientation. Component-based development is an approach worth
mentioning. It is synergistic with traditional object-oriented techniques. While reuse
based on components is becoming increasingly widespread, this does not mean that
component-based techniques will replace object-oriented techniques. There are only
subtle differences between the semantics of components and classes.
1-14
OMG-UML V1.3
March 2000
2
UML Semantics
Contents
This chapter contains the following sections.
Section Title
Page
Part 1 - Background
“Introduction”
2-2
“Language Architecture”
2-3
“Language Formalism”
2-7
Part 2 - Foundation
“Foundation Package”
2-11
“Core”
2-12
“Extension Mechanisms”
2-67
“Data Types”
2-77
Part 3 - Behavioral Elements
“Behavioral Elements Package”
2-85
“Common Behavior”
2-86
“Collaborations”
2-106
“Use Cases”
2-119
“State Machines”
2-130
OMG-UML V1.3
March 2000
2-1
2
Section Title
Page
“Activity Graphs”
2-160
Part 4 - General Mechanisms
“Model Management”
2-171
Part 1 - Background
2.1 Introduction
2.1.1 Purpose and Scope
The primary audience for this detailed description consists of the OMG, other
standards organizations, tool builders, metamodelers, methodologists, and expert
modelers. The authors assume familiarity with metamodeling and advanced object
modeling. Readers looking for an introduction to the UML or object modeling should
consider another source.
Although the document is meant for advanced readers, it is also meant to be easily
understood. Consequently, it is structured and written to increase readability. The
structure of the document, like the language, builds on previous concepts to refine and
extend the semantics. In addition, the document is written in a ‘semi-formal’ style that
combines natural and formal languages in a complementary manner.
This section specifies semantics for structural and behavioral object models. Structural
models (also known as static models) emphasize the structure of objects in a system,
including their classes, interfaces, attributes and relations. Behavioral models (also
known as dynamic models) emphasize the behavior of objects in a system, including
their methods, interactions, collaborations, and state histories.
This section provides complete semantics for all modeling notations described in the
UML Notation Guide (Chapter 3). This includes support for a wide range of diagram
techniques: class diagram, object diagram, use case diagram, sequence diagram,
collaboration diagram, state diagram, activity diagram, and deployment diagram. The
UML Notation Guide includes a summary of the semantics sections that are relevant to
each diagram technique.
2.1.2 Approach
This section emphasizes language architecture and formal rigor. The architecture of the
UML is based on a four-layer metamodel structure, which consists of the following
layers: user objects, model, metamodel, and meta-metamodel. This document is
primarily concerned with the metamodel layer, which is an instance of the metametamodel layer. For example, Class in the metamodel is an instance of MetaClass in
the meta-metamodel. The metamodel architecture of UML is discussed further in
Section 2.2, “Language Architecture,” on page 2-3.
2-2
OMG-UML V1.3
March 2000
2
The UML metamodel is a logical model and not a physical (or implementation) model.
The advantage of a logical metamodel is that it emphasizes declarative semantics, and
suppresses implementation details. Implementations that use the logical metamodel
must conform to its semantics, and must be able to import and export full as well as
partial models. However, tool vendors may construct the logical metamodel in various
ways, so they can tune their implementations for reliability and performance. The
disadvantage of a logical model is that it lacks the imperative semantics required for
accurate and efficient implementation. Consequently, the metamodel is accompanied
with implementation notes for tool builders.
UML is also structured within the metamodel layer. The language is decomposed into
several logical packages: Foundation, Behavioral Elements, and Model Management.
These packages in turn are decomposed into subpackages. For example, the Foundation
package consists of the Core, Extension Mechanisms, and Data Types subpackages.
The structure of the language is fully described in Section 2.2, “Language
Architecture,” on page 2-3.
The metamodel is described in a semi-formal manner using these views:
•
•
•
Abstract syntax
Well-formedness rules
Semantics
The abstract syntax is provided as a model described in a subset of UML, consisting of
a UML class diagram and a supporting natural language description. (In this way the
UML bootstraps itself in a manner similar to how a compiler is used to compile itself.)
The well-formedness rules are provided using a formal language (Object Constraint
Language) and natural language (English). Finally, the semantics are described
primarily in natural language, but may include some additional notation, depending on
the part of the model being described. The adaptation of formal techniques to specify
the language is fully described in Section 2.3, “Language Formalism,” on page 2-7.
In summary, the UML metamodel is described in a combination of graphic notation,
natural language and formal language. We recognize that there are theoretical limits to
what one can express about a metamodel using the metamodel itself. However, our
experience suggests that this combination strikes a reasonable balance between
expressiveness and readability.
2.2 Language Architecture
2.2.1 Four-Layer Metamodel Architecture
The UML metamodel is defined as one of the layers of a four-layer metamodeling
architecture. This architecture is a proven infrastructure for defining the precise
semantics required by complex models. There are several other advantages associated
with this approach:
•
It refines semantic constructs by recursively applying them to successive
metalayers.
OMG-UML V1.3
Language Architecture
March 2000
2-3
2
•
•
It provides an architectural basis for defining future UML metamodel extensions.
It furnishes an architectural basis for aligning the UML metamodel with other
standards based on a four-layer metamodeling architecture, in particular the OMG
Meta-Object Facility (MOF).
The generally accepted framework for metamodeling is based on an architecture with
four layers:
•
•
•
•
meta-metamodel
metamodel
model
user objects
The functions of these layers are summarized in the following table.
Table 2-1 Summary of layers
Layer
Description
Example
meta-metamodel
The infrastructure for a
metamodeling
architecture. Defines the
language for specifying
metamodels.
MetaClass, MetaAttribute,
MetaOperation
metamodel
An instance of a metametamodel. Defines the
language for specifying a
model.
Class, Attribute, Operation,
Component
model
An instance of a
metamodel. Defines a
language to describe an
information domain.
StockShare, askPrice,
sellLimitOrder,
StockQuoteServer
user objects (user data)
An instance of a model.
Defines a specific
information domain.
<Acme_SW_Share_98789>,
654.56, sell_limit_order,
<Stock_Quote_Svr_32123>
The meta-metamodeling layer forms the foundation for the metamodeling architecture.
The primary responsibility of this layer is to define the language for specifying a
metamodel. A meta-metamodel defines a model at a higher level of abstraction than a
metamodel, and is typically more compact than the metamodel that it describes. A
meta-metamodel can define multiple metamodels, and there can be multiple metametamodels associated with each metamodel.
While it is generally desirable that related metamodels and meta-metamodels share
common design philosophies and constructs, this is not a strict rule. Each layer needs
to maintain its own design integrity. Examples of meta-metaobjects in the metametamodeling layer are: MetaClass, MetaAttribute, and MetaOperation.
2-4
OMG-UML V1.3
March 2000
2
A metamodel is an instance of a meta-metamodel. The primary responsibility of the
metamodel layer is to define a language for specifying models. Metamodels are
typically more elaborate than the meta-metamodels that describe them, especially when
they define dynamic semantics. Examples of metaobjects in the metamodeling layer
are: Class, Attribute, Operation, and Component.
A model is an instance of a metamodel. The primary responsibility of the model layer
is to define a language that describes an information domain. Examples of objects in
the modeling layer are: StockShare, askPrice, sellLimitOrder, and StockQuoteServer.
User objects (a.k.a. user data) are an instance of a model. The primary responsibility of
the user objects layer is to describe a specific information domain. Examples of objects
in the user objects layer are: <Acme_Software_Share_98789>, 654.56,
sell_limit_order, and <Stock_Quote_Svr_32123>.
2.2.1.1 Architectural Alignment with the MOF Meta-Metamodel
Both the UML and the MOF are based on a four-layer metamodel architecture, where
the MOF meta-metamodel is the meta-metamodel for the UML metamodel. Since the
MOF and UML have different scopes and differ in their abstraction levels (the UML
metamodel tends to be more of a logical model than the MOF meta-metamodel), they
are related by loose metamodeling rather than strict metamodeling.1 As a result, the
UML metamodel is an instance of the MOF meta-metamodel.
Consequently, there is not a strict isomorphic instance-of mapping between all the
MOF meta-metamodel elements and the UML metamodel elements. In spite of this,
since the two models were designed to be interoperable, the UML Core package
metamodel and the MOF meta-metamodel are structurally quite similar.
2.2.2 Package Structure
The complexity of the UML metamodel is managed by organizing it into logical
packages. These packages group metaclasses that show strong cohesion with each
other and loose coupling with metaclasses in other packages. The metamodel is
decomposed into the top-level packages shown in Figure 2-1 on page 2-6.
1.In loose (or “non-strict”) metamodeling an Mn level model is an instance of an Mn+1 level
model. In strict metamodeling, every element of an Mn level model is an instance of exactly
one element of Mn+1 level model.
OMG-UML V1.3
Language Architecture
March 2000
2-5
2
Behavioral
Elements
Model
Management
Foundation
Figure 2-1 Top-Level Packages
The Foundation and Behavioral Elements packages are further decomposed as shown
in Figure 2-2 and Figure 2-3 on page 2-7.
C ore
E xtens ion
Mec hanis m s
D ata Types
Figure 2-2 Foundation Packages
2-6
OMG-UML V1.3
March 2000
2
Ac tivity Gr ap hs
C ollaborations
Us e C as es
S tate Mac hines
C om m on
B ehavior
Figure 2-3 Behavioral Elements Packages
The functions and contents of these packages are described in this chapter’s Part 3,
Behavioral Elements.
2.3 Language Formalism
This section contains a description of the techniques used to describe UML. The
specification adapts formal techniques to improve precision while maintaining
readability. The technique describes the UML metamodel in three views using both
text and graphic presentations. The benefits of adapting formal techniques include:
•
•
•
•
the correctness of the description is improved,
ambiguities and inconsistencies are reduced,
the architecture of the metamodel is validated by a complementary technique, and
the readability of the description is increased.
It is important to note that the current description is not a completely formal
specification of the language because to do so would have added significant complexity
without clear benefit. In addition, the state of the practice in formal specifications does
not yet address some of the more difficult language issues that UML introduces.
The structure of the language is nevertheless given a precise specification, which is
required for tool interoperability. The dynamic semantics are described using natural
language, although in a precise way so they can easily be understood. Currently, the
dynamic semantics are not considered essential for the development of tools; however,
this will probably change in the future.
OMG-UML V1.3
Language Formalism
March 2000
2-7
2
2.3.1 Levels of Formalism
A common technique for specification of languages is to first define the syntax of the
language and then to describe its static and dynamic semantics. The syntax defines
what constructs exist in the language and how the constructs are built up in terms of
other constructs. Sometimes, especially if the language has a graphic syntax, it is
important to define the syntax in a notation independent way (i.e., to define the abstract
syntax of the language). The concrete syntax is then defined by mapping the notation
onto the abstract syntax. The syntax is described in the Abstract Syntax sections.
The static semantics of a language define how an instance of a construct should be
connected to other instances to be meaningful, and the dynamic semantics define the
meaning of a well-formed construct. The meaning of a description written in the
language is defined only if the description is well formed (i.e., if it fulfills the rules
defined in the static semantics). The static semantics are found in sections headed
Well-Formedness Rules. The dynamic semantics are described under the heading
Semantics. In some cases, parts of the static semantics are also explained in the
Semantics section for completeness.
The specification uses a combination of languages - a subset of UML, an object
constraint language, and precise natural language to describe the abstract syntax and
semantics of the full UML. The description is self-contained; no other sources of
information are needed to read the document2. Although this is a metacircular
description3, understanding this document is practical since only a small subset of
UML constructs are needed to describe its semantics.
In constructing the UML metamodel different techniques have been used to specify
language constructs, using some of the capabilities of UML. The main language
constructs are reified into metaclasses in the metamodel. Other constructs, in essence
being variants of other ones, are defined as stereotypes of metaclasses in the
metamodel. This mechanism allows the semantics of the variant construct to be
significantly different from the base metaclass. Another more "lightweight" way of
defining variants is to use metaattributes. As an example, the aggregation construct is
specified by an attribute of the metaclass AssociationEnd, which is used to indicate if
an association is an ordinary aggregate, a composite aggregate, or a common
association.
2.3.2 Package Specification Structure
This section provides information for each package in the UML metamodel. Each
package has one or more of the following subsections.
2. Although a comprehension of the UML’s four-layer metamodel architecture and its
underlying meta-metamodel is helpful, it is not essential to understand the UML semantics.
3. In order to understand the description of the UML semantics, you must understand some
UML semantics.
2-8
OMG-UML V1.3
March 2000
2
2.3.2.1 Abstract Syntax
The abstract syntax is presented in a UML class diagram showing the metaclasses
defining the constructs and their relationships. The diagram also presents some of the
well-formedness rules, mainly the multiplicity requirements of the relationships, and
whether or not the instances of a particular sub-construct must be ordered. Finally, a
short informal description in natural language describing each construct is supplied.
The first paragraph of each of these descriptions is a general presentation of the
construct which sets the context, while the following paragraphs give the informal
definition of the metaclass specifying the construct in UML. For each metaclass, its
attributes are enumerated together with a short explanation. Furthermore, the opposite
role names of associations connected to the metaclass are also listed in the same way.
2.3.2.2 Well-Formedness Rules
The static semantics of UML metaclasses, except for multiplicity and ordering
constraints, are defined as a set of invariants of an instance of the metaclass. (Note that
a metaclass is not required to have any invariants.) These invariants have to be satisfied
for the construct to be meaningful. The rules thus specify constraints over attributes
and associations defined in the metamodel. Each invariant is defined by an OCL
expression together with an informal explanation of the expression. In many cases,
additional operations on the metaclasses are needed for the OCL expressions. These
are then defined in a separate subsection after the well-formedness rules for the
construct, using the same approach as the abstract syntax: an informal explanation
followed by the OCL expression defining the operation.
The statement ‘No extra well-formedness rules’ means that all current static semantics
are expressed in the superclasses together with the multiplicity and type information
expressed in the diagrams.
2.3.2.3 Semantics
The meanings of the constructs are defined using natural language. The constructs are
grouped into logical chunks that are defined together. Since only concrete metaclasses
have a true meaning in the language, only these are described in this section.
2.3.2.4 Standard Elements
Stereotypes of the metaclasses defined previously in the section are listed, with an
informal definition in natural language. Well-formedness rules, if any, for the
stereotypes are also defined in the same manner as in the Well-Formedness Rules
subsection.
Other kinds of standard elements (constraints and tagged-values) are listed, and are
defined in Appendix A - UML Standard Elements.
OMG-UML V1.3
Language Formalism
March 2000
2-9
2
2.3.2.5 Notes
This subsection contains rationales for metamodeling decisions, pragmatics for the use
of the constructs, and examples, all written in natural language.
2.3.3 Use of a Constraint Language
The specification uses the Object Constraint Language (OCL), as defined in the
“Object Constraint Language Specification" chapter for expressing well-formedness
rules. The following conventions are used to promote readability:
•
Self - which can be omitted as a reference to the metaclass defining the context of
the invariant, has been kept for clarity.
•
In expressions where a collection is iterated, an iterator is used for clarity, even
when formally unnecessary. The type of the iterator is usually omitted, but included
when it adds to understanding.
•
The ‘collect’ operation is left implicit where this is practical.
2.3.4 Use of Natural Language
The authors strove to be precise in their use of natural language, in this case English.
For example, the description of UML semantics includes phrases such as “X provides
the ability to…” and “X is a Y.” In each of these cases, the usual English meaning is
assumed, although a deeply formal description would demand a specification of the
semantics of even these simple phrases.
The following general rules apply:
•
When referring to an instance of some metaclass, we often omit the word
"instance." For example, instead of "a Class instance" or "an Association instance,"
"a Class" or "an Association" is used. By prefixing it with an "a" or "an," assume
that "an instance of" is meant. In the same way, by saying something like
"Elements," "a set (or the set) of instances of the metaclass Element" is meant.
•
Every time a word coinciding with the name of some construct in UML is used, that
construct is referenced.
•
Terms including one of the prefixes sub, super, or meta are written as one word
(e.g., metamodel, subclass).
2.3.5 Naming Conventions and Typography
In the description of UML, the following conventions have been used:
2-10
•
When referring to constructs in UML, not their representation in the metamodel,
normal text is used.
•
Metaclass names that consist of appended nouns/adjectives, initial embedded
capitals are used (e.g., ‘ModelElement,’ ‘StructuralFeature’).
OMG-UML V1.3
March 2000
2
•
Names of metaassociations/association classes are written in the same manner as
metaclasses (e.g., ‘ElementReference’).
•
Initial embedded capital is used for names that consist of appended nouns/adjectives
(e.g., ‘ownedElement,’ ‘allContents’).
•
•
•
Boolean metaattribute names always start with ‘is’ (e.g., ‘isAbstract’).
•
Names of stereotypes are delimited by guillemets and begin with lowercase (e.g.,
«type»).
Enumeration types always end with “Kind” (e.g., ‘AggregationKind’).
While referring to metaclasses, metaassociations, and metaattributes in the text, the
exact names as they appear in the model are always used.
Part 2 - Foundation
2.4 Foundation Package
The Foundation package is the language infrastructure that specifies the static structure
of models. The Foundation package is decomposed into the following subpackages:
Core, Extension Mechanisms, and Data Types. Figure 2-4 illustrates the Foundation
Packages. The Core package specifies the basic concepts required for an elementary
metamodel and defines an architectural backbone for attaching additional language
constructs, such as metaclasses, metaassociations, and metaattributes. The Extension
Mechanisms package specifies how model elements are customized and extended with
new semantics. The Data Types package defines basic data structures for the language.
Core
Extension
Mechanism s
Data Types
Figure 2-4 Foundation Packages
OMG-UML V1.3
Foundation Package
March 2000
2-11
2
2.5 Core
2.5.1 Overview
The Core package is the most fundamental of the subpackages that compose the UML
Foundation package. It defines the basic abstract and concrete metamodel constructs
needed for the development of object models. Abstract constructs are not instantiable
and are commonly used to reify key constructs, share structure, and organize the UML
metamodel. Concrete metamodel constructs are instantiable and reflect the modeling
constructs used by object modelers (cf. metamodelers). Abstract constructs defined in
the Core include ModelElement, GeneralizableElement, and Classifier. Concrete
constructs specified in the Core include Class, Attribute, Operation, and Association.
The Core package specifies the core constructs required for a basic metamodel and
defines an architectural backbone (“skeleton”) for attaching additional language
constructs such as metaclasses, metaassociations, and metaattributes. Although the
Core package contains sufficient semantics to define the remainder of UML, it is not
the UML meta-metamodel. It is the underlying base for the Foundation package, which
in turn serves as the infrastructure for the rest of language. In other packages, the Core
is extended by adding metaclasses to the backbone using generalizations and
associations.
The following sections describe the abstract syntax, well-formedness rules, and
semantics of the Core package.
2.5.2 Abstract Syntax
The abstract syntax for the Core package is expressed in graphic notation in the
following figures. Figure 2-5 on page 2-13 shows the model elements that form the
structural backbone of the metamodel. Figure 2-6 on page 2-14 shows the model
elements that define relationships. Figure 2-7 on page 2-15 shows the model elements
that define dependencies. Figure 2-8 on page 2-16 shows the various kinds of
classifiers. Figure 2-9 on page 2-17 shows auxiliary elements for template parameters,
presentation elements, and comments.
2-12
OMG-UML V1.3
March 2000
2
Element
+constrainedElement
ModelElement
name : Name
1..*
{ordered}
*
+ownedElement
ElementOwnership
visibility: VisibilityKind
isSpecification: Boolean
+constraint
+namespace
0..1
Feature
ownerScope : ScopeKind
visibility : VisibilityKind
*
*
GeneralizableElement
isRoot : Boolean
isLeaf : Boolean
isAbstract : Boolean
Namespace
*
+feature
Constraint
body: BooleanExpression
Parameter
defaultValue : Expression
kind : ParameterDirectionKind
*
+parameter
+owner
0..1
1 +type
Classifier
{ordered}
1 +type
StructuralFeature
multiplicity : Multiplicity
changeability : ChangeableKind
targetScope: ScopeKind
Attribute
initialValue : Expression
*
0..1
BehavioralFeature
isQuery : Boolean
Operation
concurrency : CallConcurrencyKind
isRoot : Boolean
isLeaf : Boolean
isAbstract : Boolean
specification: String
1
*
+specification
{ordered}
Method
body: ProcedureExpression
Figure 2-5 Core Package - Backbone
OMG-UML V1.3
Core
March 2000
2-13
2
+source *
ModelElement
name : Name
+target *
Relationship
+sourceFlow
*
+targetFlow
*
Flow
+generalization
Generalization
+child
1
*
discriminator : Name
*
+specialization
GeneralizableElement
isRoot : Boolean
1 isLeaf : Boolean
isAbstract : Boolean
+parent
+powertypeRange *
+powertype 0..1
Classifier
+type
1
*
+specification
*
*
Attribute
Class
isActive : Boolean
AssociationEnd
isNavigable : Boolean
ordering : OrderingKind
aggregation : AggregationKind
targetScope : ScopeKind
multiplicity : Multiplicity
changeability : ChangeableKind
visibility : VisibilityKind
+qualifier +associationEnd
initialValue : Expression
*
{ordered}
0..1
AssociationClass
Figure 2-6 Core Package - Relationships
2-14
OMG-UML V1.3
March 2000
{ordered}
2..*
+connection
1
Association
2
Relationship
+supplier
ModelElement
name : Name
1..*
*
1..*
*
+client
+argument
+supplierDependency
Dependency
+clientDependency
1..*
{ordered}
0..1
Binding
Usage
Abstraction
mapping : MappingExpression
Permission
Figure 2-7 Core Package - Dependencies
OMG-UML V1.3
Core
March 2000
2-15
2
Classifier
Class
isActive : Boolean
DataType
Interface
Node
+deploymentLocation *
*
Component
+resident
*
+implementationLocation
Element
visibility : VisibilityKind
*
+resident
ModelElement
name : Name
Figure 2-8 Core Package - Classifiers
2-16
OMG-UML V1.3
March 2000
2
TemplateParameter
*
Element
{ordered}
+templateParameter
0..1
+defaultElement
*
0..1
ModelElement
name : Name
+subject
*
1..*
+argument
{ordered}
0..1
*
+presentation
PresentationElement
*
+annotatedElement
*
Comment
Binding
Figure 2-9 Core Package - Auxiliary Elements
2.5.2.1 Abstraction
An abstraction is a Dependency relationship that relates two elements or sets of
elements that represent the same concept at different levels of abstraction or from
different viewpoints.
In the metamodel, an Abstraction is a Dependency in which there is a mapping
between the supplier and the client. Depending on the specific stereotype of
Abstraction, the mapping may be formal or informal, and it may be unidirectional or
bidirectional.
If an Abstraction element has more than one client element, the supplier element maps
into the set of client elements as a group. For example, an analysis-level class might be
split into several design-level classes. The situation is similar if there is more than one
supplier element.
The UML standard stereotyped classes of Abstraction are Derivation, Realization,
Refinement, and Trace. (These are the names for the Abstraction class with the
stereotypes «derive», «realize», «refine», and «trace», respectively.)
OMG-UML V1.3
Core
March 2000
2-17
2
Attributes
mapping
A MappingExpression that states the abstraction relationship
between the supplier and the client. In some cases, such as
Derivation, it is usually formal and unidirectional; in other
cases, such as Trace, it is usually informal and bidirectional.
The mapping attribute is optional and may be omitted if the
precise relationship between the elements is not specified.
Stereotypes
2-18
«derive» Abstraction
(Name for the stereotyped class is Derivation.) Specifies a
derivation relationship among model elements that are
usually, but not necessarily, of the same type. A derived
dependency specifies that the client may be computed from
the supplier. The mapping specifies the computation. The
client may be implemented for design reasons, such as
efficiency, even though it is logically redundant.
«realize» Abstraction
(Name for the stereotyped class is Realization.) Specifies a
realization relationship between a specification model
element or elements (the supplier) and a model element or
elements that implement it (the client). The implementation
model element is required to support all of the operations or
received signals that the specification model element
declares. The implementation model element must make or
inherit its own declarations of the operations and signal
receptions. The mapping specifies the relationship between
the two. The mapping may or may not be computable.
Realization can be used to model stepwise refinement,
optimizations, transformations, templates, model synthesis,
and framework composition.
OMG-UML V1.3
March 2000
2
«refine» Abstraction
(Name for the stereotyped class is Refinement.) Specifies
refinement relationship between model elements at different
semantic levels, such as analysis and design.
The mapping specifies the relationship between the two
elements or sets of elements. The mapping may or may not
be computable, and it may be unidirectional or bidirectional.
Refinement can be used to model transformations from
analysis to design and other such changes.
«trace»
(Name for the stereotyped class is Trace.) Specifies a trace
relationship between model elements or sets of model
elements that represent the same concept in different models.
Traces are mainly used for tracking requirements and
changes across models. Since model changes can occur in
both directions, the directionality of the dependency can
often be ignored. The mapping specifies the relationship
between the two, but it is rarely computable and is usually
informal.
Abstraction
2.5.2.2 Association
An association defines a semantic relationship between classifiers. The instances of an
association are a set of tuples relating instances of the classifiers. Each tuple value may
appear at most once.
In the metamodel, an Association is a declaration of a semantic relationship between
Classifiers, such as Classes. An Association has at least two AssociationEnds. Each
end is connected to a Classifier - the same Classifier may be connected to more than
one AssociationEnd in the same Association. The Association represents a set of
connections among instances of the Classifiers. An instance of an Association is a
Link, which is a tuple of Instances drawn from the corresponding Classifiers.
Attributes
name
The name of the Association which, in combination with its
associated Classifiers, must be unique within the enclosing
namespace (usually a Package).
Associations
connection
OMG-UML V1.3
An Association consists of at least two AssociationEnds, each of
which represents a connection of the association to a Classifier.
Each AssociationEnd specifies a set of properties that must be
fulfilled for the relationship to be valid. The bulk of the structure
of an Association is defined by its AssociationEnds.
Core
March 2000
2-19
2
Stereotypes
implicit
Abstraction
The «implicit» stereotype is applied to an association, specifying
that the association is not manifest, but rather is only conceptual.
Standard Constraints
xor
Association
The {xor} constraint is applied to a set of associations, specifying
that over that set, exactly one is manifest for each associated
instance. Xor is an exclusive or (not inclusive or) constraint.
Tagged Values
persistence
Association
Persistence denotes the permanence of the state of the association,
marking it as transitory (its state is destroyed when the instance is
destroyed) or persistent (its state is not destroyed when the instance
is destroyed).
2.5.2.3 AssociationClass
An association class is an association that is also a class. It not only connects a set of
classifiers but also defines a set of features that belong to the relationship itself and not
any of the classifiers.
In the metamodel, an AssociationClass is a declaration of a semantic relationship
between Classifiers, which has a set of features of its own. AssociationClass is a
subclass of both Association and Class (i.e., each AssociationClass is both an
Association and a Class); therefore, an AssociationClass has both AssociationEnds and
Features.
2.5.2.4 AssociationEnd
An association end is an endpoint of an association, which connects the association to
a classifier. Each association end is part of one association. The association-ends of
each association are ordered.
In the metamodel, an AssociationEnd is part of an Association and specifies the
connection of an Association to a Classifier. It has a name and defines a set of
properties of the connection (e.g., which Classifier the Instances must conform to, their
multiplicity, and if they may be reached from another Instance via this connection).
In the following descriptions when referring to an association end for a binary
association, the source end is the other end. The target end is the one whose properties
are being discussed.
2-20
OMG-UML V1.3
March 2000
2
Attributes
aggregation
When placed on a target end, specifies whether the target end is an
aggregation with respect to the source end. Only one end can be
an aggregation. Possibilities are:
none - The end is not an aggregate.
aggregate - The end is an aggregate; therefore, the other end is a
part and must have the aggregation value of none. The part may be
contained in other aggregates.
composite - The end is a composite; therefore, the other end is a
part and must have the aggregation value of none. The part is
strongly owned by the composite and may not be part of any other
composite.
changeability
When placed on a target end, specifies whether an instance of the
Association may be modified from the source end. Possibilities
are:
• changeable - No restrictions on modification.
• frozen - No links may be added after the creation of the source object.
• addOnly - Links may be added at any time from the source object, but
once created a link may not be removed from the source end.
ordering
When placed on a target end, specifies whether the set of links
from the source instance to the target instance is ordered. The
ordering must be determined and maintained by Operations that
add links. It represents additional information not inherent in the
objects or links themselves. Possibilities are:
• unordered - The links form a set with no inherent ordering.
• ordered - A set of ordered links can be scanned in order.
Other possibilities (such as sorted) may be defined later by
declaring additional keywords. As with user-defined stereotypes,
this would be a private extension supported by particular editing
tools.
OMG-UML V1.3
Core
March 2000
2-21
2
isNavigable
When placed on a target end, specifies whether traversal from a
source instance to its associated target instances is possible.
Specification of each direction across the Association is
independent. A value of true means that the association can be
navigated by the source class and the target rolename can be used
in navigation expressions.
multiplicity
When placed on a target end, specifies the number of target
instances that may be associated with a single source instance
across the given Association.
name
(Inherited from ModelElement) The rolename of the end. When
placed on a target end, provides a name for traversing from a
source instance across the association to the target instance or set
of target instances. It represents a pseudo-attribute of the source
classifier (i.e., it may be used in the same way as an Attribute)
and must be unique with respect to Attributes and other pseudoattributes of the source Classifier.
targetScope
Specifies whether the target value is an instance or a classifier.
Possibilities are:
• instance. An instance value is part of each link. This is the default.
• classifier. A classifier itself is part of each link. Normally this would
be fixed at modeling time and need not be stored separately at run
time.
visibility
Specifies the visibility of the association end from the viewpoint
of the classifier on the other end. Possibilities are:
• public - Other classifiers may navigate the association and use the
rolename in expressions, similar to the use of a public attribute.
• protected - Descendants of the source classifier may navigate the
association and use the rolename in expressions, similar to the use of
a protected attribute.
• private - Only the source classifier may navigate the association and
use the rolename in expressions, similar to the use of a private
attribute.
2-22
OMG-UML V1.3
March 2000
2
Associations
qualifier
An optional list of qualifier Attributes for the end. If the list is
empty, then the Association is not qualified.
specification
Designates zero or more Classifiers that specify the Operations
that may be applied to an Instance accessed by the
AssociationEnd across the Association. These determine the
minimum interface that must be realized by the actual Classifier
attached to the end to support the intent of the Association. May
be an Interface or another Classifier.
type
Designates the Classifier connected to the end of the Association.
In a link, the actual class may be a descendant of the nominal
class or (for an Interface) a Class that realizes the declared type.
(unnamed
composite
end)
Designates the Association that owns the AssociationEnd.
Stereotypes
«association»
Abstraction
Specifies a real association (default and redundant, but may be
included for emphasis).
«global»
Abstraction
Specifies that the target is a global value that is known to all
elements rather than an actual association.
«local»
Abstraction
Specifies that the relationship represents a local variable within
a procedure rather than an actual association.
«parameter»
Abstraction
Specifies that the relationship represents a procedure parameter
rather than an actual association.
«self»
Specifies that the relationship represents a reference to the
object that owns an operation or action rather than an actual
association.
Abstraction
2.5.2.5 Attribute
An attribute is a named slot within a classifier that describes a range of values that
instances of the classifier may hold.
In the metamodel, an Attribute is a named piece of the declared state of a Classifier,
particularly the range of values that Instances of the Classifier may hold.
(The following list includes properties from StructuralFeature, which has no other
subclasses in the current metamodel.)
OMG-UML V1.3
Core
March 2000
2-23
2
Attributes
changeability
Whether the value may be modified after the object is created.
Possibilities are:
• changeable - No restrictions on modification.
• frozen - The value may not be altered after the object is instantiated
and its values initialized. No additional values may be added to a set.
• addOnly - Meaningful only if the multiplicity is not fixed to a single
value. Additional values may be added to the set of values, but once
created a value may not be removed or altered.
initialValue
An Expression specifying the value of the attribute upon
initialization. It is meant to be evaluated at the time the object is
initialized. (Note that an explicit constructor may supersede an
initial value.)
multiplicity
The possible number of data values for the attribute that may be
held by an instance. The cardinality of the set of values is an
implicit part of the attribute. In the common case in which the
multiplicity is 1..1, then the attribute is a scalar (i.e., it holds
exactly one value).
targetScope
Specifies whether the targets are ordinary Instances or are
Classifiers. Possibilities are:
• instance - Each value contains a reference to an Instance of the target
Classifier. This is the setting for a normal Attribute.
• classifier - Each value contains a reference to the target Classifier
itself. This represents a way to store meta-information.
Associations
associationEnd
Designates the optional AssociationEnd that owns the qualifier
attribute. Note that an attribute may be part of an AssociationEnd
(in which case it is a qualifier) or part of a Classifier (by
inheritance from Feature, in which case it is a feature) but not
both.
type
Designates the classifier whose instances are values of the
attribute. Must be a Class, Interface, or DataType. The actual
type may be a descendant of the declared type or (for an
Interface) a Class that realizes the declared type.
Tagged Values
persistence
Association
2-24
Persistence denotes the permanence of the state of the attribute,
marking it as transitory (its state is destroyed when the instance is
destroyed) or persistent (its state is not destroyed when the
instance is destroyed).
OMG-UML V1.3
March 2000
2
2.5.2.6 BehavioralFeature
A behavioral feature refers to a dynamic feature of a model element, such as an
operation or method.
In the metamodel, a BehavioralFeature specifies a behavioral aspect of a Classifier. All
different kinds of behavioral aspects of a Classifier, such as Operation and Method, are
subclasses of BehavioralFeature. BehavioralFeature is an abstract metaclass.
Attributes
isQuery
Specifies whether an execution of the Feature leaves the state
of the system unchanged. True indicates that the state is
unchanged; false indicates that side-effects may occur.
name
(Inherited from ModelElement) The name of the Feature. The
entire signature of the Feature (name and parameter list) must
be unique within its containing Classifier.
Associations
parameter
An ordered list of Parameters for the Operation. To call the
Operation, the caller must supply a list of values compatible
with the types of the Parameters.
Stereotypes
Abstraction
Specifies that the designated feature creates an instance of the
classifier to which the feature is attached. May be promoted to
the Classifier containing the feature.
Abstraction
Specifies that the designated feature destroys an instance of
the classifier to which the feature is attached. May be
promoted to the classifier containing the feature.
«create»
«destroy»
2.5.2.7 Binding
A binding is a relationship between a template and a model element generated from the
template. It includes a list of arguments matching the template parameters. The
template is a form that is cloned and modified by substitution to yield an implicit
model fragment that behaves as if it were a direct part of the model. A Binding must
have one supplier and one client; unlike a general Dependency, the supplier and client
may not be sets.
In the metamodel, a Binding is a Dependency where the supplier is the template and
the client is the instantiation of the template that performs the substitution of
parameters of a template. A Binding has a list of arguments that replace the parameters
of the supplier to yield the client. The client is fully specified by the binding of the
OMG-UML V1.3
Core
March 2000
2-25
2
supplier’s parameters and does not add any information of its own. An element may
participate as a supplier in multiple Binding relationships to different clients. An
element may participate in only one Binding relationship as a client.
Associations
argument
An ordered list of arguments. Each argument replaces the
corresponding supplier parameter in the supplier definition, and the
result represents the definition of the client as if it had been
defined directly.
2.5.2.8 Class
A class is a description of a set of objects that share the same attributes, operations,
methods, relationships, and semantics. A class may use a set of interfaces to specify
collections of operations it provides to its environment.
In the metamodel, a Class describes a set of Objects sharing a collection of Features,
including Operations, Attributes and Methods, that are common to the set of Objects.
Furthermore, a Class may realize zero or more Interfaces; this means that its full
descriptor (see Section 2.5.4.4, “Inheritance,” on page 2-63 for the definition) must
contain every Operation from every realized Interface (it may contain additional
operations as well).
A Class defines the data structure of Objects, although some Classes may be abstract
(i.e., no Objects can be created directly from them). Each Object instantiated from a
Class contains its own set of values corresponding to the StructuralFeatures declared in
the full descriptor. Objects do not contain values corresponding to BehavioralFeatures
or class-scope Attributes; all Objects of a Class share the definitions of the
BehavioralFeatures from the Class, and they all have access to the single value stored
for each class-scope attribute.
Attributes
isActive
2-26
Specifies whether an Object of the Class maintains its own thread
of control. If true, then an Object has its own thread of control
and runs concurrently with other active Objects. Such a class is
informally called an active class. If false, then Operations run in
the address space and under the control of the active Object that
controls the caller. Such a class is informally called a passive
class.
OMG-UML V1.3
March 2000
2
Stereotypes
«implementationClass»
Abstraction
Specifies the implementation of a class in some
programming language in which an instance may not
have more than one class. This is in contrast to a general
UML Class, for which an instance may have multiple
classes at one time and may gain or lose classes over
time, and an object (a child of instance) may
dynamically have multiple classes.
«type»
Specifies a domain of instances (objects) together with
the operations applicable to the objects. A type may not
contain any methods, but it may have attributes and
associations.
Abstraction
2.5.2.9 Classifier
A classifier is an element that describes behavioral and structural features. It comes in
several specific forms including class, data type, interface, component, and others that
are defined in other metamodel packages.
In the metamodel, a Classifier declares a collection of Features, such as Attributes,
Methods, and Operations. It has a name, which is unique in the Namespace enclosing
the Classifier. Classifier is an abstract metaclass.
Classifier is a child of GeneralizableElement and Namespace. As a
GeneralizableElement, it may inherit Features and participation in Associations (in
addition to things inherited as a ModelElement). It also inherits ownership of
StateMachines, Collaborations, etc.
As a Namespace, a Classifier may declare other Classifiers nested in its scope. Nested
Classifiers may be accessed by other Classifiers only if the nested Classifiers have
adequate visibility. There are no data value or state consequences of nested Classifiers
(i.e., it is not an aggregation or composition).
OMG-UML V1.3
Core
March 2000
2-27
2
Associations
feature
An ordered list of Features, like Attribute, Operation, Method,
owned by the Classifier.
participant
Inverse of specification on association to AssociationEnd.
Denotes that the Classifier participates in an Association.
powertypeRange
Designates zero or more Generalizations for which the
Classifier is a powertype. If the cardinality is zero, then the
Classifier is not a powertype; if the cardinality is greater than
zero, then the Classifier is a powertype over the set of
Generalizations designated by the association, and the child
elements of the Generalizations are the instances of the
Classifier as a powertype. A Classifier that is a powertype can
be marked with the «powertype» stereotype.
Stereotypes
«metaclass» Abstraction
Specifies that the instances of the classifier are classes.
«powertype»Abstraction
Specifies that the classifier is a metatype, the instances of
which are children marked by the same discriminator.
«process»
Abstraction
Specifies a classifier that represents a heavy-weight flow
of control.
«thread»
Abstraction
Specifies a classifier that represents a flow of control.
«utility»
Abstraction
Specifies a classifier that has no instances, but rather
denotes a named collection of non-member attributes and
operations, all of which are class-scoped.
Tagged Values
persistence Association
Persistence denotes the permanence of the state of the
classifier, marking it as transitory (its state is destroyed
when the instance is destroyed) or persistent (its state is
not destroyed when the instance is destroyed).
semantics
Semantics is the specification of the meaning of the
classifier.
Association
2.5.2.10 Comment
A comment is an annotation attached to a model element or a set of model elements. It
has no semantic force but may contain information useful to the modeler.
2-28
OMG-UML V1.3
March 2000
2
Associations
annotatedElement
A ModelElement or set of ModelElements described by
the Comment.
Stereotypes
«requirement»
Abstraction
Specifies a desired feature, property, or behavior of an element
as part of a system.
«responsibility»
Abstraction
Specifies a contract or an obligation of an element in its
relationship to other elements.
2.5.2.11 Component
A component is a physical, replaceable part of a system that packages implementation
and provides the realization of a set of interfaces. A component represents a physical
piece of implementation of a system, including software code (source, binary or
executable) or equivalents such as scripts or command files. As such, a Component
may itself conform to and provide the realization of a set of interfaces, which represent
services implemented by the elements resident in the component. These services define
behavior offered by instances of the Component as a whole to other client Component
instances.
In the metamodel, a Component is a child of Classifier. It provides the physical
packaging of its associated specification elements. As a Classifier, it may also have its
own Features, such as Attributes and Operations, and realize Interfaces.
Associations
deploymentLocation
The set of Nodes the Component is residing on.
resident
(Association class ElementResidence) - The set of model
elements that the component supports. The visibility
attribute shows the external visibility of the element outside
the component.
Stereotypes
«document»
Abstraction
Denotes a document.
«executable»
Abstraction
Denotes a program that may be run on a node.
OMG-UML V1.3
Core
March 2000
2-29
2
Denotes a document containing source code or data.
«file»
Abstraction
Denotes a static or dynamic library.
«library»
Abstraction
Denotes a data base table.
«table»
Abstraction
2.5.2.12 Constraint
A constraint is a semantic condition or restriction expressed in text.
In the metamodel, a Constraint is a BooleanExpression on an associated
ModelElement(s) which must be true for the model to be well formed. This restriction
can be stated in natural language, or in different kinds of languages with a well-defined
semantics. Certain Constraints are predefined in the UML, others may be user defined.
Note that a Constraint is an assertion, not an executable mechanism. It indicates a
restriction that must be enforced by correct design of a system.
Attributes
body
A BooleanExpression that must be true when evaluated for
an instance of a system to be well-formed.
Associations
constrainedElement
A ModelElement or list of ModelElements affected by the
Constraint. If the constrained element is a Stereotype, then
the constraint applies to all ModelElements that use the
stereotype.
Stereotypes
2-30
«invariant»
Abstraction
Specifies a constraint that must be attached to a set of
classifiers or relationships. It indicates that the conditions of
the constraint must hold over time (for the time period of
concern in the particular containing element) for the classifiers
or relationships and their instances.
«postcondition»
Abstraction
Specifies a constraint that must be attached to an operation,
and denotes that the conditions of the constraint must hold
after the invocation of the operation.
«precondition»
Abstraction
Specifies a constraint that must be attached to an operation,
and denotes that the conditions of the constraint must hold for
the invocation of the operation.
OMG-UML V1.3
March 2000
2
2.5.2.13 DataType
A data type is a type whose values have no identity (i.e., they are pure values). Data
types include primitive built-in types (such as integer and string) as well as definable
enumeration types (such as the predefined enumeration type boolean whose literals are
false and true).
In the metamodel, a DataType defines a special kind of Classifier in which Operations
are all pure functions (i.e., they can return DataValues but they cannot change
DataValues, because they have no identity). For example, an “add” operation on a
number with another number as an argument yields a third number as a result; the
target and argument are unchanged.
2.5.2.14 Dependency
A term of convenience for a Relationship other than Association, Generalization, Flow,
or metarelationship (such as the relationship between a Classifier and one of its
Instances).
A dependency states that the implementation or functioning of one or more elements
requires the presence of one or more other elements.
In the metamodel, a Dependency is a directed relationship from a client (or clients) to
a supplier (or suppliers) stating that the client is dependent on the supplier (i.e., the
client element requires the presence and knowledge of the supplier element).
The kinds of Dependency are Abstraction, Binding, Permission, and Usage. Various
stereotypes of those elements are predefined.
Associations
client
The element that is affected by the supplier element. In some
cases (such as a Trace Abstraction) the direction is unimportant
and serves only to distinguish the two elements.
supplier
Inverse of client. Designates the element that is unaffected by a
change. In a two-way relationship (such as some Refinement
Abstractions) this would be the more general element. In an
undirected situation, such as a Trace Abstraction, the choice of
client and supplier may be irrelevant.
2.5.2.15 Element
An element is an atomic constituent of a model.
In the metamodel, an Element is the top metaclass in the metaclass hierarchy. It has
two subclasses: ModelElement and PresentationElement. Element is an abstract
metaclass.
OMG-UML V1.3
Core
March 2000
2-31
2
Tagged Values
documentation
Association
Documentation is a comment, description, or
explanation of the element to which it is attached.
2.5.2.16 ElementOwnership
Element ownership defines the visibility of a ModelElement contained in a
Namespace.
In the metamodel, ElementOwnership reifies the relationship between ModelElement
and Namespace denoting the ownership of a ModelElement by a Namespace and its
visibility outside the Namespace. See Section 2.5.2.24, “ModelElement,” on page 2-38.
Attributes
isSpecification
Specifies whether the ownedElement is part of the
specification for the containing namespace (in cases where
specification is distinguished from the realization). Otherwise
the ownedElement is part of the realization. In cases in which
the distinction is not made, the value is false by default.
visibility
Specifies whether the ModelElement can be seen and
referenced by other ModelElements. Possibilities include:
• public - Any outside ModelElement can see the ModelElement.
• protected - Any descendent of the ModelElement can see the
ModelElement.
• private - Only the ModelElement itself, its constituent parts, or
elements nested within it can see the ModelElement.
Note that use of an element in another Package may also be
subject to access or import of its Package as described in
Model Management; see Permission.
2.5.2.17 ElementResidence
Association class between Component and ModelElement. See Component::resident.
Shows that the component supports the element.
Attributes
visibility
Specifies whether the ModelElement can be used by other
Components. Possibilities include:
• public - Any outside Component can use the ModelElement.
• protected - Any descendent of the Component can use the
ModelElement.
• private - Only the Component itself can use the ModelElement.
2-32
OMG-UML V1.3
March 2000
2
2.5.2.18 Feature
A feature is a property, like operation or attribute, which is encapsulated within a
Classifier.
In the metamodel, a Feature declares a behavioral or structural characteristic of an
Instance of a Classifier or of the Classifier itself. Feature is an abstract metaclass.
Attributes
name
(Inherited from ModelElement) - The name used to identify
the Feature within the Classifier or Instance. It must be unique
across inheritance of names from ancestors including names
of outgoing AssociationEnd. (See more specific rules for the
exact details). Attributes, discriminators, and opposite
association ends must have unique names in the set of
inherited names. There may be multiple declarations of the
same operation. Multiple operations may have the same name
but different signatures (see the rules for precise details.)
ownerScope
Specifies whether Feature appears in each Instance of the
Classifier or whether there is just a single instance of the
Feature for the entire Classifier. Possibilities include:
• instance - Each Instance of the Classifier holds its own value for
the Feature.
• classifier - There is just one value of the Feature for the entire
Classifier.
visibility
Specifies whether the Feature can be used by other Classifiers.
Visibilities of nested Classifiers combine so that the most
restrictive visibility is the result. Possibilities include:
• public - Any outside Classifier with visibility to the Classifier can
use the Feature.
• protected - Any descendent of the Classifier can use the Feature.
• private - Only the Classifier itself can use the Feature.
Associations
owner
The Classifier declaring the Feature. Note that an Attribute
may be owned by a Classifier (in which case it is a feature) or
an AssociationEnd (in which case it is a qualifier) but not
both.
2.5.2.19 Flow
A flow is a relationship between two versions of an object or between an object and a
copy of it.
OMG-UML V1.3
Core
March 2000
2-33
2
In the metamodel, a Flow is a child of Relationship. A Flow is a directed relationship
from a source or sources to a target or targets. It usually connects an activity to or from
an object flow state, or two object flow states. It can also connect from a fork or to a
branch.
Predefined stereotypes of Flow are «become» and «copy». Become relates one version
of an object to another with a different value, state, or location. Copy relates an object
to another object that starts as a copy of it.
Stereotypes
«become»
Abstraction
Specifies a Flow relationship, source and target of which
represent the same instance at different points in time, but each
with potentially different values, state instance, and roles. A
Become Dependency from A to B means that instance A
becomes B with possibly new values, state instance, and roles
at a different moment in time/space.
«copy»
Specifies a Flow relationship, the source and target of which
are different instances, but each with the same values, state
instance, and roles (but a distinct identity). A Copy
Dependency from A to B means that B is an exact copy of A.
Future changes in A are not necessarily reflected in B.
Abstraction
2.5.2.20 GeneralizableElement
A generalizable element is a model element that may participate in a generalization
relationship.
In the metamodel, a GeneralizableElement can be a generalization of other
GeneralizableElements (i.e., all Features defined in and all ModelElements contained
in the ancestors are also present in the GeneralizableElement). GeneralizableElement is
an abstract metaclass.
Attributes
isAbstract
2-34
Specifies whether the GeneralizableElement may not have a
direct instance. True indicates that an instance of the
GeneralizableElement must be an instance of a chid of the
GeneralizableElement. False indicates that there may an
instance of the GeneralizableElement that is not an instance of
a child. An abstract GeneralizableElement is not instantiable
since it does not contain all necessary information.
OMG-UML V1.3
March 2000
2
isLeaf
Specifies whether the GeneralizableElement is a
GeneralizableElement with no descendants. True indicates that
it may not have descendants, false indicates that it may have
descendants (whether or not it actually has any descendants at
the moment).
isRoot
Specifies whether the GeneralizableElement is a root
GeneralizableElement with no ancestors. True indicates that it
may not have ancestors, false indicates that it may have
ancestors (whether or not it actually has any ancestors at the
moment).
Associations
generalization
Designates a Generalization whose parent
GeneralizableElement is the immediate ancestor of the current
GeneralizableElement.
specialization
Designates a Generalization whose child
GeneralizableElement is the immediate descendent of the
current GeneralizableElement.
2.5.2.21 Generalization
A generalization is a taxonomic relationship between a more general element and a
more specific element. The more specific element is fully consistent with the more
general element (it has all of its properties, members, and relationships) and may
contain additional information.
In the metamodel, a Generalization is a directed inheritance relationship, uniting a
GeneralizableElement with a more general GeneralizableElement in a hierarchy.
Generalization is a subtyping relationship (i.e., an Instance of the more general
GeneralizableElement may be substituted by an Instance of the more specific
GeneralizableElement). See Section 2.5.4.4, “Inheritance,” on page 2-63 for the
consequences of Generalization relationships.
OMG-UML V1.3
Core
March 2000
2-35
2
Attributes
discriminator
Designates the partition to which the Generalization link
belongs. All of the Generalization links that share a given
parent GeneralizableElement are divided into disjoint sets (that
is, partitions) by their discriminator names. Each partition (a
set of links sharing a discriminator name) represents an
orthogonal dimension of specialization of the parent
GeneralizableElement. The discriminator need not be unique.
The empty string is also considered as a partition name,
therefore all Generalization links have a discriminator. If the
set of Generalization links that have the same parent all have
the same name, then the children in the Generalization links
are GeneralizableElements that specialize the parent, and an
instance of any of them is a legal instance of the parent.
Otherwise an indirect instance of the parent must be a (direct
or indirect) instance of at least one element from each of the
partitions.
Associations
child
Designates a GeneralizableElement that is the specialized
version of the parent GeneralizableElement.
parent
Designates a GeneralizableElement that is the generalized
version of the child GeneralizableElement.
powertype
Designates a Classifier that serves as a powertype for the child
element along the dimension of generalization expressed by
the Generalization. The child element is therefore an instance
of the powertype element.
Stereotypes
«implementation»
Abstraction
2-36
Specifies that the child inherits the implementation of the
parent (its attributes, operations, and methods) but does not
make public the supplier’s interfaces nor guarantee to
support them, thereby violating substitutability. This is
private inheritance and is usually used only for programming
implementation purposes.
OMG-UML V1.3
March 2000
2
Standard Constraints
complete
Association
Specifies a constraint applied to a set of generalizations with the
same discriminator and the same parent, indicating that any
instance of the parent must be an instance of at least one child
within the set of generalizations. If a parent has a single
discriminator, the set of its child generalizations being complete
implies that the parent is abstract. The connotation of declaring a
set of generalizations complete is that all of the children with the
given discriminator have been declared and that additional ones
are not expected (in other words, the set of generalizations is
closed), and designs may assume with some confidence that the
set of children is fixed. If a new child is nevertheless added in
the future, existing models may be adversely affected and may
require modification.
disjoint
Association
Specifies a constraint applied to a set of generalizations,
indicating that instance of the parent may be an instance of no
more than one of the given children within the set of
generalizations. This is the default semantics of generalization.
incomplete
Association
Specifies a constraint applied to a set of generalizations with the
same discriminator, indicating that an instance of the parent need
not be an instance of a child within the set (but there is no
guarantee that such an instance will actually exist). Being
incomplete implies that the parent is concrete. The connotation
of declaring a set of generalizations incomplete is that all of the
children with the given discriminator have not necessarily been
declared and that additional ones might be added, therefore users
should not count on the set of children being fixed.
overlapping
Association
Specifies a constraint applied to a set of generalizations,
indicating that an instance of one child may be simultaneously
an instance of another child in the set (but there is no guarantee
that such an instance will actually exist).
2.5.2.22 Interface
An interface is a named set of operations that characterize the behavior of an element.
In the metamodel, an Interface contains a set of Operations that together define a
service offered by a Classifier realizing the Interface. A Classifier may offer several
services, which means that it may realize several Interfaces, and several Classifiers
may realize the same Interface.
Interfaces are GeneralizableElements.
OMG-UML V1.3
Core
March 2000
2-37
2
Interfaces may not have Attributes, Associations, or Methods. An Interface may
participate in an Association provided the Interface cannot see the Association; that is,
a Classifier (other than an Interface) may have an Association to an Interface that is
navigable from the Classifier but not from the Interface.
2.5.2.23 Method
A method is the implementation of an operation. It specifies the algorithm or procedure
that effects the results of an operation.
In the metamodel, a Method is a declaration of a named piece of behavior in a
Classifier and realizes one (directly) or a set (indirectly) of Operations of the Classifier.
Attributes
body
The implementation of the Method as a ProcedureExpression.
Associations
specification
Designates an Operation that the Method implements. The
Operation must be owned by the Classifier that owns the
Method or be inherited by it. The signatures of the Operation
and Method must match.
2.5.2.24 ModelElement
A model element is an element that is an abstraction drawn from the system being
modeled. Contrast with view element, which is an element whose purpose is to provide
a presentation of information for human comprehension.
In the metamodel, a ModelElement is a named entity in a Model. It is the base for all
modeling metaclasses in the UML. All other modeling metaclasses are either direct or
indirect subclasses of ModelElement.
Each ModelElement can be regarded as a template. A template has a set of
templateParameters that denotes which of the parts of a ModelElement are the template
parameters. A ModelElement is a template when there is at least one template
parameter. If it is not a template, a ModelElement cannot have template parameters.
However, such embedded parameters are not usually complete and need not satisfy
well-formedness rules. It is the arguments supplied when the template is instantiated
that must be well-formed.
Partially instantiated templates are allowed. This is the case when there are arguments
provided for some, but not all templateParameters. A partially instantiated template is
still a template, since it still has parameters.
2-38
OMG-UML V1.3
March 2000
2
Attributes
name
An identifier for the ModelElement within its
containing Namespace.
Associations
clientDependency
Inverse of client. Designates a set of Dependency in
which the ModelElement is a client.
constraint
A set of Constraints affecting the element.
implementationLocation
The component that an implemented model element
resides in.
namespace
Designates the Namespace that contains the
ModelElement. Every ModelElement except a root
element must belong to exactly one Namespace or else
be a composite part of another ModelElement (which is
a kind of virtual namespace). The pathname of
Namespace or ModelElement names starting from the
root package provides a unique designation for every
ModelElement. The association attribute visibility
specifies the visibility of the element outside its
namespace (see Section 2.5.2.16, “ElementOwnership,”
on page 2-32).
presentation
A set of PresentationElements that present a view of
the ModelElement.
supplierDependency
Inverse of supplier. Designates a set of Dependency in
which the ModelElement is a supplier.
OMG-UML V1.3
Core
March 2000
2-39
2
templateParameter
(association class TemplateParameter) A composite
aggregation ordered list of parameters. Each parameter
is a dummy ModelElement designated as a placeholder
for a real ModelElement to be substituted during a
binding of the template (see Section 2.5.2.7, “Binding,”
on page 2-25). The real model element must be of the
same kind (or a descendant kind) as the dummy
ModelElement. The properties of the dummy
ModelElement are ignored, except the name of the
dummy element is used as the name of the template
parameter. The association class TemplateParameter
may be associated with a default ModelElement of the
same kind as the dummy ModelElement. In the case of
a Binding that does not supply an argument
corresponding to the parameter, the value of the default
ModelElement is used. If a Binding lacks an argument
and there is no default ModelElement, the construct is
invalid.
Note that the template parameter element lacks
structure. For example, a parameter that is a Class
lacks Features; they are found in the actual argument.
Note that if a ModelElement has at least one templateParameter, then it is a template;
otherwise, it is an ordinary element.
Tagged Values
derived
Association
A true value indicates that the model element can be
completely derived from other model elements and is
therefore logically redundant. In an analysis model, the
element may be included to define a useful name or
concept. In a design model, the usual intent is that the
element should exist in the implementation to avoid the
need for recomputation.
2.5.2.25 Namespace
A namespace is a part of a model that contains a set of ModelElements each of whose
names designates a unique element within the namespace.
In the metamodel, a Namespace is a ModelElement that can own other
ModelElements, like Associations and Classifiers. The name of each owned
ModelElement must be unique within the Namespace. Moreover, each contained
2-40
OMG-UML V1.3
March 2000
2
ModelElement is owned by at most one Namespace. The concrete subclasses of
Namespace have additional constraints on which kind of elements may be contained.
Namespace is an abstract metaclass.
Note that explicit parts of a model element, such as the features of a Classifier, are not
modeled as owned elements in a namespace. A namespace is used for unstructured
contents such as the contents of a package or a class declared inside the scope of
another class.
Associations
ownedElement
(association class ElementOwnership) - A set of
ModelElements owned by the Namespace. Its visibility
attribute states whether the element is visible outside the
namespace.
2.5.2.26 Node
A node is a run-time physical object that represents a computational resource,
generally having at least a memory and often processing capability as well, and upon
which components may be deployed.
In the metamodel, a Node is a subclass of Classifier. It is associated with a set of
Components residing on the Node.
Associations
resident
The set of Components residing on the Node.
2.5.2.27 Operation
An operation is a service that can be requested from an object to effect behavior. An
operation has a signature, which describes the actual parameters that are possible
(including possible return values).
In the metamodel, an Operation is a BehavioralFeature that can be applied to the
Instances of the Classifier that contains the Operation.
OMG-UML V1.3
Core
March 2000
2-41
2
Attributes
concurrency
Specifies the semantics of concurrent calls to the same passive
instance (i.e., an Instance originating from a Classifier with
isActive=false). Active instances control access to their own
Operations so this property is usually (although not required in
UML) set to sequential. Possibilities include:
• sequential - Callers must coordinate so that only one call to an
Instance (on any sequential Operation) may be outstanding at once. If
simultaneous calls occur, then the semantics and integrity of the
system cannot be guaranteed.
• guarded - Multiple calls from concurrent threads may occur
simultaneously to one Instance (on any guarded Operation), but only
one is allowed to commence. The others are blocked until the
performance of the first Operation is complete. It is the responsibility
of the system designer to ensure that deadlocks do not occur due to
simultaneous blocks. Guarded Operations must perform correctly (or
block themselves) in the case of a simultaneous sequential Operation
or guarded semantics cannot be claimed.
• concurrent - Multiple calls from concurrent threads may occur
simultaneously to one Instance (on any concurrent Operation). All of
them may proceed concurrently with correct semantics. Concurrent
Operations must perform correctly in the case of a simultaneous
sequential or guarded Operation or concurrent semantics cannot be
claimed.
isAbstract
If true, then the operation does not have an implementation, and
one must be supplied by a descendant.
If false, the operation must have an implementation in the class or
inherited from an ancestor.
isLeaf
If true, then the implementation of the operation may not be
overridden by a descendant class.
If false, then the implementation of the operation may be
overridden by a descendant class (but it need not be overridden).
isRoot
If true, then the class must not inherit a declaration of the same
operation.
If false, then the class may (but need not) inherit a declaration of
the same operation. (But the declaration must match in any case;
a class may not modify an inherited operation declaration.)
Tagged Values
semantics
Association
2-42
Semantics is the specification of the meaning of the
operation.
OMG-UML V1.3
March 2000
2
2.5.2.28 Parameter
A parameter is an unbound variable that can be changed, passed, or returned. A
parameter may include a name, type, and direction of communication. Parameters are
used in the specification of operations, messages and events, templates, etc.
In the metamodel, a Parameter is a declaration of an argument to be passed to, or
returned from, an Operation or a Signal.
Attributes
defaultValue
An Expression whose evaluation yields a value to be used
when no argument is supplied for the Parameter.
kind
Specifies what kind of a Parameter is required. Possibilities
include:
• in - An input Parameter (may not be modified).
• out - An output Parameter (may be modified to communicate
information to the caller).
• inout - An input Parameter that may be modified.
• return -A return value of a call.
name
(Inherited from ModelElement) - The name of the Parameter,
which must be unique within its containing Parameter list.
Associations
type
Designates a Classifier to which an argument value must
conform.
2.5.2.29 Permission
Permission is a kind of dependency. It grants a model element permission to access
elements in another namespace.
In the metamodel, Permission is a Dependency between a client ModelElement and a
supplier ModelElement. The client receives permission to reference the supplier’s
contents. The supplier must be a Namespace.
The predefined stereotypes of Permission are access, import, and friend.
In the case of the access and import stereotypes, the client is granted permission to
reference elements in the supplier namespace with public visibility. In the case of the
import stereotype, the public names in the supplier namespace are added to the client
namespace. An element may also access any protected contents of an ancestor
namespace. An element may also access any contents (public, protected, or private) of
its own namespace or a containing namespace.
In the case of the friend stereotype, the client is granted permission to reference
elements in the supplier namespace, regardless of visibility.
OMG-UML V1.3
Core
March 2000
2-43
2
Stereotypes
«access»
Abstraction
«friend»
Abstraction
«import»
Abstraction
Access is a stereotyped permission dependency between two
namespaces, denoting that the public contents of the target
namespace are accessible to the namespace of the source
package.
Friend is a stereotyped permission dependency whose source
is a model element, such as an operation, class, or package,
and whose target is a model element in a different package,
such as an operation, class or package. A friend relationship
grants the source access to the target regardless of the declared
visibility. It extends the visibility of the supplier so that the
client can see into the supplier.
Import is a stereotyped permission dependency between two
namespaces, denoting that the public contents of the target
package are added to the namespace of the source package.
2.5.2.30 PresentationElement
A presentation element is a textual or graphical presentation of one or more model
elements.
In the metamodel, a PresentationElement is an Element that presents a set of
ModelElements to a reader. It is the base for all metaclasses used for presentation. All
other metaclasses with this purpose are either direct or indirect subclasses of
PresentationElement. PresentationElement is an abstract metaclass. The subclasses of
this class are proper to a graphic editor tool and are not specified here. It is a stub for
their future definition.
2.5.2.31 Relationship
A relationship is a connection among model elements.
In the metamodel, Relationship is a term of convenience without any specific
semantics. It is abstract.
Children of Relationship are Association, Dependency, Flow, and Generalization.
2.5.2.32 StructuralFeature
A structural feature refers to a static feature of a model element, such as an attribute.
In the metamodel, a StructuralFeature declares a structural aspect of an Instance of a
Classifier, such as an Attribute. For example, it specifies the multiplicity and
changeability of the StructuralFeature. StructuralFeature is an abstract metaclass.
See Section 2.5.2.5, “Attribute,” on page 2-23 for the descriptions of the attributes and
associations, as it is the only subclass of StructuralFeature in the current metamodel.
2-44
OMG-UML V1.3
March 2000
2
2.5.2.33 TemplateParameter
Defines the relationship between a template (a ModelElement) and its parameter (a
ModelElement). A ModelElement with at least one templateParameter association is a
template (by definition).
In the metamodel, TemplateParameter reifies the relationship between a ModelElement
that is a template and a ModelElement that is a dummy placeholder for a template
argument. See Section 2.5.2.24, “ModelElement,” on page 2-38, association
templateParameter, for details.
Associations
defaultElement
An optional default value ModelElement. In case of a
Binding of the template ModelElement in the reified
TemplateParameter class association, the defaultElement is
used as the argument of the bound element if no argument
is supplied for the corresponding template parameter. If no
argument is supplied and there is no default value, the
model is ill formed.
2.5.2.34 Usage
A usage is a relationship in which one element requires another element (or set of
elements) for its full implementation or operation. The relationship is not a mere
historical artifact, but an ongoing need; therefore, two elements related by usage must
be in the same model.
In the metamodel, a Usage is a Dependency in which the client requires the presence
of the supplier. How the client uses the supplier, such as a class calling an operation of
another class, a method having an argument of another class, and a method from a
class instantiating another class is defined in the description of the particular Usage
stereotype.
Various stereotypes of Usage are predefined, but the set is open-ended and may be
added to.
OMG-UML V1.3
Core
March 2000
2-45
2
Stereotypes
«call»
Abstraction
«create»
Abstraction
Call is a stereotyped usage dependency whose source is an
operation and whose target is an operation. The relationship
may also be subsumed to the class containing an operation,
with the meaning that there exists an operation in the class to
which the dependency applies. A call dependency specifies
that the source operation or an operation in the source class
invokes the target operation or an operation in the target class.
A call dependency may connect a source operation to any
target operation that is within scope including, but not limited
to, operations of the enclosing classifier and operations of
other visible classifiers.
Create is a stereotyped usage dependency denoting that the
client classifier creates instances of the supplier classifier.
«instantiate»
Abstraction
A stereotyped usage dependency among classifiers indicating
that operations on the client create instances of the supplier.
«send»
Send is a stereotyped usage dependency whose source is an
operation and whose target is a signal, specifying that the
source sends the target signal.
Abstraction
2.5.3 Well-Formedness Rules
The following well-formedness rules apply to the Core package.
2.5.3.1 Association
[1] The AssociationEnds must have a unique name within the Association.
self.allConnections->forAll( r1, r2 | r1.name = r2.name implies
r1 = r2 )
[2] At most one AssociationEnd may be an aggregation or composition.
self.allConnections->select(aggregation <#none)->size <= 1
[3] If an Association has three or more AssociationEnds, then no AssociationEnd
may be an aggregation or composition.
self.allConnections->size >=3 implies
self.allConnections->forall(aggregation = #none)
[4] The connected Classifiers of the AssociationEnds should be included in the
Namespace of the Association.
self.allConnections->forAll(r|
self.namespace.allContents->includes (r.type) )
2-46
OMG-UML V1.3
March 2000
2
Additional operations
[1] The operation allConnections results in the set of all AssociationEnds of the
Association.
allConnections : Set(AssociationEnd);
allConnections = self.connection
2.5.3.2 AssociationClass
[1] The names of the AssociationEnds and the StructuralFeatures do not overlap.
self.allConnections->forAll(ar|
self.allFeatures->forAll(f|
f.oclIsKindOf(StructuralFeature)implies ar.name<f.name))
[2] An AssociationClass cannot be defined between itself and something else.
self.allConnections->forAll(ar|ar.type <self)
Additional operations
[1] The operation allConnections results in the set of all AssociationEnds of the
AssociationClass, including all connections defined by its parent (transitive
closure).
allConnections:Set(AssociationEnd);
allConnections=self.connection->union(self.parent->select
(s|s.ocllsKindOf(Association))->collect(a:Association|
a.allConnections))->asSet
2.5.3.3 AssociationEnd
[1] The Classifier of an AssociationEnd cannot be an Interface or a DataType if the
association is navigable away from that end.
(self.type.oclIsKindOf (Interface) or
self.type.oclIsKingOf (DataType)) implies
self.association.connection->select
(ae|ae<self->forAll(ae|ae.isNavigable=#false)
[2] An Instance may not belong by composition to more than one composite
Instance.
self.aggregation=#composite implies self-multiplicity.max<=1
2.5.3.4 Attribute
No extra well-formedness rules.
OMG-UML V1.3
Core
March 2000
2-47
2
2.5.3.5 BehavioralFeature
[1] All Parameters should have a unique name.
self.parameter->forAll(p1,p2|p1.name=p2 implies p1=p2)
[2] The type of the Parameters should be included in the Namespace of the Classifier.
self.parameter->forAll( p |
self.owner.namespace.allContents->includes (p.type) )
Additional operations
[1] The operation hasSameSignature checks if the argument has the same signature
as the instance itself.
hasSameSignature ( b : BehavioralFeature ) : Boolean;
hasSameSignature (b) =
(self.name = b.name) and
(self.parameter->size = b.parameter->size) and
Sequence{ 1..(self.parameter->size) }->forAll( index : Integer |
b.parameter->at(index).type =
self.parameter->at(index).type and
b.parameter->at(index).kind =
self.parameter->at(index).kind
)
[2] The operation matchesSignature checks if the argument has a signature that would
clash with the signature of the instance itself (and therefore must be unique).
Mismatches in kind or any differences in return parameters do not cause a
mismatch:
matchesSignature ( b : BehavioralFeature ) : Boolean;
matchesSignature (b) =
(self.name = b.name) and
(self.parameter->size = b.parameter->size) and
Sequence{ 1..(self.parameter->size) }->forAll( index : Integer |
b.parameter->at(index).type =
self.parameter->at(index).type or
(b.parameter->at(index).kind = return and
self.parameter->at(index).kind = return)
)
2.5.3.6 Binding
[1] The argument ModelElement must conform to the parameter ModelElement in a
Binding. In an instantiation it must be of the same kind.
[2] A Binding has one client and one supplier.
(self.client->size = 1) and (self.supplier->size = 1)
[3] A ModelElement may participate in at most one Binding as a client.
2-48
OMG-UML V1.3
March 2000
2
Binding.allInstances->forAll
[b1, b2 | (b1 <> b2) implies (b1.client <> b2.client)]
2.5.3.7 Class
[1] If a Class is concrete, all the Operations of the Class should have a realizing
Method in the full descriptor.
not self.isAbstract implies self.allOperations->forAll (op |
self.allMethods->exists (m | m.specification->includes(op)))
[2] A Class can only contain Classes, Associations, Generalizations, UseCases,
Constraints, Dependencies, Collaborations, DataTypes, and Interfaces as a
Namespace.
self.allContents->forAll->(c |
c.oclIsKindOf(Class
)
c.oclIsKindOf(Association
)
c.oclIsKindOf(Generalization)
c.oclIsKindOf(UseCase
)
c.oclIsKindOf(Constraint
)
c.oclIsKindOf(Dependency
)
c.oclIsKindOf(Collaboration )
c.oclIsKindOf(DataType ) or
c.oclIsKindOf(Interface
)
or
or
or
or
or
or
or
2.5.3.8 Classifier
[1] No BehavioralFeature of the same kind may match the same signature in a
Classifier.
self.feature->forAll(f, g |
(
(
(f.oclIsKindOf(Operation) and g.oclIsKindOf(Operation)) or
(f.oclIsKindOf(Method
) and g.oclIsKindOf(Method
)) or
(f.oclIsKindOf(Reception) and g.oclIsKindOf(Reception))
) and
f.oclAsType(BehavioralFeature).matchesSignature(g)
)
implies f = g)
[2] No Attributes may have the same name within a Classifier.
self.feature->select ( a | a.oclIsKindOf (Attribute) )->forAll
( p, q |
p.name = q.name implies p = q )
[3] No opposite AssociationEnds may have the same name within a Classifier.
self.oppositeEnds->forAll ( p, q | p.name = q.name implies p = q )
OMG-UML V1.3
Core
March 2000
2-49
2
[4] The name of an Attribute may not be the same as the name of an opposite
AssociationEnd or a ModelElement contained in the Classifier.
self.feature->select ( a | a.oclIsKindOf (Attribute) )->forAll (
a |
not self.allOppositeAssociationEnds->union (self.allContents)
->collect ( q |
q.name )->includes (a.name) )
[5] The name of an opposite AssociationEnd may not be the same as the name of an
Attribute or a ModelElement contained in the Classifier.
self.oppositeAssociationEnds->forAll ( o |
not self.allAttributes->union (self.allContents)->collect ( q |
q.name )->includes (o.name) )
[6] For each Operation in an specification realized by the Classifier, the Classifier must
have a matching Operation.
self.specification.allOperations->forAll (interOp |
self.allOperations->exists( op | op.hasMatchingSignature
(interOp) ) )
[7] All of the generalizations in the range of a powertype have the same discriminator.
self.powertypeRange->forAll
(g1, g2 | g1.discriminator = g2.discriminator)
[8] Discriminator names must be distinct from attribute names and opposite
AssociationEnd names.
self.allDiscriminators->intersection (self.allAttributes.name>union (self.allOppositeAssociationEnds.name))->isEmpty
Additional operations
[1] The operation allFeatures results in a Set containing all Features of the Classifier
itself and all its inherited Features.
allFeatures : Set(Feature);
allFeatures = self.feature->union(
self.parent.oclAsType(Classifier).allFeatures)
[2] The operation allOperations results in a Set containing all Operations of the
Classifier itself and all its inherited Operations.
allOperations : Set(Operation);
allOperations = self.allFeatures->select(f |
f.oclIsKindOf(Operation))
[3] The operation allMethods results in a Set containing all Methods of the Classifier
itself and all its inherited Methods.
2-50
OMG-UML V1.3
March 2000
2
allMethods : set(Method);
allMethods = self.allFeatures->select(f | f.oclIsKindOf(Method))
[4] The operation allAttributes results in a Set containing all Attributes of the
Classifier itself and all its inherited Attributes.
allAttributes : set(Attribute);
allAttributes = self.allFeatures->select(f |
f.oclIsKindOf(Attribute))
[5] The operation associations results in a Set containing all Associations of the
Classifier itself.
associations : set(Association);
associations = self.associationEnd.association->asSet
[6] The operation allAssociations results in a Set containing all Associations of the
Classifier itself and all its inherited Associations.
allAssociations : set(Association);
allAssociations = self.associations->union (
self.parent.oclAsType(Classifier).allAssociations)
[7] The operation oppositeAssociationEnds results in a set of all AssociationEnds
that are opposite to the Classifier.
oppositeAssociationEnds : Set (AssociationEnd);
oppositeAssociationEnds =
self.association->select ( a | a.associationEnd->select ( ae |
ae.type = self ).size = 1 )->collect ( a |
a.associationEnd->select ( ae | ae.type <self ) )->union
(
self.association->select ( a | a.associationEnd->select ( ae |
ae.type = self ).size 1 )->collect ( a |
a.associationEnd) )
[8] The operation allOppositeAssociationEnds results in a set of all AssociationEnds,
including the inherited ones, that are opposite to the Classifier.
allOppositeAssociationEnds : Set (AssociationEnd);
allOppositeAssociationEnds = self.oppositeAssociationEnds->union
(
self.parent.allOppositeAssociationEnds )
[9] The operation specification yields the set of Classifiers that the current Classifier
realizes.
specification: Set(Classifier)
specification = self.clientDependency->
select(d |
d.oclIsKindOf(Abstraction)
and d.stereotype.name = "realization"
OMG-UML V1.3
Core
March 2000
2-51
2
and d.supplier.oclIsKindOf(Classifier))
.supplier.oclAsType(Classifier)
[10] The operation allContents returns a Set containing all ModelElements contained
in the Classifier together with the contents inherited from its
parents.
allContents : Set(ModelElement);
allContents = self.contents->union(
self.parent.allContents->select(e |
e.elementOwnership.visibility = #public or
e.elementOwnership.visibility = #protected))
[11] The operation allDiscriminators results in a Set containing all Discriminators of the
Generalizations from which the Classifier is descended itself and all its
inherited Features.
allDiscriminators : Set(Name);
allDiscriminators = self.generalization.discriminator->union(
self.parent.oclAsType(Classifier).allDiscriminators)
2.5.3.9 Comment
No extra well-formedness rules.
2.5.3.10 Component
[1] A Component may only contain other Components.
self.allContents-forAll( c | c.oclIsKindOf(Component))
[2] A Component may only implement DataTypes, Interfaces, Classes, Associations,
Dependencies, Constraints, Signals, DataValues and Objects.
self.allResidentElements -forAll( re |
re.oclIsKindOf(DataType) or
re.oclIsKindOf(Interface) or
re.oclIsKindOf(Class) or
re.oclIsKindOf(Association) or
re.oclIsKindOf(Dependency) or
re.oclIsKindOf(Constraint) or
re.oclIsKindOf(Signal) or
re.oclIsKindOf(DataValue) or
re.oclIsKindOf(Object) )
Additional operations
[1] The operation allResidentElements results in a Set containing all ModelElements
resident in a Component or one of its ancestors.
2-52
OMG-UML V1.3
March 2000
2
allResidentElements : set(ModelElement)
allResidentElements = self.resident->union(
self.parent.oclAsType(Component).allResidentElements->select(e|
re.elementResidence.visibility = #public or
re.elementResidence.visibility = #protected))
[2] The operation allVisibleElements results in a Set containing all ModelElements
visible outside the Component.
allVisibleElements : Set(ModelElement)
allVisibleElements = self.allContents -select( e |
e.elementOwnership.visibility = #public) -union (
self.allResidentElements -select ( re |
re.elementResidence.visibility = #public)))
2.5.3.11 Constraint
[1] A Constraint cannot be applied to itself.
not self.constrainedElement->includes (self)
2.5.3.12 DataType
[1] A DataType can only contain Operations, which all must be queries.
self.allFeatures->forAll(f |
f.oclIsKindOf(Operation) and
f.oclAsType(Operation).isQuery)
[2] A DataType cannot contain any other ModelElements.
self.allContents->isEmpty
2.5.3.13 Dependency
No extra well-formedness rules.
2.5.3.14 Element
No extra well-formedness rules.
2.5.3.15 ElementOwnership
No additional well-formedness rules.
2.5.3.16 ElementResidence
No additional well-formedness rules.
OMG-UML V1.3
Core
March 2000
2-53
2
2.5.3.17 Feature
No extra well-formedness rules.
2.5.3.18 GeneralizableElement
[1] A root cannot have any Generalizations.
self.isRoot implies self.generalization->isEmpty
[2] No GeneralizableElement can have a parent Generalization to an element
which is a leaf.
self.parent->forAll(s | not s.isLeaf)
[3] Circular inheritance is not allowed.
not self.allParents->includes(self)
[4] The parent must be included in the Namespace of the GeneralizableElement.
self.generalization->forAll(g |
self.namespace.allContents->includes(g.parent) )
Additional Operations
[1] The operation parent returns a Set containing all direct parents.
parent : Set(GeneralizableElement);
parent = self.generalization.parent
[2] The operation allParents returns a Set containing all the GeneralizableElements
inherited by this GeneralizableElement (the transitive closure), excluding the
GeneralizableElement itself.
allParents : Set(GeneralizableElement);
allParents = self.parent->union(self.parent.allParents)
2.5.3.19 Generalization
[1] A GeneralizableElement may only be a child of GeneralizableElement of the same
kind.
2.5.3.20 ImplementationClass (stereotype of Class)
[1] All direct instances of an implementation class must not have any other Classifiers
that are implementation classes.
self.instance.forall(i | i.classifier.forall(c |
c.stereotype.name = "implementationClass" implies c = self))
2-54
OMG-UML V1.3
March 2000
2
[2] A parent of an implementation class must be an implementation class.
self.parent->forAll(stereotype.name="implementationClass")
2.5.3.21 Interface
[1] An Interface can only contain Operations.
self.allFeatures->forAll(f |
f.oclIsKindOf(Operation) or f.oclIsKindOf(Reception))
[2] An Interface cannot contain any ModelElements.
self.allContents->isEmpty
[3] All Features defined in an Interface are public.
self.allFeatures->forAll ( f | f.visibility = #public )
2.5.3.22 Method
[1] If the realized Operation is a query, then so is the Method.
self.specification->isQuery implies self.isQuery
[2] The signature of the Method should be the same as the signature of the realized
Operation.
self.hasSameSignature (self. specification)
[3] The visibility of the Method should be the same as for the realized Operation.
self.visibility = self.specification.visibility
[4] The realized Operation must be a feature (possibly inherited) of the same Classifier
as the Method.
self.owner.allOperations->includes(self.specification)
[5] If the realized Operation has been overridden one or more times in the ancestors of
the owner of the Method, then the Method must realize the latest overriding (that is,
all other Operations with the same signature must be owned by ancestors of the
owner of the realized Operation).
self.specification.owner.allOperations->includesAll(
(self.owner.allOperations->select(op |
self.hasSameSignature(op)))
OMG-UML V1.3
Core
March 2000
2-55
2
2.5.3.23 ModelElement
That part of the model owned by a template is not subject to all well-formedness rules.
A template is not directly usable in a well-formed model. The results of binding a
template are subject to well-formedness rules.
(not expressed in OCL)
Additional operations
[1] The operation supplier results in a Set containing all direct suppliers of the
ModelElement.
supplier : Set(ModelElement);
supplier = self.clientDependency.supplier
[2] The operation allSuppliers results in a Set containing all the ModelElements that are
suppliers of this ModelElement, including the suppliers of these ModelElements.
This is the transitive closure.
allSuppliers : Set(ModelElement);
allSuppliers = self.supplier->union(self.supplier.allSuppliers)
[3] The operation “model” results in the set of Models to which the ModelElement
belongs.
model : Set(Model);
model = self.namespace
->union(self.namespace.allSurroundingNamespaces)
->select( ns|
ns.oclIsKindOf (Model))
[4] A ModelElement is a template when it has parameters.
isTemplate : Boolean;
isTemplate = (self.templateParameter->notEmpty)
[5] A ModelElement is an instantiated template when it is related to a template by a
Binding relationship.
isInstantiated : Boolean;
isInstantiated = self.clientDependency->select(
oclIsKindOf(Binding))->notEmpty
[6] The templateArguments are the arguments of an instantiated template, which
substitute for template parameters.
templateArguments : Set(ModelElement);
templateArguments = self.clientDependency->
select(oclIsKindOf(Binding)).oclAsType(Binding).argument
2-56
OMG-UML V1.3
March 2000
2
2.5.3.24 Namespace
[1] If a contained element, which is not an Association or Generalization has a name,
then the name must be unique in the Namespace.
self.allContents->forAll(me1, me2 : ModelElement |
(
not me1.oclIsKindOf (Association) and not me2.oclIsKindOf
(Association) and
me1.name <‘’ and me2.name <‘’ and me1.name = me2.name
) implies
me1 = me2 )
[2] All Associations must have a unique combination of name and associated
Classifiers in the Namespace.
self.allContents -> select(oclIsKindOf(Association))->
forAll(a1, a2 |
a1.name = a2.name and
a1.connection.type = a2.connection.type
implies a1 = a2)
Additional operations
[1] The operation contents results in a Set containing all ModelElements contained by
the Namespace.
contents : Set(ModelElement)
contents = self.ownedElement -> union(self.namespace, contents)
[2] The operation allContents results in a Set containing all ModelElements contained
by the Namespace.
allContents : Set(ModelElement);
allContents = self.contents
[3] The operation allVisibleElements results in a Set containing all ModelElements
visible outside of the Namespace.
allVisibleElements : Set(ModelElement)
allVisibleElements = self.allContents -> select(e |
e.elementOwnership.visibility = #public)
[4] The operation allSurroundingNamespaces results in a Set containing all surrounding
Namespaces.
allSurroundingNamespaces : Set(Namespace)
allSurroundingNamespaces =
self.namespace->union(self.namespace.allSurroundingNamespaces)
2.5.3.25 Node
No extra well-formedness rules.
OMG-UML V1.3
Core
March 2000
2-57
2
2.5.3.26 Operation
No additional well-formedness rules.
2.5.3.27 Parameter
No additional well-formedness rules.
2.5.3.28 PresentationElement
No extra well-formedness rules.
2.5.3.29 StructuralFeature
[1] The connected type should be included in the owner’s Namespace.
self.owner.namespace.allContents->includes(self.type)
[2] The type of a StructuralFeature must be a Class, DataType or Interface.
self.type.oclIsKindOf(Class) or
self.type.oclIsKindOf(DataType) or
self.type.oclIsKindOf(Interface)
2.5.3.30 Trace
A trace is an Abstraction with the «trace» stereotype. These are the additional
constraints due to the stereotype.
[1] The client ModelElements of a Trace must all be from the same Model.
self.client->forAll(e1, e2 | e1.model = e2.model)
[2] The supplier ModelElements of a Trace must all be from the same Model.
self.supplier->forAll(e1, e2 | e1.model = e2.model)
[3] The client and supplier ModelElements must be from two different Models.
self.client.model <self.supplier.model
[4] The client and supplier ModelElements must all be from models of the same
system.
self.client.model.intersection(self.supplier.model) <Set{}
2.5.3.31 Type (stereotype of Class)
[1] A Type may not have any Methods.
2-58
OMG-UML V1.3
March 2000
2
not self.feature->exists(oclIsKindOf(Method))
[2] The parent of a type must be a type.
self.parent->forAll(stereotype.name = "type")
2.5.3.32 Usage
No extra well-formedness rules.
2.5.4 Semantics
This section provides a description of the dynamic semantics of the elements in the
Core. It is structured based on the major constructs in the core, such as interface, class,
and association.
2.5.4.1 Association
An association declares a connection (link) between instances of the associated
classifiers (e.g., classes). It consists of at least two association ends, each specifying a
connected classifier and a set of properties that must be fulfilled for the relationship to
be valid. The multiplicity property of an association end specifies how many instances
of the classifier at a given end (the one bearing the multiplicity value) may be
associated with a single instance of the classifier at the other end. A multiplicity is a
range of nonnegative integers. The association end also states whether or not the
connection may be traversed towards the instance playing that role in the connection
(isNavigable), for instance, if the instance is directly reachable via the association. An
association-end also specifies whether or not an instance playing that role in a
connection may be replaced by another instance. It may state that
•
•
•
no constraints exist (changeable),
the link cannot be modified once it has been initialized (frozen), or
new links of the association may be added but not removed or altered (addOnly).
These constraints do not affect the modifiability of the objects themselves that are
attached to the links. Moreover, t ) the classifier, or (a child of) the classifier itself. The
ordering attribute of association-end states that if the instances related to a single
instance at the other end have an ordering that must be preserved, the order of insertion
of new links must be specified by operations that add or modify links. Note that sorting
is a performance optimization and is not an example of a logically ordered association,
because the ordering information in a sort does not add any information.
In UML, Associations can be of three different kinds: 1) ordinary association, 2)
composite aggregate, and 3) shared aggregate. Since the aggregate construct can have
several different meanings depending on the application area, UML gives a more
precise meaning to two of these constructs (i.e., association and composite aggregate)
and leaves the shared aggregate more loosely defined in between.
OMG-UML V1.3
Core
March 2000
2-59
2
An association may represent an aggregation (i.e., a whole/part relationship). In this
case, the association-end attached to the whole element is designated, and the other
association-end of the association represents the parts of the aggregation. Only binary
associations may be aggregations. Composite aggregation is a strong form of
aggregation, which requires that a part instance be included in at most one composite
at a time and that the composite object has sole responsibility for the disposition of its
parts. This means that the composite object is responsible for the creation and
destruction of the parts. In implementation terms, it is responsible for their memory
allocation. If a composite object is destroyed, it must destroy all of its parts. It may
remove a part and give it to another composite object, which then assumes
responsibility for it. If the multiplicity from a part to composite is zero-to-one, the
composite may remove the part and the part may assume responsibility for itself,
otherwise it may not live apart from a composite.
A consequence of these rules is that a composite implies propagation semantics (i.e.,
some of the dynamic semantics of the whole is propagated to its parts). For example, if
the whole is copied or destroyed, then so are the parts as well (because a part may
belong to at most one composite).
A shared aggregation denotes weak ownership (i.e., the part may be included in several
aggregates) and its owner may also change over time. However, the semantics of a
shared aggregation does not imply deletion of the parts when an aggregate referencing
it is deleted. Both kinds of aggregations define a transitive, antisymmetric relationship
(i.e., the instances form a directed, non-cyclic graph). Composition instances form a
strict tree (or rather a forest).
A qualifier declares a partition of the set of associated instances with respect to an
instance at the qualified end (the qualified instance is at the end to which the qualifier
is attached). A qualifier instance comprises one value for each qualifier attribute. Given
a qualified object and a qualifier instance, the number of objects at the other end of the
association is constrained by the declared multiplicity. In the common case in which
the multiplicity is 0..1, the qualifier value is unique with respect to the qualified object,
and designates at most one associated object. In the general case of multiplicity 0..*,
the set of associated instances is partitioned into subsets, each selected by a given
qualifier instance. In the case of multiplicity 1 or 0..1, the qualifier has both semantic
and implementation consequences. In the case of multiplicity 0..*, it has no real
semantic consequences but suggests an implementation that facilitates easy access of
sets of associated instances linked by a given qualifier value.
Note that the multiplicity of a qualifier is given assuming that the qualifier value is
supplied. The “raw” multiplicity without the qualifier is assumed to be 0..*. This is not
fully general but it is almost always adequate, as a situation in which the raw
multiplicity is 1 would best be modeled without a qualifier.
Note also that a qualified multiplicity whose lower bound is zero indicates that a given
qualifier value may be absent, while a lower bound of 1 indicates that any possible
qualifier value must be present. The latter is reasonable only for qualifiers with a finite
number of values (such as enumerated values or integer ranges) that represent full
tables indexed by some finite range of values.
2-60
OMG-UML V1.3
March 2000
2
2.5.4.2 AssociationClass
An association may be refined to have its own set of features (i.e., features that do not
belong to any of the connected classifiers) but rather to the association itself. Such an
association is called an association class. It will be both an association, connecting a
set of classifiers, and a class, and as such have features and be included in other
associations. The semantics of such an association is a combination of the semantics of
an ordinary association and of a class.
The AssociationClass construct can be expressed in a few different ways in the
metamodel (e.g., as a subclass of Class, as a subclass of Association, or as a subclass
of Classifier). Since an AssociationClass is a construct being both an association
(having a set of association-ends) and a class (declaring a set of features), the most
accurate way of expressing it is as a subclass of both Association and Class. In this
way, AssociationClass will have all the properties of the other two constructs.
Moreover, if new kinds of associations containing features (e.g., AssociationDataType)
are to be included in UML, these are easily added as subclasses of Association and the
other Classifier.
The terms child, subtype, and subclass are synonyms and mean that an instance of a
classifier being a subtype of another classifier can always be used where an instance of
the latter classifier is expected. The neutral terms parent and child, with the transitive
closures ancestor and descendant, are the preferred terms in this document.
2.5.4.3 Class
The purpose of a class is to declare a collection of methods, operations, and attributes
that fully describe the structure and behavior of objects. All objects instantiated from a
class will have attribute values matching the attributes of the full class descriptor and
support the operations found in the full class descriptor. Some classes may not be
directly instantiated. These classes are said to be abstract and exist only for other
classes to inherit and reuse the features declared by them. No object may be a direct
instance of an abstract class, although an object may be an indirect instance of one
through a subclass that is non-abstract.
When a class is instantiated to create a new object, a new instance is created, which is
initialized containing an attribute value for each attribute found in the full class
descriptor. The object is also initialized with a connection to the list of methods in the
full class descriptor.
Note – An actual implementation behaves as if there was a full class descriptor, but
many clever optimizations are possible in practice.
Finally, the identity of the new object is returned to the creator. The identity of every
instance in a well-formed system is unique and automatic.
A class can have generalizations to other classes. This means that the full class
descriptor of a class is derived by inheritance from its own segment declaration and
those of its ancestors. Generalization between classes implies substitutability (i.e., an
OMG-UML V1.3
Core
March 2000
2-61
2
instance of a class may be used whenever an instance of a superclass is expected). If
the class is specified as a root, it cannot be a subclass of other classes. Similarly, if it
is specified as a leaf, no other class can be a subclass of the class.
Each attribute declared in a class has a visibility and a type. The visibility defines if the
attribute is publicly available to any class, if it is only available inside the class and its
subclasses (protected), or if it can only be used inside the class (private). The
targetScope of the attribute declares whether its value should be an instance (of a child)
of that type or if it should be (a child of) the type itself.
There are two alternatives for the ownerScope of an attribute. It may state that
•
each object created by the class (or by its subclasses) has its own value of the
attribute, or
•
the value is owned by the class itself.
An attribute also declares how many attribute values should be connected to each
owner (multiplicity), what the initial values should be, and if these attribute values may
be changed to:
•
•
•
none - no constraints exist
frozen - the value cannot be replaced or added to once it has been initialized
addOnly - new values may be added to a set but not removed or altered.
For each operation, the operation name, the types of the parameters, and the return
type(s) are specified, as well as its visibility. An operation may also include a
specification of the effects of its invocation. The specification can be done in several
different ways (e.g., with pre- and post-conditions, pseudo-code, or just plain text).
Each operation declares if it is applicable to the instances, the class, or to the class
itself (ownerScope). Furthermore, the operation states whether or not its application
will modify the state of the object (isQuery). The operation also states whether or not
the operation may be realized by a different method in a subclass (isPolymorphic). A
method realizing an operation has the same signature as the operation and a body
implementing the specification of the operation. Methods in descendants override and
replace methods inherited from ancestors (see Section 2.5.4.4, “Inheritance,” on
page 2-63). Each method implements an operation declared in the class or inherited
from an ancestor. The same operation may be declared more than once in a full class
descriptor, but their descriptions must all match, except that the generalization
properties (isRoot, IsAbstract, isLeaf) may vary, and a child operation may strengthen
query properties (the child may be a query even though the parent is not). The
specification of the method must match the specification of its matching operation, as
defined above for operations. Furthermore, if the isQuery attribute of an operation is
true, then it must also be true in any realizing method. However, if it is false in the
operation, it may still be true in the method if the method does not actually modify the
state to carry out the behavior required by the operation (this can only be true if the
operation does not inherently modify state). The visibility of a method must match its
operation.
2-62
OMG-UML V1.3
March 2000
2
Classes may have associations to each other. This implies that objects created by the
associated classes are semantically connected (i.e., that links exist between the objects,
according to the requirements of the associations). Associations are inherited by
subclasses.
A class may realize a set of interfaces. This means that each operation found in the full
descriptor for any realized interface must be present in the full class descriptor with the
same specification (see Section 2.5.4.4, “Inheritance,” on page 2-63). The relationship
between interface and class is not necessarily one-to-one; a class may offer several
interfaces and one interface may be offered by more than one class. The same
operation may be defined in multiple interfaces that a class supports. If their
specifications are identical, then there is no conflict; otherwise, the model is ill formed.
Moreover, a class may contain additional operations besides those found in its
interfaces.
A class acts as the namespace for various kinds of contained elements defined within
its scope, including classes, interfaces and associations (note that this is purely a
scoping construction and does not imply anything about aggregation), the contained
classifiers can be used as ordinary classifiers in the container class. If a class inherits
another class, the contents of the ancestor are available to its descendants if the
visibility of an element is public or protected. However, if the visibility is private, then
the element is not visible and therefore not available in the descendant.
2.5.4.4 Inheritance
To understand inheritance it is first necessary to understand the concept of a full
descriptor and a segment descriptor. A full descriptor is the full description needed to
describe an object or other instance (see Section 2.5.4.5, “Instantiation,” on page 2-64).
It contains a description of all of the attributes, associations, and operations that the
object contains. In a pre-object-oriented language, the full descriptor of a data structure
was declared directly in its entirety. In an object-oriented language, the description of
an object is built out of incremental segments that are combined using inheritance to
produce a full descriptor for an object. The segments are the modeling elements that
are actually declared in a model. They include elements such as class and other
generalizable elements. Each generalizable element contains a list of features and other
relationships that it adds to what it inherits from its ancestors. The mechanism of
inheritance defines how full descriptors are produced from a set of segments connected
by generalization. The full descriptors are implicit, but they define the structure of
actual instances.
Each kind of generalizable element has a set of inheritable features. For any model
element, these include constraints. For classifiers, these include features (attributes,
operations, signal receptions, and methods) and participation in associations. The
ancestors of a generalizable element are its parents (if any) together with all of their
ancestors (with duplicates removed). For a Namespace (such as a Package or a Class
with nested declarations), the public or protected contents of the Namespace are
available to descendants of the Namespace.
OMG-UML V1.3
Core
March 2000
2-63
2
If a generalizable element has no parent, then its full descriptor is the same as its
segment descriptor. If a generalizable element has one or more parents, then its full
descriptor contains the union of the features from its own segment descriptor and the
segment descriptors of all of its ancestors. For a classifier, no attribute, operation, or
signal with the same signature may be declared in more than one of the segments (in
other words, they may not be redefined). A method may be declared in more than one
segment. A method declared in any segment supersedes and replaces a method with the
same signature declared in any ancestor. If two or more methods nevertheless remain,
then they conflict and the model is ill formed. The constraints on the full descriptor are
the union of the constraints on the segment itself and all of its ancestors. If any of them
are inconsistent, then the model is ill formed.
In any full descriptor for a classifier, each method must have a corresponding
operation. In a concrete classifier, each operation in its full descriptor must have a
corresponding method in the full descriptor.
The purpose of the full descriptor is explained under Section 2.5.4.5, “Instantiation,”
on page 2-64.
2.5.4.5 Instantiation
The purpose of a model is to describe the possible states of a system and their
behavior. The state of a system comprises objects, values, and links. Each object is
described by a full class descriptor. The class corresponding to this descriptor is the
direct class of the object. If an object is not completely described by a single class
(multiple classification), then any class in the minimal set of unrelated (by
generalization) classes whose union completely describes the object is a direct class of
the object. Similarly each link has a direct association and each value has a direct data
type. Each of these instances is said to be a direct instance of the classifier from which
its full descriptor was derived. An instance is an indirect instance of the classifier or
any of its ancestors.
The data content of an object comprises one value for each attribute in its full class
descriptor (and nothing more). The value must be consistent with the type of the
attribute. The data content of a link comprises a tuple containing a list of instances, one
that is an indirect instance of each participant classifier in the full association
descriptor. The instances and links must obey any constraints on the full descriptors of
which they are instances (including both explicit constraints and built-in constraints
such as multiplicity).
The state of a system is a valid system instance if every instance in it is a direct
instance of some element in the system model and if all of the constraints imposed by
the model are satisfied by the instances.
The behavioral parts of UML describe the valid sequences of valid system instances
that may occur as a result of both external and internal behavioral effects.
2-64
OMG-UML V1.3
March 2000
2
2.5.4.6 Interface
The purpose of an interface is to collect a set of operations that constitute a coherent
service offered by classifiers. Interfaces provide a way to partition and characterize
groups of operations. An interface is only a collection of operations with a name. It
cannot be directly instantiated. Instantiable classifiers, such as class or use case, may
use interfaces for specifying different services offered by their instances. Several
classifiers may realize the same interface. All of them must contain at least the
operations matching those contained in the interface. The specification of an operation
contains the signature of the operation (i.e., its name, the types of the parameters and
the return type). An interface does not imply any internal structure of the realizing
classifier. For example, it does not define which algorithm to use for realizing an
operation. An operation may, however, include a specification of the effects of its
invocation. The specification can be done in several different ways (e.g., with pre and
post-conditions, pseudo-code, or just plain text).
Each operation declares if it applies to the instances of the classifier declaring it or to
the classifier itself (e.g., a constructor on a class (ownerScope)). Furthermore, the
operation states whether or not its application will modify the state of the instance
(isQuery). The operation also states whether or not all the classes must have the same
realization of the operation (isPolymorphic).
An interface can be a child of other interfaces denoted by generalizations. This means
that a classifier offering the interface must provide not only the operations declared in
the interface but also those declared in the ancestors of the interface. If the interface is
specified as a root, it cannot be a child of other interfaces. Similarly, if it is specified as
a leaf, no other interface can be a child of the interface.
2.5.4.7 Operation
Operation is a conceptual construct, while Method is the implementation construct.
Their common features, such as having a signature, are expressed in the
BehavioralFeature metaclass, and the specific semantics of the Operation. The Method
constructs are defined in the corresponding subclasses of BehavioralFeature.
2.5.4.8 PresentationElement
The responsibility of presentation element is to provide a textual and graphical
projection of a collection of model elements. In this context, projection means that the
presentation element represents a human readable notation for the corresponding
model elements. The notation for UML can be found in the UML Notation Guide
chapter of this document.
Presentation elements and model elements must be kept in agreement, but the
mechanisms for doing this are design issues for model editing tools.
OMG-UML V1.3
Core
March 2000
2-65
2
2.5.4.9 Template
A template is a parameterized model element that cannot be used directly in a model.
Instead, it may be used to generate other model elements using the Binding
relationship; those generated model elements can be used in normal relationships with
other elements.
A template represents the parameterization of a model element, such as a class or an
operation, although conceptually any model element may be used (but not all may be
useful). The template element is attached by composite aggregation to an ordered list
of parameter elements. Each parameter element has a name that represents a parameter
name within the template element. Any use of the name within the scope of the
template element represents an unbound parameter that is to be replaced by an actual
value in a Binding of the template. For example, a parameter may represent the type of
an attribute of a class (for a class template). The corresponding attribute would have an
association to the template parameter as its type.
Note that the scope of the template includes all of the elements recursively owned by it
through composite aggregation. For example, a parameterized class template owns its
attributes, operations, and so on. Neither the parameterized elements nor its contents
may be used directly in a model without binding.
A template element has the templateParameter association to a list of ModelElements
that serve as its parameters. To avoid introducing metamodel (M2) elements in an
ordinary (M1) model, the model contains a representative of each parameter element,
rather than the type of the parameter element. For example, a frequent kind of
parameter is a class. Instead of including the metaclass Class in the (M1) ordinary
model, a dummy class must be declared whose name is the name of the parameter.
This dummy element is meaningful only within the template (it may not be used within
the wider model) and it has no features (such as attributes and operations), because the
features are part of an actual element that is supplied when the template is bound.
Because a template parameter is only a dummy that lacks internal structure, it may
violate well-formedness constraints of elements of its kind; the actual elements
supplied during binding must satisfy ordinary well-formedness constraints.
Note also that when the template is bound, the bound element does not show the
explicit structure of an element of its kind; it is a stub. Its semantics and wellformedness rules must be evaluated as if the actual substitutions of actual elements for
parameters had been made; but the expansions are not explicitly shown in a canonical
model as they are regarded as derived.
A template element is therefore effectively isolated from the directly-usable part of the
model and is indirectly connected to its ultimate instances through Binding
associations to bound elements. The bound elements may be used in ordinary models
in places where the model element underlying the template could be used.
2.5.4.10 Miscellaneous
A constraint is a Boolean expression over one or several elements that must always be
true. A constraint can be specified in several different ways (e.g., using natural
language or a constraint language).
2-66
OMG-UML V1.3
March 2000
2
A dependency specifies that the semantics of a set of model elements requires the
presence of another set of model elements. This implies that if the source is somehow
modified, the dependents probably must be modified. The reason for the dependency
can be specified in several different ways (e.g., using natural language or an algorithm)
but is often implicit.
A Usage or Binding dependency can be established only between elements in the same
model, since the semantics of a model cannot be dependent on the semantics of another
model. If a connection is to be established between elements in different models, a
Trace or Refinement should be used. Refinement can connect elements in different or
same models.
Whenever the supplier element of a dependency changes, the client element is
potentially invalidated. After such invalidation, a check should be performed followed
by possible changes to the derived client element. Such a check should be performed
after which action can be taken to change the derived element to validate it again. The
semantics of this validation and change is outside the scope of UML.
A data type is a special kind of classifier, similar to a class, but whose instances are
primitive values (not objects). For example, the integers and strings are usually treated
as primitive values. A primitive value does not have an identity, so two occurrences of
the same value cannot be differentiated. Usually it is used for specification of the type
of an attribute. An enumeration type is a user-definable type comprising a finite
number of values.
2.6 Extension Mechanisms
2.6.1 Overview
The Extension Mechanisms package is the subpackage that specifies how model
elements are customized and extended with new semantics. It defines the semantics for
stereotypes, constraints, and tagged values.
The UML provides a rich set of modeling concepts and notations that have been
carefully designed to meet the needs of typical software modeling projects. However,
users may sometimes require additional features and/or notations beyond those defined
in the UML standard. In addition, users often need to attach non-semantic information
to models. These needs are met in UML by three built-in extension mechanisms that
enable new kinds of modeling elements to be added to the modeler’s repertoire as well
as to attach free-form information to modeling elements. These three extension
mechanisms can be used separately or together to define new modeling elements that
can have distinct semantics, characteristics, and notation relative to the built in UML
modeling elements specified by the UML metamodel. Concrete constructs defined in
Extension Mechanisms include Constraint, Stereotype, and TaggedValue.
The UML extension mechanisms are intended for several purposes:
•
•
To add new modeling elements for use in creating UML models.
To define standard items that are not considered interesting or complex enough to
be defined directly as UML metamodel elements.
OMG-UML V1.3
Extension Mechanisms
March 2000
2-67
2
•
•
To define process-specific or implementation language-specific extensions.
To attach arbitrary semantic and non-semantic information to model elements.
Although it is beyond the scope and intent of this document, it is also possible to
extend the UML metamodel by explicitly adding new metaclasses and other meta
constructs. This capability depends on unique features of certain UML-compatible
modeling tools, or direct use of a meta-metamodel facility, such as the CORBA Meta
Object Facility (MOF).
The most important of the built-in extension mechanisms is based on the concept of
Stereotype. Stereotypes provide a way of classifying model elements at the object
model level and facilitate the addition of "virtual" UML metaclasses with new
metaattributes and semantics. The other built in extension mechanisms are based on the
notion of property lists consisting of tags and values, and constraints. These allow
users to attach additional properties and semantics directly to individual model
elements, as well as to model elements classified by a Stereotype.
A stereotype is a UML model element that is used to classify (or mark) other UML
elements so that they behave in some respects as if they were instances of new
"virtual" or "pseudo" metamodel classes whose form is based on existing "base"
classes. Stereotypes augment the classification mechanism based on the built in UML
metamodel class hierarchy; therefore, names of new stereotypes must not clash with
the names of predefined metamodel elements or other stereotypes. Any model element
can be marked by at most one stereotype, but any stereotype can be constructed as a
specialization of numerous other stereotypes.
A stereotype may introduce additional values, additional constraints, and a new
graphical representation. All model elements that are classified by a particular
stereotype ("stereotyped") receive these values, constraints, and representation. By
allowing stereotypes to have associated graphical representations users can introduce
new ways of graphically distinguishing model elements classified by a particular
stereotype.
A stereotype shares the attributes, associations, and operations of its base class but it
may have additional well-formedness constraints as well as a different meaning and
attached values. The intent is that a tool or repository be able to manipulate a
stereotyped element the same as the ordinary element for most editing and storage
purposes, while differentiating it for certain semantic operations, such as wellformedness checking, code generation, or report writing.
Any modeling element may have arbitrary attached information in the form of a
property list consisting of tag-value pairs. A tag is a name string that is unique for a
given element that selects an associated arbitrary value. Values may be arbitrary but for
uniform information exchange they should be represented as strings. The tag represents
the name of an arbitrary property with the given value. Tags may be used to represent
management information (author, due date, status), code generation information
(optimizationLevel, containerClass), or additional semantic information required by a
given stereotype.
2-68
OMG-UML V1.3
March 2000
2
It is possible to specify a list of tags (with default values, if desired) that are required
by a particular stereotype. Such required tags serve as "pseudoattributes" of the
stereotype to supplement the real attributes supplied by the base element class. The
values permitted to such tags can also be constrained.
It is not necessary to stereotype a model element in order to give it individually distinct
constraints or tagged values. Constraints can be directly attached to a model element
(stereotyped or not) to change its semantics. Likewise, a property list consisting of tagvalue pairs can be directly attached to any model element. The tagged values of a
property list allow characteristics to be assigned to model elements on a flexible,
individual basis. Tags are user-definable, certain ones are predefined and are listed in
the Standard Elements appendix.
Constraints or tagged values associated with a particular stereotype are used to extend
the semantics of model elements classified by that stereotype. The constraints must be
observed by all model elements marked with that stereotype.
The following sections describe the abstract syntax, well-formedness rules, and
semantics of the Extension Mechanisms package.
2.6.2 Abstract Syntax
The abstract syntax for the Extension Mechanisms package is expressed in graphic
notation in Figure 2-10 on page 2-70.
OMG-UML V1.3
Extension Mechanisms
March 2000
2-69
2
+taggedValue
+extendedElement
ModelEl ement
*
(from C ore)
*
0..1
1..*
{ord ere d}
+requiredTag
+ co nst rain ed Ele me nt
Constraint
TaggedValue
tag : Name
value : String
*
+constraint
(from Core)
*
GeneralizableElement
+ ste reo typ eCons tra int
(from Core)
*
{xor}
+stereotype
0 ..1
Stereotype
icon : Geometry
baseClass : Name
1
+constrainedElement
0..1
Figure 2-10 Extension Mechanisms
2.6.2.1 Constraint
The constraint concept allows new semantics to be specified linguistically for a model
element. The specification is written as an expression in a designated constraint
language. The language can be specially designed for writing constraints (such as
OCL), a programming language, mathematical notation, or natural language. If
constraints are to be enforced by a model editor tool, then the tool must understand the
syntax and semantics of the constraint language. Because the choice of language is
arbitrary, constraints are an extension mechanism.
In the metamodel a Constraint directly attached to a ModelElement describes semantic
restrictions that this ModelElement must obey. Also, any Constraints attached to a
Stereotype apply to each ModelElement that bears the given Stereotype.
2-70
OMG-UML V1.3
March 2000
2
Attributes
body
A boolean expression defining the constraint. Expressions
are written as strings in a designated language. For the
model to be well formed, the expression must always yield
a true value when evaluated for instances of the constrained
elements at any time when the system is stable (i.e., not
during the execution of an atomic operation).
Associations
constrainedElement
An ordered list of elements subject to the constraint. The
constraint applies to their instances. If the element is a
stereotype, then the constraint applies to the elements
classified using it.
2.6.2.2 ModelElement (as extended)
Any model element may have arbitrary tagged values and constraints (subject to these
making sense). A model element may have at most one stereotype whose base class
must match the UML class of the modeling element (such as Class, Association,
Dependency, etc.). The presence of a stereotype may impose implicit constraints on the
modeling element and may require the presence of specific tagged values.
Associations
constraint
A constraint that must be satisfied for instances of the
model element. A model element may have a set of
constraints. The constraint is to be evaluated when the
system is stable (i.e., not in the middle of an atomic
operation).
stereotype
Designates at most one stereotype that further qualifies the
UML class (the base class) of the modeling element. The
stereotype does not alter the structure of the base class but
it may specify additional constraints and tagged values. All
constraints and tagged values on a stereotype apply to the
model elements that are classified by the stereotype. The
stereotype acts as a "pseudo metaclass" describing the
model element.
OMG-UML V1.3
Extension Mechanisms
March 2000
2-71
2
taggedValue
An arbitrary property attached to the model element. The
tag is the name of the property and the value is an arbitrary
value. The interpretation of the tagged value is outside the
scope of the UML metamodel. A model element may have
a set of tagged values, but a single model element may have
at most one tagged value with a given tag name. If the
model element has a stereotype, then it may specify that
certain tags must be present, providing default values.
2.6.2.3 Stereotype
The stereotype concept provides a way of classifying (marking) elements so that they
behave in some respects as if they were instances of new "virtual" metamodel
constructs. Instances have the same structure (attributes, associations, operations) as a
similar non-stereotyped instance of the same kind. The stereotype may specify
additional constraints and required tagged values that apply to instances. In addition, a
stereotype may be used to indicate a difference in meaning or usage between two
elements with identical structure.
In the metamodel the Stereotype metaclass is a subtype of GeneralizableElement.
TaggedValues and Constraints attached to a Stereotype apply to all ModelElements
classified by that Stereotype. A stereotype may also specify a geometrical icon to be
used for presenting elements with the stereotype.
Stereotypes are GeneralizableElements. If a stereotype is a subtype of another
stereotype, then it inherits all of the constraints and tagged values from its stereotype
supertype and it must apply to the same kind of base class. A stereotype keeps track of
the base class to which it may be applied.
Attributes
2-72
baseClass
Specifies the name of a UML modeling element to which
the stereotype applies, such as Class, Association,
Refinement, Constraint, etc. This is the name of a
metaclass, that is, a class from the UML metamodel itself
rather than a user model class.
icon
The geometrical description for an icon to be used to
present an image of a model element classified by the
stereotype.
OMG-UML V1.3
March 2000
2
Associations
extendedElement
Designates the model elements affected by the stereotype.
Each one must be a model element of the kind specified by
the baseClass attribute.
constraint
(Inherited from ModelElement) Designates constraints that
apply to the stereotype itself.
requiredTag
Specifies a set of tagged values, each of which specifies a
tag that an element classified by the stereotype is required
to have. The value part indicates the default value for the
tagged value, that is, the tagged value that an element will
be presumed to have if it is not overridden by an explicit
tagged value on the element bearing the stereotype. If the
value is unspecified, then the element must explicitly
specify a tagged value with the given tag.
stereotypeConstraint
Designates constraints that apply to elements bearing the
stereotype.
2.6.2.4 TaggedValue
A tagged value is a (Tag, Value) pair that permits arbitrary information to be attached
to any model element. A tag is an arbitrary name, some tag names are predefined as
Standard Elements. At most, one tagged value pair with a given tag name may be
attached to a given model element. In other words, there is a lookup table of values
selected by tag strings that may be attached to any model element.
The interpretation of a tag is (intentionally) beyond the scope of UML, it must be
determined by user or tool convention. It is expected that various model analysis tools
will define tags to supply information needed for their operation beyond the basic
semantics of UML. Such information could include code generation options, model
management information, or user-specified additional semantics.
Attributes
tag
OMG-UML V1.3
A name that indicates an extensible property to be attached
to ModelElements. There is a single, flat space of tag
names. UML does not define a mechanism for name
registry but model editing tools are expected to provide this
kind of service. A model element may have at most one
tagged value with a given name. A tag is, in effect, a
pseudoattribute that may be attached to model elements.
Extension Mechanisms
March 2000
2-73
2
value
An arbitrary value. The value must be expressible as a
string for uniform manipulation. The range of permissible
values depends on the interpretation applied to the tag by
the user or tool; its specification is outside the scope of
UML.
Associations
modelElement
A model element to which the tag belongs.
stereotype
A tag that applies to elements bearing the stereotype.
2.6.3 Well-Formedness Rules
The following well-formedness rules apply to the Extension Mechanisms package.
2.6.3.1 Constraint
[1] A Constraint attached to a Stereotype must not conflict with Constraints on any
inherited Stereotype, or associated with the baseClass.
-- cannot be specified with OCL
[2] A Constraint attached to a stereotyped ModelElement must not conflict with any
constraints on the attached classifying Stereotype, nor with the Class (the
baseClass) of the ModelElement.
-- cannot be specified with OCL
[3] A Constraint attached to a Stereotype will apply to all ModelElements classified by
that Stereotype and must not conflict with any constraints on the attached
classifying Stereotype, nor with the Class (the baseClass) of the ModelElement.
-- cannot be specified with OCL
2.6.3.2 Stereotype
[1] Stereotype names must not clash with any baseClass names.
Stereotype.oclAllInstances->forAll(st | st.baseClass <>
self.name)
[2] Stereotype names must not clash with the names of any inherited Stereotype.
self.allSupertypes->forAll(st : Stereotype | st.name <>
self.name)
[3] Stereotype names must not clash in the (M2) meta-class namespace, nor with the
names of any inherited Stereotype, nor with any baseClass names.
2-74
OMG-UML V1.3
March 2000
2
--M2 level not accessible
[4] The baseClass name must be provided; icon is optional and is specified in an
implementation specific way.
self.baseClass <> ''
[5] Tag names attached to a Stereotype must not clash with M2 meta-attribute
namespace of the appropriate baseClass element, nor with Tag names of any
inherited Stereotype.
--M2 level not accessible
2.6.3.3 ModelElement
[1] Tags associated with a ModelElement (directly via a property list or indirectly via a
Stereotype) must not clash with any metaattributes associated with the Model
Element.
--not specified in OCL
[2] A model element must have at most one tagged value with a given tag name.
self.taggedValue->forAll(t1, t2 : TaggedValue |
t1.tag = t2.tag implies t1 = t2)
[3] (Required tags because of stereotypes) If T in modelElement.stereotype.require
Tag.such that T.value = unspecified, then the modelElement must have a tagged
value with name = T.name.
self.stereotype.requiredTag->forAll(tag |
tag.value = Undefined implies self.taggedValue->exists(t |
t.tag = tag.tag))
2.6.3.4 TaggedValue
No extra well-formedness rules.
2.6.4 Semantics
Constraints, stereotypes, and tagged values apply to model elements, not to instances.
They represent extensions to the modeling language itself, not extensions to the runtime environment. They affect the structure and semantics of models. These concepts
represent metalevel extensions to UML. However, they do not contain the full power of
a heavyweight metamodel extension language and they are designed such that tools
need not implement metalevel semantics to implement them.
Within a model, any user-level model element may have a set of constraints and a set
of tagged values. The constraints specify restrictions on the instantiation of the model.
An instance of a user-level model element must satisfy all of the constraints on its
OMG-UML V1.3
Extension Mechanisms
March 2000
2-75
2
model element for the model to be well-formed. Evaluation of constraints is to be
performed when the system is "stable," that is, after the completion of any internal
operations when it is waiting for external events. Constraints are written in a
designated constraint language, such as OCL, C++, or natural language. The
interpretation of the constraints must be specified by the constraint language.
A user-level model element may have at most one tagged value with a given tag name.
Each tag name represents a user-defined property applicable to model elements with a
unique value for any single model element. The meaning of a tag is outside the scope
of UML and must be determined by convention among users and model analysis tools.
It is intended that both constraints and tagged values be represented as strings so that
they can be edited, stored, and transferred by tools that may not understand their
semantics. The idea is that the understanding of the semantics can be localized into a
few modules that make use of the values. For example, a code generator could use
tagged values to tailor the code generation process and a process planning tool could
use tagged values to denote model element ownership and status. Other modules would
simply preserve the uninterpreted values (as strings) unchanged.
A stereotype refers to a baseClass, which is a class in the UML metamodel (not a userlevel modeling element) such as Class, Association, Refinement, etc. A stereotype may
be a subtype of one or more existing stereotypes (which must all refer the same
baseClass, or baseClasses that derive from the same baseClass), in which case it
inherits their constraints and required tags and may add additional ones of its own. As
appropriate, a stereotype may add new constraints, a new icon for visual display, and a
list of default tagged values.
If a user-level model element is classified by an attached stereotype, then the UML
base class of the model element must match the base class specified by the stereotype.
Any constraints on the stereotype are implicitly attached to the model element. Any
tagged values on the stereotype are implicitly attached to the model element. If any of
the values are unspecified, then the model element must explicitly define tagged values
with the same tag name or the model is ill formed. (This behaves as if a copy of the
tagged values from the stereotype is attached to the model element, so that the default
values can be changed). If the stereotype is a subtype of one or more other stereotypes,
then any constraints or tagged values from those stereotypes also apply to the model
element (because they are inherited by this stereotype). If there are any conflicts
among multiple constraints or tagged values (inherited or directly specified), then the
model is ill formed.
2.6.5 Notes
From an implementation point of view, instances of a stereotyped class are stored as
instances of the base class with the stereotype name as a property. Tagged values can
and should be implemented as a lookup table (qualified association) of values
(expressed as strings) selected by tag names (represented as strings).
Attributes of UML metamodel classes and tag names should be accessible using a
single uniform string-based selection mechanism. This allows tags to be treated as
pseudo-attributes of the metamodel and stereotypes to be treated as pseudo-classes of
2-76
OMG-UML V1.3
March 2000
2
the metamodel, permitting a smooth transition to a full metamodeling capability, if
desired. See Section 5.2, “Mapping of UML Semantics to Facility Interfaces,” on
page 5-3 for a discussion of the relationship of the UML to the OMG Meta Object
Facility (MOF).
2UML Semantics
2.7 Data Types
2.7.1 Overview
The Data Types package is the subpackage that specifies the different data types that
are used to define UML. This chapter has a simpler structure than the other packages,
since it is assumed that the semantics of these basic concepts are well known.
2.7.2 Abstract Syntax
The abstract syntax for the Data Types package is expressed in graphic notation in
Figure 2-11 on page 2-77 and Figure 2-12 on page 2-78.
<<primitive>>
Integer
<<enumeration>>
AggregationKind
<<enumeration>>
OrderingKind
<<primitive>>
UnlimitedInteger
<<enumeration>>
Boolean
<<enumeration>>
ParameterDirectionKind
<<primitive>>
String
<<enumeration>>
CallConcurrencyKind
<<enumeration>>
PseudostateKind
<<enumeration>>
ChangeableKind
<<enumeration>>
ScopeKind
LocationReference
<<enumeration>>
MessageDirectionKind
<<enumeration>>
VisibilityKind
Multiplicity
<<primitive>>
Time
Expression
language : Name
body : String
Mapping
body : String
Name
body : String
MultiplicityRange
+range
1
1..*
lower : Integer
upper : UnlimitedInteger
Figure 2-11 Data Types Package - Main
OMG-UML V1.3
Data Types
March 2000
2-77
2
Expression
language : Name
body : String
ActionExpression
BooleanExpression
ArgListsExpression
MappingExpression
IterationExpression
ProcedureExpression
ObjectSetExpression
TypeExpression
TimeExpression
Figure 2-12 Data Types Package - Expressions
In the metamodel the data types are used for declaring the types of the classes’
attributes. They appear as strings in the diagrams and not with a separate ‘data type’
icon. In this way, the sizes of the diagrams are reduced. However, each occurrence of a
particular name of a data type denotes the same data type.
Note that these data types are the data types used for defining UML and not the data
types to be used by a user of UML. The latter data types will be instances of the
DataType metaclass defined in the metamodel.
2.7.2.1 ActionExpression
An expression that whose evaluation results in the performance of an action.
2.7.2.2 AggregationKind
An enumeration that denotes what kind of aggregation an Association is. When placed
on a target end, specifies the relationship of the target end to the source end.
AggregationKind defines an enumeration whose values are:
2-78
none
The end is not an aggregate.
aggregate
The end is an aggregate; therefore, the other end is a part
and must have the aggregation value of none. The part may
be contained in other aggregates.
composite
The end is a composite; therefore, the other end is a part
and must have the aggregation value of none. The part is
strongly owned by the composite and may not be part of
any other composite.
OMG-UML V1.3
March 2000
2
2.7.2.3 ArgListsExpression
In the metamodel ArgListsExpression defines a statement that will result in a set of
object lists when it is evaluated.
2.7.2.4 Boolean
In the metamodel, Boolean defines an enumeration that denotes a logicial condition. Its
values are:
true
The Boolean condition is satisfied.
false
The Boolean condition is not satisfied.
2.7.2.5 BooleanExpression
In the metamodel BooleanExpression defines a statement that will evaluate to an
instance of Boolean when it is evaluated.
2.7.2.6 CallConcurrencyKind
An enumeration that denotes the semantics of multiple concurrent calls to the same
passive instance (i.e., an Instance originating from a Classifier with isActive=false). It
is an enumeration with the values:
sequential
Callers must coordinate so that only one call to an Instance (on
any sequential Operation) may be outstanding at once. If
simultaneous calls occur, then the semantics and integrity of the
system cannot be guaranteed.
guarded
Multiple calls from concurrent threads may occur simultaneously
to one Instance (on any guarded Operation), but only one is
allowed to commence. The others are blocked until the
performance of the first Operation is complete. It is the
responsibility of the system designer to ensure that deadlocks do
not occur due to simultaneous blocks. Guarded Operations must
perform correctly (or block themselves) in the case of a
simultaneous sequential Operation or guarded semantics cannot
be claimed.
concurrent
Multiple calls from concurrent threads may occur simultaneously
to one Instance (on any concurrent Operation). All of them may
proceed concurrently with correct semantics. Concurrent
Operations must perform correctly in the case of a simultaneous
sequential or guarded Operation or concurrent semantics cannot
be claimed.
OMG-UML V1.3
Data Types
March 2000
2-79
2
2.7.2.7 ChangeableKind
In the metamodel ChangeableKind defines an enumeration that denotes how an
AttributeLink or LinkEnd may be modified. Its values are:
changeable
No restrictions on modification.
frozen
The value may not be changed from the source end after the
creation and initialization of the source object. Operations on the
other end may change a value.
addOnly
If the multiplicity is not fixed, values may be added at any time
from the source object, but once created a value may not be
removed from the source end. Operations on the other end may
change a value.
2.7.2.8 Expression
In the metamodel an Expression defines a statement which will evaluate to a (possibly
empty) set of instances when executed in a context. An Expression does not modify the
environment in which it is evaluated. An expression contains an expression string and
the name of an interpretation language with which to evaluate the string.
Attributes
language
Names the language in which the expression body is represented.
The interpretation of the expression depends on the language. If
the language name is omitted, no interpretation for the expression
can be assumed by UML.
body
The text of the expression expressed in the given language.
Predefined language names include the following:
OCL
The Object Constraint Language (see the “Object Constraint
Language” chapter for additional information).
2.7.2.9 Geometry
An uninterpreted type used to describe the geometrical shape of icons, such as those
that may be attached to stereotypes. The details of this specification are not currently
part of UML and must therefore be supplied by the implementation of a model editing
tool, with the understanding that they will likely be tool-specific. This type is therefore
not actually defined in the metamodel but is used only as the type of attributes.
2-80
OMG-UML V1.3
March 2000
2
2.7.2.10 Integer
In the metamodel an Integer is an element in the (infinite) set of integers (…-2, -1, 0,
1, 2…).
2.7.2.11 IterationExpression
In the metamodel IterationExpression defines a string that will evaluate to a iteration
control construct in the interpretation language.
2.7.2.12 LocationReference
Designates a position within a behavior sequence for the insertion of an extension use
case. May be a line or range of lines in code, or a state or set of states in a state
machine, or some other means in a different kind of specification.
2.7.2.13 Mapping
In the metamodel a Mapping is an expression that is used for mapping ModelElements.
For exchange purposes, it should be represented as a String.
Attributes
body
A string describing the mapping. The format of the
mapping is currently unspecified in UML.
2.7.2.14 MappingExpression
An expression that evaluates to a mapping.
2.7.2.15 MessageDirectionKind
This enumeration type is no longer used in UML.
2.7.2.16 Multiplicity
In the metamodel a Multiplicity defines a non-empty set of non-negative integers. A set
which only contains zero ({0}) is not considered a valid Multiplicity. Every
Multiplicity has at least one corresponding String representation.
2.7.2.17 MultiplicityRange
In the metamodel a MultiplicityRange defines a range of integers. The upper bound of
the range cannot be below the lower bound. The lower bound must be a non-negative
integer. The upper bound must be a non-negative integer or the special value unlimited,
which indicates there is no upper bound on the range.
OMG-UML V1.3
Data Types
March 2000
2-81
2
2.7.2.18 Name
In the metamodel a Name defines a token used for naming ModelElements. Each
Name has a corresponding String representation. For purposes of exchange, a name
should be represented as a String.
Attributes
body
The name string.
2.7.2.19 ObjectSetExpression
In the metamodel ObjectSetExpression defines a statement that will evaluate to a set of
instances when it is evaluated. ObjectSetExpressions are commonly used to designate
the target instances in an Action. The expression may be the reserved word “all” when
used as the target of a SendAction. It evaluates to all the instances that can receive the
signal, as determined by the underlying runtime system.
2.7.2.20 OrderingKind
Defines an enumeration that specifies how the elements of a set are arranged. Used in
conjunction with elements that have a multiplicity in cases when the multiplicity value
is greater than one. The ordering must be determined and maintained by operations that
modify the set. The intent is that the set of enumeration literals be open for new values
to be added by tools for purposes of design, code generation, etc. For example, a value
of sorted might be used for a design specification. Values are:
unordered
The elements of the set have no inherent ordering.
ordered
The elements of the set have a sequential ordering.
Other possibilities (such as sorted) may be defined later by
declaring additional keywords. As with user-defined stereotypes,
this would be a private extension supported by particular editing
tools.
2.7.2.21 ParameterDirectionKind
In the metamodel ParameterDirectionKind defines an enumeration that denotes if a
Parameter is used for supplying an argument and/or for returning a value. The
enumeration values are:
2-82
in
An input Parameter (may not be modified).
out
An output Parameter (may be modified to communicate
information to the caller).
inout
An input Parameter that may be modified.
return
A return value of a call.
OMG-UML V1.3
March 2000
2
2.7.2.22 ProcedureExpression
In the metamodel ProcedureExpression defines a statement that will result in a change
to the values of its environment when it is evaluated.
2.7.2.23 PseudostateKind
In the metamodel PseudostateKind defines an enumeration that discriminates the kind
of Pseudostate. See Section 2.12.2.7, “PseudoState,” on page 2-135 for details. The
enumeration values are:
choice
Splits an incoming transition into several disjoint outgoing
transitions. Each outgoing transition has a guard condition
that is evaluated after prior actions on the incoming path
have been completed. At least one outgoing transition must
be enabled or the model is ill formed.
deepHistory
When reached as the target of a transition, restores the full
state configuration that was active just before the enclosing
composite state was last exited.
fork
Splits an incoming transition into several concurrent
outgoing transitions. All of the transitions fire together.
initial
The default target of a transition to the enclosing composite
state.
join
Merges transitions from concurrent regions into a single
outgoing transition. All the transitions fire together.
junction
Chains together transitions into a single run-to-completion
path. May have multiple input and/or output transitions.
Each complete path involving a junction is logically
independent and only one such path fires at one time. May
be used to construct branches and merges.
shallowHistory
When reached as the target of a transition, restores the state
within the enclosing composite state that was active just
before the enclosing state was last exited. Does not restore
any substates of the last active state.
OMG-UML V1.3
Data Types
March 2000
2-83
2
2.7.2.24 ScopeKind
In the metamodel ScopeKind defines an enumeration that denotes whether a feature
belongs to individual instances or an entire classifier. Its values are:
instance
The feature pertains to Instances of a Classifier. For example, it is
a distinct Attribute in each Instance or an Operation that works
on an Instance.
classifier
The feature pertains to an entire Classifier. For example, it is an
Attribute shared by the entire Classifier or an Operation that
works on the Classifier, such as a creation operation.
2.7.2.25 String
In the metamodel a String defines a stream of text.
2.7.2.26 Time
In the metamodel a Time defines a value representing an absolute or relative moment
in time and space. A Time has a corresponding string representation.
2.7.2.27 TimeExpression
In the metamodel TimeExpression defines a statement that will evaluate to an instance
of Time when it is evaluated.
2.7.2.28 TypeExpression
In the metamodel TypeExpression defines a string that is a programming language type
in the interpretation language.
2.7.2.29 UnlimitedInteger
In the metamodel UnlimitedInteger defines a data type whose range is the non-negative
integers augmented by the special value “unlimited.” It is used for the upper bound of
multiplicities.
2.7.2.30 Uninterpreted
In the metamodel an Uninterpreted is a blob, the meaning of which is domain-specific
and therefore not defined in UML.
2-84
OMG-UML V1.3
March 2000
2
2.7.2.31 VisibilityKind
In the metamodel VisibilityKind defines an enumeration that denotes how the element
to which it refers is seen outside the enclosing name space. Its values are:
public
Other elements may see and use the target element.
protected
Descendants of the source element may see and use the target
element.
private
Only the source element may see and use the target element.
2ML Semantics
Part 3 - Behavioral Elements
The Behavioral Elements package is the language superstructure that specifies the
dynamic behavior or models. The Behavioral Elements package is decomposed into the
following subpackages: Common Behavior, Collaborations, Use Cases, State
Machines, and Activity Graphs.
2.8 Behavioral Elements Package
Common Behavior specifies the core concepts required for behavioral elements. The
Collaborations package specifies a behavioral context for using model elements to
accomplish a particular task. The Use Case package specifies behavior using actors and
use cases. The State Machines package defines behavior using finite-state transition
systems. The Activity Graphs package defines a special case of a state machine that is
used to model processes.
OMG-UML V1.3
Behavioral Elements Package
March 2000
2-85
2
Ac tivity Gr ap hs
C ollaborations
Us e C as es
S tate Mac hines
C om m on
B ehavior
Figure 2-13 Behavioral Elements Package
2.9 Common Behavior
2.9.1 Overview
The Common Behavior package is the most fundamental of the subpackages that
compose the Behavioral Elements package. It specifies the core concepts required for
dynamic elements and provides the infrastructure to support Collaborations, State
Machines, and Use Cases.
The following sections describe the abstract syntax, well-formedness rules, and
semantics of the Common Behavior package.
2-86
OMG-UML V1.3
March 2000
2
2.9.2 Abstract Syntax
The abstract syntax for the Common Behavior package is expressed in graphic notation
in the following figures. Figure 2-14 shows the model elements that define Signals and
Receptions.
Classifier
(from Core)
+signal
Signal
1
+raisedSignal
+context
*
*
Behaviora lFeatu re
(from Core)
Exception
Re ception
0..*
+reception
specif ication : String
isRoot : Boolean
isLeaf : Boolean
isA bstract : Boolean
Figure 2-14 Common Behavior - Signals
Figure 2-15 on page 2-88 illustrates the model elements that specify various actions,
such as CreateAction, CallAction, and SendAction.
OMG-UML V1.3
Common Behavior
March 2000
2-87
2
Argument
Model
(fromCore)
value : Expression
*
+actualArgument
{ordered}
0..1
{ordered}
+action
ActionSequence
0..1
CreateAction
0..*
0..*
Action
recurrence : IterationExpression
target : ObjectSetExpression
isAsynchronous : Boolean
script : ActionExpression
SendAction
CallAction
*
*
ReturnAction
1
Clas
(fromCore)
+instantiation
1
UninterpretedAction
+operation
Operation
TerminateAction
1
DestroyAction
+signal
Signal
(fromCore)
Figure 2-15 Common Behavior - Actions
Figure 2-16 on page 2-89 shows the model elements that define Instances and Links.
2-88
OMG-UML V1.3
March 2000
2
Action
ModelElement
recurrence : IterationExpression
target : ObjectSetExpression
isAsynchronous : Boolean
(fromCore)
script : ActionExpression
1
+dispatchAction
*
AttributeLink
Attribute
(from Core)
Stimulus
+attribute
1
*
LinkEnd
Link
0..1
+linkEnd
+connection
+communicationLink
*
1
+slot
0..*
*
*
*
*
1 +sender
1
*
{ordered} 2 .. *
*
*
{ordered}
1
1
+argument
+value
*
+receiver
1 +association
Instance
Association
Classifier
(from Core)
+classifier
1..*
(from Core)
*
+associationEnd
+connection
1
2..*
1
AssociationEnd
(from Core)
1
+instance
* +resident
0..1
DataValue
ComponentInstance
+resident
*
NodeInstance
Object
0..1
LinkObject
Figure 2-16 Common Behavior - Instances and Links
The following metaclasses are contained in the Common Behavior package.
2.9.2.1 Action
An action is a specification of an executable statement that forms an abstraction of a
computational procedure that results in a change in the state of the model, and can be
realized by sending a message to an object or modifying a link or a value of an
attribute.
In the metamodel an Action may be part of an ActionSequence and may contain a
specification of a target as well as a specification of the actual arguments. For example,
a list of Arguments containing expressions for determining the actual Instances to be
used when the Action is performed (or executed).
OMG-UML V1.3
Common Behavior
March 2000
2-89
2
The target metaattribute is of type ObjectSetExpression which, when executed,
resolves into zero or more specific Instances that are the intended target of the Action,
like a receiver of a dispatched Signal. The recurrence metaattribute specifies how the
target set is iterated when the action is executed. It is not defined within UML if the
action is applied sequentially or in parallel to the target instances.
Action is an abstract metaclass.
Attributes
isAsynchronous
Indicates whether a dispatched Stimulus is asynchronous or
not.
recurrence
An Expression stating how many times the Action should
be performed.
script
An ActionExpression describing the effects of the Action.
target
An ObjectSetExpression that determines the target of the
Action.
Associations
actualArgument
A sequence of Expressions that determines the actual
arguments needed when evaluating the Action.
2.9.2.2 ActionSequence
An action sequence is a collection of actions.
In the metamodel an ActionSequence is an Action, which is an aggregation of other
Actions. It describes the behavior of the owning State or Transition.
Associations
action
A sequence of Actions performed sequentially as an atomic
unit.
2.9.2.3 Argument
An argument is an expression describing how to determine the actual values passed in
a dispatched request. It is aggregated within an action.
In the metamodel an Argument is a part of an Action and contains a metaattribute
value of type Expression. It states how the actual argument is determined when the
owning Action is executed.
2-90
OMG-UML V1.3
March 2000
2
Attributes
value
An Expression determining the actual Instance when
evaluated.
2.9.2.4 AttributeLink
An attribute link is a named slot in an instance, which holds the value of an attribute.
In the metamodel AttributeLink is a piece of the state of an Instance and holds the
value of an Attribute.
Associations
value
The Instance that is the value of the AttributeLink.
attribute
The Attribute from which the AttributeLink originates.
2.9.2.5 CallAction
A call action is an action resulting in an invocation of an operation on an instance. A
call action can be synchronous or asynchronous, indicating whether the operation is
invoked synchronously or asynchronously.
In the metamodel the CallAction is an Action. The designated Instance or set of
Instances is specified via the target expression, and the actual arguments are designated
via the argument association inherited from Action. The Operation to be invoked is
specified by the associated Operation.
Attributes
isAsynchronous
(inherited from Action) - Indicates if a dispatched operation
is asynchronous or not.
• False - indicates that the caller waits for the completion of the
execution of the operation.
• True - Indicates that the caller does not wait for the completion
of the execution of the operation but continues immediately.
Associations
operation
The operation which will be invoked when the Action is
executed.
2.9.2.6 ComponentInstance
A component instance is an instance of a component that resides on a node instance. A
component instance may have a state.
OMG-UML V1.3
Common Behavior
March 2000
2-91
2
In the metamodel a ComponentInstance is an Instance that originates from a
Component. It may be associated with a set of Instance and may reside on a
NodeInstance.
Associations
resident
A collection of Instances that exist inside the
ComponentInstance.
2.9.2.7 CreateAction
A create action is an action resulting in the creation of an instance of some classifier.
In the metamodel the CreateAction is an Action. The Classifier to be instantiated is
designated by the instantiation association of the CreateAction. A CreateAction has no
target instance.
Associations
instantiation
The Classifier of which an Instance will be created, when
the CreateAction is performed.
2.9.2.8 DestroyAction
A destroy action is an action that results in the destruction of an object specified in the
action.
In the metamodel a DestroyAction is an Action. The designated object is specified by
the target association of the Action.
2.9.2.9 DataValue
A data value is an instance with no identity.
In the metamodel DataValue is a child of Instance that cannot change its state (i.e., all
Operations that are applicable to it are pure functions or queries. DataValues are
typically used as attribute values).
2.9.2.10 Exception
An exception is a signal raised by behavioral features typically in case of execution
faults.
In the metamodel Exception is derived from Signal. An Exception is associated with
the BehavioralFeatures that raise it.
2-92
OMG-UML V1.3
March 2000
2
Associations
context
(Inherited from Signal) - The set of BehavioralFeatures that
raise the exception.
2.9.2.11 Instance
The instance construct defines an entity to which a set of operations can be applied and
which has a state that stores the effects of the operations.
In the metamodel Instance is connected to at least one Classifier that declares its
structure and behavior. It has a set of attribute values and is connected to a set of
Links, both sets matching the definitions of its Classifiers. The two sets implement the
current state of the Instance. Instance is an abstract metaclass.
Associations
slot
The set of AttributeLinks that holds the attribute values of
the Instance.
linkEnd
The set of LinkEnds of the connected Links that are
attached to the Instance.
classifier
The set of Classifiers that declare the structure of the
Instance.
Standard Constraints
destroyed
Association
Destroyed is a constraint applied to an instance, specifying that the
instance is destroyed during the execution.
new
New is a constraint applied to an instance, specifying that the
instance is created during the execution.
Association
transient
Association
Transient is a constraint applied to an instance, specifying that the
instance is created and destroyed during the execution.
Tagged Values
persistent
Association
Persistence denotes the permanence of the state of the instance,
marking it as transitory (its state is destroyed when the instance is
destroyed) or persistent (its state is not destroyed when the
instance is destroyed).
2.9.2.12 Link
The link construct is a connection between instances.
OMG-UML V1.3
Common Behavior
March 2000
2-93
2
In the metamodel Link is an instance of an Association. It has a set of LinkEnds that
matches the set of AssociationEnds of the Association. A Link defines a connection
between Instances.
Associations
association
The Association that is the declaration of the link.
connection
The tuple of LinkEnds that constitute the Link.
Standard Constraints
destroyed
Association
Destroyed is a constraint applied to a link, specifying that the
link is destroyed during the execution.
new
Association
New is a constraint applied to a link, specifying that the link is
created during the execution.
Association
Transient is a constraint applied to a link, specifying that the
link is created and destroyed during the execution.
transient
2.9.2.13 LinkEnd
A link end is an end point of a link.
In the metamodel LinkEnd is the part of a Link that connects to an Instance. It
corresponds to an AssociationEnd of the Link’s Association.
Associations
associationEnd
The AssociationEnd that is the declaration of the LinkEnd..
instance
The Instance connected to the LinkEnd.
qualifierValue
The AttributeLinks that hold the values of the Qualifier
associated with the corresponding AssociationEnd.
Stereotypes
association
Association
Association is a constraint applied to a link-end, specifying
that the corresponding instance is visible via association.
global
Global is a constraint applied to a link-end, specifying that the
corresponding instance is visible because it is in a global scope
relative to the link.
Association
2-94
OMG-UML V1.3
March 2000
2
local
Association
Local is a constraint applied to link-end, specifying that the
corresponding instance is visible because it is in a local scope
relative to the link.
parameter
Association
Parameter is a constraint applied to a link-end, specifying that
the corresponding instance is visible because it is a parameter
relative to the link.
self
Self is a constraint applied to a link-end, specifying that the
corresponding instance is visible because it is the dispatcher of
a request.
Association
2.9.2.14 LinkObject
A link object is a link with its own set of attribute values and to which a set of
operations may be applied.
In the metamodel LinkObject is a connection between a set of Instances, where the
connection itself may have a set of attribute values and to which a set of Operations
may be applied. It is a child of both Object and Link.
2.9.2.15 NodeInstance
A node instance is an instance of a node. A collection of component instances may
reside on the node instance.
In the metamodel NodeInstance is an Instance that originates from a Node. Each
ComponentInstance that resides on a NodeInstance must be an instance of a
Component that resides on the corresponding Node.
Associations
resident
A collection of ComponentInstances that reside on the
NodeInstances.
2.9.2.16 Object
An object is an instance that originates from a class.
In the metamodel Object is a subclass of Instance and it originates from at least one
Class. The set of Classes may be modified dynamically, which means that the set of
features of the Object may change during its life-time.
2.9.2.17 Reception
A reception is a declaration stating that a classifier is prepared to react to the receipt of
a signal. The reception designates a signal and specifies the expected behavioral
response. A reception is a summary of expected behavior. The details of handling a
signal are specified by a state machine.
OMG-UML V1.3
Common Behavior
March 2000
2-95
2
In the metamodel Reception is a child of BehavioralFeature and declares that the
Classifier containing the feature reacts to the signal designated by the reception
feature. The isPolymorphic attribute specifies whether the behavior is polymorphic or
not; a true value indicates that the behavior is not always the same and may be affected
by state or subclassing. The specification indicates the expected response to the Signal.
Attributes
isAbstract
If true, then the reception does not have an implementation,
and one must be supplied by a descendant. If false, the
reception must have an implementation in the classifier or
inherited from an ancestor.
isLeaf
If true, then the implementation of the reception may not be
overridden by a descendant classifier. If false, then the
implementation of the reception may be overridden by a
descendant classifier (but it need not be overridden).
isRoot
If true, then the classifier must not inherit a declaration of the
same reception. If false, then the classifier may (but need not)
inherit a declaration of the same reception. (But the
declaration must match in any case; a classifier may not
modify an inherited declaration of a reception.)
specification
A description of the effects of the classifier receiving a Signal,
stated by a String.
Associations
signal
The Signal that the Classifier is prepared to handle.
2.9.2.18 ReturnAction
A return action is an action that results in returning a value to a caller.
In the metamodel ReturnAction is an Action, which causes values to be passed back to
the activator. The values are represented by the arguments inherited from Action. A
ReturnAction has no explicit target.
2.9.2.19 SendAction
A send action is an action that results in the (asynchronous) sending of a signal. The
signal can be directed to a set of receivers via an objectSetExpression, or sent
implicitly to an unspecified set of receivers, defined by some external mechanism. For
example, if the signal is an exception, the receiver is determined by the underlying
runtime system mechanisms.
2-96
OMG-UML V1.3
March 2000
2
In the metamodel SendAction is an Action. It is associated with the Signal to be raised,
and its actual arguments are specified by the argument association, inherited from
Action.
Associations
signal
The signal that will be invoked when the Action is
executed.
2.9.2.20 Signal
A signal is a specification of an asynchronous stimulus communicated between
instances. The receiving instance handles the signal by a state machine. Signal is a
generalizable element and is defined independently of the classes handling the signal.
A reception is a declaration that a class handles a signal, but the actual handling is
specified by a state machine.
In the metamodel Signal is a child to Classifier, with the parameters expressed as
Attributes. A Signal is always asynchronous. A Signal is associated with the
BehavioralFeatures that raise it.
Associations
context
The set of BehavioralFeatures that raise the signal.
reception
A set of Receptions that indicates Classes prepared to handle
the signal.
2.9.2.21 Stimulus
A stimulus reifies a communication between two instances.
In the metamodel Stimulus is a communication (i.e., a Signal sent to an Instance), or
an invocation of an Operation. It can also be a request to create an Instance, or to
destroy an Instance It has a sender, a receiver, and may have a set of actual arguments,
all being Instances.
Associations
argument
The sequence of Instances being the arguments of the
MessageInstance.
communicationLink
The Link that is used for communication.
dispatchAction
The Action which caused the Stimulus to be dispatched
when it was executed.
receiver
The Instance that receives the Stimulus.
sender
The Instance that sends the Stimulus.
OMG-UML V1.3
Common Behavior
March 2000
2-97
2
2.9.2.22 TerminateAction
A terminate action results in self-destruction of an object.
In the metamodel TerminateAction is a child of Action. The target of a
TerminateAction is implicitly the Instance executing the action, so there is no explicit
target.
2.9.2.23 UninterpretedAction
An uninterpreted action represents an action that is not explicitly reified in the UML.
Taken to the extreme, any action is a call or raise on some instance, like in Smalltalk.
However, in more practical terms, uninterpreted actions can be used to model
language-specific actions that are neither call actions nor send actions, and are not
easily categorized under the other types of actions.
2.9.3 Well-Formedness Rules
The following well-formedness rules apply to the Common Behavior package.
2.9.3.1 Action
No extra well-formedness rules.
2.9.3.2 ActionSequence
No extra well-formedness rules.
2.9.3.3 Argument
No extra well-formedness rules.
2.9.3.4 AssignmentAction
No extra well-formedness rules.
2.9.3.5 AttributeLink
[1] The type of the Instance must match the type of the Attribute.
self.value.classifier->union (
self.value.classifier.allParents)->includes (
self.attribute.type)
2.9.3.6 CallAction
[1] The number of arguments be the same as the number of the Operation.
2-98
OMG-UML V1.3
March 2000
2
self.actualArgument->size = self.operation.parameter->size
2.9.3.7 ComponentInstance
[1] A ComponentInstance originates from exactly one Component.
self.classifier->size = 1
and
self.classifier.oclIsKindOf (Component)
2.9.3.8 CreateAction
[1] A CreateAction does not have a target expression.
self.target->isEmpty
2.9.3.9 DestroyAction
[1] A DestroyAction should not have arguments.
self.actualArgument->size = 0
2.9.3.10 DataValue
[1] A DataValue originates from exactly one Classifier, which is a DataType.
(self.classifier->size = 1)
and
self.classifier.oclIsKindOf(DataType)
[2] A DataValue has no AttributeLinks.
self.slot->isEmpty
2.9.3.11 Exception
No extra well-formedness rules.
2.9.3.12 Instance
[1] The AttributeLinks match the declarations in the Classifiers.
self.slot->forAll ( al |
self.classifier->exists ( c |
c.allAttributes->includes ( al.attribute ) ) )
[2] The Links matches the declarations in the Classifiers.
self.allLinks->forAll ( l |
self.classifier->exists ( c |
c.allAssociations->includes ( l.association ) ) )
OMG-UML V1.3
Common Behavior
March 2000
2-99
2
[3] If two Operations have the same signature they must be the same.
self.classifier->forAll ( c1, c2 |
c1.allOperations->forAll ( op1 |
c2.allOperations->forAll ( op2 |
op1.hasSameSignature (op2) implies op1 = op2 ) ) )
[4] There are no name conflicts between the AttributeLinks and opposite LinkEnds.
self.slot->forAll( al |
not self.allOppositeLinkEnds->exists( le | le.name = al.name ) )
and
self.allOppositeLinkEnds->forAll( le |
not self.slot->exists( al | le.name = al.name ) )
[5] For each Association in which an Instance is involved, the number of opposite
LinkEnds must match the multiplicity of the AssociationEnd.
self.classifier.allOppositeAssociationEnds->forAll ( ae |
ae.multiplicity.multiplicityRange->exists ( mr |
self.selectedLinkEnds (ae)->size >= mr.lower and
(mr.upper = ‘unlimited’ or
(mr.upper <> ‘unlimited’ and
self.selectedLinkEnds (ae)->size <=
mr.upper.oclAsType (Integer) ) ) ) )
[6] The number of associated AttributeLinks must match the multiplicity of the
Attribute.
self.classifier.allAttributes->forAll ( a |
a.multiplicity.multiplicityRange->exists ( mr |
self.selectedAttributeLinks (a)->size >= mr.lower and
(mr.upper = ‘unlimited’ or
(mr.upper <> ‘unlimited’ and
self.selectedLinkEnds (a)->size <=
mr.upper.oclAsType (Integer) ) ) ) )
Additional operations
[1] The operation allLinks results in a set containing all Links of the Instance itself.
allLinks : set(Link);
allLinks = self.linkEnd.link
[2] The operation allOppositeLinkEnds results in a set containing all LinkEnds of Links
connected to the Instance with another LinkEnd.
allOppositeLinkEnds : set(LinkEnd);
allOppositeLinkEnds = self.allLinks.connection->select (le |
le.instance <> self)
[3] The operation selectedLinkEnds results in a set containing all opposite LinkEnds
corresponding to a given AssociationEnd.
2-100
OMG-UML V1.3
March 2000
2
selectedLinkEnds (ae : AssociationEnd) : set(LinkEnd);
selectedLinkEnds (ae) = self.allOppositeLinkEnds->select (le |
le.associationEnd = ae)
[4] The operation selectedAttributeLinks results in a set containing all AttributeLinks
corresponding to a given Attribute.
selectedAttributeLinks (ae : Attribute) : set(AttributeLink);
selectedAttributeLinks (a) = self.slot->select (s |
s.attribute = a)
2.9.3.13 Link
[1] The set of LinkEnds must match the set of AssociationEnds of the Association.
Sequence {1..self.connection->size}->forAll ( i |
self.connection->at (i).associationEnd =
self.association.connection->at (i) )
[2] There are not two Links of the same Association which connects the same set of
Instances in the same way.
self.association.link->forAll ( l |
Sequence {1..self.connection->size}->forAll ( i |
self.connection->at (i).instance =
l.connection->at (i).instance )
implies self = l )
2.9.3.14 LinkEnd
[1] The type of the Instance must match the type of the AssociationEnd.
self.instance.classifier->union (
self.instance.classifier.allParents)->includes (
self.associationEnd.type)
2.9.3.15 LinkObject
[1] One of the Classifiers must be the same as the Association.
self.classifier->includes(self.association)
[2] The Association must be a kind of AssociationClass.
self.association.oclIsKindOf(AssociationClass)
2.9.3.16 NodeInstance
[1] A NodeInstance must have only one Classifier as its origin, and it must be a Node.
OMG-UML V1.3
Common Behavior
March 2000
2-101
2
self.classifier->forAll ( c | c.oclIsKindOf(Node))
and
self.classifier->size = 1
[2] Each ComponentInstance that resides on a NodeInstance must be an instance of a
Component that resides on the corresponding Node.
self.resident->forAll(n |
self.classifier.resident->includes(n.classifier))
2.9.3.17 Object
[1] Each of the Classifiers must be a kind of Class.
self.classifier->forAll ( c | c.oclIsKindOf(Class))
2.9.3.18 Reception
[1] A Reception can not be a query.
not self.isQuery
2.9.3.19 ReturnAction
No extra well-formedness rules.
2.9.3.20 SendAction
[1] The number of arguments is the same as the number of parameters of the Signal.
self.actualArgument->size=self.signal.allAttributes->size
[2] A Signal is always asynchronous.
self.isQAsynchronous
2.9.3.21 Signal
No extra well-formedness rules.
2.9.3.22 Stimulus
[1] The number of arguments must match the number of Arguments of the Action.
self.dispatchAction.actualArgument->size = self.argument->size
[2] The Action must be a SendAction, a CallAction, a CreateAction, or a
DestroyAction.
2-102
OMG-UML V1.3
March 2000
2
self.dispatchAction.oclIsKindOf
self.dispatchAction.oclIsKindOf
self.dispatchAction.oclIsKindOf
self.dispatchAction.oclIsKindOf
(SendAction) or
(CallAction) or
(CreateAction) or
(DestroyAction)
2.9.3.23 TerminateAction
[1] A TerminateAction has no arguments.
self.actualArguments->size = 0
[2] A TerminateAction has no target expression.
self.target->isEmpty
2.9.3.24 UninterpretedAction
No extra well-formedness rules.
2.9.4 Semantics
This section provides a description of the semantics of the elements in the Common
Behavior package.
2.9.4.1 Object and DataValue
An object is an instance that originates from a class, it is structured and behaves
according to its class. All objects originating from the same class are structured in the
same way, although each of them has its own set of attribute links. Each attribute link
references an instance, usually a data value. The number of attribute links with the
same name fulfills the multiplicity of the corresponding attribute in the class. The set
may be modified according to the specification in the corresponding attribute. For
example, each referenced instance must originate from (a specialization of) the type of
the attribute, and attribute links may be added or removed according to the changeable
property of the attribute.
An object may have multiple classes (i.e., it may originate from several classes). In this
case, the object will have all the features declared in all of these classes, both the
structural and the behavioral ones. Moreover, the set of classes (i.e., the set of features
that the object conforms to) may vary over time. New classes may be added to the
object and old ones may be detached. This means that the features of the new classes
are dynamically added to the object, and the features declared in a class that is
removed from the object are dynamically removed from the object. No name clashes
between attributes links and opposite link ends are allowed, and each operation that is
applicable to the object should have a unique signature.
Another kind of instance is data value, which is an instance with no identity. Moreover,
a data value cannot change its state; all operations that are applicable to a data value
are queries and do not cause any side effects. Since it is not possible to differentiate
between two data values that appear to be the same, it becomes more of a philosophical
OMG-UML V1.3
Common Behavior
March 2000
2-103
2
issue whether there are several data values representing the same value or just one for
each value-it is not possible to tell. In addition, a data value cannot change its data
type.
2.9.4.2 Link
A link is a connection between instances. Each link is an instance of an association
(i.e., a link connects instances of (specializations of) the associated classifiers). In the
context of an instance, an opposite end defines the set of instances connected to the
instance via links of the same association and each instance is attached to its link via a
link-end originating from the same association-end. However, to be able to use a
particular opposite end, the corresponding link end attached to the instance must be
navigable. An instance may use its opposite ends to access the associated instances. An
instance can communicate with the instances of its opposite ends and also use
references to them as arguments or reply values in communications.
A link object is a special kind of link and it is at the same time also an object. Since an
object may change its classes, this is also true for a link object. However, one of the
classes must always be an association class.
2.9.4.3 Signal, Exception and Stimulus
Several kinds of requests exist between instances (e.g., sending a signal and invoking
an operation). The former is used to trigger a reaction in the receiver in an
asynchronous way and without a reply, while the latter applies an operation to an
instance, which can be either done synchronously or asynchronously and may require a
reply from the receiver to the sender. Other kinds of requests include creating a new
instance or deleting an already existing instance. When an instance communicates with
another instance a stimulus is passed between the two instances. Each stimulus has a
sender instance and a receiver instance, and possibly a sequence of arguments
according to the specifying signal or operation. The stimulus uses a link between the
sender and the receiver for communication. This link may be missing if the receiver is
an argument inside the current activation, a local or global variable, or if the stimulus
is sent to the sender instance, itself. Moreover, a stimulus is dispatched by an action
(e.g., a call action or a send action). The action specifies the request made by the
stimulus, like the operation to be invoked or the signal event to be raised, as well as
how the actual arguments of the stimulus are determined.
A signal may be attached to a classifier, which means that instances of the classifier
will be able to receive that signal. This is facilitated by declaring a reception by the
classifier. An exception is a special kind of signal, typically used to signal fault
situations. The sender of the exception aborts execution and execution resumes with
the receiver of the exception, which may be the sender itself. Unlike other signals, the
receiver of an exception is determined implicitly by the interaction sequence during
execution; it is not explicitly specified as the target of the send action.
The reception of a stimulus originating from a call action by an instance causes the
invocation of an operation on the receiver. The receiver executes the method that is
found in the full descriptor of the class that corresponds to the operation. The reception
2-104
OMG-UML V1.3
March 2000
2
of a stimulus originating from a signal by an instance may cause a transition and
subsequent effects as specified by the state machine for the classifier of the recipient.
This form of behavior is described in the State Machines package. Note that the
invoked behavior is described by methods and state machine transitions. Operations
and receptions merely declare that a classifier accepts a given operation invocation or
signal, but they do not specify the implementation.
2.9.4.4 Action
An action is a specification of a computable statement. Each kind of action is defined
as a subclass of action. The following kinds of actions are defined:
•
Send action is an action in which a stimulus is created that causes a signal event for
the receiver(s).
•
Call action is an action in which a stimulus is created that causes an operation to be
invoked on the receiver.
•
Create action is an action in which an instance is created based on the definitions of
the specified set of classifiers.
•
•
Terminate action is an action in which an instance causes itself to cease to exist.
•
•
•
Return action is an action that returns a value to a caller.
Destroy action is an action in which an instance causes another instance to cease to
exist.
Assignment action is an action that assigns an instance to an attribute link or a link.
Uninterpreted action is an action that has no interpretation in UML.
Each action specifies the target of the action and the arguments of the action. The
target of an action is an object set expression, which resolves into zero or more
instances when the action is executed (e.g., the receiver of a stimulus or the instance to
be destroyed). The action also specifies if it should iterate over the set of target
instances (recurrence). Note, however, that UML does not define if the action is
applied to the target instances sequentially or in parallel. The recurrence can also (in
the degenerated case) be used for specification of a condition, which must be fulfilled
if the action is to be applied to the target; otherwise, the request is neglected.
The arguments of the action resolve into a sequence of instances when the action is
executed. For example, these instances are the actual arguments of the stimulus being
dispatched by the action (i.e., the instances passed with a signal or the instances used
in an operation invocation). The argument sequence may be dependent on the
recurrence (i.e., the arguments may vary dependent on the actual target).
An action is always executed within the context of an instance, so the target set
expression and the argument expressions are evaluated within an instance.
2cs
OMG-UML V1.3
Common Behavior
March 2000
2-105
2
2.10 Collaborations
2.10.1 Overview
The Collaborations package is a subpackage of the Behavioral Elements package. It
specifies the concepts needed to express how different elements of a model interact
with each other from a structural point of view. The package uses constructs defined in
the Foundation package of UML as well as in the Common Behavior package.
A Collaboration defines a specific way to use the Model Elements in a Model. It
describes how different kinds of Classifiers and their Associations are to be used in
accomplishing a particular task. The Collaboration defines a restriction of, or a
projection of, a collection of Classifiers (i.e., what properties Instances of the
participating Classifiers must have when performing a particular collaboration). The
same Classifier or Association can appear in several Collaborations, and several times
in one Collaboration, each time in a different role. In each appearance it is specified
which of the properties of the Classifier or the Association are needed in that particular
usage. These properties are a subset of all the properties of that Classifier or
Association. A set of Instances and Links conforming to the participants specified in
the Collaboration cooperate when the specified task is performed. Hence, the Classifier
structure implies the possible collaboration structures of conforming Instances. A
Collaboration is a GeneralizableElement. This implies that one Collaboration may
specify a task that is a specialization of another Collaboration’s task. A Collaboration
may be presented in a diagram, either showing the restricted views of the participating
Classifiers and Associations, or by showing Instances and Links conforming to the
restricted views.
Collaborations can be used for expressing several different things, like how use cases
are realized, actor structures of ROOM, OOFRam role models, and collaborations as
defined in Catalysis. They are also used for setting up the context of Interactions and
for defining the mapping between the specification part and the realization part of a
Subsystem.
An Interaction defined in the context of a Collaboration specifies the details of the
communications that should take place in accomplishing a particular task. A
communication is specified with a Message, which defines the roles of the sender and
the receiver Instances, as well as the Action that will cause the communication. The
order of the communications is also specified by the Interaction.
The following sections describe the abstract syntax, well-formedness rules, and
semantics of the Collaborations package.
2.10.2 Abstract Syntax
The abstract syntax for the Collaborations package is expressed in graphic notation in
Figure 2-17.
2-106
OMG-UML V1.3
March 2000
2
Namespace
GeneralizableElement
(fromCore)
(fromCore)
+represented
Operation
Collaboration
*
0..1
Operation
(fromCore)
{xor}
*
0..1
Classifier
+represented (fromCore)
Classifier
1
1..*
*
1
+constrainingElement
1
*
+base
+context
*
ModelElement
Interaction
(fromCore)
*
1
+availableContents *
+/ownedElement
AssociationRole
Association
multiplicity : Multiplicity
(fromCore)
0..1
+interaction
+message
1..*
+communicationConnection
Message
*
0..1
+predecessor
*
*
+base
1
*
+activator
1
0..1
*
+action
*
2..*
+connection
2..* +/connection
*
AssociationEndRole
AssociationEnd
+sender
collaborationMultiplicity : Multiplicity
(fromCore)
0..1
*
*
1
Action
(fromCommon Behavior)
*
1
+receiver
1
ClassifierRole
1..* +/ownedElement
multiplicity : Multiplicity
+base
*
+availableQualifier
Attribute
(fromCore)
+/type 1
*
*
Feature
*
*
*
(fr omCore)
+availableFeature
Figure 2-17 Collaborations
2.10.2.1 AssociationEndRole
An association-end role specifies an endpoint of an association as used in a
collaboration.
In the metamodel an AssociationEndRole is part of an AssociationRole and specifies
the connection of an AssociationRole to a ClassifierRole. It is related to the
AssociationEnd, declaring the corresponding part in an Association.
OMG-UML V1.3
Collaborations
March 2000
2-107
2
Attributes
collaborationMultiplicity
The number of LinkEnds playing this role in a
Collaboration.
Associations
availableQualifier
The subset of Qualifiers that are used in the
Collaboration.
base
The AssociationEnd that the AssociationEndRole is a
projection of.
2.10.2.2 AssociationRole
An association role is a specific usage of an association needed in a collaboration.
In the metamodel an AssociationRole specifies a restricted view of an Association used
in a Collaboration. An AssociationRole is a composition of a set of
AssociationEndRoles corresponding to the AssociationEnds of its base Association.
Attributes
multiplicity
The number of Links playing this role in a Collaboration.
Associations
base
The Association that the AssociationRole is a view of.
2.10.2.3 ClassifierRole
A classifier role is a specific role played by a participant in a collaboration. It specifies
a restricted view of a classifier, defined by what is required in the collaboration.
In the metamodel a ClassifierRole specifies one participant of a Collaboration (i.e., a
role Instances conform to). A ClassifierRole defines a set of Features, which is a subset
of those available in the base Classifiers, as well as a subset of ModelElements
contained in the base Classifiers that are used in the role. The ClassifierRole may be
connected to a set of AssociationRoles via AssociationEndRoles. As ClassifierRole is
a kind of Classifier, a Generalization relationship may be defined between two
ClassifierRoles. The child role is a specialization of the parent (i.e., the Features and
the contents of the child includes the Features and contents of the parent).
Attributes
multiplicity
2-108
The number of Instances playing this role in a
Collaboration.
OMG-UML V1.3
March 2000
2
Associations
availableContents
The subset of ModelElements contained in the base
Classifier, which is used in the Collaboration.
availableFeature
The subset of Features of the base Classifier, which is used
in the Collaboration.
base
The Classifiers that the ClassifierRole is a view of.
2.10.2.4 Collaboration
A collaboration describes how an operation or a classifier, like a use case, is realized
by a set of classifiers and associations used in a specific way. The collaboration defines
a set of roles to be played by instances and links, as well as a set of interactions that
define the communication between the instances when they play the roles.
In the metamodel a Collaboration contains a set of ClassifierRoles and
AssociationRoles, which represent the Classifiers and Associations that take part in the
realization of the associated Classifier or Operation. The Collaboration may also
contain a set of Interactions that are used for describing the behavior performed by
Instances conforming to the participating ClassifierRoles.
A Collaboration specifies a view (restriction, slice, projection) of a model of
Classifiers. The projection describes the required relationships between Instances that
conform to the participating ClassifierRoles, as well as the required subsets of the
Features and contained ModelElements of these Classifiers. Several Collaborations
may describe different projections of the same set of Classifiers. Hence, a Classifier
can be a base for several ClassifierRoles.
A Collaboration may also reference a set of ModelElements, usually Classifiers and
Generalizations, needed for expressing structural requirements, such as Generalizations
required between the Classifiers themselves to fulfill the intent of the Collaboration.
A Collaboration is a GeneralizableElement, which implies that one Collaboration may
specify a task that is a specialization of the task of another Collaboration.
Associations
constrainingElement
The ModelElements that add extra constraints, like
Generalization and Constraint, on the ModelElements
participating in the Collaboration.
interaction
The set of Interactions that are defined within the
Collaboration.
OMG-UML V1.3
Collaborations
March 2000
2-109
2
ownedElement
(Inherited from Namespace) - The set of roles defined by
the Collaboration. These are ClassifierRoles and
AssociationRoles.
representedClassifier
The Classifier the Collaboration is a realization of. (Used if
the Collaboration represents a Classifier.)
representedOperation
The Operation the Collaboration is a realization of. (Used
if the Collaboration represents an Operation.)
2.10.2.5 Interaction
An interaction specifies the communication between instances performing a specific
task. Each interaction is defined in the context of a collaboration.
In the metamodel an Interaction contains a set of Messages specifying the
communication between a set of Instances conforming to the ClassifierRoles of the
owning Collaboration.
Associations
context
The Collaboration that defines the context of the Interaction.
message
The Messages that specify the communication in the Interaction.
2.10.2.6 Message
A message defines a particular communication between instances that is specified in an
interaction.
In the metamodel a Message defines one specific kind of communication in an
Interaction. For example, a communication can be raising a Signal, invoking an
Operation, creating or destroying an Instance. The Message specifies not only the kind
of communication, but also the roles of the sender and the receiver, the dispatching
Action, and the role played by the communication Link. Furthermore, the Message
defines the relative sequencing of Messages within the Interaction.
Associations
2-110
action
The Action that causes a Stimulus to be sent
according to the Message.
activator
The Message that invokes the behavior causing the
dispatching of the current Message.
communicationConnection
The AssociationRole played by the Links used in
the communications specified by the Message.
interaction
The Interaction of which the Message is a part.
OMG-UML V1.3
March 2000
2
receiver
The role of the Instance that receives the
communication and reacts to it.
predecessor
The set of Messages whose completion enables the
execution of the current Message. All of them must
be completed before execution begins.
sender
The role of the Instance that invokes the
communication and possibly receives a response.
2.10.3 Well-Formedness Rules
The following well-formedness rules apply to the Collaborations package.
2.10.3.1 AssociationEndRole
[1] The type of the ClassifierRole must conform to the type of the base AssociationEnd.
self.type.base = self.base.type
or
self.type.base.allParents->includes (self.base.type)
[2] The type must be a kind of ClassifierRole.
self.type.oclIsKindOf (ClassifierRole)
[3] The qualifiers used in the AssociationEndRole must be a subset of those in the base
AssociationEnd.
self.base.qualifier->includesAll (self.availableQualifier)
[4] In a collaboration an association may only be used for traversal if it is allowed by
the base association.
self.isNavigable implies self.base.isNavigable
2.10.3.2 AssociationRole
[1] The AssociationEndRoles must conform to the AssociationEnds of the base
Association.
Sequence{ 1..(self.connection->size) }->forAll (index |
self.connection->at(index).base =
self.base.connection->at(index))
[2] The endpoints must be a kind of AssociationEndRoles.
self.connection->forAll( r | r.oclIsKindOf (AssociationEndRole)
OMG-UML V1.3
Collaborations
March 2000
2-111
2
2.10.3.3 ClassifierRole
[1] The AssociationRoles connected to the ClassifierRole must match a subset of the
Associations connected to the base Classifiers.
self.allAssociations->forAll( ar |
self.base.allAssociations->exists ( a | ar.base = a ) )
[2] The Features and contents of the ClassifierRole must be subsets of those of the base
Classifiers.
self.base.allFeatures->includesAll (self.allAvailableFeatures)
and
self.base.allContents->includesAll (self.allAvailableContents)
[3] A ClassifierRole does not have any Features of its own.
self.allFeatures->isEmpty
Additional operations
[1] The operation allAvailableFeatures results in the set of all Features contained in the
ClassifierRole together with those contained in the parents.
allAvailableFeatures : Set(Feature);
allAvailableFeatures = self.availableFeature->union
(self.parent.allAvailableFeatures)
[2] The operation allAvailableContents results in the set of all ModelElements
contained in the ClassifierRole together with those contained in the parents.
allAvailableContents : Set(ModelElement);
allAvailableContents = self.availableContents->union
(self.parent.allAvailableContents)
2.10.3.4 Collaboration
[1] All Classifiers and Associations of the ClassifierRoles and AssociationRoles in the
Collaboration must be included in the namespace owning the Collaboration.
self.allContents->forAll ( e |
(e.oclIsKindOf (ClassifierRole) implies
self.namespace.allContents->includes (
e.oclAsType(ClassifierRole).base) )
and
(e.oclIsKindOf (AssociationRole) implies
self.namespace.allContents->includes (
e.oclAsType(AssociationRole).base) ))
[2] All the constraining ModelElements must be included in the namespace owning the
Collaboration.
2-112
OMG-UML V1.3
March 2000
2
self.constrainingElement->forAll ( ce |
self.namespace.allContents->includes (ce) )
[3] If a ClassifierRole or an AssociationRole does not have a name then it should be the
only one with a particular base.
self.allContents->forAll ( p |
(p.oclIsKindOf (ClassifierRole) implies
p.name = '' implies
self.allContents->forAll ( q |
q.oclIsKindOf(ClassifierRole) implies
(p.oclAsType(ClassifierRole).base =
q.oclAsType(ClassifierRole).base implies
p = q) ) )
and
(p.oclIsKindOf (AssociationRole) implies
p.name = '' implies
self.allContents->forAll ( q |
q.oclIsKindOf(AssociationRole) implies
(p.oclAsType(AssociationRole).base =
q.oclAsType(AssociationRole).base implies
p = q) ) )
)
[4] A Collaboration may only contain ClassifierRoles and AssociationRoles, and the
Generalizations and the Constraints between them.
self.allContents->forAll ( p |
p.oclIsKindOf (ClassifierRole) or
p.oclIsKindOf (AssociationRole) or
p.oclIsKindOf (Generalization) or
p.oclIsKindOf (Constraint) )
[5] A role with the same name as one of the roles in a parent of the Collaboration must
be a child (a specialization) of that role.
self.contents->forAll ( c |
self.parent.allContents->forall ( p |
c.name = p.name implies c.allParents->include (p) ))
Additional operations
[1] The operation allContents results in the set of all ModelElements contained in the
Collaboration together with those contained in the parents except those that have
been specialized.
allContents : Set(ModelElement);
allContents = self.contents->union (
self.parent.allContents->reject ( e |
self.contents.name->include (e.name) ))
OMG-UML V1.3
Collaborations
March 2000
2-113
2
2.10.3.5 Interaction
[1] All Signals being sent must be included in the namespace owning the Collaboration
in which the Interaction is defined.
self.message->forAll ( m |
m.action.oclIsKindOf(SendAction) implies
self.context.namespace.allContents->includes (
m.action->oclAsType (SendAction).signal) )
2.10.3.6 Message
[1] The sender and the receiver must participate in the Collaboration which defines the
context of the Interaction.
self.interaction.context.ownedElement->includes (self.sender)
and
self.interaction.context.ownedElement->includes (self.receiver)
[2] The predecessors and the activator must be contained in the same Interaction.
self.predecessor->forAll ( p | p.interaction = self.interaction )
and
self.activator->forAll ( a | a.interaction = self.interaction )
[3] The predecessors must have the same activator as the Message.
self.allPredecessors->forAll ( p | p.activator = self.activator )
[4] A Message cannot be the predecessor of itself.
not self.allPredecessors->includes (self)
[5] The communicationLink of the Message must be an AssociationRole in the context
of the Message’s Interaction
self.interaction.context.ownedElement->includes (
self.communicationConnection)
[6] The sender and the receiver roles must be connected by the AssociationRole which
acts as the communication connection.
self.communicationConnection->size > 0 implies
self.communicationConnection.connection->exists (ar |
ar.type = self.sender)
and
self.communicationConnection.connection->exists (ar |
ar.type = self.receiver)
2-114
OMG-UML V1.3
March 2000
2
Additional operations
[1] The operation allPredecessors results in the set of all Messages that precede the
current one.
allPredecessors : Set(Message);
allPredecessors = self.predecessor->union
(self.predecessor.allPredecessors)
2.10.4 Semantics
This section provides a description of the semantics of the elements in the
Collaborations package. It is divided into two parts: Collaboration and Interaction.
2.10.4.1 Collaboration
In the following text the term “instance of a collaboration” denotes the set of instances
that together participate in and perform one specific collaboration.
The purpose of a collaboration is to specify how an operation or a classifier, like a use
case, is realized by a set of classifiers and associations. Together, the classifiers and
their associations participating in the collaboration meet the requirements of the
realized operation or classifier. The collaboration defines a context in which the
behavior of the realized element can be specified in terms of interactions between the
participants of the collaboration. Thus, while a model describes a whole system, a
collaboration is a slice, or a projection, of that model. A collaboration defines a usage
of a subset of the model’s contents.
A collaboration may be presented at two different levels: 1) specification level or 2)
instance level. A diagram presenting the collaboration at the specification level will
show classifier roles and association roles, while a diagram at the instance level will
show instances and links conforming to the roles in the collaboration.
In a collaboration it is specified what properties instances must have to be able to take
part in the collaboration (i.e., each participant specifies the required set of features a
conforming instance must have). Furthermore, the collaboration also states what
associations must exist between the participants, as well as what classifiers a
participant, like a subsystem, must contain. Neither all features nor all contents of the
participating classifiers, and not all associations between these classifiers, are always
required in a particular collaboration. Because of this, a collaboration is not actually
defined in terms of classifiers, but classifier roles. Thus, while a classifier is a complete
description of instances, a classifier role is a description of the features required in a
particular collaboration (i.e., a classifier role is a projection of, or a view of, a
classifier).
The classifier so represented is referred to as the base classifier of that particular
classifier role. In fact since an instance may originate from several classifiers (multiple
classification), a classifier role may have several base classifiers. Several classifier
roles may have the same base classifier, even in the same collaboration, but their
OMG-UML V1.3
Collaborations
March 2000
2-115
2
features and contained elements may be different subsets of the features and contained
elements of the classifier, respectively. These classifier roles then specify different
roles played by (usually different) instances of the same classifier. For example:
•
when the collaboration represents a classifier, its base classifiers can be classifiers
of any kind, like classes or subsystems,
•
while in a collaboration specifying the realization of an operation, the base
classifiers are the operation’s parameter types together with the attribute types and
contained classifiers of the classifier owning the operation.
In a collaboration the association roles define what associations are needed between
the classifiers in this context. Each association role represents the usage of an
association in the collaboration, and it is defined between the classifier roles that
represent the associated classifiers. The represented association is called the base
association of the association role. As the association roles specify a particular usage
of an association in a specific collaboration, all constraints expressed by the
association ends are not necessarily required to be fulfilled in the specified usage. The
multiplicity of the association end may be reduced in the collaboration (i.e., the upper
and the lower bounds of the association end roles may be lower than those of the
corresponding base association end), as it might be that only a subset of the associated
instances participate in the collaboration instance. Similarly, an association may be
traversed in some, but perhaps not all, of the allowed directions in the specific
collaboration (i.e., the isNavigable property of an association end role may be false
even if that property of the base association end is true).
However, the opposite is not true. For example; an association may not be used for
traversal in a direction that is not allowed according to the isNavigable properties of
the association ends. The changeability and ordering of an association end may be
strengthened in an association-end role (i.e., in a particular usage the end is used in a
more restricted way than is defined by the association). Furthermore, if an association
has a collection of qualifiers (see Section 2.5, “Core,” on page 2-12), some of them
may be used in a specific collaboration. An association end role may therefore include
a subset of the qualifiers defined by the corresponding association end of the base
association.
An instance participating in a collaboration instance plays a specific role (i.e.,
conforms to a classifier role) in the collaboration. The number of instances that should
play one specific role in one instance of a collaboration is specified by the classifier
role’s multiplicity. Different instances may play the same role but in different instances
of the collaboration. Since all these instances play the same role, they must all conform
to the classifier role specifying the role. Thus, they are often instances of the base
classifier of the classifier role, or one of its descendants. However, since the only
requirement on conforming instances is that they must offer operations according to
the classifier role, as well as support attribute links corresponding to the attributes
specified by the classifier role, and links corresponding to the association roles
connected to the classifier role, they may be instances of any classifier meeting this
requirement. The instances may, of course, have more attribute links than required by
the classifier role, which for example would be the case if they originate from a
classifier being a child of the base classifier. Moreover, a conforming instance may also
support more attribute links than required if it originates from multiple classifiers.
2-116
OMG-UML V1.3
March 2000
2
Finally, one instance may play different roles in different instances of one
collaboration. In fact, the instance may play multiple roles in the same instance of a
collaboration.
Collaborations may have generalization relationships to other collaborations, which
means that one collaboration specifies a specialization of another collaboration’s task.
This implies that the child collaboration not only contains all the roles of the parent
collaboration but may also contain new roles; the former roles may possibly be
specialized with new features (as classifier roles are also generalizable elements). In
this way it is possible to specialize a collaboration both by adding new roles and by
replacing existing roles with specializations of them. The specialized role (i.e., a role
with a generalization relationship to the replaced role) may both have new features and
replace (override) features of its parent. Note that the base classifiers of the specialized
roles are not necessarily specializations of the base classifiers of the parent’s roles; it is
enough that they contain all the required features.
How the instances conforming to the roles of a collaboration should interact to jointly
perform the behavior of the realized classifier is specified with a set of interactions
(see Section 2.10.4.2, “Interaction,” on page 2-118). The collaboration thus specifies
the context in which these interactions are performed. If the collaboration represents an
operation, the context includes things like parameters, attributes, and classifiers
contained in the classifier owning the operation. The interactions then specify how the
arguments, the attribute values, the instances etc. will cooperate to perform the
behavior specified by the operation. If the collaboration is a specialization of another
collaboration, all communications specified by the parent collaboration are also
included in the child, as the child collaboration includes all the roles of the parent.
However, new messages may be inserted into these sequences of communication, since
the child may include specializations of the parent’s roles as well as new roles. The
child may of course also include completely new interactions that do not exist in the
parent.
Two or more collaborations may be composed in order to refine a superordinate
collaboration. For example, when refining a superordinate use case into a set of
subordinate use cases, the collaborations specifying each of the subordinate use cases
may be composed into one collaboration, which will be a (simple) refinement of the
superordinate collaboration. The composition is done by observing that at least one
instance must participate in both sets of collaborating instances. This instance has to
conform to one classifier role in each collaboration. In the composite collaboration
these two classifier roles are merged into a new one, which will contain all features
included in either of the two original classifier roles. The new classifier role will, of
course, be able to fulfill the requirements of both of the previous collaborations, so the
instance participating in both of the two sets of collaborating instances will conform to
the new classifier role.
A collaboration may be a specification of a template. There will not be any instances
of such a template collaboration, but it can be used for generating ordinary
collaborations, which may be instantiated. Template collaborations may have
parameters that act like placeholders in the template. Usually, these parameters would
be used as base classifiers and associations, but other kinds of model elements can also
OMG-UML V1.3
Collaborations
March 2000
2-117
2
be defined as parameters in the collaboration, like operation or signal. In a
collaboration generated from the template these parameters are refined by other model
elements that make the collaboration instantiable.
Moreover, a collaboration may also contain a set of constraining model elements, like
constraints and generalizations perhaps together with some extra classifiers. These
constraining model elements do not participate in the collaboration themselves, but are
used for expressing the extra constraints on the participating elements in the
collaboration that cannot be covered by the participating roles themselves. For
example, in a template it might be required that the base classifiers of two roles must
have a common ancestor, or one role must be a subclass of another one. These kinds of
requirements cannot be expressed with association roles, as the association roles
express the required links between participating instances. An extra set of model
elements may therefore be included in the collaboration.
2.10.4.2 Interaction
The purpose of an interaction is to specify the communication between a set of
interacting instances performing a specific task. An interaction is defined within a
collaboration (i.e., the collaboration defines the context in which the interaction takes
place). The instances performing the communication specified by the interaction
conform to the classifier roles of the collaboration.
An interaction specifies the sending of a set of stimuli. These are partially ordered
based on which execution thread they belong to. Within each thread the stimuli are sent
in a sequential order while stimuli of different threads may be sent in parallel or in an
arbitrary order.
A message is a specification of a communication. It specifies the roles of the sender
and the receiver instances, as well as which association role specifies the
communication link. The message is connected to an action, which specifies the
statement that, when executed, causes the communication specified by the message to
take place. If the action is a call action or a send action, the signal to be sent or the
operation to be invoked in the communication is stated by the action. The action also
contains the argument expressions that, when executed, will determine the actual
arguments being transmitted in the communication. Moreover, any conditions or
iterations of the communication are also specified by the action. Apart from send
action and call action, the action connected to a message can also be of other kinds,
like create action and destroy action. In these cases, the communication will not raise a
signal or invoke an operation, but cause a new instance to be created or an already
existing instance to be destroyed. In the case of a create action, the receiver specified
by the message is the role to be played by the instance that is created when the action
is performed.
The stimuli being sent when an action is executed conforms to a message, implying
that the sender and receiver instances of the stimuli are in conformance with the sender
and the receiver roles specified by the message. Furthermore, the action dispatching the
stimulus is the same as the action attached to the message. If the action connected to
2-118
OMG-UML V1.3
March 2000
2
the message is a create action or destroy action, the receiver role of the message
specifies the role to be played by the instance, or was played by the instance,
respectively.
The interaction specifies the activator and predecessors of each message. The activator
is the message that invoked the procedure, which in turn invokes the current message.
Every message except the initial message of an interaction thus has an activator. The
predecessors are the set of messages that must be completed before the current
message may be executed. The first message in a procedure of course has no
predecessors. If a message has more than one predecessor, it represents the joining of
two threads of control. If a message has more than one successor (the inverse of
predecessor), it indicates a fork of control into multiple threads. Thus, the predecessors
relationship imposes a partial ordering on the messages within a procedure, whereas
the activator relationship imposes a tree on the activation of operations. Messages may
be executed concurrently subject to the sequential constraints imposed by the
predecessors and activator relationship.
2.10.5 Notes
Pattern is a synonym for a template collaboration that describes the structure of a
design pattern. Design patterns involve many nonstructural aspects, such as heuristics
for their use and lists of advantages and disadvantages. Such aspects are not modeled
by UML and may be represented as text or tables.
2UML Semantics
2.11 Use Cases
2.11.1 Overview
The Use Cases package is a subpackage of the Behavioral Elements package. It
specifies the concepts used for definition of the functionality of an entity like a system.
The package uses constructs defined in the Foundation package of UML as well as in
the Common Behavior package.
The elements in the Use Cases package are primarily used to define the behavior of an
entity, like a system or a subsystem, without specifying its internal structure. The key
elements in this package are UseCase and Actor. Instances of use cases and instances
of actors interact when the services of the entity are used. How a use case is realized in
terms of cooperating objects, defined by classes inside the entity, can be specified with
a Collaboration. A use case of an entity may be refined to a set of use cases of the
elements contained in the entity. How these subordinate use cases interact can also be
expressed in a Collaboration. The specification of the functionality of the system itself
is usually expressed in a separate use-case model (i.e., a Model stereotyped
«useCaseModel»). See Section 4.3, “Stereotypes and Notation,” on page 4-3 for
additional information. The use cases and actors in the use-case model are equivalent
to those of the top-level package.
OMG-UML V1.3
Use Cases
March 2000
2-119
2
The following sections describe the abstract syntax, well-formedness rules, and
semantics of the Use Cases package.
2.11.2 Abstract Syntax
The abstract syntax for the Use Cases package is expressed in graphic notation in
Figure 2-18.
Classif ier
Instance
+classif ier
(from Core)
(from Com m on Behavi or)
1..*
*
UseCaseInstance
ModelElement
(from Core)
UseCase
A ctor
+exten sionPoint
1
+addition
1
1
+base
+extension 1
1
ExtensionPoint
*
location : LocationRef erence
+base
1..*
+exten sionPoint
{ordered}
*
*
+include
+extend
*
Include
*
Extend
*
condition : BooleanExpression
Relationship
(f rom Core)
Figure 2-18 Use Cases
The following metaclasses are contained in the Use Cases package.
2.11.2.1 Actor
An actor defines a coherent set of roles that users of an entity can play when
interacting with the entity. An actor may be considered to play a separate role with
regard to each use case with which it communicates.
2-120
OMG-UML V1.3
March 2000
2
In the metamodel Actor is a subclass of Classifier. An Actor has a Name and may
communicate with a set of UseCases, and, at realization level, with Classifiers taking
part in the realization of these UseCases. An Actor may also have a set of Interfaces,
each describing how other elements may communicate with the Actor.
An Actor may have generalization relationships to other Actors. This means that the
child Actor will be able to play the same roles as the parent Actor (i.e., communicate
with the same set of UseCases) as the parent Actor.
2.11.2.2 Extend
An extend relationship defines that instances of a use case may be augmented with
some additional behavior defined in an extending use case.
In the metamodel an Extend relationship is a directed relationship implying that a
UseCaseInstance of the base UseCase may be augmented with the structure and
behavior defined in the extending UseCase. The relationship consists of a condition,
which must be fulfilled if the extension is to take place, and a sequence of references
to extension points in the base UseCase where the additional behavior fragments are to
be inserted.
Attributes
condition
An expression specifying the condition that must be
fulfilled if the extension is to take place.
Associations
base
The UseCase to be extended.
extension
The UseCase specifying the extending behavior.
extensionPoint
A sequence of extension-points in the base UseCase
specifying where the additions are to be inserted.
2.11.2.3 ExtensionPoint
An extension point references one or a collection of locations in a use case where the
use case may be extended.
In the metamodel an ExtensionPoint has a name and one or a collection of descriptions
of locations in the behavior of the owning use case, where a piece of behavior may be
inserted into the owning use case.
Attributes
location
OMG-UML V1.3
A reference to one location or a collection of locations
where an extension to the behavior of the use case may be
inserted.
Use Cases
March 2000
2-121
2
2.11.2.4 Include
An include relationship defines that a use case contains the behavior defined in another
use case.
In the metamodel an Include relationship is a directed relationship between two
UseCases implying that the behavior in the addition UseCase is inserted into the
behavior of the base UseCase. The base UseCase may only depend on the result of
performing the behavior defined in the addition UseCase, but not on the structure (i.e.,
on the existence of specific attributes and operations) of the addition UseCase.
Associations
addition
The UseCase specifying the additional behavior.
base
The UseCase that is to include the addition.
2.11.2.5 UseCase
The use case construct is used to define the behavior of a system or other semantic
entity without revealing the entity’s internal structure. Each use case specifies a
sequence of actions, including variants, that the entity can perform interacting with
actors of the entity.
In the metamodel UseCase is a subclass of Classifier, specifying the sequences of
actions performed by an instance of the UseCase. The actions include changes of the
state and communications with the environment of the UseCase. The sequences can be
described using many different techniques, like Operation and Methods,
ActivityGraphs, and StateMachines.
There may be Associations between UseCases and the Actors of the UseCases. Such
an Association states that an instance of the UseCase and a user playing one of the
roles of the Actor communicate. UseCases may be related to other UseCases by
Extend, Include, and Generalization relationships. An Include relationship means that a
UseCase includes the behavior described in another UseCase, while an Extend
relationship implies that a UseCase may extend the behavior described in another
UseCase, ruled by a condition. Generalization between UseCases means that the child
is a more specific form of the parent. The child inherits all Features and Associations
of the parent, and may add new Features and Associations.
The realization of a UseCase may be specified by a set of Collaborations (i.e., the
Collaborations define how Instances in the system interact to perform the sequences of
the UseCase).
2-122
OMG-UML V1.3
March 2000
2
Associations
extend
A collection of Extend relationships to UseCases that the
UseCase extends.
extensionPoint
Defines a collection of ExtensionPoints where the UseCase
may be extended.
include
A collection of Include relationships to UseCases that the
UseCase includes.
2.11.2.6 UseCaseInstance
A use case instance is the performance of a sequence of actions specified in a use case.
In the metamodel UseCaseInstance is a subclass of Instance. Each method performed
by a UseCaseInstance is performed as an atomic transaction (i.e., it is not interrupted
by any other UseCaseInstance).
An explicitly described UseCaseInstance is called a scenario.
2.11.3 Well-FormednessRules
The following well-formedness rules apply to the Use Cases package.
2.11.3.1 Actor
[1] Actors can only have Associations to UseCases, Subsystems, and Classes and these
Associations are binary.
self.associations->forAll(a |
a.connection->size = 2 and
a.allConnections->exists(r | r.type.oclIsKindOf(Actor)) and
a.allConnections->exists(r |
r.type.oclIsKindOf(UseCase) or
r.type.oclIsKindOf(Subsystem) or
r.type.oclIsKindOf(Class)))
[2] Actors cannot contain any Classifiers.
self.contents->isEmpty
2.11.3.2 Extend
[1] The referenced ExtensionPoints must be included in set of ExtensionPoint in the
target UseCase.
self.base.allExtensionPoints -> includesAll (self.location)
OMG-UML V1.3
Use Cases
March 2000
2-123
2
2.11.3.3 ExtensionPoint
[1] The name must not be the empty string.
not self.name = ‘’
2.11.3.4 Include
No extra well-formedness rules.
2.11.3.5 UseCase
[1] UseCases can only have binary Associations.
self.associations->forAll(a | a.connection->size = 2)
[2] UseCases can not have Associations to UseCases specifying the same entity.
self.associations->forAll(a |
a.allConnections->forAll(s, o|
(s.type.specificationPath->isEmpty and
o.type.specificationPath->isEmpty )
or
(not s.type.specificationPath->includesAll(
o.type.specificationPath) and
not o.type.specificationPath->includesAll(
s.type.specificationPath))
))
[3] A UseCase cannot contain any Classifiers.
self.contents->isEmpty
[4] The names of the ExtensionPoints must be unique within the UseCase.
self.allExtensionPoints -> forAll (x, y |
x.name = y.name implies x = y )
Additional operations
[1] The operation specificationPath results in a set containing all surrounding
Namespaces that are not instances of Package.
specificationPath : Set(Namespace)
specificationPath = self.allSurroundingNamespaces->select(n |
n.oclIsKindOf(Subsystem) or n.oclIsKindOf(Class))
[2] The operation allExtensionPoints results in a set containing all ExtensionPoints of
the UseCase.
allExtensionPoints : Set(ExtensionPoint)
allExtensionPoints = self.allSupertypes.extensionPoint -> union (
self.extensionPoint)
2-124
OMG-UML V1.3
March 2000
2
2.11.3.6 UseCaseInstance
[1] The Classifier of a UseCaseInstance must be a UseCase.
self.classifier->forAll ( c | c.oclIsKindOf (UseCase) )
2.11.4 Semantics
This section provides a description of the semantics of the elements in the Use Cases
package, and its relationship to other elements in the Behavioral Elements package.
2.11.4.1 Actor
Namespace
Association
*
Interface
*
*
AssociationEnd
*
1
Actor
Generalization
*
Figure 2-19 Actor Illustration
Actors model parties outside an entity (such as a system, a subsystem, or a class),
which interact with the entity. Each actor defines a coherent set of roles users of the
entity can play when interacting with the entity. Every time a specific user interacts
with the entity, it is playing one such role. An instance of an actor is a specific user
interacting with the entity. Any instance that conforms to an actor can act as an
instance of the actor. If the entity is a system, the actors represent both human users
and other systems. Some of the actors of a lower level subsystem or a class may
coincide with actors of the system, while others appear inside the system. The roles
defined by the latter kind of actors are played by instances of classifiers in other
packages or subsystems. In the latter case the classifier may belong to either the
specification part or the realization part of the subsystem.
Since an actor is outside the entity, its internal structure is not defined, but only its
external view as seen from the entity. Actor instances communicate with the entity by
sending and receiving message instances to and from use case instances and, at
realization level, to and from objects. This is expressed by associations between the
actor and the use case or the class. Furthermore, interfaces can be connected to an
actor, defining how other elements may interact with the actor.
Two or more actors may have commonalities (i.e., communicate with the same set of
use cases in the same way). The commonality is expressed with generalizations to
another (possibly abstract) actor, which models the common role(s). An instance of a
child can always be used where an instance of the parent is expected.
OMG-UML V1.3
Use Cases
March 2000
2-125
2
2.11.4.2 UseCase
Attribute
Operation
*
Namespace
Interface
*
*
*
UseCase
UseCaseInstance
*
Association
*
AssociationEnd
*
*
Include
Extend
*
*
ExtensionPoint
Figure 2-20 UseCase Illustration
In the following text the term “entity” is used when referring to a system, a subsystem,
or a class and the terms model element and element denote a subsystem or a class.
The purpose of a use case is to define a piece of behavior of an entity without revealing
the internal structure of the entity. The entity specified in this way may be a system or
any model element that contains behavior, like a subsystem or a class, in a model of a
system. Each use case specifies a service the entity provides to its users (i.e., a specific
way of using the entity). The service, which is initiated by a user, is a complete
sequence. This implies that after its performance the entity will in general be in a state
in which the sequence can be initiated again. A use case describes the interactions
between the users and the entity as well as the responses performed by the entity, as
these responses are perceived from the outside of the entity. A use case also includes
possible variants of this sequence (e.g., alternative sequences exceptional behavior,
error handling, etc.). The complete set of use cases specifies all different ways to use
the entity (i.e., all behavior of the entity is expressed by its use cases). These use cases
can be grouped into packages for convenience.
From a pragmatic point of view, use cases can be used both for specification of the
(external) requirements on an entity and for specification of the functionality offered
by an (already realized) entity. Moreover, the use cases also indirectly state the
requirements the specified entity poses on its users (i.e., how they should interact so
the entity will be able to perform its services).
Since users of use cases always are external to the specified entity, they are represented
by actors of the entity. Thus, if the specified entity is a system or a subsystem at the
topmost level, the users of its use cases are modeled by the actors of the system. Those
actors of a lower level subsystem or a class that are internal to the system are often not
explicitly defined. Instead, the use cases relate directly to model elements conforming
to these implicit actors (i.e., whose instances play the roles of these actors in
interaction with the use cases). These model elements are contained in other packages
2-126
OMG-UML V1.3
March 2000
2
or subsystems, where in the subsystem case they may be contained in the specification
part or the realization part. The distinction between actor and conforming element like
this is often neglected; thus, they are both referred to by the term actor.
There may be associations between use cases and actors, meaning that the instances of
the use case and the actor communicate with each other. One actor may communicate
with several use cases of an entity (i.e., the actor may request several services of the
entity) and one use case communicates with one or several actors when providing its
service. Note that two use cases specifying the same entity cannot communicate with
each other since each of them individually describes a complete usage of the entity.
Moreover, use cases always use signals when communicating with actors outside the
system, while they may use other communication semantics when communicating with
elements inside the system.
The interaction between actors and use cases can be defined with interfaces. An
interface of a use case defines a subset of the entire interaction defined in the use case.
Different interfaces offered by the same use case need not be disjoint.
A use case can be described in plain text, using operations and methods together with
attributes, in activity graphs, by a state machine, or by other behavior description
techniques, such as preconditions and postconditions. The interaction between a use
case and its actors can also be presented in collaboration diagrams for specification of
the interactions between the entity containing the use case and the entity’s
environment.
A use-case instance is a performance of a use case, initiated by a message instance
from an instance of an actor. As a response, the use-case instance performs a sequence
of actions as specified by the use case, like communicating with actor instances (not
necessarily only the initiating one). The actor instances may send new message
instances to the use-case instance and the interaction continues until the instance has
responded to all input and does not expect any more input, when it ends. Each method
performed by a use-case instance is performed as an atomic transaction, i.e. it is not
interrupted by any other use-case instance.
In the case where subsystems are used to model the system’s containment hierarchy,
the system can be specified with use cases at all levels, as use cases can be used to
specify subsystems and classes. A use case specifying one model element is then
refined into a set of smaller use cases, each specifying a service of a model element
contained in the first one. The use case of the whole may be referred to as
superordinate to its refining use cases, which, correspondingly, may be called
subordinate in relation to the first one. The functionality specified by each
superordinate use case is completely traceable to its subordinate use cases. Note,
though, that the structure of the container element is not revealed by the use cases,
since they only specify the functionality offered by the element. The subordinate use
cases of a specific superordinate use case cooperate to perform the superordinate one.
Their cooperation is specified by collaborations and may be presented in collaboration
diagrams. A specific subordinate use case may appear in several collaborations (i.e.,
play a role in the performances of several superordinate use cases). In each such
collaboration, other roles specify the cooperation with this specific subordinate use
case. These roles are the roles played by the actors of that subordinate use case. Some
of these actors may be the actors of the superordinate use case, as each actor of a
OMG-UML V1.3
Use Cases
March 2000
2-127
2
superordinate use case appears as an actor of at least one of the subordinate use cases.
Furthermore, the interfaces of a superordinate use case are traceable to the interfaces of
those subordinate use cases that communicate with actors that are also actors of the
superordinate use case.
The environment of subordinate use cases is the model element containing the model
elements specified by these use cases. Thus, from a bottom-up perspective, an
interaction between subordinate use cases results in a superordinate use case, i.e. a use
case of the container element.
Use cases of classes are mapped onto operations of the classes, since a service of a
class in essence is the invocation of the operations of the class. Some use cases may
consist of the application of only one operation, while others may involve a set of
operations, usually in a well-defined sequence. One operation may be needed in several
of the services of the class, and will therefore appear in several use cases of the class.
The realization of a use case depends on the kind of model element it specifies. For
example, since the use cases of a class are specified by means of operations of the
class, they are realized by the corresponding methods; while the use cases of a
subsystem are realized by the elements contained in the subsystem. Since a subsystem
does not have any behavior of its own, all services offered by a subsystem must be a
composition of services offered by elements contained in the subsystem (i.e.,
eventually by classes). These elements will collaborate and jointly perform the
behavior of the specified use case. One or a set of collaborations describes how the
realization of a use case is made. Hence, collaborations are used for specification of
both the refinement and the realization of a use case in terms of subordinate use cases.
The usage of use cases at all levels implies not only a uniform way of specification of
functionality at all levels, but also a powerful technique for tracing requirements at the
system package level down to operations of the classes. The propagation of the effect
of modifying a single operation at the class level all the way up to the behavior of the
system package is managed in the same way.
Commonalities between use cases can be expressed in three different ways: with 1)
generalization, 2) include, and 3) extend relationships. A generalization relationship
between use cases implies that the child use case contains all the attributes, sequences
of behavior, and extension points defined in the parent use case, and participates in all
relationships of the parent use case. The child use case may also define new behavior
sequences, as well as add additional behavior into and specialize existing behavior of
the inherited ones. One use case may have several parent use cases and one use case
may be a parent to several other use cases.
An include relationship between two use cases means that the behavior defined in the
target use case is included at one location in the sequence of behavior performed by an
instance of the base use case. When a use-case instance reaches the location where the
behavior of another use case is to be included, it performs all the behavior described by
the included use case and then continues according to its original use case. This means
that although there may be several paths through the included use case due to
conditional statements, for example, all of them must end in such a way that the usecase instance can continue according to the original use case. One use case may be
included in several other use cases and one use case may include several other use
2-128
OMG-UML V1.3
March 2000
2
cases. The included use case may not be dependent on the base use case. In that sense
the included use case represents encapsulated behavior which may easily be reused in
several use cases. Moreover, the base use case may only be dependent on the results of
performing the included behavior and not on structure, like Attributes and
Associations, of the included use case.
An extend relationship defines that a use case may be augmented with some additional
behavior defined in another use case. One use case may extend several use cases and
one use case may be extended by several use cases. The base use case may not be
dependent of the addition of the extending use case. The extend relationship contains a
condition and references a sequence of extension points in the target use case. The
condition must be satisfied if the extension is to take place, and the references to the
extension points define the locations in the base use case where the additions are to be
made. Once an instance of a use case is to perform some behavior referenced by an
extension point of its use case, and the extension point is the first one in an extends
relationship’s sequence of references to extension points, the condition of the
relationship is evaluated.
If the condition is fulfilled, the sequence obeyed by the use-case instance is extended
to include the sequence of the extending use case. The different parts of the extending
use case are inserted at the locations defined by the sequence of extension points in the
relationship, one part at each referenced extension point. Note that the condition is
only evaluated once at the first referenced extension point, and if it is fulfilled all of the
extending use case is inserted in the original sequence. An extension point may define
one location or a set of locations in the behavior defined by the use case. However, if
an extend relationship references a sequence of extension points, only the first one may
define a set of locations. All other ones must define exactly one location each. Which
of the locations of the first extension point to use is determined by where the extension
is triggered. This is not possible for the other ones. In other words, once the extension
has been triggered, all locations where to add the different part of the extending use
case must be uniquely defined. Hence, all extension points, except for the first one,
referenced by an extend relationship must define single locations. The description of
the location references by an extension point can be made in several different ways,
like textual description of where in the behavior the addition should be made, pre-or
post conditions, or using the name of a state in a state machine.
Note that the three kinds of relationships described above can only exist between use
cases specifying the same entity. The reason for this is that the use cases of one entity
specify the behavior of that entity alone (i.e., all use-case instances are performed
entirely within that entity). If a use case would have a generalization, include, or
extend relationship to a use case of another entity, the resulting use-case instances
would involve both entities, resulting in a contradiction. However, generalization,
include, and extend relationships can be defined from use cases specifying one entity
to use cases of another one if the first entity has a generalization to the second one,
since the contents of both entities are available in the first entity. However, the contents
of the second entity must be at least protected, so they become available inside the
child entity.
OMG-UML V1.3
Use Cases
March 2000
2-129
2
As a first step when developing a system, the dynamic requirements of the system as a
whole can be expressed with use cases. The entity being specified is then the whole
system, and the result is a separate model called a use-case model (i.e., a model with
the stereotype «useCaseModel»). Next, the realization of the requirements is expressed
with a model containing a system package, probably a package hierarchy, and at the
bottom a set of classes. If the system package (i.e., a package with the stereotype
«topLevelPackage») is a subsystem, its abstract behavior is naturally the same as that
of the system. Thus, if use cases are used for the specification part of the system
package, these use cases are equivalent to those in the use-case model of the system
(i.e., they express the same behavior but with possibly a slightly different structure). In
other words, all services specified by the use cases of a system package, and only
those, define the services offered by the system. Furthermore, if several models are
used for modeling the realization of a system (e.g., an analysis model and a design
model) the set of use cases of all system packages and the use cases of the use-case
model must be equivalent.
2.11.5 Notes
A pragmatic rule of use when defining use cases is that each use case should yield
some kind of observable result of value to (at least) one of its actors. This ensures that
the use cases are complete specifications and not just fragments.
2L Semantics
2.12 State Machines
2.12.1 Overview
The State Machine package is a subpackage of the Behavioral Elements package. It
specifies a set of concepts that can be used for modeling discrete behavior through
finite state-transition systems. These concepts are based on concepts defined in the
Foundation package as well as concepts defined in the Common Behavior package.
This enables integration with the other subpackages in Behavioral Elements.
The state machine formalism described in this section is an object-based variant of
Harel statecharts. It incorporates several concepts similar to those defined in
ROOMcharts, a variant of statechart defined in the ROOM modeling language. The
major differences relative to classical Harel statecharts are described on
Section 2.12.5.4, “Comparison to classical statecharts,” on page 2-159.
State machines can be used to specify behavior of various elements that are being
modeled. For example, they can be used to model the behavior of individual entities
(e.g., class instances) or to define the interactions (e.g., collaborations) between
entities.
In addition, the state machine formalism provides the semantic foundation for activity
graphs. This means that activity graphs are simply a special form of state machines.
2-130
OMG-UML V1.3
March 2000
2
The following sections describe the abstract syntax, well-formedness rules, and
semantics of the State Machines package. Activity graphs are described in section
Section 2.13, “Activity Graphs,” on page 2-160.
2.12.2 Abstract Syntax
The abstract syntax for state machines is expressed graphically in Figure 2-21, which
covers all the basic concepts of state machine graphs such as states and transitions.
Figure 2-22 on page 2-132 describes the abstract syntax of events that can trigger state
machine behavior.
The specifications of the concepts defined in these two diagrams are listed in
alphabetical order following the figures.
ModelElement
(from Core)
+context
0..1
+behavior
*
StateMachine
Guard
expression : BooleanExpression
1
0..1
+submachine
0..1
+subvertex
Transition
*
+incoming
*
*
1
*
1
+top
0..1
+internal
0..1
+effect
0..1
0..1
State
S ynchState
1
+transition
+outgoing
1
+target
0..*
0..1
*
+sou rce
StateVertex
+guard
0..1
Action
+en try (from Common Behavior)
bound : UnlimitedInteger
0..1
0..1
Pseudostate
kind : PseudostateKind
+exit
StubState
0..1
referenceState : Name
0..1
0..1
+doActivity
0..*
+deferra bleEvent
+trigger
Event
0..*
+container
CompositeState
SimpleState
FinalState
isConcurent : Boolean
0..1
SubmachineS tate
*
Figure 2-21 State Machines - Main
OMG-UML V1.3
State Machines
March 2000
2-131
2
ModelElement
(from Core)
{ordered}
Parameter
+parameter
Event
(from Core)
*
SignalEvent
0..1
TimeEvent
CallEvent
w hen : TimeExpr ession
+occur rence
+signal
*
+occurrence
*
1
+operation
1
Signal
(from Common Behavior)
ChangeEvent
changeExpression : BooleanExpression
Operation
(from Core)
Figure 2-22 State Machines - Events
2.12.2.1 CallEvent
A call event represents the reception of a request to synchronously invoke a specific
operation. (Note that a call event instance is distinct from the call action that caused it.)
The expected result is the execution of a sequence of actions which characterize the
operation behavior at a particular state.
Two special cases of CallEvent are the object creation event and the object destruction
event.
Associations
operation
2-132
Designates the operation whose invocation raised the call event
OMG-UML V1.3
March 2000
2
Stereotypes
«create»
Abstraction
Create is a stereotyped call event denoting that the instance
receiving that event has just been created. For state machines, it
triggers the initial transition at the topmost level of the state
machine (and is the only kind of trigger that may be applied to
an initial transition).
«destroy»
Abstraction
Destroy is a stereotyped call event denoting that the instance
receiving the event is being destroyed.
2.12.2.2 ChangeEvent
A change event models an event that occurs when an explicit boolean expression
becomes true as a result of a change in value of one or more attributes or associations.
A change event is raised implicitly and is not the result of some explicit change event
action.
The change event should not be confused with a guard. A guard is only evaluated at the
time an event is dispatched whereas, conceptually, the boolean expression associated
with a change event is evaluated continuously until it becomes true. The event that is
generated remains until it is consumed even if the boolean expression changes to false
after that.
Attributes
changeExpression
The boolean expression that specifies the change event.
2.12.2.3 CompositeState
A composite state is a state that contains other state vertices (states, pseudostates, etc.).
The association between the composite and the contained vertices is a composition
association. Hence, a state vertex can be a part of at most one composite state.
Any state enclosed within a composite state is called a substate of that composite state.
It is called a direct substate when it is not contained by any other state; otherwise, it is
referred to as a transitively nested substate.
CompositeState is a child of State.
Associations
subvertex
OMG-UML V1.3
The set of state vertices that are owned by this composite state.
State Machines
March 2000
2-133
2
Attributes
isConcurrent
A boolean value that specifies the decomposition semantics. If
this attribute is true, then the composite state is decomposed
directly into two or more orthogonal conjunctive components
called regions (usually associated with concurrent execution). If
this attribute is false, then there are no direct orthogonal
components in the composite.
isRegion
A derived boolean value that indicates whether a
CompositeState is a substate of a concurrent state. If it is true,
then this composite state is a direct substate of a concurrent
state.
2.12.2.4 Event
An event is a specification of a type of observable occurrence. The occurrence that
generates an event instance is assumed to take place at an instant in time with no
duration.
Strictly speaking, the term “event” is used to refer to the type and not to an instance of
the type. However, on occasion, where the meaning is clear from the context, the term
is also used to refer to an event instance.
Event is a child of ModelElement.
Associations
parameter
The list of parameters defined by the event.
2.12.2.5 FinalState
A special kind of state signifying that the enclosing composite state is completed. If
the enclosing state is the top state, then it means that the entire state machine has
completed.
A final state cannot have any outgoing transitions.
FinalState is a child of State.
2.12.2.6 Guard
A guard is a boolean expression that is attached to a transition as a fine-grained control
over its firing. The guard is evaluated when an event instance is dispatched by the state
machine. If the guard is true at that time, the transition is enabled, otherwise, it is
disabled.
Guards should be pure expressions without side effects. Guard expressions with side
effects are ill formed.
2-134
OMG-UML V1.3
March 2000
2
Guard is a child of ModelElement.
Attributes
expression
The boolean expression that specifies the guard.
2.12.2.7 PseudoState
A pseudostate is an abstraction that encompasses different types of transient vertices in
the state machine graph. They are used, typically, to connect multiple transitions into
more complex state transitions paths. For example, by combining a transition entering
a fork pseudostate with a set of transitions exiting the fork pseudostate, we get a
compound transition that leads to a set of concurrent target states.
The following pseudostate kinds are defined:
•
An initial pseudostate represents a default vertex that is the source for a single
transition to the default state of a composite state. There can be at most one initial
vertex in a composite state.
•
deepHistory is used as a shorthand notation that represents the most recent active
configuration of the composite state that directly contains this pseudostate; that is,
the state configuration that was active when the composite state was last exited. A
composite state can have at most one deep history vertex. A transition may originate
from the history connector to the default deep history state. This transition is taken
in case the composite state had never been active before.
•
shallowHistory is a shorthand notation that represents the most recent active
substate of its containing state (but not the substates of that substate). A composite
state can have at most one shallow history vertex. A transition coming into the
shallow history vertex is equivalent to a transition coming into the most recent
active substate of a state. A transition may originate from the history connector to
the initial shallow history state. This transition is taken in case the composite state
had never been active before.
•
join vertices serve to merge several transitions emanating from source vertices in
different orthogonal regions. The transitions entering a join vertex cannot have
guards.
•
fork vertices serve to split an incoming transition into two or more transitions
terminating on orthogonal target vertices. The segments outgoing from a fork vertex
must not have guards.
•
junction vertices are semantic-free vertices that are used to chain together multiple
transitions. They are used to construct compound transition paths between states.
For example, a junction can be used to converge multiple incoming transitions into
a single outgoing transition representing a shared transition path (this is known as a
merge). Conversely, they can be used to split an incoming transition into multiple
outgoing transition segments with different guard conditions. This realizes a static
conditional branch. (In the latter case, outgoing transitions whose guard conditions
evaluate to false are disabled. A predefined guard denoted “else” may be defined for
OMG-UML V1.3
State Machines
March 2000
2-135
2
at most one outgoing transition. This transition is enabled if all the guards labeling
the other transitions are false.) Static conditional branches are distinct from
dynamic conditional branches that are realized by choice vertices (described below).
•
choice vertices which, when reached, result in the dynamic evaluation of the guards
of its outgoing transitions. This realizes a dynamic conditional branch. It allows
splitting of transitions into multiple outgoing paths such that the decision on which
path to take may be a function of the results of prior actions performed in the same
run-to-completion step. If more than one of the guards evaluates to true, an arbitrary
one is selected. If none of the guards evaluates to true, then the model is considered
ill formed. (To avoid this, it is recommended to define one outgoing transition with
the predefined “else” guard for every choice vertex.) Choice vertices should be
distinguished from static branch points that are based on junction points (described
above).
PseudoState is a child of StateVertex.
Attributes
kind
Determines the precise type of the PseudoState and can be
one of initial, deepHistory, shallowHistory, join, fork,
junction, or choice.
2.12.2.8 SignalEvent
A signal event represents the reception of a particular (asynchronous) signal. A signal
event instance should not be confused with the action (e.g., send action) that generated
it.
SignalEvent is a child of Event.
Associations
signal
The specific signal that is associated with this event.
2.12.2.9 SimpleState
A SimpleState is a state that does not have substates.
It is a child of State.
2.12.2.10 State
A state is an abstract metaclass that models a situation during which some (usually
implicit) invariant condition holds. The invariant may represent a static situation such
as an object waiting for some external event to occur. However, it can also model
dynamic conditions such as the process of performing some activity (i.e., the model
element under consideration enters the state when the activity commences and leaves it
as soon as the activity is completed).
2-136
OMG-UML V1.3
March 2000
2
State is a child of StateVertex.
Associations
deferrableEvent
A list of events that are candidates to be retained by the state
machine if they trigger no transitions out of the state (not
consumed). A deferred event is retained until the statemachine
reaches a state configuration where it is no longer deferred.
entry
An optional action that is executed whenever this state is
entered regardless of the transition taken to reach the state. If
defined, entry actions are always executed to completion prior
to any internal activity or transitions performed within the state.
exit
An optional action that is executed whenever this state is exited
regardless of which transition was taken out of the state. If
defined, entry actions are always executed to completion only
after all internal activities and transition actions have completed
execution.
doActivity
An optional activity that is executed while being in the state.
The execution starts when this state is entered, and stops either
by itself, or when the state is exited, whichever comes first.
internalTransition
A set of transitions that, if triggered, occur without exiting or
entering this state. Thus, they do not cause a state change. This
means that the entry or exit condition of the State will not be
invoked. These transitions can be taken even if the state
machine is in one or more regions nested within this state.
2.12.2.11 StateMachine
A state machine is a specification that describes all possible behaviors of some
dynamic model element. Behavior is modeled as a traversal of a graph of state nodes
interconnected by one or more joined transition arcs that are triggered by the
dispatching of series of event instances. During this traversal, the state machine
executes a series of actions associated with various elements of the state machine.
StateMachine has a composition relationship to State, which represents the top-level
state, and a set of transitions. This means that a state machine owns its transitions and
its top state. All remaining states are transitively owned through the state containment
hierarchy rooted in the top state. The association to ModelElement provides the context
of the state machine. A common case of the context relation is where a state machine
is used to specify the lifecycle of a classifier.
OMG-UML V1.3
State Machines
March 2000
2-137
2
Associations
context
An association to the model element whose behavior is
specified by this state machine. A model element may have
more than one state machine (although one is sufficient for
most purposes). Each state machine is owned by exactly one
model element.
top
Designates the top-level state that is the root of the state
containment hierarchy. There is exactly one state in every state
machine that is the top state.
transition
The set of transitions owned by the state machine. Note that
internal transitions are owned by their containing states and not
by the state machine.
2.12.2.12 StateVertex
A StateVertex is an abstraction of a node in a statechart graph. In general, it can be the
source or destination of any number of transitions.
StateVertex is a child of ModelElement.
Associations
outgoing
Specifies the transitions departing from the vertex.
incoming
Specifies the transitions entering the vertex.
container
The composite state that contains this state vertex.
2.12.2.13 StubState
A stub state can appear within a submachine state and represents an actual subvertex
contained within the referenced state machine. It can serve as a source or destination of
transitions that connect a state vertex in the containing state machine with a subvertex
in the referenced state machine.
StubState is a child of State.
Associations
referenceState
2-138
Designates the referenced state as a pathname (a name formed
by the concatenation of the name of a state and the successive
names of all states that contain it, up to the top state).
OMG-UML V1.3
March 2000
2
2.12.2.14 SubmachineState
A submachine state is a syntactical convenience that facilitates reuse and modularity. It
is a shorthand that implies a macro-like expansion by another state machine and is
semantically equivalent to a composite state. The state machine that is inserted is
called the referenced state machine while the state machine that contains the
submachine state is called the containing state machine. The same state machine may
be referenced more than once in the context of a single containing state machine. In
effect, a submachine state represents a “call” to a state machine “subroutine” with one
or more entry and exit points.
The entry and exit points are specified by stub states.
SubmachineState is a child of State.
Associations
submachine
The state machine that is to be substituted in place of the
submachine state.
2.12.2.15 SynchState
A synch state is a vertex used for synchronizing the concurrent regions of a state
machine. It is different from a state in the sense that it is not mapped to a boolean
value (active, not active), but an integer. A synch sate is used in conjunction with forks
and joins to insure that one region leaves a particular state or states before another
region can enter a particular state or states.
SynchState is a child of StateVertex.
Attributes
bound
A positive integer or the value “unlimited” specifying the
maximal count of the SynchState. The count is the difference
between the number of times the incoming and outgoing
transitions of the synch state are fired
2.12.2.16 TimeEvent
A TimeEvent models the expiration of a specific deadline. Note that the time of
occurrence of a time event instance (i.e., the expiration of the deadline) is the same as
the time of its reception. However, it is important to note that there may be a variable
delay between the time of reception and the time of dispatching (e.g., due to queueing
delays).
OMG-UML V1.3
State Machines
March 2000
2-139
2
The expression specifying the deadline may be relative or absolute. If the time
expression is relative and no explicit starting time is defined, then it is relative to the
time of entry into the source state of the transition triggered by the event. In the latter
case, the time event instance is generated only if the state machine is still in that state
when the deadline expires.
Attributes
when
Specifies the corresponding time deadline
2.12.2.17 Transition
A transition is a directed relationship between a source state vertex and a target state
vertex. It may be part of a compound transition, which takes the state machine from
one state configuration to another, representing the complete response of the state
machine to a particular event instance.
Transition is a child of ModelElement.
Associations
trigger
Specifies the event that fires the transition. There can be at most
one trigger per transition
guard
A boolean predicate that provides a fine-grained control over
the firing of the transition. It must be true for the transition to
be fired. It is evaluated at the time the event is dispatched.
There can be at most one guard per transition.
effect
Specifies an optional action to be performed when the transition
fires.
source
Designates the originating state vertex (state or pseudostate) of
the transition.
target
Designates the target state vertex that is reached when the
transition is taken.
2.12.3 Well-FormednessRules
The following well-formedness rules apply to the State Machines package.
2.12.3.1 CompositeState
[1] A composite state can have at most one initial vertex.
self.subvertex->select (v | v.oclIsKindOf(Pseudostate))->
select(p : Pseudostate | p.kind = #initial)->size <= 1
[2] A composite state can have at most one deep history vertex.
2-140
OMG-UML V1.3
March 2000
2
self.subvertex->select (v | v.oclIsKindOf(Pseudostate))->
select(p : Pseudostate | p.kind = #deepHistory)->size <= 1
[3] A composite state can have at most one shallow history vertex.
self.subvertex->select(v | v.oclIsKindOf(Pseudostate))->
select(p : Pseudostate | p.kind = #shallowHistory)->size <= 1
[4] There have to be at least two composite substates in a concurrent composite state.
(self.isConcurrent) implies
(self.subvertex->select
(v | v.oclIsKindOf(CompositeState))->size >= 2)
[5] A concurrent state can only have composite states as substates.
(self.isConcurrent) implies
self.subvertex->forAll(s | (s.oclIsKindOf(CompositeState))
[6] The substates of a composite state are part of only that composite state.
self.subvertex->forAll(s | (s.container->size = 1) and
(s.container = self))
2.12.3.2 FinalState
[1] A final state cannot have any outgoing transitions.
self.outgoing->size = 0
2.12.3.3 Guard
[1] A guard should not have side effects.
self.transition->stateMachine->notEmpty implies
post: (self.transition.stateMachine->context =
self.transition.stateMachine->context@pre)
2.12.3.4 PseudoState
[1] An initial vertex can have at most one outgoing transition and no incoming
transitions.
(self.kind = #initial) implies
((self.outgoing->size <= 1) and (self.incoming->isEmpty))
[2] History vertices can have at most one outgoing transition.
((self.kind = #deepHistory) or (self.kind = #shallowHistory))
implies
(self.outgoing->size <= 1)
OMG-UML V1.3
State Machines
March 2000
2-141
2
[3] A join vertex must have at least two incoming transitions and exactly one outgoing
transition.
(self.kind = #join) implies
((self.outgoing->size = 1) and (self.incoming->size >= 2))
[4] A fork vertex must have at least two outgoing transitions and exactly one incoming
transition.
(self.kind = #fork) implies
((self.incoming->size = 1) and (self.outgoing->size >= 2))
[5] A junction vertex must have at least one incoming and one outgoing transition.
(self.kind = #junction) implies
((self.incoming->size >= 1) and (self.outgoing->size >= 1))
[6] A choice vertex must have at least one incoming and one outgoing transition.
(self.kind = #choice) implies
((self.incoming->size >= 1) and (self.outgoing->size >= 1))
2.12.3.5 StateMachine
[1] A StateMachine is aggregated within either a classifier or a behavioral feature.
self.context.oclIsKindOf(BehavioralFeature) or
self.context.oclIsKindOf(Classifier)
[2] A top state is always a composite.
self.top.oclIsTypeOf(CompositeState)
[3] A top state cannot have any containing states.
self.top.container->isEmpty
[4] The top state cannot be the source of a transition.
(self.top.outgoing->isEmpty)
[5] If a StateMachine describes a behavioral feature, it contains no triggers of type
CallEvent, apart from the trigger on the initial transition (see OCL for Transition
[8]).
self.context.oclIsKindOf(BehavioralFeature) implies
self.transitions->reject(
source.oclIsKindOf(Pseudostate) and
source.oclAsType(Pseudostate).kind= #initial).trigger
->isEmpty
2-142
OMG-UML V1.3
March 2000
2
2.12.3.6 SynchState
[1] The value of the bound attribute must be a positive integer, or unlimited.
(self.bound > 0) or (self.bound = unlimited)
[2] All incoming transitions to a SynchState must come from the same region and all
outgoing transitions from a SynchState must go to the same region.
2.12.3.7 SubmachineState
[1] Only stub states allowed as substates of a submachine state.
self.subvertex->forAll (s | s.oclIsTypeOf(StubState))
[2] Submachine states are never concurrent.
self.isConcurrent = false
2.12.3.8 Transition
[1] A fork segment should not have guards or triggers.
self.source.oclIsKindOf(Pseudostate) implies
((self.source.oclAsType(Pseudostate).kind = #fork) implies
((self.guard->isEmpty) and (self.trigger->isEmpty)))
[2] A join segment should not have guards or triggers.
self.target.oclIsKindOf(Pseudostate) implies
((self.target.oclAsType(Pseudostate).kind = #join) implies
((self.guard->isEmpty) and (self.trigger->isEmpty)))
[3] A fork segment should always target a state.
(self.stateMachine->notEmpty) implies
self.source.oclIsKindOf(Pseudostate) implies
((self.source.oclAsType(Pseudostate).kind = #fork) implies
(self.target.oclIsKindOf(State)))
[4] A join segment should always originate from a state.
(self.stateMachine->notEmpty) implies
self.target.oclIsKindOf(Pseudostate) implies
((self.target.oclAsType(Pseudostate).kind = #join) implies
(self.source.oclIsKindOf(State)))
[5] Transitions outgoing pseudostates may not have a trigger.
self.source.oclIsKindOf(Pseudostate)
implies (self.trigger->isEmpty))
OMG-UML V1.3
State Machines
March 2000
2-143
2
[6] Join segments should originate from orthogonal states.
self.target.oclIsKindOf(Pseudostate) implies
((self.target.oclAsType(Pseudostate).kind = #join) implies
(self.source.container.isConcurrent))
[7] Fork segments should target orthogonal states.
self.source.oclIsKindOf(Pseudostate) implies
((self.source.oclAsType(Pseudostate).kind = #fork) implies
(self.target.container.isComposite))
[8] An initial transition at the topmost level may have a trigger with the stereotype
"create." An initial transition of a StateMachine modeling a behavioral feature has a
CallEvent trigger associated with that BehavioralFeature. Apart from these cases, an
initial transition never has a trigger.
self.source.oclIsKindOf(Pseudostate) implies
((self.source.oclAsType(Pseudostate).kind = #initial) implies
(self.trigger->isEmpty or
((self.source.container = self.stateMachine.top) and
(self.trigger.stereotype.name = 'create')) or
(self.stateMachine.context.oclIsKindOf(BehavioralFeature)
and
self.trigger.oclIsKindOf(CallEvent) and
(self.trigger.oclAsType(CallEvent).operation =
self.stateMachine.context))
))
self.source.oclIsKindOf(Pseudostate) implies
((self.source.kind = #initial) implies
(self.trigger.isEmpty or
((self.source.container = self.StateMachine.top) and
(self.trigger.stereotype.name = 'create')) or
(self.StateMachine.context.oclIsKindOf(BehaviouralFeature)
and
self.trigger.oclIsKindOf(CallEvent) and
(self.trigger.operation =
self.StateMachine.context))
))
2.12.4 Semantics
This section describes the execution semantics of state machines. For convenience, the
semantics are described in terms of the operations of a hypothetical machine that
implements a state machine specification. This is for reference purposes only.
Individual realizations are free to choose any form that achieves the same semantics.
In the general case, the key components of this hypothetical machine are:
•
2-144
an event queue that holds incoming event instances until they are dispatched.
OMG-UML V1.3
March 2000
2
•
an event dispatcher mechanism that selects and dequeues event instances from the
event queue for processing.
•
an event processor that processes dispatched event instances according to the
general semantics of UML state machines and the specific form of the state
machine in question. Because of that, this component is simply referred to as the
“state machine” in the following text.
Although the intent is to define the semantics of state machines very precisely, there
are a number of semantic variation points to allow for different semantic interpretations
that might be required in different domains of application. These are clearly identified
in the text.
The basic semantics of events, states, and transitions are discussed first in separate
subsections under the appropriate headings. The operation of the state machine as a
whole is then described in the state machine subsection.
2.12.4.1 Event
Event instances are generated as a result of some action either within the system or in
the environment surrounding the system. An event is then conveyed to one or more
targets. The means by which event instances are transported to their destination depend
on the type of action, the target, the properties of the communication medium, and
numerous other factors. In some cases, this is practically instantaneous and completely
reliable while in others it may involve variable transmission delays, loss of events,
reordering, or duplication. No specific assumptions are made in this regard. This
provides full flexibility for modeling different types of communication facilities.
An event is received when it is placed on the event queue of its target. An event is
dispatched when it is dequeued from the event queue and delivered to the state
machine for processing. At this point, it is referred to as the current event. Finally, it is
consumed when event processing is completed. A consumed event is no longer
available for processing. No assumptions are made about the time intervals between
event reception, event dispatching, and consumption. This leaves open the possibility
of different semantic models such as zero-time semantics.
Any parameter values associated with the current event are available to all actions
directly caused by that event (transition actions, entry actions, etc.).
Event generalization may be defined explicitly by a signal taxonomy in the case of
signal events, or implicitly defined by event expressions, as in time events.
2.12.4.2 State
Active states
A state can be active or inactive during execution. A state becomes active when it is
entered as a result of some transition, and becomes inactive if it is exited as a result of
a transition. A state can be exited and entered as a result of the same transition (e.g.,
self transition).
OMG-UML V1.3
State Machines
March 2000
2-145
2
State entry and exit
Whenever a state is entered, it executes its entry action before any other action is
executed. Conversely, whenever a state is exited, it executes its exit action as the final
step prior to leaving the state.
If defined, the activity associated with a state is forked as a concurrent activity at the
instant when the entry action of the state is completed. Upon exit, the activity is
terminated before the exit action is executed.
Activity in state (do-activity)
The activity represents the execution of a sequence of actions, that occurs while the
state machine is in the corresponding state. The activity starts executing upon entering
the state, following the entry action. If the activity completes while the state is still
active, it raises a completion event. In case where there is an outgoing completion
transition the state will be exited. If the state is exited as a result of the firing of an
outgoing transition before the completion of the activity, the activity is aborted prior to
its completion.
Deferred events
A state may specify a set of event types that may be deferred in that state. An event
instance that does not trigger any transitions in the current state will not be dispatched
if its type matches one of the types in the deferred event set of that state. Instead, it
remains in the event queue while another non-deferred message is dispatched instead.
This situation persists until a state is reached where either the event is no longer
deferred or where the event triggers a transition.
2.12.4.3 CompositeState
Active state configurations
When dealing with composite and concurrent states, the simple term “current state”
can be quite confusing. In a hierarchical state machine more than one state can be
active at once. If the state machine is in a simple state that is contained in a composite
state, then all the composite states that either directly or transitively contain the simple
state are also active. Furthermore, since some of the composite states in this hierarchy
may be concurrent, the current active “state” is actually represented by a tree of states
starting with the single top state at the root down to individual simple states at the
leaves. We refer to such a state tree as a state configuration.
Except during transition execution, the following invariants always apply to state
configurations:
2-146
•
If a composite state is active and not concurrent, exactly one of its substates is
active.
•
If the composite state is active and concurrent, all of its substates (regions) are
active.
OMG-UML V1.3
March 2000
2
Entering a non-concurrent composite state
Upon entering a composite state, the following cases are differentiated:
•
Default entry: Graphically, this is indicated by an incoming transition that
terminates on the outside edge of the composite state. In this case, the default
transition is taken. If there is a guard on the transition, it must be enabled (true).
Note that a disabled initial transition is an ill defined execution state and its
handling is not defined. The entry action of the state is executed before the action
associated with the initial transition.
•
Explicit entry: If the transition goes to a substate of the composite state, then that
substate becomes active and its entry code is executed after the execution of the
entry code of the composite state. This rule applies recursively if the transition
terminates on a transitively nested substate.
•
Shallow history entry: If the transition terminates on a shallow history pseudostate,
the active substate becomes the most recently active substate prior to this entry,
unless the most recently active substate is the final state or if this is the first entry
into this state. In the latter two cases, the default history state is entered. This is the
substate that is target of the transition originating from the history pseudostate. If no
such transition is specified, the situation is illegal and its handling is not defined. If
the active substate determined by history is a composite state, then it proceeds with
its default entry.
•
Deep history entry: The rule here is the same as for shallow history except that the
rule is applied recursively to all levels in the active state configuration below this
one.
Entering a concurrent composite state
Whenever a concurrent composite state is entered, each one of its concurrent substates
(regions) is also entered, either by default or explicitly. If the transition terminates on
the edge of the composite state, then all the regions are entered using default entry. If
the transition explicitly enters one or more regions (in case of a fork), these regions are
entered explicitly and the others by default.
Exiting non-concurrent state
When exiting from a composite state, the active substate is exited recursively. This
means that the exit actions are executed in sequence starting with the innermost active
state in the current state configuration.
Exiting a concurrent state
When exiting from a concurrent state, each of its regions is exited. After that, the exit
actions of the regions are executed.
Deferred events
An event that is deferred in a composite state is automatically deferred in all directly or
transitively nested substates.
OMG-UML V1.3
State Machines
March 2000
2-147
2
2.12.4.4 FinalState
When the final state is entered, its containing composite state is completed, which
means that it satisfies the completion condition. If the containing state is the top state,
the entire state machine terminates, implying the termination of the entity associated
with the state machine. If the state machine specifies the behavior of a classifier, it
implies the “termination” of that instance.
2.12.4.5 SubmachineState
A submachine state is a convenience that does not introduce any additional dynamic
semantics. It is semantically equivalent to a composite state and may have entry and
exit actions, internal transitions, and activities.
2.12.4.6 Transitions
High-level transitions
Transitions originating from the boundary of composite states are called high-level or
group transitions. If triggered, they result in exiting of all the substates of the
composite state executing their exit actions starting with the innermost states in the
active state configuration. Note that in terms of execution semantics, a high-level
transition does not add specialized semantics, but rather reflects the semantics of
exiting a composite state.
Compound transitions
A compound transition is a derived semantic concept, represents a “semantically
complete” path made of one or more transitions, originating from a set of states (as
opposed to pseudo-state) and targeting a set of states. The transition execution
semantics described below refer to compound transitions.
In general, a compound transition is an acyclical unbroken chain of transitions joined
via join, junction, choice, or fork pseudostates that define path from a set of source
states (possibly a singleton) to a set of destination states, (possibly a singleton). For
self-transitions, the same state acts as both the source and the destination set. A
(simple) transition connecting two states is therefore a special common case of a
compound transition.
The tail of a compound transition may have multiple transitions originating from a set
of mutually orthogonal concurrent regions that are joined by a join point.
The head of a compound transition may have multiple transitions originating from a
fork pseudostate targeted to a set of mutually orthogonal concurrent regions.
In a compound transition multiple outgoing transitions may emanate from a common
junction point. In that case, only one of the outgoing transitions whose guard is true is
taken. If multiple transitions have guards that are true, a transition from this set is
chosen. The algorithm for selecting such a transition is not specified. Note that in this
case, the guards are evaluated before the compound transition is taken.
2-148
OMG-UML V1.3
March 2000
2
In a compound transition where multiple outgoing transitions emanate from a common
choice point, the outgoing transition whose guard is true at the time the choice point is
reached, will be taken. If multiple transitions have guards that are true, one transition
from this set is chosen. The algorithm for selecting this transition is not specified. If no
guards are true after the choice point has been reached, the model is ill formed.
Internal transitions
An internal transition executes without exiting or re-entering the state in which it is
defined. This is true even if the state machine is in a nested state within this state.
Completion transitions and completion events
A completion transition is a transition without an explicit trigger, although it may have
a guard defined. When all transition and entry actions and activities in the currently
active state are completed, a completion event instance is generated. This event is the
implicit trigger for a completion transition. The completion event is dispatched before
any other queued events and has no associated parameters. For instance, a completion
transition emanating from a concurrent composite state will be taken automatically as
soon as all the concurrent regions have reached their final state.
If multiple completion transitions are defined for a state, then they should have
mutually exclusive guard conditions.
Enabled (compound) transitions
A transition is enabled if and only if:
•
•
All of its source states are in the active state configuration.
•
If there exists at least one full path from the source state configuration to either the
target state configuration or to a dynamic choice point in which all guard conditions
are true (transitions without guards are treated as if their guards are always true).
The trigger of the transition is satisfied by the current event. An event instance
satisfies a trigger if it matches the event specified by the trigger. In case of signal
events, since signals are generalized concepts, a signal event satisfies a signal event
associated with the same signal or a generalization thereof.
Since more than one transition may be enabled by the same event instance, being
enabled is a necessary, but not sufficient, condition for the firing of a transition.
Guards
In a simple transition with a guard, the guard is evaluated before the transition is
triggered.
In compound transitions involving multiple guards, all guards are evaluated before a
transition is triggered, unless there are choice points along one or more of the paths.
The order in which the guards are evaluated is not defined.
OMG-UML V1.3
State Machines
March 2000
2-149
2
If there are choice points in a compound transition, only guards that precede the choice
point are evaluated according to the above rule. Guards downstream of a choice point
are evaluated if and when the choice point is reached (using the same rule as above). In
other words, for guard evaluation, a choice point has the same effect as a state.
Guards should not include expressions causing side effects. Models that violate this are
considered ill formed.
Transition execution sequence
Every transition, except for internal transitions, causes exiting of a source state, and
entering of the target state. These two states, which may be composite, are designated
as the main source and the main target of a transition.
The least common ancestor state of a transition is the lowest composite state that
contains all the explicit source states and explicit target states of the compound
transition. In case of junction segments, only the states related to the dynamically
selected path are considered explicit targets (bypassed branches are not considered).
The main source is a direct substate of the least common ancestor that contains the
explicit source states. The main target is a substate of the least common ancestor that
contains the explicit target states.
Examples:
1. The common simple case: A transition t between two simple states s1 and s2, in a
composite state s.
Here least common ancestor of t is s, the main source is s1 and the main target is s2.
2. A more esoteric case: An unstructured transition from one region to another.
s
t
s1
s2
Figure 2-23 Unstructured transition among regions
Here the least common ancestor of t is the container of s, the main source is s1 and the
main target is s2
Once a transition is enabled and is selected to fire, the following steps are carried out
in order:
•
2-150
The main source state is properly exited.
OMG-UML V1.3
March 2000
2
•
Actions are executed in sequence following their linear order along the segments of
the transition: The closer the action to the source state, the earlier it is executed.
•
If a choice point is encountered, the guards following that choice point are
evaluated dynamically and a path whose guards are true is selected.
•
The main target state is properly entered.
2.12.4.7 StateMachine
Event processing - run-to-completion step
Events are dispatched and processed by the state machine, one at a time. The order of
dequeuing is not defined, leaving open the possibility of modeling different prioritybased schemes.
The semantics of event processing is based on the run-to-completion assumption,
interpreted as run-to-completion processing. Run-to-completion processing means that
an event can only be dequeued and dispatched if the processing of the previous current
event is fully completed.
Run-to-completion may be implemented in various ways. For active classes, it may be
realized by an event-loop running in its own concurrent thread, and that reads events
from a queue. For passive classes it may be implemented as a monitor.
The processing of a single event by a state machine is known as a run-to-completion
step. Before commencing on a run-to-completion step, a state machine is in a stable
state configuration with all actions (but not necessarily activities) completed. The same
conditions apply after the run-to-completion step is completed. Thus, an event will
never be processed while the state machine is in some intermediate and inconsistent
situation. The run-to-completion step is the passage between two state configurations
of the state machine.
The run-to-completion assumption simplifies the transition function of the state
machine, since concurrency conflicts are avoided during the processing of event,
allowing the state machine to safely complete its run-to-completion step.
When an event instance is dispatched, it may result in one or more transitions being
enabled for firing. If no transition is enabled and the event is not in the deferred event
list of the current state configuration, the event is discarded and the run-to-completion
step is completed.
In the presence of concurrent states it is possible to fire multiple transitions as a result
of the same event — as many as one transition in each concurrent state in the current
state configuration. In the case where one or more transitions are enabled, the state
machine selects a subset and fires them. Which of the enabled transitions actually fire
is determined by the transition selection algorithm described below. The order in which
selected transitions fire is not defined.
OMG-UML V1.3
State Machines
March 2000
2-151
2
Each orthogonal region in the active state configuration that is not decomposed into
concurrent regions (i.e., “bottom-level” region) can fire at most one transition as a
result of the current event. When all orthogonal regions have finished executing the
transition, the current event instance is fully consumed, and the run-to-completion step
is completed.
During a transition, a number of actions may be executed. If these actions are
synchronous, then the transition step is not completed until the invoked objects
complete their own run-to-completion steps.
An event instance can arrive at a state machine that is blocked in the middle of a runto-completion step from some other object within the same thread, in a circular
fashion. This event instance can be treated by orthogonal components of the state
machine that are not frozen along transitions at that time.
Run-to-completion and concurrency
It is possible to define state machine semantics by allowing the run-to-completion steps
to be applied concurrently to the orthogonal regions of a composite state, rather than to
the whole state machine. This would allow the event serialization constraint to be
relaxed. However, such semantics are quite subtle and difficult to implement.
Therefore, the dynamic semantics defined in this document are based on the premise
that a single run-to-completion step applies to the entire state machine and includes the
concurrent steps taken by concurrent regions in the active state configuration.
In case of active objects, where each object has its own thread of execution, it is very
important to clearly distinguish the notion of run to completion from the concept of
thread preemption. Namely, run-to-completion event handling is performed by a thread
that, in principle, can be preempted and its execution suspended in favor of another
thread executing on the same processing node. (This is determined by the scheduling
policy of the underlying thread environment — no assumptions are made about this
policy.) When the suspended thread is assigned processor time again, it resumes its
event processing from the point of preemption and, eventually, completes its event
processing.
Conflicting transitions
It was already noted that it is possible for more than one transition to be enabled within
a state machine. If that happens, then such transitions may be in conflict with each
other. For example, consider the case of two transitions originating from the same
state, triggered by the same event, but with different guards. If that event occurs and
both guard conditions are true, then only one transition will fire. In other words, in
case of conflicting transitions, only one of them will fire in a single run-to-completion
step.
Two transitions are said to conflict if they both exit the same state, or, more precisely,
that the intersection of the set of states they exit is non-empty. Only transitions that
occur in mutually orthogonal regions may be fired simultaneously. This constraint
guarantees that the new active state configuration resulting from executing the set of
transitions is well formed.
2-152
OMG-UML V1.3
March 2000
2
An internal transition in a state conflicts only with transitions that cause an exit from
that state.
Firing priorities
In situations where there are conflicting transitions, the selection of which transitions
will fire is based in part on an implicit priority. These priorities resolve some transition
conflicts, but not all of them. The priorities of conflicting transitions are based on their
relative position in the state hierarchy. By definition, a transition originating from a
substate has higher priority than a conflicting transition originating from any of its
containing states.
The priority of a transition is defined based on its source state. The priority of joined
transitions is based on the priority of the transition with the most transitively nested
source state.
In general, if t1 is a transition whose source state is s1, and t2 has source s2, then:
•
If s1 is a direct or transitively nested substate of s2, then t1 has higher priority than
t2.
•
If s1 and s2 are not in the same state configuration, then there is no priority
difference between t1 and t2.
Transition selection algorithm
The set of transitions that will fire is a maximal set of transitions that satisfies the
following conditions:
•
•
•
All transitions in the set are enabled.
There are no conflicting transitions within the set.
There is no transition outside the set that has higher priority than a transition in the
set (that is, enabled transitions with highest priorities are in the set while conflicting
transitions with lower priorities are left out).
This can be easily implemented by a greedy selection algorithm, with a straightforward
traversal of the active state configuration. States in the active state configuration are
traversed starting with the innermost nested simple states and working outwards toward
the top state. For each state at a given level, all originating transitions are evaluated to
determine if they are enabled. This traversal guarantees that the priority principle is not
violated. The only non-trivial issue is resolving transition conflicts across orthogonal
states on all levels. This is resolved by terminating the search in each orthogonal state
once a transition inside any one of its components is fired.
2.12.4.8 Synch States
Synch states provide a means of synchronizing the execution of two concurrent
regions. Specifically, a synch state has incoming transitions from a fork (or forks) in
one region, the source region, and outgoing transitions to a join (or joins) in another,
the target region. These forks and joins are called synchronization forks and joins. The
OMG-UML V1.3
State Machines
March 2000
2-153
2
synch state itself is contained by the least common ancestor of the two regions being
synchronized. The synchronized regions do not need to be siblings in state
decomposition, but they must have a common ancestor state.
When the source region reaches a synchronization fork, the target states of that fork
become active, including the synch state. Activation of the synch state is an indication
that the source region has completed some activity. This region can continue
performing its remaining activities in parallel. When the target region reaches the
corresponding synchronization join, it is prevented from continuing unless all the states
leading into the synchronization join are active, including the synch states.
A synch state may have multiple incoming and outgoing transitions, used for multiple
synchronization points in each region. Alternatively, it may have single incoming and
outgoing transitions where the incoming transition is fired multiple times before the
outgoing one is fired. To support these applications, synch states keep count of the
difference between the number of times their incoming and outgoing transitions are
fired. When an incoming transition is fired, the count is incremented by one, unless its
value is equal to the value defined in the bound attribute. In that case, the count is not
incremented. When an outgoing transition is fired, the count is decremented by one.
An outgoing transition may fire only if the count is greater than zero, which prevents
the count from becoming negative. The count is automatically set to zero when its
container state is exited.
The bound attribute is for limiting the number of times outgoing transitions fire from a
synch state. For a state, to realize the equivalent of a binary semaphore, the bound
should be set to one. In this case multiple incoming transitions may fire before the
outgoing transition does, whereupon the outgoing transition can only fire once.
2.12.4.9 StubStates
Stub states are pseudostates signifying either entry points to or exit points from a
submachine. Since a submachine is encapsulated and represented as a submachine
state, multi-level (“deep”) transitions may logically connect states in separate state
machines. This is facilitated by stub state, representing real states in a referenced
machine to or from transitions in the referencing machine are incoming/outgoing.
Therefore, stub states can only be defined within a submachine state and are the only
potential subvertices of a submachine state.
2.12.5 Notes
2.12.5.1 Protocol State Machines
One application area of state machines is in specifying object protocols, also known as
object life cycles. A “protocol state machine” for a class defines the order (i.e.,
sequence) in which the operations of that Class can be invoked. The behavior of each
of these operations is defined by an associated method, rather than through action
expressions on transitions.
2-154
OMG-UML V1.3
March 2000
2
A transition in a protocol state machine has as its trigger a call event that references an
operation of the class, and an empty action sequence. Such a transition indicates that if
the call event occurs when an object of the class is in the source state of the transition
and the guard on the transition is true, then the method associated with the operation of
the call event will be executed (if one exists), and the object will enter the target state.
Semantically, the invocation of the method does not lead to a new call event being
raised.
If a call event arrives when the state machine is not in an appropriate state to handle
the event, the event is discarded, conform the general RTC semantics. Strictly
speaking, from the caller's point of view this means that the call is completed. If
instead the semantics are required that the caller should 'hang' (potentially infinitely) if
the receiver's state machine is not able to process the call event immediately, then the
event must be deferred explicitly. This can be done for all call events in a protocol state
machine by deferring them at a superstate level.
In any practical application, a protocol state machine is made up exclusively of
'protocol' transitions, and the entry and exit actions of its states are empty (i.e., no
action specifications exist other than for the methods). However, formally it is not
prohibited to mix this kind of transition with transitions with explicit actions (as it does
not seem worth the effort to prohibit this, and there may be some applications that
might benefit from 'mixing').
withdraw(amount)
[amount <= balance+overdraft]
Open
close()
Closed
deposit (amount)
Figure 2-24 Example of a Protocol State Machine for a Class ‘Account’.
2.12.5.2 Example: Modeling Class Behavior
In the software that is implemented as a result of a state modeling design, the state
machine may or may not be actually visible in the (generated or hand-crafted) code.
The state machine will not be visible if there is some kind of run-time system that
supports state machine behavior. In the more general case, however, the software code
will contain specific statements that implement the state machine behavior.
A C++ example is shown below:
OMG-UML V1.3
State Machines
March 2000
2-155
2
class bankAccount {
private:
int balance;
public:
void deposit (amount) {
if (balance > 0)
balance = balance + amount’ // no change
else
balance = balance + amount - 1; // transaction
fee
}
void withdrawal (amount) {
if (balance>0)
balance = balance - amount;
}
}
In the above example, the class has an abstract state manifested by the balance
attribute, controlling the behavior of the class. This is modeled by the state machine in
Figure 2-25.
else/balance -= amount
debit
deposit
[amount>balance]/
balance -= amount
else/balance
+=amount-1
withdrawal
[amount>-balance]/
balance+=amount-1
credit
deposit/balance
+=amount
Figure 2-25 State Machine for Modeling Class Behavior
2.12.5.3 Example: State machine refinement
Note – The following discussion provides some potentially useful heuristics on how
state machines can be refined. These techniques are all based on practical experience.
However, readers are reminded that this topic is still the subject of research, and that it
is likely that other approaches may be defined either now or in the future.
Since state machines describe behaviors of generalizable elements, primarily classes,
state machine refinement is used to capture the relationships between the
corresponding state machines. State machines use refinement in three different
mappings, specified by the mapping attribute of the refinement meta-class. The
mappings are refinement, substitution, and deletion.
2-156
OMG-UML V1.3
March 2000
2
To illustrate state machine refinement, consider the following example where one state
machine attached to a class denoted ‘Supplier,’ is refined by another state machine
attached to a class denoted as ‘Client.’
Supplier (refined)
Client (refined)
Sa (new)
Sa
Sa2
Sa1 (new)
- Sa2 deleted
Sa4
- Sa4 added
Sa1
- Sa1 refined
into composite
Sa3
Sa11
Sa3
Figure 2-26 State Machine Refinement Example
In the example above, the client state (Sa(new)) in the subclass substitutes the simple
substate (Sa1) by a composite substate (Sa1(new)). This new composite substate has a
component substate (Sa11). Furthermore, the new version of Sa1 deletes the substate
Sa2 and also adds a new substate Sa4. Substate Sa3 is inherited and is therefore
common to both versions of Sa. For clarity, we have used a gray shading to identify
components that have been inherited from the original. (This is for illustration
purposes and is not intended as a notational recommendation.)
It is important to note that state machine refinement as defined here does not specify or
favor any specific policy of state machine refinement. Instead, it simply provides a
flexible mechanism that allows subtyping, (behavioral compatibility), inheritance
(implementation reuse), or general refinement policies.
We provide a brief discussion of potentially useful policies that can be implemented
with the state machine refinement mechanism.
Subtyping
The refinement policy for subtyping is based on the rationale that the subtype preserves
the pre/post condition relationships of applying events/operations on the type, as
specified by the state machine. The pre/post conditions are realized by the states, and
the relationships are realized by the transitions. Preserving pre/post conditions
guarantee the substitutability principle.
States and transitions are only added, not deleted. Refinement is interpreted as follows:
OMG-UML V1.3
State Machines
March 2000
2-157
2
•
A refined state has the same outgoing transitions, but may add others, and a
different set of incoming transitions. It may have a bigger set of substates, and it
may change its concurrency property from false to true.
•
A refined transition may go to a new target state which is a substate of the state
specified in the base class. This comes to guarantee the post condition specified by
the base class.
•
A refined guard has the same guard condition, but may add disjunctions. This
guarantees that pre-conditions are weakened rather than strengthened.
•
A refined action sequence contains the same actions (in the same sequence), but
may have additional actions. The added actions should not hinder the invariant
represented by the target state of the transition.
Strict Inheritance
The rationale behind this policy is to encourage reuse of implementation rather than
preserving behavior. Since most implementation environment utilize strict inheritance
(i.e., features can be replaced or added, but not deleted), the inheritance policy follows
this line by disabling refinements which may lead to non-strict inheritance once the
state machine is implemented.
States and transitions can be added. Refinement is interpreted as follows:
•
A refined state has some of the same incoming transitions (i.e., drop some, add
some) but a greater or bigger set of outgoing transitions. It may have more
substates, and may change its concurrency attribute.
•
•
•
A refined transition may go to a new target state but should have the same source.
A refined guard may have a different guard condition.
A refined action sequence contains some of the same actions (in the same sequence)
and may have additional actions.
General Refinement
In this most general case, states and transitions can be added and deleted (i.e., ‘null’
refinements). Refinement is interpreted without constraints (i.e., there are no formal
requirements on the properties and relationships of the refined state machine element
and the refining element).
•
A refined state may have different outgoing and incoming transitions (i.e., drop all,
add some).
•
•
•
A refined transition may leave from a different source and go to a new target state.
A refined guard may have a different guard condition.
A refined action sequence need not contain the same actions (or it may change their
sequence) and may have additional actions.
The refinement of the composite state in the example above is an illustration of general
refinement.
2-158
OMG-UML V1.3
March 2000
2
It should be noted that if a type has multiple supertype relationships in the structural
model, then the default state machine for the type consists of all the state machines of
its supertypes as orthogonal state machine regions. This may be explicitly overridden
through refinement if required.
2.12.5.4 Comparison to classical statecharts
The major difference between classical (Harel) statecharts and object state machines
result from the external context of the state machine. Object state machines, such as
ROOMcharts, primarily come to represent behavior of a type. Classical statecharts
specify behaviors of processes. The following list of differences results from the above
rationale:
•
•
•
Events carry parameters, rather than being primitive signals.
•
Classical statecharts have an elaborated set of predefined actions, conditions, and
events that are not mandated by object state machines, such as entered(s), exited(s),
true(condition), tr!(c) (make true), fs!(c).
•
•
Operations are not broadcast, but can be directed to an object-set.
•
Transition compositions are constrained for practical reasons. In classical
statecharts any composition of pseudostates, simple transitions, guards, and labels is
allowed.
•
Object state machines support the notion of synchronous communication between
state machines.
•
•
•
Actions on transitions are executed in their given order.
Call events (operation triggers) are supported to model behaviors of types.
Event conjunction is not supported, and the semantics is given in respect to a single
event dispatch, to better match the type context as opposed to a general system
context.
The notion of activities (processes) does not exist in object state machines.
Therefore, all predefined actions and events that deal with activities are not
supported, as well as the relationships between states and activities.
Classical statecharts do not support dynamic choice points.
Classical statecharts are based on the zero-time assumption, meaning transitions
take zero time to execute. The whole system execution is based on synchronous
steps where each step produces new events that will be processed at the next step. In
object-oriented state machines, these assumptions are relaxed and replaced with
these of software execution model, based on threads of execution and that execution
of actions may take time.
2UML Semantics
OMG-UML V1.3
State Machines
March 2000
2-159
2
2.13 Activity Graphs
2.13.1 Overview
Activity graphs define an extended view of the State Machine package. State machines
and activity graphs are both essentially state transition systems, and share many
metamodel elements. This section describes the concepts in the State Machine package
that are specific to activity graphs. It should be noted that the activity graphs extension
has few semantics of its own. It should be understood in the context of the State
Machine package, including its dependencies on the Foundation package and the
Common Behavior package.
An activity graph is a special case of a state machine that is used to model processes
involving one or more classifiers. Its primary focus is on the sequence and conditions
for the actions that are taken, rather than on which classifiers perform those actions.
Most of the states in such a graph are action states that represent atomic actions (i.e.,
states that invoke actions and then wait for their completion). Transitions into action
states are triggered by events, which can be
•
•
•
•
the completion of a previous action state (completion events),
the availability of an object in a certain state,
the occurrence of a signal, or
the satisfaction of some condition.
By defining a small set of additional subtypes to the basic state machine concepts, the
well-formedness of activity graphs can be defined formally, and subsequently mapped
to the dynamic semantics of state machines. In addition, the activity specific subtypes
eliminate ambiguities that might otherwise arise in the interchange of activity graphs
between tools.
2.13.2 Abstract Syntax
The abstract syntax for activity graphs is expressed in graphic notation in Figure 2-27
on page 2-161.
2-160
OMG-UML V1.3
March 2000
2
ModelElement
StateMachine
+behavior
+context (from Core)
(fromState Machines)
*
0..1
0..1
+contents
*
*
ActivityGraph
0..*
1
+top
Partition
+partition
1
State
(fromState Machines)
1..*
+inState
SimpleState
CompositeState
(fromState Machines)
isConcurrent : Boolean
+type
Classifier
(fromCore)
*
ActionState
Submachi neState
(fromState Machines)
ObjectFlowState
isDynamic : Boolean
dynamicArguments : ArgListsExpression
dynamicMultiplicity : Multiplicity
isDynamic : Boolean
dynamicArguments : ArgListsExpression
dynamicMultipli city : Multiplicity
1
+type
isSynch : Boolean
+state
*
+parameter
SubactivityState
1
CallState
*
Parameter
*
0..*
ClassifierInState
(from Core)
Figure 2-27 Activity Graphs
2.13.2.1 ActivityGraph
An activity graph is a special case of a state machine that defines a computational
process in terms of the control-flow and object-flow among its constituent actions. It
does not extend the semantics of state machines in a major way but it does define
shorthand forms that are convenient for modeling control-flow and object-flow in
computational and organizational processes.
The primary basis for activity graphs is to describe the states of an activity or process
involving one or more classifiers. Activity graphs can be attached to packages,
classifiers (including use cases), and behavioral features. As in any state machine, if an
outgoing transition is not explicitly triggered by an event, then it is implicitly triggered
OMG-UML V1.3
Activity Graphs
March 2000
2-161
2
by the completion of the contained actions. A subactivity state represents a nested
activity that has some duration and internally consists of a set of actions or more
subactivities. That is, a subactivity state is a “hierarchical action” with an embedded
activity subgraph that ultimately resolves to individual actions.
Junctions, forks, joins, and synchs may be included to model decisions and concurrent
activity.
Activity graphs include the concept of Partitions to organize states according to various
criteria, such as the real-world organization responsible for their performance.
Activity graphing can be applied to organizational modeling for business process
engineering and workflow modeling. In this context, events often originate from inside
the system, such as the finishing of a task, but also from outside the system, such as a
customer call. Activity graphs can also be applied to system modeling to specify the
dynamics of operations and system level processes when a full interaction model is not
needed.
Associations
partition
A set of Partitions each of which contains some of the model
elements of the model.
2.13.2.2 ActionState
An action state represents the execution of an atomic action, typically the invocation of
an operation.
An action state is a simple state with an entry action whose only exit transition is
triggered by the implicit event of completing the execution of the entry action. The
state therefore corresponds to the execution of the entry action itself and the outgoing
transition is activated as soon as the action has completed its execution.
An ActionState may perform more than one action as part of its entry action. An action
state may not have an exit action, do activity, or internal transitions.
2-162
OMG-UML V1.3
March 2000
2
Attributes
dynamicArguments
An ArgListsExpression that determines at runtime the
number of parallel executions of the actions of the state.
The value must be a set of lists of objects, each list serving
as arguments for one execution. This attribute is ignored if
the isDynamic attribute is false.
dynamicMultiplicity
A Multiplicity limiting the number of parallel executions of
the actions of state. This attribute is ignored if the
isDynamic attribute is false.
isDynamic
A boolean value specifying whether the state's actions
might be executed concurrently. It is used in conjunction
with the dynamicArguments attribute.
Associations
entry
(Inherited from State) Specifies the invoked actions.
2.13.2.3 CallState
A call state is an action state that has exactly one call action as its entry action. It is
useful in object flow modeling to reduce notational ambiguity over which action is
taking input or providing output.
2.13.2.4 ClassifierInState
A classifier-in-state characterizes instances of a given classifier that are in a particular
state or states. In an activity graph, it may be used to specify input and/or output to an
action through an object flow state.
ClassifierInState is a child of Classifier and may be used in static structural models and
collaborations (e.g., it can be used to show associations that are only relevant when
objects of a class are in a given state).
Associations
type
Designates a classifier that characterizes instances.
inState
Designates a state that characterizes instances. The state must
be a valid state of the corresponding classifier. This may have
multiple states when referring to an object in orthogonal states.
OMG-UML V1.3
Activity Graphs
March 2000
2-163
2
2.13.2.5 ObjectFlowState
An object flow state defines an object flow between actions in an activity graph. It
signifies the availability of an instance of a classifier, possibly in a particular state,
usually as the result of an operation. An instance of a particular class, possibly in a
particular state, is available when an object flow state is occupied.
The generation of an object by an action in an action state may be modeled by an
object flow state that is triggered by the completion of the action state. The use of the
object in a subsequent action state may be modeled by connecting the output transition
of the object flow state as an input transition to the action state. Generally each action
places the object in a different state that is modeled as a distinct object flow state.
Attributes
isSynch
A boolean value indicating whether an object flow state is used
as a synch state.
Associations
type
Designates a classifier that specifies the classifier of the object.
It may be a classifier-in-state to specify the state and classifier
of the object.
parameter
Designates parameters which provide the object as output or
take it as input.
Stereotypes
«signalflow»
Abstraction
Signalflow is a stereotype of ObjectFlowState with a Signal as
its type.
2.13.2.6 Partition
A partition is a mechanism for dividing the states of an activity graph into groups.
Partitions often correspond to organizational units in a business model. They may be
used to allocate characteristics or resources among the states of an activity graph.
Associations
contents
Specifies the states that belong to the partition. They need not
constitute a nested region.
It should be noted that Partitions do not impact the dynamic semantics of the model but
they help to allocate properties and actions for various purposes.
2-164
OMG-UML V1.3
March 2000
2
2.13.2.7 SubactivityState
A subactivity state represents the execution of a non-atomic sequence of steps that has
some duration (i.e., internally it consists of a set of actions and possibly waiting for
events). That is, a subactivity state is a “hierarchical action,” where an associated
subactivity graph is executed.
A subactivity state is a submachine state that executes a nested activity graph. When an
input transition to the subactivity state is triggered, execution begins with the initial
state of the nested activity graph. The outgoing transitions of a subactivity state are
enabled when the final state of the nested activity graph is reached (i.e., when it
completes its execution), or when the trigger events occur on the transitions.
The semantics of a subactivity state are equivalent to the model obtained by statically
substituting the contents of the nested graph as a composite state replacing the
subactivity state.
Attributes
dynamicArguments
An ArgListsExpression that determines the number of
parallel executions of the submachines of the state. The
value must be a set of lists of objects, each list serving as
arguments for one execution. This attribute is ignored if the
isDynamic attribute is false.
dynamicMultiplicity
A Multiplicity limiting the number of parallel executions of
the actions of state. This attribute is ignored if the
isDynamic attribute is false.
isDynamic
A boolean value specifying whether the state's submachines
might be executed concurrently. It is used in conjunction
with the dynamicArguments attribute.
Associations
submachine
(Inherited from SubmachineState) - This designates an
activity graph that is conceptually nested within the
subactivity state. The subactivity state is conceptually
equivalent to a composite state whose contents are the
states of the nested activity graph. The nested activity
graph must have an initial state and a final state.
2.13.3 Well-Formedness Rules
2.13.3.1 ActivityGraph
[1] An ActivityGraph specifies the dynamics of
(i) a Package, or
OMG-UML V1.3
Activity Graphs
March 2000
2-165
2
(ii) a Classifier (including UseCase), or
(iii) a BehavioralFeature.
(self.context.oclIsTypeOf(Package)
xor
self.context.oclIsKindOf(Classifier) xor
self.context.oclIsKindOf(BehavioralFeature))
2.13.3.2 ActionState
[1] An action state has a non-empty entry action.
self.entry->size > 0
[2] An action state does not have an internal transition, exit action, or a do activity.
self.internalTransition->size = 0 and self.exit->size = 0 and
self.doActivity->size = 0
[3] Transitions originating from an action state have no trigger event.
self.outgoing->forAll(trigger->size = 0)
2.13.3.3 CallState
[1] The entry action of a call state is a single call action.
self.entry->size = 1 and self.entry.oclIsKindOf(CallAction)
2.13.3.4 ObjectFlowState
[1] Parameters of an object flow state must have a type and direction compatible with
classifier or classifier-in-state of the object flow state.
let osftype : Classifier =
(if self.type.IsKindOf(ClassifierInState)
then self.type.type else self.type);
self.parameter.forAll(
type = osftype
or (parameter.kind = #in
and osftype.allSupertypes->includes(type))
or ((parameter.kind = #out or parameter.kind = #return)
and type.allSupertypes->includes(osftype))
or (parameter.kind = #inout
and (
osftype.allSupertypes->includes(type)
or type.allSupertypes->includes(osftype))))
[2] Downstream states have entry actions that accept input conforming to the type of
the classifier or classifier-in-state. The entry actions use the input parameters of the
object flow state. Valid downstream states are calculated by traversing outgoing
transitions transitively, skipping pseudo states, and entering and exiting subactivity
2-166
OMG-UML V1.3
March 2000
2
states, looking for regular states. If the object flow state has no parameters, then the
target of downstream actions must conform to the type of the classifier or classifierin-state.
self.allnextleafstates.size > 0 and
self.allnextleafstates.forAll(self.isinputaction(entry))
[3] Upstream states have entry actions that provide output or return values conforming
to the type of the classifier or classifier-in-state. The entry actions use the output or
return parameters of the object flow state. Valid upstream states are calculated by
traversing incoming transitions transitively, skipping pseudo states, entering and
exiting subactivity states, looking for regular states.
self.allnextleafstates.forAll(self.allpreviousleaf
states.size > 0 and
self.allpreviousleafstates.forAll(self.isoutputaction(entry))
2.13.3.5 PseudoState
[1] In activity graphs, transitions incoming to (and outgoing from) join and fork
pseudostates have as sources (targets) any state vertex. That is, joins and forks are
syntactically not restricted to be used in combination with composite states, as is the
case in state machines.
self.stateMachine.oclIsTypeOf(ActivityGraph) implies
((self.kind = #join or self.kind = #fork) implies
(self.incoming->forAll(source.oclIsKindOf(State) or
source.oclIsTypeOf(PseudoState)) and
(self.outgoing->forAll(source.oclIsKindOf(State) or
source.oclIsTypeOf(PseudoState)))))
[2] All of the paths leaving a fork must eventually merge in a subsequent join in the
model. Furthermore, multiple layers of forks and joins must be well nested, with the
exception of forks and joins leading to or from synch state. Therefore the
concurrency structure of an activity graph is in fact equally restrictive as that of an
ordinary state machine, even though the composite states need not be explicit.
2.13.3.6 SubactivityState
[1] A subactivity state is a submachine state that is linked to an activity graph.
self.submachine.oclIsKindOf(ActivityGraph)
OMG-UML V1.3
Activity Graphs
March 2000
2-167
2
2.13.4 Semantics
2.13.4.1 ActivityGraph
The dynamic semantics of activity graphs can be expressed in terms of state machines.
This means that the process structure of activities formally must be equivalent to
orthogonal regions (in composite states). That is, transitions crossing between parallel
paths (or threads) are not allowed, except for transitions used with synch states. As
such, an activity specification that contains ‘unconstrained parallelism’ as is used in
general activity graphs is considered ‘incomplete’ in terms of UML.
All events that are not relevant in a state must be deferred so they are consumed when
they become relevant. This is facilitated by the general deferral mechanism of state
machines.
2.13.4.2 ActionState
As soon as the incoming transition of an ActionState is triggered, its entry action starts
executing. Once the entry action has finished executing, the action is considered
completed. When the action is complete, then the outgoing transition is enabled.
The isDynamic attribute of an action state determines whether multiple invocations of
state might be executed concurrently, depending on runtime information. This means
that the normal activities of an action state, namely its actions, may execute multiple
times in parallel. If isDynamic is true, then the dynamicArguments attribute is
evaluated at the time the state is entered. The size of the resulting set determines the
number of parallel executions of the state. Each element of the set is a list, which is
used as arguments for an execution. These arguments can be referred to within actions
(e.g., by “object[i]” denoting the ith object in a list). If the isDynamic attribute is false,
dynamicArguments is ignored. If the dynamicArguments expression evaluates to the
empty set, then the state behaves as if it had no actions. It is an error if the
dynamicArguments expression evaluates to a set with fewer or more elements than the
number allowed by the dynamicMultiplicity attribute. The behavior is not defined in
this case.
Dynamic states may be nested. In this case, you can't access the outer set of arguments
in the inner nesting. If this should be necessary, arguments can be passed explicitly
from the outer to the inner dynamic state.
2.13.4.3 ObjectFlowState
The activation of an object flow state signifies that an instance of the associated
classifier is available, perhaps in a specified state (i.e., a state change has occurred as a
result of a previous operation). This may enable a subsequent action state that requires
the instance as input. As with all states in activity graphs, if the object flow state leads
into a join pseudostate, then the object flow state remains activated until the other
predecessors of the join have completed.
2-168
OMG-UML V1.3
March 2000
2
Unless there is an explicit ‘fork’ that creates orthogonal object states, only one of an
object flow state’s outgoing transitions will fire as determined by the guards of the
transitions. The invocation of the action state may result in a state change of the object,
resulting in a new object flow state.
An object flow state may specify the parameter of an operation that provides its object
as output, and the parameter of an operation that takes its object as input. The
operations must be called in actions of states immediately preceding and succeeding
the object flow state, respectively, although pseudostates, final states, synch states, and
stub states may be interposed between the object flow state and the acting state. For
example, an object flow state may transition to a subactivity state, which means at
runtime the object is passed as input to the first state after the initial state of the
subactivity graph. If no parameter is specified to take the flowing object as input, then
it is used as an action target instead. Call actions are particularly suited to be used in
conjunction with this technique because they invoke exactly one operation.
Object flow states may be used as synch states, indicated by the isSynch attribute being
set to true. In this case, outgoing transitions can fire only if an object has arrived on the
incoming transitions. Instead of a count, the state keeps a queue of objects as they
arrive on the incoming transitions. These objects are pulled from the queue in FIFO
fashion as outgoing transitions are fired. No outgoing transitions can fire if the queue
is empty. All objects in the queue conform to the classifier and state specified by the
object flow state. The queue is not bounded as the count may be in synch states.
For applications requiring that actions or activities bring about an event as their result,
use an object flow state with a signal as a classifier. This means the action or activity
must return an instance of a signal. For multiple resulting events, transition the action
or activity to a fork, and target the fork transitions at multiple object flow states.
2.13.4.4 SubactivityState
The isDynamic, dynamicArguments, and dynamicMultiplicity attributes of a
subactivity state have a similar meaning to the same attributes of action states. They
provide for executing the submachine of the subactivity state multiple times in parallel.
2.13.4.5 Transition
In activity graphs, transitions outgoing from forks may have guards. This means the
region initiated by a fork transition might not start, and therefore not be required to
complete at the corresponding join. Forks and joins must be well-nested in the model
to use this feature (see rule #2 for PseudoState in Activity Graphs). The following
mapping shows the state machine meaning for such an activity graph:
OMG-UML V1.3
Activity Graphs
March 2000
2-169
2
[guard]
Activity
Model
Thread 1
[~guard]
Conditional
Activity
Model
Thread
Conditional
State
Machine
Fragment
Thread 1
Activity diagram
notation
[guard]
Equivalent state
machine notation
Figure 2-28 State machine meaning for activity diagram
If a conditional region synchronizes with another region using a synch state, and the
condition fails, then these synch states have their counts set to infinity to prevent other
regions from deadlocking.
2.13.5 Notes
Object flow states in activity graphs are a specialization of the general dataflow aspect
of process models. Object-flow activity graphs extend the semantics of standard
dataflow relationships in three areas:
1. The operations in action states in activity graphs are operations of classes or types
(e.g., ‘Trade’ or ‘OrderEntryClerk’). They are not hierarchical ‘functions’ operating
on a dataflow.
2. The ‘contents’ of object flow states are typed. They are not unstructured data
definitions as in data stores.
3. The state of the object flowing as input and output between operations may be
defined explicitly. The event of the availability of an object in a specific state may
form a trigger for the operation that requires the object as input. Object flow states
are not necessarily stateless as are data stores.
4. UML Semantics
2-170
OMG-UML V1.3
March 2000
2
Part 4 - General Mechanisms
This section defines the mechanisms of general applicability to models. This version of
UML contains one general mechanisms package, Model Management. The Model
Management package specifies how model elements are organized into models,
packages, and subsystems.
2.14 Model Management
2.14.1 Overview
The Model Management package is dependent on the Foundation package. It defines
Model, Package, and Subsystem, which all serve mainly as grouping units for other
ModelElements.
Packages are used within a Model to group ModelElements. A Subsystem is a special
kind of Package that represents a behavioral unit in the physical system, and hence in
the model.
In this section it is necessary to clearly distinguish between the physical system being
modeled (i.e., the subject of the model) and the subsystem elements that represent the
physical system in the model. For this reason, we consistently use the term physical
system when we want to indicate the former, and the terms subsystem when we want to
indicate the latter. An example of a physical system is a credit card service, which
includes software, hardware, and wetware (people). The UML model for this physical
system might consist of a top-level subsystem called CreditCardService, which is
decomposed into subsystems for Authorization, Credit, and Billing. An analogy with
the construction of houses would be that the house would correspond to the physical
system, while a blueprint would correspond to a model, and an element used in a blue
print would correspond to a model element.
The following sections describe the abstract syntax, well-formedness rules, and
semantics of the Model Management package.
2.14.2 Abstract Syntax
The abstract syntax for the Model Management package is expressed in graphic
notation in Figure 2-29.
OMG-UML V1.3
Model Management
March 2000
2-171
2
+importedElement
ModelElement
+ownedElement
(from Core)
*
*
ElementOwnership
(f ro m Core)
ElementImport
visibility : VisibilityKind
alias : Name
Namespace
0..1
Genera li zab leElem ent
(from Core)
(fr om Core)
+namespace
*
Classifier
Package
(from Core)
Model
Subsystem
isIns ta nt ia ble : B oo lea n
Figure 2-29 Model Management
2.14.2.1 ElementImport
An element import defines the visibility and alias of a model element included in the
namespace of a package, as a result of the package importing another package.
In the metamodel an ElementImport reifies the relationship between a Package and an
imported ModelElement. It allows redefinition of the name and the visibility for the
imported ModelElement (i.e., the ModelElement may be given another name (an
alias)) and/or a new visibility to be used within the importing Package. The default is
no alias, (i.e., the original name will be used) and private visibility relative to the
importing Package.
Attributes
2-172
alias
The alias defines a local name of the imported ModelElement,
to be used within the Package.
visibility
An imported ModelElement is either public, protected, or
private relative to the importing Package.
OMG-UML V1.3
March 2000
2
2.14.2.2 Model
A model is an abstraction of a physical system, with a certain purpose. This purpose
determines what is to be included in the model and what is irrelevant. Thus the model
completely describes those aspects of the physical system that are relevant to the
purpose of the model, at the level of detail that is given by the purpose.
In the metamodel, Model is a subclass of Package. It contains a containment hierarchy
of ModelElements that together describe the physical system. A Model also contains a
set of ModelElements, which represents the environment of the system, typically
Actors together with their interrelationships such as Dependencies, Generalizations,
and Constraints.
Different Models can be defined for the same physical system, specifying it from
different viewpoints (e.g., a logical model, a design model, a use-case model). Each
Model is self-contained within its viewpoint of the physical system and within its level
of abstraction (i.e., within its purpose. Models may be nested - a Model may contain
other Models).
Stereotypes
«systemModel» Abstraction
A systemModel is a stereotyped model that contains a
collection of models of the same physical system. A
systemModel also contains all relationships and
constraints between model elements contained in
different models.
«metamodel»
A metamodel is a stereotyped model denoting that the
model is an abstraction of another model, (i.e., it is a
model of a model). Hence, if M2 is a model of the
model M1, then M2 is a metamodel of M1. It follows
then that classes in M1 are instances of metaclasses in
M2. The stereotype can be recursively applied, as in
the case of a 4-layer metamodel architecture.
Abstraction
2.14.2.3 Package
A package is a grouping of model elements.
In the metamodel, Package is a subclass of Namespace and GeneralizableElement. A
Package contains ModelElements like Packages, Classifiers, and Associations. A
Package may also contain Constraints and Dependencies between ModelElements of
the Package.
Each ModelElement of a Package has a visibility relative to the Package stating if the
ModelElement is available to ModelElements in other Packages with a Permission
(«access» or «import») or Generalization relationship to the Package. An «access» or
«import» Permission from one Package to another allows public ModelElements in the
target Package to be referenced by ModelElements in the source Package. They differ
in that all public ModelElements in imported Packages are added to the Namespace of
OMG-UML V1.3
Model Management
March 2000
2-173
2
the importing Package, whereas the Namespace of an accessing Package is not affected
at all. The ModelElements available in a Package are those in the contents of the
Namespace of the Package, which consists of owned and imported ModelElements,
together with public ModelElements in accessed Packages.
Associations
importedElement
The namespace defined by a package is extended by model
elements in other, imported packages.
Stereotypes
Abstraction
A facade is a stereotyped package containing only
references to model elements owned by another package. It
is used to provide a ‘public view’ of some of the contents
of a package. A facade does not contain any model
elements of its own.
«framework»Abstraction
A framework is a stereotyped package consisting mainly of
patterns, where patterns are defined as template
collaborations.
«stub»
A stub is a stereotyped package representing a package
that is incompletely transferred; specifically, a stub
provides the public parts of the package, but nothing more.
«facade»
Abstraction
«topLevel» Abstraction
TopLevel is a stereotype of package denoting the top-most
package in a containment hierarchy. The topLevel
stereotype defines the outer limit for looking up names, as
namespaces “see” outwards. A topLevel subsystem
represents the top of the subsystem containment hierarchy
(i.e., it is the model element that represents the boundary
of the entire physical system being modeled).
2.14.2.4 Subsystem
A subsystem is a grouping of model elements that represents a behavioral unit in a
physical system. A subsystem offers interfaces and has operations. In addition, the
model elements of a subsystem can be partitioned into specification and realization
elements, where the former, together with the operations of the subsystem, are realized
by (i.e., implemented by) the latter.
In the metamodel, Subsystem is a subclass of both Package and Classifier. As such it
may have a set of Features, which are constrained to be Operations and Receptions.
The contents of a Subsystem are divided into two subsets: specification elements and
realization elements. The former subset provides, together with the Operations of the
Subsystem, a specification of the behavior contained in the Subsystem, while the
ModelElements in the latter subset jointly provide a realization of the specification.
2-174
OMG-UML V1.3
March 2000
2
Any kind of ModelElement can be a specification element or a realization element.
The relationships between the specification elements and the realization elements can
be defined in different ways (e.g., with Collaborations) or «realize» dependencies.
Attributes
isInstantiable
States whether a Subsystem is instantiable or not. If true, then
the instances of the model elements within the subsystem form
an implicit composition to an implicit subsystem instance,
whether or not it is actually implemented.
2.14.3 Well-Formedness Rules
The following well-formedness rules apply to the Model Management package.
2.14.3.1 ElementImport
No extra well-formedness rules.
2.14.3.2 Model
No extra well-formedness rules.
2.14.3.3 Package
[1] A Package may only own or reference Packages, Classifiers, Associations,
Generalizations, Dependencies, Constraints, Collaborations, StateMachines, and
Stereotypes.
self.contents->forAll ( c |
c.oclIsKindOf(Package) or
c.oclIsKindOf(Classifier) or
c.oclIsKindOf(Association or
c.oclIsKindOf(Generalization) or
c.oclIsKindOf(Dependency) or
c.oclIsKindOf(Constraint) or
c.oclIsKindOf(Collaboration or
c.oclIsKindOf(StateMachine) or
c.oclIsKindOf(Stereotype) )
[2] No imported element (excluding Association) may have the same name or alias as
any element owned by the Package or one of its supertypes.
self.allImportedElements->reject( re |
re.oclIsKindOf(Association) )->forAll( re |
(re.elementImport.alias <> ’’ implies
not (self.allContents - self.allImportedElements)->
reject( ve |
ve.oclIsKindOf (Association) )->exists ( ve |
ve.name = re.elementImport.alias))
OMG-UML V1.3
Model Management
March 2000
2-175
2
and
(re.elementImport.alias = ’’ implies
not (self.allContents - self.allImportedElements)->
reject ( ve |
ve.oclIsKindOf (Association) )->exists ( ve |
ve.name = re.name) ) )
[3] Imported elements (excluding Association) may not have the same name or alias.
self.allImportedElements->reject( re |
not re.oclIsKindOf (Association) )->forAll( r1, r2 |
(r1.elementImport.alias <> ’’ and
r2.elementImport.alias <> ’’ and
r1.elementImport.alias = r2.elementImport.alias
implies r1 = r2)
and
(r1.elementImport.alias = ’’ and
r2.elementImport.alias = ’’ and
r1.name = r2.name implies r1 = r2)
and
(r1.elementImport.alias <> ’’ and
r2.elementImport.alias = ’’ implies
r1.elementImport.alias <> r2.name))
[4] No imported element (Association) may have the same name or alias combined with
the same set of associated Classifiers as any Association owned by the Package or
one of its supertypes.
self.allImportedElements->select( re |
re.oclIsKindOf(Association) )->forAll( re |
(re.elementImport.alias <> ’’ implies
not (self.allContents - self.allImportedElements)->
select( ve |
ve.oclIsKindOf(Association) )->exists(
ve : Association |
ve.name = re.elementImport.alias
and
ve.connection->size = re.connection->size and
Sequence {1..re.connection->size}->forAll( i |
re.connection->at(i).type =
ve.connection->at(i).type ) ) )
and
(re.elementImport.alias = ’’ implies
not (self.allContents - self.allImportedElements)->
select( ve |
not ve.oclIsKindOf(Association) )->exists( ve :
Association |
ve.name = re.name
and
ve.connection->size = re.connection->size and
Sequence {1..re.connection->size}->forAll( i |
2-176
OMG-UML V1.3
March 2000
2
re.connection->at(i).type =
ve.connection->at(i).type ) ) ) )
[5] Imported elements (Association) may not have the same name or alias combined
with the same set of associated Classifiers.
self.allImportedElements->select ( re |
re.oclIsKindOf (Association) )->forAll ( r1, r2 : Association |
(r1.connection->size = r2.connection->size and
Sequence {1..r1.connection->size}->forAll ( i |
r1.connection->at (i).type =
r2.connection->at (i).type and
r1.elementImport.alias <> ’’ and
r2.elementImport.alias <> ’’ and
r1.elementImport.alias = r2.elementImport.alias
implies r1 = r2))
and
(r1.connection->size = r2.connection->size and
Sequence {1..r1.connection->size}->forAll ( i |
r1.connection->at (i).type =
r2.connection->at (i).type and
r1.elementImport.alias = ’’ and
r2.elementImport.alias = ’’ and
r1.name = r2.name
implies r1 = r2))
and
(r1.connection->size = r2.connection->size and
Sequence {1..r1.connection->size}->forAll ( i |
r1.connection->at (i).type =
r2.connection->at (i).type and
r1.elementImport.alias <> ’’ and
r2.elementImport.alias = ’’
implies r1.elementImport.alias <> r2.name)))
Additional Operations
[1] The operation contents results in a Set containing the ModelElements owned by or
imported by the Package.
contents : Set(ModelElement)
contents = self.ownedElement->union(self.importedElement)
[2] The operation allImportedElements results in a Set containing the Model
Elements imported by the Package or one of its supertypes.
allImportedElements : Set(ModelElement)
allImportedElements = self.importedElement->union(
self.supertype.oclAsType(Package).allImportedElements->select(
re |
re.elementImport.visibility = #public or
re.elementImport.visibility = #protected))
[3] The operation allContents results in a Set containing the ModelElements owned by
or imported by the Package or one of its ancestors.
OMG-UML V1.3
Model Management
March 2000
2-177
2
allContents : Set(ModelElement);
allContents = self.contents->union(
self.parent.allContents->select(e |
e.elementOwnership.visibility = #public or
e.elementOwnership.visibility = #protected))
Subsystem
[1] For each Operation in an Interface offered by a Subsystem, the Subsystem itself or
at least one contained specification element must have a matching Operation.
self.specification.allOperations->forAll(interOp |
self.allOperations->union
(self.allSpecificationElements->select(specEl|
specEl.oclIsKindOf(Classifier))->forAll(c|
c.allOperations))->exists
( op | op.hasSameSignature(interOp) ) )
[2] The Features of a Subsystem may only be Operations or Receptions.
self.feature->forAll(f | f.oclIsKindOf(Operation) or
f.oclIsKindOf(Reception))
Additional Operations
[1] The operation allSpecificationElements results in a Set containing the Model
Elements specifying the behavior of the Subsystem.
allSpecificationElements : Set(ModelElement)
allSpecificationElements = self.allContents->select(c |
c.elementOwnership.isSpecification )
[2] The operation contents results in a Set containing the ModelElements owned by or
imported by the Subsystem.
contents : Set(ModelElement)
contents = self.ownedElement->union(self.importedElement)
2.14.4 Semantics
2.14.4.1 Package
*
Generalization
Package
2-178
ModelElement
*
*
Figure 2-30
*
Package illustration - shows Package and its environment in the metamodel by
flattening the inheritance hierarchy.
OMG-UML V1.3
March 2000
2
The purpose of the package construct is to provide a general grouping mechanism. A
package cannot be instantiated, thus it has no runtime semantics. In fact, its only
semantics is to define a namespace for its contents. The package construct can be used
for organizing elements for any purpose; the criteria to use for grouping elements
together into one package are not defined within UML.
A package owns a set of model elements, with the implication that if the package is
removed from the model, so are the elements owned by the package. Elements owned
by the same package must have unique names within the package, although elements in
different packages may have the same name.
There may be relationships between elements contained in the same package, and
between an element in one package and an element in a surrounding package at any
level. In other words, elements “see” all the way out through nested levels of packages.
(Note that a package with the stereotype «topLevel» defines the outer limit of this
outward visibility.) Elements in peer packages, however, are encapsulated and are not a
priori visible to each other. The same goes for elements in contained packages (i.e.,
packages do not see “inwards”). There are two ways of making elements in other
packages available: by importing/accessing these other packages, and by defining
generalizations to them.
An import dependency (a Permission dependency with the stereotype «import») from
one package to another means that the first package imports all the elements with
sufficient visibility in the second package. Imported elements are not owned by the
package; however, they may be used in associations, generalizations, attribute types,
and other relationships owned by the package. A package defines the visibility of its
contained elements to be private, protected, or public. Private elements are not
available at all outside the containing package. Protected elements are available only to
packages with generalizations to the package owning the elements, and public elements
are available also to importing and accessing packages. Note that the visibility
mechanism does not restrict the availability of an element to peer elements in the same
package.
When an element is imported by a package it extends the namespace of that package.
It is possible to give an imported element an alias to avoid name conflicts with the
names of the other elements in the namespace, including other imported elements. The
alias will then be the name of that element in the namespace; the element will not
appear under both the alias and its original name. An imported element is by default
private to the importing package. It may, however, be given a more permissive
visibility relative to the importing package (i.e., the local visibility may be defined as
protected or public).
A package with an import dependency to another package imports all the public
contents of the namespace defined by the supplier package, including elements of
packages imported by the supplier package that are given public visibility in the
supplier.
The access dependency (a Permission dependency with the stereotype «access») is
similar to the import dependency in that it makes elements in the supplier package
available to the client package. However, in this case no elements in the supplier
OMG-UML V1.3
Model Management
March 2000
2-179
2
package are included in the namespace of the client. They are simply referred to by
their full pathname when referenced in the accessing package. Clearly, they are not
visible to packages in turn accessing or importing this package.
A package can have generalizations to other packages. This means that the public and
protected elements owned or imported by a package are also available to its children,
and can be used in the same way as any element owned or imported by the children
themselves. Elements made available to another package by the use of a generalization
are referred to by the same name in the child as they are in the parent. Moreover, they
have the same visibility in the child as they have in the parent package.
A package can be used to define a framework, consisting of patterns in the form of
collaborations where (some of) the base elements are the parameters of the patterns.
Apart from that, a framework package is described as an ordinary package.
2.14.4.2 Subsystem
*
G e n e ra liza tio n
S u b s ys te m
*
Mo d e lE le m e n t
*
*
*
O p e ra tio n
In te rfa c e
*
Figure 2-31
Subsystem illustration - shows Subsystem and its environment in the metamodel
by flattening the inheritance hierarchy.
The purpose of the subsystem construct is to provide a grouping mechanism for
specifying a behavioral unit of a physical system. A subsystem may or may not be
instantiable. Apart from defining a namespace for its contents, a non-instantiable
subsystem serves merely as a specification unit for the behavior of its contained model
elements.
The contents of a non-instantiable subsystem have the same semantics as that of a
package, thus it consists of owned elements and imported elements, with unique names
or aliases within the subsystem. The contents of a subsystem may be divided into two
subsets: 1) specification elements and 2) realization elements. The specification
elements, together with the operations of the subsystem, are used for giving an abstract
specification of the behavior offered by the realization elements.
The specification of a subsystem thus consists of the specification subset of the
contents together with the subsystem’s features (operations). It specifies the behavior
performed jointly by instances of classifiers in the realization subset, without revealing
anything about the contents of this subset. The specification is made in terms of model
elements such as use cases and/or operations, where use cases are used to specify
complete sequences performed by the subsystem (i.e., by instances of its contents)
interacting with its surroundings, while operations only specify fragments. However,
the specification subset may include model elements of all kinds (e.g., classes,
interfaces, constraints, relationships between model elements, and state machines).
2-180
OMG-UML V1.3
March 2000
2
A subsystem has no behavior of its own. All behavior defined in the specification of
the subsystem is jointly offered by the elements in the realization subset of the
contents. In general, since subsystems are classifiers, they can appear anywhere a
classifier is expected. It follows that, since the subsystem itself cannot be instantiated
or have any behavior of its own, the requirements posed on the subsystem in the
context where it occurs is fulfilled by its contents. The same is true for associations
(i.e., any association connected to a subsystem is actually connected to one of the
classifiers it contains).
The correspondence between the specification and the realization of a subsystem can
be specified in several ways, including collaborations and «realize» dependencies. A
collaboration specifies how instances of the realization elements cooperate to jointly
perform the behavior specified by a use case or an operation in the subsystem
specification (i.e., how the higher level of abstraction is transformed into the lower
level of abstraction). A stimulus received by an instance of a use case (higher level of
abstraction) corresponds to an instance conforming to one of the classifier roles in the
collaboration receiving that stimulus (lower level of abstraction). This instance
communicates with other instances conforming to other classifier roles in the
collaboration, and together they perform the behavior specified by the use case. All
stimuli that can be received and sent by instances of the use cases are also received and
sent by the conforming instances, although at a lower level of abstraction. Similarly,
application of an operation of the subsystem actually means that a stimulus is sent to a
contained instance which then performs a method.
Subsystems contained in the realization part represent subordinate subsystems (i.e.,
subsystems at the level below in the containment hierarchy, hence owned by the current
subsystem).
Importing and accessing subsystems is done in the same way as packages, using the
visibility property to define whether elements are public, protected, or private to the
subsystem. Both the specification part and the realization part of a subsystem may
include imported elements.
A subsystem can have generalizations to other subsystems. This means that the public
and protected elements in the contents of a subsystem are also available to its heirs. In
a concrete (i.e., non-abstract) subsystem all elements in the specification, including
elements from ancestors, are completely realized by cooperating realization elements,
as specified with, for example, a set of collaborations. This may not be true for abstract
subsystems.
Subsystems may offer a set of interfaces. This means that for each operation defined in
an interface, the subsystem offering the interface must have a matching operation,
either as a feature of the subsystem itself or of a specification element. The
relationship between interface and subsystem is not necessarily one-to-one. A
subsystem may realize several interfaces and one interface may be realized by more
than one subsystem.
The semantics of an instantiable subsystem is similar to the semantics of a composite
class. However, there are no explicit instances of a subsystem; instead, the instances of
the model elements within the subsystem form an implicit composition to an implicit
subsystem instance, whether or not it is actually implemented.
OMG-UML V1.3
Model Management
March 2000
2-181
2
A subsystem can be used to define a framework, consisting of patterns in the form of
collaborations where some of the base elements are the parameters of the patterns.
Furthermore, the specification of a framework subsystem may also be parameterized.
2.14.4.3 Model
ModelElement
Model
Package
*
Figure 2-32
Model illustration - shows Model and its environment in the metamodel by
flattening the inheritance hierarchy.
A model is a description of a physical system with a certain purpose, such as to give a
logical or a behavioral view of the physical system to a certain category of readers.
Examples of different kinds of models are ‘use case,’ ‘analysis,’ ‘design’ and
‘implementation,’ or ‘computational,’ ‘engineering,’ and ‘organizational.’
Thus, a model is an abstraction of a physical system, specifying the physical system
from a certain viewpoint and at a certain level of abstraction, both given by the purpose
of the model. A model is complete in the sense that it covers the whole physical
system, although only those aspects relevant to its purpose (i.e., within the given level
of abstraction and viewpoint) are represented in the model. Furthermore, it describes
the physical system only once (i.e., there is no overlapping) no part of the physical
system is captured more than once in a model.
A model consists of a containment hierarchy where the top-most package or subsystem
represents the boundary of the physical system. This package/subsystem may be given
the stereotype «topLevel» to emphasize its role within the model.
The model may also contain model elements describing relevant parts of the system’s
environment. The environment is typically modeled by actors and their interfaces. As
these are external to the physical system, they reside outside the package/subsystem
hierarchy. They may be collected in a separate package, or owned directly by the
model. These model elements and the model elements representing the physical system
may be associated with each other.
A model may be a specialization of another model. This implies that all elements in
the ancestor are also available in the specialized model under the same name and
interrelated as in the ancestor.
A model may import or access another model. The semantics is the same as for
packages. However, some of the actors of the supplier model may be internal to the
client. This is the case, for example, when the imported model represents a lower layer
of the physical system than the client model represents. Then some of the actors of the
lower layer model represent the upper layer. The conformance requirement is that there
must be classifiers in the client whose instances may play the roles of such actors.
The contents of a model is the transitive closure of its owned model elements, like
packages, classifiers, and relationships, together with inherited and imported elements.
2-182
OMG-UML V1.3
March 2000
2
There may be relationships between model elements in different models, such as
refinement and trace. A trace (i.e., an abstraction dependency with the stereotype
«trace») indicates that the connected (sets of) model elements represent the same
concept. Trace is used for tracing requirements between models, or tracing the impact
on other models of a change to a model element in one model. Thus traces are usually
non-directional dependencies. Relationships between model elements in different
models have no impact on the model elements’ meaning in their containing models
because of the self-containment of models. Note, though, that even if inter-model
relationships do not express any semantics in relation to the models, they may have
semantics in relation to the reader or in deriving model elements as part of the overall
development process.
Models may be nested (e.g., several models of the same physical system may be
collected in a model with the stereotype «systemModel»). The models contained in the
«systemModel» all describe the physical system from different viewpoints, the
viewpoints not necessarily disjoint. The «systemModel» also contains all inter-model
relationships. A «systemModel» makes up a comprehensive specification of the
physical system.
A physical system may be a composition of a set of subordinate physical systems, each
described by its own set of models collected in a separate «systemModel».
2.14.5 Notes
In UML, there are three different ways to model a group of elements contained in
another element; by using a package, a subsystem, or a class. Some pragmatics on their
use include:
•
•
Packages are used when nothing but a plain grouping of elements is required.
•
Classes are used when the container itself should have instances, so that it is
possible to define composite objects.
Subsystems provide grouping suitable for top-down development, since the
requirements on the behavior of their contents can be expressed before the
realization of this behavior is defined. Furthermore, from a bottom-up perspective,
the specification of a subsystem may also be seen as a provider of “high level APIs”
of the subsystem.
As Subsystem and Model both are Packages in the metamodel, all three constructs can
be combined arbitrarily to organize a containment hierarchy.
It is a tool issue to decide how many of the imported elements that must be explicitly
referenced by the importing package (i.e., how many ElementImport links to actually
implement). For example, if all elements have the default visibility (private) and their
original names in the importing package, the information can be retrieved directly from
the imported package.
If a tool does not support the separation of specification and realization elements for
Subsystem, then the value of the isSpecification attribute for ElementOwnership should
be false by default. See Section 2.5, “Core,” on page 2-12 for package, where
ElementOwnership is defined, for details.
OMG-UML V1.3
Model Management
March 2000
2-183
2
Because this is a logical model of the UML, distribution or sharing of models between
tools is not described.
It is expected that tools will manage presentation elements, in particular diagrams, that
are attached to model elements.
2-184
OMG-UML V1.3
March 2000
3
UML Notation Guide
This guide describes the notation for the visual representation of the Unified Modeling
Language (UML). This notation document contains brief summaries of the semantics
of UML constructs, but the UML Semantics chapter must be consulted for full details.
Contents
This chapter contains the following topics.
Topic
Page
Part 1 - Background
“Introduction”
3-4
Part 2 - Diagram Elements
“Graphs and Their Contents”
3-5
“Drawing Paths”
3-6
“Invisible Hyperlinks and the Role of Tools”
3-7
“Background Information”
3-7
“String”
3-7
“Name”
3-9
“Label”
3-9
“Keywords”
3-10
“Expression”
3-11
“Type-Instance Correspondence”
3-14
Part 3 - Model Management
OMG-UML V1.3
March 2000
3-1
3
Topic
Page
“Package”
3-15
Part 4 - General Extension Mechanisms
“Constraint and Comment”
3-25
“Element Properties”
3-27
“Stereotypes”
3-29
Part 5 - Static Structure Diagrams
3-2
“Class Diagram”
3-31
“Object Diagram”
3-32
“Classifier”
3-32
“Class”
3-32
“Name Compartment”
3-35
“List Compartment”
3-35
“Attribute”
3-38
“Operation”
3-41
“Type vs. Implementation Class”
3-44
“Interfaces”
3-46
“Parameterized Class (Template)”
3-48
“Bound Element”
3-50
“Utility”
3-52
“Metaclass”
3-52
“Class Pathnames”
3-54
“Accessing or Importing a Package”
3-55
“Object”
3-57
“Composite Object”
3-60
“Association”
3-61
“Binary Association”
3-61
“Association End”
3-64
“Multiplicity”
3-68
“Qualifier”
3-69
“Association Class”
3-70
“N-ary Association”
3-72
“Composition”
3-73
OMG-UML V1.3
March 2000
3
Topic
Page
“Link”
3-76
“Generalization”
3-78
“Dependency”
3-82
“Derived Element”
3-85
Part 6 - Use Case Diagrams
“Use Case Diagram”
3-87
“Use Case”
3-89
“Actor”
3-90
“Use Case Relationships”
3-90
Part 7 - Sequence Diagrams
“Kinds of Interaction Diagrams”
3-93
“Sequence Diagram”
3-94
“Object Lifeline”
3-100
“Activation”
3-101
“Message and Stimulus”
3-102
“Transition Times”
3-104
Part 8 - Collaboration Diagrams
“Collaboration”
3-105
“Collaboration Diagram”
3-107
“Pattern Structure”
3-110
“Collaboration Contents”
3-112
“Interactions”
3-113
“Collaboration Roles”
3-114
“Multiobject”
3-117
“Active object”
3-118
“Message and Stimulus”
3-102
“Creation/Destruction Markers”
3-125
Part 9 - Statechart Diagrams
“Statechart Diagram”
3-126
“State”
3-127
“Composite States”
3-130
“Events”
3-132
OMG-UML V1.3
March 2000
3-3
3
Topic
Page
“Simple Transitions”
3-135
“Transitions to and from Concurrent States”
3-136
“Transitions to and from Composite States”
3-137
“Factored Transition Paths”
3-140
“Submachine States”
3-142
“Synch States”
3-144
Part 10 - Activity Diagrams
“Activity Diagram”
3-145
“Action State”
3-148
“Decisions”
3-150
“Swimlanes”
3-151
“Action-Object Flow Relationships”
3-153
“Control Icons”
3-155
Part 11 - Implementation Diagrams
“Component Diagram”
3-159
“Deployment Diagram”
3-161
“Node”
3-162
“Component”
3-164
Part 1 - Background
3.1 Introduction
This chapter is arranged in parts according to semantic concepts subdivided by
diagram types. Within each diagram type, model elements that are found on that
diagram and their representation are listed. Note that many model elements are usable
in more than one diagram. An attempt has been made to place each description where
it is used the most, but be aware that the document involves implicit cross-references
and that elements may be useful in places other than the section in which they are
described. Be aware also that the document is nonlinear: there are forward references
in it. It is not intended to be a teaching document that can be read linearly, but a
reference document organized by affinity of concept.
Each part of this chapter is divided into sections, roughly corresponding to important
model elements and notational constructs. Note that some of these constructs are used
within other constructs. Do not be misled by the flattened structure of the chapter.
Within each section the following subsections may be found:
3-4
OMG-UML V1.3
March 2000
3
•
Semantics: Brief summary of semantics. For a fuller explanation and discussion of
fine points, see the UML Semantics chapter in this document.
•
Notation: Explains the notational representation of the semantic concept (“forward
mapping to notation”).
•
Presentation options: Describes various options in presenting the model
information, such as the ability to suppress or filter information, alternate ways of
showing things, and suggestions for alternate ways of presenting information within
a tool.
Dynamic tools need the freedom to present information in various ways and the
authors do not want to restrict this excessively. In some sense, we are defining the
“canonical notation” that printed documents show, rather than the “screen notation.”
The ability to extend the notation can lead to unintelligible dialects, so we hope this
freedom will be used in intuitive ways. The authors have not sought to eliminate all
the ambiguity that some of these presentation options may introduce, because the
presence of the underlying model in a dynamic tool serves to easily disambiguate
things. Note that a tool is not supposed to pick just one of the presentation options
and implement it. Tools should offer users the options of selecting among various
presentation options, including some that are not described in this document.
•
Style guidelines: Include suggestions for the use of stylistic markers such as: fonts,
naming conventions, and arrangement of symbols that are not explicitly part of the
notation, but that help to make diagrams more readable. These are similar to text
indentation rules in C++ or Smalltalk. Not everyone will choose to follow these
suggestions, but the use of some consistent guidelines of your own choosing is
recommended in any case.
•
Example: Shows samples of the notation. String and code examples are given in the
following font: This is a string sample.
Part 2 - Diagram Elements
3.2 Graphs and Their Contents
Most UML diagrams and some complex symbols are graphs containing nodes
connected by paths. The information is mostly in the topology, not in the size or
placement of the symbols (there are some exceptions, such as a sequence diagram with
a metric time axis). There are three kinds of visual relationships that are important:
1. connection (usually of lines to 2-d shapes),
2. containment (of symbols by 2-d shapes with boundaries), and
3. visual attachment (one symbol being “near” another one on a diagram).
These visual relationships map into connections of nodes in a graph, the parsed form of
the notation.
OMG-UML V1.3
Graphs and Their Contents
March 2000
3-5
3
UML notation is intended to be drawn on 2-dimensional surfaces. Some shapes are 2dimensional projections of 3-d shapes (such as cubes), but they are still rendered as
icons on a 2-dimensional surface. In the near future, true 3-dimensional layout and
navigation may be possible on desktop machines; however, it is not currently practical.
There are basically four kinds of graphical constructs that are used in UML notation.
1. Icons - An icon is a graphical figure of a fixed size and shape. It does not expand to
hold contents. Icons may appear within area symbols, as terminators on paths or as
standalone symbols that may or may not be connected to paths.
2. 2-d Symbols - Two-dimensional symbols have variable height and width and they
can expand to hold other things, such as lists of strings or other symbols. Many of
them are divided into compartments of similar or different kinds. Paths are
connected to two-dimensional symbols by terminating the path on the boundary of
the symbol. Dragging or deleting a 2-d symbol affects its contents and any paths
connected to it.
3. Paths - Sequences of line segments whose endpoints are attached. Conceptually a
path is a single topological entity, although its segments may be manipulated
graphically. A segment may not exist apart from its path. Paths are always attached
to other graphic symbols at both ends (no dangling lines). Paths may have
terminators, that is, icons that appear in some sequence on the end of the path and
that qualify the meaning of the path symbol.
4. Strings - Present various kinds of information in an “unparsed” form. UML assumes
that each usage of a string in the notation has a syntax by which it can be parsed
into underlying model information. For example, syntaxes are given for attributes,
operations, and transitions. These syntaxes are subject to extension by tools as a
presentation option. Strings may exist as singular elements of symbols or
compartments of symbols, as elements in lists (in which case the position in the list
conveys information), as labels attached to symbols or paths, or as stand-alone
elements on a diagram.
3.3 Drawing Paths
A path consists of a series of line segments whose endpoints coincide. The entire path
is a single topological unit. Line segments may be orthogonal lines, oblique lines, or
curved lines. Certain common styles of drawing lines exist: all orthogonal lines, or all
straight lines, or curves only for bevels. The line style can be regarded as a tool
restriction on default line input. When line segments cross, it may be difficult to know
which visual piece goes with which other piece; therefore, a crossing may optionally
be shown with a small semicircular jog by one of the segments to indicate that the
paths do not intersect or connect (as in an electrical circuit diagram).
In some relationships (such as aggregation and generalization) several paths of the
same kind may connect to a single symbol. In some circumstances (described for the
particular relationship) the line segments connected to the symbol can be combined
into a single line segment, so that the path from that symbol branches into several
3-6
OMG-UML V1.3
March 2000
3
paths in a kind of tree. This is purely a graphical presentation option; conceptually the
individual paths are distinct. This presentation option may not be used when the
modeling information on the segments to be combined is not identical.
3.4 Invisible Hyperlinks and the Role of Tools
A notation on a piece of paper contains no hidden information. A notation on a
computer screen may contain additional invisible hyperlinks that are not apparent in a
static view, but that can be invoked dynamically to access some other piece of
information, either in a graphical view or in a textual table. Such dynamic links are as
much a part of a dynamic notation as the visible information, but this guide does not
prescribe their form. We regard them as a tool responsibility. This document attempts
to define a static notation for the UML, with the understanding that some useful and
interesting information may show up poorly or not at all in such a view. On the other
hand, we do not know enough to specify the behavior of all dynamic tools, nor do we
want to stifle innovation in new forms of dynamic presentation. Eventually some of the
dynamic notations may become well enough established to standardize them, but we
do not feel that we should do so now.
3.5 Background Information
3.5.1 Presentation Options
Each appearance of a symbol for a class on a diagram or on different diagrams may
have its own presentation choices. For example, one symbol for a class may show the
attributes and operations and another symbol for the same class may suppress them.
Tools may provide style sheets attached either to individual symbols or to entire
diagrams. The style sheets would specify the presentation choices. (Style sheets would
be applicable to most kinds of symbols, not just classes.)
Not all modeling information is presented most usefully in a graphical notation. Some
information is best presented in a textual or tabular format. For example, much detailed
programming information is best presented as text lists. The UML does not assume
that all of the information in a model will be expressed as diagrams; some of it may
only be available as tables. This document does not attempt to prescribe the format of
such tables or of the forms that are used to access them, because the underlying
information is adequately described in the UML metamodel and the responsibility for
presenting tabular information is a tool responsibility. It is assumed that hidden links
may exist from graphical items to tabular items.
3.6 String
A string is a sequence of characters in some suitable character set used to display
information about the model. Character sets may include non-Roman alphabets and
characters.
OMG-UML V1.3
Invisible Hyperlinks and the Role of Tools
March 2000
3-7
3
3.6.1 Semantics
Diagram strings normally map underlying model strings that store or encode
information about the model, although some strings may exist purely on the diagrams.
UML assumes that the underlying character set is sufficient for representing multibyte
characters in various human languages; in particular, the traditional 8-bit ASCII
character set is insufficient. It is assumed that the tool and the computer manipulate
and store strings correctly, including escape conventions for special characters, and this
document will assume that arbitrary strings can be used without further fuss.
3.6.2 Notation
A string is displayed as a text string graphic. Normal printable characters should be
displayed directly. The display of nonprintable characters is unspecified and platformdependent. Depending on purpose, a string might be shown as a single-line entity or as
a paragraph with automatic line breaks.
Typeface and font size are graphic markers that are normally independent of the string
itself. They may code for various model properties, some of which are suggested in
this document and some of which are left open for the tool or the user.
3.6.3 Presentation Options
Tools may present long strings in various ways, such as truncation to a fixed size,
automatic wrapping, or insertion of scroll bars. It is assumed that there is a way to
obtain the full string dynamically.
3.6.4 Example
BankAccount
integrate (f: Function, from: Real, to: Real)
{ author = “Joe Smith”, deadline = 31-March-1997, status = analysis }
The purpose of the shuffle operation is nominally to put the cards into a random
configuration. However, to more closely capture the behavior of physical decks,
in which blocks of cards may stick together during several riffles, the operation is
actually simulated by cutting the deck and merging the cards with an imperfect
merge.
3.6.5 Mapping
A graphic string maps into a string within a model element. The mapping depends on
context. In some circumstances, the visual string is parsed into multiple model
elements. For example, an operation signature is parsed into its various fields. Further
details are given with each kind of symbol.
3-8
OMG-UML V1.3
March 2000
3
3.7 Name
3.7.1 Semantics
A name is a string that is used to identify a model element uniquely within some
scope. A pathname is used to find a model element starting from the root of the system
(or from some other point). A name is a selector (qualifier) within some scope—the
scope is made clear in this document for each element that can be named.
A pathname is a series of names linked together by a delimiter (such as ‘::’). There are
various kinds of pathnames described in this document, each in its proper place and
with its particular delimiter.
3.7.2 Notation
A name is displayed as a text string graphic. Normally a name is displayed on a single
line and will not contain nonprintable characters. Tools and languages may impose
reasonable limits on the length of strings and the character set they use for names,
possibly more restrictive than those for arbitrary strings, such as comments.
3.7.3 Example
Names
BankAccount
integrate
controller
abstract
this_is_a_very_long_name_with_underscores
Pathname
MathPak::Matrices::BandedMatrix
3.7.4 Mapping
Maps to the name of a model element. The mapping depends on context, as with
String. Further details are given with the particular element.
3.8 Label
A label is a string that is attached to a graphic symbol.
OMG-UML V1.3
Name
March 2000
3-9
3
3.8.1 Semantics
A label is a term for a particular use of a string on a diagram. It is purely a notational
term.
3.8.2 Notation
A label is a string that is attached graphically to another symbol on a diagram. Visually
the attachment normally is by containment of the string (in a closed region) or by
placing the string near the symbol. Sometimes the string is placed in a definite position
(such as below a symbol) but most of the time the statement is that the string must be
“near” the symbol. A tool maintains an explicit internal graphic linking between a
label and a graphic symbol, so that the label drags with the symbol, but the final
appearance of the diagram is a matter of aesthetic judgment and should be made so
that there is no confusion about which symbol a label is attached to. Although the
attachment may not be obvious from a visual inspection of a diagram, the attachment
is clear and unambiguous at the graphic level (and poses no ambiguity in the semantic
mapping).
3.8.3 Presentation Options
A tool may visually show the attachment of a label to another symbol using various
aids (such as a line in a given color, flashing of matched elements, etc.) as a
convenience.
3.8.4 Example
BankAccount
account
Figure 3-1 Attachment by Containment and Attachment by Adjacency
3.9 Keywords
The number of easily-distinguishable visual symbols is limited. The UML notation
makes use of text keywords in places to distinguish variations on a common theme,
including metamodel subclasses of a base class, stereotypes of a metamodel base class,
and groups of list elements. From the user’s perspective, the metamodel distinction
between metamodel subclasses and stereotypes is often unimportant, although it is
important to tool builders and others who implement the metamodel.
3-10
OMG-UML V1.3
March 2000
3
The general notation for the use of a keyword is to enclose it in guillemets («»):
«keyword»
Certain predefined keywords are described in the text of this document. These must be
treated as reserved words in the notation. Others are available for users to employ as
stereotype names. The use of a stereotype name that matches a predefined keyword is
ill-formed.
3.10 Expression
3.10.1 Semantics
Various UML constructs require expressions, which are linguistic formulas that yield
values when evaluated at run-time. These include expressions for types, boolean
values, and numbers. UML does not include an explicit linguistic analyzer for
expressions. Rather, expressions are expressed as strings in a particular language. The
OCL constraint language is used within the UML semantic definition and may also be
used at the user level; other languages (such as programming languages) may also be
used.
UML avoids specifying the syntax for constructing type expressions because they are
so language-dependent. It is assumed that the name of a class or simple data type will
map into a simple Classifier reference, but the syntax of complicated languagedependent type expressions, such as C++ function pointers, is the responsibility of the
specification language.
3.10.2 Notation
An expression is displayed as a string defined in a particular language. The syntax of
the string is the responsibility of a tool and a linguistic analyzer for the language. The
assumption is that the analyzer can evaluate strings at run-time to yield values of the
appropriate type, or can yield semantic structures to capture the meaning of the
expression. For example, a type expression evaluates to a Classifier reference, and a
boolean expression evaluates to a true or false value. The language itself is known to a
modeling tool but is generally implicit on the diagram, under the assumption that the
form of the expression makes its purpose clear.
3.10.3 Example
BankAccount
BankAccount * (*) (Person*, int)
array [1..20] of reference to range (-1.0..1.0) of Real
[ i > j and self.size > i ]
OMG-UML V1.3
Expression
March 2000
3-11
3
3.10.4 Mapping
An expression string maps to an Expression element (possibly a particular subclass of
Expression, such as ObjectSetExpression or TimeExpression).
3.10.5 OCL Expressions
UML includes a definition of the OCL language, which is used to define constraints
within the UML metamodel itself. The OCL language may be supported by tools for
user-written expressions as well. Other possible languages include various computer
languages as well as plain text (which cannot be parsed by a tool, of course, and is
therefore only for human information). The OCL language is defined in the “Object
Constraint Language Specification" chapter.
3.10.6 Selected OCL Notation
Syntax for some common navigational expressions are shown below. These forms can
be chained together. The leftmost element must be an expression for an object or a set
of objects. The expressions are meant to work on sets of values when applicable.
item ‘.’ selector
The selector is the name of an attribute in the item or
the name of the target end of a link attached to the item.
The result is the value of the attribute or the related
object(s). The result is a value or a set of values
depending on the multiplicities of the item and the
association.
item ‘.’ selector ‘[‘ qualifier-value ‘]’
The selector designates a qualified association that
qualifies the item. The qualifier-value is a value for the
qualifier attribute. The result is the related object
selected by the qualifier. Note that this syntax is
applicable to array indexing as a form of qualification.
set ‘->’ ‘select’ ‘(‘ boolean-expression ‘)’
The boolean-expression is written in terms of objects
within the set. The result is the subset of objects in the
set for which the boolean expression is true.
3.10.7 Example
flight.pilot.training_hours > flight.plane.minimum_hours
company.employees−>select (title = “Manager” and self.reports−>size > 10)
3.11 Note
A note is a graphical symbol containing textual information (possibly including
embedded images). It is a notation for rendering various kinds of textual information
from the metamodel, such as constraints, comments, method bodies, and tagged values.
3-12
OMG-UML V1.3
March 2000
3
3.11.1 Semantics
A note is a notational item. It shows textual information within some semantic
element.
3.11.2 Notation
A note is shown as a rectangle with a “bent corner” in the upper right corner. It
contains arbitrary text. It appears on a particular diagram and may be attached to zero
or more modeling elements by dashed lines.
3.11.3 Presentation Options
A note may have a stereotype.
A note with the keyword “constraint” or a more specific stereotype of constraint (such
as the code body for a method) designates a constraint that is part of the model and not
just part of a diagram view. Such a note is the view of a model element (the constraint).
3.11.4 Example
See also Figure 3-15 on page 3-26 for a note symbol containing a constraint.
This model was built
by Alan Wright after
meeting with the
mission planning team.
Figure 3-2 Note
3.11.5 Mapping
A note may represent the textual information in several possible metamodel constructs;
it must be created in context that is known to a tool, and the tool must maintain the
mapping. The string in the note maps to the body of the corresponding modeling
element. A note may represent:
•
•
•
•
a constraint,
a tagged value,
the body of a method, or
other string values within modeling elements.
It may also represent a comment attached directly to a diagram element.
OMG-UML V1.3
Note
March 2000
3-13
3
3.12 Type-Instance Correspondence
A major purpose of modeling is to prepare generic descriptions that describe many
specific items. This is often known as the type-instance dichotomy. Many or most of
the modeling concepts in UML have this dual character, usually modeled by two paired
modeling elements, one represents the generic descriptor and the other the individual
items that it describes. Examples of such pairs in UML include: Class-Object,
Association-Link, Parameter-Value, Operation-Call, and so on.
Although diagrams for type-like elements and instance-like elements are not exactly
the same, they share many similarities. Therefore, it is convenient to choose notation
for each type-instance pair of elements such that the correspondence is visually
apparent immediately. There are a limited number of ways to do this, each with
advantages and disadvantages. In UML, the type-instance distinction is shown by
employing the same geometrical symbol for each pair of elements and by underlining
the name string (including type name, if present) of an instance element. This visual
distinction is generally easily apparent without being overpowering even when an
entire diagram contains instance elements.
p1: Point
Point
x = 3.14
y = 2.718
x: Real
y: Real
rotate (angle: Real)
scale (factor: Real)
:Point
x=1
y = 1.414
Figure 3-3 Classes and Objects
A tool is free to substitute a different graphic marker for instance elements at the user’s
option, such as color, fill patterns, or so on.
Roles (in collaborations) are somewhat between types and instances. Like instances,
they identify distinct occurrences of a single classifier. Like types, they describe a
reusable element that can have many distinct instances. A role is a distinguishable use
of a classifier, but one that is still part of a general description (a collaboration) that
can be used to create many instances. A run-time object may correspond to zero or
more classes and to zero or more roles. The notation for a role permits indication of its
base classifiers. The notation for an instance permits specification of its classifiers, its
roles, or both.
3-14
OMG-UML V1.3
March 2000
3
A role is indicated by a name, colon, and type, not underlined and part of a
collaboration. An instance is indicated by an optional name, optional slash followed by
list of roles, colon, and list of types.
p1/lead: Point
x = 3.14
y = 2.718
lead: Point
tail: Point
p2/lead,tail:Point
x=1
y = 1.414
roles
objects
Figure 3-4 Roles and objects
Part 3 - Model Management
3.13 Package
3.13.1 Semantics
A package is a grouping of model elements. Packages themselves may be nested
within other packages. A package may contain subordinate packages as well as other
kinds of model elements. All kinds of UML model elements can be organized into
packages.
Note that packages own model elements and are the basis for configuration control,
storage, and access control. Each element can be directly owned by a single package,
so the package hierarchy is a strict tree. However, packages can reference other
packages, modeled by using one of the stereotypes «import» and «access» of
Permission dependency, so the usage network is a graph. Other kinds of dependencies
between packages usually imply that one or more dependencies among the elements
exists.
3.13.2 Notation
A package is shown as a large rectangle with a small rectangle (a “tab”) attached to the
left side of the top of the large rectangle. It is the common folder icon.
OMG-UML V1.3
Package
March 2000
3-15
3
The contents of the package may be shown within the large rectangle. Contents may
also be shown by branching lines to contained elements, drawn outside of the package
(see example below). A plus sign (+) within a circle is drawn at the end attached to the
container.
•
If the contents of the package are not shown within the large rectangle, then the
name of the package may be placed within the large rectangle.
•
If the contents of the package are shown within the large rectangle, then the name
of the package may be placed within the tab.
A keyword string may be placed above the package name. The predefined stereotypes
facade, framework, stub, and topLevel are notated within guillemets.
A list of properties may be placed in braces after or below the package name. Example:
{abstract}. See Section 3.17, “Element Properties,” on page 3-27 for details of property
syntax.
The visibility of a package element outside the package may be indicated by preceding
the name of the element by a visibility symbol (‘+’ for public, ‘-’ for private, ‘#’ for
protected).
Relationships may be drawn between package symbols to show relationships between
some of the elements in the packages. An import or access relationship between two
packages is drawn as a dashed arrow with open arrowhead, labeled with the string
«import» or «access», respectively.
Elements from imported or accessed packages may be shown outside the package
symbol. As (public) elements in imported packages are added to the client namespace,
they may alternatively be drawn inside the package symbol.
3.13.3 Presentation Options
A tool may show visibility by a graphic marker, such as color or font.
A tool may also show visibility by selectively displaying those elements that meet a
given visibility level (e.g., all of the public elements only).
A diagram showing a package with contents must not necessarily show all its contents;
it may show a subset of the contained elements according to some criterion.
3.13.4 Style Guidelines
It is expected that packages with large contents will be shown as simple icons with
names, in which the contents may be dynamically accessed by “zooming” to a detailed
view.
3-16
OMG-UML V1.3
March 2000
3
3.13.5 Example
Editor
«import»
Controller
«import»
«import»
Diagram
Elements
«access»
«access»
Domain
Elements
«import»
Graphics
Core
Windowing
System
«import»
MotifCore
Motif
WindowsCore
«import»
Microsoft
Windows
Figure 3-5 Packages and their access and import relationships.
Editor
Controller
Diagram
Elements
Domain
Elements
Figure 3-6 Some of the contents of the Editor package shown in a tree structure.
OMG-UML V1.3
Package
March 2000
3-17
3
3.13.6 Mapping
A package symbol maps into a Package element. The name on the package symbol is
the name of the Package element. If there is a string above the package name other
than «model» or «subsystem», then it maps into a Package element with the
corresponding stereotype. If there is a string «model» or «subsystem», then it maps
into a Model or Subsystem element, respectively.
A relationship icon drawn from the package symbol boundary to another package
symbol maps into a corresponding relationship to the other package element.
A symbol directly contained within the package symbol (i.e., not contained within
another symbol) maps into a model element either owned or referenced by the package
element. The alias used for a referenced element is often its pathname, in which case it
is directly visible from the diagram that the element is not owned by the package. Only
the reference is owned by the current package. Alternatively, a symbol shown outside
the package symbol, attached to one of the symbols within the package symbol,
denotes a referenced model element.
Symbols connected to the package symbol by branching lines with a plus sign at the
end attached to the package symbol, map to elements in the package.
3.14 Subsystem
3.14.1 Semantics
Whereas a package is a generic mechanism for organizing model elements, a
subsystem represents a behavioral unit in the physical system, and hence in the model.
A subsystem offers interfaces and has operations, and its contents may be partitioned
into specification and realization elements. The specification of the subsystem consists
of operations on the subsystem, together with specification elements such as use cases
and state machines.
Subsystems may or may not be instantiable. A non-instantiable subsystem serves
merely as a specification unit for the behavior of its contained model elements.
3.14.2 Notation
A subsystem is notated basically in the same way as a package, with the addition of a
fork symbol placed in the upper right corner of the large rectangle. The name of the
subsystem (together with optional keyword, stereotype, etc.) is placed within the large
rectangle. Optionally, especially if contents of the subsystem is shown within the large
rectangle, the subsystem name and the fork are placed within the tab (the small
rectangle).
An instantiable subsystem has the string «instantiable» above its name.
The large rectangle has three compartments, one for operations and one for each of the
subsets specification elements and realization elements. These are usually shown by
dividing the rectangle by a vertical line, and then dividing the area to the left of this
3-18
OMG-UML V1.3
March 2000
3
line into two compartments by a horizontal line. The operations are shown in the upper
left compartment, the specification elements in the compartment below, and the
realization elements in the right compartment. The latter two compartments are labeled
‘Specification Elements’ and ‘Realization Elements,’ respectively, to avoid potential
ambiguity. The operations compartment is unlabeled. This is the general pattern for
subsystem notation, although there are many different ways to customize it in a
particular diagram, see the Presentation Options and Example below.
Realization Elements
Specification Elements
Figure 3-7 The general pattern for subsystem notation, with three compartments.
The mapping from the realization part to the specification part (i.e., to operations and
specification elements) is drawn using dashed arrows with closed, hollow arrowheads.
For collaborations, the mapping may also be expressed textually.
When a subsystem is shown together with other, peer elements in a diagram, it is often
shown without contents, in which case there are no compartments in the large
rectangle. See the Example below.
3.14.3 Presentation Options
The fork symbol may be replaced by the keyword «subsystem» placed above the name
of the subsystem.
One or more of the compartments may be collapsed or suppressed. In cases where
more than one diagram is used to show all information about a particular subsystem,
each diagram shows a subset of the subsystem’s features and/or contents. Hence,
compartments not relevant in a particular diagram are suppressed.
All contained elements in a subsystem may be shown together in one, non-labeled
compartment (i.e., no visual differentiating between specification elements and
realization elements is done).
Tools may provide alternative ways to differentiate specification elements from
realization elements, such as different colors, using the keyword «specification» for
specification elements.
OMG-UML V1.3
Subsystem
March 2000
3-19
3
As with packages, the contents of a subsystem may be shown using tree notation.
Distinction between specification and realization elements may then be done (e.g., by
having two separate, labeled branches) or by showing the category separately for each
element in the tree as suggested above.
3.14.4 Example
SS1
SS2
SS3
Figure 3-8 An overview diagram showing subsystems with interfaces and their dependencies.
«Interface»
operation1(...) : Type1
Figure 3-9 All contained elements of a subsystem shown together without division into
compartments. Here, the subsystem offers operation1(...) although this is not
explicitly shown.
In Figure 3-9 no visual separation between specification and realization elements is
made. The following three figures are schematic examples where the
specification/realization distinction is explicit. Together these figures constitute an
example of how the basic notation for subsystem can be used to show different “views”
of a subsystem in different diagrams, together giving the whole picture of the
subsystem.
3-20
OMG-UML V1.3
March 2000
3
operation1(...) : Type1
operation2(...) : Type2
operation3(...) : Type3
«Interface»
Specification Elements
«Interface»
operation4(...) : Type4
operation1(...) : Type1
UseCase1
UseCase2
Figure 3-10
First schematic example where the specification/realization distinction is
explicit
Figure 3-10 illustrates that the specification part of a subsystem; compartment for
realization part is suppressed. Implicit from the diagram is that the operation4(...) is
either an operation of a specification element (UseCase1 or UseCase2) or of the
subsystem itself. Furthermore, in cases where no operations are used for the
specification but only contained specification elements, there is no operations
compartment, and vice versa.
Realization Elements
Figure 3-11
Second schematic example where the specification/realization distinction
is explicit
Figure 3-11 shows the realization part of a subsystem; compartments for specification
part (i.e., operations and specification elements) are suppressed. Alternatively,
collaborations could be shown in a separate diagram.
OMG-UML V1.3
Subsystem
March 2000
3-21
3
Realization Elements
operation1(...) : Type1
operation2(...) : Type2
representedOperation:
operation2
operation3(...) : Type3
«Interface»
operation4(...) : Type4
Specification Elements
UseCase1
UseCase2
Figure 3-12
Third schematic example where the specification/realization distinction is
explicit
Note that in Figure 3-12 the mapping between specification part and realization part
shows using all three compartments, but only those realization elements with relevance
to the mapping are shown. The figure also shows examples of different ways to express
the mapping.
3.14.5 Mapping
A subsystem symbol maps into a Subsystem with the given name. The mapping is
analogous to that of package symbols, with the following addition:
A symbol within a compartment of the large rectangle labeled ‘Specification Elements’
or ‘Realization Elements’ is mapped to a specification or realization element of the
subsystem, respectively. An operation signature string within a non-labeled
compartment maps to an operation of the subsystem. Note that a labeled compartment
may coincide with the whole rectangle.
A symbol, that is not an operation signature string, within a non-labeled compartment
maps to an element contained in the subsystem.
A dashed arrow with closed, hollow arrowhead from a symbol denoting a realization
element to a symbol denoting a specification element or an operation maps to a
«realize» relationship between the corresponding elements.
3-22
OMG-UML V1.3
March 2000
3
3.15 Model
3.15.1 Semantics
A model is an abstraction of a physical system, with a certain purpose. It describes the
physical system from a specific viewpoint and at a certain level of abstraction. A
model contains all the model elements needed to represent a physical system
completely by the criteria of this particular model. The model elements in a model are
organized into a package/subsystem hierarchy, where the top-most package/subsystem
represents the boundary of the physical system.
Different models of the same physical system show different aspects of the system,
from different viewpoints and/or levels of abstraction. The pre-defined stereotype
«systemModel» can be applied to a model containing the entire set of models for the
complete physical system.
Relationships between elements in different models have no semantic impact on the
contents of the models because of the self-containment of models. However, they are
useful for tracing refinements and for keeping track of requirements between models.
Relationships between models express refinement, and import.
3.15.2 Notation
A model is notated using the ordinary package symbol with a small triangle in the
upper right corner of the large rectangle. Optionally, especially if contents of the model
is shown within the large rectangle, the triangle may be drawn to the right of the model
name in the tab.
Relationships between models as well as relationships between elements in different
models are shown using the notation for the given kind of relationship. In particular,
trace dependencies are notated with a dashed line, with an optional open arrowhead,
and the keyword «trace».
3.15.3 Presentation Options
A model may be notated as a package, using the ordinary package symbol with the
keyword «model» placed above the name of the model.
OMG-UML V1.3
Model
March 2000
3-23
3
3.15.4 Example
«systemModel»
Analysis
Design
Figure 3-13 A «systemModel» containing an analysis model and a design model.
Figure 3-14
Two examples of containment hierarchies with models and subsystems shown
using branching lines. The left hierarchy is based on Model, whereas the right one
is based on Subsystem.
3.15.5 Mapping
A model symbol maps to a Model with the given name. The mapping is analogous to
that of package symbols.
3UML Notation
Part 4 - General Extension Mechanisms
The elements in this section are general purpose mechanisms that may be applied to
any modeling element. The semantics of a particular use depends on a convention of
the user or an interpretation by a particular constraint language or programming
language; therefore, they constitute an extensibility device for UML.
3-24
OMG-UML V1.3
March 2000
3
3.16 Constraint and Comment
3.16.1 Semantics
A constraint is a semantic relationship among model elements that specifies conditions
and propositions that must be maintained as true; otherwise, the system described by
the model is invalid (with consequences that are outside the scope of UML). Certain
kinds of constraints (such as an association “xor” constraint) are predefined in UML,
others may be user-defined. A user-defined constraint is described in words in a given
language, whose syntax and interpretation is a tool responsibility. A constraint
represents semantic information attached to a model element, not just to a view of it.
A comment is a text string (including references to human-readable documents)
attached directly to a model element. A comment can attach arbitrary textual
information to any model element of presumed general importance but it has no
semantic force. Comments may be used for explaining the reasons for decisions,
among other things.
3.16.2 Notation
A constraint is shown as a text string in braces ( { } ). There is an expectation that
individual tools may provide one or more languages in which formal constraints may
be written. One predefined language for writing constraints is OCL (see the “Object
Constraint Language Specification" chapter); otherwise, the constraint may be written
in natural language. Each constraint is written in a specific language, although the
language is not generally displayed on the diagram (the tool must keep track of it,
however).
For an element whose notation is a text string (such as an attribute), the constraint
string may follow the element text string in braces.
For a list of elements whose notation is a list of text strings (such as the attributes
within a class), a constraint string may appear as an element in the list. The constraint
applies to all succeeding elements of the list until another constraint string list element
or the end of the list. A constraint attached to an individual list element does not
supersede the general constraint, but may augment or modify individual constraints
within the constraint string.
For a single graphical symbol (such as a class or an association path), the constraint
string may be placed near the symbol, preferably near the name of the symbol, if any.
For two graphical symbols (such as two classes or two associations), the constraint is
shown as a dashed arrow from one element to the other element labeled by the
constraint string (in braces). The direction of the arrow is relevant information within
the constraint. The client (tail of the arrow) is mapped to the first position and the
supplier (head of the arrow) is mapped to the second position in the constraint.
OMG-UML V1.3
Constraint and Comment
March 2000
3-25
3
For three or more graphical symbols, the constraint string is placed in a note symbol
and attached to each of the symbols by a dashed line. This notation may also be used
for the other cases. For three or more paths of the same kind (such as generalization
paths or association paths), the constraint may be attached to a dashed line crossing all
of the paths.
A comment is shown as a text string (not enclosed in braces) within a note icon.
Syntax for including comments within other elements (such as expressions or
constraints) are not specified by UML but may be provided by a tool as part of the
expression syntax for a particular language.
3.16.3 Example
∗ Member-of ∗
Person
Committee
{subset}
1
worker
∗
Person
0..1
boss
Chair-of
Represents
an incorporated entity.
∗
employee
∗
employer
0..1
Company
{Person.employer =
Person.boss.employer}
Figure 3-15 Constraints and comment
3.16.4 Mapping
A constraint string is a string enclosed in braces ({ }).
The constraint string maps into the body expression in a Constraint element. The
mapping depends on the language of the expression, which is known to a tool but
generally not displayed on a diagram.
A constraint string following a list entry maps into a Constraint attached to the element
corresponding to the list entry.
3-26
OMG-UML V1.3
March 2000
3
A constraint string represented as a stand-alone list element maps into a separate
Constraint attached to each succeeding model element corresponding to subsequent list
entries (until superseded by another constraint or property string).
A constraint string placed near a graphical symbol must be attached to the symbol by a
hidden link by a tool operating in context. The tool must maintain the graphical linkage
implicitly. The constraint string maps into a Constraint attached to the element
corresponding to the symbol.
A constraint string attached to a dashed arrow maps into a constraint attached to the
two elements corresponding to the symbols connected by the arrow.
A string enclosed in braces in a note symbol maps into a Constraint attached to the
elements corresponding to the symbols connected to the note symbol by dashed lines.
A string (not enclosed in braces) in a note attached to the symbol for an element maps
into a Comment attached to the corresponding element.
3.17 Element Properties
Many kinds of elements have detailed properties that do not have a visual notation. In
addition, users can define new element properties using the tagged value mechanism.
A string may be used to display properties attached to a model element. This includes
properties represented by attributes in the metamodel as well as both predefined and
user-defined tagged values.
3.17.1 Semantics
Note that we use property in a general sense to mean any value attached to a model
element, including attributes, associations, and tagged values. In this sense it can
include indirectly reachable values that can be found starting at a given element. Some
kinds of properties would have syntax within expressions (not specified by UML) but
no explicit UML notation.
A tagged value is a keyword-value pair that may be attached to any kind of model
element (including diagram elements as well as semantic model elements). The
keyword is called a tag. Each tag represents a particular kind of property applicable to
one or many kinds of model elements. Both the tag and the value are encoded as
strings. Tagged values are an extensibility mechanism of UML permitting arbitrary
information to be attached to models. It is expected that most model editors will
provide basic facilities for defining, displaying, and searching tagged values as strings
but will not otherwise use them to extend the UML semantics. It is expected, however,
that back-end tools such as code generators, report writers, and the like will read
tagged values to guide their semantics in flexible ways.
3.17.2 Notation
A property (either a metamodel attribute or a tagged value) is displayed as a commadelimited sequence of property specifications all inside a pair of braces ( { } ).
OMG-UML V1.3
Element Properties
March 2000
3-27
3
A property specification has the form
name = value
where name is the name of a property (metamodel attribute or arbitrary tag) and value
is an arbitrary string that denotes its value. If the type of the property is Boolean, then
the default value is true if the value is omitted. That is, to specify a value of true you
may include just the keyword. To specify a value of false, you omit the name
completely. Properties of other types require explicit values. The syntax for displaying
the value is a tool responsibility in cases where the underlying model value is not a
string or a number.
Note that property strings may be used to display built-in attributes as well as tagged
values.
Boolean properties frequently have the form isName, where name is the name of some
condition that may be true or false. In these cases, the form “name” may usually
appear by itself, without a value, to mean “isName = true.” For example, {abstract} is
the same as {isAbstract = true}.
3.17.3 Presentation Options
A tool may present property specifications on separate lines with or without the
enclosing braces, provided they are marked appropriately to distinguish them from
other information. For example, properties for a class might be listed under the class
name in a distinctive typeface, such as italics or a different font family.
3.17.4 Style Guidelines
It is legal to use strings to specify properties that have graphical notations; however,
such usage may be confusing and should be used with care.
3.17.5 Example
{ author = “Joe Smith”, deadline = 31-March-1997, status = analysis }
{ abstract }
3.17.6 Mapping
Each term within a string maps to either a built-in attribute of a model element or a
tagged value (predefined or user-defined). A tool must enforce the correspondence to
built-in attributes.
3-28
OMG-UML V1.3
March 2000
3
3.18 Stereotypes
3.18.1 Semantics
A stereotype is, in effect, a new class of metamodel element that is introduced at
modeling time. It represents a subclass of an existing metamodel element with the
same form (attributes and relationships) but with a different intent. Generally a
stereotype represents a usage distinction. A stereotyped element may have additional
constraints on it from the base metamodel class. It may also have required tagged
values that add information needed by elements with the stereotype. It is expected that
code generators and other tools will treat stereotyped elements specially. Stereotypes
represent one of the built-in extensibility mechanisms of UML.
3.18.2 Notation
The general presentation of a stereotype is to use the symbol for the metamodel base
element but to place a keyword string above the name of the element (if any). The
keyword string (Section 3.9, “Keywords,” on page 3-10) is the name of the stereotype
within matched guillemets, which are the quotation mark symbols used in French and
certain other languages (for example, «foo»).
Note – A guillemet looks like a double angle-bracket, but it is a single character in
most extended fonts. Most computers have a Character Map utility. Double anglebrackets may be used as a substitute by the typographically challenged.
The keyword string is generally placed above or in front of the name of the model
element being described. The keyword string may also be used as an element in a list,
in which case it applies to subsequent list elements until another stereotype string
replaces it, or an empty stereotype string («») nullifies it. Note that a stereotype name
should not be identical to a predefined keyword applicable to the same element type.
To permit limited graphical extension of the UML notation as well, a graphic icon or a
graphic marker (such as texture or color) can be associated with a stereotype. The
UML does not specify the form of the graphic specification, but many bitmap and
stroked formats exist (and their portability is a difficult problem). The icon can be used
in one of two ways:
1. It may be used instead of, or in addition to, the stereotype keyword string as part of
the symbol for the base model element that the stereotype is based on. For example,
in a class rectangle it is placed in the upper right corner of the name compartment.
In this form, the normal contents of the item can be seen.
2. The entire base model element symbol may be “collapsed” into an icon containing
the element name or with the name above or below the icon. Other information
contained by the base model element symbol is suppressed. More general forms of
icon specification and substitution are conceivable, but we leave these to the
ingenuity of tool builders, with the warning that excessive use of extensibility
capabilities may lead to loss of portability among tools.
OMG-UML V1.3
Stereotypes
March 2000
3-29
3
UML avoids the use of graphic markers, such as color, that present challenges for
certain persons (the color blind) and for important kinds of equipment (such as
printers, copiers, and fax machines). None of the UML symbols require the use of such
graphic markers. Users may use graphic markers freely in their personal work for their
own purposes (such as for highlighting within a tool) but should be aware of their
limitations for interchange and be prepared to use the canonical forms when necessary.
The classification hierarchy of the stereotypes themselves can be displayed on a class
diagram, as described in Section 3.34, “Stereotype,” on page 3-53. This capability is
not required by many modelers who must use existing stereotypes but not define new
kinds of stereotypes.
3.18.3 Example
«control»
PenTracker
«control»
PenTracker
location: Point
location: Point
enable (Mode)
enable (Mode)
PenTracker
location: Point
PenTracker
enable (Mode)
JobManager
«call»
Scheduler
Figure 3-16 Varieties of Stereotype Notation
3.18.4 Mapping
The use of a stereotype keyword maps into the stereotype relationship between the
Element corresponding to the symbol containing the name and the Stereotype of the
given name. The use of a stereotype icon within a symbol maps into the stereotype
relationship between the Element corresponding to the symbol containing the icon and
the Stereotype represented by the symbol. A tool must establish the connection when
the symbol is created and there is no requirement that an icon represent uniquely one
stereotype. The use of a stereotype icon, instead of a symbol, must be created in a
3-30
OMG-UML V1.3
March 2000
3
context in which a tool implies a corresponding model element and a Stereotype
represented by the icon. The element and the stereotype have the stereotype
relationship.
3UML Notation
Part 5 - Static Structure Diagrams
Class diagrams show the static structure of the model, in particular, the things that exist
(such as classes and types), their internal structure, and their relationships to other
things. Class diagrams do not show temporal information, although they may contain
reified occurrences of things that have or things that describe temporal behavior. An
object diagram shows instances compatible with a particular class diagram.
This section discusses classes and their variations, including templates and instantiated
classes, and the relationships between classes (association and generalization) and the
contents of classes (attributes and operations).
3.19 Class Diagram
A class diagram is a graph of Classifier elements connected by their various static
relationships. Note that a “class” diagram may also contain interfaces, packages,
relationships, and even instances, such as objects and links. Perhaps a better name
would be “static structural diagram” but “class diagram” is shorter and well
established.
3.19.1 Semantics
A class diagram is a graphic view of the static structural model. The individual class
diagrams do not represent divisions in the underlying model.
3.19.2 Notation
A class diagram is a collection of (static) declarative model elements, such as classes,
interfaces, and their relationships, connected as a graph to each other and to their
contents. Class diagrams may be organized into packages either with their underlying
models or as separate packages that build upon the underlying model packages.
3.19.3 Mapping
A class diagram does not necessarily match a single semantic entity. A package within
the static structural model may be represented by one or more class diagrams. The
division of the presentation into separate diagrams is for graphical convenience and
does not imply a partitioning of the model itself. The contents of a diagram map into
elements in the static semantic model. If a diagram is part of a package, then its
contents map into elements in the same package (including possible references to
elements accessed or imported from other packages).
OMG-UML V1.3
Class Diagram
March 2000
3-31
3
3.20 Object Diagram
An object diagram is a graph of instances, including objects and data values. A static
object diagram is an instance of a class diagram; it shows a snapshot of the detailed
state of a system at a point in time. The use of object diagrams is fairly limited, mainly
to show examples of data structures.
Tools need not support a separate format for object diagrams. Class diagrams can
contain objects, so a class diagram with objects and no classes is an “object diagram.”
The phrase is useful, however, to characterize a particular usage achievable in various
ways.
3.21 Classifier
Classifier is the metamodel superclass of Class, DataType, and Interface. All of these
have similar syntax and are therefore all notated using the rectangle symbol with
keywords used as necessary. Because classes are most common in diagrams, a
rectangle without a keyword represents a class, and the other subclasses of Classifier
are indicated with keywords. In the sections that follow, the discussion will focus on
Class, but most of the notation applies to the other element kinds as semantically
appropriate and as described later under their own sections.
3.22 Class
A class is the descriptor for a set of objects with similar structure, behavior, and
relationships. The model is concerned with describing the intention of the class, that is,
the rules that define it. The run-time execution provides its extension, that is, its
instances. UML provides notation for declaring classes and specifying their properties,
as well as using classes in various ways. Some modeling elements that are similar in
form to classes (such as interfaces, signals, or utilities) are notated using keywords on
class symbols; some of these are separate metamodel classes and some are stereotypes
of Class. Classes are declared in class diagrams and used in most other diagrams. UML
provides a graphical notation for declaring and using classes, as well as a textual
notation for referencing classes within the descriptions of other model elements.
3.22.1 Semantics
A class represents a concept within the system being modeled. Classes have data
structure and behavior and relationships to other elements.
The name of a class has scope within the package in which it is declared and the name
must be unique (among class names) within its package.
3-32
OMG-UML V1.3
March 2000
3
3.22.2 Basic Notation
A class is drawn as a solid-outline rectangle with three compartments separated by
horizontal lines. The top name compartment holds the class name and other general
properties of the class (including stereotype); the middle list compartment holds a list
of attributes; the bottom list compartment holds a list of operations.
See Section 3.23, “Name Compartment,” on page 3-35 and Section 3.24, “List
Compartment,” on page 3-35 for more details.
3.22.2.1 References
By default a class shown within a package is assumed to be defined within that
package. To show a reference to a class defined in another package, use the syntax
Package-name::Class-name
as the name string in the name compartment. A full pathname can be specified by
chaining together package names separated by double colons (::).
3.22.3 Presentation Options
Either or both of the attribute and operation compartments may be suppressed. A
separator line is not drawn for a missing compartment. If a compartment is suppressed,
no inference can be drawn about the presence or absence of elements in it.
Compartment names can be used to remove ambiguity, if necessary (Section 3.24, “List
Compartment,” on page 3-35).
Additional compartments may be supplied as a tool extension to show other predefined
or user-defined model properties (for example, to show business rules, responsibilities,
variations, events handled, exceptions raised, and so on). Most compartments are
simply lists of strings. More complicated formats are possible, but UML does not
specify such formats; they are a tool responsibility. Appearance of each compartment
should preferably be implicit based on its contents. Compartment names may be used,
if needed.
Tools may provide other ways to show class references and to distinguish them from
class declarations.
A class symbol with a stereotype icon may be “collapsed” to show just the stereotype
icon, with the name of the class either inside the class or below the icon. Other
contents of the class are suppressed.
3.22.4 Style Guidelines
• Center class name in boldface.
• Center keyword (including stereotype names) in plain face within guillemets above
class name.
•
Begin class names with an uppercase letter.
OMG-UML V1.3
Class
March 2000
3-33
3
•
•
•
Left justify attributes and operations in plain face.
Begin attribute and operation names with a lowercase letter.
Show the names of abstract classes or the signatures of abstract operations in italics.
As a tool extension, boldface may be used for marking special list elements (for
example, to designate candidate keys in a database design). This might encode some
design property modeled as a tagged value, for example.
Show full attributes and operations when needed and suppress them in other contexts
or references.
3.22.5 Example
Window
Window
size: Area
visibility: Boolean
display ()
hide ()
Figure 3-17
Window
{abstract,
author=Joe,
status=tested}
+size: Area = (100,100)
#visibility: Boolean = invisible
+default-size: Rectangle
#maximum-size: Rectangle
-xptr: XWindow*
+display ()
+hide ()
+create ()
-attachXWindow(xwin:Xwindow*)
Class Notation: Details Suppressed, Analysis-level Details,
Implementation-level Details
3.22.6 Mapping
A class symbol maps into a Class element within the package that owns the diagram.
The name compartment contents map into the class name and into properties of the
class (built-in attributes or tagged values). The attribute compartment maps into a list
of Attributes of the Class. The operation compartment maps into a list of Operations of
the Class.
The property string {location=name} maps into an implementationLocation association
to a Component. The name is the name of the containing Component.
3-34
OMG-UML V1.3
March 2000
3
3.23 Name Compartment
3.23.1 Notation
The name compartment displays the name of the class and other properties in up to
three sections:
An optional stereotype keyword may be placed above the class name within guillemets,
and/or a stereotype icon may be placed in the upper right corner of the compartment.
The stereotype name must not match a predefined keyword.
The name of the class appears next. If the class is abstract, its name appears in italics.
Note that any explicit specification of generalization status takes precedence over the
name font.
A list of strings denoting properties (metamodel attributes or tagged values) may be
placed in braces below the class name. The list may show class-level attributes for
which there is no UML notation and it may also show tagged values. The presence of
a keyword for a Boolean type without a value implies the value true. For example, a
leaf class shows the property “{leaf}”.
The stereotype and property list are optional.
«controller»
PenTracker
{ leaf, author=”Mary Jones”}
Figure 3-18 Name Compartment
3.23.2 Mapping
The contents of the name compartment map into the name, stereotype, and various
properties of the Class represented by the class symbol.
3.24 List Compartment
3.24.1 Notation
A list compartment holds a list of strings, each of which is the encoded representation
of a feature, such as an attribute or operation. The strings are presented one to a line
with overflow to be handled in a tool-dependent manner. In addition to lists of
attributes or operations, optional lists can show other kinds of predefined or userdefined values, such as responsibilities, rules, or modification histories. UML does not
define these optional lists. The manipulation of user-defined lists is tool-dependent.
OMG-UML V1.3
Name Compartment
March 2000
3-35
3
The items in the list are ordered and the order may be modified by the user. The order
of the elements is meaningful information and must be accessible within tools (for
example, it may be used by a code generator in generating a list of declarations). The
list elements may be presented in a different order to achieve some other purpose (for
example, they may be sorted in some way). Even if the list is sorted, the items maintain
their original order in the underlying model. The ordering information is merely
suppressed in the view.
An ellipsis ( . . . ) as the final element of a list or the final element of a delimited
section of a list indicates that additional elements in the model exist that meet the
selection condition, but that are not shown in that list. Such elements may appear in a
different view of the list.
3.24.1.1 Group properties
A property string may be shown as an element of the list, in which case it applies to all
of the succeeding list elements until another property string appears as a list element.
This is equivalent to attaching the property string to each of the list elements
individually. The property string does not designate a model element. Examples of this
usage include indicating a stereotype and specifying visibility. Keyword strings may
also be used in a similar way to qualify subsequent list elements.
3.24.1.2 Compartment name
A compartment may display a name to indicate which kind of compartment it is. The
name is displayed in a distinctive font centered at the top of the compartment. This
capability is useful if some compartments are omitted or if additional user-defined
compartments are added. For a Class, the predefined compartments are named
attributes and operations. An example of a user-defined compartment might be
requirements. The name compartment in a class must always be present; therefore, it
does not require or permit a compartment name.
3.24.2 Presentation Options
A tool may present the list elements in a sorted order, in which case the inherent
ordering of the elements is not visible. A sort is based on some internal property and
does not indicate additional model information. Example sort rules include:
•
•
•
alphabetical order,
ordering by stereotype (such as constructors, destructors, then ordinary methods),
ordering by visibility (public, then protected, then private).
The elements in the list may be filtered according to some selection rule. The
specification of selection rules is a tool responsibility. The absence of items from a
filtered list indicates that no elements meet the filter criterion, but no inference can be
drawn about the presence or absence of elements that do not meet the criterion.
However, the ellipsis notation is available to show that invisible elements exist. It is a
3-36
OMG-UML V1.3
March 2000
3
tool responsibility whether and how to indicate the presence of either local or global
filtering, although a stand-alone diagram should have some indication of such filtering
if it is to be understandable.
If a compartment is suppressed, no inference can be drawn about the presence or
absence of its elements. An empty compartment indicates that no elements meet the
selection filter (if any).
Note that attributes may also be shown by composition (see Figure 3-36 on page 3-75).
3.24.3 Example
Rectangle
p1:Point
p2:Point
«constructor»
Rectangle(p1:Point, p2:Point)
«query»
area (): Real
aspect (): Real
...
«update»
move (delta: Point)
scale (ratio: Real)
...
Figure 3-19 Stereotype Keyword Applied to Groups of List Elements
OMG-UML V1.3
List Compartment
March 2000
3-37
3
Reservation
operations
guarantee()
cancel ()
change (newDate: Date)
responsibilities
bill no-shows
match to available rooms
exceptions
invalid credit card
Figure 3-20 Compartments with Names
3.24.4 Mapping
The entries in a list compartment map into a list of ModelElements, one for each list
entry. The ordering of the ModelElements matches the list compartment entries (unless
the list compartment is sorted in some way). In this case, no implication about the
ordering of the Elements can be made (the ordering can be seen by turning off sorting).
However, a list entry string that is a stereotype indication (within guillemets) or a
property indication (within braces) does not map into a separate ModelElement.
Instead, the corresponding property applies to each subsequent ModelElement until the
appearance of a different stand-alone stereotype or property indicator. The property
specifications are conceptually duplicated for each list Element, although a tool might
maintain an internal mechanism to store or modify them together. The presence of an
ellipsis (“...”) as a list entry implies that the semantic model contains at least one
Element with corresponding properties that is not visible in the list compartment.
3.25 Attribute
Strings in the attribute compartment are used to show attributes in classes. A similar
syntax is used to specify qualifiers, template parameters, operation parameters, and so
on (some of these omit certain terms).
3.25.1 Semantics
Note that an attribute is semantically equivalent to a composition association; however,
the intent and usage is normally different.
3-38
OMG-UML V1.3
March 2000
3
The type of an attribute is a TypeExpression. It may resolve to a class name or it may
be complex, such as array[String] of Point. In any case, the details of the attribute
type expressions are not specified by UML. They depend on the expression syntax
supported by the particular specification or programming language being used.
3.25.2 Notation
An attribute is shown as a text string that can be parsed into the various properties of
an attribute model element. The default syntax is:
visibility name [ multiplicity ] : type-expression = initial-value { property-string }
•
Where visibility is one of:
+ public visibility
# protected visibility
- private visibility
The visibility marker may be suppressed. The absence of a visibility marker
indicates that the visibility is not shown (not that it is undefined or public). A tool
should assign visibilities to new attributes even if the visibility is not shown. The
visibility marker is a shorthand for a full visibility property specification string.
Visibility may also be specified by keywords (public, protected, private). This form
is used particularly when it is used as an inline list element that applies to an entire
block of attributes.
Additional kinds of visibility might be defined for certain programming languages,
such as C++ implementation visibility (actually all forms of nonpublic visibility are
language-dependent). Such visibility must be specified by property string or by a
tool-specific convention.
•
•
Where name is an identifier string that represents the name of the attribute.
Where [ multiplicity ] shows the multiplicity of the attribute (Section 3.42,
“Multiplicity,” on page 3-68). The term may be omitted, in which case the
multiplicity is 1..1 (exactly one).
•
Where type-expression is a language-dependent specification of the implementation
type of an attribute.
•
Where initial-value is a language-dependent expression for the initial value of a
newly created object. The initial value is optional (the equal sign is also omitted).
An explicit constructor for a new object may augment or modify the default initial
value.
•
Where property-string indicates property values that apply to the element. The
property string is optional (the braces are omitted if no properties are specified).
A class-scope attribute is shown by underlining the name and type expression string;
otherwise, the attribute is instance-scope.
class-scope-attribute
OMG-UML V1.3
Attribute
March 2000
3-39
3
The notation justification is that a class-scope attribute is an instance value in the
executing system, just as an object is an instance value, so both may be designated by
underlining. An instance-scope attribute is not underlined; that is the default.
There is no symbol for whether an attribute is changeable (the default is changeable).
A nonchangeable attribute is specified with the property “{frozen}.”
In the absence of a multiplicity indicator, an attribute holds exactly 1 value.
Multiplicity may be indicated by placing a multiplicity indicator in brackets after the
attribute name, for example:
colors [3]: Color
points [2..*]: Point
Note that a multiplicity of 0..1 provides for the possibility of null values: the absence
of a value, as opposed to a particular value from the range. For example, the following
declaration permits a distinction between the null value and the empty string:
name [0..1]: String
A stereotype keyword in guillemets precedes the entire attribute string, including any
visibility indicators. A property list in braces follows the rest of the attribute string.
3.25.3 Presentation Options
The type expression may be suppressed (but it has a value in the model).
The initial value may be suppressed, and it may be absent from the model. It is a tool
responsibility whether and how to show this distinction.
A tool may show the visibility indication in a different way, such as by using a special
icon or by sorting the elements by group.
A tool may show the individual fields of an attribute as columns rather than a
continuous string.
The syntax of the attribute string can be that of a particular programming language,
such as C++ or Smalltalk. Specific tagged properties may be included in the string.
Particular attributes within a list may be suppressed (see Section 3.24, “List
Compartment,” on page 3-35).
3.25.4 Style Guidelines
Attribute names typically begin with a lowercase letter. Attribute names are in plain
face.
3-40
OMG-UML V1.3
March 2000
3
3.25.5 Example
+size: Area = (100,100)
#visibility: Boolean = invisible
+default-size: Rectangle
#maximum-size: Rectangle
-xptr: XWindowPtr
3.25.6 Mapping
A string entry within the attribute compartment maps into an Attribute within the Class
corresponding to the class symbol. The properties of the attribute map in accordance
with the preceding descriptions. If the visibility is absent, then no conclusion can be
drawn about the Attribute visibilities unless a filter is in effect (e.g., only public
attributes shown); likewise, if the type or initial value are omitted. The omission of an
underline always indicates an instance-scope attribute. The omission of multiplicity
denotes a multiplicity of 1.
Any properties specified in braces following the attribute string map into properties on
the Attribute. In addition, any properties specified on a previous stand-alone property
specification entry apply to the current Attribute (and to others).
3.26 Operation
Entries in the operation compartment are strings that show operations defined on
classes and methods supplied by classes.
3.26.1 Semantics
An operation is a service that an instance of the class may be requested to perform. It
has a name and a list of arguments.
3.26.2 Notation
An operation is shown as a text string that can be parsed into the various properties of
an operation model element. The default syntax is:
visibility name ( parameter-list ) : return-type-expression { property-string }
•
Where visibility is one of:
+ public visibility
# protected visibility
- private visibility
The visibility marker may be suppressed. The absence of a visibility marker
indicates that the visibility is not shown (not that it is undefined or public). The
visibility marker is a shorthand for a full visibility property specification string.
OMG-UML V1.3
Operation
March 2000
3-41
3
Visibility may also be specified by keywords (public, protected, private). This form
is used particularly when it is used as an inline list element that applies to an entire
block of operations.
Additional kinds of visibility might be defined for certain programming languages,
such as C++ implementation visibility (actually all forms of nonpublic visibility are
language-dependent). Such visibility must be specified by property string or by a
tool-specific convention.
•
•
•
Where name is an identifier string.
Where return-type-expression is a language-dependent specification of the
implementation type or types of the value returned by the operation. The colon and
the return-type are omitted if the operation does not return a value (as for C++
void). A list of expressions may be supplied to indicate multiple return values.
Where parameter-list is a comma-separated list of formal parameters, each specified
using the syntax:
•
•
•
•
•
kind name : type-expression = default-value
where kind is in, out, or inout, with the default in if absent.
where name is the name of a formal parameter.
where type-expression is the (language-dependent) specification of an
implementation type.
where default-value is an optional value expression for the parameter, expressed
in and subject to the limitations of the eventual target language.
Where property-string indicates property values that apply to the element. The
property string is optional (the braces are omitted if no properties are specified).
A class-scope operation is shown by underlining the name and type expression string.
An instance-scope operation is the default and is not marked.
An operation that does not modify the system state (one that has no side effects) is
specified by the property “{query};” otherwise, the operation may alter the system
state, although there is no guarantee that it will do so.
The concurrency semantics of an operation are specified by a property string of the
form “{concurrency = name}, where name is one of the names: sequential, guarded,
concurrent. As a shorthand, one of the names may be used by itself in a property string
to indicate the corresponding concurrency value. In the absence of a specification, the
concurrency semantics are unspecified and must therefore be assumed to be sequential
in the worst case.
The top-most appearance of an operation signature declares the operation on the class
(and inherited by all of its descendents). If this class does not implement the operation
(i.e., does not supply a method), then the operation may be marked as “{abstract}” or
the operation signature may be italicized to indicate that it is abstract. A subordinate
appearance of the operation signature without the {abstract} property indicates that the
subordinate class implements a method on the operation.
The actual text or algorithm of a method may be indicated in a note attached to the
operation entry.
3-42
OMG-UML V1.3
March 2000
3
If the objects of a class accept and respond to a given signal, an operation entry with
the keyword «signal» indicates that the class accepts the given signal. The syntax is
identical to that of an operation. The response of the object to the reception of the
signal is shown with a state machine. Among other uses, this notation can show the
response of objects of a class to error conditions and exceptions, which should be
modeled as signals.
The specification of operation behavior is given as a note attached to the operation.
The text of the specification should be enclosed in braces if it is a formal specification
in some language (a semantic Constraint); otherwise, it should be plain text if it is just
a natural-language description of the behavior (a Comment).
A stereotype keyword in guillemets precedes the entire operation string, including any
visibility indicators. A property list in braces follows the entire operation string.
3.26.3 Presentation Options
The argument list and return type may be suppressed (together, not separately).
A tool may show the visibility indication in a different way, such as by using a special
icon or by sorting the elements by group.
The syntax of the operation signature string can be that of a particular programming
language, such as C++ or Smalltalk. Specific tagged properties may be included in the
string.
A method body may be shown in a note attached to the operation entry within the
compartment (Figure 3-21). The line is drawn to the string within the compartment.
This approach is useful mainly for showing small method bodies.
PoliceStation
alert ()
1 station
*
BurglarAlarm
isTripped: Boolean = false
{ if isTripped
then station.alert(self)}
report ()
Figure 3-21 Note showing method body
OMG-UML V1.3
Operation
March 2000
3-43
3
3.26.4 Style Guidelines
Operation names typically begin with a lowercase letter. Operation names are in plain
face. An abstract operation may be shown in italics.
3.26.5 Example
+display (): Location
+hide ()
+create ()
-attachXWindow(xwin:Xwindow*)
Figure 3-22 Operation List with a Variety of Operations
3.26.6 Mapping
A string entry within the operation compartment maps into an Operation or a Method
within the Class corresponding to the class symbol. The properties of the operation
map in accordance with the preceding descriptions. See the description of “Attribute”
on page 3-38 for additional details. Parameters without keywords map into Parameters
with kind=in, otherwise according to the keyword. Return value names may into
Parameters with kind=return.
If the entry has the keyword «signal», then it maps into a Reception on the Class
instead.
The topmost appearance of an operation specification in a class hierarchy maps into an
Operation definition in the corresponding Class or Interface. Interfaces do not have
methods. In a Class, each appearance of an operation entry maps into the presence of a
Method in the corresponding Class, unless the operation entry contains the {abstract}
property (including use of conventions such as italics for abstract operations). If an
abstract operation entry appears within a hierarchy in which the same operation has
already been defined in an ancestor, it has no effect but is not an error unless the
declarations are inconsistent.
Note that the operation string entry does not specify the body of a method.
3.27 Type vs. Implementation Class
3.27.1 Semantics
Classes can be stereotyped as Types or Implementation Classes (although they can be
left undifferentiated as well). A Type is used to specify a domain of objects together
with operations applicable to the objects without defining the physical implementation
of those objects. A Type may not include any methods, but it may provide behavioral
specifications for its operations. It may also have attributes and associations that are
defined solely for the purpose of specifying the behavior of the type's operations and
do not represent any actual implementation of state data.
3-44
OMG-UML V1.3
March 2000
3
An Implementation Class defines the physical data structure (for attributes and
associations) and methods of an object as implemented in traditional languages (e.g.,
C++, Smalltalk). An Implementation Class is said to realize a Type if it provides all of
the operations defined for the Type with the same behavior as specified for the Type's
operations. An Implementation Class may realize a number of different Types. Note
that the physical attributes and associations of the Implementation Class do not have to
be the same as those of any Type it realizes and that the Implementation Class may
provide methods for its operations in terms of its physical attributes and associations.
An object may have at most one Implementation Class, since this specifies the physical
implementation of the object. However, an object may conform to multiple different
Types. If the object has an Implementation Class, then that Implementation Class
should realize the Types to which the object conforms. If dynamic classification is
used, then the Types to which an object conforms may actually change dynamically. A
Type may be used in this way to characterize a changeable role that an object may
adopt and later abandon.
Although the use of types and implementation classes is different, their internal
structure is the same and they are both classifiers of objects. Therefore they are
modeled as stereotypes of classes. As such, they both fully support the usual
generalization/specialization and the inheritance of attributes, associations, and
operations. Note, however, the types may only specialize other types and
implementation classes may only specialize other implementation classes. Types and
implementation classes can be related only be realization.
3.27.2 Notation
An undifferentiated class is shown with no stereotype. A type is shown with the
stereotype “«type»”. An implementation class is shown with the stereotype
“«implementationClass».” A tool is also free to allow a default setting for an entire
diagram, in which case all of the class symbols without explicit stereotype indications
map into Classes with the default stereotype. This might be useful for a model that is
close to the programming level.
The implementation of a type by a class is modeled as the Realization relationship,
shown as a dashed line with a solid triangular arrowhead (a dashed “generalization
arrow”). This symbol implies the realizing class provides at least all the operations of
the Type, with conforming behavior, but it does not imply inheritance of structure
(attributes or associations). The generalization hierarchy of a set of classes frequently
parallels the generalization hierarchy of a set of types that they realize, but this is not
mandatory, as long as each class provides the operations of the types that it realizes.
OMG-UML V1.3
Type vs. Implementation Class
March 2000
3-45
3
3.27.3 Example
«type»
Object
«implementationClass»
HashTable
* elements
1 body
«type»
Set
«implementationClass»
HashTableSet
addElement(Object)
removeElement(Object)
testElement(Object):Boolean
addElement(Object)
removeElement(Object)
testElement(Object):Boolean
setTableSize(Integer)
Figure 3-23 Notation for Types and Implementation Classes
3.27.4 Mapping
A class symbol with a stereotype (including “type” and “implementationClass”) maps
into a Class with the corresponding stereotype. A class symbol without a stereotype
maps into a Class with the default stereotype for the diagram (if a default has been
defined by the modeler or tool); otherwise, it maps into a Class with no stereotype. The
realization arrow between two symbols maps into an Abstraction relationship with the
«realize» stereotype between the Classifiers corresponding to the two symbols.
Realization is usually used between a class and an interface, but may also be used
between any two classifiers to show conformance of behavior.
3.28 Interfaces
3.28.1 Semantics
An interface is a specifier for the externally-visible operations of a class, component,
or other classifier (including subsystems) without specification of internal structure.
Each interface often specifies only a limited part of the behavior of an actual class.
3-46
OMG-UML V1.3
March 2000
3
Interfaces do not have implementation. They lack attributes, states, or associations;
they only have operations. (An interface may be the target of a one-way association,
but it may not have an association that it can navigate.) Interfaces may have
generalization relationships. An interface is formally equivalent to an abstract class
with no attributes and no methods and only abstract operations, but Interface is a peer
of Class within the UML metamodel (both are Classifiers).
3.28.2 Notation
An interface is a Classifier and may be shown using the full rectangle symbol with
compartments and the keyword «interface». A list of operations supported by the
interface is placed in the operation compartment. The attribute compartment may be
omitted because it is always empty.
An interface may also be displayed as a small circle with the name of the interface
placed below the symbol. The circle may be attached by a solid line to classifiers that
support it. This indicates that the class provides all of the operations in the interface
type (and possibly more). The operations provided are not shown on the circle
notation; use the full rectangle symbol to show the list of operations. A class that uses
or requires the operations supplied by the interface may be attached to the circle by a
dashed arrow pointing to the circle. The dashed arrow implies that the class requires no
more than the operations specified in the interface; the client class is not required to
actually use all of the interface operations.
The Realization relationship from a classifier to an interface that it supports is shown
by a dashed line with a solid triangular arrowhead (a “dashed generalization symbol”).
This is the same notation used to indicate realization of a type by an implementation
class. In fact, this symbol can be used between any two classifier symbols, with the
meaning that the client (the one at the tail of the arrow) supports at least all of the
operations defined in the supplier (the one at the head of the arrow), but with no
necessity to support any of the data structure of the supplier (attributes and
associations).
OMG-UML V1.3
Interfaces
March 2000
3-47
3
3.28.3 Example
Hashable
String
...
isEqual(String):Boolean
hash():Integer
...
*
contents
HashTable
Comparable
«use»
«interface»
Comparable
isEqual(String):Boolean
hash():Integer
Figure 3-24 Interface Notation on Class Diagram
3.28.4 Mapping
A class rectangle symbol with stereotype «interface», or a circle on a class diagram,
maps into an Interface element with the name given by the symbol. The operation list
of a rectangle symbol maps into the list of Operation elements of the Interface.
A dashed generalization arrow from a class symbol to an interface symbol, or a solid
line connecting a class symbol and an interface circle, maps into an Abstraction
dependency with the «realize» stereotype between the corresponding Classifier and
Interface elements. A dependency arrow from a class symbol to an interface symbol
maps into a Usage dependency between the corresponding Classifier and Interface.
3.29 Parameterized Class (Template)
3.29.1 Semantics
A template is the descriptor for a class with one or more unbound formal parameters.
It defines a family of classes, each class specified by binding the parameters to actual
values. Typically, the parameters represent attribute types; however, they can also
represent integers, other types, or even operations. Attributes and operations within the
template are defined in terms of the formal parameters so they too become bound when
the template itself is bound to actual values.
3-48
OMG-UML V1.3
March 2000
3
A template is not a directly usable class because it has unbound parameters. Its
parameters must be bound to actual values to create a bound form that is a class. Only
a class can be a superclass or the target of an association (a one-way association from
the template to another class is permissible, however). A template may be a subclass of
an ordinary class. This implies that all classes formed by binding it are subclasses of
the given superclass.
Parameterization can be applied to other ModelElements, such as Collaborations or
even entire Packages. The description given here for classes applies to other kinds of
modeling elements in the obvious way.
3.29.2 Notation
A small dashed rectangle is superimposed on the upper right-hand corner of the
rectangle for the class (or to the symbol for another modeling element). The dashed
rectangle contains a parameter list of formal parameters for the class and their
implementation types. The list must not be empty, although it might be suppressed in
the presentation. The name, attributes, and operations of the parameterized class appear
as normal in the class rectangle; however, they may also include occurrences of the
formal parameters. Occurrences of the formal parameters can also occur inside of a
context for the class, for example, to show a related class identified by one of the
parameters.
3.29.3 Presentation Options
The parameter list may be comma-separated or it may be one per line.
Parameters are restricted attributes, shown as strings with the syntax
name : type = default-value
•
•
•
Where name is an identifier for the parameter with scope inside the template.
Where type is a string designating a TypeExpression for the parameter.
Where default-value is a string designating an Expression for a default value that is
used when the corresponding argument is omitted in a Binding. The equal sign and
expression may be omitted, in which case there is no default value and the argument
must be supplied in a Binding.
If the type name is omitted, the parameter type is assumed to be Classifier. The value
supplied for an argument in a Binding must be the name of a Classifier (including a
class or a data type). Other parameter types (such as Integer) must be explicitly
shown. The value supplied for an argument in a Binding must be an actual instance
value of the given kind.
OMG-UML V1.3
Parameterized Class (Template)
March 2000
3-49
3
3.29.4 Example
T,k:Integer
FArray
k..k
T
«bind» (Address,24)
FArray<Point,3>
AddressList
Figure 3-25 Template Notation with Use of Parameter as a Reference
3.29.5 Mapping
The addition of the template dashed box to a symbol causes the addition of the
parameter names in the list as ModelElements within the Namespace of the
ModelElement corresponding to the base symbol (or to the Namespace containing a
ModelElement that is not itself a Namespace). Each of the parameter ModelElements
has the templateParameter association to the base ModelElement.
3.30 Bound Element
3.30.1 Semantics
A template cannot be used directly in an ordinary relationship such as generalization or
association, because it has a free parameter that is not meaningful outside of a scope
that declares the parameter. To be used, a template’s parameters must be bound to
actual values. The actual value for each parameter is an expression defined within the
scope of use. If the referencing scope is itself a template, then the parameters of the
referencing template can be used as actual values in binding the referenced template.
The parameter names in the two templates cannot be assumed to correspond because
they have no scope outside of their respective templates.
3-50
OMG-UML V1.3
March 2000
3
3.30.2 Notation
A bound element is indicated by a text syntax in the name string of an element, as
follows:
Template-name ‘<‘ value-list ‘>’
•
•
Where value-list is a comma-delimited non-empty list of value expressions.
Where Template-name is identical to the name of a template.
For example, VArray<Point,3> designates a class described by the template Varray.
The number and type of values must match the number and type of the template
parameters for the template of the given name.
The bound element name may be used anywhere that an element name of the
parameterized kind could be used. For example, a bound class name could be used
within a class symbol on a class diagram, as an attribute type, or as part of an operation
signature.
Note that a bound element is fully specified by its template; therefore, its content may
not be extended. Declaration of new attributes or operations for classes is not
permitted, for example, but a bound class could be subclassed and the subclass
extended in the usual way.
The relationship between the bound element and its template alternatively may be
shown by a Dependency relationship with the keyword «bind». The arguments are
shown in parentheses after the keyword. In this case, the bound form may be given a
name distinct from the template.
3.30.3 Style Guidelines
The attribute and operation compartments are normally suppressed within a bound
class, because they must not be modified in a bound template.
3.30.4 Example
See Figure 3-25 on page 3-50.
3.30.5 Mapping
The use of the bound element syntax for the name of a symbol maps into a Binding
dependency between the dependent ModelElement (such as Class) corresponding to
the bound element symbol and the provider ModelElement (again, such as Class)
whose name matches the name part of the bound element without the arguments. If the
name does not match a template element or if the number of arguments in the bound
element does not match the number of parameters in the template, then the model is ill
formed. Each argument in the bound element maps into a ModelElement bearing an
argument link to the Binding dependency. An explicitly drawn «bind» dependency
symbol maps to a Binding dependency with arguments as described above.
OMG-UML V1.3
Bound Element
March 2000
3-51
3
3.31 Utility
A utility is a grouping of global variables and procedures in the form of a class
declaration. This is not a fundamental construct, but a programming convenience. The
attributes and operations of the utility become global variables and procedures. A
utility is modeled as a stereotype of a class.
3.31.1 Semantics
The instance-scope attributes and operations of a utility are interpreted as global
attributes and operations. It is inappropriate for a utility to declare class-scope
attributes and operations because the instance-scope members are already interpreted
as being at class scope.
3.31.2 Notation
A utility is shown as the stereotype «utility» of Class. It may have both attributes and
operations, all of which are treated as global attributes and operations.
3.31.3 Example
«utility»
MathPak
sin (Angle): Real
cos (Angle): Real
sqrt (Real): Real
random(): Real
Figure 3-26 Notation for Utility
3.31.4 Mapping
This is not a special symbol. It simply maps into a Class element with the «utility»
stereotype.
3.32 Metaclass
3.32.1 Semantics
A metaclass is a class whose instances are classes.
3-52
OMG-UML V1.3
March 2000
3
3.32.2 Notation
A metaclass is shown as the stereotype «metaclass» of Class.
3.32.3 Mapping
This is not a special symbol. It simply maps into a Class element with the «metaclass»
stereotype.
3.33 Enumeration
3.33.1 Semantics
An Enumeration is a user-defined data type whose instances are a set of user-specified
named enumeration literals. The literals have a relative order but no algebra is defined
on them.
3.33.2 Notation
An Enumeration is shown using the Classifier notation (a rectangle) with the keyword
«enumeration». The name of the Enumeration is placed in the upper compartment. An
ordered list of enumeration literals may be placed, one to a line, in the middle
compartment. Operations defined on the literals may be placed in the lower
compartment. The lower and middle compartments may be suppressed.
3.33.3 Mapping
Maps into an Enumeration with the given list of enumeration literals.
3.34 Stereotype
3.34.1 Semantics
A Stereotype is a user-defined metaelement whose structure matches an existing UML
metaelement.
3.34.2 Notation
A Stereotype is shown using the Classifier notation (a rectangle) with the keyword
«stereotype». The name of the Stereotype is placed in the upper compartment.
Constraints on elements described by the stereotype may be placed in a named
compartment called Constraints. Required tags may be placed in a named
compartment called Tags.
OMG-UML V1.3
Enumeration
March 2000
3-53
3
The base element may be indicated by a property string of the form {baseElement
= name}.
An icon can be defined for the stereotype, but its graphical definition is outside the
scope of UML and must be handled by an editing tool.
3.34.3 Mapping
Maps into a Stereotype with the given constraints and base element.
3.35 Powertype
3.35.1 Semantics
A Powertype is a user-defined metaelement whose instances are classes in the model.
3.35.2 Notation
A Powertype is shown using the Classifier notation (a rectangle) with the stereotype
keyword «powertype». The name of the Powertype is placed in the upper compartment.
Because the elements are ordinary classes, attributes and operations on the powertype
are usually not defined by the user.
The instances of the powertype may be indicated by placing a dashed line across the
parent lines of the classes with the syntax
discriminatorName: powertypeName,
where the powertype name on the line implicitly defines a powertype if one is not
explicitly defined.
3.35.3 Mapping
Maps into a Class with the «powertype» stereotype with the given classes as instances.
3.36 Class Pathnames
3.36.1 Notation
Class symbols (rectangles) serve to define a class and its properties, such as
relationships to other classes. A reference to a class in a different package is notated by
using a pathname for the class, in the form:
package-name :: class-name
3-54
OMG-UML V1.3
March 2000
3
References to classes also appear in text expressions, most notably in type
specifications for attributes and variables. In these places a reference to a class is
indicated by simply including the name of the class itself, including a possible package
name, subject to the syntax rules of the expression.
3.36.2 Example
Banking::CheckingAccount
Deposit
time: DateTime::Time
amount: Currency::Cash
Figure 3-27 Pathnames for Classes in Other Packages
3.36.3 Mapping
A class symbol whose name string is a pathname represents a reference to the Class
with the given name inside the package with the given name. The name is assumed to
be defined in the target package; otherwise, the model is ill formed. A Relationship
from a symbol in the current package (i.e., the package containing the diagram and its
mapped elements) to a symbol in another package is part of the current package.
3.37 Accessing or Importing a Package
3.37.1 Semantics
An element may reference an element contained in a different package. On the package
level, the «access» dependency indicates that the contents of the target package may be
referenced by the client package or packages recursively embedded within it. The
target references must have visibility sufficient for the referents: public visibility for an
unrelated package, public or protected visibility for a descendent of the target package,
or any visibility for a package nested inside the target package (an access dependency
is not required for the latter case). A package nested inside the package making the
access gets the same access.
OMG-UML V1.3
Accessing or Importing a Package
March 2000
3-55
3
Note that an access dependency does not modify the namespace of the client or in any
other way automatically create references; it merely grants permission to establish
references. Note also that a tool could automatically create access dependencies for
users if desired when references are created.
An import dependency grants access and also loads the names with appropriate
visibility in the target namespace into the accessing package (i.e., a pathname is not
necessary to reference them). Such names are not automatically reexported; however, a
name must be explicitly reexported (and may be given a new name and visibility at the
same time).
3.37.2 Notation
The access dependency is displayed as a dependency arrow from the referencing
(client) package to the target (supplier) package containing the target of the references.
The arrow has the stereotype keyword «access». This dependency indicates that
elements within the client package may legally reference elements within the supplier.
The references must also satisfy visibility constraints specified by the supplier. Note
that the dependency does not automatically create any references. It merely grants
permission for them to be established.
The import dependency has the same notation as the access dependency except it has
the stereotype keyword «import».
3-56
OMG-UML V1.3
March 2000
3
3.37.3 Example
Customers
Banking::CheckingAccount
«access»
Banking
CheckingAccount
Figure 3-28 Access Dependency Among Packages
3.37.4 Mapping
This is not a special symbol. It maps into a Permission dependency with the stereotype
«access» or «import» between the two packages.
3.38 Object
3.38.1 Semantics
An object represents a particular instance of a class. It has identity and attribute values.
A similar notation also represents a role within a collaboration because roles have
instance-like characteristics.
3.38.2 Notation
The object notation is derived from the class notation by underlining instance-level
elements, as explained in the general comments in Section 3.12, “Type-Instance
Correspondence,” on page 3-14.
An object shown as a rectangle with two compartments.
OMG-UML V1.3
Object
March 2000
3-57
3
The top compartment shows the name of the object and its class, all underlined, using
the syntax:
objectname : classname
The classname can include a full pathname of enclosing package, if necessary. The
package names precede the classname and are separated by double colons. For
example:
display_window: WindowingSystem::GraphicWindows::Window
A stereotype for the class may be shown textually (in guillemets above the name
string) or as an icon in the upper right corner. The stereotype for an object must match
the stereotype for its class.
To show multiple classes that the object is an instance of, use a comma-separated list
of classnames. These classnames must be legal for multiple classification (i.e., only
one implementation class permitted, but multiple types permitted).
To show the presence of an object in a particular state of a class, use the syntax:
objectname : classname ‘[‘ statename-list ‘]’
The list must be a comma-separated list of names of states that can legally occur
concurrently.
The second compartment shows the attributes for the object and their values as a list.
Each value line has the syntax:
attributename : type = value
The type is redundant with the attribute declaration in the class and may be omitted.
The value is specified as a literal value. UML does not specify the syntax for literal
value expressions; however, it is expected that a tool will specify such a syntax using
some programming language.
The flow relationship between two values of the same object over time can be shown
by connecting two object symbols by a dashed arrow with the keyword «become». If
the flow arrow is on a collaboration diagram, the label may also include a sequence
number to show when the value changes. Similarly, the keyword «copy» can be used to
show the creation of one object from another object value.
3.38.3 Presentation Options
The name of the object may be omitted. In this case, the colon should be kept with the
class name. This represents an anonymous object of the given class given identity by
its relationships.
The class of the object may be suppressed (together with the colon).
The attribute value compartment as a whole may be suppressed.
Attributes whose values are not of interest may be suppressed.
3-58
OMG-UML V1.3
March 2000
3
Attributes whose values change during a computation may show their values as a list of
values held over time. In an interactive tool, they might even change dynamically. An
alternate notation is to show the same object more than once with a «becomes»
relationship between them.
3.38.4 Style Guidelines
Objects may be shown on class diagrams. The elements on collaboration diagrams are
not objects, because they describe many possible objects. They are instead roles that
may be held by object. Objects in class diagrams serve mainly to show examples of
data structures.
3.38.5 Variations
For a language such as Self in which operations can be attached to individual objects at
run time, a third compartment containing operations would be appropriate as a
language-specific extension.
3.38.6 Example
triangle: Polygon
triangle
center = (0,0)
vertices = ((0,0),(4,0),(4,3))
borderColor = black
fillColor = white
:Polygon
triangle: Polygon
scheduler
Figure 3-29 Objects
3.38.7 Mapping
In an object diagram, or within an ordinary class diagram, an object symbol maps into
an Object of the Class (or Classes) given by the classname part of the name string. The
attribute list in the symbol maps into a set of AttributeLinks attached to the Object,
with values given by the value expressions in the attribute list in the symbol. If a list of
states in brackets follows the class name, then this maps into a ClassifierInState with
the named Class as its type and the named States as the states.
OMG-UML V1.3
Object
March 2000
3-59
3
3.39 Composite Object
3.39.1 Semantics
A composite object represents a high-level object made of tightly-bound parts. This is
an instance of a composite class, which implies the composition aggregation between
the class and its parts. A composite object is similar to (but simpler and more restricted
than) a collaboration; however, it is defined completely by composition in a static
model. See Section 3.46, “Composition,” on page 3-73.
3.39.2 Notation
A composite object is shown as an object symbol. The name string of the composite
object is placed in a compartment near the top of the rectangle (as with any object).
The lower compartment holds the parts of the composite object instead of a list of
attribute values. (However, even a list of attribute values may be regarded as the parts
of a composite object, so there is not a great difference.) It is possible for some of the
parts to be composite objects with further nesting.
3.39.3 Example
awindow : Window
horizontalBar:ScrollBar
verticalBar:ScrollBar
moves
surface:Pane
moves
title:TitleBar
Figure 3-30 Composite Objects
3-60
OMG-UML V1.3
March 2000
3
3.39.4 Mapping
A composite object symbol maps into an Object of the given Class with composition
links to each of the Objects and Links corresponding to the class box symbols and to
association path symbols directly contained within the boundary of the composite
object symbol (and not contained within another deeper boundary).
3.39.5 Association
Binary associations are shown as lines connecting two classifier symbols. The lines
may have a variety of adornments to show their properties. Ternary and higher-order
associations are shown as diamonds connected to class symbols by lines.
3.40 Binary Association
3.40.1 Semantics
A binary association is an association among exactly two classifiers (including the
possibility of an association from a classifier to itself).
3.40.2 Notation
A binary association is drawn as a solid path connecting two classifier symbols (both
ends may be connected to the same classifier, but the two ends are distinct). The path
may consist of one or more connected segments. The individual segments have no
semantic significance, but may be graphically meaningful to a tool in dragging or
resizing an association symbol. A connected sequence of segments is called a path.
In a binary association, both ends may attach to the same classifier. The links of such
an association may connect two different instances from the same classifier or one
instance to itself. The latter case may be forbidden by a constraint if necessary.
The end of an association where it connects to a classifier is called an association end.
Most of the interesting information about an association is attached to its ends.
The path may also have graphical adornments attached to the main part of the path
itself. These adornments indicate properties of the entire association. They may be
dragged along a segment or across segments, but must remain attached to the path. It is
a tool responsibility to determine how close association adornments may approach an
end so that confusion does not occur. The following kinds of adornments may be
attached to a path.
3.40.2.1 association name
Designates the (optional) name of the association.
OMG-UML V1.3
Binary Association
March 2000
3-61
3
It is shown as a name string near the path (but not near enough to an end to be
confused with a rolename). The name string may have an optional small black solid
triangle in it. The point of the triangle indicates the direction in which to read the
name. The name-direction arrow has no semantics significance, it is purely descriptive.
The classifiers in the association are ordered as indicated by the name-direction arrow.
Note – There is no need for a name direction property on the association model; the
ordering of the classifiers within the association is the name direction. This convention
works even with n-ary associations.
A stereotype keyword within guillemets may be placed above or in front of the
association name. A property string may be placed after or below the association name.
3.40.2.2 association class symbol
Designates an association that has class-like properties, such as attributes, operations,
and other associations. This is present if, and only if, the association is an association
class. It is shown as a class symbol attached to the association path by a dashed line.
The association path and the association class symbol represent the same underlying
model element, which has a single name. The name may be placed on the path, in the
class symbol, or on both (but they must be the same name).
Logically, the association class and the association are the same semantic entity;
however, they are graphically distinct. The association class symbol can be dragged
away from the line, but the dashed line must remain attached to both the path and the
class symbol.
3.40.3 Presentation Options
When two paths cross, the crossing may optionally be shown with a small semicircular
jog to indicate that the paths do not intersect (as in electrical circuit diagrams).
3.40.4 Style Guidelines
Lines may be drawn using various styles, including orthogonal segments, oblique
segments, and curved segments. The choice of a particular set of line styles is a user
choice.
3.40.5 Options
3.40.5.1 Xor-association
An xor-constraint indicates a situation in which only one of several potential
associations may be instantiated at one time for any single instance. This is shown as a
dashed line connecting two or more associations, all of which must have a classifier in
3-62
OMG-UML V1.3
March 2000
3
common, with the constraint string “{xor}” labeling the dashed line. Any instance of
the classifier may only participate in one of the associations at one time. Each
rolename must be different. (This is simply a predefined use of the constraint notation.)
3.40.6 Example
Company
Job
1..∗
∗
employer employee
Job
salary
Person
boss
0..1
worker ∗
Manages
Person
Account
{Xor}
Corporation
Figure 3-31 Association Notation
3.40.7 Mapping
An association path connecting two class symbols maps to an Association between the
corresponding Classifiers. If there is an arrow on the association name, then the Class
corresponding to the tail of the arrow is the first class and the Classifier corresponding
to the head of the arrow is the second Classifier in the ordering of ends of the
Association; otherwise, the ordering of ends in the association is undetermined. The
adornments on the path map into properties of the Association as described above. The
Association is owned by the package containing the diagram.
OMG-UML V1.3
Binary Association
March 2000
3-63
3
3.41 Association End
3.41.1 Semantics
An association end is simply an end of an association where it connects to a classifier.
It is part of the association, not part of the classifier. Each association has two or more
ends. Most of the interesting details about an association are attached to its ends. An
association end is not a separable element, it is just a mechanical part of an association.
3.41.2 Notation
The path may have graphical adornments at each end where the path connects to the
classifier symbol. These adornments indicate properties of the association related to the
classifier. The adornments are part of the association symbol, not part of the classifier
symbol. The end adornments are either attached to the end of the line, or near the end
of the line, and must drag with it. The following kinds of adornments may be attached
to an association end.
3.41.2.1 multiplicity
Specified by a text syntax, multiplicity may be suppressed on a particular association
or for an entire diagram. In an incomplete model the multiplicity may be unspecified in
the model itself. In this case, it must be suppressed in the notation. See Section 3.42,
“Multiplicity,” on page 3-68.
3.41.2.2 ordering
If the multiplicity is greater than one, then the set of related elements can be ordered or
unordered. If no indication is given, then it is unordered (the elements form a set).
Various kinds of ordering can be specified as a constraint on the association end. The
declaration does not specify how the ordering is established or maintained. Operations
that insert new elements must make provision for specifying their position either
implicitly (such as at the end) or explicitly. Possible values include:
•
unordered - the elements form an unordered set. This is the default and need not be
shown explicitly.
•
ordered - the elements of the set have an ordering, but duplicates are still
prohibited. This generic specification includes all kinds of ordering. This may be
specified by the keyword syntax “{ordered}”.
An ordered relationship may be implemented in various ways; however, this is
normally specified as a language-specified code generation property to select a
particular implementation. An implementation extension might substitute the data
structure to hold the elements for the generic specification “ordered.”
At implementation level, sorting may also be specified. It does not add new semantic
information, but it expresses a design decision:
3-64
OMG-UML V1.3
March 2000
3
•
sorted - the elements are sorted based on their internal values. The actual sorting
rule is best specified as a separate constraint.
3.41.2.3 qualifier
A qualifier is optional, but not suppressible. See Section 3.43, “Qualifier,” on
page 3-69.
3.41.2.4 navigability
An arrow may be attached to the end of the path to indicate that navigation is
supported toward the classifier attached to the arrow. Arrows may be attached to zero,
one, or two ends of the path. To be totally explicit, arrows may be shown whenever
navigation is supported in a given direction. In practice, it is often convenient to
suppress some of the arrows and just show exceptional situations. See Section 3.22.3,
“Presentation Options,” on page 3-33 for details.
3.41.2.5 aggregation indicator
A hollow diamond is attached to the end of the path to indicate aggregation. The
diamond may not be attached to both ends of a line, but it need not be present at all.
The diamond is attached to the class that is the aggregate. The aggregation is optional,
but not suppressible.
If the diamond is filled, then it signifies the strong form of aggregation known as
composition. See Section 3.46, “Composition,” on page 3-73.
3.41.2.6 rolename
A name string near the end of the path. It indicates the role played by the class
attached to the end of the path near the rolename. The rolename is optional, but not
suppressible.
3.41.2.7 interface specifier
The name of a Classifier with the syntax:
‘:’ classifiername , . . .
It indicates the behavior expected of an associated object by the related instance. In
other words, the interface specifier specifies the behavior required to enable the
association. In this case, the actual classifier usually provides more functionality than
required for the particular association (since it may have other responsibilities).
The use of a rolename and interface specifier are equivalent to creating a small
collaboration that includes just an association and two roles, whose structure is defined
by the rolename and attached classifier on the original association. Therefore, the
OMG-UML V1.3
Association End
March 2000
3-65
3
original association and classifiers are a use of the collaboration. The original classifier
must be compatible with the interface specifier (which can be an interface or a type,
among other kinds of classifiers).
If an interface specifier is omitted, then the association may be used to obtain full
access to the associated class.
3.41.2.8 changeability
If the links are changeable (can be added, deleted, and moved), then no indicator is
needed. The property {frozen} indicates that no links may be added, deleted, or moved
from an object (toward the end with the adornment) after the object is created and
initialized. The property {addOnly} indicates that additional links may be added
(presumably, the multiplicity is variable); however, links may not be modified or
deleted.
3.41.2.9 visibility
Specified by a visibility indicator (‘+’, ‘#’, ‘-’ or explicit property name such as
{public}) in front of the rolename. Specifies the visibility of the association traversing
in the direction toward the given rolename. See “Attribute” on page 3-38 for details of
visibility specification.
Other properties can be specified for association ends, but there is no graphical syntax
for them. To specify such properties, use the constraint syntax near the end of the
association path (a text string in braces). Examples of other properties include
mutability.
3.41.3 Presentation Options
If there are two or more aggregations to the same aggregate, they may be drawn as a
tree by merging the aggregation end into a single segment. This requires that all of the
adornments on the aggregation ends be consistent. This is purely a presentation option,
there are no additional semantics to it.
Various options are possible for showing the navigation arrows on a diagram. These
can vary from time to time by user request or from diagram to diagram.
3-66
•
Presentation option 1: Show all arrows. The absence of an arrow indicates
navigation is not supported.
•
Presentation option 2: Suppress all arrows. No inference can be drawn about
navigation. This is similar to any situation in which information is suppressed from
a view.
•
Presentation option 3: Suppress arrows for associations with navigability in both
directions, show arrows only for associations with one-way navigability. In this
case, the two-way navigability cannot be distinguished from no-way navigation;
however, the latter case is normally rare or nonexistent in practice. This is yet
another example of a situation in which some information is suppressed from a
view.
OMG-UML V1.3
March 2000
3
3.41.4 Style Guidelines
If there are multiple adornments on a single association end, they are presented in the
following order, reading from the end of the path attached to the classifier toward the
bulk of the path:
•
•
•
qualifier
aggregation symbol
navigation arrow
Rolenames and multiplicity should be placed near the end of the path so that they are
not confused with a different association. They may be placed on either side of the
line. It is tempting to specify that they will always be placed on a given side of the line
(clockwise or counterclockwise), but this is sometimes overridden by the need for
clarity in a crowded layout. A rolename and a multiplicity may be placed on opposite
sides of the same association end, or they may be placed together (for example, “*
employee”).
3.41.5 Example
1
Polygon
+points
3..∗
Contains
Point
{ordered}
1
GraphicsBundle
1
-bundle
color
texture
density
Figure 3-32 Various Adornments on Association Roles
3.41.6 Mapping
The adornments on the end of an association path map into properties of the
corresponding role of the Association. In general, implications cannot be drawn from
the absence of an adornment (it may simply be suppressed) but see the preceding
descriptions for details. The interface specifier maps into the “specification” rolename
in the AssociationEnd-Classifier association.
OMG-UML V1.3
Association End
March 2000
3-67
3
3.42 Multiplicity
3.42.1 Semantics
A multiplicity item specifies the range of allowable cardinalities that a set may assume.
Multiplicity specifications may be given for roles within associations, parts within
composites, repetitions, and other purposes. Essentially a multiplicity specification is a
subset of the open set of non-negative integers.
3.42.2 Notation
A multiplicity specification is shown as a text string comprising a comma-separated
sequence of integer intervals, where an interval represents a (possibly infinite) range of
integers, in the format:
lower-bound .. upper-bound
where lower-bound and upper-bound are literal integer values, specifying the closed
(inclusive) range of integers from the lower bound to the upper bound. In addition, the
star character (*) may be used for the upper bound, denoting an unlimited upper
bound. In a parameterized context (such as a template), the bounds could be
expressions but they must evaluate to literal integer values for any actual use. Unbound
expressions that do not evaluate to literal integer values are not permitted.
If a single integer value is specified, then the integer range contains the single integer
value.
If the multiplicity specification comprises a single star (*), then it denotes the
unlimited nonnegative integer range, that is, it is equivalent to 0..* (zero or more).
A multiplicity of 0..0 is meaningless as it would indicate that no instances can occur.
Expressions in some specification language can be used for multiplicities, but they
must resolve to fixed integer ranges within the model (i.e., no dynamic evaluation of
expressions, essentially the same rule on literal values as most programming
languages).
3.42.3 Style Guidelines
Preferably, intervals should be monotonically increasing. For example, “1..3,7,10” is
preferable to “7,10,1..3”.
Two contiguous intervals should be combined into a single interval. For example,
“0..1” is preferable to “0,1”.
3.42.4 Example
0..1
1
3-68
OMG-UML V1.3
March 2000
3
0..*
*
1..*
1..6
1..3,7..10,15,19..*
3.42.5 Mapping
A multiplicity string maps into a Multiplicity value with one or more
MultiplicityRanges. Duplications or other nonstandard presentation of the string itself
have no effect on the mapping. Note that Multiplicity is a value and not an object. It
cannot stand on its own, but is the value of some element property.
3.43 Qualifier
3.43.1 Semantics
A qualifier is an attribute or list of attributes whose values serve to partition the set of
instances associated with an instance across an association. The qualifiers are attributes
of the association.
3.43.2 Notation
A qualifier is shown as a small rectangle attached to the end of an association path
between the final path segment and the symbol of the classifier that it connects to. The
qualifier rectangle is part of the association path, not part of the classifier. The qualifier
rectangle drags with the path segments. The qualifier is attached to the source end of
the association. An instance of the source classifier, together with a value of the
qualifier, uniquely select a partition in the set of target classifier instances on the other
end of the association (i.e., every target falls into exactly one partition).
The multiplicity attached to the target end denotes the possible cardinalities of the set
of target instances selected by the pairing of a source instance and a qualifier value.
Common values include:
•
“0..1” (a unique value may be selected, but every possible qualifier value does not
necessarily select a value).
•
“1” (every possible qualifier value selects a unique target instance; therefore, the
domain of qualifier values must be finite).
•
“*” (the qualifier value is an index that partitions the target instances into subsets).
The qualifier attributes are drawn within the qualifier box. There may be one or more
attributes shown one to a line. Qualifier attributes have the same notation as classifier
attributes, except that initial value expressions are not meaningful.
OMG-UML V1.3
Qualifier
March 2000
3-69
3
It is permissible (although somewhat rare), to have a qualifier on each end of a single
association.
3.43.3 Presentation Options
A qualifier may not be suppressed (it provides essential detail whose omission would
modify the inherent character of the relationship).
A tool may use a lighter line for qualifier rectangles than for class rectangles to
distinguish them clearly.
3.43.4 Style Guidelines
The qualifier rectangle should be smaller than the attached class rectangle, although
this is not always practical.
3.43.5 Example
Bank
Chessboard
account #
rank:Rank
file:File
1
1
∗
0..1
Person
Square
Figure 3-33 Qualified Associations
3.43.6 Mapping
The presence of a qualifier box on an end of an association path maps into a list of
qualifier attributes on the corresponding Association Role. Each attribute entry string
inside the qualifier box maps into an Attribute.
3.44 Association Class
3.44.1 Semantics
An association class is an association that also has class properties (or a class that has
association properties). Even though it is drawn as an association and a class, it is
really just a single model element.
3-70
OMG-UML V1.3
March 2000
3
3.44.2 Notation
An association class is shown as a class symbol (rectangle) attached by a dashed line to
an association path. The name in the class symbol and the name string attached to the
association path are redundant and they should be the same. The association path may
have the usual adornments on either end. The class symbol may have the usual
contents. There are no adornments on the dashed line.
3.44.3 Presentation Options
The class symbol may be suppressed. It provides subordinate detail whose omission
does not change the overall relationship. The association path may not be suppressed.
3.44.4 Style Guidelines
The attachment point should not be near enough to either end of the path that it
appears to be attached to the end of the path, or to any of the association end
adornments.
Note that the association path and the association class are a single model element and
have a single name. The name can be shown on the path, the class symbol, or both. If
an association class has only attributes, but no operations or other associations, then
the name may be displayed on the association path and omitted from the association
class symbol to emphasize its “association nature.” If it has operations and other
associations, then the name may be omitted from the path and placed in the class
rectangle to emphasize its “class nature.” In neither case are the actual semantics
different.
3.44.5 Example
Company
1..∗
∗
employer employee
Job
salary
worker ∗
Person
boss
0..1
Manages
Figure 3-34 Association Class
OMG-UML V1.3
Association Class
March 2000
3-71
3
3.44.6 Mapping
An association path connecting two class boxes connected by a dashed line to another
class box maps into a single AssociationClass element. The name of the
AssociationClass element is taken from the association path, the attached class box, or
both (they must be consistent if both are present). The Association properties map from
the association path, as specified previously. The Class properties map from the class
box, as specified previously. Any constraints or properties placed on either the
association path or attached class box apply to the AssociationClass itself; they must
not conflict.
3.45 N-ary Association
3.45.1 Semantics
An n-ary association is an association among three or more classifiers (a single
classifier may appear more than once). Each instance of the association is an n-tuple of
values from the respective classifier. A binary association is a special case with its own
notation.
Multiplicity for n-ary associations may be specified, but is less obvious than binary
multiplicity. The multiplicity on a role represents the potential number of instance
tuples in the association when the other N-1 values are fixed.
An n-ary association may not contain the aggregation marker on any role.
3.45.2 Notation
An n-ary association is shown as a large diamond (that is, large compared to a
terminator on a path) with a path from the diamond to each participant class. The name
of the association (if any) is shown near the diamond. Role adornments may appear on
each path as with a binary association. Multiplicity may be indicated; however,
qualifiers and aggregation are not permitted.
An association class symbol may be attached to the diamond by a dashed line. This
indicates an n-ary association that has attributes, operations, and/or associations.
3.45.3 Style Guidelines
Usually the lines are drawn from the points on the diamond or the midpoint of a side.
3.45.4 Example
This example shows the record of a team in each season with a particular goalkeeper.
It is assumed that the goalkeeper might be traded during the season and can appear
with different teams
3-72
OMG-UML V1.3
March 2000
3
.
Year
season ∗
Team
∗
∗
Player
goalkeeper
team
Record
goals for
goals against
wins
losses
ties
Figure 3-35 Ternary association that is also an association class
3.45.5 Mapping
A diamond attached to some number of class symbols by solid lines maps into an Nary Association whose AssociationEnds are attached to the corresponding Classes. The
ordering of the Classifiers in the Association is indeterminate from the diagram. If a
class box is attached to the diamond by a dashed line, then the corresponding Classifier
supplies the classifier properties for an N-ary AssociationClass.
3.46 Composition
3.46.1 Semantics
Composition is a form of aggregation with strong ownership and coincident lifetime of
part with the whole. The multiplicity of the aggregate end may not exceed one (it is
unshared). See Section 3.41, “Association End,” on page 3-64 for further details.
The parts of a composition may include classes and associations (they may be formed
into AssociationClasses if necessary). The meaning of an association in a composition
is that any tuple of objects connected by a single link must all belong to the same
container object.
OMG-UML V1.3
Composition
March 2000
3-73
3
3.46.2 Notation
Composition may be shown by a solid filled diamond as an association end adornment.
Alternately, UML provides a graphically-nested form that is more convenient for
showing composition in many cases.
Instead of using binary association paths using the composition aggregation
adornment, composition may be shown by graphical nesting of the symbols of the
elements for the parts within the symbol of the element for the whole. A nested classlike element may have a multiplicity within its composite element. The multiplicity is
shown in the upper right corner of the symbol for the part. If the multiplicity mark is
omitted, then the default multiplicity is many. This represents its multiplicity as a part
within the composite classifier. A nested element may have a rolename within the
composition; the name is shown in front of its type in the syntax:
rolename ‘:’ classname
This represents its rolename within its composition association to the composite.
Alternately, composition is shown by a solid-filled diamond adornment on the end of
an association path attached to the element for the whole. The multiplicity may be
shown in the normal way.
Note that attributes are, in effect, composition relationships between a classifier and
the classifiers of its attributes.
An association drawn entirely within a border of the composite is considered to be part
of the composition. Any instances on a single link of it must be from the same
composite. An association drawn such that its path breaks the border of the composite
is not considered to be part of the composition. Any instances on a single link of it
may be from the same or different composites.
Note that the notation for composition resembles the notation for collaboration. A
composition may be thought of as a collaboration in which all of the participants are
parts of a single composite object.
Note that nested notation is not the correct way to show a class declared within another
class. Such a declared class is not a structural part of the enclosing class but merely has
scope within the namespace of the enclosing class, which acts like a package toward
the inner class. Such a namescope containment may be shown by placing a package
symbol in the upper right corner of the class symbol. A tool can allow a user to click
on the package symbol to open the set of elements declared within it.
3.46.3 Design Guidelines
Note that a class symbol is a composition of its attributes and operations. The class
symbol may be thought of as an example of the composition nesting notation (with
some special layout properties). However, attribute notation subordinates the attributes
strongly within the class; therefore, it should be used when the structure and identity of
the attribute objects themselves is unimportant outside the class.
3-74
OMG-UML V1.3
March 2000
3
3.46.4 Example
Window
scrollbar [2]: Slider
title: Header
body: Panel
Window
1
scrollbar
2
Slider
1
1
title
body
1
Header
1
Panel
Window
scrollbar:Slider
2
title:Header
1
body:Panel
1
Figure 3-36 Different Ways to Show Composition
OMG-UML V1.3
Composition
March 2000
3-75
3
3.46.5 Mapping
A class box with an attribute compartment maps into a Class with Attributes. Although
attributes may be semantically equivalent to composition on a deep level, the mapped
model distinguishes the two forms.
A solid diamond on an association path maps into the aggregation-composition
property on the corresponding Association Role.
A class box with contained class boxes maps into a set of composition associations;
that is, one composition association between the Class corresponding to the outer class
box and each of the Classes corresponding to the enclosed class boxes. The
multiplicity of the composite end of each association is 1. The multiplicity of each
constituent end is 1 if not specified explicitly; otherwise, it is the value specified in the
corner of the class box or specified on an association path from the outer class box
boundary to an inner class box.
3.47 Link
3.47.1 Semantics
A link is a tuple (list) of object references. Most commonly, it is a pair of object
references. It is an instance of an association.
3.47.2 Notation
A binary link is shown as a path between two instances. In the case of a link from an
instance to itself, it may involve a loop with a single instance. See Section 3.39.5,
“Association,” on page 3-61 for details of paths.
A rolename may be shown at each end of the link. An association name may be shown
near the path. If present, it is underlined to indicate an instance. Links do not have
instance names, they take their identity from the instances that they relate. Multiplicity
is not shown for links because they are instances. Other association adornments
(aggregation, composition, navigation) may be shown on the link ends.
A qualifier may be shown on a link. The value of the qualifier may be shown in its
box.
3-76
OMG-UML V1.3
March 2000
3
3.47.2.1 Implementation stereotypes
A stereotype may be attached to the link end to indicate various kinds of
implementation. The following stereotypes may be used:
«association»
association (default, unnecessary to specify except
for emphasis)
«parameter»
method parameter
«local»
local variable of a method
«global»
global variable
«self»
self link (the ability of an instance to send a
message to itself)
3.47.2.2 N-ary link
An n-ary link is shown as a diamond with a path to each participating instance. The
other adornments on the association, and the adornments on the association ends, have
the same possibilities as the binary link.
3.47.3 Example
officer
Jill:Person
member
treasurer
member
downhillSkiClub:Club
president
Joe:Person
member
Chris:Person
officer
Figure 3-37 Links
OMG-UML V1.3
Link
March 2000
3-77
3
3.47.4 Mapping
Within an object diagram, each link path maps to a Link between the Instances
corresponding to the connected class boxes. If a name is placed on the link path, then
it is an instance of the given Association (and the rolenames must match or the
diagram is ill formed).
3.48 Generalization
3.48.1 Semantics
Generalization is the taxonomic relationship between a more general element (the
parent) and a more specific element (the child) that is fully consistent with the first
element and that adds additional information. It is used for classes, packages, use
cases, and other elements.
3.48.2 Notation
Generalization is shown as a solid-line path from the child (the more specific element,
such as a subclass) to the parent (the more general element, such as a superclass), with
a large hollow triangle at the end of the path where it meets the more general element.
A generalization path may have a text label called a discriminator that is the name of a
partition of the children of the parent. The child is declared to be in the given partition.
The absence of a discriminator label indicates the “empty string” discriminator, which
is a valid value (the “default” discriminator).
Generalization may be applied to associations as well as classes, although the notation
may be messy because of the multiple lines. An association can be shown as an
association class for the purpose of attaching generalization arrows.
The existence of additional children in the model that are not shown on a particular
diagram may be shown using an ellipsis (. . .) in place of a child.
Note – This does not indicate that additional children may be added in the future. It
indicates that additional children exist right now, but are not being seen. This is a
notational convention that information has been suppressed, not a semantic statement.
3-78
OMG-UML V1.3
March 2000
3
Predefined constraints may be used to indicate semantic constraints among the
children. A comma-separated list of keywords is placed in braces either near the shared
triangle (if several paths share a single triangle) or near a dotted line that crosses all of
the generalization lines involved. The following keywords (among others) may be used
(the following constraints are predefined):
overlapping
An element may have two or more children from the
set as ancestors. An instance may be a direct or
indirect instance of two or more of the children.
disjoint
No element may have two children in the set as
ancestors. No instance may be a direct or indirect
instance of two of the children.
complete
All children have been specified (whether or not
shown). No additional children are expected.
incomplete
Some children have been specified, but the list is
known to be incomplete. There are additional children
that are not yet in the model. This is a statement about
the model itself. Note that this is not the same as the
ellipsis, which states that additional children exist in
the model but are not shown on the current diagram.
The discriminator must be unique among the attributes and association roles of the
given parent. Multiple occurrences of the same discriminator name are permitted and
indicate that the children belong to the same partition.
The use of multiple classification or dynamic classification affects the dynamic
execution semantics of the language, but is not usually apparent from a static model.
3.48.3 Presentation Options
A group of generalization paths for a given parent may be shown as a tree with a
shared segment (including the triangle) to the child, branching into multiple paths to
each child.
If a text label is placed on a generalization triangle shared by several generalization
paths to children, the label applies to all of the paths. In other words, all of the children
share the given properties.
OMG-UML V1.3
Generalization
March 2000
3-79
3
3.48.4 Example
Shape
Separate Target Style
Polygon
Ellipse
...
Spline
Shape
Polygon
Ellipse
Shared Target Style
...
Spline
Figure 3-38 Styles of Displaying Generalizations
3-80
OMG-UML V1.3
March 2000
3
Vehicle
venue
power
power
{overlapping}
WindPowered
Vehicle
venue
MotorPowered
Vehicle
{overlapping}
Land
Vehicle
Water
Vehicle
Sailboat
Truck
Figure 3-39 Generalization with Discriminators and Constraints, Separate Target Style
Tree
{disjoint, incomplete}
species
Oak
Elm
Birch
Figure 3-40 Generalization with Shared Target Style
3.48.5 Mapping
Each generalization path between two element symbols maps into a Generalization
between the corresponding GeneralizableElements. A generalization tree with one
arrowhead and many tails maps into a set of Generalizations, one between each
element corresponding to a symbol on a tail and the single GeneralizableElement
corresponding to the symbol on the head. That is, a tree is semantically
indistinguishable from a set of distinct arrows, it is purely a notational convenience.
OMG-UML V1.3
Generalization
March 2000
3-81
3
Any property string attached to a generalization arrow applies to the Generalization. A
property string attached to the head line segment on a generalization tree represents a
(duplicated) property on each of the individual Generalizations.
The presence of an ellipsis (“...”) as a child node of a given parent indicates that the
semantic model contains at least one child of the given parent that is not visible on the
current diagram. Normally, this indicator will be maintained automatically by an
editing tool.
3.49 Dependency
3.49.1 Semantics
A dependency indicates a semantic relationship between two model elements (or two
sets of model elements). It relates the model elements themselves and does not require
a set of instances for its meaning. It indicates a situation in which a change to the
target element may require a change to the source element in the dependency.
3.49.2 Notation
A dependency is shown as a dashed arrow between two model elements. The model
element at the tail of the arrow (the client) depends on the model element at the
arrowhead (the supplier). The arrow may be labeled with an optional stereotype and an
optional individual name.
It is possible to have a set of elements for the client or supplier. In this case, one or
more arrows with their tails on the clients are connected to the tails of one or more
arrows with their heads on the suppliers. A small dot can be placed on the junction if
desired. A note on the dependency should be attached at the junction point.
The following kinds of Dependency are predefined and may be indicated with
keywords. Note that some of these correspond to actual metamodel classes and others
to stereotypes of metamodel classes. All of these are shown as dashed arrows with
keywords in guillemets. The name column shows the name of the metamodel class or
the informal name of the class with the given keyword stereotype.
3-82
OMG-UML V1.3
March 2000
3
.
Table 3-1 Keyword Descriptions
Keyword
Name
Description
access
Access
The granting of permission for one package to
reference the public elements owned by another
package (subject to appropriate visibility). Maps
into a Permission with the stereotype access.
bind
Binding
A binding of template parameters to actual values
to create a nonparameterized element. See
Section 3.30, “Bound Element,” on page 3-50 for
more details. Maps into a Binding.
derive
Derivation
A computable relationship between one element
and another (one more than one of each). Maps into
an Abstraction with the stereotype derivation.
import
Import
The granting of permission for one package to
reference the public elements of another package,
together with adding the names of the public
elements of the supplier package to the client
package. Maps into a Permission with the
stereotype import.
refine
Refinement
A historical or derivation connection between two
elements with a mapping (not necessarily complete)
between them. A description of the mapping may
be attached to the dependency in a note. Various
kinds of refinement have been proposed and can be
indicated by further stereotyping. Maps into an
Abstraction with the stereotype refinement.
trace
Trace
A historical connection between two elements that
represent the same concept at different levels of
meaning. Maps into an Abstraction with the
stereotype trace.
use
Usage
A situation in which one element requires the
presence of another element for its correct
implementation or functioning. May be stereotyped
further to indicate the exact nature of the
dependency, such as calling an operation of another
class, granting permission for access, and
instantiating an object of another class. Maps into a
Usage. If the keyword is one of the stereotypes of
Usage (call, create, instantiate, send) then it maps
into a Usage with the given stereotype.
OMG-UML V1.3
Dependency
March 2000
3-83
3
3.49.3 Presentation Options
The connection between a note or constraint and the element it applies to is shown by
a dashed line without an arrowhead. This is not a Dependency.
3.49.4 Example
ClassA
ClassD
ClassB
«friend»
«friend»
operationZ()
«instantiate»
«call»
ClassC
«refine»
ClassD
ClassC combines
two logical classes
ClassE
Figure 3-41 Various Dependencies Among Classes
3-84
OMG-UML V1.3
March 2000
3
Controller
«access»
«access»
«access»
Diagram
Elements
«access»
«access»
Domain
Elements
Graphics
Core
Figure 3-42 Dependencies Among Packages
3.49.5 Mapping
A dashed arrow maps into the appropriate kind of Dependency (based on keywords)
between the Elements corresponding to the symbols attached to the ends of the arrow.
The stereotype and the name (if any) attached to the arrow are the stereotype and name
of the Dependency.
3.50 Derived Element
3.50.1 Semantics
A derived element is one that can be computed from another one, but that is shown for
clarity or that is included for design purposes even though it adds no semantic
information.
3.50.2 Notation
A derived element is shown by placing a slash (/) in front of the name of the derived
element, such as an attribute or a rolename.
3.50.3 Style Guidelines
The details of computing a derived element can be specified by a dependency with the
stereotype «derive». Usually it is convenient in the notation to suppress the dependency
arrow and simply place a constraint string near the derived element, although the arrow
can be included when it is helpful.
OMG-UML V1.3
Derived Element
March 2000
3-85
3
3.50.4 Example
Person
birthdate
/age
{age = currentDate - birthdate}
1
Company
1
∗ Department
employer
employer
1
∗
∗
department
WorksForDepartment
Person
/WorksForCompany
{ Person.employer=Person.department.employer }
Figure 3-43 Derived Attribute and Derived Association
3.50.5 Mapping
The presence of a derived adornment (a leading “/” on the symbol name) on a symbol
maps into the attachment of the “derived” tag to the corresponding Element.
3.51 InstanceOf
3.51.1 Semantics
Shows the connection between an instance and its classifier.
3.51.2 Notation
Shown as a dashed arrow with its tail on the instance and its head on the classifier. The
arrow has the keyword «instanceOf».
3.51.3 Mapping
Maps into an instance relationship from the instance to the classifier.
3-86
OMG-UML V1.3
March 2000
3
•
Mapping: Shows the mapping of notation elements to metamodel elements (“reverse
mapping from notation”). This indicates how the notation would be represented as
semantic information. Note that, in general, diagrams are interpreted in a particular
context in which semantic and graphic information is gathered simultaneously. The
assumption is that diagrams are constructed by an editing tool that internalizes the
model as the diagram is constructed. Some semantic constructs have no graphic
notation and would be shown to a user within a tool using a form or table.
3UML Notation
Part 6 - Use Case Diagrams
A use case diagram shows the relationship among actors and use cases within a
system.
3.52 Use Case Diagram
3.52.1 Semantics
Use case diagrams show actors and use cases together with their relationships. The use
cases represent functionality of a system or a classifier, like a subsystem or a class, as
manifested to external interactors with the system or the classifier.
3.52.2 Notation
A use case diagram is a graph of actors, a set of use cases, possibly some interfaces,
and the relationships between these elements. The relationships are associations
between the actors and the use cases, generalizations between the actors, and
generalizations, extends, and includes among the use cases. The use cases may
optionally be enclosed by a rectangle that represents the boundary of the containing
system or classifier.
OMG-UML V1.3
Use Case Diagram
March 2000
3-87
3
3.52.3 Example
Telephone Catalog
Check
status
Place
order
Salesperson
Fill orders
Shipping Clerk
Customer
Establish
credit
Supervisor
Figure 3-44 Use Case Diagram
3.52.4 Mapping
A set of use case ellipses, possibly within a rectangle, with connections to actor
symbols maps to a set of UseCases and Actors corresponding to the use case and actor
symbols, respectively. The rectangle maps onto either a Model with the stereotype
«useCaseModel» containing the set of UseCases and Actors, or to a Classifier, like
Subsystem or Class, containing the set of UseCases. An interface in the diagram is
mapped onto an Interface in the Model, and the connection between the interface and
the actor or use case icons is mapped onto a realization Dependency (an Abstraction
dependency being stereotyped «realize») between the Classifiers. Each generalization
arrow maps onto a Generalization in the model, and each line between an actor symbol
and a use case ellipse maps to an Association between the corresponding Classifiers. A
dashed arrow with the keyword «include» or «extend» maps to an Include or Extend
relationship.
3-88
OMG-UML V1.3
March 2000
3
3.53 Use Case
3.53.1 Semantics
A use case is a kind of classifier representing a coherent unit of functionality provided
by a system, a subsystem, or a class as manifested by sequences of messages
exchanged among the system and one or more outside interactors (called actors)
together with actions performed by the system.
An extension point is a reference to one location within a use case at which action
sequences from other use cases may be inserted. Each extension point has a unique
name within a use case, and a description of the location within the behavior of the use
case.
3.53.2 Notation
A use case is shown as an ellipse containing the name of the use case. An optional
stereotype keyword may be placed above the name and a list of properties included
below the name. As a classifier, a use case may also have compartments displaying
attributes and operations.
Extension points may be listed in a compartment of the use case with the heading
extension points. The description of the locations of the extension point is given in a
suitable form, usually as ordinary text, but can also be given in other forms, like the
name of a state in a state machine, or a precondition or a postcondition.
The behavior of a use case can be described in several different ways, depending on
what is convenient: often plain text is used, but state machines, operations, and
methods are examples of other ways of describing the behavior of the use case.
3.53.3 Presentation Options
The name of the use case may be placed below the ellipse. The name of an abstract use
case may be shown in italics.
The ellipse may contain or suppress compartments presenting the attributes, the
operations, and the extension points of the use case.
3.53.4 Style Guidelines
Use case names should follow capitalization and punctuation guidelines used for
Classifiers in the model.
3.53.5 Mapping
A use case symbol maps to a UseCase with the given name. An extension point maps
into an ExtensionPoint within the UseCase.
OMG-UML V1.3
Use Case
March 2000
3-89
3
3.54 Actor
3.54.1 Semantics
An actor defines a coherent set of roles that users of an entity can play when
interacting with the entity. An actor may be considered to play a separate role with
regard to each use case with which it communicates.
3.54.2 Notation
The standard stereotype icon for an actor is a “stick man” figure with the name of the
actor below the figure. An actor may also be shown as a class rectangle with the
keyword «actor», with the usual notation for all compartments.
3.54.3 Style Guidelines
Actor names should follow capitalization and punctuation guidelines used for types
and classes in the model.
3.54.4 Mapping
An actor symbol maps to an Actor with the given name. The names of abstract actors
may be shown in italics
3.55 Use Case Relationships
3.55.1 Semantics
There are several standard relationships among use cases or between actors and use
cases.
3-90
•
Association – The participation of an actor in a use case (i.e., instances of the actor
and instances of the use case communicate with each other). This is the only
relationship between actors and use cases.
•
Extend – An extend relationship from use case A to use case B indicates that an
instance of use case B may be augmented (subject to specific conditions specified in
the extension) by the behavior specified by A. The behavior is inserted at the
location defined by the extension point in B, which is referenced by the extend
relationship.
•
Generalization – A generalization from use case A to use case B indicates that A is
a specialization of B.
•
Include – An include relationship from use case A to use case B indicates that an
instance of the use case A will also contain the behavior as specified by B. The
behavior is included at the location defined in A.
OMG-UML V1.3
March 2000
3
3.55.2 Notation
An association between an actor and a use case is shown as a solid line between the
actor and the use case. It may have end adornments such as multiplicity.
An extend relationship between use cases is shown by a dashed arrow with an open
arrow-head from the use case providing the extension to the base use case. The arrow
is labeled with the keyword «extend». The condition of the relationship is optionally
presented close to the keyword.
An include relationship between use cases is shown by a dashed arrow with an open
arrow-head from the base use case to the included use case. The arrow is labeled with
the keyword «include».
A generalization between use cases is shown by a generalization arrow (i.e., a solid
line with a closed, hollow arrow head) pointing at the parent use case.
The relationship between a use case and its external interaction sequences is usually
defined by an invisible hyperlink to sequence diagrams. The relationship between a use
case and its implementation may be shown as refinement relationships to
collaborations, but may also be defined as invisible hyperlinks.
3.55.3 Example
Order
Product
Supply
Customer Data
«include»
«include»
Arrange
Payment
«include»
Place Order
1
*
Extension points
additional requests :
after creation of the order
«extend»
the salesperson asks for
the catalog
Salesperson
Request
Catalog
Figure 3-45 Use Case Relationships
OMG-UML V1.3
Use Case Relationships
March 2000
3-91
3
3.55.4 Mapping
A path between use case and/or actor symbols maps into the corresponding
relationship between the corresponding Elements, as described previously.
3.56 Actor Relationships
3.56.1 Semantics
There is one standard relationship among actors and one between actors and use cases.
•
Association – The participation of an actor in a use case (i.e., instances of the actor)
and instances of the use case communicate with each other. This is the only
relationship between actors and use cases.
•
Generalization – A generalization from an actor A to an actor B indicates that an
instance of A can communicate with the same kinds of use-case instances as an
instance of B.
3.56.2 Notation
An association between an actor and a use case is shown as a solid line between the
actor and the use case.
A generalization between actors is shown by a generalization arrow (i.e., a solid line
with a closed, hollow arrow head). The arrow head points at the more general actor.
3.56.3 Example
1
*
Place
Order
Salesperson
1
*
Establish
Credit
Supervisor
Figure 3-46 Actor Relationships
3-92
OMG-UML V1.3
March 2000
3
3.56.4 Mapping
A generalization between two actor symbols and an association between actor symbol
and a use case symbol maps into the corresponding relationship between the
corresponding Elements, as described previously.
3UML Notation
Part 7 - Sequence Diagrams
3.57 Kinds of Interaction Diagrams
A pattern of interaction among instances is shown on an interaction diagram.
Interaction diagrams come in two forms based on the same underlying information,
specified by an interaction, but each form emphasizing a particular aspect of it. The
two forms are: sequence diagrams and collaboration diagrams. Sequence diagrams
show the explicit sequence of stimuli and are better for real-time specifications and for
complex scenarios. Collaboration diagrams show the relationships among instances and
are better for understanding all of the effects on a given instance and for procedural
design. Collaboration diagrams are described in detail in “Part 8 - Collaboration
Diagrams”. That part should be read together with this one, as they have much in
common.
A sequence diagram shows an interaction arranged in time sequence. In particular, it
shows the instances participating in the interaction by their “lifelines” and the stimuli
they exchange arranged in time sequence. It does not show the associations among the
objects.
A sequence diagram presents a Collaboration with a superposed Interaction. A
Collaboration defines a set of participants and relationships that are meaningful for a
given set of purposes. The identification of participants and their relationships does not
have global meaning. These participants define roles that Instances play when
interacting with each other. Hence, a Collaboration specifies a set of ClassifierRoles
and AssociationRoles. Instances conforming (or binding) to the ClassifierRoles play
the roles defined by the ClassifierRoles, while Links between the Instances will
conform to AssociationRoles of the Collaboration. A ClassifierRole (AssociationRole)
defines a usage of an Instance (Link), while the Classifier (Association) specifies all
properties of the Instance (Link) (see also Section 3.63, “Collaboration,” on
page 3-105).
An Interaction is defined in the context of a Collaboration. It specifies the
communication patterns between the roles. More precisely, it contains a set of partially
ordered Messages, each specifying one communication (e.g., what Signal to be sent or
what Operation to be invoked) as well as the roles to be played by the sender and the
receiver, respectively.
OMG-UML V1.3
Kinds of Interaction Diagrams
March 2000
3-93
3
Sequence diagrams come in several slightly different formats intended for different
purposes, like focusing on execution control or concurrency. A sequence diagram can
exist in a generic form (describes all the possible sequences) and in an instance form
(describes one actual sequence consistent with the generic form). In cases without
loops or branches, the two forms are isomorphic.
In the following the term object is used, but any kind of instance can be used instead.
3.58 Sequence Diagram
3.58.1 Semantics
A sequence diagram presents an Interaction, which is a set of Messages between
ClassifierRoles within a Collaboration to effect a desired operation or result.
3.58.2 Notation
A sequence diagram has two dimensions:
1. the vertical dimension represents time
2. the horizontal dimension represents different objects
Normally time proceeds down the page. (The dimensions may be reversed, if desired.)
Usually only time sequences are important, but in real-time applications the time axis
could be an actual metric. There is no significance to the horizontal ordering of the
objects. Objects can be grouped into “swimlanes” on a diagram. (See subsequent
sections for details of the contents of a sequence diagram.)
The different kinds of arrows used in sequence diagrams are described in Section 3.61,
“Message and Stimulus,” on page 3-102, below. These are the same kind as in
collaboration diagrams; see Section 3.64, “Collaboration Diagram,” on page 3-107.
Note that much of this notation is drawn directly from the Object Message Sequence
Chart notation of Buschmann, Meunier, Rohnert, Sommerlad, and Stal, which is itself
derived with modifications from the Message Sequence Chart notation.
3.58.3 Presentation Options
The horizontal ordering of the lifelines is arbitrary. Often call arrows are arranged to
proceed in one direction across the page; however, this is not always possible and the
ordering does not convey information.
The axes can be interchanged, so that time proceeds horizontally to the right and
different objects are shown as horizontal lines.
Various labels (such as timing constraints, descriptions of actions during an activation,
and so on) can be shown either in the margin or near the transitions or activations that
they label.
3-94
OMG-UML V1.3
March 2000
3
Timing constraints may be expressed using time expressions on message names. The
functions sendTime (the time at which a message is sent by an object) and receiveTime
(the time at which a message is received by an object) may applied to message names
to yield a time. The set of time functions is open-ended, so that users can invent new
ones as needed for special situations or implementation distinctions (such as
elapsedTime, executionStartTime, queuedTime, and handledTime).
Construction marks of the kind found in blueprints can be used to indicate a time
interval to which a constraint may be attached (see bottom right of Figure 3-47 on
page 3-96). This notation is visually appealing but it is ambiguous if the message line
is horizontal, because the send time and the receive time cannot be distinguished. In
many cases the transmission time is negligible, so the ambiguity is harmless, but a tool
must nevertheless map such a notation unambiguously to an expression on message
names (as shown in the examples in the left of the diagram) before the information is
placed in the semantic model. (A tool may adopt defaults for this mapping.) Similarly,
a tool might permit the time function to be elided and use the message name to denote
the time of message sending or receipt within a timing expression (such as
“b.receiveTime - a.sendTime < 1 sec.” in Figure 3-47), but again this is only a surface
notation that must be mapped to a proper time expression in the semantic model).
OMG-UML V1.3
Sequence Diagram
March 2000
3-95
3
3.58.4 Example
Simple sequence diagram with concurrent objects.
exchange
caller
receiver
a: lift receiver
{b.receiveTime
- a.sendTime < 1 sec.}
b: dial tone
{c.receiveTime
- b.sendTime < 10 sec.}
c: dial digit
...
The call is
routed through
the network.
d: route
{d.receiveTime
- d.sendTime < 5 sec.}
ringing tone
phone rings
answer phone
stop tone
At this point
the parties
can talk.
Figure 3-47
3-96
stop ringing
< 1 sec.
Simple Sequence Diagram with Concurrent Objects (denoted by boxes with thick
borders).
OMG-UML V1.3
March 2000
3
ob3:C3
op()
ob4:C4
ob1:C1
[x>0] foo(x)
ob2:C2
[x<0] bar(x)
doit(z)
doit(w)
more()
Figure 3-48
Sequence Diagram with Focus of Control, Conditional, Recursion,
Creation, and Destruction.
OMG-UML V1.3
Sequence Diagram
March 2000
3-97
3
3.58.5 Mapping
This section summarizes the mapping for the sequence diagram and the elements
within it, some of which are described in subsequent sections.
Collaboration
1..*
*
*
ClassifierRole
AssociationRole
Interaction
0..1
1
2..*
*
*
1
AssociationEndRole
1..*
*
Message
1
*
0..1
Action
*
Instance
Link
0..1 *
Stimulus
*
0..1
Action
1
2..*
*
LinkEnd
Figure 3-49 A summary of the UML constructs used in the section below.
3.58.5.1 Sequence diagram
A sequence diagram maps into an Interaction and an underlying Collaboration. An
Interaction specifies a sequence of communications; it contains a collection of partially
ordered Messages, each specifying a communication between a sender role and a
receiver role. Collections of Objects that conform to the ClassifierRoles in the
Collaboration owning the Interaction, communicate by dispatching Stimuli that
conform to the Messages in the Interaction. A sequence diagram presents one
collection of object symbols and arrows mapping to Objects and Stimuli that conform
to the ClassifierRoles and Messages in the Interaction and its Collaboration.
In a sequence diagram, each object box with its lifeline maps into an Object that
conforms to a ClassifierRole in the Collaboration. The name field maps into the name
of the Object, the role name into the ClassifierRole’s name, and the class field maps
into the names of the Classifiers (in this case Classes) being the base Classifiers of the
ClassifierRole. The associations among roles are not shown on the sequence diagram.
They must be obtained in the model from a complementary collaboration diagram or
3-98
OMG-UML V1.3
March 2000
3
other means. A message arrow maps into a Stimulus connected to two Objects: the
sender and the receiver. The Stimulus conforms to a Message between the
ClassifierRoles corresponding to the two Objects’ lifelines that the arrow connects. The
Link used for the communication of the Stimulus plays the role specified by the
AssociationRole connected to the Message. Unless the correct Link can be determined
from a complementary collaboration diagram or other means, the Stimulus is either not
attached to a Link (not a complete model), or it is attached to an arbitrary Link or to a
dummy Link between the Instances conforming to the AssociationRole implied by the
two ClassifierRoles due to the lack of complete information. The name of the
Operation to be invoked or Signal to be sent is mapped onto the name of the Operation
or Signal associated by the Action connected to the Message. Different alternatives
exist for showing the arguments of the Stimulus. If references to the actual Instances
being passed as arguments are shown, these are mapped onto the arguments of the
Stimulus. If the argument expressions are shown instead, these are mapped onto the
Arguments of the Action connected to the dispatching Action. Finally, if the types of
the arguments are shown together with the name of the Operation or the Signal, these
are mapped onto the parameter types of the Operation or the Attribute types of the
Signal, respectively. A timing label placed on the level of an arrow endpoint maps into
the name of the corresponding Message. A constraint placed on the diagram maps into
a Constraint on the entire Interaction.
An arrow with the arrowhead pointing to an object symbol within the frame of the
diagram maps into a Stimulus dispatched by a CreateAction (i.e., the Stimulus
conforms to a Message in the Interaction that is connected to the CreateAction). The
interpretation is that the Object is created by dispatching the Stimulus, and the Object
conforms to the receiver role specified by the Message. After the creation of the
Object, it may immediately start interacting with other Objects. This implies that the
creation method (constructor, initializer) of the Object dispatches these Stimuli. If an
object termination symbol (“X”) is the target of an arrow, the arrow maps into a
Stimulus which will cause the receiving Object to be removed. The Stimulus conforms
to a Message in the Interaction with a DestroyAction attached to the Message. If the
object termination symbol appears in the diagram without an incoming arrow, it maps
into a TerminateAction.
The order of the arrows in the diagram maps onto a pair of associations between the
Messages that correspond to the Stimuli the arrows map onto. A predecessor
association is established between Messages corresponding to successive arrows in the
vertical sequence. In case of concurrent arrows preceding an arrow, the corresponding
Message has a collection of predecessors. Moreover, each Message has an activator
association to the Message corresponding to the incoming arrow of the activation.
Procedural sequence diagram
On a procedural sequence diagram (one with focus of control and calls), subsequent
arrows on the same lifeline map into Stimuli obeying the predecessor association
between their corresponding Messages. An arrow to the head of a focus of control
region establishes a nested activation. The arrow maps into a Stimulus conforming to a
Message with the dispatching Action being a CallAction. The Stimulus holds the
sender and receiver Objects, as well as the argument Objects to be supplied in the
invocation and references the target Operation to be invoked. The expressions that
OMG-UML V1.3
Sequence Diagram
March 2000
3-99
3
evaluate to the arguments of the Operation are the argument Expressions on the
CallAction connected to the Message, while the sender and receiver roles are specified
by the sender and receiver ClassifierRoles of the Message. The sender and receiver
Objects conform to these ClassifierRoles. Any guard conditions or iteration conditions
attached to the arrow become recurrence values of the Action attached to the Message.
All arrows departing the nested activation map into Messages with an activation
Association to the Message corresponding to the arrow at the head of the activation. A
return arrow departing the end of the activation maps into a Stimulus conforming to a
Message with:
•
an activation Association to the Message corresponding to the arrow at the head of
the activation, and
•
a predecessor association to the previous Message within the same activation (i.e.,
the last Message being sent in the activation).
A return must be the final Message within a predecessor chain. It is not the predecessor
of any Message.
3.59 Object Lifeline
3.59.1 Semantics
In a sequence diagram an object lifeline denotes an Object playing a specific role.
Arrows between the lifelines denote communication between the Objects playing those
roles. Within a sequence diagram the existence and duration of the Object in a role is
shown, but the Relationships among the Objects are not shown. The role is specified by
a ClassifierRole; it describes the properties of an Object playing the role and describes
the Relationships an Object in that role has to other Objects.
3.59.2 Notation
An Object is shown as a vertical dashed line called the “lifeline.” The lifeline
represents the existence of the Object at a particular time. If the Object is created or
destroyed during the period of time shown on the diagram, then its lifeline starts or
stops at the appropriate point; otherwise, it goes from the top to the bottom of the
diagram. An object symbol is drawn at the head of the lifeline. If the Object is created
during the diagram, then the arrow, which maps onto the stimulus that creates the
object, is drawn with its arrowhead on the object symbol. If the object is destroyed
during the diagram, then its destruction is marked by a large “X,” either at the arrow
mapping to the Stimulus that causes the destruction or (in the case of self-destruction)
at the final return arrow from the destroyed Object. An Object that exists when the
transaction starts is shown at the top of the diagram (above the first arrow), while an
Object that exists when the transaction finishes has its lifeline continue beyond the
final arrow.
The lifeline may split into two or more concurrent lifelines to show conditionality.
Each separate track corresponds to a conditional branch in the communication. The
lifelines may merge together at some subsequent point.
3-100
OMG-UML V1.3
March 2000
3
3.59.3 Example
See Figure 3-48 on page 3-97.
3.59.4 Mapping
See Section 3.58.5, “Mapping,” on page 3-98.
3.60 Activation
3.60.1 Semantics
An activation (focus of control) shows the period during which an Object is performing
an Action either directly or through a subordinate procedure. It represents both the
duration of the performance of the Action in time and the control relationship between
the activation and its callers (stack frame).
3.60.2 Notation
An activation is shown as a tall thin rectangle whose top is aligned with its initiation
time and whose bottom is aligned with its completion time. The Action being
performed may be labeled in text next to the activation symbol or in the left margin,
depending on style. Alternately, the incoming arrow may indicate the Action, in which
case it may be omitted on the activation itself. In procedural flow of control, the top of
the activation symbol is at the tip of an incoming arrow (the one that initiates the
action) and the base of the symbol is at the tail of a return arrow.
In the case of concurrent Objects each with their own threads of control, an activation
shows the duration when each Object is performing an Operation. Operations by other
Objects are not relevant. If the distinction between direct computation and indirect
computation (by a nested procedure) is unimportant, the entire lifeline may be shown
as an activation.
In the case of procedural code, an activation shows the duration during which a
procedure is active in the Object or a subordinate procedure is active, possibly in some
other Object. In other words, all of the active nested procedure activations may be seen
at a given time. In the case of a recursive call to an Object with an existing activation,
the second activation symbol is drawn slightly to the right of the first one, so that they
appear to “stack up” visually. (Recursive calls may be nested to an arbitrary depth.)
3.60.3 Example
See Figure 3-47 on page 3-96 and Figure 3-48 on page 3-97.
3.60.4 Mapping
See Section 3.58.5, “Mapping,” on page 3-98.
OMG-UML V1.3
Activation
March 2000
3-101
3
3.61 Message and Stimulus
3.61.1 Semantics
A Stimulus is a communication between two Objects that conveys information with the
expectation that action will ensue. A Stimulus will cause an Operation to be invoked,
raise a Signal, or cause an Object to be created or destroyed.
A Message is a specification of Stimulus (i.e., it specifies the roles that the sender and
the receiver Objects must conform to, as well as the Action which will, when executed,
dispatch a Stimulus that conforms to the Message).
3.61.2 Notation
In a sequence diagram a Stimulus is shown as a horizontal solid arrow from the lifeline
of one Object to the lifeline of another Object. In case of a Stimulus from an Object to
itself, the arrow may start and finish on the same Object lifeline. The arrow is labeled
with the name of the Stimulus (Operation or Signal) and its argument values or
argument expressions.
The arrow may also be labeled with a sequence number to show the sequence of the
Stimulus in the overall interaction. However, sequence numbers are often omitted in
sequence diagrams, as the physical location of the arrow shows the relative sequences,
but they are necessary in collaboration diagrams. Sequence numbers are useful on both
kinds of diagrams for identifying concurrent threads of control. A Stimulus may also
be labeled with a guard condition.
3.61.3 Presentation options
The following arrowhead variations may be used to show different kinds of
communications:
filled solid arrowhead
Procedure call or other nested flow of control. The entire nested sequence is
completed before the outer level sequence resumes. May be used with ordinary
procedure calls. May also be used with concurrently active objects when one of
them sends a Signal and waits for a nested sequence of behavior to complete.
stick arrowhead
Flat flow of control. Each arrow shows the progression to the next step in sequence.
Normally all of the messages are asynchronous.
half stick arrowhead
An asynchronous Stimulus. Used instead of the stick arrowhead to explicitly show
an asynchronous communication between two Objects in a procedural sequence.
3-102
OMG-UML V1.3
March 2000
3
dashed arrow with stick arrowhead
Return from procedure call.
Variation:
In a procedural flow of control, the return arrow may be omitted (it is implicit at the
end of an activation). It is assumed that every call has a paired return after any
subordinate stimuli. The return value can be shown on the initial arrow. For
nonprocedural flow of control (including parallel processing and asynchronous
messages) returns should be shown explicitly.
Variation:
In a concurrent system, a full arrowhead shows the yielding of a thread of control
(wait semantics) and a half arrowhead shows the sending of a message without
yielding control (no-wait semantics).
Variation:
Normally message arrows are drawn horizontally. This indicates the duration
required to send the stimulus is “atomic,” (i.e., it is brief compared to the
granularity of the interaction and that nothing else can “happen” during the
transmission of the stimulus). This is the correct assumption within many
computers. If the stimulus requires some time to arrive, during which something
else can occur (such as a stimulus in the opposite direction), then the arrow may be
slanted downward so that the arrowhead is below the arrow tail.
Variation: Branching
A branch is shown by multiple arrows leaving a single point, each labeled by a
guard condition. Depending on whether the guard conditions are mutually
exclusive, the construct may represent conditionality or concurrency.
Variation: Iteration
A connected set of arrows may be enclosed and marked as an iteration. For a
generic sequence diagram, the iteration indicates that the dispatch of a set of stimuli
can occur multiple times. For a procedure, the continuation condition for the
iteration may be specified at the bottom of the iteration. If there is concurrency, then
some arrows in the diagram may be part of the iteration and others may be single
execution. It is desirable to arrange a diagram so that the arrows in the iteration can
be enclosed together easily.
Variation:
A lifeline may subsume an entire set of objects on a diagram representing a highlevel view.
OMG-UML V1.3
Message and Stimulus
March 2000
3-103
3
Variation:
A distinction may be made between a period during which an Object has a live
activation and a period in which the activation is actually computing. The former
(during which it has control information on a stack but during which control resides
in something that it called) is shown with the ordinary double line. The latter
(during which it is the top item on the stack) may be distinguished by shading the
region.
3.61.4 Mapping
See Section 3.58.5, “Mapping,” on page 3-98.
3.62 Transition Times
3.62.1 Semantics
A Message may specify several different times (e.g., a sending time and a receiving
time). These are formal names that may be used within Constraint expressions. The set
of different kinds of times is open-ended so that users can invent new ones as needed
for special situations, such as elapsedTime and startExecutionTime. These expressions
may be used in Constraints to designate specific time constraints valid for the Message.
3.62.2 Notation
A transition instance (such as a Stimulus in a sequence diagram, a collaboration
diagram, or a Transition in a state machine) may be given a name. A timing constraint
is formed as an expression based on the name of the transition. For example, if the
name of a Stimulus is stim, its send-time is expressed by stim.sendTime (), and its
receive-time by stim.receiveTime (). The timing constraint may be shown in the left
margin aligned with the arrow (on a sequence diagram) or near the tail of the arrow (on
a collaboration diagram). Constraints may be specified by placing Boolean
expressions, possibly including time expressions, in braces on the sequence diagram.
3.62.3 Presentation Options
When it is clear from the context, the name of a Message or the name of a Stimulus
may itself be used to denote the time at which the transition started. In cases where the
performance of the transition is not instantaneous, the time at which the transition is
ended may be indicated by the same name with a prime sign appended to the name.
3.62.4 Example
See Figure 3-47 on page 3-96.
3-104
OMG-UML V1.3
March 2000
3
3.62.5 Mapping
See Section 3.58.5, “Mapping,” on page 3-98.
3UML Notation
Part 8 - Collaboration Diagrams
A pattern of interactions among instances is shown on an interaction diagram.
Interaction diagrams come in two forms based on the same underlying information,
specified by an interaction, but each form emphasizing a particular aspect of it. The
two forms are: sequence diagrams and collaboration diagrams. A collaboration
diagram shows an interaction organized around the roles in the interaction and their
links to each other. Unlike a sequence diagram, a collaboration diagram shows the
relationships among the objects playing the different roles. On the other hand, a
collaboration diagram does not show time as a separate dimension, so the sequence of
interactions and the concurrent threads must be determined using sequence numbers.
Hence, sequence diagrams show the explicit sequence of stimuli and are better for realtime specifications and for complex scenarios. Sequence diagrams are described in
detail in “Part 7 - Sequence Diagrams”. That part should be read together with this
one, as they have much in common.
A collaboration diagram can be given in two different forms: either at specification
level (the diagram shows ClassifierRoles, AssociationRoles, and Messages) or at
instance level (the diagram shows Objects, Links, and Stimuli). The former presents
the roles and their structure as defined in the underlying Collaboration, while the latter
focuses on instance that conforms to the roles in the Collaboration.
In the following text the term Object is used, but any kind of Instance can be used.
3.63 Collaboration
3.63.1 Semantics
Behavior is implemented by sets of Objects that exchange Stimuli within an overall
interaction to accomplish a purpose. To understand the mechanisms used in a design, it
is important to see only those Objects and their interaction involved in accomplishing a
purpose or a related set of purposes, projected from the larger system of which they are
part for other purposes. Such a static construct is called a Collaboration.
A Collaboration defines a set of participants and relationships that are meaningful for a
given set of purposes. The identification of participants and their relationships does not
have global meaning. These participants define roles that Objects play when interacting
with each other. Hence, a Collaboration specifies a set of ClassifierRoles and
AssociationRoles. Objects conforming (or binding) to the ClassifierRoles play the roles
defined by the ClassifierRoles, while Links between the Objects will conform to
AssociationRoles of the Collaboration. A ClassifierRole (AssociationRole) defines a
usage of an Object (Link), while the Class (Association) specifies all properties of the
Object (Link).
OMG-UML V1.3
Collaboration
March 2000
3-105
3
An Interaction is defined in the context of a Collaboration. It specifies the
communication patterns between the roles. More precisely, it contains a set of partially
ordered Messages, each specifying one communication (e.g., what Signal to be sent or
what Operation to be invoked) as well as the roles to be played by the sender and the
receiver, respectively.
A Collaboration may be attached to an Operation or a Classifier, like a UseCase, to
describe the context in which their behavior occurs (i.e., what roles Objects play to
perform the behavior specified by the Operation or the UseCase). The Collaboration is
said to be a realization of the Operation or the UseCase. The Interactions defined
within the Collaboration specify the communication pattern between the Objects when
they perform the behavior specified in the Operation or the UseCase. These patterns
are presented in sequence diagrams or collaboration diagrams. A Collaboration may
also be attached to a Class to define the static structure of the Class (i.e., how attributes
and parameters cooperate with each other).
A parameterized Collaboration represents a design construct that can be used
repeatedly in different designs. The participants in the Collaboration, including the
Classifiers and Relationships, can be parameters of the generic Collaboration. The
parameters are bound to particular ModelElements in each instantiation of generic
Collaboration. Such a parameterized Collaboration can capture the structure of a
design pattern (note that a design pattern involves more than structural aspects).
Whereas most Collaborations can be anonymous because they are attached to a named
ModelElement, patterns are free standing design constructs that must have names.
A Collaboration may be expressed at different levels of granularity. A coarse-grained
Collaboration may be refined to produce another Collaboration that has a finer
granularity.
3.63.2 Notation
The description of behavior involves two aspects: 1) the structural description of the
participants and 2) the description of the communication patterns. The two aspects are
often described together on a single diagram, but at times it is useful to describe the
structural and interaction aspects separately. The structure of Objects playing roles in a
behavior and their relationships is called a Collaboration. A collaboration diagram
shows the context in which interaction occurs. The sequences of Stimuli exchanged
among Objects to accomplish a specific purpose is called an Interaction. A
Collaboration is shown by a collaboration diagram that does not include any
communication. By adding communication to the diagram, an Interaction is shown
superimposed on the Collaboration in which the Interaction is defined. Different sets of
communication may be applied to the same Collaboration to yield different
Interactions. The communication can be shown at two different levels: at instance level
or at specification level. An instance level diagram shows Objects and Links together
with Stimuli being exchanged between the Objects, while a specification level diagram
shows ClassifierRoles, AssociationRoles, and Messages. The model elements in the
instance level diagram conform to the model elements in the specification level
diagram (see Section 3.68, “Collaboration Roles,” on page 3-114).
3-106
OMG-UML V1.3
March 2000
3
3.63.3 Mapping
A Collaboration Diagram or an Interaction Diagram given at specification level is
mapped onto a Collaboration, possibly together with an Interaction, including those
elements owned by the Collaboration. If the diagram is given at instance level, it is
mapped onto a set of Instances and Links conforming to the Collaboration. The
detailed mapping is described in Section 3.68, “Collaboration Roles,” on page 3-114..
3.64 Collaboration Diagram
3.64.1 Semantics
A collaboration diagram presents a Collaboration, which contains a set of roles to be
played by Objects, as well as their required relationships given in a particular context.
The diagram may also present an Interaction, which defines a set of Messages
specifying the interaction between the Objects playing the roles within a Collaboration
to achieve the desired result.
A Collaboration is used for describing the realization of an Operation or a Classifier. A
Collaboration that describes a Classifier, like a UseCase, references Classifiers and
Associations in general, while a Collaboration describing an Operation includes the
arguments and local variables of the Operation, as well as ordinary Associations
attached to the Classifier owning the Operation.
3.64.2 Notation
A collaboration diagram shows a graph of either Objects linked to each other, or
ClassifierRoles and AssociationRoles; it may also include the communication stated by
an Interaction. A collaboration diagram can be given in two different forms: at instance
level or at specification level; it may either show Instances, Links, and Stimuli, or show
ClassifierRoles, AssociationRoles, and Messages (see below).
Because collaboration diagrams often are used to help design procedures, they
typically show navigability using arrowheads on the lines representing Links or
AssociationRoles. (An arrowhead on a line between boxes indicates a Link or
AssociationRole with one-way navigability. An arrow next to a line indicates Stimuli
flowing in the given direction. Obviously such an arrow cannot point backwards over a
one-way line.)
The order of the interaction is described with a sequence of numbers, usually starting
with number 1. For a procedural flow of control, the subsequent communication
numbers are nested in accordance with call nesting. For a nonprocedural sequence of
interactions among concurrent objects, all the sequence numbers are at the same level
(that is, they are not nested).
A collaboration diagram without any interaction shows the context in which
interactions can occur. It might be used to show the context for a single Operation or
even for all of the Operations of a Class or group of Classes.
OMG-UML V1.3
Collaboration Diagram
March 2000
3-107
3
A collection of standard constraints may be used to show whether an Object or a Link
is created or destroyed during the execution:
•
•
Objects and Links created during the execution may be designated as {new}.
•
Objects and Links created during the execution and then destroyed may be
designated as {transient}.
Objects and Links destroyed during the execution may be designated as
{destroyed}.
These changes in life state are derivable from the detailed interaction among the
Objects, they are provided as notational conveniences.
3.64.2.1 Instance level
A collaboration diagram given at instance level shows a collection of object boxes and
lines mapping to Objects and Links, respectively. These instances conform to the
ClassifierRoles and AssociationRoles of the Collaboration. The diagram may also
include arrows attached to the lines that correspond to Stimuli communicated over the
Links. The diagram shows the Objects relevant to the realization of an Operation or
Classifier, including Objects indirectly affected or accessed during the performance.
The diagram also shows the Links among the Objects, including transient ones
representing procedure arguments, local variables, and self links. Individual attribute
values are usually not shown explicitly. If Stimuli must be sent to attribute values, the
Attributes should be modeled using Associations instead.
3.64.2.2 Specification level
A collaboration diagram given at specification level shows the roles defined within a
Collaboration. Together, these roles form a realization of the attached Operation or
Classifier of the Collaboration. The diagram contains a collection of class boxes and
lines corresponding to ClassifierRoles and AssociationRoles in the Collaboration. In
this case the arrows attached to the lines map onto Messages.
3-108
OMG-UML V1.3
March 2000
3
3.64.3 Example
window
redisplay()
:Window
:Controller
«parameter»window
1: displayPositions(window)
wire
1.1*[i:=1..n]: drawSegment(i)
1.1.3.1: add(self)
contents {new}
wire: Wire
«self»
i-1
i
«local» line
1.1.2: create(r0,r1)
1.1.3: display(window)
:Line {new}
1.1.1b: r1:=position()
1.1.1a: r0 := position()
left: Bead
right: Bead
Figure 3-50 Collaboration Diagram at instance level, presenting Objects, Links, and Stimuli.
tutor 1
student *
/ Teacher : Person
faculty member *
/ Student : Person
participant *
lecturer 1
: Course
: Faculty
faculty 1
Figure 3-51
given course *
taken course *
Collaboration Diagram at specification level, presenting ClassifierRoles
and AssociationRoles.
OMG-UML V1.3
Collaboration Diagram
March 2000
3-109
3
studentTeachers ()
lecturer / Teacher : Person
tutor / Teacher : Person
1: namesOfTeachers()
1.i.1: name ()
1.1*[i:=1..n]: lecturer()
/ Student : Person
Figure 3-52
: Course
Collaboration Diagram at instance level in which some of the Objects play
the same role. The instances conform to the Collaboration shown in
Figure 3-51 on page 3-109.
3.64.4 Mapping
A collaboration diagram maps to a Collaboration, possibly together with an
Interaction. The mapping of each kind of icon is described in Section 3.68,
“Collaboration Roles,” on page 3-114. The mapping of the stereotypes is explained in
Section 3.47, “Link,” on page 3-76.
3.65 Pattern Structure
3.65.1 Semantics
A Collaboration can be used to specify the implementation of design constructs. For
this purpose, it is necessary to specify its context and interactions. It is also possible to
view a Collaboration as a single entity from the “outside.” For example, this could be
used to identify the presence of design patterns within a system design. A pattern is a
parameterized Collaboration. In each use of the pattern, actual Classes are substituted
for the parameters in the pattern definition.
Note that patterns as defined in Design Patterns by Gamma, Helm, Johnson, and
Vlissides include much more than structural descriptions. UML describes the structural
aspects and some behavioral aspects of design patterns; however, UML notation does
not include other important aspects of patterns, such as usage trade-offs or examples.
These must be expressed in text or tables.
3-110
OMG-UML V1.3
March 2000
3
3.65.2 Notation
A use of a Collaboration is shown as a dashed ellipse containing the name of the
Collaboration. A dashed line is drawn from the collaboration symbol to each of the
symbols denoting Objects or Classes (depending on whether it appears within an object
diagram or a class diagram) that participate in the Collaboration. Each line is labeled
by the role of the participant. The roles correspond to the names of elements within the
context for the Collaboration; such names in the Collaboration are treated as
parameters that are bound to specify elements on each occurrence of the pattern within
a model. Therefore, a collaboration symbol can show the use of a design pattern
together with the actual Classes that occur in that particular use of the pattern.
CallQueue
subject
queue: List of Call
source: Object
waitAlarm: Alarm
capacity: Integer
SlidingBarIcon
handler
reading: Real
color: Color
range: Interval
Observer
handler.reading = length (subject.queue)
range = (0 .. capacity)
Figure 3-53 Use of a Collaboration
As a Collaboration is a GeneralizableElement, it may have Generalization relationships
to other Collaborations. In this way it is possible to define one Collaboration to be a
specialization of another Collaboration. It is depicted by the ordinary Generalization
arrow from the dashed ellipse representing the child Collaboration to the icon of the
parent Collaboration. The roles of the child Collaborations may be specializations of
roles in the parent Collaboration.
subject
handler
Observer
CallQueue
SlidingBarIcon
manager
subject
Supervisor
ManagedQueue
Controller
Figure 3-54 Specialization of a Collaboration
OMG-UML V1.3
Pattern Structure
March 2000
3-111
3
A dashed arrow with a closed, hollow arrow-head is used to show that a Collaboration
is a realization of an Operation or a Classifier. This relationship can also be presented
in textual form within the Collaboration symbol.
Window
display (...)
representedOperation:
Window::display
Figure 3-55
The relationship between a Collaboration and the element it is realizing can be
shown either as a dashed arrow with a closed, hollow arrow-head from the
Collaboration to the realized element, or in text.
3.65.3 Mapping
A collaboration usage symbol maps into a Collaboration. For each class symbol
attached by an arrow to the pattern occurrence symbol, the corresponding Class is
bound to the template parameter that is the base association target of the ClassifierRole
in the Pattern with the name equal to the name on the arrow.
A dashed arrow from a Collaboration symbol to a Classifier or to an Operation is
mapped onto the representedClassifier and onto the representedOperation association
of the Collaboration, respectively.
3.66Collaboration Contents
The contents of a Collaboration is a collection of roles specifying how Objects and
Links cooperate within a given context for a particular purpose, such as performing an
Operation or a Use case. A Collaboration is a fragment of a larger complete model that
is intended for a particular purpose.
3.66.1 Semantics
A Collaboration diagram shows one or more roles together with their contents,
relationships, and neighbor roles, plus additional relationships and Classes as needed.
To use a Collaboration, each role must be bound to an actual Class (or collection of
Classes, if multiple classification is used) that (jointly) support the Operations required
of the role. The additional elements express additional requirements that cannot be
modeled with roles, such as Generalizations between roles.
3-112
OMG-UML V1.3
March 2000
3
3.66.2 Notation
A collaboration is shown as a graph of class boxes or object boxes together with
connecting lines. These icons map onto ClassifierRoles, AssociationRoles, Objects,
and Links, respectively (see Section 3.68, “Collaboration Roles,” on page 3-114).
However, a collaboration diagram may also contain other elements, like Classes and
Generalizations, to express additional information. These elements are shown using
their ordinary icons.
1: print (info)
: PrintDevice
/ Generator
printer 1
: LaserPrinter
Figure 3-56
: LinePrinter
A collaboration diagram showing different roles, together with two
additional Generalization relationships as constraining elements.
3.66.3 Mapping
The mapping of roles and instances are described below. Any constraining element,
like a generalization arrow, is mapped onto its usual model element, such as
Generalization. These elements are referenced by the Collaboration as its constraining
elements.
3.67Interactions
A collaboration of objects interacts to accomplish a purpose (such as performing an
Operation) by exchanging Stimuli. These may include both sending Signals and
invocations of Operations, as well as more implicit interaction through conditions and
time events. A specific pattern of communication exchanges to accomplish a specific
purpose is called an interaction.
3.67.1 Semantics
An Interaction is a behavioral specification that comprises a sequence of
communications exchanged among a set of Objects within a Collaboration to
accomplish a specific purpose, such as the implementation of an Operation. To specify
an Interaction, it is first necessary to specify a Collaboration; that is, to establish the
roles that interact and their relationships. Then, the possible interaction sequences are
OMG-UML V1.3
Interactions
March 2000
3-113
3
specified. These can be specified in a single description containing conditionals
(branches or conditional signals), or they can be specified by supplying multiple
descriptions, each describing a particular path through the possible execution paths.
One communication is specified with a Message; it specifies the sender and the
receiver roles, as well as the Action that will cause the communication to take place.
The Action specifies what kind of communication that should take place, such as
sending a Signal or invoking an Operation, together with a sequence of expressions
that determine the arguments to be supplied. The Action may also contain a recurrence
expression stating a guard or an iteration of the performance of the Action.
When the Action is performed, a Stimulus is dispatched conforming to the Message.
The Stimulus contains references to the sender and the receiver Objects playing the
sender role and the receiver role of the Message, as well as a sequence of Object
references being the result of evaluating the argument expressions of the dispatching
Action.
3.67.2 Notation
Interactions are shown as sequence diagrams or as collaboration diagrams. Both
diagram formats show the execution of collaborations. However, sequence diagrams do
not show the relationships between the Objects or the Attribute values of the Objects;
therefore, they do not fully show the context aspect of a Collaboration. Sequence
diagrams do show the behavioral aspect of Collaborations explicitly, including the time
sequence of Stimuli and explicit representation of method activations. Sequence
diagrams are described in “Part 7 - Sequence Diagrams”. Collaboration diagrams show
the full context of an interaction, including the Objects and their relationships relevant
to a particular interaction. The sequencing of the Stimuli is done using sequence
numbers, since distributing them along a time axis, like in Sequence diagrams, is not
possible in this kind of diagram. (In fact, in some cases it is convenient to use sequence
numbers in combination with a time axis.) The contents of collaboration diagrams are
described in the following section.
3.67.3 Example
See Section 3.64, “Collaboration Diagram,” on page 3-107 for examples of Interactions
and their Collaborations.
3.68Collaboration Roles
3.68.1 Semantics
A ClassifierRole defines a role to be played by an Object within a collaboration. The
role describes the type of Object that may play the role, such as required Operations
and Attributes, and describes its relationships to other roles. The relationships to other
roles are defined by AssociationRoles. These describe the required Links between the
Objects (i.e., a subset of the existing Links).
3-114
OMG-UML V1.3
March 2000
3
3.68.2 Notation
A ClassifierRole is shown using a class rectangle symbol. Normally, only the name
compartment is shown, but the attribute and operation compartments may also be
shown when needed. The name compartment contains the string:
‘/’ ClassifierRoleName ‘:’ ClassifierName [‘,’ ClassifierName]*
The name of the Classifier (or Classifiers if multiple classification is used) can include
a full pathname of enclosing Packages, if necessary. A tool will normally permit
shortened pathnames to be used when they are unambiguous. The Package names
precede the Classifier name and are separated by double colons. For example:
display_window: WindowingSystem::GraphicWindows::Window
A stereotype may be shown textually (in guillemets above the name string) or as an
icon in the upper right corner. A ClassifierRole representing a set of Objects can
include a multiplicity indicator (such as “*”) in the upper right corner of the class box.
An AssociationRole is shown with the usual association line. The name string of the
Association Role follows the same syntax as for the ClassifierRole. If the name is
omitted, a line connected to Classifier Role symbols denotes an Association Role. The
information attached to the ends of the AssociationRole (i.e., to the
AssociationEndRoles) are shown using the same notation as for AssociationEnds.
An Object playing the role defined by a ClassifierRole is depicted by an object box,
normally without an attribute compartment. The name of the Object is shown as a
string:
ObjectName ‘/’ ClassifierRoleName ‘:’ ClassifierName [‘,’ ClassifierName]*
(i.e., it starts with the name of the Object, followed by the complete name of the
ClassifierRole, all underlined).
A Link is shown by a line between object boxes. Its name string follows the syntax of
an Object playing a specific role.
3.68.3 Presentation options
The name of a ClassifierRole may be omitted. In this case, the colon is kept together
with the Class name. The role name may be omitted only if there is one role to be
played by Objects of the base Class in the Collaboration.
The name of the Class may be omitted together with the colon. In this case, the
diagram does not present the complete information regarding the Collaboration.
At least one of the Class names (together with the colon) or the role name (together
with the slash) must be present to denote a ClassifierRole. Otherwise, the rectangle
denotes an ordinary Class.
If the role is to be played by an Object originating from multiple Classes, the names of
the Classes are shown in a comma separated list after the colon.
OMG-UML V1.3
Collaboration Roles
March 2000
3-115
3
In an object box the Object name, the role name, and/or the class name may be
omitted. However, the colon should be kept in front of the class name, and the slash
should be kept in front of the role name. The notation used is the same for Objects in
general, with the possible addition of the name of the ClassifierRole that the Object
conforms to.
Note, the name of an Instance is always underlined, whereas the name of a Classifier
(including ClassifierRole) is never underlined. Furthermore, an unnamed line between
icons representing Instances is always a Link, and between icons representing
Classifiers it is always an Association.
The following tables summarize the different combinations of names.
Table 3-2 Syntax of Object names
syntax
explanation
:C
unnamed Object originating from the Class C
/R
unnamed Object playing the role R
/R:C
unnamed Object originating from the Class C
playing the role R
O/R
an Object named O playing the role R
O:C
an Object named O originating from the Class C
O/R:C
an Object named O originating from the Class C
playing the role R
O
an Object named O
Table 3-3 Syntax of role names
syntax
explanation
/R
a role named R
:C
an unnamed role with the base Class C
/R:C
a role named R with the base Class C
3.68.4 Example
See figures in Section 3.64, “Collaboration Diagram,” on page 3-107.”
3.68.5 Mapping
A classifier role rectangle maps onto one ClassifierRole. The role name is the name of
the ClassifierRole and the sequence of classifier names are the names of the base
Classifiers. An association role line maps onto an AssociationRole attached to the
ClassifierRoles corresponding to the rectangles at the end points of the line.
3-116
OMG-UML V1.3
March 2000
3
An object symbol maps onto an Object whose name is the object part of the name
string. The Classes of the Object are those named according to the sequence of names
in the class part of the string (or children of these Classes). The Object conforms to the
ClassifierRole, whose name is the role part of the string.
3.69 Multiobject
3.69.1 Semantics
A multiobject represents a set of Objects on the “many” end of an Association. This is
used to show Operations and Signals that address the entire set, rather than a single
Object in it. The underlying static model is unaffected by this grouping. This
corresponds to an Association with multiplicity “many” used to access a set of
associated Objects.
3.69.2 Notation
A multiobject is shown as two rectangles in which the top rectangle is shifted slightly
vertically and horizontally to suggest a stack of rectangles. A message arrow to the
multi-object symbol indicates a Stimulus to the set of Objects (for example, a selection
Operation to find an individual Object).
To perform an Operation on each Object in a set of associated Objects requires two
Stimuli:
1. an iteration to the multi-object to extract Links to the individual Objects and then
2. a Stimulus sent to each individual Object using the (temporary) Link.
This may be elided on a diagram by combining the arrows into a single arrow that
includes an iteration and an application to each individual Object. The target rolename
takes a “many” indicator (*) to show that many individual Links are implied. Although
this may be written as a single Stimulus, in the underlying model (and in any actual
code) it requires the two layers of structure (iteration to find Links, message using each
Link) mentioned previously.
An Object from the set is shown as a normal object symbol, but it may be attached to
the multiobject symbol using a composition Link to indicate that it is part of the set. A
message arrow to the simple object symbol indicates a Stimulus to an individual
Object.
Typically a selection Stimulus to a multiobject returns a reference to an individual
Object, to which the original sender then sends a Stimulus.
OMG-UML V1.3
Multiobject
March 2000
3-117
3
3.69.3 Example
servers
client
:Server
1: aServer:=find(specs)
aServer «local»
:Server
2: process(request)
Figure 3-57 Multiobject
3.69.4 Mapping
A multiobject symbol maps to a set of Objects that together conform to a
ClassifierRole with multiplicity “many” (or whatever is explicitly specified). In other
respects, it maps the same as an object symbol. (The stereotype is explained in
Section 3.47, “Link,” on page 3-76.)
3.70 Active object
An active object is one that owns a thread of control and may initiate control activity.
A passive object is one that holds data, but does not initiate control. However, a passive
object may send Stimuli in the process of processing a request that it has received. In a
collaboration diagram, a ClassifierRole that is an active class represents the active
objects that occur during execution.
3.70.1 Semantics
An active object is an Object that owns a thread of control. Processes and tasks are
traditional kinds of active objects.
3.70.2 Notation
A role for an active object is shown as a rectangle with a heavy border. Frequently,
active object roles are shown as composites with embedded parts.
The property keyword {active} may also be used to indicate an active object.
3-118
OMG-UML V1.3
March 2000
3
3.70.3 Example
«local» job
currentJob : TransferJob
job
:Factory Manager
:FactoryScheduler
1: start(job)
A2,B2 / 2: completed(job)
:FactoryJobMgr
B2: completed
A2: completed
1 / A1: start(job)
1 / B1: start(job)
:Robot
:Oven
Figure 3-58 Composite Active Object
3.70.4 Mapping
An active object symbol maps as an object symbol does, with the addition that the
active property is set.
OMG-UML V1.3
Active object
March 2000
3-119
3
3.71 Message and Stimulus
3.71.1 Semantics
In a collaboration diagram a Stimulus is a communication between two Objects that
conveys information with the expectation that action will ensue. A Stimulus will cause
an Operation to be invoked, raise a Signal or an Object to be created or destroyed.
A Message is a specification of Stimulus. It specifies the roles that the sender and the
receiver Objects should conform to, as well as the Action which will, when executed,
dispatch a Stimulus that conforms to the Message.
3.71.2 Notation
Messages and Stimuli are shown as labeled arrows placed near an AssociationRole or
a Link, respectively. The meaning is that the Link is used for transportation of the
Stimulus to the target Object. The arrow points along the line in the direction of the
receiving Object.
3.71.2.1 Control flow type
The following arrowhead variations may be used to show different kinds of
communications:
filled solid arrowhead
Procedure call or other nested flow of control. The entire nested sequence is
completed before the outer level sequence resumes. May be used with ordinary
procedure calls. May also be used with concurrently active objects when one of
them sends a Signal and waits for a nested sequence of behavior to complete.
stick arrowhead
Flat flow of control. Each arrow shows the progression to the next step in sequence.
Normally all of the messages are asynchronous.
half stick arrowhead
Asynchronous flow of control. Used instead of the stick arrowhead to explicitly
show an asynchronous communication between two Objects in a procedural
sequence.
dashed arrow with stick arrowhead
Return from a procedure call. The return arrow may be suppressed as it is implicit
at the end of an activation.
3-120
OMG-UML V1.3
March 2000
3
other variations
Other kinds of control may be shown, such as “balking” or “time-out;” however,
these are treated as extensions to the UML core.
3.71.2.2 Arrow label
In the following the term Message is used, but the text applies to Stimulus, as well.
The label has the following syntax:
predecessor guard-condition sequence-expression return-value := message-name
argument-list
The label indicates the Message being sent, its arguments and return values, and the
sequencing of the Message within the larger interaction, including call nesting,
iteration, branching, concurrency, and synchronization.
3.71.2.3 Predecessor
The predecessor is a comma-separated list of sequence numbers followed by a slash
(‘/’):
sequence-number ‘,’ . . . ‘/’
The clause is omitted if the list is empty.
Each sequence-number is a sequence-expression without any recurrence terms. It must
match the sequence number of another Message.
The meaning is that the Message is not enabled until all of the communications whose
sequence numbers appear in the list have occurred (once the communication has
occurred the guard remains satisfied). Therefore, the guard condition represents a
synchronization of threads.
Note that the Message corresponding to the numerically preceding sequence number is
an implicit predecessor and need not be explicitly listed. All of the sequence numbers
with the same prefix form a sequence. The numerical predecessor is the one in which
the final term is one less. That is, number 3.1.4.5 is the predecessor of 3.1.4.6.
3.71.2.4 Sequence expression
The sequence-expression is a dot-separated list of sequence-terms followed by a colon
(‘:’).
sequence-term ‘.’ . . . ‘:’
Each term represents a level of procedural nesting within the overall interaction. If all
the control is concurrent, then nesting does not occur. Each sequence-term has the
following syntax:
[ integer | name ] [ recurrence ]
OMG-UML V1.3
Message and Stimulus
March 2000
3-121
3
The integer represents the sequential order of the Message within the next higher level
of procedural calling. Messages that differ in one integer term are sequentially related
at that level of nesting. Example: Message 3.1.4 follows Message 3.1.3 within
activation 3.1. The name represents a concurrent thread of control. Messages that differ
in the final name are concurrent at that level of nesting. Example: Message 3.1a and
Message 3.1b are concurrent within activation 3.1. All threads of control are equal
within the nesting depth.
The recurrence represents conditional or iterative execution. This represents zero or
more Messages that are executed depending on the conditions involved. The choices
are:
‘*’ ‘[’ iteration-clause ‘]’an iteration
‘[’ condition-clause ‘]’a branch
An iteration represents a sequence of Messages at the given nesting depth. The
iteration clause may be omitted (in which case the iteration conditions are unspecified).
The iteration-clause is meant to be expressed in pseudocode or an actual programming
language, UML does not prescribe its format. An example would be: *[i := 1..n].
A condition represents a Message whose execution is contingent on the truth of the
condition clause. The condition-clause is meant to be expressed in pseudocode or an
actual programming language; UML does not prescribe its format. An example would
be: [x > y].
Note that a branch is notated the same as an iteration without a star. One might think
of it as an iteration restricted to a single occurrence.
The iteration notation assumes that the Messages in the iteration will be executed
sequentially. There is also the possibility of executing them concurrently. The notation
for this is to follow the star by a double vertical line (for parallelism): *||.
Note that in a nested control structure, the recurrence is not repeated at inner levels.
Each level of structure specifies its own iteration within the enclosing context.
3.71.2.5 Signature
A signature is a string that indicates the name, the arguments, and the return value of
an Operation, a Reception, a Message, or a Signal. These have the following
properties.
Return-value
This is a list of names that designates the values returned at the end of the
communication within the subsequent execution of the overall interaction. These
identifiers can be used as arguments to subsequent Messages. If the Message does not
return a value, then the return value and the assignment operator are omitted.
3-122
OMG-UML V1.3
March 2000
3
Message-name
This is the name of the event raised in the target Object (which is often the event of
requesting an Operation to be performed). It may be implemented in various ways, one
of which is an operation call. If it is implemented as a procedure call, then this is the
name of the Operation, and the Operation must be defined on the Class of the receiver
or inherited by it. In other cases, it may be the name of an event that is raised on the
receiving Object. In normal practice with procedural overloading, both the message
name and the argument list types are required to identify a particular Operation.
Argument list
This is a comma-separated list of arguments (actual parameters) enclosed in
parentheses. The parentheses can be used even if the list is empty. Each argument is
either an object reference, or an expression in pseudocode or an appropriate
programming language (UML does not prescribe). The expressions may use return
values of previous messages (in the same scope) and navigation expressions starting
from the source object (that is, attributes of it and links from it and paths reachable
from them).
3.71.3 Presentation Options
Instead of text expressions for arguments and return values, data tokens may be shown
near a message. A token is a small circle labeled with the argument expression or
return value name. It has a small arrow on it that points along the Message (for an
argument) or opposite the Message (for a return value). Tokens represent arguments
and return values. The choice of text syntax or tokens is a presentation option.
The syntax of Messages may instead be expressed in the syntax of a programming
language, such as C++ or Smalltalk. However, all of the expressions on a single
diagram should use the same syntax.
A return flow, may be explicitly shown with a dashed arrow.
3.71.4 Example
See Figure 3-50 on page 3-109 for examples within a diagram.
Samples of control message label syntax:
2: display (x, y)simple Message
1.3.1: p:= find(specs)nested call with return value
[x < 0] 4: invert (x, color)conditional Message
A3,B4/ C3.1*: update ()synchronization with other threads, iteration
OMG-UML V1.3
Message and Stimulus
March 2000
3-123
3
3.71.5 Mapping
An arrow symbol maps either onto a Message or a Stimulus. If the arrow is attached to
a line corresponding to an AssociationRole, it maps onto a Message, with the
ClassifierRoles corresponding to the end-points of the line as the sender and the
receiver roles. If the line corresponds to a Link, the arrow maps onto a Stimulus, with
the Objects corresponding to the end-points of the line as the sender and the receiver
Instances. The line is the communication connection or the communication link of the
Message or the Stimulus, respectively.
The control flow type sets the corresponding properties:
•
•
•
•
solid arrowhead: a synchronous operation invocation
stick arrowhead: flat flow of control (normally asynchronous)
half stick arrowhead: an asynchronous operation invocation
dashed arrow with stick arrowhead: return from an synchronous operation
invocation
The predecessor expression, together with the sequence expression, determines the
predecessor and activation (caller) associations between the Message and other
Messages. The predecessors of the Message are the Messages corresponding to the
sequence numbers in the predecessor list as well as the Message corresponding to the
immediate preceding sequence number as the Message (i.e., 1.2.2 is the one preceding
1.2.3). The caller of the Message is the Message whose sequence number is truncated
by one position, that is 1.2 is the caller of 1.2.3. The thread-of-control name maps onto
a Classifier stereotyped thread (i.e., an active class).
The return of a value maps into a Message from the called Object to the caller with the
dispatching Action being a ReturnAction. Its predecessor is the final Message within
the procedure. Its activation is the Message that called the procedure.
The recurrence expression, the iteration clause, and the condition clause determine the
recurrence value in the Action attached to the Message.
The operation name and the form of the signature determine the Operation attached to
the CallAction associated with the Message (similarly for a Signal and SendAction).
The arguments of the signature determine the arguments associated with the
CallAction and SendAction, respectively.
In a procedural interaction, each arrow symbol also maps into a second Message
representing the return flow, unless the return flow is explicitly shown. This Message
has an activation Association to the original call Message. Its associated Action is a
ReturnAction bearing the return values as arguments (if any).
3-124
OMG-UML V1.3
March 2000
3
3.72 Creation/Destruction Markers
3.72.1 Semantics
During the execution of an interaction some Objects and Links are created and some
are destroyed. The creation and destruction of elements can be marked.
3.72.2 Notation
An Object or a Link that is created during an interaction has the standard constraint
new attached to it. An Object or a Link that is destroyed during an interaction has the
standard constraint destroyed attached. These constraints may be used even if the
element has no name. Both constraints may be used together, but the standard
constraint transient may be used in place of new destroyed.
3.72.3 Presentation options
Tools may use other graphic markers in addition to or in place of the keywords. For
example, each kind of lifetime might be shown in a different color. A tool may also use
animation to show the creation and destruction of elements and the state of the system
at various times.
3.72.4 Example
See Figure 3-50 on page 3-109.
3.72.5 Mapping
Creation or destruction indicators map either into CreateActions, DestroyActions, or
TerminateActions in the corresponding ClassifierRoles. The former two Actions
dispatch the Stimuli that cause the changes. These status indicators are merely
summaries of the total actions.
3UML Notation
Part 9 - Statechart Diagrams
A statechart diagram can be used to describe the behavior of a model element such as
an object or an interaction. Specifically, it describes possible sequences of states and
actions through which the element can proceed during its lifetime as a result of
reacting to discrete events (e.g., signals, operation invocations).
The semantics and notation described in this chapter are substantially those of David
Harel’s statecharts with modifications to make them object-oriented. His work was a
major advance on the traditional flat state machines. Statechart notation also
implements aspects of both Moore machines and Mealy machines, traditional state
machine models.
OMG-UML V1.3
Creation/Destruction Markers
March 2000
3-125
3
3.73 Statechart Diagram
3.73.1 Semantics
Statechart diagrams represent the behavior of entities capable of dynamic behavior by
specifying its response to the receipt of event instances. Typically, it is used for
describing the behavior of classes, but statecharts may also describe the behavior of
other model entities such as use-cases, actors, subsystems, operations, or methods.
3.73.2 Notation
A statechart diagram is a graph that represents a state machine. States and various
other types of vertices (pseudostates) in the state machine graph are rendered by
appropriate state and pseudostate symbols, while transitions are generally rendered by
directed arcs that inter-connect them. States may also contain subdiagrams by physical
containment or tiling. Note that every state machine has a top state, which contains all
the other elements of the entire state machine. The graphical rendering of this top state
is optional.
The association between a state machine and its context does not have a special
notation.
An example statechart diagram for a simple telephone object is depicted in Figure 3-59
on page 3-127.
3-126
OMG-UML V1.3
March 2000
3
Active
Timeout
do/ play message
dial digit(n)
[incomplete]
after (15 sec.)
after (15 sec.)
DialTone
lift
receiver
/get dial tone
dial digit(n)
do/ play dial tone
Invalid
do/ play message
Idle
caller
hangs up
/disconnect
dial digit(n)[valid]
/connect
Connecting
busy
Pinned
callee
answers
Dialing
dial digit(n)[invalid]
Busy
callee
hangs up
connected
do/ play busy
tone
Ringing
Talking
callee answers
/enable speech
do/ play ringing
tone
Figure 3-59 State Diagram
3.73.3 Mapping
A statechart diagram maps into a StateMachine. That StateMachine may be owned by
a model element capable of dynamic behavior, such as classifier or a behavioral
feature, which provides the context for that state machine. Different contexts may
apply different semantic constraints on the state machine.
3.74 State
3.74.1 Semantics
A state is a condition during the life of an object or an interaction during which it
satisfies some condition, performs some action, or waits for some event. A composite
state is a state that, in contrast to a simple state, has a graphical decomposition.
(Composite states and their notation are described in more detail in Section 3.75,
“Composite States,” on page 3-130.) Conceptually, an object remains in a state for an
interval of time. However, the semantics allow for modeling “flow-through” states that
are instantaneous, as well as transitions that are not instantaneous.
OMG-UML V1.3
State
March 2000
3-127
3
A state may be used to model an ongoing activity. Such an activity is specified either
by a nested state machine or by a computational expression.
3.74.2 Notation
A state is shown as a rectangle with rounded corners (Figure 3-60 on page 3-129).
Optionally, it may have an attached name tab. The name tab is a rectangle, usually
resting on the outside of the top side of a state and it contains the name of that state. It
is normally used to keep the name of a composite state that has concurrent regions, but
may be used in other cases as well (the Process state in Figure 3-65 on page 3-137
illustrates the use of the name tab).
A state may be optionally subdivided into multiple compartments separated from each
other by a horizontal line. They are as follows:
•
Name compartment
This compartment holds the (optional) name of the state, as a string. States without
names are anonymous and are all distinct. It is undesirable to show the same named
state twice in the same diagram, as confusion may ensue. Name compartments
should not be used if a name tab is used and vice versa.
•
Internal transitions compartment
This compartment holds a list of internal actions or activities that are performed
while the element is in the state. The notation for each of these list items has the
following general format:
action-label ‘/’ action-expression
The action label identifies the circumstances under which the action specified by the
action expression will be invoked. The action expression may use any attributes and
links that are in the scope of the owning entity. For list items where the action
expression is empty, the backslash separator is optional.
A number of action labels are reserved for various special purposes and cannot be used
as event names. The following are the reserved action labels and their meaning:
•
entry
This label identifies an action, specified by the corresponding action expression,
which is performed upon entry to the state (entry action).
•
exit
This label identifies an action, specified by the corresponding action expression,
that is performed upon exit from the state (exit action).
•
do
This label identifies an ongoing activity (“do activity”) that is performed as long as
the modeled element is in the state or until the computation specified by the action
expression is completed (the latter may result in a completion event being
generated).
3-128
OMG-UML V1.3
March 2000
3
•
include
This label is used to identify a submachine invocation. The action expression
contains the name of the submachine that is to be invoked. Submachine states and
the corresponding notation are described in Section 3.81, “Submachine States,” on
page 3-142.
In all other cases, the action label identifies the event that triggers the corresponding
action expression. These events are called internal transitions and are semantically
equivalent to self transitions except that the state is not exited or re-entered. This
means that the corresponding exit and entry actions are not performed. The general
format for the list item of an internal transition is:
event-name ‘(’ comma-separated-parameter-list ‘)’ ‘[’ guard-condition‘]’ ‘/’
action-expression
Each event name may appear more than once per state if the guard conditions are
different. The event parameters and the guard conditions are optional. If the event has
parameters, they can be used in the action expression through the current event
variable.
3.74.3 Example
Typing Password
entry / set echo invisible
exit / set echo normal
character / handle character
help / display help
Figure 3-60 State
3.74.4 Mapping
A state symbol maps into a State. See Section 3.75, “Composite States,” on page 3-130
for further details on which kind of state.
The name string in the symbol maps to the name of the state. Two symbols with the
same name map into the same state. However, each state symbol with no name (or an
empty name string) maps into a distinct anonymous State.
A list item in the internal transition compartment maps into a corresponding Action
associated with a state. An “entry” list item (i.e., an item with the “entry” label) maps
to the “entry” role, an “exit” list item maps to the “exit” role, and a “do” item maps to
the “doActivity” role. (The mapping of “include” items is discussed in Section 3.81,
“Submachine States,” on page 3-142.)
OMG-UML V1.3
State
March 2000
3-129
3
A list item with an event name maps to a Transition associated with the “internal” role
relative to the state. The action expression maps into the ActionSequence and Guard
for the Transition. The event name and arguments map into an Event corresponding to
the event name and arguments. The Transition has a trigger Association to the Event.
3.75 Composite States
3.75.1 Semantics
A composite state is decomposed into two or more concurrent substates (called
regions) or into mutually exclusive disjoint substates. A given state may only be
refined in one of these two ways. Naturally, any substate of a composite state can also
be a composite state of either type.
A newly-created object takes its topmost default transition, originating from the
topmost initial pseudostate. An object that transitions to its outermost final state is
terminated.
Each region of a state may have initial pseudostates and final states. A transition to the
enclosing state represents a transition to the initial pseudostate. A transition to a final
state represents the completion of activity in the enclosing region. Completion of
activity in all concurrent regions represents completion of activity by the enclosing
state and triggers a completion event on the enclosing state. Completion of the top state
of an object corresponds to its termination.
3.75.2 Notation
An expansion of a state shows its internal state machine structure. In addition to the
(optional) name and internal transition compartments, the state may have an additional
compartment that contains a region holding a nested diagram. For convenience and
appearance, the text compartments may be shrunk horizontally within the graphic
region.
An expansion of a state into concurrent substates is shown by tiling the graphic region
of the state using dashed lines to divide it into regions. Each region is a concurrent
substate. Each region may have an optional name and must contain a nested state
diagram with disjoint states. The text compartments of the entire state are separated
from the concurrent substates by a solid line. It is also possible to use a tab notation to
place the name of a concurrent state. The tab notation is more space efficient.
An expansion of a state into disjoint substates is shown by showing a nested state
diagram within the graphic region.
An initial pseudostate is shown as a small solid filled circle. In a top-level state
machine, the transition from an initial pseudostate may be labeled with the event that
creates the object; otherwise, it must be unlabeled. If it is unlabeled, it represents any
transition to the enclosing state. The initial transition may have an action.
3-130
OMG-UML V1.3
March 2000
3
A final state is shown as a circle surrounding a small solid filled circle (a bull’s eye). It
represents the completion of activity in the enclosing state and it triggers a transition
on the enclosing state labeled by the implicit activity completion event (usually
displayed as an unlabeled transition), if such a transition is defined.
In some cases, it is convenient to hide the decomposition of a composite state. For
example, the state machine inside a composite state may be very large and may simply
not fit in the graphical space available for the diagram. In that case, the composite state
may be represented by a simple state graphic with a special “composite” icon, usually
in the lower right-hand corner. This icon, consisting of two horizontally placed and
connected states, is an optional visual cue that the state has a decomposition that is not
shown in this particular statechart diagram (Figure 3-62 on page 3-131). Instead, the
contents of the composite state are shown in a separate diagram. Note that the “hiding”
here is purely a matter of graphical convenience and has no semantic significance in
terms of access restrictions.
3.75.3 Examples
Dialing
digit(n)
Start
entry/ start dial tone
exit/ stop dial tone
[number.isValid()]
Partial Dial
entry/number.append(n)
digit(n)
Figure 3-61 Sequential Substates
HiddenComposite
entry/ start dial tone
exit/ stop dial tone
Figure 3-62 Composite State with hidden decomposition indicator icon
OMG-UML V1.3
Composite States
March 2000
3-131
3
Taking Class
Incomplete
Lab1
lab done
Lab2
lab
done
Passed
Term
Project
Final
Test
project done
pass
fail
Failed
Figure 3-63 Concurrent Substates
3.75.4 Mapping
A state symbol maps into a State. If the symbol has no subdiagrams in it, it maps into
a SimpleState. If it is tiled by dashed lines into regions, then it maps into a
CompositeState with the isConcurrent value true; otherwise, it maps into a
CompositeState with the isConcurrent value false. A region maps into a
CompositeState with the isRegion value true and the isConcurrent value false.
An initial pseudostate symbol map into a Pseudostate of kind initial. A final state
symbol maps to a final state.
3.76 Events
3.76.1 Semantics
An event is a noteworthy occurrence. For practical purposes in state diagrams, it is an
occurrence that may trigger a state transition. Events may be of several kinds (not
necessarily mutually exclusive).
3-132
OMG-UML V1.3
March 2000
3
•
A designated condition becoming true (described by a Boolean expression) results
in a change event instance. The event occurs whenever the value of the expression
changes from false to true. Note that this is different from a guard condition. A
guard condition is evaluated once whenever its event fires. If it is false, then the
transition does not occur and the event is lost.
•
The receipt of an explicit signal from one object to another results in a signal event
instance. It is denoted by the signature of the event as a trigger on a transition.
•
The receipt of a call for an operation implemented as a transition by an object
represents a call event instance.
•
The passage of a designated period of time after a designated event (often the entry
of the current state) or the occurrence of a given date/time is a TimeEvent.
The event declaration has scope within the package it appears in and may be used in
state diagrams for classes that have visibility inside the package. An event is not local
to a single class.
3.76.2 Notation
A signal or call event can be defined using the following format:
event-name ‘(‘ comma-separated-parameter-list ‘)
A parameter has the format:
parameter-name ‘:’ type-expression
A signal can be declared using the «signal» keyword on a class symbol in a class
diagram. The parameters are specified as attributes. A signal can be specified as a
subclass of another signal. This indicates that an occurrence of the subevent triggers
any transition that depends on the event or any of its ancestors.
An elapsed-time event can be specified with the keyword after followed by an
expression that evaluates (at modeling time) to an amount of time, such as “after (5
seconds)” or after (10 seconds since exit from state A).” If no starting point is
indicated, then it is the time since the entry to the current state. Other time events can
be specified as conditions, such as when (date = Jan. 1, 2000).
A condition becoming true is shown with the keyword when followed by a Boolean
expression. This may be regarded as a continuous test for the condition until it is true,
although in practice it would only be checked on a change of values.
Signals can be declared on a class diagram with the keyword «signal» on a rectangle
symbol. These define signal names that may be used to trigger transitions. Their
parameters are shown in the attribute compartment. They have no operations. They
may appear in a generalization hierarchy.
OMG-UML V1.3
Events
March 2000
3-133
3
3.76.3 Example
«signal»
InputEvent
time
«signal»
UserInput
device
«signal»
Mouse
Button
location
«signal»
Mouse
Button
Down
«signal»
Mouse
Button
Up
«signal»
Keyboard
Character
character
«signal»
Control
Character
«signal»
Space
«signal»
Graphic
Character
«signal»
Alphanumeric
«signal»
Punctuation
Figure 3-64 Signal Declaration
3.76.4 Mapping
A class box with stereotype «signal» maps into a Signal. The name and parameters are
given by the name string and the attribute list of the box. Generalization arrows
between signal class boxes map into Generalization relationships between the Signal.
The usage of an event string expression in a context requiring an event maps into an
implicit reference of the Event with the given name. It is an error if various uses of the
same name (including any explicit declarations) do not match.
3-134
OMG-UML V1.3
March 2000
3
3.77 Simple Transitions
3.77.1 Semantics
A simple transition is a relationship between two states indicating that an object in the
first state will enter the second state and perform specific actions when a specified
event occurs provided that certain specified conditions are satisfied. On such a change
of state, the transition is said to “fire.” The trigger for a transition is the occurrence of
the event labeling the transition. The event may have parameters, which are accessible
by the actions specified on the transition as well as in the corresponding exit and entry
actions associated with the source and target states respectively. Events are processed
one at a time. If an event does not trigger any transition, it is discarded. If it can trigger
more than one transition within the same sequential region (i.e., not in different
concurrent regions), only one will fire. If these conflicting transitions are of the same
priority, an arbitrary one is selected and triggered.
3.77.2 Notation
A transition is shown as a solid line originating from the source state and terminated
by an arrow on the target state. It may be labeled by a transition string that has the
following general format:
event-signature ‘[’ guard-condition ‘]’ ‘/’ action-expression
The event-signature describes an event with its arguments:
event-name ‘(’ comma-separated-parameter-list ‘)’
The guard-condition is a Boolean expression written in terms of parameters of the
triggering event and attributes and links of the object that owns the state machine. The
guard condition may also involve tests of concurrent states of the current machine, or
explicitly designated states of some reachable object (for example, “in State1” or “not
in State2”). State names may be fully qualified by the nested states that contain them,
yielding pathnames of the form “State1::State2::State3.” This may be used in case
same state name occurs in different composite state regions of the overall machine.
The action-expression is executed if and when the transition fires. It may be written in
terms of operations, attributes, and links of the owning object and the parameters of the
triggering event, or any other features visible in its scope. The corresponding action
must be executed entirely before any other actions are considered. This model of
execution is referred to as run-to-completion semantics. The action expression may be
an action sequence comprising a number of distinct actions including actions that
explicitly generate events, such as sending signals or invoking operations. The details
of this expression are dependent on the action language chosen for the model.
3.77.2.1 Transition times
Names may be placed on transitions to designate the times at which they fire. See
Section 3.62, “Transition Times,” on page 3-104.
OMG-UML V1.3
Simple Transitions
March 2000
3-135
3
3.77.3 Example
right-mouse-down (location) [location in window] / object := pick-object (location);
object.highlight ()
The event may be any of the standard event types. Selecting the type depends on the
syntax of the name (for time events, for example); however, SignalEvents and
CallEvents are not distinguishable by syntax and must be discriminated by their
declaration elsewhere.
3.77.4 Mapping
A transition string and the transition arrow that it labels together map into a Transition
and its attachments. The arrow connects two state symbols. The Transition has the
corresponding States as its source (the state at the tail) and destination (the state at the
head) States in association to the Transition.
The event name and parameters map into an Event element, which may be a
SignalEvent, a CallEvent, a TimeExpression (if it has the proper syntax), or a
ChangeEvent (if it is expressed as a Boolean expression). The event is attached as a
“trigger” role in the association to the transition.
The guard condition maps into a Guard element attached to the Transition. Note that a
guard condition is distinguished graphically from a change event specification by being
enclosed in brackets.
An action expression maps into an Action attached as an “effect” role relative to the
Transition.
3.78 Transitions to and from Concurrent States
A concurrent transition may have multiple source states and target states. It represents
a synchronization and/or a splitting of control into concurrent threads without
concurrent substates.
3.78.1 Semantics
A concurrent transition is enabled when all the source states are occupied. After a
compound transition fires, all its destination states are occupied.
3.78.2 Notation
A concurrent transition includes a short heavy bar (a synchronization bar, which can
represent synchronization, forking, or both). The bar may have one or more arrows
from states to the bar (these are the source states). The bar may have one or more
arrows from the bar to states (these are the destination states). A transition string may
be shown near the bar. Individual arrows do not have their own transition strings.
3-136
OMG-UML V1.3
March 2000
3
3.78.3 Example
Process
A1
A2
Setup
Cleanup
B1
B2
Figure 3-65 Concurrent Transitions
3.78.4 Mapping
A bar with multiple transition arrows leaving it maps into a fork pseudostate. A bar
with multiple transition arrows entering it maps into a join pseudostate. The transitions
corresponding to the incoming and outgoing arrows attach to the pseudostate as if it
were a regular state. If a bar has multiple incoming and multiple outgoing arrows, then
it maps into a join connected to a fork pseudostate by a single transition with no
attachments.
3.79 Transitions to and from Composite States
3.79.1 Semantics
A transition drawn to the boundary of a composite state is equivalent to a transition to
its initial point (or to a complex transition to the initial point of each of its concurrent
regions, if it is concurrent). The entry action is always performed when a state is
entered from outside.
A transition from a composite state indicates a transition that applies to each of the
states within the state region (at any depth). It is “inherited” by the nested states.
Inherited transitions can be masked by the presence of nested transitions with the same
trigger.
3.79.2 Notation
A transition drawn to a composite state boundary indicates a transition to the
composite state. This is equivalent to a transition to the initial pseudostate within the
composite state region. The initial pseudostate must be present. If the state is a
concurrent composite state, then the transition indicates a transition to the initial
pseudostate of each of its concurrent substates.
OMG-UML V1.3
Transitions to and from Composite States
March 2000
3-137
3
Transitions may be drawn directly to states within a composite state region at any
nesting depth. All entry actions are performed for any states that are entered on any
transition. On a transition within a concurrent composite state, transition arrows from
the synchronization bar may be drawn to one or more concurrent states. Any other
concurrent regions start with their default initial pseudostate.
A transition drawn from a composite state boundary indicates a transition of the
composite state. If such a transition fires, any nested states are forcibly terminated and
perform their exit actions, then the transition actions occur and the new state is
established.
Transitions may be drawn directly from states within a composite state region at any
nesting depth to outside states. All exit actions are performed for any states that are
exited on any transition. On a transition from within a concurrent composite state,
transition arrows may be specified from one or more concurrent states to a
synchronization bar; therefore, specific states in the other regions are irrelevant to
triggering the transition.
A state region may contain a history state indicator shown as a small circle containing
an ‘H.’ The history indicator applies to the state region that directly contains it. A
history indicator may have any number of incoming transitions from outside states. It
may have at most one outgoing unlabeled transition. This identifies the default
“previous state” if the region has never been entered. If a transition to the history
indicator fires, it indicates that the object resumes the state it last had within the
composite region. Any necessary entry actions are performed. The history indicator
may also be ‘H*’ for deep history. This indicates that the object resumes the state it
last had at any depth within the composite region, rather than being restricted to the
state at the same level as the history indicator. A region may have both shallow and
deep history indicators.
3.79.3 Presentation Options
3.79.3.1 Stubbed transitions
Nested states may be suppressed. Transitions to nested states are subsumed to the most
specific visible enclosing state of the suppressed state. Subsumed transitions that do
not come from an unlabeled final state or go to an unlabeled initial pseudostate may
(but need not) be shown as coming from or going to stubs. A stub is shown as a small
vertical line (bar) drawn inside the boundary of the enclosing state. It indicates a
transition connected to a suppressed internal state. Stubs are not used for transitions to
initial or from final states.
Note that events should be shown on transitions leading into a state, either to the state
boundary or to an internal substate, including a transition to a stubbed state. Normally
events should not be shown on transitions leading from a stubbed state to an external
state. Think of a transition as belonging to its source state. If the source state is
suppressed, then so are the details of the transition. Note also that a transition from a
final state is summarized by an unlabeled transition from the composite state contour
(denoting the implicit event “action complete” for the corresponding state).
3-138
OMG-UML V1.3
March 2000
3
3.79.4 Example
See Figure 3-64 on page 3-134 and Figure 3-65 on page 3-137 for examples of
composite transitions. The following are examples of stubbed transitions and the
history indicator.
W
s
p
s
E
A
C
u
r
t
F
B
D
may be abstracted as
s
p
W
C
A
r
B
D
Figure 3-66 Stubbed Transitions
A
interrupt
A1
C
resume
H
A2
Figure 3-67 History Indicator
OMG-UML V1.3
Transitions to and from Composite States
March 2000
3-139
3
3.79.5 Mapping
An arrow to any state boundary, nested or not, maps into a Transition between the
corresponding States and similarly for transitions directly to history states.
A history indicator maps into a Pseudostate of kind shallowHistory or deepHistory.
A stubbed transition does not map into anything in the model. It is a notational elision
that indicates the presence of transitions to additional states in the model that are not
visible in the diagram.
3.80 Factored Transition Paths
3.80.1 Semantics
By definition, a transition connects exactly two vertices in the state machine graph.
However, since some of these vertices may be pseudostates (which are transient in
nature) there is a need for describing chains of transitions that may be executed in the
context of a single run-to-completion step. Such a transition is known as a compound
transition.
As a practical measure, it is often useful to share segments of a compound transition.
For example, two or more distinct compound transitions may come together and
continue via a common path, sharing its action, and possibly terminating on the same
target state. In other cases, it may be useful to split a transition into separate mutually
exclusive (i.e., non-concurrent) paths.
Both of these examples of graphical factoring in which some transitions are shared
result in simplified diagrams. However, factoring is also useful for modeling
dynamically adaptive behavior. An example of this occurs when a single event may
lead to any of a set of possible target states, but where the final target state is only
determined as the result of an action (calculation) performed after the triggering of the
compound transition.
Note that the splitting and joining of paths due to factoring is different from the
splitting and joining of concurrent transitions described in Section 3.78, “Transitions to
and from Concurrent States,” on page 3-136. The sources and targets of these factored
transitions are not concurrent.
3.80.2 Notation
Two or more transitions emanating from different non-concurrent states or
pseudostates can terminate on a common junction point. This allows their respective
compound transitions to share the path that emanates from that junction point. A
junction point is represented by a small black circle. Alternatively, it may be
represented by a diamond shape (see Section 3.86, “Decisions,” on page 3-150).
Two or more guarded transitions emanating from the same junction point represent a
static branch point. Normally, the guards are mutually exclusive. This is equivalent to
a set of individual transitions, one for each path through the tree, whose guard
3-140
OMG-UML V1.3
March 2000
3
condition is the “and” of all of the conditions along the path. Note that the semantics
of static branches is that all the outgoing guards are evaluated before any transition is
taken.
Two or more guarded transitions emanating from a common dynamic choice point are
used to model dynamic choices. In this case, the guards of the outgoing transitions are
evaluated at the time the choice point has been reached. The value of these guards may
be a function of some calculations performed in the actions of the incoming
transition(s). A dynamic choice point is represented by a small white circle
(reminiscent of a small state icon).
3.80.3 Examples
In Figure 3-68 a single junction point is used to merge and split transitions. Regardless
of whether the junction point was reached from state State0 or from state State1, the
outgoing paths are the same for both cases.
If the state machine in this example is in state State1 and b is less than 0 when event
e1 occurs, the outgoing transition will be taken only if one of the three downstream
guards is true. Thus, if a is equal to 6 at that point, no transition will be triggered.
State0
State1
e2[b < 0]
e1[b < 0]
[a > 7]
[a < 0]
[a = 5]
State2
State3
State4
Figure 3-68 Junction points
In the dynamic choice point example in Figure 3-69 on page 3-142, the decision on
which branch to take is only made after the transition from State1 is taken and the
choice point is reached. Note that the action associated with that incoming transition
computes a new value for a. This new value can then be used to determine the outgoing
transition to be taken. The use of the predefined condition[else] is recommended to
avoid run-time errors.
OMG-UML V1.3
Factored Transition Paths
March 2000
3-141
3
State1
e1[b < 0]/a := f(m)
[else]
[a < 0]
[a = 5]
State2
State3
State4
Figure 3-69 Dynamic choice points
3.81 Submachine States
3.81.1 Semantics
A submachine state represents the invocation of a state machine defined elsewhere. It
is similar to a macro call in the sense that it represents a (graphical) shorthand that
implies embedding of a complex specification within another specification. The
submachine must be contained in the same context as the invoking state machine.
In the general case, an invoked state machine can be entered at any of its substates or
through its default (initial) pseudostate. Similarly, it can be exited from any substate or
as a result of the invoked state machine reaching its final state or by an “inherited” or
“group” transition that applies to all substates in the submachine.
The non-default entry and exits are specified through special stub states.
3.81.2 Notation
The submachine state is depicted as a normal state with the appropriate “include”
declaration within its internal transitions compartment (see Section 3.74, “State,” on
page 3-127). The expression following the include reserved word is the name of the
invoked submachine.
Optionally, the submachine state may contain one or more entry stub states and one or
more exit stub states. The notation for these is similar to that used for stub ends of
stubbed transitions, except that the ends are labeled. The labels represent the names of
the corresponding substates within the invoked submachine. A pathname may be used
if the substate is not defined at the top level of the invoked submachine. Naturally, this
name must be a valid name of a state in the invoked state machine.
3-142
OMG-UML V1.3
March 2000
3
If the submachine is entered through its default pseudostate or if it is exited as a result
of the completion of the submachine, it is not necessary to use the stub state notation
for these cases. Similarly, a stub state is not required if the exit occurs through an
explicit “group” transition that emanates from the boundary of the submachine state
(implying that it applies to all the substates of the submachine).
Submachine states invoking the same submachine may occur multiple times in the
same state diagram with different entry and exit configurations and with different
internal transitions and exit and entry action specifications in each case.
3.81.3 Example
The following diagram shows a fragment from a statechart diagram in which a
submachine (the FailureSubmachine) is invoked in a particular way. The actual
submachine is presumably defined elsewhere and is not shown in this diagram. Note
that the same submachine could be invoked elsewhere in the same statechart diagram
with different entry and exit configurations.
Handle Failure
include / FailureSubmachine
error2/
error1/
sub1
error3/
sub1::sub12
subEnd
fixed1/
Figure 3-70 Submachine State
In the above example, the transition triggered by event “error1” will terminate on state
“sub1” of the FailureSubmachine state machine. Since the entry point does not contain
a path name, this means that “sub1” is defined at the top level of that submachine. In
contrast, the transition triggered by “error2” will terminate on the “sub12” substate of
the “sub1”substate (as indicated by the path name), while the “error3” transition
implies taking of the default transition of the FailureSubmachine.
The transition triggered by the event “fixed1” emanates from the “subEnd” substate of
the submachine. Finally, the transition emanating from the edge of the submachine
state is taken as a result of the completion event generated when the
FailureSubmachine reaches its final state.
OMG-UML V1.3
Submachine States
March 2000
3-143
3
3.81.4 Mapping
A submachine state in a statechart diagram maps directly to a SubmachineState in the
metamodel. The name following the “include” reserved action label represents the state
machine indicated by the “submachine” attribute. Stub states map to the Stub State
concept in the metamodel. The label on the diagram corresponds to the pathname
represented by the “referenceState” attribute of the stub state.
3.82 Synch States
3.82.1 Semantics
A synch state is for synchronizing concurrent regions of a state machine. It is used in
conjunction with forks and joins to insure that one region leaves a particular state or
states before another region can enter a particular state or states. The firing of outgoing
transitions from a synch state can be limited by specifying a bound on the difference
between the number of times outgoing and incoming transitions have fired.
3.82.2 Notation
A synch state is shown as a small circle with the upper bound inside it. The bound is
either a positive integer or a star ('*') for unlimited. Synch states are drawn on the
boundary between two regions when possible.
3-144
OMG-UML V1.3
March 2000
3
3.82.3 Example
Build House
Build
Frame
Put On
Roof
Install
Walls
Install
Foundation
Inspect
*
*
Install
Electricity
In Foundation
Install
Electricity
In Frame
Install
Electricity
Outside
Figure 3-71 Synch states
3.82.4 Mapping
A synch state circle maps into a SynchState, contained by the least common containing
state of the regions it is synchronizing. The number inside it maps onto the bound
attribute of the synch state. A star ('*') inside the synch state circle maps to a value of
Unlimited for the bound attribute.
Part 10 - Activity Diagrams
3.83 Activity Diagram
3.83.1 Semantics
An activity graph is a variation of a state machine in which the states represent the
performance of actions or subactivities and the transitions are triggered by the
completion of the actions or subactivities. It represents a state machine of a procedure
itself.
OMG-UML V1.3
Activity Diagram
March 2000
3-145
3
3.83.2 Notation
An activity diagram is a special case of a state diagram in which all (or at least most)
of the states are action or subactivity states and in which all (or at least most) of the
transitions are triggered by completion of the actions or subactivities in the source
states. The entire activity diagram is attached (through the model) to a class, such as a
use case, or to a package, or to the implementation of an operation. The purpose of this
diagram is to focus on flows driven by internal processing (as opposed to external
events). Use activity diagrams in situations where all or most of the events represent
the completion of internally-generated actions (that is, procedural flow of control). Use
ordinary state diagrams in situations where asynchronous events occur.
3-146
OMG-UML V1.3
March 2000
3
3.83.3 Example
Person::Prepare Beverage
Find
Beverage
[no coffee]
[found cola]
[found coffee]
Put Coffee
in Filter
Add Water
to Reservoir
[no cola]
Get
Cups
Put Filter
in Machine
Get cans
of cola
Turn on
Machine
/coffeePot.turnOn
Brew coffee
light goes out
Pour Coffee
Drink
Figure 3-72 Activity Diagram
OMG-UML V1.3
Activity Diagram
March 2000
3-147
3
3.83.4 Mapping
An activity diagram maps into an ActivityGraph.
3.84 Action State
3.84.1 Semantics
An action state is shorthand for a state with an entry action and at least one outgoing
transition involving the implicit event of completing the entry action (there may be
several such transitions if they have guard conditions). Action states should not have
internal transitions or outgoing transitions based on explicit events, use normal states
for this situation. The normal use of an action state is to model a step in the execution
of an algorithm (a procedure) or a workflow process.
3.84.2 Notation
An action state is shown as a shape with straight top and bottom and with convex arcs
on the two sides. The action-expression is placed in the symbol. The action expression
need not be unique within the diagram.
Transitions leaving an action state should not include an event signature. Such
transitions are implicitly triggered by the completion of the action in the state. The
transitions may include guard conditions and actions.
3.84.3 Presentation options
The action may be described by natural language, pseudocode, or programming
language code. It may use only attributes and links of the owning object.
Note that action state notation may be used within ordinary state diagrams; however,
they are more commonly used with activity diagrams, which are special cases of state
diagrams.
3.84.4 Example
matrix.invert (tolerance:Real)
drive to work
Figure 3-73 Action States
3-148
OMG-UML V1.3
March 2000
3
3.84.5 Mapping
An action state symbol maps into an ActionState with the action-expression mapped to
the entry action of the State. There is no exit nor any internal transitions. The State is
normally anonymous.
3.85 Subactivity State
3.85.1 Semantics
A subactivity state invokes an activity graph. When a subactivity state is entered, the
activity graph “nested” in it is executed as any activity graph would be. The subactivity
state is not exited until the final state of the nested graph is reached, or when trigger
events occur on transitions coming out of the subactivity state. Since states in activity
graphs do not normally have trigger events, subactivity states are normally exited when
their nested graph is finished. A single activity graph may be invoked by many
subactivity states.
3.85.2 Notation
A subactivity state is shown in the same way as an action state with the addition of an
icon in the lower right corner depicting a nested activity diagram. The name of the
subactivity is placed in the symbol. The subactivity need not be unique within the
diagram.
This notation is applicable to any UML construct that supports “nested” structure. The
icon must suggest the type of nested structure.
3.85.3 Example
Fill Order
Build Product
Figure 3-74 Subactivity States
3.85.4 Mapping
A subactivity state symbol maps into a SubactivityState. The name of the subactivity
maps to a submachine link between the SubactivityState and a StateMachine of that
name. The SubactivityState is normally anonymous.
OMG-UML V1.3
Subactivity State
March 2000
3-149
3
3.86 Decisions
3.86.1 Semantics
A state diagram (and by derivation an activity diagram) expresses a decision when
guard conditions are used to indicate different possible transitions that depend on
Boolean conditions of the owning object. UML provides a shorthand for showing
decisions and merging their separate paths back together.
3.86.2 Notation
A decision may be shown by labeling multiple output transitions of an action with
different guard conditions.
The icon provided for a decision is the traditional diamond shape, with one incoming
arrow and with two or more outgoing arrows, each labeled by a distinct guard
condition with no event trigger. All possible outcomes should appear on one of the
outgoing transitions. A predefined guard denoted “else” may be defined for at most
one outgoing transition. This transition is enabled if all the guards labeling the other
transitions are false.
The same icon can be used to merge decision branches back together, in which case it
is called a merge. A merge has two or more incoming arrows and one outgoing arrow.
Note that a chain of decisions may be part of a complex transition, but only the first
segment in such a chain may contain an event trigger label. All segments may have
guard expressions. The transition coming from a merge may not have a trigger label or
guard expressions.
3.86.3 Example
Calculate
total cost
Charge
customer’s
account
[cost < $50]
[cost ≥ $50]
Get
authorization
Figure 3-75 Decision and merge
3-150
OMG-UML V1.3
March 2000
3
3.86.4 Mapping
A decision symbol maps into a Pseudostate of kind junction. Each label on an outgoing
arrow maps into a Guard on the corresponding Transition leaving the Pseudostate. A
merge symbol also maps into a Pseudostate of kind junction.
3.87 Swimlanes
3.87.1 Semantics
Actions and subactivities may be organized into swimlanes. Swimlanes are used to
organize responsibility for actions and subactivities according to class. They often
correspond to organizational units in a business model.
3.87.2 Notation
An activity diagram may be divided visually into “swimlanes,” each separated from
neighboring swimlanes by vertical solid lines on both sides. Each swimlane represents
responsibility for part of the overall activity, and may eventually be implemented by
one or more objects. The relative ordering of the swimlanes has no semantic
significance, but might indicate some affinity. Each action is assigned to one swimlane.
Transitions may cross lanes. There is no significance to the routing of a transition path.
OMG-UML V1.3
Swimlanes
March 2000
3-151
3
3.87.3 Example
Customer
Sales
Stockroom
Request service
Take order
Pay
Fill order
Deliver order
Collect order
Figure 3-76 Swimlanes in Activity Diagram
3.87.4 Mapping
A swimlane maps into a Partition of the States in the ActivityGraph. A state symbol in
a swimlane causes the corresponding State to belong to the corresponding Partition.
3-152
OMG-UML V1.3
March 2000
3
3.88 Action-Object Flow Relationships
3.88.1 Semantics
Actions operate by and on objects. These objects either have primary responsibility for
initiating an action, or are used or determined by the action. Actions usually specify
calls sent between the object owning the activity graph, which initiates actions, and the
objects that are the targets of the actions.
3.88.2 Notation
3.88.2.1 Object responsible for an action
In sequence diagrams, the object responsible for performing an action is shown by
drawing a lifeline and placing actions on lifelines. See Section 3.58, “Sequence
Diagram,” on page 3-94. Activity diagrams do not show the lifeline, but each action
specifies which object performs its operation. These objects may also be related to the
swimlane in some way. The actions within a swimlane can all be handled by the same
object or by multiple objects.
3.88.2.2 Object flow
Objects that are input to or output from an action may be shown as object symbols. A
dashed arrow is drawn from an action state to an output object, and a dashed arrow is
drawn from an input object to an action state. The same object may be (and usually is)
the output of one action and the input of one or more subsequent actions.
The control flow (solid) arrows must be omitted when the object flow (dashed) arrows
supply a redundant constraint. In other words, when a state produces an output that is
input to a subsequent state, that object flow relationship implies a control constraint.
3.88.2.3 Object in state
Frequently the same object is manipulated by a number of successive actions or
subactivities. It is possible to show one object with arrows to and from all of the
relevant actions and subactivities, but for greater clarity, the object may be displayed
multiple times on a diagram. Each appearance denotes a different point during the
object’s life. To distinguish the various appearances of the same object, the state of the
object at each point may be placed in brackets and appended to the name of the object
(for example, PurchaseOrder[approved]). This notation may also be used in
collaboration and sequence diagrams.
OMG-UML V1.3
Action-Object Flow Relationships
March 2000
3-153
3
3.88.3 Example
Customer
Sales
Stockroom
Request service
Order
[placed]
Take order
Order
[entered]
Pay
Order
[filled]
Fill order
Deliver order
Order
[delivered]
Collect order
Figure 3-77 Actions and Object Flow
3.88.4 Mapping
An object flow symbol maps into an ObjectFlowState whose incoming and outgoing
Transitions correspond to the incoming and outgoing arrows. The Transitions have no
attachments. The class name and (optional) state name of the object flow symbol map
into a Class or a ClassifierInState corresponding to the name(s). Solid and dashed
arrows both map to transitions.
3-154
OMG-UML V1.3
March 2000
3
3.89 Control Icons
The following icons provide explicit symbols for certain kinds of information that can
be specified on transitions. These icons are not necessary for constructing activity
diagrams, but many users prefer the added impact that they provide.
3.89.1 Notation
3.89.1.1 Signal receipt
The receipt of a signal may be shown as a concave pentagon that looks like a rectangle
with a triangular notch in its side (either side). The signature of the signal is shown
inside the symbol. An unlabeled transition arrow is drawn from the previous action
state to the pentagon and another unlabeled transition arrow is drawn from the
pentagon to the next action state. A dashed arrow may be drawn from an object symbol
to the notch on the pentagon to show the sender of the signal; this is optional.
3.89.1.2 Signal sending
The sending of a signal may be shown as a convex pentagon that looks like a rectangle
with a triangular point on one side (either side). The signature of the signal is shown
inside the symbol. A unlabeled transition arrow is drawn from the previous action state
to the pentagon and another unlabeled transition arrow is drawn from the pentagon to
the next action state. A dashed arrow may be drawn from the point on the pentagon to
an object symbol to show the receiver of the signal, this is optional.
OMG-UML V1.3
Control Icons
March 2000
3-155
3
Turn on
Machine
turnOn
coffeePot
Brew coffee
light goes out
Pour Coffee
Figure 3-78 Symbols for Signal Receipt and Sending
3.89.1.3 Deferred events
A frequent situation is when an event that occurs must be “deferred” for later use while
some other action or subactivity is underway. (Normally an event that is not handled
immediately is lost.) This may be thought of as having an internal transition that
handles the event and places it on an internal queue until it is needed or until it is
discarded. Each state specifies a set of events that are deferred if they occur during the
state and are not used to trigger a transition. If an event is not included in the set of
deferrable events for a state, and it does not trigger a transition, then it is discarded
from the queue even if it has already occurred. If a transition depends on an event, the
transition fires immediately if the event is already on the internal queue. If several
transitions are possible, the leading event in the queue takes precedence.
A deferrable event is shown by listing it within the state followed by a slash and the
special operation defer. If the event occurs, it is saved and it recurs when the object
transitions to another state, where it may be deferred again. When the object reaches a
state in which the event is not deferred, it must be accepted or lost. The indication may
be placed on a composite state or its equivalents, submachine and subactivity states, in
which case it remains deferrable throughout the composite state. A contained transition
may still be triggered by a deferrable event, whereupon it is removed from the queue.
3-156
OMG-UML V1.3
March 2000
3
It is not necessary to defer events on action states, because these states are not
interruptible for event processing. In this case, both deferred and undeferred events that
occur during the state are deferred until the state is completed. This means that the
timing of the transition will be the same regardless of the relative order of the event
and the state completion, and regardless of whether events are deferred.
Turn on
Machine
turnOn
Brew coffee
light goes out / defer
Get Cups
light goes out / defer
light goes out
Pour Coffee
Figure 3-79 Deferred Event
3.89.2 Mapping
A signal receipt symbol maps into a state with no actions or internal transitions. Its
specified event maps to a trigger event on the outgoing transition between it and the
following state.
A signal send symbol maps into a SendAction on the incoming transition between it
and the previous state.
A deferred event attached to a state maps into a deferredEvent association from the
State to the Event.
OMG-UML V1.3
Control Icons
March 2000
3-157
3
3.90 Synch States
The SynchState notation may be omitted in Activity Diagrams when a SynchState has
one incoming and one outgoing transition, and an unlimited bound. The semantics and
mapping are the same as if the synch state circles were included, as defined for state
machine notation.
Build House
Put On
Roof
Build
Frame
Install
Walls
Install
Foundation
Inspect
Install
Electricity
In Foundation
Install
Electricity
In Frame
Install
Electricity
Outside
Figure 3-80 Synchronizing parallel activities
3.91 Dynamic Invocation
3.91.1 Semantics
The actions of an action state or the activity graph of a subactivity state may be
executed more than once concurrently. The number of concurrent invocations is
determined at runtime by a concurrency expression, which evaluates to a set of
argument lists, one argument list for each invocation.
3.91.2 Notation
If the dynamic concurrency of an action or subactivity state is not always exactly one,
its multiplicity is shown in the upper right corner of the state. Otherwise, nothing is
shown.
3-158
OMG-UML V1.3
March 2000
3
3.91.3 Mapping
A multiplicity string in the upper right corner of an action or subactivity state maps to
the same value in the dynamicMultiplicity attribute of the state. The presence of a
multiplicity string also maps to a value of true for the isDynamic attribute of the state.
If no multiplicity is present, the value of the isDynamic attribute is false.
3.92 Conditional Forks
In Activity Diagrams, transitions outgoing from forks may have guards. This means the
region initiated by a fork transition might not start, and therefore is not required to
complete at the corresponding join. The usual notation and mapping for guards may be
used on the transition outgoing from a fork.
Part 11 - Implementation Diagrams
Implementation diagrams show aspects of implementation, including source code
structure and run-time implementation structure. They come in two forms:
1. component diagrams show the structure of the code itself and
2. deployment diagrams show the structure of the run-time system.
They can also be applied in a broader sense to business modeling in which the “code”
components are the business procedures and documents and the “run-time structure” is
the organization units and resources (human and other) of the business.
3.93 Component Diagram
3.93.1 Semantics
A component diagram shows the dependencies among software components, including
source code components, binary code components, and executable components. For a
business, “software” components are taken in the broad sense to include business
procedures and documents. A software module may be represented as a component
stereotype. Some components exist at compile time, some exist at link time, some exist
at run time, and some exist at more than one time. A compile-only component is one
that is only meaningful at compile time. The run-time component in this case would be
an executable program.
A component diagram has only a type form, not an instance form. To show component
instances, use a deployment diagram (possibly a degenerate one without nodes).
3.93.2 Notation
A component diagram is a graph of components connected by dependency
relationships. Components may also be connected to components by physical
containment representing composition relationships.
OMG-UML V1.3
Conditional Forks
March 2000
3-159
3
A diagram containing component types and node types may be used to show static
dependencies, such as compiler dependencies between programs, which are shown as
dashed arrows (dependencies) from a client component to a supplier component that it
depends on in some way. The kinds of dependencies are implementation-specific and
may be shown as stereotypes of the dependencies.
As a classifier, a component may have operations and may realize interfaces. The
diagram may show these interfaces and calling dependencies among components, using
dashed arrows from components to interfaces on other components.
3.93.3 Example
Scheduler
Planner
Reservations
Update
GUI
Figure 3-81 Component Diagram
3.93.4 Mapping
A component diagram maps to a static model whose elements include Components.
3-160
OMG-UML V1.3
March 2000
3
3.94 Deployment Diagram
3.94.1 Semantics
Deployment diagrams show the configuration of run-time processing elements and the
software components, processes, and objects that live on them. Software component
instances represent run-time manifestations of code units. Components that do not exist
as run-time entities (because they have been compiled away) do not appear on these
diagrams, they should be shown on component diagrams.
For business modeling, the run-time processing elements include workers and
organizational units, and the software components include procedures and documents
used by the workers and organizational units.
3.94.2 Notation
A deployment diagram is a graph of nodes connected by communication associations.
Nodes may contain component instances. This indicates that the component lives or
runs on the node. Components may contain objects, this indicates that the object
resides on the component. Components are connected to other components by dashedarrow dependencies (possibly through interfaces). This indicates that one component
uses the services of another component. A stereotype may be used to indicate the
precise dependency, if needed.
The deployment type diagram may also be used to show which components may reside
on which nodes, by using dashed arrows with the stereotype «support» from the
component symbol to the node symbol or by graphically nesting the component
symbol within the node symbol.
Migration of component instances from node instance to node instance or objects from
component instance to component instance may be shown using the «become»
stereotype of the dependency relationship. In this case the component instance or
object is resident on its node instance or component instance only part of the entire
time.
Note that a process is just a special kind of object (see Section 3.70, “Active object,”
on page 3-118).
OMG-UML V1.3
Deployment Diagram
March 2000
3-161
3
3.94.3 Example
AdminServer:HostMachine
«database»
meetingsDB
:Scheduler
reservations
Joe’sMachine:PC
:Planner
Figure 3-82 Nodes
3.94.4 Mapping
A deployment diagram maps to a static model whose elements include Nodes. It is not
particularly distinguished in the model.
3.95 Node
3.95.1 Semantics
A node is a physical object that represents a processing resource, generally having at
least a memory and often processing capability as well. Nodes include computing
devices but also human resources or mechanical processing resources. Nodes may be
represented as type and as instances. Run time computational instances, both objects
and component instances, may reside on node instances.
3-162
OMG-UML V1.3
March 2000
3
3.95.2 Notation
A node is shown as a figure that looks like a 3-dimensional view of a cube. A node
type has a type name:
node-type
A node instance has a name and a type name. The node may have an underlined name
string in it or below it. The name string has the syntax:
name ‘:’ node-type
The name is the name of the individual node (if any). The node-type says what kind of
node it is. Either or both elements are optional; if the node-type is omitted, then so is
the colon.
Dashed arrows with the keyword «support» show the capability of a node type to
support a component type. Alternatively, this may be shown by nesting component
symbols inside the node symbol.
Component instances and objects may be contained within node instance symbols.
This indicates that the items reside on the node instances.
Nodes may be connected by associations to other nodes. An association between nodes
indicates a communication path between the nodes. The association may have a
stereotype to indicate the nature of the communication path (for example, the kind of
channel or network).
3.95.3 Example
This example shows two nodes containing a component (cluster) that migrates from
one node to another and a component (database) that remains in place.
OMG-UML V1.3
Node
March 2000
3-163
3
Node1
«database»
«cluster»
x
w
z
y
«become»
Node2
«cluster»
x
y
Figure 3-83 Use of Nodes to Hold Components
3.95.4 Mapping
A node maps to a Node.
A «support» arrow or the nesting of a component symbol within a node symbol maps
into a residence metalink between the Component and the Node. The nesting of a
component-instance symbol within a node-instance symbol maps to a residence
metalink between the ComponentInstance and the NodeInstance.
3.96 Component
3.96.1 Semantics
A component type represents a distributable piece of implementation of a system,
including software code (source, binary, or executable) but also including business
documents, etc., in a human system. Components may be used to show dependencies,
such as compiler and run-time dependencies or information dependencies in a human
organization. A component instance represents a run-time implementation unit and
may be used to show implementation units that have identity at run time, including
their location on nodes.
3-164
OMG-UML V1.3
March 2000
3
3.96.2 Notation
A component is shown as a rectangle with two small rectangles protruding from its
side. A component type has a type name:
component-type
A component instance has a name and a type. The name of the component and its type
may be shown as an underlined string either within the component symbol or above or
below it, with the syntax:
component-name ‘:’ component-type
Either or both elements are optional. If the component-type is omitted, then so is the
colon.
A property may be used to indicate the life-cycle stage that the component describes
(source, binary, executable, or more than one of those). Components (including
programs, DLLs, run-time linkable images, etc.) may be located on nodes.
Objects that reside on a component instance (that is, which are implemented by it) are
shown as nested inside the component instance symbol. By analogy, classes that are
implemented by a component may be shown as nested within it; this indicates
implementation and not ownership.
Elements that reside in (i.e., are implemented by) a component are shown nested inside
the component symbol. The visibility of a resident element to other components may
be shown using the same notation as for the visibility of the contents of a package
(prepending a visibility symbol to the name of the package). The meaning of the
visibility depends on the nature of the component. For a source-language component
(such as program text), it would control the accessibility of source-language constructs.
For a run-time code component (such as executable code), it would control the ability
of code in other components to call or otherwise access code in the component.
OMG-UML V1.3
Component
March 2000
3-165
3
3.96.3 Example
The example shows a component with interfaces and also a component that contains
objects at run time.
Spell-check
Dictionary
Synonyms
mymailer: Mailer
+Mailbox
+RoutingList
-MailQueue
Figure 3-84 Components
3.96.4 Mapping
A component symbol maps to a Component.
The graphical nesting of an element (other than a component symbol) in a component
symbol maps to an ElementResidence metalink between the ModelElement and the
Component. Graphical nesting of a component symbol in another component symbol
maps to a composition association. The graphical nesting of an instance symbol in a
component instance symbol maps to a residence metalink between the Instance and the
ComponentInstance.
Interface circles attached to the component symbol by solid lines map into supports
Dependencies to Interfaces.
3-166
OMG-UML V1.3
March 2000
4
UML Extensions
Contents
This chapter contains the following topics.
Topic
Page
“Part 1 - UML Profile for Software Development Processes”
“Introduction”
4-1
“Summary of Profile”
4-2
“Stereotypes and Notation”
4-3
“Well-Formedness Rules”
4-7
“Part 2 - UML Profile for Business Modeling”
“Introduction”
4-8
“Summary of Profile”
4-9
“Stereotypes and Notation”
4-10
“Well-Formedness Rules”
4-13
Part 1 - UML Profile for Software Development Processes
4.1 Introduction
UML is broadly applicable without extension, so extensions should be considered only
as a last resort. Extensions will not be universally understood, supported, and agreed
upon. Instead, UML profiles provide a standard way to use UML in a particular area
without having to extend or modify UML.
OMG-UML V1.3
March 2000
4-1
4
A UML Profile is a predefined set of Stereotypes, TaggedValues, Constraints, and
notation icons that collectively specialize and tailor the UML for a specific domain or
process (e.g., Unified Process profile). A profile does not extend UML by adding any
new basic concepts. Instead, it provides conventions for applying and specializing
standard UML to a particular environment or domain.
User-defined profiles of the UML are enabled through the use of stereotypes, tagged
values, and constraints. Two profiles are defined currently: 1) Unified Process, and 2)
Business Modeling.
This section defines the UML Profile for the Unified Process for software engineering,
defined in terms of the UML’s extensibility mechanisms, namely Stereotypes,
TaggedValues, and Constraints.
See the UML Semantics chapter for a full description of the UML extensibility
mechanisms.
This chapter is not meant to be a complete definition of the Unified Process and how to
apply it, but it serves the purpose of defining this profile, including its icons.
4.2 Summary of Profile
Table 4-1 lists the stereotypes defined by this profile.
Table 4-1 Stereotypes
4-2
Metamodel Class
Stereotype Name
Model
use-case model
Model
analysis model
Model
design model
Model
implementation model
Package
use-case system
Package
analysis system
Subsystem
design system
Subsystem
implementation system
Package
analysis system
Subsystem
design system
Subsystem
implementation system
Package
analysis package
OMG-UML V1.3
March 2000
4
.
Metamodel Class
Stereotype Name
Subsystem
implementation
subsystem
Package
use-case package
Package
analysis service package
Subsystem
design service subsystem
Class
boundary
Class
entity
Class
control
Association
communicate
Association
subscribe
Collaboration
use-case realization
4.2.1 TaggedValues
Currently, this profile does not introduce any new TaggedValues.
4.2.2 Constraints
Currently, this profile does not introduce any new Constraints, other than those
associated with the well-formedness semantics of the stereotypes introduced.
4.2.3 Prerequisite Profiles
This profile requires no other profiles to the UML for its definition.
4.3 Stereotypes and Notation
4.3.1 Model, Package, and Subsystem Stereotypes
A system modeled by the Unified Process comprises several different, but related
models. These models are characterized by the lifecycle stage that they represent. Each
model makes use of one specific stereotype. The different models are:
•
•
•
•
Use Case
Analysis
Design
Implementation
OMG-UML V1.3
Stereotypes and Notation
March 2000
4-3
4
4.3.1.1 Use Case
A Use Case Model specifies the services a system provides to its users (i.e., the
different ways of using the system).
A Use Case System is a top-level package. A use case system contains use case
packages and/or use cases and relationships.
A Use Case Package is a package containing use cases and relationships. A use case is
not partitioned over several use case packages.
4.3.1.2 Analysis
An Analysis Model is a model whose top-level package is an analysis system.
An Analysis System is a top-level package. An analysis system contains analysis
packages, and/or analysis service packages, and/or analysis classes (i.e., entity,
boundary, and control), and relationships.
An Analysis Package is a package containing other analysis packages, analysis service
packages, analysis classes (i.e., entity, boundary, and control), and relationships.
An Analysis Service Package is a package containing analysis classes (i.e., entity,
boundary, and control) and relationships.
4.3.1.3 Design
A Design Model is a model whose top-level package is a design system.
A Design System is a top-level subsystem. A design system contains design
subsystems, and/or design service subsystems, and/or design classes, and relationships.
A Design Subsystem is a subsystem containing other design subsystems, design
service subsystems, design classes, and relationships.
A Design Service Subsystem is a subsystem containing design classes and
relationships.
4.3.1.4 Implementation
An Implementation Model is a model whose top-level package is an implementation
system.
An Implementation System is a top-level subsystem. An implementation system
contains implementation subsystems, and/or components, and relationships.
An Implementation Subsystem is a subsystem containing implementation subsystems,
and/or components, and relationships.
4-4
OMG-UML V1.3
March 2000
4
4.3.1.5 Notation
Package, subsystem, and model stereotypes are indicated with stereotype keywords in
guillemets («stereotype name»). There are no special icons for these stereotypes, but
the icon for a model or a subsystem may be used in the upper right of the package
symbol in conjunction with the stereotype keyword for stereotypes of the
corresponding kind. Use of these icons is not mandatory, because the stereotype
keyword is unambiguous.
«use case system»
O rde ring
Ch e ck Statu s
Sales p e rs o n
Pla ce O rd er
Fill O rd er
Cu s to mer
Sh ip p in g
Cle rk
Es tab lis h
Cre d it
Su p erv is o r
Figure 4-1 Packages in the Unified Process
4.3.2 Class Stereotypes
Analysis classes come in the following three kinds: 1) entity, 2) control, and 3)
boundary. Design classes are not by default stereotyped in the Unified Process.
OMG-UML V1.3
Stereotypes and Notation
March 2000
4-5
4
4.3.2.1 Entity
An Entity is a class that is passive; that is, its objects do not initiate interactions on
their own. An entity object may participate in many different use case realizations and
usually outlives any single interaction.
4.3.2.2 Control
A Control is a class whose objects control interactions between collections of objects.
A control class usually has behavior specific for one use case and a control object
usually does not outlive the use case realizations in which it participates.
4.3.2.3 Boundary
A Boundary is a class that lies on the periphery of a system, but within it. It interacts
with actors outside the system as well as objects of all three kinds of analysis classes
within the system.
4.3.2.4 Notation
Class stereotypes can be shown with keywords in guillemets. They can also be shown
with the following special icons.
Pe n T racker
O rd e rEn try
« co n tro l»
Pe n T racker
« b o u n d ary »
O rd e rEn try
« en tity »
Ba n kA cc o u n t
Ba n kA cc o u n t
Figure 4-2 Class Stereotypes
4.3.3 Association Stereotypes
The following are special Unified Process associations between classes.
4-6
OMG-UML V1.3
March 2000
4
4.3.3.1 Communicate
Communicate is an association between actors and use cases denoting that the actor
sends messages to the use case and/or the use case sends messages to the actor. It may
also be used between boundary, control, and entity, and between actor and boundary.
The communication may be one-way or two-way navigation. The direction of
communication is indicated by the navigability of the association.
4.3.3.2 Subscribe
A subscribe association between two classes states that objects of the source class
(called the subscriber) will be notified when a particular event has occurred in objects
of the target class (called the publisher). The association includes a specification of a
set of events defining the events that cause the subscriber to be notified.
4.3.3.3 Notation
Association stereotypes are indicated by keywords in guillemets. There are no special
stereotype icons. The stereotype «communicate» on actor-use case associations may be
omitted, since it is the only kind of relationship between actors and use cases.
4.4 Well-Formedness Rules
Stereotyped model elements are subject to certain constraints, in addition to the
constraints imposed on all elements of their kind.
4.4.1 Generalization
All the modeling elements in a generalization must be of the same stereotype.
4.4.2 Association
Apart from standard UML combinations, the combinations of stereotypes shown in
Table 4-2 may also be used.
OMG-UML V1.3
Well-Formedness Rules
March 2000
4-7
4
Table 4-2 Combinations of stereotypes
To:
From:
actor
boundary
actor
boundary
control
communicate
subscribe
communicate
communicate
communicate
communicate
entity
control
entity
communicate
subscribe
communicate
communicate
subscribe
communicate
4.4.3 Model, Package, and Subsystem Containment
A model being sterotyped use case, analysis, design, or implementation may not
contain elements that are stereotyped with one of the other three stereotypes. For
example, a use-case model may not contain analysis subsystems.
Part 2 - UML Profile for Business Modeling
4.5 Introduction
The UML Profile for Business Modeling is defined in terms of the UML’s extensibility
mechanisms, namely Stereotypes, TaggedValues, and Constraints. See the UML
Semantics chapter for a full description of the UML extensibility mechanisms.
This section describes stereotypes that can be used to tailor the use of UML for
business modeling. All of the UML concepts can be used for business modeling, but
providing business stereotypes for some common situations provides a common
terminology for this domain. Note that UML can be used to model different kinds of
systems (software systems, hardware systems, and real-world organizations). Business
modeling models real-world organizations.
This section is not meant to be a complete definition of business modeling concepts
and how to apply them, but it serves the purpose of defining this profile, including its
icons.
4-8
OMG-UML V1.3
March 2000
4
4.6 Summary of Profile
Stereotypes for this profile are shown in Table 4-3.
Table 4-3 Stereotypes for UML Profile for Business Modeling
Metamodel Class
Stereotype Name
Model
use-case model
Package
use-case system
Package
use-case package
Model
object model
Subsystem
object system
Subsystem
organization unit
Subsystem
work unit
Class
worker
Class
case worker
Class
internal worker
Class
entity
Collaboration
use-case realization
Association
subscribe
4.6.1 Tagged Values
This profile does not currently introduce any new TaggedValues.
4.6.2 Constraints
This profile does not currently introduce any new Constraints, other than those
associated with the well-formedness semantics of the stereotypes introduced.
4.6.3 Prerequisite Profiles
This profile requires no other profiles to the UML for its definition.
OMG-UML V1.3
Summary of Profile
March 2000
4-9
4
4.7 Stereotypes and Notation
4.7.1 Model, Package, and Subsystem Stereotypes
A business system comprises several different, but related, models. The models are
characterized by being exterior or interior to the business system they represent.
Exterior models are use case models and interior models are object models. A large
business system may be partitioned into subordinate business systems. The following
are the model stereotypes.
4.7.1.1 Use Case
A Use Case Model is a model that describes the business processes of a business and
their interactions with external parties such as customers and partners.
A use case model describes:
•
•
the businesses modeled as use cases.
•
the relationships between the external parties and the business processes.
parties exterior to the business (e.g., customers and other businesses) modeled as
actors.
A Use Case System is the top-level package in a use case model. A use case system
contains use case packages, use cases, and relationships.
A Use Case Package is a package containing use cases and relationships. A use case is
not partitioned over several use case packages.
4.7.1.2 Object
An Object Model is a model in which the top-level package is an object system. These
models describe the things interior to the business system itself.
An Object System is the top-level subsystem in an object model. An object system
contains organization units, classes (workers, work units, and entities), and
relationships.
4.7.1.3 Organization Unit
Organization Unit is a subsystem corresponding to an organization unit of the actual
business. An organization unit subsystem contains organization units, work units,
classes (workers and entities), and relationships.
4.7.1.4 Work Unit
A Work Unit is a subsystem that contains one or more entities.
4-10
OMG-UML V1.3
March 2000
4
A work unit is a task-oriented set of objects that form a recognizable whole to the end
user. It may have a facade defining the view of the work unit’s entities relevant to the
task.
4.7.1.5 Notation
Package stereotypes are indicated with stereotype keywords in guillemets («stereotype
name»). There are no special icons for these stereotypes, but the icon for a model or a
subsystem may be used in the upper right of the package symbol in conjunction with
the stereotype keyword for stereotypes of the corresponding kind. Use of these icons is
not mandatory, because the stereotype keyword is unambiguous.
4.7.2 Class Stereotypes
Business objects come in the following kinds:
•
•
•
•
•
Actor (defined in the UML)
Worker
Case Worker
Internal Worker
Entity
4.7.2.1 Worker
A Worker is a class that represents an abstraction of a human that acts within the
system. A worker interacts with other workers and manipulates entities while
participating in use case realizations.
4.7.2.2 Case Worker
A Case Worker is a worker who interacts directly with actors outside the system.
4.7.2.3 Internal Worker
An Internal Worker is a worker that interacts with other workers and entities inside the
system.
4.7.2.4 Entity
An Entity is a class that is passive; that is, it does not initiate interactions on its own.
An entity object may participate in many different use case realizations and usually
outlives any single interaction. In business modeling, entities represent objects that
workers access, inspect, manipulate, produce, and so on. Entity objects provide the
basis for sharing among workers participating in different use case realizations.
OMG-UML V1.3
Stereotypes and Notation
March 2000
4-11
4
4.7.2.5 Notation
Class stereotypes can be shown with keywords in guillemets within the normal class
symbol. They can also be shown with the following special icons.
« w o rker»
A d min is trato r
A d min is trato r
« in tern al w o rker»
D es ig n er
D es ig n er
« c as e wo rker»
O rd erEn try
Sa le s p ers o n
« en tity »
T ra d e
T ra d e
Figure 4-3 Class Stereotypes
The preceding icons represent common concepts useful in most business models.
4.7.2.6 Example of Alternate Notations
Tools and users are free to add additional icons to represent more specific concepts.
Examples of such icons include icons for documents and actions, as shown in
Figure 4-4.
Trade
[req uested]
Client
Trading
Trade
[traded]
Figure 4-4 Example of Special Icons for Entities and Actions
In this example, "Trade [requested]" and "Trade [traded]" represent an entity in two
states, where the Trade is the dominant entity of a Trade Document work unit. Client
Trading is an action. The icons are designed to be meaningful in the particular
problem domain.
4-12
OMG-UML V1.3
March 2000
4
4.7.3 Association Stereotypes
The following are special business modeling associations between classes.
4.7.3.1 Communicate
Communicate is an association used for defining that instances of the associated
classifiers interact. This may be one-way or two-way navigation. The direction of
communication is the same as the navigability of the association.
4.7.3.2 Subscribe
A subscribe association between two classes states that objects of the source class
(called the subscriber) will be notified when a particular event has occurred in objects
of the target class (called the publisher). The association includes a specification of a
set of events defining the events that cause the subscriber to be notified.
4.7.3.3 Notation
Association stereotypes are indicated by keywords in guillemets. There are no special
stereotype icons.
4.8 Well-Formedness Rules
Stereotyped model elements are subject to certain constraints in addition to the
constraints imposed on all elements of their kind.
4.8.1 Generalization
All the modeling elements in a generalization must be of the same stereotype.
4.8.2 Association
Apart from standard UML combinations, the combinations of stereotypes shown in
Table 4-4 may also be used.
Table 4-4 Combinations of stereotypes
To:
From:
actor
actor
case worker
case worker
entity
communicate
communicate
communicate
OMG-UML V1.3
work unit
internal
worker
communicate
subscribe
communicate
subscribe
communicate
subscribe
Well-Formedness Rules
March 2000
communicate
4-13
4
Table 4-4 Combinations of stereotypes
entity
work unit
internal
worker
4-14
communicate
communicate
subscribe
communicate
communicate
communicate
subscribe
communicate
subscribe
communicate
communicate
communicate
subscribe
communicate
subscribe
communicate
OMG-UML V1.3
March 2000
UMLCORBAfacility Interface
Definition
5
Contents
This chapter contains the following sections.
Section Title
Page
“Overview”
5-1
“Mapping of UML Semantics to Facility Interfaces”
5-3
“Facility Implementation Requirements”
5-5
“IDL Modules”
5-5
5.1 Overview
There are two sets of interfaces provided: 1) generic, and 2) tailored. Both sets of
interfaces enable the creation and traversal of UML model elements.
The generic interfaces are included in the Reflective module. This is a set of generalpurpose interfaces that provide utility for browser type functionality and as a base for
the tailored interfaces. They are more fully described in the Meta-Object Facility
(MOF) Specification.
A set of tailored interfaces that are specifically typed to the UML metamodel elements
is defined. The tailored interfaces inherit from the generic interfaces. The tailored
interfaces provide capabilities necessary to instantiate, traverse, and modify UML
model elements in the facility, directly in terms of the UML metamodel, with type
safety. The specifications of the tailored interfaces were generated by applying a set of
transformations to the UML semantic metamodel. Because the tailored interfaces were
generated consistently from a set of patterns (described more fully in the MOF
OMG-UML V1.3
March 2000
5-1
5
Specification), they are easy to understand and program against. It is feasible to
generate automatically the implementation for the UML Facility, for the most part,
because of these patterns and because the UML metamodel is strictly structural.
The UML is designed with a layered architecture. Implementors can choose which
layers to implement, and whether to implement only the generic interfaces or the
generic and tailored interfaces.
One of the primary goals was to advance the state of the industry by enabling OO
modeling tool interoperability. This UML Facility defines a set of interfaces to provide
that tool interoperability. However, enabling meaningful exchange of model
information between tools requires agreement on semantics and their visualization. The
metamodel documenting the UML semantics is defined in the UML Semantics chapter.
Most of the IDL defined in this document is a direct mapping of the UML version 1.3
metamodel, based on the IDL mapping defined in the MOF specification. Because the
UML semantics are sufficiently complex, they are documented separately in the UML
Semantics chapter, whereas this chapter is void of explanations of semantics.
5.1.1 Tool Sharing Options
A major goal is to achieve semantic interoperability between UML tools. Three options
are explained below: model transfer, a general-purpose repository, and a UML facility.
5.1.1.1 Model Transfer
Two tools could understand the same stream format and exchange models via that
stream, which could be a file. This is referred to as an “import facility.” A stream
interface provides a sharing between tools that are not implemented in an API
(CORBA or non-CORBA) or repository environment. XML Metadata Interchange
(XMI) is an example of a stream format.
5.1.1.2 General-purpose Repository
Two tools could interface to the same repository and access a model there. A
MetaObject Facility (MOF) could provide this repository. The MOF Specification
defines a generic interface to repository objects.
5.1.1.3 UML Facility
Two tools could exchange models on a detail-by-detail basis. This is referred to as a
“connection facility.” Although this would not be the most efficient method for sharing
an entire model, this type of access enables semantic interoperability to the greatest
degree and is extremely useful for client applications. This is also a repository, but its
interfaces are specific to UML tools. A set of IDL interfaces is defined in this
document to provide model access.
In summary, the UML Facility defines IDL interfaces for clients to use for model
access.
5-2
OMG-UML V1.3
March 2000
5
5.2 Mapping of UML Semantics to Facility Interfaces
Understanding the process used to generate the IDL for this facility is helpful in
understanding the resulting IDL. The process was as follows:
1. Converted the UML Semantics Metamodel into an interface metamodel, making
necessary refinements for CORBA interfaces.
2. Put the interface metamodel into a MetaObject Facility as a MOF Package.
3. Generated IDL from the MOF, based on the mapping defined in the MOF
Specification.
5.2.1 Transformation of UML Semantics Metamodel into Interfaces
Metamodel
A model was created representing the interfaces required on the UML Facility. This
interface metamodel is nearly identical to the UML Semantics metamodel, so it is not
documented explicitly. The following list summarizes the conversions made from the
UML Semantics metamodel:
•
Mapped all UML data types and select classes to CORBA data types. Put all
CORBA data types in Foundation where they are visible to Core. The data types
appear at the beginning of the Foundation module below.
•
Named associations and their ends, where names were missing. The name given to
each unnamed AssociationEnd is its type’s name with the first letter downcased.
The name given to each unnamed Association is “A” followed by the first end’s
name with the first letter upcased followed by the second end’s name with the first
letter upcased.
•
Prefixed the names of certain classifiers, association ends, and attributes with
“Uml” to avoid conflicts with words reserved in Reflective interfaces, CORBA, and
MOF.
•
Deleted derived associations, since they would have resulted in redundant
interfaces.
•
Transformed association classes into more fundamental structures. The
transformation is explained below.
•
For each navigable AssociationEnd, created a Reference in the Class that is the
end’s type if the Class’s owning Package is the same as the Association’s owning
Package. Named the Reference the same as the AssociationEnd.
•
•
Appended numbers to names as needed to avoid name duplication errors.
Renamed enumeration literal names so they would be unique within the resulting
IDL modules.
The IDL generation from the MOF assures that all classes in the interface metamodel
are specializations of Reflective::RefObject, so this relationship is assumed to be
present in the interface metamodel.
OMG-UML V1.3
Mapping of UML Semantics to Facility Interfaces
March 2000
5-3
5
5.2.1.1 Transformation for Association Classes
Since the MOF does not represent the semantics of association classes directly, we
needed to convert Each Association Class into something else. In the case of
ElementOwnership, which is single-valued on one end, we moved the attributes into
the other end, ModelElement. We converted every other Association Class into a
simple class and added necessary relationships to enable complete navigation (in the
resulting facility IDL). Figure 5-1 shows an example Association Class as it would
appear in the semantic metamodel.
a_role
A
b_role
1..*
B
*
AB
Figure 5-1
An Association Class in a Semantic metamodel
Figure 5-2 shows the corresponding transformed structure in the interface model.
A
B
a_role
b_role
1
1
ab
*
ab
AB
1..*
Figure 5-2 Corresponding Association Class in an interface metamodel
5.2.2 Mapping from MOF to IDL
The description for the mapping from instances of models stored in the MOF is
described in detail in the MOF Specification. The result of this mapping is the
generated IDL in this specification.
5.2.3 MOF Generic Interfaces
The MOF Specification fully describes the generic interfaces. As a summary, the
generic interfaces in the Reflective module provide the following:
5-4
OMG-UML V1.3
March 2000
5
•
•
•
consistent treatment of type information,
exception handling (including constraint violations, missing parameters, etc.), and
generic creation and traversal of objects.
Note – The MOF Specification replaces the definition of the Reflective module
contained in this specification.
5.3 Facility Implementation Requirements
Although this chapter focuses on defining the interfaces for the facility and leaves
implementation decisions up to the creativity of vendors, there are some
implementation requirements.
The UML Standard Elements (stereotypes, constraints, and tags) must be known to a
facility implementation, or provided via a load. This is necessary so that the
interoperability of these elements can be achieved. The semantics of the standard
elements (e.g., containment restrictions) must be enforced. The Standard Elements are
documented in the UML Semantics chapter.
5UML CORBAfacility InterfaceDefinition
5.4 IDL Modules
5.4.1 Reflective
#ifndef REFLECTIVE_IDL
#define REFLECTIVE_IDL
#pragma prefix "org.omg.Uml"
module Reflective
{
interface RefBaseObject;
interface RefObject;
typedef sequence<RefObject> RefObjectUList;
typedef sequence<RefObject> RefObjectSet;
interface RefAssociation;
interface RefPackage;
typedef RefObject DesignatorType;
typedef any ValueType;
typedef sequence<ValueType> ValueTypeList;
typedef sequence<RefObject, 2> Link;
typedef sequence<Link> LinkSet;
// MOF error kinds
const string UNDERFLOW_VIOLATION = "org.omg.mof:structural.underflow";
const string OVERFLOW_VIOLATION = "org.omg.mof:structural.overflow";
const string DUPLICATE_VIOLATION = "org.omg.mof:structural.duplicate";
const string REFERENCE_CLOSURE_VIOLATION = "org.omg.mof:structural.reference_closure";
const string SUPERTYPE_CLOSURE_VIOLATION = "org.omg.mof:structural.supertype_closure";
OMG-UML V1.3
Facility Implementation Requirements
March 2000
5-5
5
const string COMPOSITION_CYCLE_VIOLATION = "org.omg.mof:structural.composition_cycle";
const string COMPOSITION_CLOSURE_VIOLATION = "org.omg.mof:structural.composition_closure";
const string INVALID_OBJECT_VIOLATION = "org.omg.mof:structural.invalid_object";
const string ALREADY_EXISTS_VIOLATION = "org.omg.mof:structural.already_exists";
const string INVALID_DESIGNATOR_VIOLATION = "org.omg.mof:reflective.invalid_designator";
const string WRONG_DESIGNATOR_DESIGNATOR_VIOLATION = "org.omg.mof:reflective.wrong_designator_kind";
const string UNKNOWN_DESIGNATOR_VIOLATION = "org.omg.mof:reflective.unknown_designator";
const string ABSTRACT_CLASS_VIOLATION = "org.omg.mof:reflective.abstract_class";
const string NOT_CHANGEABLE_VIOLATION = "org.omg.mof:reflective.not_changeable";
const string NOT_PUBLIC_VIOLATION = "org.omg.mof:reflective.not_public";
const string WRONG_SCOPE_VIOLATION = "org.omg.mof:reflective.wrong_scope";
const string WRONG_MULTIPLICITY_VIOLATION = "org.omg.mof:reflective.wrong_multiplicity";
const string WRONG_TYPE_VIOLATION = "org.omg.mof:reflective.wrong_type";
const string WRONG_NUMBER_PARAMETERS_VIOLATION ="org.omg.mof:reflective.wrong_number_parameters";
const string INVALID_DELETION_VIOLATION = "org.omg.mof:reflective.invalid_deletion";
struct NamedValueType
{
string name;
ValueType value;
};
typedef sequence<NamedValueType> NamedValueList;
exception MofError
{
string error_kind;
RefBaseObject object_in_error;
NamedValueList extra_info;
string error_description;
};
exception NotFound {};
exception NotSet {};
exception BadPosition
{
unsigned long current_size;
};
exception OtherError
{
DesignatorType exception_designator;
ValueTypeList exception_values;
};
interface RefBaseObject
{
string ref_mof_id ();
DesignatorType ref_meta_object ();
boolean ref_itself (in RefBaseObject other_object);
RefPackage ref_immediate_package ();
RefPackage ref_outermost_package ();
void ref_delete () raises (MofError);
}; // end of interface RefBaseObject
interface RefObject : RefBaseObject
{
boolean ref_is_instance_of (
5-6
OMG-UML V1.3
March 2000
5
in DesignatorType some_class,
in boolean consider_subtypes)
raises (MofError);
RefObject ref_create_instance (in ValueTypeList args)
raises (MofError);
RefObjectSet ref_all_objects (in boolean include_subtypes);
ValueType ref_value (in DesignatorType feature)
raises (NotSet, MofError);
void ref_set_value (
in DesignatorType feature,
in ValueType new_value)
raises (MofError);
void ref_unset_value (in DesignatorType feature)
raises (MofError);
void ref_add_value (
in DesignatorType feature,
in ValueType new_element)
raises (MofError);
void ref_add_value_before (
in DesignatorType feature,
in ValueType new_element,
in ValueType before_element)
raises (NotFound, MofError);
void ref_add_value_at (
in DesignatorType feature,
in ValueType new_element,
in unsigned long position)
raises (BadPosition, MofError);
void ref_modify_value (
in DesignatorType feature,
in ValueType old_element,
in ValueType new_element)
raises (NotFound, MofError);
void ref_modify_value_at (
in DesignatorType feature,
in ValueType new_element,
in unsigned long position)
raises (BadPosition, MofError);
void ref_remove_value (
in DesignatorType feature,
in ValueType old_element)
raises (NotFound, MofError);
void ref_remove_value_at (
in DesignatorType feature,
in unsigned long position)
raises (BadPosition, MofError);
RefObject ref_immediate_composite ();
RefObject ref_outermost_composite ();
ValueTypeList ref_invoke_operation (
in DesignatorType requested_operation,
inout ValueTypeList args)
raises (OtherError, MofError);
}; // end of interface RefObject
interface RefAssociation : RefBaseObject
OMG-UML V1.3
IDL Modules
March 2000
5-7
5
{
LinkSet ref_all_links ();
boolean ref_link_exists (in Link some_link)
raises (MofError);
RefObjectUList ref_query (
in DesignatorType query_end,
in RefObject query_object)
raises (MofError);
void ref_add_link (in Link new_link)
raises (MofError);
void ref_add_link_before (
in Link new_link,
in DesignatorType position_end,
in RefObject before)
raises (NotFound, MofError);
void ref_modify_link (
in Link old_link,
in DesignatorType position_end,
in RefObject new_object)
raises (NotFound, MofError);
void ref_remove_link (in Link old_link)
raises (NotFound, MofError);
}; // end of interface RefAssociation
interface RefPackage : RefBaseObject
{
RefObject ref_class_ref (in DesignatorType class)
raises (MofError);
RefAssociation ref_association_ref (in DesignatorType association)
raises (MofError);
RefPackage ref_package_ref (in DesignatorType package)
raises (MofError);
}; // end of interface RefPackage
}; // end of module Reflective
#endif
5.4.2 Foundation
#pragma prefix "org.omg.Uml"
#include "Reflective.idl"
module Foundation
{
interface FoundationPackage;
module DataTypes
{
typedef long Integer;
typedef long UnlimitedInteger; // -1 means infinity
typedef float UmlTime;
enum AggregationKind {ak_none, ak_aggregate, ak_composite};
enum CallConcurrencyKind {cck_sequential, cck_guarded, cck_concurrent};
5-8
OMG-UML V1.3
March 2000
5
enum ChangeableKind {ck_changeable, ck_frozen, ck_addOnly};
enum MessageDirectionKind {mdk_activation, mdk_return};
enum OperationDirectionKind {odk_provide, odk_require};
enum OrderingKind {ok_unordered, ok_ordered, ok_sorted};
enum ParameterDirectionKind {pdk_in, pdk_inout, pdk_out, pdk_return};
enum PseudostateKind {pk_initial, pk_deepHistory, pk_shallowHistory, pk_join, pk_fork, pk_branch,
pk_junction, pk_final};
enum ScopeKind {sk_classifier, sk_instance};
enum VisibilityKind {vk_public, vk_private, vk_protected};
typedef string Geometry;
typedef string LocationReference;
typedef string Mapping;
struct MultiplicityRange {Integer lower; UnlimitedInteger upper;};
typedef sequence<MultiplicityRange> Multiplicity;
typedef string Name;
struct Expression {Name language; string body;};
typedef Expression ActionExpression;
typedef Expression ArgListsExpression;
typedef Expression BooleanExpression;
typedef Expression IterationExpression;
typedef Expression MappingExpression;
typedef Expression ObjectSetExpression;
typedef Expression ProcedureExpression;
typedef Expression TimeExpression;
typedef Expression TypeExpression;
interface DataTypesPackage : Reflective::RefPackage
{
};
}; // end of module DataTypes
module Core
{
interface ClassifierClass;
interface Classifier;
typedef sequence<Classifier> ClassifierSet;
interface ClassClass;
interface Class;
typedef sequence<Class> ClassSet;
interface DataTypeClass;
interface DataType;
typedef sequence<DataType> DataTypeSet;
interface StructuralFeatureClass;
interface StructuralFeature;
typedef sequence<StructuralFeature> StructuralFeatureSet;
interface NamespaceClass;
interface Namespace;
typedef sequence<Namespace> NamespaceSet;
interface AssociationEndClass;
interface AssociationEnd;
typedef sequence<AssociationEnd> AssociationEndSet;
interface UmlInterfaceClass;
interface UmlInterface;
typedef sequence<UmlInterface> UmlInterfaceSet;
interface UmlConstraintClass;
OMG-UML V1.3
IDL Modules
March 2000
5-9
5
interface UmlConstraint;
typedef sequence<UmlConstraint> UmlConstraintSet;
interface AssociationClass;
interface Association;
typedef sequence<Association> AssociationSet;
interface ElementClass;
interface Element;
typedef sequence<Element> ElementSet;
interface GeneralizableElementClass;
interface GeneralizableElement;
typedef sequence<GeneralizableElement> GeneralizableElementSet;
interface UmlAttributeClass;
interface UmlAttribute;
typedef sequence<UmlAttribute> UmlAttributeSet;
typedef sequence<UmlAttribute> UmlAttributeUList;
interface OperationClass;
interface Operation;
typedef sequence<Operation> OperationSet;
interface ParameterClass;
interface Parameter;
typedef sequence<Parameter> ParameterSet;
typedef sequence<Parameter> ParameterUList;
interface MethodClass;
interface Method;
typedef sequence<Method> MethodSet;
interface GeneralizationClass;
interface Generalization;
typedef sequence<Generalization> GeneralizationSet;
interface UmlAssociationClassClass;
interface UmlAssociationClass;
typedef sequence<UmlAssociationClass> UmlAssociationClassSet;
interface FeatureClass;
interface Feature;
typedef sequence<Feature> FeatureSet;
typedef sequence<Feature> FeatureUList;
interface BehavioralFeatureClass;
interface BehavioralFeature;
typedef sequence<BehavioralFeature> BehavioralFeatureSet;
interface ModelElementClass;
interface ModelElement;
typedef sequence<ModelElement> ModelElementSet;
typedef sequence<ModelElement> ModelElementUList;
interface DependencyClass;
interface Dependency;
typedef sequence<Dependency> DependencySet;
interface AbstractionClass;
interface Abstraction;
typedef sequence<Abstraction> AbstractionSet;
interface PresentationElementClass;
interface PresentationElement;
typedef sequence<PresentationElement> PresentationElementSet;
interface UsageClass;
interface Usage;
typedef sequence<Usage> UsageSet;
interface BindingClass;
5-10
OMG-UML V1.3
March 2000
5
interface Binding;
typedef sequence<Binding> BindingSet;
interface ComponentClass;
interface Component;
typedef sequence<Component> ComponentSet;
interface NodeClass;
interface Node;
typedef sequence<Node> NodeSet;
interface PermissionClass;
interface Permission;
typedef sequence<Permission> PermissionSet;
interface CommentClass;
interface Comment;
typedef sequence<Comment> CommentSet;
interface FlowClass;
interface Flow;
typedef sequence<Flow> FlowSet;
interface RelationshipClass;
interface Relationship;
typedef sequence<Relationship> RelationshipSet;
interface ElementResidenceClass;
interface ElementResidence;
typedef sequence<ElementResidence> ElementResidenceSet;
interface TemplateParameterClass;
interface TemplateParameter;
typedef sequence<TemplateParameter> TemplateParameterSet;
typedef sequence<TemplateParameter> TemplateParameterUList;
interface CorePackage;
interface ElementClass : Reflective::RefObject
{
readonly attribute ElementSet all_of_type_element;
};
interface Element : ElementClass
{
}; // end of interface Element
interface ModelElementClass : ElementClass
{
readonly attribute ModelElementSet all_of_type_model_element;
};
interface ModelElement : ModelElementClass, Element
{
DataTypes::Name name ()
raises (Reflective::MofError);
void set_name (in DataTypes::Name new_value)
raises (Reflective::MofError);
DataTypes::VisibilityKind visibility ()
raises (Reflective::MofError);
void set_visibility (in DataTypes::VisibilityKind new_value)
raises (Reflective::MofError);
boolean is_specification ()
raises (Reflective::MofError);
OMG-UML V1.3
IDL Modules
March 2000
5-11
5
void set_is_specification (in boolean new_value)
raises (Reflective::MofError);
Core::Namespace namespace ()
raises (Reflective::NotSet, Reflective::MofError);
void set_namespace (in Core::Namespace new_value)
raises (Reflective::MofError);
void unset_namespace ()
raises (Reflective::MofError);
DependencySet client_dependency ()
raises (Reflective::MofError);
void set_client_dependency (in DependencySet new_value)
raises (Reflective::MofError);
void add_client_dependency (in Dependency new_element)
raises (Reflective::MofError);
void modify_client_dependency (
in Dependency old_element,
in Dependency new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_client_dependency (in Dependency old_element)
raises (Reflective::NotFound, Reflective::MofError);
UmlConstraintSet uml_constraint ()
raises (Reflective::MofError);
void set_uml_constraint (in UmlConstraintSet new_value)
raises (Reflective::MofError);
void add_uml_constraint (in UmlConstraint new_element)
raises (Reflective::MofError);
void modify_uml_constraint (
in UmlConstraint old_element,
in UmlConstraint new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_uml_constraint (in UmlConstraint old_element)
raises (Reflective::NotFound, Reflective::MofError);
DependencySet supplier_dependency ()
raises (Reflective::MofError);
void set_supplier_dependency (in DependencySet new_value)
raises (Reflective::MofError);
void add_supplier_dependency (in Dependency new_element)
raises (Reflective::MofError);
void modify_supplier_dependency (
in Dependency old_element,
in Dependency new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_supplier_dependency (in Dependency old_element)
raises (Reflective::NotFound, Reflective::MofError);
PresentationElementSet presentation ()
raises (Reflective::MofError);
void set_presentation (in PresentationElementSet new_value)
raises (Reflective::MofError);
void add_presentation (in PresentationElement new_element)
raises (Reflective::MofError);
void modify_presentation (
in PresentationElement old_element,
in PresentationElement new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_presentation (in PresentationElement old_element)
5-12
OMG-UML V1.3
March 2000
5
raises (Reflective::NotFound, Reflective::MofError);
FlowSet target_flow ()
raises (Reflective::MofError);
void set_target_flow (in FlowSet new_value)
raises (Reflective::MofError);
void add_target_flow (in Flow new_element)
raises (Reflective::MofError);
void modify_target_flow (
in Flow old_element,
in Flow new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_target_flow (in Flow old_element)
raises (Reflective::NotFound, Reflective::MofError);
FlowSet source_flow ()
raises (Reflective::MofError);
void set_source_flow (in FlowSet new_value)
raises (Reflective::MofError);
void add_source_flow (in Flow new_element)
raises (Reflective::MofError);
void modify_source_flow (
in Flow old_element,
in Flow new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_source_flow (in Flow old_element)
raises (Reflective::NotFound, Reflective::MofError);
TemplateParameterSet template_parameter3 ()
raises (Reflective::MofError);
void set_template_parameter3 (in TemplateParameterSet new_value)
raises (Reflective::MofError);
void add_template_parameter3 (in TemplateParameter new_element)
raises (Reflective::MofError);
void modify_template_parameter3 (
in TemplateParameter old_element,
in TemplateParameter new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_template_parameter3 (in TemplateParameter old_element)
raises (Reflective::NotFound, Reflective::MofError);
Core::Binding binding ()
raises (Reflective::NotSet, Reflective::MofError);
void set_binding (in Core::Binding new_value)
raises (Reflective::MofError);
void unset_binding ()
raises (Reflective::MofError);
CommentSet comment ()
raises (Reflective::MofError);
void set_comment (in CommentSet new_value)
raises (Reflective::MofError);
void add_comment (in Core::Comment new_element)
raises (Reflective::MofError);
void modify_comment (
in Core::Comment old_element,
in Core::Comment new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_comment (in Core::Comment old_element)
raises (Reflective::NotFound, Reflective::MofError);
OMG-UML V1.3
IDL Modules
March 2000
5-13
5
ElementResidenceSet element_residence ()
raises (Reflective::MofError);
void set_element_residence (in ElementResidenceSet new_value)
raises (Reflective::MofError);
void add_element_residence (in ElementResidence new_element)
raises (Reflective::MofError);
void modify_element_residence (
in ElementResidence old_element,
in ElementResidence new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_element_residence (in ElementResidence old_element)
raises (Reflective::NotFound, Reflective::MofError);
TemplateParameterUList template_parameter ()
raises (Reflective::MofError);
void set_template_parameter (in TemplateParameterUList new_value)
raises (Reflective::MofError);
void add_template_parameter (in TemplateParameter new_element)
raises (Reflective::MofError);
void add_template_parameter_before (
in TemplateParameter new_element,
in TemplateParameter before_element)
raises (Reflective::NotFound, Reflective::MofError);
void modify_template_parameter (
in TemplateParameter old_element,
in TemplateParameter new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_template_parameter (in TemplateParameter old_element)
raises (Reflective::NotFound, Reflective::MofError);
TemplateParameterSet template_parameter2 ()
raises (Reflective::MofError);
void set_template_parameter2 (in TemplateParameterSet new_value)
raises (Reflective::MofError);
void add_template_parameter2 (in TemplateParameter new_element)
raises (Reflective::MofError);
void modify_template_parameter2 (
in TemplateParameter old_element,
in TemplateParameter new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_template_parameter2 (in TemplateParameter old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ModelElement
interface NamespaceClass : ModelElementClass
{
readonly attribute Core::NamespaceSet all_of_type_namespace;
readonly attribute Core::NamespaceSet all_of_class_namespace;
Core::Namespace create_namespace (
in DataTypes::Name name,
in DataTypes::VisibilityKind visibility,
in boolean is_specification)
raises (Reflective::MofError);
};
interface Namespace : NamespaceClass, ModelElement
{
5-14
OMG-UML V1.3
March 2000
5
ModelElementSet owned_element ()
raises (Reflective::MofError);
void set_owned_element (in ModelElementSet new_value)
raises (Reflective::MofError);
void add_owned_element (in ModelElement new_element)
raises (Reflective::MofError);
void modify_owned_element (
in ModelElement old_element,
in ModelElement new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_owned_element (in ModelElement old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface Namespace
interface GeneralizableElementClass : ModelElementClass
{
readonly attribute GeneralizableElementSet all_of_type_generalizable_element;
};
interface GeneralizableElement : GeneralizableElementClass, ModelElement
{
boolean is_root ()
raises (Reflective::MofError);
void set_is_root (in boolean new_value)
raises (Reflective::MofError);
boolean is_leaf ()
raises (Reflective::MofError);
void set_is_leaf (in boolean new_value)
raises (Reflective::MofError);
boolean is_abstract ()
raises (Reflective::MofError);
void set_is_abstract (in boolean new_value)
raises (Reflective::MofError);
GeneralizationSet generalization ()
raises (Reflective::MofError);
void set_generalization (in GeneralizationSet new_value)
raises (Reflective::MofError);
void add_generalization (in Core::Generalization new_element)
raises (Reflective::MofError);
void modify_generalization (
in Core::Generalization old_element,
in Core::Generalization new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_generalization (in Core::Generalization old_element)
raises (Reflective::NotFound, Reflective::MofError);
GeneralizationSet specialization ()
raises (Reflective::MofError);
void set_specialization (in GeneralizationSet new_value)
raises (Reflective::MofError);
void add_specialization (in Core::Generalization new_element)
raises (Reflective::MofError);
void modify_specialization (
in Core::Generalization old_element,
in Core::Generalization new_element)
raises (Reflective::NotFound, Reflective::MofError);
OMG-UML V1.3
IDL Modules
March 2000
5-15
5
void remove_specialization (in Core::Generalization old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface GeneralizableElement
interface ClassifierClass : Core::NamespaceClass, GeneralizableElementClass
{
readonly attribute ClassifierSet all_of_type_classifier;
};
interface Classifier : ClassifierClass, Core::Namespace, GeneralizableElement
{
FeatureUList feature ()
raises (Reflective::MofError);
void set_feature (in FeatureUList new_value)
raises (Reflective::MofError);
void add_feature (in Core::Feature new_element)
raises (Reflective::MofError);
void add_feature_before (
in Core::Feature new_element,
in Core::Feature before_element)
raises (Reflective::NotFound, Reflective::MofError);
void modify_feature (
in Core::Feature old_element,
in Core::Feature new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_feature (in Core::Feature old_element)
raises (Reflective::NotFound, Reflective::MofError);
AssociationEndSet participant ()
raises (Reflective::MofError);
void set_participant (in AssociationEndSet new_value)
raises (Reflective::MofError);
void add_participant (in AssociationEnd new_element)
raises (Reflective::MofError);
void modify_participant (
in AssociationEnd old_element,
in AssociationEnd new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_participant (in AssociationEnd old_element)
raises (Reflective::NotFound, Reflective::MofError);
GeneralizationSet powertype_range ()
raises (Reflective::MofError);
void set_powertype_range (in GeneralizationSet new_value)
raises (Reflective::MofError);
void add_powertype_range (in Core::Generalization new_element)
raises (Reflective::MofError);
void modify_powertype_range (
in Core::Generalization old_element,
in Core::Generalization new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_powertype_range (in Core::Generalization old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface Classifier
interface ClassClass : ClassifierClass
{
5-16
OMG-UML V1.3
March 2000
5
readonly attribute ClassSet all_of_type_class;
readonly attribute ClassSet all_of_class_class;
Class create_class (
in DataTypes::Name name,
in DataTypes::VisibilityKind visibility,
in boolean is_specification,
in boolean is_root,
in boolean is_leaf,
in boolean is_abstract,
in boolean is_active)
raises (Reflective::MofError);
};
interface Class : ClassClass, Classifier
{
boolean is_active ()
raises (Reflective::MofError);
void set_is_active (in boolean new_value)
raises (Reflective::MofError);
}; // end of interface Class
interface DataTypeClass : ClassifierClass
{
readonly attribute DataTypeSet all_of_type_data_type;
readonly attribute DataTypeSet all_of_class_data_type;
DataType create_data_type (
in DataTypes::Name name,
in DataTypes::VisibilityKind visibility,
in boolean is_specification,
in boolean is_root,
in boolean is_leaf,
in boolean is_abstract)
raises (Reflective::MofError);
};
interface DataType : DataTypeClass, Classifier
{
}; // end of interface DataType
interface FeatureClass : ModelElementClass
{
readonly attribute FeatureSet all_of_type_feature;
};
interface Feature : FeatureClass, ModelElement
{
DataTypes::ScopeKind owner_scope ()
raises (Reflective::MofError);
void set_owner_scope (in DataTypes::ScopeKind new_value)
raises (Reflective::MofError);
Classifier owner ()
raises (Reflective::NotSet, Reflective::MofError);
void set_owner (in Classifier new_value)
raises (Reflective::MofError);
void unset_owner ()
OMG-UML V1.3
IDL Modules
March 2000
5-17
5
raises (Reflective::MofError);
}; // end of interface Feature
interface StructuralFeatureClass : FeatureClass
{
readonly attribute StructuralFeatureSet all_of_type_structural_feature;
};
interface StructuralFeature : StructuralFeatureClass, Feature
{
DataTypes::Multiplicity multiplicity ()
raises (Reflective::MofError);
void set_multiplicity (in DataTypes::Multiplicity new_value)
raises (Reflective::MofError);
DataTypes::ChangeableKind changeability ()
raises (Reflective::MofError);
void set_changeability (in DataTypes::ChangeableKind new_value)
raises (Reflective::MofError);
DataTypes::ScopeKind target_scope ()
raises (Reflective::MofError);
void set_target_scope (in DataTypes::ScopeKind new_value)
raises (Reflective::MofError);
Classifier type ()
raises (Reflective::MofError);
void set_type (in Classifier new_value)
raises (Reflective::MofError);
}; // end of interface StructuralFeature
interface AssociationEndClass : ModelElementClass
{
readonly attribute AssociationEndSet all_of_type_association_end;
readonly attribute AssociationEndSet all_of_class_association_end;
AssociationEnd create_association_end (
in DataTypes::Name name,
in DataTypes::VisibilityKind visibility,
in boolean is_specification,
in boolean is_navigable,
in DataTypes::OrderingKind ordering,
in DataTypes::AggregationKind aggregation,
in DataTypes::ScopeKind target_scope,
in DataTypes::Multiplicity multiplicity,
in DataTypes::ChangeableKind changeability)
raises (Reflective::MofError);
};
interface AssociationEnd : AssociationEndClass, ModelElement
{
boolean is_navigable ()
raises (Reflective::MofError);
void set_is_navigable (in boolean new_value)
raises (Reflective::MofError);
DataTypes::OrderingKind ordering ()
raises (Reflective::MofError);
void set_ordering (in DataTypes::OrderingKind new_value)
raises (Reflective::MofError);
5-18
OMG-UML V1.3
March 2000
5
DataTypes::AggregationKind aggregation ()
raises (Reflective::MofError);
void set_aggregation (in DataTypes::AggregationKind new_value)
raises (Reflective::MofError);
DataTypes::ScopeKind target_scope ()
raises (Reflective::MofError);
void set_target_scope (in DataTypes::ScopeKind new_value)
raises (Reflective::MofError);
DataTypes::Multiplicity multiplicity ()
raises (Reflective::MofError);
void set_multiplicity (in DataTypes::Multiplicity new_value)
raises (Reflective::MofError);
DataTypes::ChangeableKind changeability ()
raises (Reflective::MofError);
void set_changeability (in DataTypes::ChangeableKind new_value)
raises (Reflective::MofError);
Core::Association association ()
raises (Reflective::MofError);
void set_association (in Core::Association new_value)
raises (Reflective::MofError);
UmlAttributeUList qualifier ()
raises (Reflective::MofError);
void set_qualifier (in UmlAttributeUList new_value)
raises (Reflective::MofError);
void add_qualifier (in UmlAttribute new_element)
raises (Reflective::MofError);
void add_qualifier_before (
in UmlAttribute new_element,
in UmlAttribute before_element)
raises (Reflective::NotFound, Reflective::MofError);
void modify_qualifier (
in UmlAttribute old_element,
in UmlAttribute new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_qualifier (in UmlAttribute old_element)
raises (Reflective::NotFound, Reflective::MofError);
Classifier type ()
raises (Reflective::MofError);
void set_type (in Classifier new_value)
raises (Reflective::MofError);
ClassifierSet specification ()
raises (Reflective::MofError);
void set_specification (in ClassifierSet new_value)
raises (Reflective::MofError);
void add_specification (in Classifier new_element)
raises (Reflective::MofError);
void modify_specification (
in Classifier old_element,
in Classifier new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_specification (in Classifier old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AssociationEnd
interface UmlInterfaceClass : ClassifierClass
OMG-UML V1.3
IDL Modules
March 2000
5-19
5
{
readonly attribute UmlInterfaceSet all_of_type_uml_interface;
readonly attribute UmlInterfaceSet all_of_class_uml_interface;
UmlInterface create_uml_interface (
in DataTypes::Name name,
in DataTypes::VisibilityKind visibility,
in boolean is_specification,
in boolean is_root,
in boolean is_leaf,
in boolean is_abstract)
raises (Reflective::MofError);
};
interface UmlInterface : UmlInterfaceClass, Classifier
{
}; // end of interface UmlInterface
interface UmlConstraintClass : ModelElementClass
{
readonly attribute UmlConstraintSet all_of_type_uml_constraint;
readonly attribute UmlConstraintSet all_of_class_uml_constraint;
UmlConstraint create_uml_constraint (
in DataTypes::Name name,
in DataTypes::VisibilityKind visibility,
in boolean is_specification,
in DataTypes::BooleanExpression body)
raises (Reflective::MofError);
};
interface UmlConstraint : UmlConstraintClass, ModelElement
{
DataTypes::BooleanExpression body ()
raises (Reflective::MofError);
void set_body (in DataTypes::BooleanExpression new_value)
raises (Reflective::MofError);
ModelElementUList constrained_element ()
raises (Reflective::MofError);
void set_constrained_element (in ModelElementUList new_value)
raises (Reflective::MofError);
void unset_constrained_element ()
raises (Reflective::MofError);
void add_constrained_element (in ModelElement new_element)
raises (Reflective::MofError);
void add_constrained_element_before (
in ModelElement new_element,
in ModelElement before_element)
raises (Reflective::NotFound, Reflective::MofError);
void modify_constrained_element (
in ModelElement old_element,
in ModelElement new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_constrained_element (in ModelElement old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface UmlConstraint
5-20
OMG-UML V1.3
March 2000
5
interface RelationshipClass : ModelElementClass
{
readonly attribute RelationshipSet all_of_type_relationship;
};
interface Relationship : RelationshipClass, ModelElement
{
}; // end of interface Relationship
interface AssociationClass : GeneralizableElementClass, RelationshipClass
{
readonly attribute AssociationSet all_of_type_association;
readonly attribute AssociationSet all_of_class_association;
Association create_association (
in DataTypes::Name name,
in DataTypes::VisibilityKind visibility,
in boolean is_specification,
in boolean is_root,
in boolean is_leaf,
in boolean is_abstract)
raises (Reflective::MofError);
};
interface Association : AssociationClass, GeneralizableElement, Relationship
{
AssociationEndSet connection ()
raises (Reflective::MofError);
void set_connection (in AssociationEndSet new_value)
raises (Reflective::MofError);
void add_connection (in AssociationEnd new_element)
raises (Reflective::MofError);
void modify_connection (
in AssociationEnd old_element,
in AssociationEnd new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_connection (in AssociationEnd old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface Association
interface UmlAttributeClass : StructuralFeatureClass
{
readonly attribute UmlAttributeSet all_of_type_uml_attribute;
readonly attribute UmlAttributeSet all_of_class_uml_attribute;
UmlAttribute create_uml_attribute (
in DataTypes::Name name,
in DataTypes::VisibilityKind visibility,
in boolean is_specification,
in DataTypes::ScopeKind owner_scope,
in DataTypes::Multiplicity multiplicity,
in DataTypes::ChangeableKind changeability,
in DataTypes::ScopeKind target_scope,
in DataTypes::Expression initial_value)
raises (Reflective::MofError);
};
OMG-UML V1.3
IDL Modules
March 2000
5-21
5
interface UmlAttribute : UmlAttributeClass, StructuralFeature
{
DataTypes::Expression initial_value ()
raises (Reflective::MofError);
void set_initial_value (in DataTypes::Expression new_value)
raises (Reflective::MofError);
AssociationEnd association_end ()
raises (Reflective::NotSet, Reflective::MofError);
void set_association_end (in AssociationEnd new_value)
raises (Reflective::MofError);
void unset_association_end ()
raises (Reflective::MofError);
}; // end of interface UmlAttribute
interface BehavioralFeatureClass : FeatureClass
{
readonly attribute BehavioralFeatureSet all_of_type_behavioral_feature;
};
interface BehavioralFeature : BehavioralFeatureClass, Feature
{
boolean is_query ()
raises (Reflective::MofError);
void set_is_query (in boolean new_value)
raises (Reflective::MofError);
ParameterUList parameter ()
raises (Reflective::MofError);
void set_parameter (in ParameterUList new_value)
raises (Reflective::MofError);
void add_parameter (in Core::Parameter new_element)
raises (Reflective::MofError);
void add_parameter_before (
in Core::Parameter new_element,
in Core::Parameter before_element)
raises (Reflective::NotFound, Reflective::MofError);
void modify_parameter (
in Core::Parameter old_element,
in Core::Parameter new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_parameter (in Core::Parameter old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface BehavioralFeature
interface OperationClass : BehavioralFeatureClass
{
readonly attribute OperationSet all_of_type_operation;
readonly attribute OperationSet all_of_class_operation;
Operation create_operation (
in DataTypes::Name name,
in DataTypes::VisibilityKind visibility,
in boolean is_specification,
in DataTypes::ScopeKind owner_scope,
in boolean is_query,
in DataTypes::CallConcurrencyKind concurrency,
in boolean is_root,
5-22
OMG-UML V1.3
March 2000
5
in boolean is_leaf,
in boolean is_abstract,
in string specification)
raises (Reflective::MofError);
};
interface Operation : OperationClass, BehavioralFeature
{
DataTypes::CallConcurrencyKind concurrency ()
raises (Reflective::MofError);
void set_concurrency (in DataTypes::CallConcurrencyKind new_value)
raises (Reflective::MofError);
boolean is_root ()
raises (Reflective::MofError);
void set_is_root (in boolean new_value)
raises (Reflective::MofError);
boolean is_leaf ()
raises (Reflective::MofError);
void set_is_leaf (in boolean new_value)
raises (Reflective::MofError);
boolean is_abstract ()
raises (Reflective::MofError);
void set_is_abstract (in boolean new_value)
raises (Reflective::MofError);
string specification ()
raises (Reflective::MofError);
void set_specification (in string new_value)
raises (Reflective::MofError);
MethodSet method ()
raises (Reflective::MofError);
void set_method (in MethodSet new_value)
raises (Reflective::MofError);
void add_method (in Core::Method new_element)
raises (Reflective::MofError);
void modify_method (
in Core::Method old_element,
in Core::Method new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_method (in Core::Method old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface Operation
interface ParameterClass : ModelElementClass
{
readonly attribute ParameterSet all_of_type_parameter;
readonly attribute ParameterSet all_of_class_parameter;
Parameter create_parameter (
in DataTypes::Name name,
in DataTypes::VisibilityKind visibility,
in boolean is_specification,
in DataTypes::Expression default_value,
in DataTypes::ParameterDirectionKind kind)
raises (Reflective::MofError);
};
OMG-UML V1.3
IDL Modules
March 2000
5-23
5
interface Parameter : ParameterClass, ModelElement
{
DataTypes::Expression default_value ()
raises (Reflective::MofError);
void set_default_value (in DataTypes::Expression new_value)
raises (Reflective::MofError);
DataTypes::ParameterDirectionKind kind ()
raises (Reflective::MofError);
void set_kind (in DataTypes::ParameterDirectionKind new_value)
raises (Reflective::MofError);
BehavioralFeature behavioral_feature ()
raises (Reflective::NotSet, Reflective::MofError);
void set_behavioral_feature (in BehavioralFeature new_value)
raises (Reflective::MofError);
void unset_behavioral_feature ()
raises (Reflective::MofError);
Classifier type ()
raises (Reflective::MofError);
void set_type (in Classifier new_value)
raises (Reflective::MofError);
}; // end of interface Parameter
interface MethodClass : BehavioralFeatureClass
{
readonly attribute MethodSet all_of_type_method;
readonly attribute MethodSet all_of_class_method;
Method create_method (
in DataTypes::Name name,
in DataTypes::VisibilityKind visibility,
in boolean is_specification,
in DataTypes::ScopeKind owner_scope,
in boolean is_query,
in DataTypes::ProcedureExpression body)
raises (Reflective::MofError);
};
interface Method : MethodClass, BehavioralFeature
{
DataTypes::ProcedureExpression body ()
raises (Reflective::MofError);
void set_body (in DataTypes::ProcedureExpression new_value)
raises (Reflective::MofError);
Operation specification ()
raises (Reflective::MofError);
void set_specification (in Operation new_value)
raises (Reflective::MofError);
}; // end of interface Method
interface GeneralizationClass : RelationshipClass
{
readonly attribute GeneralizationSet all_of_type_generalization;
readonly attribute GeneralizationSet all_of_class_generalization;
Generalization create_generalization (
in DataTypes::Name name,
in DataTypes::VisibilityKind visibility,
5-24
OMG-UML V1.3
March 2000
5
in boolean is_specification,
in DataTypes::Name discriminator)
raises (Reflective::MofError);
};
interface Generalization : GeneralizationClass, Relationship
{
DataTypes::Name discriminator ()
raises (Reflective::MofError);
void set_discriminator (in DataTypes::Name new_value)
raises (Reflective::MofError);
GeneralizableElement child ()
raises (Reflective::MofError);
void set_child (in GeneralizableElement new_value)
raises (Reflective::MofError);
GeneralizableElement parent ()
raises (Reflective::MofError);
void set_parent (in GeneralizableElement new_value)
raises (Reflective::MofError);
Classifier powertype ()
raises (Reflective::NotSet, Reflective::MofError);
void set_powertype (in Classifier new_value)
raises (Reflective::MofError);
void unset_powertype ()
raises (Reflective::MofError);
}; // end of interface Generalization
interface UmlAssociationClassClass : ClassClass, AssociationClass
{
readonly attribute UmlAssociationClassSet all_of_type_uml_association_class;
readonly attribute UmlAssociationClassSet all_of_class_uml_association_class;
UmlAssociationClass create_uml_association_class (
in DataTypes::Name name,
in DataTypes::VisibilityKind visibility,
in boolean is_specification,
in boolean is_root,
in boolean is_leaf,
in boolean is_abstract,
in boolean is_active)
raises (Reflective::MofError);
};
interface UmlAssociationClass : UmlAssociationClassClass, Class, Association
{
}; // end of interface UmlAssociationClass
interface DependencyClass : RelationshipClass
{
readonly attribute DependencySet all_of_type_dependency;
};
interface Dependency : DependencyClass, Relationship
{
ModelElementSet client ()
raises (Reflective::MofError);
OMG-UML V1.3
IDL Modules
March 2000
5-25
5
void set_client (in ModelElementSet new_value)
raises (Reflective::MofError);
void add_client (in ModelElement new_element)
raises (Reflective::MofError);
void modify_client (
in ModelElement old_element,
in ModelElement new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_client (in ModelElement old_element)
raises (Reflective::NotFound, Reflective::MofError);
ModelElementSet supplier ()
raises (Reflective::MofError);
void set_supplier (in ModelElementSet new_value)
raises (Reflective::MofError);
void add_supplier (in ModelElement new_element)
raises (Reflective::MofError);
void modify_supplier (
in ModelElement old_element,
in ModelElement new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_supplier (in ModelElement old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface Dependency
interface AbstractionClass : DependencyClass
{
readonly attribute AbstractionSet all_of_type_abstraction;
readonly attribute AbstractionSet all_of_class_abstraction;
Abstraction create_abstraction (
in DataTypes::Name name,
in DataTypes::VisibilityKind visibility,
in boolean is_specification,
in DataTypes::MappingExpression mapping)
raises (Reflective::MofError);
};
interface Abstraction : AbstractionClass, Dependency
{
DataTypes::MappingExpression mapping ()
raises (Reflective::MofError);
void set_mapping (in DataTypes::MappingExpression new_value)
raises (Reflective::MofError);
}; // end of interface Abstraction
interface PresentationElementClass : ElementClass
{
readonly attribute PresentationElementSet all_of_type_presentation_element;
};
interface PresentationElement : PresentationElementClass, Element
{
ModelElementSet subject ()
raises (Reflective::MofError);
void set_subject (in ModelElementSet new_value)
raises (Reflective::MofError);
5-26
OMG-UML V1.3
March 2000
5
void add_subject (in ModelElement new_element)
raises (Reflective::MofError);
void modify_subject (
in ModelElement old_element,
in ModelElement new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_subject (in ModelElement old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface PresentationElement
interface UsageClass : DependencyClass
{
readonly attribute UsageSet all_of_type_usage;
readonly attribute UsageSet all_of_class_usage;
Usage create_usage (
in DataTypes::Name name,
in DataTypes::VisibilityKind visibility,
in boolean is_specification)
raises (Reflective::MofError);
};
interface Usage : UsageClass, Dependency
{
}; // end of interface Usage
interface BindingClass : DependencyClass
{
readonly attribute Core::BindingSet all_of_type_binding;
readonly attribute Core::BindingSet all_of_class_binding;
Core::Binding create_binding (
in DataTypes::Name name,
in DataTypes::VisibilityKind visibility,
in boolean is_specification)
raises (Reflective::MofError);
};
interface Binding : BindingClass, Dependency
{
ModelElementUList argument ()
raises (Reflective::MofError);
void set_argument (in ModelElementUList new_value)
raises (Reflective::MofError);
void add_argument (in ModelElement new_element)
raises (Reflective::MofError);
void add_argument_before (
in ModelElement new_element,
in ModelElement before_element)
raises (Reflective::NotFound, Reflective::MofError);
void modify_argument (
in ModelElement old_element,
in ModelElement new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_argument (in ModelElement old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface Binding
OMG-UML V1.3
IDL Modules
March 2000
5-27
5
interface ComponentClass : ClassifierClass
{
readonly attribute ComponentSet all_of_type_component;
readonly attribute ComponentSet all_of_class_component;
Component create_component (
in DataTypes::Name name,
in DataTypes::VisibilityKind visibility,
in boolean is_specification,
in boolean is_root,
in boolean is_leaf,
in boolean is_abstract)
raises (Reflective::MofError);
};
interface Component : ComponentClass, Classifier
{
NodeSet deployment_location ()
raises (Reflective::MofError);
void set_deployment_location (in NodeSet new_value)
raises (Reflective::MofError);
void add_deployment_location (in Node new_element)
raises (Reflective::MofError);
void modify_deployment_location (
in Node old_element,
in Node new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_deployment_location (in Node old_element)
raises (Reflective::NotFound, Reflective::MofError);
ElementResidenceSet resident_element ()
raises (Reflective::MofError);
void set_resident_element (in ElementResidenceSet new_value)
raises (Reflective::MofError);
void add_resident_element (in ElementResidence new_element)
raises (Reflective::MofError);
void modify_resident_element (
in ElementResidence old_element,
in ElementResidence new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_resident_element (in ElementResidence old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface Component
interface NodeClass : ClassifierClass
{
readonly attribute NodeSet all_of_type_node;
readonly attribute NodeSet all_of_class_node;
Node create_node (
in DataTypes::Name name,
in DataTypes::VisibilityKind visibility,
in boolean is_specification,
in boolean is_root,
in boolean is_leaf,
in boolean is_abstract)
raises (Reflective::MofError);
5-28
OMG-UML V1.3
March 2000
5
};
interface Node : NodeClass, Classifier
{
ComponentSet resident ()
raises (Reflective::MofError);
void set_resident (in ComponentSet new_value)
raises (Reflective::MofError);
void add_resident (in Component new_element)
raises (Reflective::MofError);
void modify_resident (
in Component old_element,
in Component new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_resident (in Component old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface Node
interface PermissionClass : DependencyClass
{
readonly attribute PermissionSet all_of_type_permission;
readonly attribute PermissionSet all_of_class_permission;
Permission create_permission (
in DataTypes::Name name,
in DataTypes::VisibilityKind visibility,
in boolean is_specification)
raises (Reflective::MofError);
};
interface Permission : PermissionClass, Dependency
{
}; // end of interface Permission
interface CommentClass : ModelElementClass
{
readonly attribute Core::CommentSet all_of_type_comment;
readonly attribute Core::CommentSet all_of_class_comment;
Core::Comment create_comment (
in DataTypes::Name name,
in DataTypes::VisibilityKind visibility,
in boolean is_specification)
raises (Reflective::MofError);
};
interface Comment : CommentClass, ModelElement
{
ModelElementSet annotated_element ()
raises (Reflective::MofError);
void set_annotated_element (in ModelElementSet new_value)
raises (Reflective::MofError);
void add_annotated_element (in ModelElement new_element)
raises (Reflective::MofError);
void modify_annotated_element (
in ModelElement old_element,
in ModelElement new_element)
OMG-UML V1.3
IDL Modules
March 2000
5-29
5
raises (Reflective::NotFound, Reflective::MofError);
void remove_annotated_element (in ModelElement old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface Comment
interface FlowClass : RelationshipClass
{
readonly attribute FlowSet all_of_type_flow;
readonly attribute FlowSet all_of_class_flow;
Flow create_flow (
in DataTypes::Name name,
in DataTypes::VisibilityKind visibility,
in boolean is_specification)
raises (Reflective::MofError);
};
interface Flow : FlowClass, Relationship
{
ModelElementSet target ()
raises (Reflective::MofError);
void set_target (in ModelElementSet new_value)
raises (Reflective::MofError);
void add_target (in ModelElement new_element)
raises (Reflective::MofError);
void modify_target (
in ModelElement old_element,
in ModelElement new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_target (in ModelElement old_element)
raises (Reflective::NotFound, Reflective::MofError);
ModelElementSet source ()
raises (Reflective::MofError);
void set_source (in ModelElementSet new_value)
raises (Reflective::MofError);
void add_source (in ModelElement new_element)
raises (Reflective::MofError);
void modify_source (
in ModelElement old_element,
in ModelElement new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_source (in ModelElement old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface Flow
interface ElementResidenceClass : Reflective::RefObject
{
readonly attribute ElementResidenceSet all_of_type_element_residence;
readonly attribute ElementResidenceSet all_of_class_element_residence;
ElementResidence create_element_residence (
in DataTypes::VisibilityKind visibility)
raises (Reflective::MofError);
};
interface ElementResidence : ElementResidenceClass
{
5-30
OMG-UML V1.3
March 2000
5
DataTypes::VisibilityKind visibility ()
raises (Reflective::MofError);
void set_visibility (in DataTypes::VisibilityKind new_value)
raises (Reflective::MofError);
ModelElement resident ()
raises (Reflective::MofError);
void set_resident (in ModelElement new_value)
raises (Reflective::MofError);
Component implementation_location ()
raises (Reflective::MofError);
void set_implementation_location (in Component new_value)
raises (Reflective::MofError);
}; // end of interface ElementResidence
interface TemplateParameterClass : Reflective::RefObject
{
readonly attribute TemplateParameterSet all_of_type_template_parameter;
readonly attribute TemplateParameterSet all_of_class_template_parameter;
TemplateParameter create_template_parameter ()
raises (Reflective::MofError);
};
interface TemplateParameter : TemplateParameterClass
{
ModelElement default_element ()
raises (Reflective::NotSet, Reflective::MofError);
void set_default_element (in ModelElement new_value)
raises (Reflective::MofError);
void unset_default_element ()
raises (Reflective::MofError);
ModelElement model_element ()
raises (Reflective::NotSet, Reflective::MofError);
void set_model_element (in ModelElement new_value)
raises (Reflective::MofError);
void unset_model_element ()
raises (Reflective::MofError);
ModelElement model_element2 ()
raises (Reflective::MofError);
void set_model_element2 (in ModelElement new_value)
raises (Reflective::MofError);
}; // end of interface TemplateParameter
struct AAssociationConnectionLink
{
Core::Association association;
AssociationEnd connection;
};
typedef sequence<AAssociationConnectionLink> AAssociationConnectionLinkSet;
interface AAssociationConnection : Reflective::RefAssociation
{
AAssociationConnectionLinkSet all_a_association_connection_links()
raises (Reflective::MofError);
boolean exists (
in Core::Association association,
OMG-UML V1.3
IDL Modules
March 2000
5-31
5
in AssociationEnd connection)
raises (Reflective::MofError);
Core::Association association (in AssociationEnd connection)
raises (Reflective::MofError);
AssociationEndSet connection (in Core::Association association)
raises (Reflective::MofError);
void add (
in Core::Association association,
in AssociationEnd connection)
raises (Reflective::MofError);
void modify_association (
in Core::Association association,
in AssociationEnd connection,
in Core::Association new_association)
raises (Reflective::NotFound, Reflective::MofError);
void modify_connection (
in Core::Association association,
in AssociationEnd connection,
in AssociationEnd new_connection)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Core::Association association,
in AssociationEnd connection)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AAssociationConnection
struct AOwnerFeatureLink
{
Classifier owner;
Core::Feature feature;
};
typedef sequence<AOwnerFeatureLink> AOwnerFeatureLinkSet;
interface AOwnerFeature : Reflective::RefAssociation
{
AOwnerFeatureLinkSet all_a_owner_feature_links()
raises (Reflective::MofError);
boolean exists (
in Classifier owner,
in Core::Feature feature)
raises (Reflective::MofError);
Classifier owner (in Core::Feature feature)
raises (Reflective::MofError);
FeatureUList feature (in Classifier owner)
raises (Reflective::MofError);
void add (
in Classifier owner,
in Core::Feature feature)
raises (Reflective::MofError);
void add_before_feature (
in Classifier owner,
in Core::Feature feature,
in Core::Feature before)
raises (Reflective::NotFound, Reflective::MofError);
void modify_owner (
5-32
OMG-UML V1.3
March 2000
5
in Classifier owner,
in Core::Feature feature,
in Classifier new_owner)
raises (Reflective::NotFound, Reflective::MofError);
void modify_feature (
in Classifier owner,
in Core::Feature feature,
in Core::Feature new_feature)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Classifier owner,
in Core::Feature feature)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AOwnerFeature
struct ASpecificationMethodLink
{
Operation specification;
Core::Method method;
};
typedef sequence<ASpecificationMethodLink> ASpecificationMethodLinkSet;
interface ASpecificationMethod : Reflective::RefAssociation
{
ASpecificationMethodLinkSet all_a_specification_method_links()
raises (Reflective::MofError);
boolean exists (
in Operation specification,
in Core::Method method)
raises (Reflective::MofError);
Operation specification (in Core::Method method)
raises (Reflective::MofError);
MethodSet method (in Operation specification)
raises (Reflective::MofError);
void add (
in Operation specification,
in Core::Method method)
raises (Reflective::MofError);
void modify_specification (
in Operation specification,
in Core::Method method,
in Operation new_specification)
raises (Reflective::NotFound, Reflective::MofError);
void modify_method (
in Operation specification,
in Core::Method method,
in Core::Method new_method)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Operation specification,
in Core::Method method)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ASpecificationMethod
struct AStructuralFeatureTypeLink
OMG-UML V1.3
IDL Modules
March 2000
5-33
5
{
StructuralFeature structural_feature;
Classifier type;
};
typedef sequence<AStructuralFeatureTypeLink> AStructuralFeatureTypeLinkSet;
interface AStructuralFeatureType : Reflective::RefAssociation
{
AStructuralFeatureTypeLinkSet all_a_structural_feature_type_links()
raises (Reflective::MofError);
boolean exists (
in StructuralFeature structural_feature,
in Classifier type)
raises (Reflective::MofError);
Classifier type (in StructuralFeature structural_feature)
raises (Reflective::MofError);
void add (
in StructuralFeature structural_feature,
in Classifier type)
raises (Reflective::MofError);
void modify_type (
in StructuralFeature structural_feature,
in Classifier type,
in Classifier new_type)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in StructuralFeature structural_feature,
in Classifier type)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AStructuralFeatureType
struct ANamespaceOwnedElementLink
{
Core::Namespace namespace;
ModelElement owned_element;
};
typedef sequence<ANamespaceOwnedElementLink> ANamespaceOwnedElementLinkSet;
interface ANamespaceOwnedElement : Reflective::RefAssociation
{
ANamespaceOwnedElementLinkSet all_a_namespace_owned_element_links()
raises (Reflective::MofError);
boolean exists (
in Core::Namespace namespace,
in ModelElement owned_element)
raises (Reflective::MofError);
Core::Namespace namespace (in ModelElement owned_element)
raises (Reflective::MofError);
ModelElementSet owned_element (in Core::Namespace namespace)
raises (Reflective::MofError);
void add (
in Core::Namespace namespace,
in ModelElement owned_element)
raises (Reflective::MofError);
void modify_namespace (
5-34
OMG-UML V1.3
March 2000
5
in Core::Namespace namespace,
in ModelElement owned_element,
in Core::Namespace new_namespace)
raises (Reflective::NotFound, Reflective::MofError);
void modify_owned_element (
in Core::Namespace namespace,
in ModelElement owned_element,
in ModelElement new_owned_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Core::Namespace namespace,
in ModelElement owned_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ANamespaceOwnedElement
struct ABehavioralFeatureParameterLink
{
BehavioralFeature behavioral_feature;
Core::Parameter parameter;
};
typedef sequence<ABehavioralFeatureParameterLink> ABehavioralFeatureParameterLinkSet;
interface ABehavioralFeatureParameter : Reflective::RefAssociation
{
ABehavioralFeatureParameterLinkSet all_a_behavioral_feature_parameter_links()
raises (Reflective::MofError);
boolean exists (
in BehavioralFeature behavioral_feature,
in Core::Parameter parameter)
raises (Reflective::MofError);
BehavioralFeature behavioral_feature (in Core::Parameter parameter)
raises (Reflective::MofError);
ParameterUList parameter (in BehavioralFeature behavioral_feature)
raises (Reflective::MofError);
void add (
in BehavioralFeature behavioral_feature,
in Core::Parameter parameter)
raises (Reflective::MofError);
void add_before_parameter (
in BehavioralFeature behavioral_feature,
in Core::Parameter parameter,
in Core::Parameter before)
raises (Reflective::NotFound, Reflective::MofError);
void modify_behavioral_feature (
in BehavioralFeature behavioral_feature,
in Core::Parameter parameter,
in BehavioralFeature new_behavioral_feature)
raises (Reflective::NotFound, Reflective::MofError);
void modify_parameter (
in BehavioralFeature behavioral_feature,
in Core::Parameter parameter,
in Core::Parameter new_parameter)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in BehavioralFeature behavioral_feature,
OMG-UML V1.3
IDL Modules
March 2000
5-35
5
in Core::Parameter parameter)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ABehavioralFeatureParameter
struct AParameterTypeLink
{
Core::Parameter parameter;
Classifier type;
};
typedef sequence<AParameterTypeLink> AParameterTypeLinkSet;
interface AParameterType : Reflective::RefAssociation
{
AParameterTypeLinkSet all_a_parameter_type_links()
raises (Reflective::MofError);
boolean exists (
in Core::Parameter parameter,
in Classifier type)
raises (Reflective::MofError);
Classifier type (in Core::Parameter parameter)
raises (Reflective::MofError);
void add (
in Core::Parameter parameter,
in Classifier type)
raises (Reflective::MofError);
void modify_type (
in Core::Parameter parameter,
in Classifier type,
in Classifier new_type)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Core::Parameter parameter,
in Classifier type)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AParameterType
struct AChildGeneralizationLink
{
GeneralizableElement child;
Core::Generalization generalization;
};
typedef sequence<AChildGeneralizationLink> AChildGeneralizationLinkSet;
interface AChildGeneralization : Reflective::RefAssociation
{
AChildGeneralizationLinkSet all_a_child_generalization_links()
raises (Reflective::MofError);
boolean exists (
in GeneralizableElement child,
in Core::Generalization generalization)
raises (Reflective::MofError);
GeneralizableElement child (in Core::Generalization generalization)
raises (Reflective::MofError);
GeneralizationSet generalization (in GeneralizableElement child)
raises (Reflective::MofError);
5-36
OMG-UML V1.3
March 2000
5
void add (
in GeneralizableElement child,
in Core::Generalization generalization)
raises (Reflective::MofError);
void modify_child (
in GeneralizableElement child,
in Core::Generalization generalization,
in GeneralizableElement new_child)
raises (Reflective::NotFound, Reflective::MofError);
void modify_generalization (
in GeneralizableElement child,
in Core::Generalization generalization,
in Core::Generalization new_generalization)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in GeneralizableElement child,
in Core::Generalization generalization)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AChildGeneralization
struct AParentSpecializationLink
{
GeneralizableElement parent;
Generalization specialization;
};
typedef sequence<AParentSpecializationLink> AParentSpecializationLinkSet;
interface AParentSpecialization : Reflective::RefAssociation
{
AParentSpecializationLinkSet all_a_parent_specialization_links()
raises (Reflective::MofError);
boolean exists (
in GeneralizableElement parent,
in Generalization specialization)
raises (Reflective::MofError);
GeneralizableElement parent (in Generalization specialization)
raises (Reflective::MofError);
GeneralizationSet specialization (in GeneralizableElement parent)
raises (Reflective::MofError);
void add (
in GeneralizableElement parent,
in Generalization specialization)
raises (Reflective::MofError);
void modify_parent (
in GeneralizableElement parent,
in Generalization specialization,
in GeneralizableElement new_parent)
raises (Reflective::NotFound, Reflective::MofError);
void modify_specialization (
in GeneralizableElement parent,
in Generalization specialization,
in Generalization new_specialization)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in GeneralizableElement parent,
OMG-UML V1.3
IDL Modules
March 2000
5-37
5
in Generalization specialization)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AParentSpecialization
struct AQualifierAssociationEndLink
{
UmlAttribute qualifier;
AssociationEnd association_end;
};
typedef sequence<AQualifierAssociationEndLink> AQualifierAssociationEndLinkSet;
interface AQualifierAssociationEnd : Reflective::RefAssociation
{
AQualifierAssociationEndLinkSet all_a_qualifier_association_end_links()
raises (Reflective::MofError);
boolean exists (
in UmlAttribute qualifier,
in AssociationEnd association_end)
raises (Reflective::MofError);
UmlAttributeUList qualifier (in AssociationEnd association_end)
raises (Reflective::MofError);
AssociationEnd association_end (in UmlAttribute qualifier)
raises (Reflective::MofError);
void add (
in UmlAttribute qualifier,
in AssociationEnd association_end)
raises (Reflective::MofError);
void add_before_qualifier (
in UmlAttribute qualifier,
in AssociationEnd association_end,
in UmlAttribute before)
raises (Reflective::NotFound, Reflective::MofError);
void modify_qualifier (
in UmlAttribute qualifier,
in AssociationEnd association_end,
in UmlAttribute new_qualifier)
raises (Reflective::NotFound, Reflective::MofError);
void modify_association_end (
in UmlAttribute qualifier,
in AssociationEnd association_end,
in AssociationEnd new_association_end)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in UmlAttribute qualifier,
in AssociationEnd association_end)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AQualifierAssociationEnd
struct ATypeAssociationEndLink
{
Classifier type;
AssociationEnd association_end;
};
typedef sequence<ATypeAssociationEndLink> ATypeAssociationEndLinkSet;
5-38
OMG-UML V1.3
March 2000
5
interface ATypeAssociationEnd : Reflective::RefAssociation
{
ATypeAssociationEndLinkSet all_a_type_association_end_links()
raises (Reflective::MofError);
boolean exists (
in Classifier type,
in AssociationEnd association_end)
raises (Reflective::MofError);
Classifier type (in AssociationEnd association_end)
raises (Reflective::MofError);
void add (
in Classifier type,
in AssociationEnd association_end)
raises (Reflective::MofError);
void modify_type (
in Classifier type,
in AssociationEnd association_end,
in Classifier new_type)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Classifier type,
in AssociationEnd association_end)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ATypeAssociationEnd
struct AParticipantSpecificationLink
{
AssociationEnd participant;
Classifier specification;
};
typedef sequence<AParticipantSpecificationLink> AParticipantSpecificationLinkSet;
interface AParticipantSpecification : Reflective::RefAssociation
{
AParticipantSpecificationLinkSet all_a_participant_specification_links()
raises (Reflective::MofError);
boolean exists (
in AssociationEnd participant,
in Classifier specification)
raises (Reflective::MofError);
AssociationEndSet participant (in Classifier specification)
raises (Reflective::MofError);
ClassifierSet specification (in AssociationEnd participant)
raises (Reflective::MofError);
void add (
in AssociationEnd participant,
in Classifier specification)
raises (Reflective::MofError);
void modify_participant (
in AssociationEnd participant,
in Classifier specification,
in AssociationEnd new_participant)
raises (Reflective::NotFound, Reflective::MofError);
void modify_specification (
in AssociationEnd participant,
OMG-UML V1.3
IDL Modules
March 2000
5-39
5
in Classifier specification,
in Classifier new_specification)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in AssociationEnd participant,
in Classifier specification)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AParticipantSpecification
struct AClientClientDependencyLink
{
ModelElement client;
Dependency client_dependency;
};
typedef sequence<AClientClientDependencyLink> AClientClientDependencyLinkSet;
interface AClientClientDependency : Reflective::RefAssociation
{
AClientClientDependencyLinkSet all_a_client_client_dependency_links()
raises (Reflective::MofError);
boolean exists (
in ModelElement client,
in Dependency client_dependency)
raises (Reflective::MofError);
ModelElementSet client (in Dependency client_dependency)
raises (Reflective::MofError);
DependencySet client_dependency (in ModelElement client)
raises (Reflective::MofError);
void add (
in ModelElement client,
in Dependency client_dependency)
raises (Reflective::MofError);
void modify_client (
in ModelElement client,
in Dependency client_dependency,
in ModelElement new_client)
raises (Reflective::NotFound, Reflective::MofError);
void modify_client_dependency (
in ModelElement client,
in Dependency client_dependency,
in Dependency new_client_dependency)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in ModelElement client,
in Dependency client_dependency)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AClientClientDependency
struct AConstrainedElementConstraintLink
{
ModelElement constrained_element;
UmlConstraint uml_constraint;
};
typedef sequence<AConstrainedElementConstraintLink> AConstrainedElementConstraintLinkSet;
5-40
OMG-UML V1.3
March 2000
5
interface AConstrainedElementConstraint : Reflective::RefAssociation
{
AConstrainedElementConstraintLinkSet all_a_constrained_element_constraint_links()
raises (Reflective::MofError);
boolean exists (
in ModelElement constrained_element,
in UmlConstraint uml_constraint)
raises (Reflective::MofError);
ModelElementUList constrained_element (in UmlConstraint uml_constraint)
raises (Reflective::MofError);
UmlConstraintSet uml_constraint (in ModelElement constrained_element)
raises (Reflective::MofError);
void add (
in ModelElement constrained_element,
in UmlConstraint uml_constraint)
raises (Reflective::MofError);
void add_before_constrained_element (
in ModelElement constrained_element,
in UmlConstraint uml_constraint,
in ModelElement before)
raises (Reflective::NotFound, Reflective::MofError);
void modify_constrained_element (
in ModelElement constrained_element,
in UmlConstraint uml_constraint,
in ModelElement new_constrained_element)
raises (Reflective::NotFound, Reflective::MofError);
void modify_uml_constraint (
in ModelElement constrained_element,
in UmlConstraint uml_constraint,
in UmlConstraint new_uml_constraint)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in ModelElement constrained_element,
in UmlConstraint uml_constraint)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AConstrainedElementConstraint
struct ASupplierSupplierDependencyLink
{
ModelElement supplier;
Dependency supplier_dependency;
};
typedef sequence<ASupplierSupplierDependencyLink> ASupplierSupplierDependencyLinkSet;
interface ASupplierSupplierDependency : Reflective::RefAssociation
{
ASupplierSupplierDependencyLinkSet all_a_supplier_supplier_dependency_links()
raises (Reflective::MofError);
boolean exists (
in ModelElement supplier,
in Dependency supplier_dependency)
raises (Reflective::MofError);
ModelElementSet supplier (in Dependency supplier_dependency)
raises (Reflective::MofError);
DependencySet supplier_dependency (in ModelElement supplier)
OMG-UML V1.3
IDL Modules
March 2000
5-41
5
raises (Reflective::MofError);
void add (
in ModelElement supplier,
in Dependency supplier_dependency)
raises (Reflective::MofError);
void modify_supplier (
in ModelElement supplier,
in Dependency supplier_dependency,
in ModelElement new_supplier)
raises (Reflective::NotFound, Reflective::MofError);
void modify_supplier_dependency (
in ModelElement supplier,
in Dependency supplier_dependency,
in Dependency new_supplier_dependency)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in ModelElement supplier,
in Dependency supplier_dependency)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ASupplierSupplierDependency
struct APresentationSubjectLink
{
PresentationElement presentation;
ModelElement subject;
};
typedef sequence<APresentationSubjectLink> APresentationSubjectLinkSet;
interface APresentationSubject : Reflective::RefAssociation
{
APresentationSubjectLinkSet all_a_presentation_subject_links()
raises (Reflective::MofError);
boolean exists (
in PresentationElement presentation,
in ModelElement subject)
raises (Reflective::MofError);
PresentationElementSet presentation (in ModelElement subject)
raises (Reflective::MofError);
ModelElementSet subject (in PresentationElement presentation)
raises (Reflective::MofError);
void add (
in PresentationElement presentation,
in ModelElement subject)
raises (Reflective::MofError);
void modify_presentation (
in PresentationElement presentation,
in ModelElement subject,
in PresentationElement new_presentation)
raises (Reflective::NotFound, Reflective::MofError);
void modify_subject (
in PresentationElement presentation,
in ModelElement subject,
in ModelElement new_subject)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
5-42
OMG-UML V1.3
March 2000
5
in PresentationElement presentation,
in ModelElement subject)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface APresentationSubject
struct ADeploymentLocationResidentLink
{
Node deployment_location;
Component resident;
};
typedef sequence<ADeploymentLocationResidentLink> ADeploymentLocationResidentLinkSet;
interface ADeploymentLocationResident : Reflective::RefAssociation
{
ADeploymentLocationResidentLinkSet all_a_deployment_location_resident_links()
raises (Reflective::MofError);
boolean exists (
in Node deployment_location,
in Component resident)
raises (Reflective::MofError);
NodeSet deployment_location (in Component resident)
raises (Reflective::MofError);
ComponentSet resident (in Node deployment_location)
raises (Reflective::MofError);
void add (
in Node deployment_location,
in Component resident)
raises (Reflective::MofError);
void modify_deployment_location (
in Node deployment_location,
in Component resident,
in Node new_deployment_location)
raises (Reflective::NotFound, Reflective::MofError);
void modify_resident (
in Node deployment_location,
in Component resident,
in Component new_resident)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Node deployment_location,
in Component resident)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ADeploymentLocationResident
struct ATargetFlowTargetLink
{
Flow target_flow;
ModelElement target;
};
typedef sequence<ATargetFlowTargetLink> ATargetFlowTargetLinkSet;
interface ATargetFlowTarget : Reflective::RefAssociation
{
ATargetFlowTargetLinkSet all_a_target_flow_target_links()
raises (Reflective::MofError);
OMG-UML V1.3
IDL Modules
March 2000
5-43
5
boolean exists (
in Flow target_flow,
in ModelElement target)
raises (Reflective::MofError);
FlowSet target_flow (in ModelElement target)
raises (Reflective::MofError);
ModelElementSet target (in Flow target_flow)
raises (Reflective::MofError);
void add (
in Flow target_flow,
in ModelElement target)
raises (Reflective::MofError);
void modify_target_flow (
in Flow target_flow,
in ModelElement target,
in Flow new_target_flow)
raises (Reflective::NotFound, Reflective::MofError);
void modify_target (
in Flow target_flow,
in ModelElement target,
in ModelElement new_target)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Flow target_flow,
in ModelElement target)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ATargetFlowTarget
struct ASourceFlowSourceLink
{
Flow source_flow;
ModelElement source;
};
typedef sequence<ASourceFlowSourceLink> ASourceFlowSourceLinkSet;
interface ASourceFlowSource : Reflective::RefAssociation
{
ASourceFlowSourceLinkSet all_a_source_flow_source_links()
raises (Reflective::MofError);
boolean exists (
in Flow source_flow,
in ModelElement source)
raises (Reflective::MofError);
FlowSet source_flow (in ModelElement source)
raises (Reflective::MofError);
ModelElementSet source (in Flow source_flow)
raises (Reflective::MofError);
void add (
in Flow source_flow,
in ModelElement source)
raises (Reflective::MofError);
void modify_source_flow (
in Flow source_flow,
in ModelElement source,
in Flow new_source_flow)
5-44
OMG-UML V1.3
March 2000
5
raises (Reflective::NotFound, Reflective::MofError);
void modify_source (
in Flow source_flow,
in ModelElement source,
in ModelElement new_source)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Flow source_flow,
in ModelElement source)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ASourceFlowSource
struct ADefaultElementTemplateParameter3Link
{
ModelElement default_element;
TemplateParameter template_parameter3;
};
typedef sequence<ADefaultElementTemplateParameter3Link> ADefaultElementTemplateParameter3LinkSet;
interface ADefaultElementTemplateParameter3 : Reflective::RefAssociation
{
ADefaultElementTemplateParameter3LinkSet all_a_default_element_template_parameter3_links()
raises (Reflective::MofError);
boolean exists (
in ModelElement default_element,
in TemplateParameter template_parameter3)
raises (Reflective::MofError);
ModelElement default_element (in TemplateParameter template_parameter3)
raises (Reflective::MofError);
TemplateParameterSet template_parameter3 (in ModelElement default_element)
raises (Reflective::MofError);
void add (
in ModelElement default_element,
in TemplateParameter template_parameter3)
raises (Reflective::MofError);
void modify_default_element (
in ModelElement default_element,
in TemplateParameter template_parameter3,
in ModelElement new_default_element)
raises (Reflective::NotFound, Reflective::MofError);
void modify_template_parameter3 (
in ModelElement default_element,
in TemplateParameter template_parameter3,
in TemplateParameter new_template_parameter3)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in ModelElement default_element,
in TemplateParameter template_parameter3)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ADefaultElementTemplateParameter3
struct ABindingArgumentLink
{
Core::Binding binding;
ModelElement argument;
OMG-UML V1.3
IDL Modules
March 2000
5-45
5
};
typedef sequence<ABindingArgumentLink> ABindingArgumentLinkSet;
interface ABindingArgument : Reflective::RefAssociation
{
ABindingArgumentLinkSet all_a_binding_argument_links()
raises (Reflective::MofError);
boolean exists (
in Core::Binding binding,
in ModelElement argument)
raises (Reflective::MofError);
Core::Binding binding (in ModelElement argument)
raises (Reflective::MofError);
ModelElementUList argument (in Core::Binding binding)
raises (Reflective::MofError);
void add (
in Core::Binding binding,
in ModelElement argument)
raises (Reflective::MofError);
void add_before_argument (
in Core::Binding binding,
in ModelElement argument,
in ModelElement before)
raises (Reflective::NotFound, Reflective::MofError);
void modify_binding (
in Core::Binding binding,
in ModelElement argument,
in Core::Binding new_binding)
raises (Reflective::NotFound, Reflective::MofError);
void modify_argument (
in Core::Binding binding,
in ModelElement argument,
in ModelElement new_argument)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Core::Binding binding,
in ModelElement argument)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ABindingArgument
struct APowertypePowertypeRangeLink
{
Classifier powertype;
Generalization powertype_range;
};
typedef sequence<APowertypePowertypeRangeLink> APowertypePowertypeRangeLinkSet;
interface APowertypePowertypeRange : Reflective::RefAssociation
{
APowertypePowertypeRangeLinkSet all_a_powertype_powertype_range_links()
raises (Reflective::MofError);
boolean exists (
in Classifier powertype,
in Generalization powertype_range)
raises (Reflective::MofError);
5-46
OMG-UML V1.3
March 2000
5
Classifier powertype (in Generalization powertype_range)
raises (Reflective::MofError);
GeneralizationSet powertype_range (in Classifier powertype)
raises (Reflective::MofError);
void add (
in Classifier powertype,
in Generalization powertype_range)
raises (Reflective::MofError);
void modify_powertype (
in Classifier powertype,
in Generalization powertype_range,
in Classifier new_powertype)
raises (Reflective::NotFound, Reflective::MofError);
void modify_powertype_range (
in Classifier powertype,
in Generalization powertype_range,
in Generalization new_powertype_range)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Classifier powertype,
in Generalization powertype_range)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface APowertypePowertypeRange
struct ACommentAnnotatedElementLink
{
Core::Comment comment;
ModelElement annotated_element;
};
typedef sequence<ACommentAnnotatedElementLink> ACommentAnnotatedElementLinkSet;
interface ACommentAnnotatedElement : Reflective::RefAssociation
{
ACommentAnnotatedElementLinkSet all_a_comment_annotated_element_links()
raises (Reflective::MofError);
boolean exists (
in Core::Comment comment,
in ModelElement annotated_element)
raises (Reflective::MofError);
CommentSet comment (in ModelElement annotated_element)
raises (Reflective::MofError);
ModelElementSet annotated_element (in Core::Comment comment)
raises (Reflective::MofError);
void add (
in Core::Comment comment,
in ModelElement annotated_element)
raises (Reflective::MofError);
void modify_comment (
in Core::Comment comment,
in ModelElement annotated_element,
in Core::Comment new_comment)
raises (Reflective::NotFound, Reflective::MofError);
void modify_annotated_element (
in Core::Comment comment,
in ModelElement annotated_element,
OMG-UML V1.3
IDL Modules
March 2000
5-47
5
in ModelElement new_annotated_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Core::Comment comment,
in ModelElement annotated_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ACommentAnnotatedElement
struct AResidentElementResidenceLink
{
ModelElement resident;
ElementResidence element_residence;
};
typedef sequence<AResidentElementResidenceLink> AResidentElementResidenceLinkSet;
interface AResidentElementResidence : Reflective::RefAssociation
{
AResidentElementResidenceLinkSet all_a_resident_element_residence_links()
raises (Reflective::MofError);
boolean exists (
in ModelElement resident,
in ElementResidence element_residence)
raises (Reflective::MofError);
ModelElement resident (in ElementResidence element_residence)
raises (Reflective::MofError);
ElementResidenceSet element_residence (in ModelElement resident)
raises (Reflective::MofError);
void add (
in ModelElement resident,
in ElementResidence element_residence)
raises (Reflective::MofError);
void modify_resident (
in ModelElement resident,
in ElementResidence element_residence,
in ModelElement new_resident)
raises (Reflective::NotFound, Reflective::MofError);
void modify_element_residence (
in ModelElement resident,
in ElementResidence element_residence,
in ElementResidence new_element_residence)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in ModelElement resident,
in ElementResidence element_residence)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AResidentElementResidence
struct AImplementationLocationResidentElementLink
{
Component implementation_location;
ElementResidence resident_element;
};
typedef sequence<AImplementationLocationResidentElementLink>
AImplementationLocationResidentElementLinkSet;
5-48
OMG-UML V1.3
March 2000
5
interface AImplementationLocationResidentElement : Reflective::RefAssociation
{
AImplementationLocationResidentElementLinkSet
all_a_implementation_location_resident_element_links()
raises (Reflective::MofError);
boolean exists (
in Component implementation_location,
in ElementResidence resident_element)
raises (Reflective::MofError);
Component implementation_location (in ElementResidence resident_element)
raises (Reflective::MofError);
ElementResidenceSet resident_element (in Component implementation_location)
raises (Reflective::MofError);
void add (
in Component implementation_location,
in ElementResidence resident_element)
raises (Reflective::MofError);
void modify_implementation_location (
in Component implementation_location,
in ElementResidence resident_element,
in Component new_implementation_location)
raises (Reflective::NotFound, Reflective::MofError);
void modify_resident_element (
in Component implementation_location,
in ElementResidence resident_element,
in ElementResidence new_resident_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Component implementation_location,
in ElementResidence resident_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AImplementationLocationResidentElement
struct AModelElementTemplateParameterLink
{
ModelElement model_element;
TemplateParameter template_parameter;
};
typedef sequence<AModelElementTemplateParameterLink>
AModelElementTemplateParameterLinkSet;
interface AModelElementTemplateParameter : Reflective::RefAssociation
{
AModelElementTemplateParameterLinkSet all_a_model_element_template_parameter_links()
raises (Reflective::MofError);
boolean exists (
in ModelElement model_element,
in TemplateParameter template_parameter)
raises (Reflective::MofError);
ModelElement model_element (in TemplateParameter template_parameter)
raises (Reflective::MofError);
TemplateParameterUList template_parameter (in ModelElement model_element)
raises (Reflective::MofError);
void add (
OMG-UML V1.3
IDL Modules
March 2000
5-49
5
in ModelElement model_element,
in TemplateParameter template_parameter)
raises (Reflective::MofError);
void add_before_template_parameter (
in ModelElement model_element,
in TemplateParameter template_parameter,
in TemplateParameter before)
raises (Reflective::NotFound, Reflective::MofError);
void modify_model_element (
in ModelElement model_element,
in TemplateParameter template_parameter,
in ModelElement new_model_element)
raises (Reflective::NotFound, Reflective::MofError);
void modify_template_parameter (
in ModelElement model_element,
in TemplateParameter template_parameter,
in TemplateParameter new_template_parameter)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in ModelElement model_element,
in TemplateParameter template_parameter)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AModelElementTemplateParameter
struct AModelElement2TemplateParameter2Link
{
ModelElement model_element2;
TemplateParameter template_parameter2;
};
typedef sequence<AModelElement2TemplateParameter2Link>
AModelElement2TemplateParameter2LinkSet;
interface AModelElement2TemplateParameter2 : Reflective::RefAssociation
{
AModelElement2TemplateParameter2LinkSet all_a_model_element2_template_parameter2_links()
raises (Reflective::MofError);
boolean exists (
in ModelElement model_element2,
in TemplateParameter template_parameter2)
raises (Reflective::MofError);
ModelElement model_element2 (in TemplateParameter template_parameter2)
raises (Reflective::MofError);
TemplateParameterSet template_parameter2 (in ModelElement model_element2)
raises (Reflective::MofError);
void add (
in ModelElement model_element2,
in TemplateParameter template_parameter2)
raises (Reflective::MofError);
void modify_model_element2 (
in ModelElement model_element2,
in TemplateParameter template_parameter2,
in ModelElement new_model_element2)
raises (Reflective::NotFound, Reflective::MofError);
void modify_template_parameter2 (
in ModelElement model_element2,
5-50
OMG-UML V1.3
March 2000
5
in TemplateParameter template_parameter2,
in TemplateParameter new_template_parameter2)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in ModelElement model_element2,
in TemplateParameter template_parameter2)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AModelElement2TemplateParameter2
interface CorePackage : Reflective::RefPackage
{
readonly attribute ClassifierClass classifier_ref;
readonly attribute ClassClass class_ref;
readonly attribute DataTypeClass data_type_ref;
readonly attribute StructuralFeatureClass structural_feature_ref;
readonly attribute NamespaceClass namespace_ref;
readonly attribute AssociationEndClass association_end_ref;
readonly attribute UmlInterfaceClass uml_interface_ref;
readonly attribute UmlConstraintClass uml_constraint_ref;
readonly attribute AssociationClass association_ref;
readonly attribute ElementClass element_ref;
readonly attribute GeneralizableElementClass generalizable_element_ref;
readonly attribute UmlAttributeClass uml_attribute_ref;
readonly attribute OperationClass operation_ref;
readonly attribute ParameterClass parameter_ref;
readonly attribute MethodClass method_ref;
readonly attribute GeneralizationClass generalization_ref;
readonly attribute UmlAssociationClassClass uml_association_class_ref;
readonly attribute FeatureClass feature_ref;
readonly attribute BehavioralFeatureClass behavioral_feature_ref;
readonly attribute ModelElementClass model_element_ref;
readonly attribute DependencyClass dependency_ref;
readonly attribute AbstractionClass abstraction_ref;
readonly attribute PresentationElementClass presentation_element_ref;
readonly attribute UsageClass usage_ref;
readonly attribute BindingClass binding_ref;
readonly attribute ComponentClass component_ref;
readonly attribute NodeClass node_ref;
readonly attribute PermissionClass permission_ref;
readonly attribute CommentClass comment_ref;
readonly attribute FlowClass flow_ref;
readonly attribute RelationshipClass relationship_ref;
readonly attribute ElementResidenceClass element_residence_ref;
readonly attribute TemplateParameterClass template_parameter_ref;
readonly attribute AAssociationConnection a_association_connection_ref;
readonly attribute AOwnerFeature a_owner_feature_ref;
readonly attribute ASpecificationMethod a_specification_method_ref;
readonly attribute AStructuralFeatureType a_structural_feature_type_ref;
readonly attribute ANamespaceOwnedElement a_namespace_owned_element_ref;
readonly attribute ABehavioralFeatureParameter a_behavioral_feature_parameter_ref;
readonly attribute AParameterType a_parameter_type_ref;
readonly attribute AChildGeneralization a_child_generalization_ref;
readonly attribute AParentSpecialization a_parent_specialization_ref;
readonly attribute AQualifierAssociationEnd a_qualifier_association_end_ref;
readonly attribute ATypeAssociationEnd a_type_association_end_ref;
OMG-UML V1.3
IDL Modules
March 2000
5-51
5
readonly attribute AParticipantSpecification a_participant_specification_ref;
readonly attribute AClientClientDependency a_client_client_dependency_ref;
readonly attribute AConstrainedElementConstraint a_constrained_element_constraint_ref;
readonly attribute ASupplierSupplierDependency a_supplier_supplier_dependency_ref;
readonly attribute APresentationSubject a_presentation_subject_ref;
readonly attribute ADeploymentLocationResident a_deployment_location_resident_ref;
readonly attribute ATargetFlowTarget a_target_flow_target_ref;
readonly attribute ASourceFlowSource a_source_flow_source_ref;
readonly attribute ADefaultElementTemplateParameter3 a_default_element_template_parameter3_ref;
readonly attribute ABindingArgument a_binding_argument_ref;
readonly attribute APowertypePowertypeRange a_powertype_powertype_range_ref;
readonly attribute ACommentAnnotatedElement a_comment_annotated_element_ref;
readonly attribute AResidentElementResidence a_resident_element_residence_ref;
readonly attribute AImplementationLocationResidentElement
a_implementation_location_resident_element_ref;
readonly attribute AModelElementTemplateParameter a_model_element_template_parameter_ref;
readonly attribute AModelElement2TemplateParameter2
a_model_element2_template_parameter2_ref;
};
}; // end of module Core
module ExtensionMechanisms
{
interface StereotypeClass;
interface Stereotype;
typedef sequence<Stereotype> StereotypeSet;
interface TaggedValueClass;
interface TaggedValue;
typedef sequence<TaggedValue> TaggedValueSet;
interface ExtensionMechanismsPackage;
interface StereotypeClass : Core::GeneralizableElementClass
{
readonly attribute StereotypeSet all_of_type_stereotype;
readonly attribute StereotypeSet all_of_class_stereotype;
Stereotype create_stereotype (
in DataTypes::Name name,
in DataTypes::VisibilityKind visibility,
in boolean is_specification,
in boolean is_root,
in boolean is_leaf,
in boolean is_abstract,
in DataTypes::Geometry icon,
in DataTypes::Name base_class)
raises (Reflective::MofError);
};
interface Stereotype : StereotypeClass, Core::GeneralizableElement
{
DataTypes::Geometry icon ()
raises (Reflective::MofError);
void set_icon (in DataTypes::Geometry new_value)
raises (Reflective::MofError);
DataTypes::Name base_class ()
raises (Reflective::MofError);
5-52
OMG-UML V1.3
March 2000
5
void set_base_class (in DataTypes::Name new_value)
raises (Reflective::MofError);
TaggedValueSet required_tag ()
raises (Reflective::MofError);
void set_required_tag (in TaggedValueSet new_value)
raises (Reflective::MofError);
void add_required_tag (in TaggedValue new_element)
raises (Reflective::MofError);
void modify_required_tag (
in TaggedValue old_element,
in TaggedValue new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_required_tag (in TaggedValue old_element)
raises (Reflective::NotFound, Reflective::MofError);
Core::ModelElementSet extended_element ()
raises (Reflective::MofError);
void set_extended_element (in Core::ModelElementSet new_value)
raises (Reflective::MofError);
void add_extended_element (in Core::ModelElement new_element)
raises (Reflective::MofError);
void modify_extended_element (
in Core::ModelElement old_element,
in Core::ModelElement new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_extended_element (in Core::ModelElement old_element)
raises (Reflective::NotFound, Reflective::MofError);
Core::UmlConstraintSet stereotype_constraint ()
raises (Reflective::MofError);
void set_stereotype_constraint (in Core::UmlConstraintSet new_value)
raises (Reflective::MofError);
void add_stereotype_constraint (in Core::UmlConstraint new_element)
raises (Reflective::MofError);
void modify_stereotype_constraint (
in Core::UmlConstraint old_element,
in Core::UmlConstraint new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_stereotype_constraint (in Core::UmlConstraint old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface Stereotype
interface TaggedValueClass : Reflective::RefObject
{
readonly attribute TaggedValueSet all_of_type_tagged_value;
readonly attribute TaggedValueSet all_of_class_tagged_value;
TaggedValue create_tagged_value (
in DataTypes::Name tag,
in string uml_value)
raises (Reflective::MofError);
};
interface TaggedValue : TaggedValueClass
{
DataTypes::Name tag ()
raises (Reflective::MofError);
void set_tag (in DataTypes::Name new_value)
OMG-UML V1.3
IDL Modules
March 2000
5-53
5
raises (Reflective::MofError);
string uml_value ()
raises (Reflective::MofError);
void set_uml_value (in string new_value)
raises (Reflective::MofError);
ExtensionMechanisms::Stereotype stereotype ()
raises (Reflective::NotSet, Reflective::MofError);
void set_stereotype (in ExtensionMechanisms::Stereotype new_value)
raises (Reflective::MofError);
void unset_stereotype ()
raises (Reflective::MofError);
Core::ModelElement model_element ()
raises (Reflective::NotSet, Reflective::MofError);
void set_model_element (in Core::ModelElement new_value)
raises (Reflective::MofError);
void unset_model_element ()
raises (Reflective::MofError);
}; // end of interface TaggedValue
struct ARequiredTagStereotypeLink
{
TaggedValue required_tag;
ExtensionMechanisms::Stereotype stereotype;
};
typedef sequence<ARequiredTagStereotypeLink> ARequiredTagStereotypeLinkSet;
interface ARequiredTagStereotype : Reflective::RefAssociation
{
ARequiredTagStereotypeLinkSet all_a_required_tag_stereotype_links()
raises (Reflective::MofError);
boolean exists (
in TaggedValue required_tag,
in ExtensionMechanisms::Stereotype stereotype)
raises (Reflective::MofError);
TaggedValueSet required_tag (in ExtensionMechanisms::Stereotype stereotype)
raises (Reflective::MofError);
ExtensionMechanisms::Stereotype stereotype (in TaggedValue required_tag)
raises (Reflective::MofError);
void add (
in TaggedValue required_tag,
in ExtensionMechanisms::Stereotype stereotype)
raises (Reflective::MofError);
void modify_required_tag (
in TaggedValue required_tag,
in ExtensionMechanisms::Stereotype stereotype,
in TaggedValue new_required_tag)
raises (Reflective::NotFound, Reflective::MofError);
void modify_stereotype (
in TaggedValue required_tag,
in ExtensionMechanisms::Stereotype stereotype,
in ExtensionMechanisms::Stereotype new_stereotype)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in TaggedValue required_tag,
in ExtensionMechanisms::Stereotype stereotype)
5-54
OMG-UML V1.3
March 2000
5
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ARequiredTagStereotype
struct AStereotypeExtendedElementLink
{
ExtensionMechanisms::Stereotype stereotype;
Core::ModelElement extended_element;
};
typedef sequence<AStereotypeExtendedElementLink> AStereotypeExtendedElementLinkSet;
interface AStereotypeExtendedElement : Reflective::RefAssociation
{
AStereotypeExtendedElementLinkSet all_a_stereotype_extended_element_links()
raises (Reflective::MofError);
boolean exists (
in ExtensionMechanisms::Stereotype stereotype,
in Core::ModelElement extended_element)
raises (Reflective::MofError);
ExtensionMechanisms::Stereotype stereotype (in Core::ModelElement extended_element)
raises (Reflective::MofError);
Core::ModelElementSet extended_element (in ExtensionMechanisms::Stereotype stereotype)
raises (Reflective::MofError);
void add (
in ExtensionMechanisms::Stereotype stereotype,
in Core::ModelElement extended_element)
raises (Reflective::MofError);
void modify_stereotype (
in ExtensionMechanisms::Stereotype stereotype,
in Core::ModelElement extended_element,
in ExtensionMechanisms::Stereotype new_stereotype)
raises (Reflective::NotFound, Reflective::MofError);
void modify_extended_element (
in ExtensionMechanisms::Stereotype stereotype,
in Core::ModelElement extended_element,
in Core::ModelElement new_extended_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in ExtensionMechanisms::Stereotype stereotype,
in Core::ModelElement extended_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AStereotypeExtendedElement
struct AConstrainedElement2StereotypeConstraintLink
{
Stereotype constrained_element2;
Core::UmlConstraint stereotype_constraint;
};
typedef sequence<AConstrainedElement2StereotypeConstraintLink>
AConstrainedElement2StereotypeConstraintLinkSet;
interface AConstrainedElement2StereotypeConstraint : Reflective::RefAssociation
{
AConstrainedElement2StereotypeConstraintLinkSet
all_a_constrained_element2_stereotype_constraint_links()
raises (Reflective::MofError);
OMG-UML V1.3
IDL Modules
March 2000
5-55
5
boolean exists (
in Stereotype constrained_element2,
in Core::UmlConstraint stereotype_constraint)
raises (Reflective::MofError);
Stereotype constrained_element2 (in Core::UmlConstraint stereotype_constraint)
raises (Reflective::MofError);
Core::UmlConstraintSet stereotype_constraint (in Stereotype constrained_element2)
raises (Reflective::MofError);
void add (
in Stereotype constrained_element2,
in Core::UmlConstraint stereotype_constraint)
raises (Reflective::MofError);
void modify_constrained_element2 (
in Stereotype constrained_element2,
in Core::UmlConstraint stereotype_constraint,
in Stereotype new_constrained_element2)
raises (Reflective::NotFound, Reflective::MofError);
void modify_stereotype_constraint (
in Stereotype constrained_element2,
in Core::UmlConstraint stereotype_constraint,
in Core::UmlConstraint new_stereotype_constraint)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Stereotype constrained_element2,
in Core::UmlConstraint stereotype_constraint)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AConstrainedElement2StereotypeConstraint
struct AModelElementTaggedValueLink
{
Core::ModelElement model_element;
TaggedValue tagged_value;
};
typedef sequence<AModelElementTaggedValueLink> AModelElementTaggedValueLinkSet;
interface AModelElementTaggedValue : Reflective::RefAssociation
{
AModelElementTaggedValueLinkSet all_a_model_element_tagged_value_links()
raises (Reflective::MofError);
boolean exists (
in Core::ModelElement model_element,
in TaggedValue tagged_value)
raises (Reflective::MofError);
Core::ModelElement model_element (in TaggedValue tagged_value)
raises (Reflective::MofError);
TaggedValueSet tagged_value (in Core::ModelElement model_element)
raises (Reflective::MofError);
void add (
in Core::ModelElement model_element,
in TaggedValue tagged_value)
raises (Reflective::MofError);
void modify_model_element (
in Core::ModelElement model_element,
in TaggedValue tagged_value,
in Core::ModelElement new_model_element)
5-56
OMG-UML V1.3
March 2000
5
raises (Reflective::NotFound, Reflective::MofError);
void modify_tagged_value (
in Core::ModelElement model_element,
in TaggedValue tagged_value,
in TaggedValue new_tagged_value)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Core::ModelElement model_element,
in TaggedValue tagged_value)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AModelElementTaggedValue
interface ExtensionMechanismsPackage : Reflective::RefPackage
{
readonly attribute StereotypeClass stereotype_ref;
readonly attribute TaggedValueClass tagged_value_ref;
readonly attribute ARequiredTagStereotype a_required_tag_stereotype_ref;
readonly attribute AStereotypeExtendedElement a_stereotype_extended_element_ref;
readonly attribute AConstrainedElement2StereotypeConstraint
a_constrained_element2_stereotype_constraint_ref;
readonly attribute AModelElementTaggedValue a_model_element_tagged_value_ref;
};
}; // end of module ExtensionMechanisms
interface FoundationPackageFactory
{
FoundationPackage create_foundation_package ()
raises (Reflective::MofError);
};
interface FoundationPackage : Reflective::RefPackage
{
readonly attribute DataTypes::DataTypesPackage data_types_ref;
readonly attribute Core::CorePackage core_ref;
readonly attribute ExtensionMechanisms::ExtensionMechanismsPackage extension_mechanisms_ref;
};
};
5.4.3 BehavioralElements
#pragma prefix "org.omg.Uml"
#include "Reflective.idl"
#include "Foundation.idl"
module BehavioralElements
{
typedef sequence<Foundation::Core::Classifier> ClassifierSet;
typedef sequence<Foundation::Core::ModelElement> ModelElementSet;
typedef sequence<Foundation::Core::BehavioralFeature> BehavioralFeatureSet;
typedef sequence<Foundation::Core::Feature> FeatureSet;
typedef sequence<Foundation::Core::Parameter> ParameterSet;
typedef sequence<Foundation::Core::Parameter> ParameterUList;
typedef sequence<Foundation::Core::UmlAttribute> UmlAttributeSet;
interface BehavioralElementsPackage;
OMG-UML V1.3
IDL Modules
March 2000
5-57
5
module CommonBehavior
{
interface InstanceClass;
interface Instance;
typedef sequence<Instance> InstanceSet;
interface SignalClass;
interface Signal;
typedef sequence<Signal> SignalSet;
interface CreateActionClass;
interface CreateAction;
typedef sequence<CreateAction> CreateActionSet;
interface DestroyActionClass;
interface DestroyAction;
typedef sequence<DestroyAction> DestroyActionSet;
interface UninterpretedActionClass;
interface UninterpretedAction;
typedef sequence<UninterpretedAction> UninterpretedActionSet;
interface ActionClass;
interface Action;
typedef sequence<Action> ActionSet;
typedef sequence<Action> ActionUList;
interface AttributeLinkClass;
interface AttributeLink;
typedef sequence<AttributeLink> AttributeLinkSet;
interface LinkObjectClass;
interface LinkObject;
typedef sequence<LinkObject> LinkObjectSet;
interface UmlObjectClass;
interface UmlObject;
typedef sequence<UmlObject> UmlObjectSet;
interface DataValueClass;
interface DataValue;
typedef sequence<DataValue> DataValueSet;
interface CallActionClass;
interface CallAction;
typedef sequence<CallAction> CallActionSet;
interface SendActionClass;
interface SendAction;
typedef sequence<SendAction> SendActionSet;
interface ActionSequenceClass;
interface ActionSequence;
typedef sequence<ActionSequence> ActionSequenceSet;
interface ArgumentClass;
interface Argument;
typedef sequence<Argument> ArgumentSet;
typedef sequence<Argument> ArgumentUList;
interface ReceptionClass;
interface Reception;
typedef sequence<Reception> ReceptionSet;
interface LinkClass;
interface Link;
typedef sequence<Link> LinkSet;
interface LinkEndClass;
interface LinkEnd;
5-58
OMG-UML V1.3
March 2000
5
typedef sequence<LinkEnd> LinkEndSet;
interface ReturnActionClass;
interface ReturnAction;
typedef sequence<ReturnAction> ReturnActionSet;
interface TerminateActionClass;
interface TerminateAction;
typedef sequence<TerminateAction> TerminateActionSet;
interface StimulusClass;
interface Stimulus;
typedef sequence<Stimulus> StimulusSet;
interface UmlExceptionClass;
interface UmlException;
typedef sequence<UmlException> UmlExceptionSet;
interface ComponentInstanceClass;
interface ComponentInstance;
typedef sequence<ComponentInstance> ComponentInstanceSet;
interface NodeInstanceClass;
interface NodeInstance;
typedef sequence<NodeInstance> NodeInstanceSet;
interface CommonBehaviorPackage;
interface InstanceClass : Foundation::Core::ModelElementClass
{
readonly attribute InstanceSet all_of_type_instance;
readonly attribute InstanceSet all_of_class_instance;
Instance create_instance (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification)
raises (Reflective::MofError);
};
interface Instance : InstanceClass, Foundation::Core::ModelElement
{
ClassifierSet classifier ()
raises (Reflective::MofError);
void set_classifier (in ClassifierSet new_value)
raises (Reflective::MofError);
void add_classifier (in Foundation::Core::Classifier new_element)
raises (Reflective::MofError);
void modify_classifier (
in Foundation::Core::Classifier old_element,
in Foundation::Core::Classifier new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_classifier (in Foundation::Core::Classifier old_element)
raises (Reflective::NotFound, Reflective::MofError);
AttributeLinkSet attribute_link ()
raises (Reflective::MofError);
void set_attribute_link (in AttributeLinkSet new_value)
raises (Reflective::MofError);
void add_attribute_link (in AttributeLink new_element)
raises (Reflective::MofError);
void modify_attribute_link (
in AttributeLink old_element,
in AttributeLink new_element)
OMG-UML V1.3
IDL Modules
March 2000
5-59
5
raises (Reflective::NotFound, Reflective::MofError);
void remove_attribute_link (in AttributeLink old_element)
raises (Reflective::NotFound, Reflective::MofError);
LinkEndSet link_end ()
raises (Reflective::MofError);
void set_link_end (in LinkEndSet new_value)
raises (Reflective::MofError);
void add_link_end (in LinkEnd new_element)
raises (Reflective::MofError);
void modify_link_end (
in LinkEnd old_element,
in LinkEnd new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_link_end (in LinkEnd old_element)
raises (Reflective::NotFound, Reflective::MofError);
AttributeLinkSet slot ()
raises (Reflective::MofError);
void set_slot (in AttributeLinkSet new_value)
raises (Reflective::MofError);
void unset_slot ()
raises (Reflective::MofError);
void add_slot (in AttributeLink new_element)
raises (Reflective::MofError);
void modify_slot (
in AttributeLink old_element,
in AttributeLink new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_slot (in AttributeLink old_element)
raises (Reflective::NotFound, Reflective::MofError);
StimulusSet stimulus1 ()
raises (Reflective::MofError);
void set_stimulus1 (in StimulusSet new_value)
raises (Reflective::MofError);
void add_stimulus1 (in Stimulus new_element)
raises (Reflective::MofError);
void modify_stimulus1 (
in Stimulus old_element,
in Stimulus new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_stimulus1 (in Stimulus old_element)
raises (Reflective::NotFound, Reflective::MofError);
StimulusSet stimulus3 ()
raises (Reflective::MofError);
void set_stimulus3 (in StimulusSet new_value)
raises (Reflective::MofError);
void add_stimulus3 (in Stimulus new_element)
raises (Reflective::MofError);
void modify_stimulus3 (
in Stimulus old_element,
in Stimulus new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_stimulus3 (in Stimulus old_element)
raises (Reflective::NotFound, Reflective::MofError);
ComponentInstance component_instance ()
raises (Reflective::NotSet, Reflective::MofError);
5-60
OMG-UML V1.3
March 2000
5
void set_component_instance (in ComponentInstance new_value)
raises (Reflective::MofError);
void unset_component_instance ()
raises (Reflective::MofError);
StimulusSet stimulus2 ()
raises (Reflective::MofError);
void set_stimulus2 (in StimulusSet new_value)
raises (Reflective::MofError);
void add_stimulus2 (in Stimulus new_element)
raises (Reflective::MofError);
void modify_stimulus2 (
in Stimulus old_element,
in Stimulus new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_stimulus2 (in Stimulus old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface Instance
interface SignalClass : Foundation::Core::ClassifierClass
{
readonly attribute SignalSet all_of_type_signal;
readonly attribute SignalSet all_of_class_signal;
Signal create_signal (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in boolean is_root,
in boolean is_leaf,
in boolean is_abstract)
raises (Reflective::MofError);
};
interface Signal : SignalClass, Foundation::Core::Classifier
{
ReceptionSet reception ()
raises (Reflective::MofError);
void set_reception (in ReceptionSet new_value)
raises (Reflective::MofError);
void unset_reception ()
raises (Reflective::MofError);
void add_reception (in CommonBehavior::Reception new_element)
raises (Reflective::MofError);
void modify_reception (
in CommonBehavior::Reception old_element,
in CommonBehavior::Reception new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_reception (in CommonBehavior::Reception old_element)
raises (Reflective::NotFound, Reflective::MofError);
BehavioralFeatureSet uml_context ()
raises (Reflective::MofError);
void set_uml_context (in BehavioralFeatureSet new_value)
raises (Reflective::MofError);
void add_uml_context (in Foundation::Core::BehavioralFeature new_element)
raises (Reflective::MofError);
void modify_uml_context (
OMG-UML V1.3
IDL Modules
March 2000
5-61
5
in Foundation::Core::BehavioralFeature old_element,
in Foundation::Core::BehavioralFeature new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_uml_context (in Foundation::Core::BehavioralFeature old_element)
raises (Reflective::NotFound, Reflective::MofError);
SendActionSet send_action ()
raises (Reflective::MofError);
void set_send_action (in SendActionSet new_value)
raises (Reflective::MofError);
void add_send_action (in SendAction new_element)
raises (Reflective::MofError);
void modify_send_action (
in SendAction old_element,
in SendAction new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_send_action (in SendAction old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface Signal
interface ActionClass : Foundation::Core::ModelElementClass
{
readonly attribute ActionSet all_of_type_action;
readonly attribute ActionSet all_of_class_action;
Action create_action (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in Foundation::DataTypes::IterationExpression recurrence,
in Foundation::DataTypes::ObjectSetExpression target,
in boolean is_asynchronous,
in Foundation::DataTypes::ActionExpression script)
raises (Reflective::MofError);
};
interface Action : ActionClass, Foundation::Core::ModelElement
{
Foundation::DataTypes::IterationExpression recurrence ()
raises (Reflective::MofError);
void set_recurrence (in Foundation::DataTypes::IterationExpression new_value)
raises (Reflective::MofError);
Foundation::DataTypes::ObjectSetExpression target ()
raises (Reflective::MofError);
void set_target (in Foundation::DataTypes::ObjectSetExpression new_value)
raises (Reflective::MofError);
boolean is_asynchronous ()
raises (Reflective::MofError);
void set_is_asynchronous (in boolean new_value)
raises (Reflective::MofError);
Foundation::DataTypes::ActionExpression script ()
raises (Reflective::MofError);
void set_script (in Foundation::DataTypes::ActionExpression new_value)
raises (Reflective::MofError);
ArgumentUList actual_argument ()
raises (Reflective::MofError);
void set_actual_argument (in ArgumentUList new_value)
5-62
OMG-UML V1.3
March 2000
5
raises (Reflective::MofError);
void add_actual_argument (in Argument new_element)
raises (Reflective::MofError);
void add_actual_argument_before (
in Argument new_element,
in Argument before_element)
raises (Reflective::NotFound, Reflective::MofError);
void modify_actual_argument (
in Argument old_element,
in Argument new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_actual_argument (in Argument old_element)
raises (Reflective::NotFound, Reflective::MofError);
ActionSequence action_sequence ()
raises (Reflective::NotSet, Reflective::MofError);
void set_action_sequence (in ActionSequence new_value)
raises (Reflective::MofError);
void unset_action_sequence ()
raises (Reflective::MofError);
StimulusSet stimulus ()
raises (Reflective::MofError);
void set_stimulus (in StimulusSet new_value)
raises (Reflective::MofError);
void add_stimulus (in CommonBehavior::Stimulus new_element)
raises (Reflective::MofError);
void modify_stimulus (
in CommonBehavior::Stimulus old_element,
in CommonBehavior::Stimulus new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_stimulus (in CommonBehavior::Stimulus old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface Action
interface CreateActionClass : ActionClass
{
readonly attribute CreateActionSet all_of_type_create_action;
readonly attribute CreateActionSet all_of_class_create_action;
CreateAction create_create_action (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in Foundation::DataTypes::IterationExpression recurrence,
in Foundation::DataTypes::ObjectSetExpression target,
in boolean is_asynchronous,
in Foundation::DataTypes::ActionExpression script)
raises (Reflective::MofError);
};
interface CreateAction : CreateActionClass, Action
{
Foundation::Core::Classifier instantiation ()
raises (Reflective::MofError);
void set_instantiation (in Foundation::Core::Classifier new_value)
raises (Reflective::MofError);
}; // end of interface CreateAction
OMG-UML V1.3
IDL Modules
March 2000
5-63
5
interface DestroyActionClass : ActionClass
{
readonly attribute DestroyActionSet all_of_type_destroy_action;
readonly attribute DestroyActionSet all_of_class_destroy_action;
DestroyAction create_destroy_action (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in Foundation::DataTypes::IterationExpression recurrence,
in Foundation::DataTypes::ObjectSetExpression target,
in boolean is_asynchronous,
in Foundation::DataTypes::ActionExpression script)
raises (Reflective::MofError);
};
interface DestroyAction : DestroyActionClass, Action
{
}; // end of interface DestroyAction
interface UninterpretedActionClass : ActionClass
{
readonly attribute UninterpretedActionSet all_of_type_uninterpreted_action;
readonly attribute UninterpretedActionSet all_of_class_uninterpreted_action;
UninterpretedAction create_uninterpreted_action (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in Foundation::DataTypes::IterationExpression recurrence,
in Foundation::DataTypes::ObjectSetExpression target,
in boolean is_asynchronous,
in Foundation::DataTypes::ActionExpression script)
raises (Reflective::MofError);
};
interface UninterpretedAction : UninterpretedActionClass, Action
{
}; // end of interface UninterpretedAction
interface AttributeLinkClass : Foundation::Core::ModelElementClass
{
readonly attribute AttributeLinkSet all_of_type_attribute_link;
readonly attribute AttributeLinkSet all_of_class_attribute_link;
AttributeLink create_attribute_link (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification)
raises (Reflective::MofError);
};
interface AttributeLink : AttributeLinkClass, Foundation::Core::ModelElement
{
Foundation::Core::UmlAttribute uml_attribute ()
raises (Reflective::MofError);
void set_uml_attribute (in Foundation::Core::UmlAttribute new_value)
5-64
OMG-UML V1.3
March 2000
5
raises (Reflective::MofError);
CommonBehavior::Instance uml_value ()
raises (Reflective::MofError);
void set_uml_value (in CommonBehavior::Instance new_value)
raises (Reflective::MofError);
CommonBehavior::Instance instance ()
raises (Reflective::MofError);
void set_instance (in CommonBehavior::Instance new_value)
raises (Reflective::MofError);
LinkEnd link_end ()
raises (Reflective::NotSet, Reflective::MofError);
void set_link_end (in LinkEnd new_value)
raises (Reflective::MofError);
void unset_link_end ()
raises (Reflective::MofError);
}; // end of interface AttributeLink
interface UmlObjectClass : InstanceClass
{
readonly attribute UmlObjectSet all_of_type_uml_object;
readonly attribute UmlObjectSet all_of_class_uml_object;
UmlObject create_uml_object (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification)
raises (Reflective::MofError);
};
interface UmlObject : UmlObjectClass, Instance
{
}; // end of interface UmlObject
interface LinkClass : Foundation::Core::ModelElementClass
{
readonly attribute LinkSet all_of_type_link;
readonly attribute LinkSet all_of_class_link;
Link create_link (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification)
raises (Reflective::MofError);
};
interface Link : LinkClass, Foundation::Core::ModelElement
{
Foundation::Core::Association association ()
raises (Reflective::MofError);
void set_association (in Foundation::Core::Association new_value)
raises (Reflective::MofError);
LinkEndSet connection ()
raises (Reflective::MofError);
void set_connection (in LinkEndSet new_value)
raises (Reflective::MofError);
void add_connection (in LinkEnd new_element)
raises (Reflective::MofError);
OMG-UML V1.3
IDL Modules
March 2000
5-65
5
void modify_connection (
in LinkEnd old_element,
in LinkEnd new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_connection (in LinkEnd old_element)
raises (Reflective::NotFound, Reflective::MofError);
StimulusSet stimulus ()
raises (Reflective::MofError);
void set_stimulus (in StimulusSet new_value)
raises (Reflective::MofError);
void add_stimulus (in CommonBehavior::Stimulus new_element)
raises (Reflective::MofError);
void modify_stimulus (
in CommonBehavior::Stimulus old_element,
in CommonBehavior::Stimulus new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_stimulus (in CommonBehavior::Stimulus old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface Link
interface LinkObjectClass : UmlObjectClass, LinkClass
{
readonly attribute LinkObjectSet all_of_type_link_object;
readonly attribute LinkObjectSet all_of_class_link_object;
LinkObject create_link_object (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification)
raises (Reflective::MofError);
};
interface LinkObject : LinkObjectClass, UmlObject, Link
{
}; // end of interface LinkObject
interface DataValueClass : InstanceClass
{
readonly attribute DataValueSet all_of_type_data_value;
readonly attribute DataValueSet all_of_class_data_value;
DataValue create_data_value (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification)
raises (Reflective::MofError);
};
interface DataValue : DataValueClass, Instance
{
}; // end of interface DataValue
interface CallActionClass : ActionClass
{
readonly attribute CallActionSet all_of_type_call_action;
readonly attribute CallActionSet all_of_class_call_action;
CallAction create_call_action (
5-66
OMG-UML V1.3
March 2000
5
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in Foundation::DataTypes::IterationExpression recurrence,
in Foundation::DataTypes::ObjectSetExpression target,
in boolean is_asynchronous,
in Foundation::DataTypes::ActionExpression script)
raises (Reflective::MofError);
};
interface CallAction : CallActionClass, Action
{
Foundation::Core::Operation operation ()
raises (Reflective::MofError);
void set_operation (in Foundation::Core::Operation new_value)
raises (Reflective::MofError);
}; // end of interface CallAction
interface SendActionClass : ActionClass
{
readonly attribute SendActionSet all_of_type_send_action;
readonly attribute SendActionSet all_of_class_send_action;
SendAction create_send_action (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in Foundation::DataTypes::IterationExpression recurrence,
in Foundation::DataTypes::ObjectSetExpression target,
in boolean is_asynchronous,
in Foundation::DataTypes::ActionExpression script)
raises (Reflective::MofError);
};
interface SendAction : SendActionClass, Action
{
CommonBehavior::Signal signal ()
raises (Reflective::MofError);
void set_signal (in CommonBehavior::Signal new_value)
raises (Reflective::MofError);
}; // end of interface SendAction
interface ActionSequenceClass : CommonBehavior::ActionClass
{
readonly attribute ActionSequenceSet all_of_type_action_sequence;
readonly attribute ActionSequenceSet all_of_class_action_sequence;
ActionSequence create_action_sequence (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in Foundation::DataTypes::IterationExpression recurrence,
in Foundation::DataTypes::ObjectSetExpression target,
in boolean is_asynchronous,
in Foundation::DataTypes::ActionExpression script)
raises (Reflective::MofError);
};
OMG-UML V1.3
IDL Modules
March 2000
5-67
5
interface ActionSequence : ActionSequenceClass, CommonBehavior::Action
{
ActionUList action ()
raises (Reflective::MofError);
void set_action (in ActionUList new_value)
raises (Reflective::MofError);
void unset_action ()
raises (Reflective::MofError);
void add_action (in CommonBehavior::Action new_element)
raises (Reflective::MofError);
void add_action_before (
in CommonBehavior::Action new_element,
in CommonBehavior::Action before_element)
raises (Reflective::NotFound, Reflective::MofError);
void modify_action (
in CommonBehavior::Action old_element,
in CommonBehavior::Action new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_action (in CommonBehavior::Action old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ActionSequence
interface ArgumentClass : Foundation::Core::ModelElementClass
{
readonly attribute ArgumentSet all_of_type_argument;
readonly attribute ArgumentSet all_of_class_argument;
Argument create_argument (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in Foundation::DataTypes::Expression uml_value)
raises (Reflective::MofError);
};
interface Argument : ArgumentClass, Foundation::Core::ModelElement
{
Foundation::DataTypes::Expression uml_value ()
raises (Reflective::MofError);
void set_uml_value (in Foundation::DataTypes::Expression new_value)
raises (Reflective::MofError);
CommonBehavior::Action action ()
raises (Reflective::NotSet, Reflective::MofError);
void set_action (in CommonBehavior::Action new_value)
raises (Reflective::MofError);
void unset_action ()
raises (Reflective::MofError);
}; // end of interface Argument
interface ReceptionClass : Foundation::Core::BehavioralFeatureClass
{
readonly attribute ReceptionSet all_of_type_reception;
readonly attribute ReceptionSet all_of_class_reception;
Reception create_reception (
in Foundation::DataTypes::Name name,
5-68
OMG-UML V1.3
March 2000
5
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in Foundation::DataTypes::ScopeKind owner_scope,
in boolean is_query,
in string specification,
in boolean is_root,
in boolean is_leaf,
in boolean is_abstract)
raises (Reflective::MofError);
};
interface Reception : ReceptionClass, Foundation::Core::BehavioralFeature
{
string specification ()
raises (Reflective::MofError);
void set_specification (in string new_value)
raises (Reflective::MofError);
boolean is_root ()
raises (Reflective::MofError);
void set_is_root (in boolean new_value)
raises (Reflective::MofError);
boolean is_leaf ()
raises (Reflective::MofError);
void set_is_leaf (in boolean new_value)
raises (Reflective::MofError);
boolean is_abstract ()
raises (Reflective::MofError);
void set_is_abstract (in boolean new_value)
raises (Reflective::MofError);
CommonBehavior::Signal signal ()
raises (Reflective::MofError);
void set_signal (in CommonBehavior::Signal new_value)
raises (Reflective::MofError);
}; // end of interface Reception
interface LinkEndClass : Foundation::Core::ModelElementClass
{
readonly attribute LinkEndSet all_of_type_link_end;
readonly attribute LinkEndSet all_of_class_link_end;
LinkEnd create_link_end (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification)
raises (Reflective::MofError);
};
interface LinkEnd : LinkEndClass, Foundation::Core::ModelElement
{
CommonBehavior::Instance instance ()
raises (Reflective::MofError);
void set_instance (in CommonBehavior::Instance new_value)
raises (Reflective::MofError);
CommonBehavior::Link link ()
raises (Reflective::MofError);
void set_link (in CommonBehavior::Link new_value)
OMG-UML V1.3
IDL Modules
March 2000
5-69
5
raises (Reflective::MofError);
Foundation::Core::AssociationEnd association_end ()
raises (Reflective::MofError);
void set_association_end (in Foundation::Core::AssociationEnd new_value)
raises (Reflective::MofError);
AttributeLinkSet qualified_value ()
raises (Reflective::MofError);
void set_qualified_value (in AttributeLinkSet new_value)
raises (Reflective::MofError);
void unset_qualified_value ()
raises (Reflective::MofError);
void add_qualified_value (in AttributeLink new_element)
raises (Reflective::MofError);
void modify_qualified_value (
in AttributeLink old_element,
in AttributeLink new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_qualified_value (in AttributeLink old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface LinkEnd
interface ReturnActionClass : ActionClass
{
readonly attribute ReturnActionSet all_of_type_return_action;
readonly attribute ReturnActionSet all_of_class_return_action;
ReturnAction create_return_action (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in Foundation::DataTypes::IterationExpression recurrence,
in Foundation::DataTypes::ObjectSetExpression target,
in boolean is_asynchronous,
in Foundation::DataTypes::ActionExpression script)
raises (Reflective::MofError);
};
interface ReturnAction : ReturnActionClass, Action
{
}; // end of interface ReturnAction
interface TerminateActionClass : ActionClass
{
readonly attribute TerminateActionSet all_of_type_terminate_action;
readonly attribute TerminateActionSet all_of_class_terminate_action;
TerminateAction create_terminate_action (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in Foundation::DataTypes::IterationExpression recurrence,
in Foundation::DataTypes::ObjectSetExpression target,
in boolean is_asynchronous,
in Foundation::DataTypes::ActionExpression script)
raises (Reflective::MofError);
};
5-70
OMG-UML V1.3
March 2000
5
interface TerminateAction : TerminateActionClass, Action
{
}; // end of interface TerminateAction
interface StimulusClass : Foundation::Core::ModelElementClass
{
readonly attribute StimulusSet all_of_type_stimulus;
readonly attribute StimulusSet all_of_class_stimulus;
Stimulus create_stimulus (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification)
raises (Reflective::MofError);
};
interface Stimulus : StimulusClass, Foundation::Core::ModelElement
{
InstanceSet argument ()
raises (Reflective::MofError);
void set_argument (in InstanceSet new_value)
raises (Reflective::MofError);
void add_argument (in Instance new_element)
raises (Reflective::MofError);
void modify_argument (
in Instance old_element,
in Instance new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_argument (in Instance old_element)
raises (Reflective::NotFound, Reflective::MofError);
Instance sender ()
raises (Reflective::MofError);
void set_sender (in Instance new_value)
raises (Reflective::MofError);
Instance receiver ()
raises (Reflective::MofError);
void set_receiver (in Instance new_value)
raises (Reflective::MofError);
Link communication_link ()
raises (Reflective::NotSet, Reflective::MofError);
void set_communication_link (in Link new_value)
raises (Reflective::MofError);
void unset_communication_link ()
raises (Reflective::MofError);
Action dispatch_action ()
raises (Reflective::MofError);
void set_dispatch_action (in Action new_value)
raises (Reflective::MofError);
}; // end of interface Stimulus
interface UmlExceptionClass : SignalClass
{
readonly attribute UmlExceptionSet all_of_type_uml_exception;
readonly attribute UmlExceptionSet all_of_class_uml_exception;
UmlException create_uml_exception (
in Foundation::DataTypes::Name name,
OMG-UML V1.3
IDL Modules
March 2000
5-71
5
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in boolean is_root,
in boolean is_leaf,
in boolean is_abstract)
raises (Reflective::MofError);
};
interface UmlException : UmlExceptionClass, Signal
{
}; // end of interface UmlException
interface ComponentInstanceClass : InstanceClass
{
readonly attribute ComponentInstanceSet all_of_type_component_instance;
readonly attribute ComponentInstanceSet all_of_class_component_instance;
ComponentInstance create_component_instance (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification)
raises (Reflective::MofError);
};
interface ComponentInstance : ComponentInstanceClass, Instance
{
NodeInstance node_instance ()
raises (Reflective::NotSet, Reflective::MofError);
void set_node_instance (in NodeInstance new_value)
raises (Reflective::MofError);
void unset_node_instance ()
raises (Reflective::MofError);
InstanceSet resident ()
raises (Reflective::MofError);
void set_resident (in InstanceSet new_value)
raises (Reflective::MofError);
void add_resident (in Instance new_element)
raises (Reflective::MofError);
void modify_resident (
in Instance old_element,
in Instance new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_resident (in Instance old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ComponentInstance
interface NodeInstanceClass : InstanceClass
{
readonly attribute NodeInstanceSet all_of_type_node_instance;
readonly attribute NodeInstanceSet all_of_class_node_instance;
NodeInstance create_node_instance (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification)
raises (Reflective::MofError);
};
5-72
OMG-UML V1.3
March 2000
5
interface NodeInstance : NodeInstanceClass, Instance
{
ComponentInstanceSet resident ()
raises (Reflective::MofError);
void set_resident (in ComponentInstanceSet new_value)
raises (Reflective::MofError);
void add_resident (in ComponentInstance new_element)
raises (Reflective::MofError);
void modify_resident (
in ComponentInstance old_element,
in ComponentInstance new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_resident (in ComponentInstance old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface NodeInstance
struct AInstanceClassifierLink
{
CommonBehavior::Instance instance;
Foundation::Core::Classifier classifier;
};
typedef sequence<AInstanceClassifierLink> AInstanceClassifierLinkSet;
interface AInstanceClassifier : Reflective::RefAssociation
{
AInstanceClassifierLinkSet all_a_instance_classifier_links()
raises (Reflective::MofError);
boolean exists (
in CommonBehavior::Instance instance,
in Foundation::Core::Classifier classifier)
raises (Reflective::MofError);
InstanceSet instance (in Foundation::Core::Classifier classifier)
raises (Reflective::MofError);
ClassifierSet classifier (in CommonBehavior::Instance instance)
raises (Reflective::MofError);
void add (
in CommonBehavior::Instance instance,
in Foundation::Core::Classifier classifier)
raises (Reflective::MofError);
void modify_instance (
in CommonBehavior::Instance instance,
in Foundation::Core::Classifier classifier,
in CommonBehavior::Instance new_instance)
raises (Reflective::NotFound, Reflective::MofError);
void modify_classifier (
in CommonBehavior::Instance instance,
in Foundation::Core::Classifier classifier,
in Foundation::Core::Classifier new_classifier)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in CommonBehavior::Instance instance,
in Foundation::Core::Classifier classifier)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AInstanceClassifier
OMG-UML V1.3
IDL Modules
March 2000
5-73
5
struct AActualArgumentActionLink
{
Argument actual_argument;
CommonBehavior::Action action;
};
typedef sequence<AActualArgumentActionLink> AActualArgumentActionLinkSet;
interface AActualArgumentAction : Reflective::RefAssociation
{
AActualArgumentActionLinkSet all_a_actual_argument_action_links()
raises (Reflective::MofError);
boolean exists (
in Argument actual_argument,
in CommonBehavior::Action action)
raises (Reflective::MofError);
ArgumentUList actual_argument (in CommonBehavior::Action action)
raises (Reflective::MofError);
CommonBehavior::Action action (in Argument actual_argument)
raises (Reflective::MofError);
void add (
in Argument actual_argument,
in CommonBehavior::Action action)
raises (Reflective::MofError);
void add_before_actual_argument (
in Argument actual_argument,
in CommonBehavior::Action action,
in Argument before)
raises (Reflective::NotFound, Reflective::MofError);
void modify_actual_argument (
in Argument actual_argument,
in CommonBehavior::Action action,
in Argument new_actual_argument)
raises (Reflective::NotFound, Reflective::MofError);
void modify_action (
in Argument actual_argument,
in CommonBehavior::Action action,
in CommonBehavior::Action new_action)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Argument actual_argument,
in CommonBehavior::Action action)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AActualArgumentAction
struct ACreateActionInstantiationLink
{
CreateAction create_action;
Foundation::Core::Classifier instantiation;
};
typedef sequence<ACreateActionInstantiationLink> ACreateActionInstantiationLinkSet;
interface ACreateActionInstantiation : Reflective::RefAssociation
{
ACreateActionInstantiationLinkSet all_a_create_action_instantiation_links()
5-74
OMG-UML V1.3
March 2000
5
raises (Reflective::MofError);
boolean exists (
in CreateAction create_action,
in Foundation::Core::Classifier instantiation)
raises (Reflective::MofError);
CreateActionSet create_action (in Foundation::Core::Classifier instantiation)
raises (Reflective::MofError);
Foundation::Core::Classifier instantiation (in CreateAction create_action)
raises (Reflective::MofError);
void add (
in CreateAction create_action,
in Foundation::Core::Classifier instantiation)
raises (Reflective::MofError);
void modify_create_action (
in CreateAction create_action,
in Foundation::Core::Classifier instantiation,
in CreateAction new_create_action)
raises (Reflective::NotFound, Reflective::MofError);
void modify_instantiation (
in CreateAction create_action,
in Foundation::Core::Classifier instantiation,
in Foundation::Core::Classifier new_instantiation)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in CreateAction create_action,
in Foundation::Core::Classifier instantiation)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ACreateActionInstantiation
struct AAttributeLinkAttributeLink
{
AttributeLink attribute_link;
Foundation::Core::UmlAttribute uml_attribute;
};
typedef sequence<AAttributeLinkAttributeLink> AAttributeLinkAttributeLinkSet;
interface AAttributeLinkAttribute : Reflective::RefAssociation
{
AAttributeLinkAttributeLinkSet all_a_attribute_link_attribute_links()
raises (Reflective::MofError);
boolean exists (
in AttributeLink attribute_link,
in Foundation::Core::UmlAttribute uml_attribute)
raises (Reflective::MofError);
AttributeLinkSet attribute_link (in Foundation::Core::UmlAttribute uml_attribute)
raises (Reflective::MofError);
Foundation::Core::UmlAttribute uml_attribute (in AttributeLink attribute_link)
raises (Reflective::MofError);
void add (
in AttributeLink attribute_link,
in Foundation::Core::UmlAttribute uml_attribute)
raises (Reflective::MofError);
void modify_attribute_link (
in AttributeLink attribute_link,
in Foundation::Core::UmlAttribute uml_attribute,
OMG-UML V1.3
IDL Modules
March 2000
5-75
5
in AttributeLink new_attribute_link)
raises (Reflective::NotFound, Reflective::MofError);
void modify_uml_attribute (
in AttributeLink attribute_link,
in Foundation::Core::UmlAttribute uml_attribute,
in Foundation::Core::UmlAttribute new_uml_attribute)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in AttributeLink attribute_link,
in Foundation::Core::UmlAttribute uml_attribute)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AAttributeLinkAttribute
struct AAttributeLinkValueLink
{
AttributeLink attribute_link;
Instance uml_value;
};
typedef sequence<AAttributeLinkValueLink> AAttributeLinkValueLinkSet;
interface AAttributeLinkValue : Reflective::RefAssociation
{
AAttributeLinkValueLinkSet all_a_attribute_link_value_links()
raises (Reflective::MofError);
boolean exists (
in AttributeLink attribute_link,
in Instance uml_value)
raises (Reflective::MofError);
AttributeLinkSet attribute_link (in Instance uml_value)
raises (Reflective::MofError);
Instance uml_value (in AttributeLink attribute_link)
raises (Reflective::MofError);
void add (
in AttributeLink attribute_link,
in Instance uml_value)
raises (Reflective::MofError);
void modify_attribute_link (
in AttributeLink attribute_link,
in Instance uml_value,
in AttributeLink new_attribute_link)
raises (Reflective::NotFound, Reflective::MofError);
void modify_uml_value (
in AttributeLink attribute_link,
in Instance uml_value,
in Instance new_uml_value)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in AttributeLink attribute_link,
in Instance uml_value)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AAttributeLinkValue
struct AInstanceLinkEndLink
{
CommonBehavior::Instance instance;
5-76
OMG-UML V1.3
March 2000
5
LinkEnd link_end;
};
typedef sequence<AInstanceLinkEndLink> AInstanceLinkEndLinkSet;
interface AInstanceLinkEnd : Reflective::RefAssociation
{
AInstanceLinkEndLinkSet all_a_instance_link_end_links()
raises (Reflective::MofError);
boolean exists (
in CommonBehavior::Instance instance,
in LinkEnd link_end)
raises (Reflective::MofError);
CommonBehavior::Instance instance (in LinkEnd link_end)
raises (Reflective::MofError);
LinkEndSet link_end (in CommonBehavior::Instance instance)
raises (Reflective::MofError);
void add (
in CommonBehavior::Instance instance,
in LinkEnd link_end)
raises (Reflective::MofError);
void modify_instance (
in CommonBehavior::Instance instance,
in LinkEnd link_end,
in CommonBehavior::Instance new_instance)
raises (Reflective::NotFound, Reflective::MofError);
void modify_link_end (
in CommonBehavior::Instance instance,
in LinkEnd link_end,
in LinkEnd new_link_end)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in CommonBehavior::Instance instance,
in LinkEnd link_end)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AInstanceLinkEnd
struct ASignalReceptionLink
{
CommonBehavior::Signal signal;
CommonBehavior::Reception reception;
};
typedef sequence<ASignalReceptionLink> ASignalReceptionLinkSet;
interface ASignalReception : Reflective::RefAssociation
{
ASignalReceptionLinkSet all_a_signal_reception_links()
raises (Reflective::MofError);
boolean exists (
in CommonBehavior::Signal signal,
in CommonBehavior::Reception reception)
raises (Reflective::MofError);
CommonBehavior::Signal signal (in CommonBehavior::Reception reception)
raises (Reflective::MofError);
ReceptionSet reception (in CommonBehavior::Signal signal)
raises (Reflective::MofError);
OMG-UML V1.3
IDL Modules
March 2000
5-77
5
void add (
in CommonBehavior::Signal signal,
in CommonBehavior::Reception reception)
raises (Reflective::MofError);
void modify_signal (
in CommonBehavior::Signal signal,
in CommonBehavior::Reception reception,
in CommonBehavior::Signal new_signal)
raises (Reflective::NotFound, Reflective::MofError);
void modify_reception (
in CommonBehavior::Signal signal,
in CommonBehavior::Reception reception,
in CommonBehavior::Reception new_reception)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in CommonBehavior::Signal signal,
in CommonBehavior::Reception reception)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ASignalReception
struct ASlotInstanceLink
{
AttributeLink slot;
CommonBehavior::Instance instance;
};
typedef sequence<ASlotInstanceLink> ASlotInstanceLinkSet;
interface ASlotInstance : Reflective::RefAssociation
{
ASlotInstanceLinkSet all_a_slot_instance_links()
raises (Reflective::MofError);
boolean exists (
in AttributeLink slot,
in CommonBehavior::Instance instance)
raises (Reflective::MofError);
AttributeLinkSet slot (in CommonBehavior::Instance instance)
raises (Reflective::MofError);
CommonBehavior::Instance instance (in AttributeLink slot)
raises (Reflective::MofError);
void add (
in AttributeLink slot,
in CommonBehavior::Instance instance)
raises (Reflective::MofError);
void modify_slot (
in AttributeLink slot,
in CommonBehavior::Instance instance,
in AttributeLink new_slot)
raises (Reflective::NotFound, Reflective::MofError);
void modify_instance (
in AttributeLink slot,
in CommonBehavior::Instance instance,
in CommonBehavior::Instance new_instance)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in AttributeLink slot,
5-78
OMG-UML V1.3
March 2000
5
in CommonBehavior::Instance instance)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ASlotInstance
struct AArgumentStimulus1Link
{
Instance argument;
Stimulus stimulus1;
};
typedef sequence<AArgumentStimulus1Link> AArgumentStimulus1LinkSet;
interface AArgumentStimulus1 : Reflective::RefAssociation
{
AArgumentStimulus1LinkSet all_a_argument_stimulus1_links()
raises (Reflective::MofError);
boolean exists (
in Instance argument,
in Stimulus stimulus1)
raises (Reflective::MofError);
InstanceSet argument (in Stimulus stimulus1)
raises (Reflective::MofError);
StimulusSet stimulus1 (in Instance argument)
raises (Reflective::MofError);
void add (
in Instance argument,
in Stimulus stimulus1)
raises (Reflective::MofError);
void modify_argument (
in Instance argument,
in Stimulus stimulus1,
in Instance new_argument)
raises (Reflective::NotFound, Reflective::MofError);
void modify_stimulus1 (
in Instance argument,
in Stimulus stimulus1,
in Stimulus new_stimulus1)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Instance argument,
in Stimulus stimulus1)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AArgumentStimulus1
struct AContextRaisedSignalLink
{
Foundation::Core::BehavioralFeature uml_context;
Signal raised_signal;
};
typedef sequence<AContextRaisedSignalLink> AContextRaisedSignalLinkSet;
interface AContextRaisedSignal : Reflective::RefAssociation
{
AContextRaisedSignalLinkSet all_a_context_raised_signal_links()
raises (Reflective::MofError);
boolean exists (
OMG-UML V1.3
IDL Modules
March 2000
5-79
5
in Foundation::Core::BehavioralFeature uml_context,
in Signal raised_signal)
raises (Reflective::MofError);
BehavioralFeatureSet uml_context (in Signal raised_signal)
raises (Reflective::MofError);
SignalSet raised_signal (in Foundation::Core::BehavioralFeature uml_context)
raises (Reflective::MofError);
void add (
in Foundation::Core::BehavioralFeature uml_context,
in Signal raised_signal)
raises (Reflective::MofError);
void modify_uml_context (
in Foundation::Core::BehavioralFeature uml_context,
in Signal raised_signal,
in Foundation::Core::BehavioralFeature new_uml_context)
raises (Reflective::NotFound, Reflective::MofError);
void modify_raised_signal (
in Foundation::Core::BehavioralFeature uml_context,
in Signal raised_signal,
in Signal new_raised_signal)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Foundation::Core::BehavioralFeature uml_context,
in Signal raised_signal)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AContextRaisedSignal
struct AAssociationLinkLink
{
Foundation::Core::Association association;
CommonBehavior::Link link;
};
typedef sequence<AAssociationLinkLink> AAssociationLinkLinkSet;
interface AAssociationLink : Reflective::RefAssociation
{
AAssociationLinkLinkSet all_a_association_link_links()
raises (Reflective::MofError);
boolean exists (
in Foundation::Core::Association association,
in CommonBehavior::Link link)
raises (Reflective::MofError);
Foundation::Core::Association association (in CommonBehavior::Link link)
raises (Reflective::MofError);
LinkSet link (in Foundation::Core::Association association)
raises (Reflective::MofError);
void add (
in Foundation::Core::Association association,
in CommonBehavior::Link link)
raises (Reflective::MofError);
void modify_association (
in Foundation::Core::Association association,
in CommonBehavior::Link link,
in Foundation::Core::Association new_association)
raises (Reflective::NotFound, Reflective::MofError);
5-80
OMG-UML V1.3
March 2000
5
void modify_link (
in Foundation::Core::Association association,
in CommonBehavior::Link link,
in CommonBehavior::Link new_link)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Foundation::Core::Association association,
in CommonBehavior::Link link)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AAssociationLink
struct ALinkConnectionLink
{
CommonBehavior::Link link;
LinkEnd connection;
};
typedef sequence<ALinkConnectionLink> ALinkConnectionLinkSet;
interface ALinkConnection : Reflective::RefAssociation
{
ALinkConnectionLinkSet all_a_link_connection_links()
raises (Reflective::MofError);
boolean exists (
in CommonBehavior::Link link,
in LinkEnd connection)
raises (Reflective::MofError);
CommonBehavior::Link link (in LinkEnd connection)
raises (Reflective::MofError);
LinkEndSet connection (in CommonBehavior::Link link)
raises (Reflective::MofError);
void add (
in CommonBehavior::Link link,
in LinkEnd connection)
raises (Reflective::MofError);
void modify_link (
in CommonBehavior::Link link,
in LinkEnd connection,
in CommonBehavior::Link new_link)
raises (Reflective::NotFound, Reflective::MofError);
void modify_connection (
in CommonBehavior::Link link,
in LinkEnd connection,
in LinkEnd new_connection)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in CommonBehavior::Link link,
in LinkEnd connection)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ALinkConnection
struct AAssociationEndLinkEndLink
{
Foundation::Core::AssociationEnd association_end;
LinkEnd link_end;
};
OMG-UML V1.3
IDL Modules
March 2000
5-81
5
typedef sequence<AAssociationEndLinkEndLink> AAssociationEndLinkEndLinkSet;
interface AAssociationEndLinkEnd : Reflective::RefAssociation
{
AAssociationEndLinkEndLinkSet all_a_association_end_link_end_links()
raises (Reflective::MofError);
boolean exists (
in Foundation::Core::AssociationEnd association_end,
in LinkEnd link_end)
raises (Reflective::MofError);
Foundation::Core::AssociationEnd association_end (in LinkEnd link_end)
raises (Reflective::MofError);
LinkEndSet link_end (in Foundation::Core::AssociationEnd association_end)
raises (Reflective::MofError);
void add (
in Foundation::Core::AssociationEnd association_end,
in LinkEnd link_end)
raises (Reflective::MofError);
void modify_association_end (
in Foundation::Core::AssociationEnd association_end,
in LinkEnd link_end,
in Foundation::Core::AssociationEnd new_association_end)
raises (Reflective::NotFound, Reflective::MofError);
void modify_link_end (
in Foundation::Core::AssociationEnd association_end,
in LinkEnd link_end,
in LinkEnd new_link_end)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Foundation::Core::AssociationEnd association_end,
in LinkEnd link_end)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AAssociationEndLinkEnd
struct AStimulus3SenderLink
{
Stimulus stimulus3;
Instance sender;
};
typedef sequence<AStimulus3SenderLink> AStimulus3SenderLinkSet;
interface AStimulus3Sender : Reflective::RefAssociation
{
AStimulus3SenderLinkSet all_a_stimulus3_sender_links()
raises (Reflective::MofError);
boolean exists (
in Stimulus stimulus3,
in Instance sender)
raises (Reflective::MofError);
StimulusSet stimulus3 (in Instance sender)
raises (Reflective::MofError);
Instance sender (in Stimulus stimulus3)
raises (Reflective::MofError);
void add (
in Stimulus stimulus3,
5-82
OMG-UML V1.3
March 2000
5
in Instance sender)
raises (Reflective::MofError);
void modify_stimulus3 (
in Stimulus stimulus3,
in Instance sender,
in Stimulus new_stimulus3)
raises (Reflective::NotFound, Reflective::MofError);
void modify_sender (
in Stimulus stimulus3,
in Instance sender,
in Instance new_sender)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Stimulus stimulus3,
in Instance sender)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AStimulus3Sender
struct ACallActionOperationLink
{
CallAction call_action;
Foundation::Core::Operation operation;
};
typedef sequence<ACallActionOperationLink> ACallActionOperationLinkSet;
interface ACallActionOperation : Reflective::RefAssociation
{
ACallActionOperationLinkSet all_a_call_action_operation_links()
raises (Reflective::MofError);
boolean exists (
in CallAction call_action,
in Foundation::Core::Operation operation)
raises (Reflective::MofError);
CallActionSet call_action (in Foundation::Core::Operation operation)
raises (Reflective::MofError);
Foundation::Core::Operation operation (in CallAction call_action)
raises (Reflective::MofError);
void add (
in CallAction call_action,
in Foundation::Core::Operation operation)
raises (Reflective::MofError);
void modify_call_action (
in CallAction call_action,
in Foundation::Core::Operation operation,
in CallAction new_call_action)
raises (Reflective::NotFound, Reflective::MofError);
void modify_operation (
in CallAction call_action,
in Foundation::Core::Operation operation,
in Foundation::Core::Operation new_operation)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in CallAction call_action,
in Foundation::Core::Operation operation)
raises (Reflective::NotFound, Reflective::MofError);
OMG-UML V1.3
IDL Modules
March 2000
5-83
5
}; // end of interface ACallActionOperation
struct AActionSequenceActionLink
{
ActionSequence action_sequence;
CommonBehavior::Action action;
};
typedef sequence<AActionSequenceActionLink> AActionSequenceActionLinkSet;
interface AActionSequenceAction : Reflective::RefAssociation
{
AActionSequenceActionLinkSet all_a_action_sequence_action_links()
raises (Reflective::MofError);
boolean exists (
in ActionSequence action_sequence,
in CommonBehavior::Action action)
raises (Reflective::MofError);
ActionSequence action_sequence (in CommonBehavior::Action action)
raises (Reflective::MofError);
ActionUList action (in ActionSequence action_sequence)
raises (Reflective::MofError);
void add (
in ActionSequence action_sequence,
in CommonBehavior::Action action)
raises (Reflective::MofError);
void add_before_action (
in ActionSequence action_sequence,
in CommonBehavior::Action action,
in CommonBehavior::Action before)
raises (Reflective::NotFound, Reflective::MofError);
void modify_action_sequence (
in ActionSequence action_sequence,
in CommonBehavior::Action action,
in ActionSequence new_action_sequence)
raises (Reflective::NotFound, Reflective::MofError);
void modify_action (
in ActionSequence action_sequence,
in CommonBehavior::Action action,
in CommonBehavior::Action new_action)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in ActionSequence action_sequence,
in CommonBehavior::Action action)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AActionSequenceAction
struct AResidentNodeInstanceLink
{
ComponentInstance resident;
NodeInstance node_instance;
};
typedef sequence<AResidentNodeInstanceLink> AResidentNodeInstanceLinkSet;
interface AResidentNodeInstance : Reflective::RefAssociation
{
5-84
OMG-UML V1.3
March 2000
5
AResidentNodeInstanceLinkSet all_a_resident_node_instance_links()
raises (Reflective::MofError);
boolean exists (
in ComponentInstance resident,
in NodeInstance node_instance)
raises (Reflective::MofError);
ComponentInstanceSet resident (in NodeInstance node_instance)
raises (Reflective::MofError);
NodeInstance node_instance (in ComponentInstance resident)
raises (Reflective::MofError);
void add (
in ComponentInstance resident,
in NodeInstance node_instance)
raises (Reflective::MofError);
void modify_resident (
in ComponentInstance resident,
in NodeInstance node_instance,
in ComponentInstance new_resident)
raises (Reflective::NotFound, Reflective::MofError);
void modify_node_instance (
in ComponentInstance resident,
in NodeInstance node_instance,
in NodeInstance new_node_instance)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in ComponentInstance resident,
in NodeInstance node_instance)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AResidentNodeInstance
struct AResidentComponentInstanceLink
{
Instance resident;
ComponentInstance component_instance;
};
typedef sequence<AResidentComponentInstanceLink> AResidentComponentInstanceLinkSet;
interface AResidentComponentInstance : Reflective::RefAssociation
{
AResidentComponentInstanceLinkSet all_a_resident_component_instance_links()
raises (Reflective::MofError);
boolean exists (
in Instance resident,
in ComponentInstance component_instance)
raises (Reflective::MofError);
InstanceSet resident (in ComponentInstance component_instance)
raises (Reflective::MofError);
ComponentInstance component_instance (in Instance resident)
raises (Reflective::MofError);
void add (
in Instance resident,
in ComponentInstance component_instance)
raises (Reflective::MofError);
void modify_resident (
in Instance resident,
OMG-UML V1.3
IDL Modules
March 2000
5-85
5
in ComponentInstance component_instance,
in Instance new_resident)
raises (Reflective::NotFound, Reflective::MofError);
void modify_component_instance (
in Instance resident,
in ComponentInstance component_instance,
in ComponentInstance new_component_instance)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Instance resident,
in ComponentInstance component_instance)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AResidentComponentInstance
struct AReceiverStimulus2Link
{
Instance receiver;
Stimulus stimulus2;
};
typedef sequence<AReceiverStimulus2Link> AReceiverStimulus2LinkSet;
interface AReceiverStimulus2 : Reflective::RefAssociation
{
AReceiverStimulus2LinkSet all_a_receiver_stimulus2_links()
raises (Reflective::MofError);
boolean exists (
in Instance receiver,
in Stimulus stimulus2)
raises (Reflective::MofError);
Instance receiver (in Stimulus stimulus2)
raises (Reflective::MofError);
StimulusSet stimulus2 (in Instance receiver)
raises (Reflective::MofError);
void add (
in Instance receiver,
in Stimulus stimulus2)
raises (Reflective::MofError);
void modify_receiver (
in Instance receiver,
in Stimulus stimulus2,
in Instance new_receiver)
raises (Reflective::NotFound, Reflective::MofError);
void modify_stimulus2 (
in Instance receiver,
in Stimulus stimulus2,
in Stimulus new_stimulus2)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Instance receiver,
in Stimulus stimulus2)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AReceiverStimulus2
struct AStimulusCommunicationLinkLink
{
5-86
OMG-UML V1.3
March 2000
5
CommonBehavior::Stimulus stimulus;
Link communication_link;
};
typedef sequence<AStimulusCommunicationLinkLink> AStimulusCommunicationLinkLinkSet;
interface AStimulusCommunicationLink : Reflective::RefAssociation
{
AStimulusCommunicationLinkLinkSet all_a_stimulus_communication_link_links()
raises (Reflective::MofError);
boolean exists (
in CommonBehavior::Stimulus stimulus,
in Link communication_link)
raises (Reflective::MofError);
StimulusSet stimulus (in Link communication_link)
raises (Reflective::MofError);
Link communication_link (in CommonBehavior::Stimulus stimulus)
raises (Reflective::MofError);
void add (
in CommonBehavior::Stimulus stimulus,
in Link communication_link)
raises (Reflective::MofError);
void modify_stimulus (
in CommonBehavior::Stimulus stimulus,
in Link communication_link,
in CommonBehavior::Stimulus new_stimulus)
raises (Reflective::NotFound, Reflective::MofError);
void modify_communication_link (
in CommonBehavior::Stimulus stimulus,
in Link communication_link,
in Link new_communication_link)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in CommonBehavior::Stimulus stimulus,
in Link communication_link)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AStimulusCommunicationLink
struct ADispatchActionStimulusLink
{
Action dispatch_action;
CommonBehavior::Stimulus stimulus;
};
typedef sequence<ADispatchActionStimulusLink> ADispatchActionStimulusLinkSet;
interface ADispatchActionStimulus : Reflective::RefAssociation
{
ADispatchActionStimulusLinkSet all_a_dispatch_action_stimulus_links()
raises (Reflective::MofError);
boolean exists (
in Action dispatch_action,
in CommonBehavior::Stimulus stimulus)
raises (Reflective::MofError);
Action dispatch_action (in CommonBehavior::Stimulus stimulus)
raises (Reflective::MofError);
StimulusSet stimulus (in Action dispatch_action)
OMG-UML V1.3
IDL Modules
March 2000
5-87
5
raises (Reflective::MofError);
void add (
in Action dispatch_action,
in CommonBehavior::Stimulus stimulus)
raises (Reflective::MofError);
void modify_dispatch_action (
in Action dispatch_action,
in CommonBehavior::Stimulus stimulus,
in Action new_dispatch_action)
raises (Reflective::NotFound, Reflective::MofError);
void modify_stimulus (
in Action dispatch_action,
in CommonBehavior::Stimulus stimulus,
in CommonBehavior::Stimulus new_stimulus)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Action dispatch_action,
in CommonBehavior::Stimulus stimulus)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ADispatchActionStimulus
struct ASignalSendActionLink
{
CommonBehavior::Signal signal;
SendAction send_action;
};
typedef sequence<ASignalSendActionLink> ASignalSendActionLinkSet;
interface ASignalSendAction : Reflective::RefAssociation
{
ASignalSendActionLinkSet all_a_signal_send_action_links()
raises (Reflective::MofError);
boolean exists (
in CommonBehavior::Signal signal,
in SendAction send_action)
raises (Reflective::MofError);
CommonBehavior::Signal signal (in SendAction send_action)
raises (Reflective::MofError);
SendActionSet send_action (in CommonBehavior::Signal signal)
raises (Reflective::MofError);
void add (
in CommonBehavior::Signal signal,
in SendAction send_action)
raises (Reflective::MofError);
void modify_signal (
in CommonBehavior::Signal signal,
in SendAction send_action,
in CommonBehavior::Signal new_signal)
raises (Reflective::NotFound, Reflective::MofError);
void modify_send_action (
in CommonBehavior::Signal signal,
in SendAction send_action,
in SendAction new_send_action)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
5-88
OMG-UML V1.3
March 2000
5
in CommonBehavior::Signal signal,
in SendAction send_action)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ASignalSendAction
struct ALinkEndQualifiedValueLink
{
LinkEnd link_end;
AttributeLink qualified_value;
};
typedef sequence<ALinkEndQualifiedValueLink> ALinkEndQualifiedValueLinkSet;
interface ALinkEndQualifiedValue : Reflective::RefAssociation
{
ALinkEndQualifiedValueLinkSet all_a_link_end_qualified_value_links()
raises (Reflective::MofError);
boolean exists (
in LinkEnd link_end,
in AttributeLink qualified_value)
raises (Reflective::MofError);
LinkEnd link_end (in AttributeLink qualified_value)
raises (Reflective::MofError);
AttributeLinkSet qualified_value (in LinkEnd link_end)
raises (Reflective::MofError);
void add (
in LinkEnd link_end,
in AttributeLink qualified_value)
raises (Reflective::MofError);
void modify_link_end (
in LinkEnd link_end,
in AttributeLink qualified_value,
in LinkEnd new_link_end)
raises (Reflective::NotFound, Reflective::MofError);
void modify_qualified_value (
in LinkEnd link_end,
in AttributeLink qualified_value,
in AttributeLink new_qualified_value)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in LinkEnd link_end,
in AttributeLink qualified_value)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ALinkEndQualifiedValue
interface CommonBehaviorPackage : Reflective::RefPackage
{
readonly attribute InstanceClass instance_ref;
readonly attribute SignalClass signal_ref;
readonly attribute CreateActionClass create_action_ref;
readonly attribute DestroyActionClass destroy_action_ref;
readonly attribute UninterpretedActionClass uninterpreted_action_ref;
readonly attribute ActionClass action_ref;
readonly attribute AttributeLinkClass attribute_link_ref;
readonly attribute LinkObjectClass link_object_ref;
readonly attribute UmlObjectClass uml_object_ref;
OMG-UML V1.3
IDL Modules
March 2000
5-89
5
readonly attribute DataValueClass data_value_ref;
readonly attribute CallActionClass call_action_ref;
readonly attribute SendActionClass send_action_ref;
readonly attribute ActionSequenceClass action_sequence_ref;
readonly attribute ArgumentClass argument_ref;
readonly attribute ReceptionClass reception_ref;
readonly attribute LinkClass link_ref;
readonly attribute LinkEndClass link_end_ref;
readonly attribute ReturnActionClass return_action_ref;
readonly attribute TerminateActionClass terminate_action_ref;
readonly attribute StimulusClass stimulus_ref;
readonly attribute UmlExceptionClass uml_exception_ref;
readonly attribute ComponentInstanceClass component_instance_ref;
readonly attribute NodeInstanceClass node_instance_ref;
readonly attribute AInstanceClassifier a_instance_classifier_ref;
readonly attribute AActualArgumentAction a_actual_argument_action_ref;
readonly attribute ACreateActionInstantiation a_create_action_instantiation_ref;
readonly attribute AAttributeLinkAttribute a_attribute_link_attribute_ref;
readonly attribute AAttributeLinkValue a_attribute_link_value_ref;
readonly attribute AInstanceLinkEnd a_instance_link_end_ref;
readonly attribute ASignalReception a_signal_reception_ref;
readonly attribute ASlotInstance a_slot_instance_ref;
readonly attribute AArgumentStimulus1 a_argument_stimulus1_ref;
readonly attribute AContextRaisedSignal a_context_raised_signal_ref;
readonly attribute AAssociationLink a_association_link_ref;
readonly attribute ALinkConnection a_link_connection_ref;
readonly attribute AAssociationEndLinkEnd a_association_end_link_end_ref;
readonly attribute AStimulus3Sender a_stimulus3_sender_ref;
readonly attribute ACallActionOperation a_call_action_operation_ref;
readonly attribute AActionSequenceAction a_action_sequence_action_ref;
readonly attribute AResidentNodeInstance a_resident_node_instance_ref;
readonly attribute AResidentComponentInstance a_resident_component_instance_ref;
readonly attribute AReceiverStimulus2 a_receiver_stimulus2_ref;
readonly attribute AStimulusCommunicationLink a_stimulus_communication_link_ref;
readonly attribute ADispatchActionStimulus a_dispatch_action_stimulus_ref;
readonly attribute ASignalSendAction a_signal_send_action_ref;
readonly attribute ALinkEndQualifiedValue a_link_end_qualified_value_ref;
};
}; // end of module CommonBehavior
module UseCases
{
interface UseCaseClass;
interface UseCase;
typedef sequence<UseCase> UseCaseSet;
interface ActorClass;
interface Actor;
typedef sequence<Actor> ActorSet;
interface UseCaseInstanceClass;
interface UseCaseInstance;
typedef sequence<UseCaseInstance> UseCaseInstanceSet;
interface ExtendClass;
interface Extend;
typedef sequence<Extend> ExtendSet;
interface IncludeClass;
5-90
OMG-UML V1.3
March 2000
5
interface Include;
typedef sequence<Include> IncludeSet;
interface ExtensionPointClass;
interface ExtensionPoint;
typedef sequence<ExtensionPoint> ExtensionPointSet;
typedef sequence<ExtensionPoint> ExtensionPointUList;
interface UseCasesPackage;
interface UseCaseClass : Foundation::Core::ClassifierClass
{
readonly attribute UseCaseSet all_of_type_use_case;
readonly attribute UseCaseSet all_of_class_use_case;
UseCase create_use_case (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in boolean is_root,
in boolean is_leaf,
in boolean is_abstract)
raises (Reflective::MofError);
};
interface UseCase : UseCaseClass, Foundation::Core::Classifier
{
ExtendSet extend2 ()
raises (Reflective::MofError);
void set_extend2 (in ExtendSet new_value)
raises (Reflective::MofError);
void add_extend2 (in UseCases::Extend new_element)
raises (Reflective::MofError);
void modify_extend2 (
in UseCases::Extend old_element,
in UseCases::Extend new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_extend2 (in UseCases::Extend old_element)
raises (Reflective::NotFound, Reflective::MofError);
ExtendSet extend ()
raises (Reflective::MofError);
void set_extend (in ExtendSet new_value)
raises (Reflective::MofError);
void add_extend (in UseCases::Extend new_element)
raises (Reflective::MofError);
void modify_extend (
in UseCases::Extend old_element,
in UseCases::Extend new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_extend (in UseCases::Extend old_element)
raises (Reflective::NotFound, Reflective::MofError);
IncludeSet include ()
raises (Reflective::MofError);
void set_include (in IncludeSet new_value)
raises (Reflective::MofError);
void add_include (in UseCases::Include new_element)
raises (Reflective::MofError);
void modify_include (
OMG-UML V1.3
IDL Modules
March 2000
5-91
5
in UseCases::Include old_element,
in UseCases::Include new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_include (in UseCases::Include old_element)
raises (Reflective::NotFound, Reflective::MofError);
IncludeSet include2 ()
raises (Reflective::MofError);
void set_include2 (in IncludeSet new_value)
raises (Reflective::MofError);
void add_include2 (in UseCases::Include new_element)
raises (Reflective::MofError);
void modify_include2 (
in UseCases::Include old_element,
in UseCases::Include new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_include2 (in UseCases::Include old_element)
raises (Reflective::NotFound, Reflective::MofError);
ExtensionPointSet extension_point ()
raises (Reflective::MofError);
void set_extension_point (in ExtensionPointSet new_value)
raises (Reflective::MofError);
void add_extension_point (in ExtensionPoint new_element)
raises (Reflective::MofError);
void modify_extension_point (
in ExtensionPoint old_element,
in ExtensionPoint new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_extension_point (in ExtensionPoint old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface UseCase
interface ActorClass : Foundation::Core::ClassifierClass
{
readonly attribute ActorSet all_of_type_actor;
readonly attribute ActorSet all_of_class_actor;
Actor create_actor (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in boolean is_root,
in boolean is_leaf,
in boolean is_abstract)
raises (Reflective::MofError);
};
interface Actor : ActorClass, Foundation::Core::Classifier
{
}; // end of interface Actor
interface UseCaseInstanceClass : CommonBehavior::InstanceClass
{
readonly attribute UseCaseInstanceSet all_of_type_use_case_instance;
readonly attribute UseCaseInstanceSet all_of_class_use_case_instance;
UseCaseInstance create_use_case_instance (
in Foundation::DataTypes::Name name,
5-92
OMG-UML V1.3
March 2000
5
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification)
raises (Reflective::MofError);
};
interface UseCaseInstance : UseCaseInstanceClass, CommonBehavior::Instance
{
}; // end of interface UseCaseInstance
interface ExtendClass : Foundation::Core::RelationshipClass
{
readonly attribute ExtendSet all_of_type_extend;
readonly attribute ExtendSet all_of_class_extend;
Extend create_extend (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in Foundation::DataTypes::BooleanExpression condition)
raises (Reflective::MofError);
};
interface Extend : ExtendClass, Foundation::Core::Relationship
{
Foundation::DataTypes::BooleanExpression condition ()
raises (Reflective::MofError);
void set_condition (in Foundation::DataTypes::BooleanExpression new_value)
raises (Reflective::MofError);
UseCase base ()
raises (Reflective::MofError);
void set_base (in UseCase new_value)
raises (Reflective::MofError);
UseCase extension ()
raises (Reflective::MofError);
void set_extension (in UseCase new_value)
raises (Reflective::MofError);
ExtensionPointUList extension_point ()
raises (Reflective::MofError);
void set_extension_point (in ExtensionPointUList new_value)
raises (Reflective::MofError);
void add_extension_point (in ExtensionPoint new_element)
raises (Reflective::MofError);
void add_extension_point_before (
in ExtensionPoint new_element,
in ExtensionPoint before_element)
raises (Reflective::NotFound, Reflective::MofError);
void modify_extension_point (
in ExtensionPoint old_element,
in ExtensionPoint new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_extension_point (in ExtensionPoint old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface Extend
interface IncludeClass : Foundation::Core::RelationshipClass
{
OMG-UML V1.3
IDL Modules
March 2000
5-93
5
readonly attribute IncludeSet all_of_type_include;
readonly attribute IncludeSet all_of_class_include;
Include create_include (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification)
raises (Reflective::MofError);
};
interface Include : IncludeClass, Foundation::Core::Relationship
{
UseCase addition ()
raises (Reflective::MofError);
void set_addition (in UseCase new_value)
raises (Reflective::MofError);
UseCase base ()
raises (Reflective::MofError);
void set_base (in UseCase new_value)
raises (Reflective::MofError);
}; // end of interface Include
interface ExtensionPointClass : Foundation::Core::ModelElementClass
{
readonly attribute ExtensionPointSet all_of_type_extension_point;
readonly attribute ExtensionPointSet all_of_class_extension_point;
ExtensionPoint create_extension_point (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in Foundation::DataTypes::LocationReference location)
raises (Reflective::MofError);
};
interface ExtensionPoint : ExtensionPointClass, Foundation::Core::ModelElement
{
Foundation::DataTypes::LocationReference location ()
raises (Reflective::MofError);
void set_location (in Foundation::DataTypes::LocationReference new_value)
raises (Reflective::MofError);
UseCase use_case ()
raises (Reflective::MofError);
void set_use_case (in UseCase new_value)
raises (Reflective::MofError);
ExtendSet extend ()
raises (Reflective::MofError);
void set_extend (in ExtendSet new_value)
raises (Reflective::MofError);
void add_extend (in UseCases::Extend new_element)
raises (Reflective::MofError);
void modify_extend (
in UseCases::Extend old_element,
in UseCases::Extend new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_extend (in UseCases::Extend old_element)
raises (Reflective::NotFound, Reflective::MofError);
5-94
OMG-UML V1.3
March 2000
5
}; // end of interface ExtensionPoint
struct ABaseExtend2Link
{
UseCase base;
Extend extend2;
};
typedef sequence<ABaseExtend2Link> ABaseExtend2LinkSet;
interface ABaseExtend2 : Reflective::RefAssociation
{
ABaseExtend2LinkSet all_a_base_extend2_links()
raises (Reflective::MofError);
boolean exists (
in UseCase base,
in Extend extend2)
raises (Reflective::MofError);
UseCase base (in Extend extend2)
raises (Reflective::MofError);
ExtendSet extend2 (in UseCase base)
raises (Reflective::MofError);
void add (
in UseCase base,
in Extend extend2)
raises (Reflective::MofError);
void modify_base (
in UseCase base,
in Extend extend2,
in UseCase new_base)
raises (Reflective::NotFound, Reflective::MofError);
void modify_extend2 (
in UseCase base,
in Extend extend2,
in Extend new_extend2)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in UseCase base,
in Extend extend2)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ABaseExtend2
struct AExtensionExtendLink
{
UseCase extension;
UseCases::Extend extend;
};
typedef sequence<AExtensionExtendLink> AExtensionExtendLinkSet;
interface AExtensionExtend : Reflective::RefAssociation
{
AExtensionExtendLinkSet all_a_extension_extend_links()
raises (Reflective::MofError);
boolean exists (
in UseCase extension,
in UseCases::Extend extend)
OMG-UML V1.3
IDL Modules
March 2000
5-95
5
raises (Reflective::MofError);
UseCase extension (in UseCases::Extend extend)
raises (Reflective::MofError);
ExtendSet extend (in UseCase extension)
raises (Reflective::MofError);
void add (
in UseCase extension,
in UseCases::Extend extend)
raises (Reflective::MofError);
void modify_extension (
in UseCase extension,
in UseCases::Extend extend,
in UseCase new_extension)
raises (Reflective::NotFound, Reflective::MofError);
void modify_extend (
in UseCase extension,
in UseCases::Extend extend,
in UseCases::Extend new_extend)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in UseCase extension,
in UseCases::Extend extend)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AExtensionExtend
struct AIncludeAdditionLink
{
UseCases::Include include;
UseCase addition;
};
typedef sequence<AIncludeAdditionLink> AIncludeAdditionLinkSet;
interface AIncludeAddition : Reflective::RefAssociation
{
AIncludeAdditionLinkSet all_a_include_addition_links()
raises (Reflective::MofError);
boolean exists (
in UseCases::Include include,
in UseCase addition)
raises (Reflective::MofError);
IncludeSet include (in UseCase addition)
raises (Reflective::MofError);
UseCase addition (in UseCases::Include include)
raises (Reflective::MofError);
void add (
in UseCases::Include include,
in UseCase addition)
raises (Reflective::MofError);
void modify_include (
in UseCases::Include include,
in UseCase addition,
in UseCases::Include new_include)
raises (Reflective::NotFound, Reflective::MofError);
void modify_addition (
in UseCases::Include include,
5-96
OMG-UML V1.3
March 2000
5
in UseCase addition,
in UseCase new_addition)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in UseCases::Include include,
in UseCase addition)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AIncludeAddition
struct AInclude2BaseLink
{
Include include2;
UseCase base;
};
typedef sequence<AInclude2BaseLink> AInclude2BaseLinkSet;
interface AInclude2Base : Reflective::RefAssociation
{
AInclude2BaseLinkSet all_a_include2_base_links()
raises (Reflective::MofError);
boolean exists (
in Include include2,
in UseCase base)
raises (Reflective::MofError);
IncludeSet include2 (in UseCase base)
raises (Reflective::MofError);
UseCase base (in Include include2)
raises (Reflective::MofError);
void add (
in Include include2,
in UseCase base)
raises (Reflective::MofError);
void modify_include2 (
in Include include2,
in UseCase base,
in Include new_include2)
raises (Reflective::NotFound, Reflective::MofError);
void modify_base (
in Include include2,
in UseCase base,
in UseCase new_base)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Include include2,
in UseCase base)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AInclude2Base
struct AExtensionPointUseCaseLink
{
ExtensionPoint extension_point;
UseCase use_case;
};
typedef sequence<AExtensionPointUseCaseLink> AExtensionPointUseCaseLinkSet;
OMG-UML V1.3
IDL Modules
March 2000
5-97
5
interface AExtensionPointUseCase : Reflective::RefAssociation
{
AExtensionPointUseCaseLinkSet all_a_extension_point_use_case_links()
raises (Reflective::MofError);
boolean exists (
in ExtensionPoint extension_point,
in UseCase use_case)
raises (Reflective::MofError);
ExtensionPointSet extension_point (in UseCase use_case)
raises (Reflective::MofError);
UseCase use_case (in ExtensionPoint extension_point)
raises (Reflective::MofError);
void add (
in ExtensionPoint extension_point,
in UseCase use_case)
raises (Reflective::MofError);
void modify_extension_point (
in ExtensionPoint extension_point,
in UseCase use_case,
in ExtensionPoint new_extension_point)
raises (Reflective::NotFound, Reflective::MofError);
void modify_use_case (
in ExtensionPoint extension_point,
in UseCase use_case,
in UseCase new_use_case)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in ExtensionPoint extension_point,
in UseCase use_case)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AExtensionPointUseCase
struct AExtensionPointExtendLink
{
ExtensionPoint extension_point;
UseCases::Extend extend;
};
typedef sequence<AExtensionPointExtendLink> AExtensionPointExtendLinkSet;
interface AExtensionPointExtend : Reflective::RefAssociation
{
AExtensionPointExtendLinkSet all_a_extension_point_extend_links()
raises (Reflective::MofError);
boolean exists (
in ExtensionPoint extension_point,
in UseCases::Extend extend)
raises (Reflective::MofError);
ExtensionPointUList extension_point (in UseCases::Extend extend)
raises (Reflective::MofError);
ExtendSet extend (in ExtensionPoint extension_point)
raises (Reflective::MofError);
void add (
in ExtensionPoint extension_point,
in UseCases::Extend extend)
raises (Reflective::MofError);
5-98
OMG-UML V1.3
March 2000
5
void add_before_extension_point (
in ExtensionPoint extension_point,
in UseCases::Extend extend,
in ExtensionPoint before)
raises (Reflective::NotFound, Reflective::MofError);
void modify_extension_point (
in ExtensionPoint extension_point,
in UseCases::Extend extend,
in ExtensionPoint new_extension_point)
raises (Reflective::NotFound, Reflective::MofError);
void modify_extend (
in ExtensionPoint extension_point,
in UseCases::Extend extend,
in UseCases::Extend new_extend)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in ExtensionPoint extension_point,
in UseCases::Extend extend)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AExtensionPointExtend
interface UseCasesPackage : Reflective::RefPackage
{
readonly attribute UseCaseClass use_case_ref;
readonly attribute ActorClass actor_ref;
readonly attribute UseCaseInstanceClass use_case_instance_ref;
readonly attribute ExtendClass extend_ref;
readonly attribute IncludeClass include_ref;
readonly attribute ExtensionPointClass extension_point_ref;
readonly attribute ABaseExtend2 a_base_extend2_ref;
readonly attribute AExtensionExtend a_extension_extend_ref;
readonly attribute AIncludeAddition a_include_addition_ref;
readonly attribute AInclude2Base a_include2_base_ref;
readonly attribute AExtensionPointUseCase a_extension_point_use_case_ref;
readonly attribute AExtensionPointExtend a_extension_point_extend_ref;
};
}; // end of module UseCases
module StateMachines
{
interface StateMachineClass;
interface StateMachine;
typedef sequence<StateMachine> StateMachineSet;
interface EventClass;
interface Event;
typedef sequence<Event> EventSet;
interface StateClass;
interface State;
typedef sequence<State> StateSet;
interface TimeEventClass;
interface TimeEvent;
typedef sequence<TimeEvent> TimeEventSet;
interface CallEventClass;
interface CallEvent;
typedef sequence<CallEvent> CallEventSet;
OMG-UML V1.3
IDL Modules
March 2000
5-99
5
interface SignalEventClass;
interface SignalEvent;
typedef sequence<SignalEvent> SignalEventSet;
interface TransitionClass;
interface Transition;
typedef sequence<Transition> TransitionSet;
interface StateVertexClass;
interface StateVertex;
typedef sequence<StateVertex> StateVertexSet;
interface CompositeStateClass;
interface CompositeState;
typedef sequence<CompositeState> CompositeStateSet;
interface ChangeEventClass;
interface ChangeEvent;
typedef sequence<ChangeEvent> ChangeEventSet;
interface GuardClass;
interface Guard;
typedef sequence<Guard> GuardSet;
interface PseudostateClass;
interface Pseudostate;
typedef sequence<Pseudostate> PseudostateSet;
interface SimpleStateClass;
interface SimpleState;
typedef sequence<SimpleState> SimpleStateSet;
interface SubmachineStateClass;
interface SubmachineState;
typedef sequence<SubmachineState> SubmachineStateSet;
interface SynchStateClass;
interface SynchState;
typedef sequence<SynchState> SynchStateSet;
interface StubStateClass;
interface StubState;
typedef sequence<StubState> StubStateSet;
interface FinalStateClass;
interface FinalState;
typedef sequence<FinalState> FinalStateSet;
interface StateMachinesPackage;
interface StateMachineClass : Foundation::Core::ModelElementClass
{
readonly attribute StateMachineSet all_of_type_state_machine;
readonly attribute StateMachineSet all_of_class_state_machine;
StateMachine create_state_machine (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification)
raises (Reflective::MofError);
};
interface StateMachine : StateMachineClass, Foundation::Core::ModelElement
{
Foundation::Core::ModelElement uml_context ()
raises (Reflective::NotSet, Reflective::MofError);
void set_uml_context (in Foundation::Core::ModelElement new_value)
raises (Reflective::MofError);
5-100
OMG-UML V1.3
March 2000
5
void unset_uml_context ()
raises (Reflective::MofError);
State top ()
raises (Reflective::MofError);
void set_top (in State new_value)
raises (Reflective::MofError);
TransitionSet transitions ()
raises (Reflective::MofError);
void set_transitions (in TransitionSet new_value)
raises (Reflective::MofError);
void add_transitions (in Transition new_element)
raises (Reflective::MofError);
void modify_transitions (
in Transition old_element,
in Transition new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_transitions (in Transition old_element)
raises (Reflective::NotFound, Reflective::MofError);
SubmachineStateSet sub_machine_state ()
raises (Reflective::MofError);
void set_sub_machine_state (in SubmachineStateSet new_value)
raises (Reflective::MofError);
void add_sub_machine_state (in SubmachineState new_element)
raises (Reflective::MofError);
void modify_sub_machine_state (
in SubmachineState old_element,
in SubmachineState new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_sub_machine_state (in SubmachineState old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface StateMachine
interface EventClass : Foundation::Core::ModelElementClass
{
readonly attribute EventSet all_of_type_event;
};
interface Event : EventClass, Foundation::Core::ModelElement
{
ParameterUList parameter ()
raises (Reflective::MofError);
void set_parameter (in ParameterUList new_value)
raises (Reflective::MofError);
void unset_parameter ()
raises (Reflective::MofError);
void add_parameter (in Foundation::Core::Parameter new_element)
raises (Reflective::MofError);
void add_parameter_before (
in Foundation::Core::Parameter new_element,
in Foundation::Core::Parameter before_element)
raises (Reflective::NotFound, Reflective::MofError);
void modify_parameter (
in Foundation::Core::Parameter old_element,
in Foundation::Core::Parameter new_element)
raises (Reflective::NotFound, Reflective::MofError);
OMG-UML V1.3
IDL Modules
March 2000
5-101
5
void remove_parameter (in Foundation::Core::Parameter old_element)
raises (Reflective::NotFound, Reflective::MofError);
StateSet state ()
raises (Reflective::MofError);
void set_state (in StateSet new_value)
raises (Reflective::MofError);
void unset_state ()
raises (Reflective::MofError);
void add_state (in StateMachines::State new_element)
raises (Reflective::MofError);
void modify_state (
in StateMachines::State old_element,
in StateMachines::State new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_state (in StateMachines::State old_element)
raises (Reflective::NotFound, Reflective::MofError);
TransitionSet transition ()
raises (Reflective::MofError);
void set_transition (in TransitionSet new_value)
raises (Reflective::MofError);
void add_transition (in StateMachines::Transition new_element)
raises (Reflective::MofError);
void modify_transition (
in StateMachines::Transition old_element,
in StateMachines::Transition new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_transition (in StateMachines::Transition old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface Event
interface StateVertexClass : Foundation::Core::ModelElementClass
{
readonly attribute StateVertexSet all_of_type_state_vertex;
};
interface StateVertex : StateVertexClass, Foundation::Core::ModelElement
{
CompositeState container ()
raises (Reflective::NotSet, Reflective::MofError);
void set_container (in CompositeState new_value)
raises (Reflective::MofError);
void unset_container ()
raises (Reflective::MofError);
TransitionSet outgoing ()
raises (Reflective::MofError);
void set_outgoing (in TransitionSet new_value)
raises (Reflective::MofError);
void add_outgoing (in Transition new_element)
raises (Reflective::MofError);
void modify_outgoing (
in Transition old_element,
in Transition new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_outgoing (in Transition old_element)
raises (Reflective::NotFound, Reflective::MofError);
5-102
OMG-UML V1.3
March 2000
5
TransitionSet incoming ()
raises (Reflective::MofError);
void set_incoming (in TransitionSet new_value)
raises (Reflective::MofError);
void add_incoming (in Transition new_element)
raises (Reflective::MofError);
void modify_incoming (
in Transition old_element,
in Transition new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_incoming (in Transition old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface StateVertex
interface StateClass : StateVertexClass
{
readonly attribute StateSet all_of_type_state;
readonly attribute StateSet all_of_class_state;
State create_state (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification)
raises (Reflective::MofError);
};
interface State : StateClass, StateVertex
{
CommonBehavior::Action entry ()
raises (Reflective::NotSet, Reflective::MofError);
void set_entry (in CommonBehavior::Action new_value)
raises (Reflective::MofError);
void unset_entry ()
raises (Reflective::MofError);
CommonBehavior::Action exit ()
raises (Reflective::NotSet, Reflective::MofError);
void set_exit (in CommonBehavior::Action new_value)
raises (Reflective::MofError);
void unset_exit ()
raises (Reflective::MofError);
StateMachine state_machine ()
raises (Reflective::NotSet, Reflective::MofError);
void set_state_machine (in StateMachine new_value)
raises (Reflective::MofError);
void unset_state_machine ()
raises (Reflective::MofError);
EventSet deferrable_event ()
raises (Reflective::MofError);
void set_deferrable_event (in EventSet new_value)
raises (Reflective::MofError);
void unset_deferrable_event ()
raises (Reflective::MofError);
void add_deferrable_event (in Event new_element)
raises (Reflective::MofError);
void modify_deferrable_event (
in Event old_element,
OMG-UML V1.3
IDL Modules
March 2000
5-103
5
in Event new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_deferrable_event (in Event old_element)
raises (Reflective::NotFound, Reflective::MofError);
TransitionSet internal_transition ()
raises (Reflective::MofError);
void set_internal_transition (in TransitionSet new_value)
raises (Reflective::MofError);
void add_internal_transition (in Transition new_element)
raises (Reflective::MofError);
void modify_internal_transition (
in Transition old_element,
in Transition new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_internal_transition (in Transition old_element)
raises (Reflective::NotFound, Reflective::MofError);
CommonBehavior::Action do_activity ()
raises (Reflective::NotSet, Reflective::MofError);
void set_do_activity (in CommonBehavior::Action new_value)
raises (Reflective::MofError);
void unset_do_activity ()
raises (Reflective::MofError);
}; // end of interface State
interface TimeEventClass : EventClass
{
readonly attribute TimeEventSet all_of_type_time_event;
readonly attribute TimeEventSet all_of_class_time_event;
TimeEvent create_time_event (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in Foundation::DataTypes::TimeExpression when)
raises (Reflective::MofError);
};
interface TimeEvent : TimeEventClass, Event
{
Foundation::DataTypes::TimeExpression when ()
raises (Reflective::MofError);
void set_when (in Foundation::DataTypes::TimeExpression new_value)
raises (Reflective::MofError);
}; // end of interface TimeEvent
interface CallEventClass : EventClass
{
readonly attribute CallEventSet all_of_type_call_event;
readonly attribute CallEventSet all_of_class_call_event;
CallEvent create_call_event (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification)
raises (Reflective::MofError);
};
5-104
OMG-UML V1.3
March 2000
5
interface CallEvent : CallEventClass, Event
{
Foundation::Core::Operation operation ()
raises (Reflective::MofError);
void set_operation (in Foundation::Core::Operation new_value)
raises (Reflective::MofError);
}; // end of interface CallEvent
interface SignalEventClass : EventClass
{
readonly attribute SignalEventSet all_of_type_signal_event;
readonly attribute SignalEventSet all_of_class_signal_event;
SignalEvent create_signal_event (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification)
raises (Reflective::MofError);
};
interface SignalEvent : SignalEventClass, Event
{
CommonBehavior::Signal signal ()
raises (Reflective::MofError);
void set_signal (in CommonBehavior::Signal new_value)
raises (Reflective::MofError);
}; // end of interface SignalEvent
interface TransitionClass : Foundation::Core::ModelElementClass
{
readonly attribute TransitionSet all_of_type_transition;
readonly attribute TransitionSet all_of_class_transition;
Transition create_transition (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification)
raises (Reflective::MofError);
};
interface Transition : TransitionClass, Foundation::Core::ModelElement
{
StateMachines::Guard guard ()
raises (Reflective::NotSet, Reflective::MofError);
void set_guard (in StateMachines::Guard new_value)
raises (Reflective::MofError);
void unset_guard ()
raises (Reflective::MofError);
CommonBehavior::Action effect ()
raises (Reflective::NotSet, Reflective::MofError);
void set_effect (in CommonBehavior::Action new_value)
raises (Reflective::MofError);
void unset_effect ()
raises (Reflective::MofError);
StateMachines::State state ()
raises (Reflective::NotSet, Reflective::MofError);
void set_state (in StateMachines::State new_value)
OMG-UML V1.3
IDL Modules
March 2000
5-105
5
raises (Reflective::MofError);
void unset_state ()
raises (Reflective::MofError);
Event trigger ()
raises (Reflective::NotSet, Reflective::MofError);
void set_trigger (in Event new_value)
raises (Reflective::MofError);
void unset_trigger ()
raises (Reflective::MofError);
StateMachine state_machine ()
raises (Reflective::NotSet, Reflective::MofError);
void set_state_machine (in StateMachine new_value)
raises (Reflective::MofError);
void unset_state_machine ()
raises (Reflective::MofError);
StateVertex source ()
raises (Reflective::MofError);
void set_source (in StateVertex new_value)
raises (Reflective::MofError);
StateVertex target ()
raises (Reflective::MofError);
void set_target (in StateVertex new_value)
raises (Reflective::MofError);
}; // end of interface Transition
interface CompositeStateClass : StateClass
{
readonly attribute CompositeStateSet all_of_type_composite_state;
readonly attribute CompositeStateSet all_of_class_composite_state;
CompositeState create_composite_state (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in boolean is_concurrent)
raises (Reflective::MofError);
};
interface CompositeState : CompositeStateClass, State
{
boolean is_concurrent ()
raises (Reflective::MofError);
void set_is_concurrent (in boolean new_value)
raises (Reflective::MofError);
StateVertexSet subvertex ()
raises (Reflective::MofError);
void set_subvertex (in StateVertexSet new_value)
raises (Reflective::MofError);
void unset_subvertex ()
raises (Reflective::MofError);
void add_subvertex (in StateVertex new_element)
raises (Reflective::MofError);
void modify_subvertex (
in StateVertex old_element,
in StateVertex new_element)
raises (Reflective::NotFound, Reflective::MofError);
5-106
OMG-UML V1.3
March 2000
5
void remove_subvertex (in StateVertex old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface CompositeState
interface ChangeEventClass : EventClass
{
readonly attribute ChangeEventSet all_of_type_change_event;
readonly attribute ChangeEventSet all_of_class_change_event;
ChangeEvent create_change_event (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in Foundation::DataTypes::BooleanExpression change_expression)
raises (Reflective::MofError);
};
interface ChangeEvent : ChangeEventClass, Event
{
Foundation::DataTypes::BooleanExpression change_expression ()
raises (Reflective::MofError);
void set_change_expression (in Foundation::DataTypes::BooleanExpression new_value)
raises (Reflective::MofError);
}; // end of interface ChangeEvent
interface GuardClass : Foundation::Core::ModelElementClass
{
readonly attribute GuardSet all_of_type_guard;
readonly attribute GuardSet all_of_class_guard;
Guard create_guard (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in Foundation::DataTypes::BooleanExpression expression)
raises (Reflective::MofError);
};
interface Guard : GuardClass, Foundation::Core::ModelElement
{
Foundation::DataTypes::BooleanExpression expression ()
raises (Reflective::MofError);
void set_expression (in Foundation::DataTypes::BooleanExpression new_value)
raises (Reflective::MofError);
StateMachines::Transition transition ()
raises (Reflective::MofError);
void set_transition (in StateMachines::Transition new_value)
raises (Reflective::MofError);
}; // end of interface Guard
interface PseudostateClass : StateVertexClass
{
readonly attribute PseudostateSet all_of_type_pseudostate;
readonly attribute PseudostateSet all_of_class_pseudostate;
Pseudostate create_pseudostate (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
OMG-UML V1.3
IDL Modules
March 2000
5-107
5
in boolean is_specification,
in Foundation::DataTypes::PseudostateKind kind)
raises (Reflective::MofError);
};
interface Pseudostate : PseudostateClass, StateVertex
{
Foundation::DataTypes::PseudostateKind kind ()
raises (Reflective::MofError);
void set_kind (in Foundation::DataTypes::PseudostateKind new_value)
raises (Reflective::MofError);
}; // end of interface Pseudostate
interface SimpleStateClass : StateClass
{
readonly attribute SimpleStateSet all_of_type_simple_state;
readonly attribute SimpleStateSet all_of_class_simple_state;
SimpleState create_simple_state (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification)
raises (Reflective::MofError);
};
interface SimpleState : SimpleStateClass, State
{
}; // end of interface SimpleState
interface SubmachineStateClass : CompositeStateClass
{
readonly attribute SubmachineStateSet all_of_type_submachine_state;
readonly attribute SubmachineStateSet all_of_class_submachine_state;
SubmachineState create_submachine_state (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in boolean is_concurrent)
raises (Reflective::MofError);
};
interface SubmachineState : SubmachineStateClass, CompositeState
{
StateMachine submachine ()
raises (Reflective::MofError);
void set_submachine (in StateMachine new_value)
raises (Reflective::MofError);
}; // end of interface SubmachineState
interface SynchStateClass : StateVertexClass
{
readonly attribute SynchStateSet all_of_type_synch_state;
readonly attribute SynchStateSet all_of_class_synch_state;
SynchState create_synch_state (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
5-108
OMG-UML V1.3
March 2000
5
in boolean is_specification,
in Foundation::DataTypes::UnlimitedInteger bound)
raises (Reflective::MofError);
};
interface SynchState : SynchStateClass, StateVertex
{
Foundation::DataTypes::UnlimitedInteger bound ()
raises (Reflective::MofError);
void set_bound (in Foundation::DataTypes::UnlimitedInteger new_value)
raises (Reflective::MofError);
}; // end of interface SynchState
interface StubStateClass : StateVertexClass
{
readonly attribute StubStateSet all_of_type_stub_state;
readonly attribute StubStateSet all_of_class_stub_state;
StubState create_stub_state (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in Foundation::DataTypes::Name reference_state)
raises (Reflective::MofError);
};
interface StubState : StubStateClass, StateVertex
{
Foundation::DataTypes::Name reference_state ()
raises (Reflective::MofError);
void set_reference_state (in Foundation::DataTypes::Name new_value)
raises (Reflective::MofError);
}; // end of interface StubState
interface FinalStateClass : StateClass
{
readonly attribute FinalStateSet all_of_type_final_state;
readonly attribute FinalStateSet all_of_class_final_state;
FinalState create_final_state (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification)
raises (Reflective::MofError);
};
interface FinalState : FinalStateClass, State
{
}; // end of interface FinalState
struct AState1EntryLink
{
State state1;
CommonBehavior::Action entry;
};
typedef sequence<AState1EntryLink> AState1EntryLinkSet;
OMG-UML V1.3
IDL Modules
March 2000
5-109
5
interface AState1Entry : Reflective::RefAssociation
{
AState1EntryLinkSet all_a_state1_entry_links()
raises (Reflective::MofError);
boolean exists (
in State state1,
in CommonBehavior::Action entry)
raises (Reflective::MofError);
State state1 (in CommonBehavior::Action entry)
raises (Reflective::MofError);
CommonBehavior::Action entry (in State state1)
raises (Reflective::MofError);
void add (
in State state1,
in CommonBehavior::Action entry)
raises (Reflective::MofError);
void modify_state1 (
in State state1,
in CommonBehavior::Action entry,
in State new_state1)
raises (Reflective::NotFound, Reflective::MofError);
void modify_entry (
in State state1,
in CommonBehavior::Action entry,
in CommonBehavior::Action new_entry)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in State state1,
in CommonBehavior::Action entry)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AState1Entry
struct AState2ExitLink
{
State state2;
CommonBehavior::Action exit;
};
typedef sequence<AState2ExitLink> AState2ExitLinkSet;
interface AState2Exit : Reflective::RefAssociation
{
AState2ExitLinkSet all_a_state2_exit_links()
raises (Reflective::MofError);
boolean exists (
in State state2,
in CommonBehavior::Action exit)
raises (Reflective::MofError);
State state2 (in CommonBehavior::Action exit)
raises (Reflective::MofError);
CommonBehavior::Action exit (in State state2)
raises (Reflective::MofError);
void add (
in State state2,
in CommonBehavior::Action exit)
raises (Reflective::MofError);
5-110
OMG-UML V1.3
March 2000
5
void modify_state2 (
in State state2,
in CommonBehavior::Action exit,
in State new_state2)
raises (Reflective::NotFound, Reflective::MofError);
void modify_exit (
in State state2,
in CommonBehavior::Action exit,
in CommonBehavior::Action new_exit)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in State state2,
in CommonBehavior::Action exit)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AState2Exit
struct AEventParameterLink
{
StateMachines::Event event;
Foundation::Core::Parameter parameter;
};
typedef sequence<AEventParameterLink> AEventParameterLinkSet;
interface AEventParameter : Reflective::RefAssociation
{
AEventParameterLinkSet all_a_event_parameter_links()
raises (Reflective::MofError);
boolean exists (
in StateMachines::Event event,
in Foundation::Core::Parameter parameter)
raises (Reflective::MofError);
StateMachines::Event event (in Foundation::Core::Parameter parameter)
raises (Reflective::MofError);
ParameterUList parameter (in StateMachines::Event event)
raises (Reflective::MofError);
void add (
in StateMachines::Event event,
in Foundation::Core::Parameter parameter)
raises (Reflective::MofError);
void add_before_parameter (
in StateMachines::Event event,
in Foundation::Core::Parameter parameter,
in Foundation::Core::Parameter before)
raises (Reflective::NotFound, Reflective::MofError);
void modify_event (
in StateMachines::Event event,
in Foundation::Core::Parameter parameter,
in StateMachines::Event new_event)
raises (Reflective::NotFound, Reflective::MofError);
void modify_parameter (
in StateMachines::Event event,
in Foundation::Core::Parameter parameter,
in Foundation::Core::Parameter new_parameter)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
OMG-UML V1.3
IDL Modules
March 2000
5-111
5
in StateMachines::Event event,
in Foundation::Core::Parameter parameter)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AEventParameter
struct AGuardTransitionLink
{
StateMachines::Guard guard;
StateMachines::Transition transition;
};
typedef sequence<AGuardTransitionLink> AGuardTransitionLinkSet;
interface AGuardTransition : Reflective::RefAssociation
{
AGuardTransitionLinkSet all_a_guard_transition_links()
raises (Reflective::MofError);
boolean exists (
in StateMachines::Guard guard,
in StateMachines::Transition transition)
raises (Reflective::MofError);
StateMachines::Guard guard (in StateMachines::Transition transition)
raises (Reflective::MofError);
StateMachines::Transition transition (in StateMachines::Guard guard)
raises (Reflective::MofError);
void add (
in StateMachines::Guard guard,
in StateMachines::Transition transition)
raises (Reflective::MofError);
void modify_guard (
in StateMachines::Guard guard,
in StateMachines::Transition transition,
in StateMachines::Guard new_guard)
raises (Reflective::NotFound, Reflective::MofError);
void modify_transition (
in StateMachines::Guard guard,
in StateMachines::Transition transition,
in StateMachines::Transition new_transition)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in StateMachines::Guard guard,
in StateMachines::Transition transition)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AGuardTransition
struct ASignalOccurrenceLink
{
CommonBehavior::Signal signal;
SignalEvent occurrence;
};
typedef sequence<ASignalOccurrenceLink> ASignalOccurrenceLinkSet;
interface ASignalOccurrence : Reflective::RefAssociation
{
ASignalOccurrenceLinkSet all_a_signal_occurrence_links()
raises (Reflective::MofError);
5-112
OMG-UML V1.3
March 2000
5
boolean exists (
in CommonBehavior::Signal signal,
in SignalEvent occurrence)
raises (Reflective::MofError);
CommonBehavior::Signal signal (in SignalEvent occurrence)
raises (Reflective::MofError);
SignalEventSet occurrence (in CommonBehavior::Signal signal)
raises (Reflective::MofError);
void add (
in CommonBehavior::Signal signal,
in SignalEvent occurrence)
raises (Reflective::MofError);
void modify_signal (
in CommonBehavior::Signal signal,
in SignalEvent occurrence,
in CommonBehavior::Signal new_signal)
raises (Reflective::NotFound, Reflective::MofError);
void modify_occurrence (
in CommonBehavior::Signal signal,
in SignalEvent occurrence,
in SignalEvent new_occurrence)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in CommonBehavior::Signal signal,
in SignalEvent occurrence)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ASignalOccurrence
struct ABehaviorContextLink
{
StateMachine behavior;
Foundation::Core::ModelElement uml_context;
};
typedef sequence<ABehaviorContextLink> ABehaviorContextLinkSet;
interface ABehaviorContext : Reflective::RefAssociation
{
ABehaviorContextLinkSet all_a_behavior_context_links()
raises (Reflective::MofError);
boolean exists (
in StateMachine behavior,
in Foundation::Core::ModelElement uml_context)
raises (Reflective::MofError);
StateMachineSet behavior (in Foundation::Core::ModelElement uml_context)
raises (Reflective::MofError);
Foundation::Core::ModelElement uml_context (in StateMachine behavior)
raises (Reflective::MofError);
void add (
in StateMachine behavior,
in Foundation::Core::ModelElement uml_context)
raises (Reflective::MofError);
void modify_behavior (
in StateMachine behavior,
in Foundation::Core::ModelElement uml_context,
in StateMachine new_behavior)
OMG-UML V1.3
IDL Modules
March 2000
5-113
5
raises (Reflective::NotFound, Reflective::MofError);
void modify_uml_context (
in StateMachine behavior,
in Foundation::Core::ModelElement uml_context,
in Foundation::Core::ModelElement new_uml_context)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in StateMachine behavior,
in Foundation::Core::ModelElement uml_context)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ABehaviorContext
struct ATopStateMachineLink
{
State top;
StateMachine state_machine;
};
typedef sequence<ATopStateMachineLink> ATopStateMachineLinkSet;
interface ATopStateMachine : Reflective::RefAssociation
{
ATopStateMachineLinkSet all_a_top_state_machine_links()
raises (Reflective::MofError);
boolean exists (
in State top,
in StateMachine state_machine)
raises (Reflective::MofError);
State top (in StateMachine state_machine)
raises (Reflective::MofError);
StateMachine state_machine (in State top)
raises (Reflective::MofError);
void add (
in State top,
in StateMachine state_machine)
raises (Reflective::MofError);
void modify_top (
in State top,
in StateMachine state_machine,
in State new_top)
raises (Reflective::NotFound, Reflective::MofError);
void modify_state_machine (
in State top,
in StateMachine state_machine,
in StateMachine new_state_machine)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in State top,
in StateMachine state_machine)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ATopStateMachine
struct AStateDeferrableEventLink
{
StateMachines::State state;
Event deferrable_event;
5-114
OMG-UML V1.3
March 2000
5
};
typedef sequence<AStateDeferrableEventLink> AStateDeferrableEventLinkSet;
interface AStateDeferrableEvent : Reflective::RefAssociation
{
AStateDeferrableEventLinkSet all_a_state_deferrable_event_links()
raises (Reflective::MofError);
boolean exists (
in StateMachines::State state,
in Event deferrable_event)
raises (Reflective::MofError);
StateSet state (in Event deferrable_event)
raises (Reflective::MofError);
EventSet deferrable_event (in StateMachines::State state)
raises (Reflective::MofError);
void add (
in StateMachines::State state,
in Event deferrable_event)
raises (Reflective::MofError);
void modify_state (
in StateMachines::State state,
in Event deferrable_event,
in StateMachines::State new_state)
raises (Reflective::NotFound, Reflective::MofError);
void modify_deferrable_event (
in StateMachines::State state,
in Event deferrable_event,
in Event new_deferrable_event)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in StateMachines::State state,
in Event deferrable_event)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AStateDeferrableEvent
struct AOccurrenceOperationLink
{
CallEvent occurrence;
Foundation::Core::Operation operation;
};
typedef sequence<AOccurrenceOperationLink> AOccurrenceOperationLinkSet;
interface AOccurrenceOperation : Reflective::RefAssociation
{
AOccurrenceOperationLinkSet all_a_occurrence_operation_links()
raises (Reflective::MofError);
boolean exists (
in CallEvent occurrence,
in Foundation::Core::Operation operation)
raises (Reflective::MofError);
CallEventSet occurrence (in Foundation::Core::Operation operation)
raises (Reflective::MofError);
Foundation::Core::Operation operation (in CallEvent occurrence)
raises (Reflective::MofError);
void add (
OMG-UML V1.3
IDL Modules
March 2000
5-115
5
in CallEvent occurrence,
in Foundation::Core::Operation operation)
raises (Reflective::MofError);
void modify_occurrence (
in CallEvent occurrence,
in Foundation::Core::Operation operation,
in CallEvent new_occurrence)
raises (Reflective::NotFound, Reflective::MofError);
void modify_operation (
in CallEvent occurrence,
in Foundation::Core::Operation operation,
in Foundation::Core::Operation new_operation)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in CallEvent occurrence,
in Foundation::Core::Operation operation)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AOccurrenceOperation
struct AContainerSubvertexLink
{
CompositeState container;
StateVertex subvertex;
};
typedef sequence<AContainerSubvertexLink> AContainerSubvertexLinkSet;
interface AContainerSubvertex : Reflective::RefAssociation
{
AContainerSubvertexLinkSet all_a_container_subvertex_links()
raises (Reflective::MofError);
boolean exists (
in CompositeState container,
in StateVertex subvertex)
raises (Reflective::MofError);
CompositeState container (in StateVertex subvertex)
raises (Reflective::MofError);
StateVertexSet subvertex (in CompositeState container)
raises (Reflective::MofError);
void add (
in CompositeState container,
in StateVertex subvertex)
raises (Reflective::MofError);
void modify_container (
in CompositeState container,
in StateVertex subvertex,
in CompositeState new_container)
raises (Reflective::NotFound, Reflective::MofError);
void modify_subvertex (
in CompositeState container,
in StateVertex subvertex,
in StateVertex new_subvertex)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in CompositeState container,
in StateVertex subvertex)
5-116
OMG-UML V1.3
March 2000
5
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AContainerSubvertex
struct ATransitionEffectLink
{
StateMachines::Transition transition;
CommonBehavior::Action effect;
};
typedef sequence<ATransitionEffectLink> ATransitionEffectLinkSet;
interface ATransitionEffect : Reflective::RefAssociation
{
ATransitionEffectLinkSet all_a_transition_effect_links()
raises (Reflective::MofError);
boolean exists (
in StateMachines::Transition transition,
in CommonBehavior::Action effect)
raises (Reflective::MofError);
StateMachines::Transition transition (in CommonBehavior::Action effect)
raises (Reflective::MofError);
CommonBehavior::Action effect (in StateMachines::Transition transition)
raises (Reflective::MofError);
void add (
in StateMachines::Transition transition,
in CommonBehavior::Action effect)
raises (Reflective::MofError);
void modify_transition (
in StateMachines::Transition transition,
in CommonBehavior::Action effect,
in StateMachines::Transition new_transition)
raises (Reflective::NotFound, Reflective::MofError);
void modify_effect (
in StateMachines::Transition transition,
in CommonBehavior::Action effect,
in CommonBehavior::Action new_effect)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in StateMachines::Transition transition,
in CommonBehavior::Action effect)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ATransitionEffect
struct AStateInternalTransitionLink
{
StateMachines::State state;
Transition internal_transition;
};
typedef sequence<AStateInternalTransitionLink> AStateInternalTransitionLinkSet;
interface AStateInternalTransition : Reflective::RefAssociation
{
AStateInternalTransitionLinkSet all_a_state_internal_transition_links()
raises (Reflective::MofError);
boolean exists (
in StateMachines::State state,
OMG-UML V1.3
IDL Modules
March 2000
5-117
5
in Transition internal_transition)
raises (Reflective::MofError);
StateMachines::State state (in Transition internal_transition)
raises (Reflective::MofError);
TransitionSet internal_transition (in StateMachines::State state)
raises (Reflective::MofError);
void add (
in StateMachines::State state,
in Transition internal_transition)
raises (Reflective::MofError);
void modify_state (
in StateMachines::State state,
in Transition internal_transition,
in StateMachines::State new_state)
raises (Reflective::NotFound, Reflective::MofError);
void modify_internal_transition (
in StateMachines::State state,
in Transition internal_transition,
in Transition new_internal_transition)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in StateMachines::State state,
in Transition internal_transition)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AStateInternalTransition
struct ATransitionTriggerLink
{
StateMachines::Transition transition;
Event trigger;
};
typedef sequence<ATransitionTriggerLink> ATransitionTriggerLinkSet;
interface ATransitionTrigger : Reflective::RefAssociation
{
ATransitionTriggerLinkSet all_a_transition_trigger_links()
raises (Reflective::MofError);
boolean exists (
in StateMachines::Transition transition,
in Event trigger)
raises (Reflective::MofError);
TransitionSet transition (in Event trigger)
raises (Reflective::MofError);
Event trigger (in StateMachines::Transition transition)
raises (Reflective::MofError);
void add (
in StateMachines::Transition transition,
in Event trigger)
raises (Reflective::MofError);
void modify_transition (
in StateMachines::Transition transition,
in Event trigger,
in StateMachines::Transition new_transition)
raises (Reflective::NotFound, Reflective::MofError);
void modify_trigger (
5-118
OMG-UML V1.3
March 2000
5
in StateMachines::Transition transition,
in Event trigger,
in Event new_trigger)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in StateMachines::Transition transition,
in Event trigger)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ATransitionTrigger
struct AStateMachineTransitionsLink
{
StateMachine state_machine;
Transition transitions;
};
typedef sequence<AStateMachineTransitionsLink> AStateMachineTransitionsLinkSet;
interface AStateMachineTransitions : Reflective::RefAssociation
{
AStateMachineTransitionsLinkSet all_a_state_machine_transitions_links()
raises (Reflective::MofError);
boolean exists (
in StateMachine state_machine,
in Transition transitions)
raises (Reflective::MofError);
StateMachine state_machine (in Transition transitions)
raises (Reflective::MofError);
TransitionSet transitions (in StateMachine state_machine)
raises (Reflective::MofError);
void add (
in StateMachine state_machine,
in Transition transitions)
raises (Reflective::MofError);
void modify_state_machine (
in StateMachine state_machine,
in Transition transitions,
in StateMachine new_state_machine)
raises (Reflective::NotFound, Reflective::MofError);
void modify_transitions (
in StateMachine state_machine,
in Transition transitions,
in Transition new_transitions)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in StateMachine state_machine,
in Transition transitions)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AStateMachineTransitions
struct AOutgoingSourceLink
{
Transition outgoing;
StateVertex source;
};
typedef sequence<AOutgoingSourceLink> AOutgoingSourceLinkSet;
OMG-UML V1.3
IDL Modules
March 2000
5-119
5
interface AOutgoingSource : Reflective::RefAssociation
{
AOutgoingSourceLinkSet all_a_outgoing_source_links()
raises (Reflective::MofError);
boolean exists (
in Transition outgoing,
in StateVertex source)
raises (Reflective::MofError);
TransitionSet outgoing (in StateVertex source)
raises (Reflective::MofError);
StateVertex source (in Transition outgoing)
raises (Reflective::MofError);
void add (
in Transition outgoing,
in StateVertex source)
raises (Reflective::MofError);
void modify_outgoing (
in Transition outgoing,
in StateVertex source,
in Transition new_outgoing)
raises (Reflective::NotFound, Reflective::MofError);
void modify_source (
in Transition outgoing,
in StateVertex source,
in StateVertex new_source)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Transition outgoing,
in StateVertex source)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AOutgoingSource
struct AIncomingTargetLink
{
Transition incoming;
StateVertex target;
};
typedef sequence<AIncomingTargetLink> AIncomingTargetLinkSet;
interface AIncomingTarget : Reflective::RefAssociation
{
AIncomingTargetLinkSet all_a_incoming_target_links()
raises (Reflective::MofError);
boolean exists (
in Transition incoming,
in StateVertex target)
raises (Reflective::MofError);
TransitionSet incoming (in StateVertex target)
raises (Reflective::MofError);
StateVertex target (in Transition incoming)
raises (Reflective::MofError);
void add (
in Transition incoming,
in StateVertex target)
5-120
OMG-UML V1.3
March 2000
5
raises (Reflective::MofError);
void modify_incoming (
in Transition incoming,
in StateVertex target,
in Transition new_incoming)
raises (Reflective::NotFound, Reflective::MofError);
void modify_target (
in Transition incoming,
in StateVertex target,
in StateVertex new_target)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Transition incoming,
in StateVertex target)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AIncomingTarget
struct ASubMachineStateSubmachineLink
{
SubmachineState sub_machine_state;
StateMachine submachine;
};
typedef sequence<ASubMachineStateSubmachineLink> ASubMachineStateSubmachineLinkSet;
interface ASubMachineStateSubmachine : Reflective::RefAssociation
{
ASubMachineStateSubmachineLinkSet all_a_sub_machine_state_submachine_links()
raises (Reflective::MofError);
boolean exists (
in SubmachineState sub_machine_state,
in StateMachine submachine)
raises (Reflective::MofError);
SubmachineStateSet sub_machine_state (in StateMachine submachine)
raises (Reflective::MofError);
StateMachine submachine (in SubmachineState sub_machine_state)
raises (Reflective::MofError);
void add (
in SubmachineState sub_machine_state,
in StateMachine submachine)
raises (Reflective::MofError);
void modify_sub_machine_state (
in SubmachineState sub_machine_state,
in StateMachine submachine,
in SubmachineState new_sub_machine_state)
raises (Reflective::NotFound, Reflective::MofError);
void modify_submachine (
in SubmachineState sub_machine_state,
in StateMachine submachine,
in StateMachine new_submachine)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in SubmachineState sub_machine_state,
in StateMachine submachine)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ASubMachineStateSubmachine
OMG-UML V1.3
IDL Modules
March 2000
5-121
5
struct AState3DoActivityLink
{
State state3;
CommonBehavior::Action do_activity;
};
typedef sequence<AState3DoActivityLink> AState3DoActivityLinkSet;
interface AState3DoActivity : Reflective::RefAssociation
{
AState3DoActivityLinkSet all_a_state3_do_activity_links()
raises (Reflective::MofError);
boolean exists (
in State state3,
in CommonBehavior::Action do_activity)
raises (Reflective::MofError);
State state3 (in CommonBehavior::Action do_activity)
raises (Reflective::MofError);
CommonBehavior::Action do_activity (in State state3)
raises (Reflective::MofError);
void add (
in State state3,
in CommonBehavior::Action do_activity)
raises (Reflective::MofError);
void modify_state3 (
in State state3,
in CommonBehavior::Action do_activity,
in State new_state3)
raises (Reflective::NotFound, Reflective::MofError);
void modify_do_activity (
in State state3,
in CommonBehavior::Action do_activity,
in CommonBehavior::Action new_do_activity)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in State state3,
in CommonBehavior::Action do_activity)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AState3DoActivity
interface StateMachinesPackage : Reflective::RefPackage
{
readonly attribute StateMachineClass state_machine_ref;
readonly attribute EventClass event_ref;
readonly attribute StateClass state_ref;
readonly attribute TimeEventClass time_event_ref;
readonly attribute CallEventClass call_event_ref;
readonly attribute SignalEventClass signal_event_ref;
readonly attribute TransitionClass transition_ref;
readonly attribute StateVertexClass state_vertex_ref;
readonly attribute CompositeStateClass composite_state_ref;
readonly attribute ChangeEventClass change_event_ref;
readonly attribute GuardClass guard_ref;
readonly attribute PseudostateClass pseudostate_ref;
readonly attribute SimpleStateClass simple_state_ref;
5-122
OMG-UML V1.3
March 2000
5
readonly attribute SubmachineStateClass submachine_state_ref;
readonly attribute SynchStateClass synch_state_ref;
readonly attribute StubStateClass stub_state_ref;
readonly attribute FinalStateClass final_state_ref;
readonly attribute AState1Entry a_state1_entry_ref;
readonly attribute AState2Exit a_state2_exit_ref;
readonly attribute AEventParameter a_event_parameter_ref;
readonly attribute AGuardTransition a_guard_transition_ref;
readonly attribute ASignalOccurrence a_signal_occurrence_ref;
readonly attribute ABehaviorContext a_behavior_context_ref;
readonly attribute ATopStateMachine a_top_state_machine_ref;
readonly attribute AStateDeferrableEvent a_state_deferrable_event_ref;
readonly attribute AOccurrenceOperation a_occurrence_operation_ref;
readonly attribute AContainerSubvertex a_container_subvertex_ref;
readonly attribute ATransitionEffect a_transition_effect_ref;
readonly attribute AStateInternalTransition a_state_internal_transition_ref;
readonly attribute ATransitionTrigger a_transition_trigger_ref;
readonly attribute AStateMachineTransitions a_state_machine_transitions_ref;
readonly attribute AOutgoingSource a_outgoing_source_ref;
readonly attribute AIncomingTarget a_incoming_target_ref;
readonly attribute ASubMachineStateSubmachine a_sub_machine_state_submachine_ref;
readonly attribute AState3DoActivity a_state3_do_activity_ref;
};
}; // end of module StateMachines
module Collaborations
{
interface CollaborationClass;
interface Collaboration;
typedef sequence<Collaboration> CollaborationSet;
interface ClassifierRoleClass;
interface ClassifierRole;
typedef sequence<ClassifierRole> ClassifierRoleSet;
interface AssociationRoleClass;
interface AssociationRole;
typedef sequence<AssociationRole> AssociationRoleSet;
interface AssociationEndRoleClass;
interface AssociationEndRole;
typedef sequence<AssociationEndRole> AssociationEndRoleSet;
interface MessageClass;
interface Message;
typedef sequence<Message> MessageSet;
interface InteractionClass;
interface Interaction;
typedef sequence<Interaction> InteractionSet;
interface CollaborationsPackage;
interface CollaborationClass : Foundation::Core::NamespaceClass,
Foundation::Core::GeneralizableElementClass
{
readonly attribute CollaborationSet all_of_type_collaboration;
readonly attribute CollaborationSet all_of_class_collaboration;
Collaboration create_collaboration (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
OMG-UML V1.3
IDL Modules
March 2000
5-123
5
in boolean is_specification,
in boolean is_root,
in boolean is_leaf,
in boolean is_abstract)
raises (Reflective::MofError);
};
interface Collaboration : CollaborationClass, Foundation::Core::Namespace
Foundation::Core::GeneralizableElement
{
InteractionSet interaction ()
raises (Reflective::MofError);
void set_interaction (in InteractionSet new_value)
raises (Reflective::MofError);
void add_interaction (in Collaborations::Interaction new_element)
raises (Reflective::MofError);
void modify_interaction (
in Collaborations::Interaction old_element,
in Collaborations::Interaction new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_interaction (in Collaborations::Interaction old_element)
raises (Reflective::NotFound, Reflective::MofError);
Foundation::Core::Classifier represented_classifier ()
raises (Reflective::NotSet, Reflective::MofError);
void set_represented_classifier (in Foundation::Core::Classifier new_value)
raises (Reflective::MofError);
void unset_represented_classifier ()
raises (Reflective::MofError);
Foundation::Core::Operation represented_operation ()
raises (Reflective::NotSet, Reflective::MofError);
void set_represented_operation (in Foundation::Core::Operation new_value)
raises (Reflective::MofError);
void unset_represented_operation ()
raises (Reflective::MofError);
ModelElementSet constraining_element ()
raises (Reflective::MofError);
void set_constraining_element (in ModelElementSet new_value)
raises (Reflective::MofError);
void add_constraining_element (in Foundation::Core::ModelElement new_element)
raises (Reflective::MofError);
void modify_constraining_element (
in Foundation::Core::ModelElement old_element,
in Foundation::Core::ModelElement new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_constraining_element (in Foundation::Core::ModelElement old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface Collaboration
interface ClassifierRoleClass : Foundation::Core::ClassifierClass
{
readonly attribute ClassifierRoleSet all_of_type_classifier_role;
readonly attribute ClassifierRoleSet all_of_class_classifier_role;
ClassifierRole create_classifier_role (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
5-124
OMG-UML V1.3
March 2000
5
in boolean is_specification,
in boolean is_root,
in boolean is_leaf,
in boolean is_abstract,
in Foundation::DataTypes::Multiplicity multiplicity)
raises (Reflective::MofError);
};
interface ClassifierRole : ClassifierRoleClass, Foundation::Core::Classifier
{
Foundation::DataTypes::Multiplicity multiplicity ()
raises (Reflective::MofError);
void set_multiplicity (in Foundation::DataTypes::Multiplicity new_value)
raises (Reflective::MofError);
ClassifierSet base ()
raises (Reflective::MofError);
void set_base (in ClassifierSet new_value)
raises (Reflective::MofError);
void add_base (in Foundation::Core::Classifier new_element)
raises (Reflective::MofError);
void modify_base (
in Foundation::Core::Classifier old_element,
in Foundation::Core::Classifier new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_base (in Foundation::Core::Classifier old_element)
raises (Reflective::NotFound, Reflective::MofError);
FeatureSet available_feature ()
raises (Reflective::MofError);
void set_available_feature (in FeatureSet new_value)
raises (Reflective::MofError);
void add_available_feature (in Foundation::Core::Feature new_element)
raises (Reflective::MofError);
void modify_available_feature (
in Foundation::Core::Feature old_element,
in Foundation::Core::Feature new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_available_feature (in Foundation::Core::Feature old_element)
raises (Reflective::NotFound, Reflective::MofError);
MessageSet message2 ()
raises (Reflective::MofError);
void set_message2 (in MessageSet new_value)
raises (Reflective::MofError);
void add_message2 (in Message new_element)
raises (Reflective::MofError);
void modify_message2 (
in Message old_element,
in Message new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_message2 (in Message old_element)
raises (Reflective::NotFound, Reflective::MofError);
MessageSet message1 ()
raises (Reflective::MofError);
void set_message1 (in MessageSet new_value)
raises (Reflective::MofError);
void add_message1 (in Message new_element)
OMG-UML V1.3
IDL Modules
March 2000
5-125
5
raises (Reflective::MofError);
void modify_message1 (
in Message old_element,
in Message new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_message1 (in Message old_element)
raises (Reflective::NotFound, Reflective::MofError);
ModelElementSet available_contents ()
raises (Reflective::MofError);
void set_available_contents (in ModelElementSet new_value)
raises (Reflective::MofError);
void add_available_contents (in Foundation::Core::ModelElement new_element)
raises (Reflective::MofError);
void modify_available_contents (
in Foundation::Core::ModelElement old_element,
in Foundation::Core::ModelElement new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_available_contents (in Foundation::Core::ModelElement old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ClassifierRole
interface AssociationRoleClass : Foundation::Core::AssociationClass
{
readonly attribute AssociationRoleSet all_of_type_association_role;
readonly attribute AssociationRoleSet all_of_class_association_role;
AssociationRole create_association_role (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in boolean is_root,
in boolean is_leaf,
in boolean is_abstract,
in Foundation::DataTypes::Multiplicity multiplicity)
raises (Reflective::MofError);
};
interface AssociationRole : AssociationRoleClass, Foundation::Core::Association
{
Foundation::DataTypes::Multiplicity multiplicity ()
raises (Reflective::MofError);
void set_multiplicity (in Foundation::DataTypes::Multiplicity new_value)
raises (Reflective::MofError);
Foundation::Core::Association base ()
raises (Reflective::NotSet, Reflective::MofError);
void set_base (in Foundation::Core::Association new_value)
raises (Reflective::MofError);
void unset_base ()
raises (Reflective::MofError);
MessageSet message ()
raises (Reflective::MofError);
void set_message (in MessageSet new_value)
raises (Reflective::MofError);
void add_message (in Collaborations::Message new_element)
raises (Reflective::MofError);
void modify_message (
5-126
OMG-UML V1.3
March 2000
5
in Collaborations::Message old_element,
in Collaborations::Message new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_message (in Collaborations::Message old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AssociationRole
interface AssociationEndRoleClass : Foundation::Core::AssociationEndClass
{
readonly attribute AssociationEndRoleSet all_of_type_association_end_role;
readonly attribute AssociationEndRoleSet all_of_class_association_end_role;
AssociationEndRole create_association_end_role (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in boolean is_navigable,
in Foundation::DataTypes::OrderingKind ordering,
in Foundation::DataTypes::AggregationKind aggregation,
in Foundation::DataTypes::ScopeKind target_scope,
in Foundation::DataTypes::Multiplicity multiplicity,
in Foundation::DataTypes::ChangeableKind changeability,
in Foundation::DataTypes::Multiplicity collaboration_multiplicity)
raises (Reflective::MofError);
};
interface AssociationEndRole : AssociationEndRoleClass, Foundation::Core::AssociationEnd
{
Foundation::DataTypes::Multiplicity collaboration_multiplicity ()
raises (Reflective::MofError);
void set_collaboration_multiplicity (in Foundation::DataTypes::Multiplicity new_value)
raises (Reflective::MofError);
Foundation::Core::AssociationEnd base ()
raises (Reflective::NotSet, Reflective::MofError);
void set_base (in Foundation::Core::AssociationEnd new_value)
raises (Reflective::MofError);
void unset_base ()
raises (Reflective::MofError);
UmlAttributeSet available_qualifier ()
raises (Reflective::MofError);
void set_available_qualifier (in UmlAttributeSet new_value)
raises (Reflective::MofError);
void add_available_qualifier (in Foundation::Core::UmlAttribute new_element)
raises (Reflective::MofError);
void modify_available_qualifier (
in Foundation::Core::UmlAttribute old_element,
in Foundation::Core::UmlAttribute new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_available_qualifier (in Foundation::Core::UmlAttribute old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AssociationEndRole
interface MessageClass : Foundation::Core::ModelElementClass
{
readonly attribute MessageSet all_of_type_message;
readonly attribute MessageSet all_of_class_message;
OMG-UML V1.3
IDL Modules
March 2000
5-127
5
Message create_message (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification)
raises (Reflective::MofError);
};
interface Message : MessageClass, Foundation::Core::ModelElement
{
Collaborations::Interaction interaction ()
raises (Reflective::MofError);
void set_interaction (in Collaborations::Interaction new_value)
raises (Reflective::MofError);
Message activator ()
raises (Reflective::NotSet, Reflective::MofError);
void set_activator (in Message new_value)
raises (Reflective::MofError);
void unset_activator ()
raises (Reflective::MofError);
MessageSet message4 ()
raises (Reflective::MofError);
void set_message4 (in MessageSet new_value)
raises (Reflective::MofError);
void add_message4 (in Message new_element)
raises (Reflective::MofError);
void modify_message4 (
in Message old_element,
in Message new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_message4 (in Message old_element)
raises (Reflective::NotFound, Reflective::MofError);
ClassifierRole sender ()
raises (Reflective::MofError);
void set_sender (in ClassifierRole new_value)
raises (Reflective::MofError);
ClassifierRole receiver ()
raises (Reflective::MofError);
void set_receiver (in ClassifierRole new_value)
raises (Reflective::MofError);
MessageSet message3 ()
raises (Reflective::MofError);
void set_message3 (in MessageSet new_value)
raises (Reflective::MofError);
void add_message3 (in Message new_element)
raises (Reflective::MofError);
void modify_message3 (
in Message old_element,
in Message new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_message3 (in Message old_element)
raises (Reflective::NotFound, Reflective::MofError);
MessageSet predecessor ()
raises (Reflective::MofError);
void set_predecessor (in MessageSet new_value)
raises (Reflective::MofError);
5-128
OMG-UML V1.3
March 2000
5
void add_predecessor (in Message new_element)
raises (Reflective::MofError);
void modify_predecessor (
in Message old_element,
in Message new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_predecessor (in Message old_element)
raises (Reflective::NotFound, Reflective::MofError);
AssociationRole communication_connection ()
raises (Reflective::NotSet, Reflective::MofError);
void set_communication_connection (in AssociationRole new_value)
raises (Reflective::MofError);
void unset_communication_connection ()
raises (Reflective::MofError);
CommonBehavior::Action action ()
raises (Reflective::MofError);
void set_action (in CommonBehavior::Action new_value)
raises (Reflective::MofError);
}; // end of interface Message
interface InteractionClass : Foundation::Core::ModelElementClass
{
readonly attribute InteractionSet all_of_type_interaction;
readonly attribute InteractionSet all_of_class_interaction;
Interaction create_interaction (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification)
raises (Reflective::MofError);
};
interface Interaction : InteractionClass, Foundation::Core::ModelElement
{
MessageSet message ()
raises (Reflective::MofError);
void set_message (in MessageSet new_value)
raises (Reflective::MofError);
void add_message (in Collaborations::Message new_element)
raises (Reflective::MofError);
void modify_message (
in Collaborations::Message old_element,
in Collaborations::Message new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_message (in Collaborations::Message old_element)
raises (Reflective::NotFound, Reflective::MofError);
Collaboration uml_context ()
raises (Reflective::MofError);
void set_uml_context (in Collaboration new_value)
raises (Reflective::MofError);
}; // end of interface Interaction
struct AInteractionMessageLink
{
Collaborations::Interaction interaction;
Collaborations::Message message;
OMG-UML V1.3
IDL Modules
March 2000
5-129
5
};
typedef sequence<AInteractionMessageLink> AInteractionMessageLinkSet;
interface AInteractionMessage : Reflective::RefAssociation
{
AInteractionMessageLinkSet all_a_interaction_message_links()
raises (Reflective::MofError);
boolean exists (
in Collaborations::Interaction interaction,
in Collaborations::Message message)
raises (Reflective::MofError);
Collaborations::Interaction interaction (in Collaborations::Message message)
raises (Reflective::MofError);
MessageSet message (in Collaborations::Interaction interaction)
raises (Reflective::MofError);
void add (
in Collaborations::Interaction interaction,
in Collaborations::Message message)
raises (Reflective::MofError);
void modify_interaction (
in Collaborations::Interaction interaction,
in Collaborations::Message message,
in Collaborations::Interaction new_interaction)
raises (Reflective::NotFound, Reflective::MofError);
void modify_message (
in Collaborations::Interaction interaction,
in Collaborations::Message message,
in Collaborations::Message new_message)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Collaborations::Interaction interaction,
in Collaborations::Message message)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AInteractionMessage
struct AContextInteractionLink
{
Collaboration uml_context;
Collaborations::Interaction interaction;
};
typedef sequence<AContextInteractionLink> AContextInteractionLinkSet;
interface AContextInteraction : Reflective::RefAssociation
{
AContextInteractionLinkSet all_a_context_interaction_links()
raises (Reflective::MofError);
boolean exists (
in Collaboration uml_context,
in Collaborations::Interaction interaction)
raises (Reflective::MofError);
Collaboration uml_context (in Collaborations::Interaction interaction)
raises (Reflective::MofError);
InteractionSet interaction (in Collaboration uml_context)
raises (Reflective::MofError);
void add (
5-130
OMG-UML V1.3
March 2000
5
in Collaboration uml_context,
in Collaborations::Interaction interaction)
raises (Reflective::MofError);
void modify_uml_context (
in Collaboration uml_context,
in Collaborations::Interaction interaction,
in Collaboration new_uml_context)
raises (Reflective::NotFound, Reflective::MofError);
void modify_interaction (
in Collaboration uml_context,
in Collaborations::Interaction interaction,
in Collaborations::Interaction new_interaction)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Collaboration uml_context,
in Collaborations::Interaction interaction)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AContextInteraction
struct AClassifierRoleBaseLink
{
ClassifierRole classifier_role;
Foundation::Core::Classifier base;
};
typedef sequence<AClassifierRoleBaseLink> AClassifierRoleBaseLinkSet;
interface AClassifierRoleBase : Reflective::RefAssociation
{
AClassifierRoleBaseLinkSet all_a_classifier_role_base_links()
raises (Reflective::MofError);
boolean exists (
in ClassifierRole classifier_role,
in Foundation::Core::Classifier base)
raises (Reflective::MofError);
ClassifierRoleSet classifier_role (in Foundation::Core::Classifier base)
raises (Reflective::MofError);
ClassifierSet base (in ClassifierRole classifier_role)
raises (Reflective::MofError);
void add (
in ClassifierRole classifier_role,
in Foundation::Core::Classifier base)
raises (Reflective::MofError);
void modify_classifier_role (
in ClassifierRole classifier_role,
in Foundation::Core::Classifier base,
in ClassifierRole new_classifier_role)
raises (Reflective::NotFound, Reflective::MofError);
void modify_base (
in ClassifierRole classifier_role,
in Foundation::Core::Classifier base,
in Foundation::Core::Classifier new_base)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in ClassifierRole classifier_role,
in Foundation::Core::Classifier base)
OMG-UML V1.3
IDL Modules
March 2000
5-131
5
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AClassifierRoleBase
struct ABaseAssociationEndRoleLink
{
Foundation::Core::AssociationEnd base;
AssociationEndRole association_end_role;
};
typedef sequence<ABaseAssociationEndRoleLink> ABaseAssociationEndRoleLinkSet;
interface ABaseAssociationEndRole : Reflective::RefAssociation
{
ABaseAssociationEndRoleLinkSet all_a_base_association_end_role_links()
raises (Reflective::MofError);
boolean exists (
in Foundation::Core::AssociationEnd base,
in AssociationEndRole association_end_role)
raises (Reflective::MofError);
Foundation::Core::AssociationEnd base (in AssociationEndRole association_end_role)
raises (Reflective::MofError);
AssociationEndRoleSet association_end_role (in Foundation::Core::AssociationEnd base)
raises (Reflective::MofError);
void add (
in Foundation::Core::AssociationEnd base,
in AssociationEndRole association_end_role)
raises (Reflective::MofError);
void modify_base (
in Foundation::Core::AssociationEnd base,
in AssociationEndRole association_end_role,
in Foundation::Core::AssociationEnd new_base)
raises (Reflective::NotFound, Reflective::MofError);
void modify_association_end_role (
in Foundation::Core::AssociationEnd base,
in AssociationEndRole association_end_role,
in AssociationEndRole new_association_end_role)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Foundation::Core::AssociationEnd base,
in AssociationEndRole association_end_role)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ABaseAssociationEndRole
struct ABaseAssociationRoleLink
{
Foundation::Core::Association base;
AssociationRole association_role;
};
typedef sequence<ABaseAssociationRoleLink> ABaseAssociationRoleLinkSet;
interface ABaseAssociationRole : Reflective::RefAssociation
{
ABaseAssociationRoleLinkSet all_a_base_association_role_links()
raises (Reflective::MofError);
boolean exists (
in Foundation::Core::Association base,
5-132
OMG-UML V1.3
March 2000
5
in AssociationRole association_role)
raises (Reflective::MofError);
Foundation::Core::Association base (in AssociationRole association_role)
raises (Reflective::MofError);
AssociationRoleSet association_role (in Foundation::Core::Association base)
raises (Reflective::MofError);
void add (
in Foundation::Core::Association base,
in AssociationRole association_role)
raises (Reflective::MofError);
void modify_base (
in Foundation::Core::Association base,
in AssociationRole association_role,
in Foundation::Core::Association new_base)
raises (Reflective::NotFound, Reflective::MofError);
void modify_association_role (
in Foundation::Core::Association base,
in AssociationRole association_role,
in AssociationRole new_association_role)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Foundation::Core::Association base,
in AssociationRole association_role)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ABaseAssociationRole
struct AClassifierRoleAvailableFeatureLink
{
ClassifierRole classifier_role;
Foundation::Core::Feature available_feature;
};
typedef sequence<AClassifierRoleAvailableFeatureLink> AClassifierRoleAvailableFeatureLinkSet;
interface AClassifierRoleAvailableFeature : Reflective::RefAssociation
{
AClassifierRoleAvailableFeatureLinkSet all_a_classifier_role_available_feature_links()
raises (Reflective::MofError);
boolean exists (
in ClassifierRole classifier_role,
in Foundation::Core::Feature available_feature)
raises (Reflective::MofError);
ClassifierRoleSet classifier_role (in Foundation::Core::Feature available_feature)
raises (Reflective::MofError);
FeatureSet available_feature (in ClassifierRole classifier_role)
raises (Reflective::MofError);
void add (
in ClassifierRole classifier_role,
in Foundation::Core::Feature available_feature)
raises (Reflective::MofError);
void modify_classifier_role (
in ClassifierRole classifier_role,
in Foundation::Core::Feature available_feature,
in ClassifierRole new_classifier_role)
raises (Reflective::NotFound, Reflective::MofError);
void modify_available_feature (
OMG-UML V1.3
IDL Modules
March 2000
5-133
5
in ClassifierRole classifier_role,
in Foundation::Core::Feature available_feature,
in Foundation::Core::Feature new_available_feature)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in ClassifierRole classifier_role,
in Foundation::Core::Feature available_feature)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AClassifierRoleAvailableFeature
struct AMessage4ActivatorLink
{
Message message4;
Message activator;
};
typedef sequence<AMessage4ActivatorLink> AMessage4ActivatorLinkSet;
interface AMessage4Activator : Reflective::RefAssociation
{
AMessage4ActivatorLinkSet all_a_message4_activator_links()
raises (Reflective::MofError);
boolean exists (
in Message message4,
in Message activator)
raises (Reflective::MofError);
MessageSet message4 (in Message activator)
raises (Reflective::MofError);
Message activator (in Message message4)
raises (Reflective::MofError);
void add (
in Message message4,
in Message activator)
raises (Reflective::MofError);
void modify_message4 (
in Message message4,
in Message activator,
in Message new_message4)
raises (Reflective::NotFound, Reflective::MofError);
void modify_activator (
in Message message4,
in Message activator,
in Message new_activator)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Message message4,
in Message activator)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AMessage4Activator
struct ACollaborationRepresentedClassifierLink
{
Collaborations::Collaboration collaboration;
Foundation::Core::Classifier represented_classifier;
};
typedef sequence<ACollaborationRepresentedClassifierLink> ACollaborationRepresentedClassifierLinkSet;
5-134
OMG-UML V1.3
March 2000
5
interface ACollaborationRepresentedClassifier : Reflective::RefAssociation
{
ACollaborationRepresentedClassifierLinkSet all_a_collaboration_represented_classifier_links()
raises (Reflective::MofError);
boolean exists (
in Collaborations::Collaboration collaboration,
in Foundation::Core::Classifier represented_classifier)
raises (Reflective::MofError);
CollaborationSet collaboration (in Foundation::Core::Classifier represented_classifier)
raises (Reflective::MofError);
Foundation::Core::Classifier represented_classifier (in Collaborations::Collaboration collaboration)
raises (Reflective::MofError);
void add (
in Collaborations::Collaboration collaboration,
in Foundation::Core::Classifier represented_classifier)
raises (Reflective::MofError);
void modify_collaboration (
in Collaborations::Collaboration collaboration,
in Foundation::Core::Classifier represented_classifier,
in Collaborations::Collaboration new_collaboration)
raises (Reflective::NotFound, Reflective::MofError);
void modify_represented_classifier (
in Collaborations::Collaboration collaboration,
in Foundation::Core::Classifier represented_classifier,
in Foundation::Core::Classifier new_represented_classifier)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Collaborations::Collaboration collaboration,
in Foundation::Core::Classifier represented_classifier)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ACollaborationRepresentedClassifier
struct AMessage2SenderLink
{
Message message2;
ClassifierRole sender;
};
typedef sequence<AMessage2SenderLink> AMessage2SenderLinkSet;
interface AMessage2Sender : Reflective::RefAssociation
{
AMessage2SenderLinkSet all_a_message2_sender_links()
raises (Reflective::MofError);
boolean exists (
in Message message2,
in ClassifierRole sender)
raises (Reflective::MofError);
MessageSet message2 (in ClassifierRole sender)
raises (Reflective::MofError);
ClassifierRole sender (in Message message2)
raises (Reflective::MofError);
void add (
in Message message2,
in ClassifierRole sender)
OMG-UML V1.3
IDL Modules
March 2000
5-135
5
raises (Reflective::MofError);
void modify_message2 (
in Message message2,
in ClassifierRole sender,
in Message new_message2)
raises (Reflective::NotFound, Reflective::MofError);
void modify_sender (
in Message message2,
in ClassifierRole sender,
in ClassifierRole new_sender)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Message message2,
in ClassifierRole sender)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AMessage2Sender
struct AReceiverMessage1Link
{
ClassifierRole receiver;
Message message1;
};
typedef sequence<AReceiverMessage1Link> AReceiverMessage1LinkSet;
interface AReceiverMessage1 : Reflective::RefAssociation
{
AReceiverMessage1LinkSet all_a_receiver_message1_links()
raises (Reflective::MofError);
boolean exists (
in ClassifierRole receiver,
in Message message1)
raises (Reflective::MofError);
ClassifierRole receiver (in Message message1)
raises (Reflective::MofError);
MessageSet message1 (in ClassifierRole receiver)
raises (Reflective::MofError);
void add (
in ClassifierRole receiver,
in Message message1)
raises (Reflective::MofError);
void modify_receiver (
in ClassifierRole receiver,
in Message message1,
in ClassifierRole new_receiver)
raises (Reflective::NotFound, Reflective::MofError);
void modify_message1 (
in ClassifierRole receiver,
in Message message1,
in Message new_message1)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in ClassifierRole receiver,
in Message message1)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AReceiverMessage1
5-136
OMG-UML V1.3
March 2000
5
struct APredecessorMessage3Link
{
Message predecessor;
Message message3;
};
typedef sequence<APredecessorMessage3Link> APredecessorMessage3LinkSet;
interface APredecessorMessage3 : Reflective::RefAssociation
{
APredecessorMessage3LinkSet all_a_predecessor_message3_links()
raises (Reflective::MofError);
boolean exists (
in Message predecessor,
in Message message3)
raises (Reflective::MofError);
MessageSet predecessor (in Message message3)
raises (Reflective::MofError);
MessageSet message3 (in Message predecessor)
raises (Reflective::MofError);
void add (
in Message predecessor,
in Message message3)
raises (Reflective::MofError);
void modify_predecessor (
in Message predecessor,
in Message message3,
in Message new_predecessor)
raises (Reflective::NotFound, Reflective::MofError);
void modify_message3 (
in Message predecessor,
in Message message3,
in Message new_message3)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Message predecessor,
in Message message3)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface APredecessorMessage3
struct AMessageCommunicationConnectionLink
{
Collaborations::Message message;
AssociationRole communication_connection;
};
typedef sequence<AMessageCommunicationConnectionLink> AMessageCommunicationConnectionLinkSet;
interface AMessageCommunicationConnection : Reflective::RefAssociation
{
AMessageCommunicationConnectionLinkSet all_a_message_communication_connection_links()
raises (Reflective::MofError);
boolean exists (
in Collaborations::Message message,
in AssociationRole communication_connection)
raises (Reflective::MofError);
OMG-UML V1.3
IDL Modules
March 2000
5-137
5
MessageSet message (in AssociationRole communication_connection)
raises (Reflective::MofError);
AssociationRole communication_connection (in Collaborations::Message message)
raises (Reflective::MofError);
void add (
in Collaborations::Message message,
in AssociationRole communication_connection)
raises (Reflective::MofError);
void modify_message (
in Collaborations::Message message,
in AssociationRole communication_connection,
in Collaborations::Message new_message)
raises (Reflective::NotFound, Reflective::MofError);
void modify_communication_connection (
in Collaborations::Message message,
in AssociationRole communication_connection,
in AssociationRole new_communication_connection)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Collaborations::Message message,
in AssociationRole communication_connection)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AMessageCommunicationConnection
struct AClassifierRoleAvailableContentsLink
{
ClassifierRole classifier_role;
Foundation::Core::ModelElement available_contents;
};
typedef sequence<AClassifierRoleAvailableContentsLink> AClassifierRoleAvailableContentsLinkSet;
interface AClassifierRoleAvailableContents : Reflective::RefAssociation
{
AClassifierRoleAvailableContentsLinkSet all_a_classifier_role_available_contents_links()
raises (Reflective::MofError);
boolean exists (
in ClassifierRole classifier_role,
in Foundation::Core::ModelElement available_contents)
raises (Reflective::MofError);
ClassifierRoleSet classifier_role (in Foundation::Core::ModelElement available_contents)
raises (Reflective::MofError);
ModelElementSet available_contents (in ClassifierRole classifier_role)
raises (Reflective::MofError);
void add (
in ClassifierRole classifier_role,
in Foundation::Core::ModelElement available_contents)
raises (Reflective::MofError);
void modify_classifier_role (
in ClassifierRole classifier_role,
in Foundation::Core::ModelElement available_contents,
in ClassifierRole new_classifier_role)
raises (Reflective::NotFound, Reflective::MofError);
void modify_available_contents (
in ClassifierRole classifier_role,
in Foundation::Core::ModelElement available_contents,
5-138
OMG-UML V1.3
March 2000
5
in Foundation::Core::ModelElement new_available_contents)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in ClassifierRole classifier_role,
in Foundation::Core::ModelElement available_contents)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AClassifierRoleAvailableContents
struct AActionMessageLink
{
CommonBehavior::Action action;
Collaborations::Message message;
};
typedef sequence<AActionMessageLink> AActionMessageLinkSet;
interface AActionMessage : Reflective::RefAssociation
{
AActionMessageLinkSet all_a_action_message_links()
raises (Reflective::MofError);
boolean exists (
in CommonBehavior::Action action,
in Collaborations::Message message)
raises (Reflective::MofError);
CommonBehavior::Action action (in Collaborations::Message message)
raises (Reflective::MofError);
MessageSet message (in CommonBehavior::Action action)
raises (Reflective::MofError);
void add (
in CommonBehavior::Action action,
in Collaborations::Message message)
raises (Reflective::MofError);
void modify_action (
in CommonBehavior::Action action,
in Collaborations::Message message,
in CommonBehavior::Action new_action)
raises (Reflective::NotFound, Reflective::MofError);
void modify_message (
in CommonBehavior::Action action,
in Collaborations::Message message,
in Collaborations::Message new_message)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in CommonBehavior::Action action,
in Collaborations::Message message)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AActionMessage
struct AAssociationEndRoleAvailableQualifierLink
{
AssociationEndRole association_end_role;
Foundation::Core::UmlAttribute available_qualifier;
};
typedef sequence<AAssociationEndRoleAvailableQualifierLink> AAssociationEndRoleAvailableQualifierLinkSet;
interface AAssociationEndRoleAvailableQualifier : Reflective::RefAssociation
OMG-UML V1.3
IDL Modules
March 2000
5-139
5
{
AAssociationEndRoleAvailableQualifierLinkSet all_a_association_end_role_available_qualifier_links()
raises (Reflective::MofError);
boolean exists (
in AssociationEndRole association_end_role,
in Foundation::Core::UmlAttribute available_qualifier)
raises (Reflective::MofError);
AssociationEndRoleSet association_end_role (in Foundation::Core::UmlAttribute available_qualifier)
raises (Reflective::MofError);
UmlAttributeSet available_qualifier (in AssociationEndRole association_end_role)
raises (Reflective::MofError);
void add (
in AssociationEndRole association_end_role,
in Foundation::Core::UmlAttribute available_qualifier)
raises (Reflective::MofError);
void modify_association_end_role (
in AssociationEndRole association_end_role,
in Foundation::Core::UmlAttribute available_qualifier,
in AssociationEndRole new_association_end_role)
raises (Reflective::NotFound, Reflective::MofError);
void modify_available_qualifier (
in AssociationEndRole association_end_role,
in Foundation::Core::UmlAttribute available_qualifier,
in Foundation::Core::UmlAttribute new_available_qualifier)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in AssociationEndRole association_end_role,
in Foundation::Core::UmlAttribute available_qualifier)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AAssociationEndRoleAvailableQualifier
struct ARepresentedOperationCollaborationLink
{
Foundation::Core::Operation represented_operation;
Collaborations::Collaboration collaboration;
};
typedef sequence<ARepresentedOperationCollaborationLink>
ARepresentedOperationCollaborationLinkSet;
interface ARepresentedOperationCollaboration : Reflective::RefAssociation
{
ARepresentedOperationCollaborationLinkSet all_a_represented_operation_collaboration_links()
raises (Reflective::MofError);
boolean exists (
in Foundation::Core::Operation represented_operation,
in Collaborations::Collaboration collaboration)
raises (Reflective::MofError);
Foundation::Core::Operation represented_operation (in Collaborations::Collaboration collaboration)
raises (Reflective::MofError);
CollaborationSet collaboration (in Foundation::Core::Operation represented_operation)
raises (Reflective::MofError);
void add (
in Foundation::Core::Operation represented_operation,
in Collaborations::Collaboration collaboration)
raises (Reflective::MofError);
5-140
OMG-UML V1.3
March 2000
5
void modify_represented_operation (
in Foundation::Core::Operation represented_operation,
in Collaborations::Collaboration collaboration,
in Foundation::Core::Operation new_represented_operation)
raises (Reflective::NotFound, Reflective::MofError);
void modify_collaboration (
in Foundation::Core::Operation represented_operation,
in Collaborations::Collaboration collaboration,
in Collaborations::Collaboration new_collaboration)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Foundation::Core::Operation represented_operation,
in Collaborations::Collaboration collaboration)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ARepresentedOperationCollaboration
struct ACollaborationConstrainingElementLink
{
Collaborations::Collaboration collaboration;
Foundation::Core::ModelElement constraining_element;
};
typedef sequence<ACollaborationConstrainingElementLink>
ACollaborationConstrainingElementLinkSet;
interface ACollaborationConstrainingElement : Reflective::RefAssociation
{
ACollaborationConstrainingElementLinkSet all_a_collaboration_constraining_element_links()
raises (Reflective::MofError);
boolean exists (
in Collaborations::Collaboration collaboration,
in Foundation::Core::ModelElement constraining_element)
raises (Reflective::MofError);
CollaborationSet collaboration (in Foundation::Core::ModelElement constraining_element)
raises (Reflective::MofError);
ModelElementSet constraining_element (in Collaborations::Collaboration collaboration)
raises (Reflective::MofError);
void add (
in Collaborations::Collaboration collaboration,
in Foundation::Core::ModelElement constraining_element)
raises (Reflective::MofError);
void modify_collaboration (
in Collaborations::Collaboration collaboration,
in Foundation::Core::ModelElement constraining_element,
in Collaborations::Collaboration new_collaboration)
raises (Reflective::NotFound, Reflective::MofError);
void modify_constraining_element (
in Collaborations::Collaboration collaboration,
in Foundation::Core::ModelElement constraining_element,
in Foundation::Core::ModelElement new_constraining_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Collaborations::Collaboration collaboration,
in Foundation::Core::ModelElement constraining_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ACollaborationConstrainingElement
OMG-UML V1.3
IDL Modules
March 2000
5-141
5
interface CollaborationsPackage : Reflective::RefPackage
{
readonly attribute CollaborationClass collaboration_ref;
readonly attribute ClassifierRoleClass classifier_role_ref;
readonly attribute AssociationRoleClass association_role_ref;
readonly attribute AssociationEndRoleClass association_end_role_ref;
readonly attribute MessageClass message_ref;
readonly attribute InteractionClass interaction_ref;
readonly attribute AInteractionMessage a_interaction_message_ref;
readonly attribute AContextInteraction a_context_interaction_ref;
readonly attribute AClassifierRoleBase a_classifier_role_base_ref;
readonly attribute ABaseAssociationEndRole a_base_association_end_role_ref;
readonly attribute ABaseAssociationRole a_base_association_role_ref;
readonly attribute AClassifierRoleAvailableFeature a_classifier_role_available_feature_ref;
readonly attribute AMessage4Activator a_message4_activator_ref;
readonly attribute ACollaborationRepresentedClassifier a_collaboration_represented_classifier_ref;
readonly attribute AMessage2Sender a_message2_sender_ref;
readonly attribute AReceiverMessage1 a_receiver_message1_ref;
readonly attribute APredecessorMessage3 a_predecessor_message3_ref;
readonly attribute AMessageCommunicationConnection
a_message_communication_connection_ref;
readonly attribute AClassifierRoleAvailableContents a_classifier_role_available_contents_ref;
readonly attribute AActionMessage a_action_message_ref;
readonly attribute AAssociationEndRoleAvailableQualifier
a_association_end_role_available_qualifier_ref;
readonly attribute ARepresentedOperationCollaboration a_represented_operation_collaboration_ref;
readonly attribute ACollaborationConstrainingElement a_collaboration_constraining_element_ref;
};
}; // end of module Collaborations
module ActivityGraphs
{
interface ActivityGraphClass;
interface ActivityGraph;
typedef sequence<ActivityGraph> ActivityGraphSet;
interface PartitionClass;
interface Partition;
typedef sequence<Partition> PartitionSet;
interface SubactivityStateClass;
interface SubactivityState;
typedef sequence<SubactivityState> SubactivityStateSet;
interface CallStateClass;
interface CallState;
typedef sequence<CallState> CallStateSet;
interface ObjectFlowStateClass;
interface ObjectFlowState;
typedef sequence<ObjectFlowState> ObjectFlowStateSet;
interface ClassifierInStateClass;
interface ClassifierInState;
typedef sequence<ClassifierInState> ClassifierInStateSet;
interface ActionStateClass;
interface ActionState;
typedef sequence<ActionState> ActionStateSet;
interface ActivityGraphsPackage;
5-142
OMG-UML V1.3
March 2000
5
interface ActivityGraphClass : StateMachines::StateMachineClass
{
readonly attribute ActivityGraphSet all_of_type_activity_graph;
readonly attribute ActivityGraphSet all_of_class_activity_graph;
ActivityGraph create_activity_graph (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification)
raises (Reflective::MofError);
};
interface ActivityGraph : ActivityGraphClass, StateMachines::StateMachine
{
PartitionSet partition ()
raises (Reflective::MofError);
void set_partition (in PartitionSet new_value)
raises (Reflective::MofError);
void unset_partition ()
raises (Reflective::MofError);
void add_partition (in ActivityGraphs::Partition new_element)
raises (Reflective::MofError);
void modify_partition (
in ActivityGraphs::Partition old_element,
in ActivityGraphs::Partition new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_partition (in ActivityGraphs::Partition old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ActivityGraph
interface PartitionClass : Foundation::Core::ModelElementClass
{
readonly attribute PartitionSet all_of_type_partition;
readonly attribute PartitionSet all_of_class_partition;
Partition create_partition (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification)
raises (Reflective::MofError);
};
interface Partition : PartitionClass, Foundation::Core::ModelElement
{
ModelElementSet contents ()
raises (Reflective::MofError);
void set_contents (in ModelElementSet new_value)
raises (Reflective::MofError);
void add_contents (in Foundation::Core::ModelElement new_element)
raises (Reflective::MofError);
void modify_contents (
in Foundation::Core::ModelElement old_element,
in Foundation::Core::ModelElement new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_contents (in Foundation::Core::ModelElement old_element)
raises (Reflective::NotFound, Reflective::MofError);
OMG-UML V1.3
IDL Modules
March 2000
5-143
5
ActivityGraph activity_graph ()
raises (Reflective::MofError);
void set_activity_graph (in ActivityGraph new_value)
raises (Reflective::MofError);
}; // end of interface Partition
interface SubactivityStateClass : StateMachines::SubmachineStateClass
{
readonly attribute SubactivityStateSet all_of_type_subactivity_state;
readonly attribute SubactivityStateSet all_of_class_subactivity_state;
SubactivityState create_subactivity_state (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in boolean is_concurrent,
in boolean is_dynamic,
in Foundation::DataTypes::ArgListsExpression dynamic_arguments,
in Foundation::DataTypes::Multiplicity dynamic_multiplicity)
raises (Reflective::MofError);
};
interface SubactivityState : SubactivityStateClass, StateMachines::SubmachineState
{
boolean is_dynamic ()
raises (Reflective::MofError);
void set_is_dynamic (in boolean new_value)
raises (Reflective::MofError);
Foundation::DataTypes::ArgListsExpression dynamic_arguments ()
raises (Reflective::MofError);
void set_dynamic_arguments (in Foundation::DataTypes::ArgListsExpression new_value)
raises (Reflective::MofError);
Foundation::DataTypes::Multiplicity dynamic_multiplicity ()
raises (Reflective::MofError);
void set_dynamic_multiplicity (in Foundation::DataTypes::Multiplicity new_value)
raises (Reflective::MofError);
}; // end of interface SubactivityState
interface ActionStateClass : StateMachines::SimpleStateClass
{
readonly attribute ActionStateSet all_of_type_action_state;
readonly attribute ActionStateSet all_of_class_action_state;
ActionState create_action_state (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in boolean is_dynamic,
in Foundation::DataTypes::ArgListsExpression dynamic_arguments,
in Foundation::DataTypes::Multiplicity dynamic_multiplicity)
raises (Reflective::MofError);
};
interface ActionState : ActionStateClass, StateMachines::SimpleState
{
boolean is_dynamic ()
raises (Reflective::MofError);
5-144
OMG-UML V1.3
March 2000
5
void set_is_dynamic (in boolean new_value)
raises (Reflective::MofError);
Foundation::DataTypes::ArgListsExpression dynamic_arguments ()
raises (Reflective::MofError);
void set_dynamic_arguments (in Foundation::DataTypes::ArgListsExpression new_value)
raises (Reflective::MofError);
Foundation::DataTypes::Multiplicity dynamic_multiplicity ()
raises (Reflective::MofError);
void set_dynamic_multiplicity (in Foundation::DataTypes::Multiplicity new_value)
raises (Reflective::MofError);
}; // end of interface ActionState
interface CallStateClass : ActionStateClass
{
readonly attribute CallStateSet all_of_type_call_state;
readonly attribute CallStateSet all_of_class_call_state;
CallState create_call_state (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in boolean is_dynamic,
in Foundation::DataTypes::ArgListsExpression dynamic_arguments,
in Foundation::DataTypes::Multiplicity dynamic_multiplicity)
raises (Reflective::MofError);
};
interface CallState : CallStateClass, ActionState
{
}; // end of interface CallState
interface ObjectFlowStateClass : StateMachines::SimpleStateClass
{
readonly attribute ObjectFlowStateSet all_of_type_object_flow_state;
readonly attribute ObjectFlowStateSet all_of_class_object_flow_state;
ObjectFlowState create_object_flow_state (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in boolean is_synch)
raises (Reflective::MofError);
};
interface ObjectFlowState : ObjectFlowStateClass, StateMachines::SimpleState
{
boolean is_synch ()
raises (Reflective::MofError);
void set_is_synch (in boolean new_value)
raises (Reflective::MofError);
ParameterSet parameter ()
raises (Reflective::MofError);
void set_parameter (in ParameterSet new_value)
raises (Reflective::MofError);
void add_parameter (in Foundation::Core::Parameter new_element)
raises (Reflective::MofError);
void modify_parameter (
OMG-UML V1.3
IDL Modules
March 2000
5-145
5
in Foundation::Core::Parameter old_element,
in Foundation::Core::Parameter new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_parameter (in Foundation::Core::Parameter old_element)
raises (Reflective::NotFound, Reflective::MofError);
Foundation::Core::Classifier type ()
raises (Reflective::MofError);
void set_type (in Foundation::Core::Classifier new_value)
raises (Reflective::MofError);
}; // end of interface ObjectFlowState
interface ClassifierInStateClass : Foundation::Core::ClassifierClass
{
readonly attribute ClassifierInStateSet all_of_type_classifier_in_state;
readonly attribute ClassifierInStateSet all_of_class_classifier_in_state;
ClassifierInState create_classifier_in_state (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in boolean is_root,
in boolean is_leaf,
in boolean is_abstract)
raises (Reflective::MofError);
};
interface ClassifierInState : ClassifierInStateClass, Foundation::Core::Classifier
{
Foundation::Core::Classifier type ()
raises (Reflective::MofError);
void set_type (in Foundation::Core::Classifier new_value)
raises (Reflective::MofError);
StateMachines::StateSet in_state ()
raises (Reflective::MofError);
void set_in_state (in StateMachines::StateSet new_value)
raises (Reflective::MofError);
void add_in_state (in StateMachines::State new_element)
raises (Reflective::MofError);
void modify_in_state (
in StateMachines::State old_element,
in StateMachines::State new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_in_state (in StateMachines::State old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ClassifierInState
struct AParameterStateLink
{
Foundation::Core::Parameter parameter;
ObjectFlowState state;
};
typedef sequence<AParameterStateLink> AParameterStateLinkSet;
interface AParameterState : Reflective::RefAssociation
{
AParameterStateLinkSet all_a_parameter_state_links()
5-146
OMG-UML V1.3
March 2000
5
raises (Reflective::MofError);
boolean exists (
in Foundation::Core::Parameter parameter,
in ObjectFlowState state)
raises (Reflective::MofError);
ParameterSet parameter (in ObjectFlowState state)
raises (Reflective::MofError);
ObjectFlowStateSet state (in Foundation::Core::Parameter parameter)
raises (Reflective::MofError);
void add (
in Foundation::Core::Parameter parameter,
in ObjectFlowState state)
raises (Reflective::MofError);
void modify_parameter (
in Foundation::Core::Parameter parameter,
in ObjectFlowState state,
in Foundation::Core::Parameter new_parameter)
raises (Reflective::NotFound, Reflective::MofError);
void modify_state (
in Foundation::Core::Parameter parameter,
in ObjectFlowState state,
in ObjectFlowState new_state)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Foundation::Core::Parameter parameter,
in ObjectFlowState state)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AParameterState
struct ATypeClassifierInStateLink
{
Foundation::Core::Classifier type;
ClassifierInState classifier_in_state;
};
typedef sequence<ATypeClassifierInStateLink> ATypeClassifierInStateLinkSet;
interface ATypeClassifierInState : Reflective::RefAssociation
{
ATypeClassifierInStateLinkSet all_a_type_classifier_in_state_links()
raises (Reflective::MofError);
boolean exists (
in Foundation::Core::Classifier type,
in ClassifierInState classifier_in_state)
raises (Reflective::MofError);
Foundation::Core::Classifier type (in ClassifierInState classifier_in_state)
raises (Reflective::MofError);
ClassifierInStateSet classifier_in_state (in Foundation::Core::Classifier type)
raises (Reflective::MofError);
void add (
in Foundation::Core::Classifier type,
in ClassifierInState classifier_in_state)
raises (Reflective::MofError);
void modify_type (
in Foundation::Core::Classifier type,
in ClassifierInState classifier_in_state,
OMG-UML V1.3
IDL Modules
March 2000
5-147
5
in Foundation::Core::Classifier new_type)
raises (Reflective::NotFound, Reflective::MofError);
void modify_classifier_in_state (
in Foundation::Core::Classifier type,
in ClassifierInState classifier_in_state,
in ClassifierInState new_classifier_in_state)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Foundation::Core::Classifier type,
in ClassifierInState classifier_in_state)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ATypeClassifierInState
struct AContentsPartitionLink
{
Foundation::Core::ModelElement contents;
ActivityGraphs::Partition partition;
};
typedef sequence<AContentsPartitionLink> AContentsPartitionLinkSet;
interface AContentsPartition : Reflective::RefAssociation
{
AContentsPartitionLinkSet all_a_contents_partition_links()
raises (Reflective::MofError);
boolean exists (
in Foundation::Core::ModelElement contents,
in ActivityGraphs::Partition partition)
raises (Reflective::MofError);
ModelElementSet contents (in ActivityGraphs::Partition partition)
raises (Reflective::MofError);
PartitionSet partition (in Foundation::Core::ModelElement contents)
raises (Reflective::MofError);
void add (
in Foundation::Core::ModelElement contents,
in ActivityGraphs::Partition partition)
raises (Reflective::MofError);
void modify_contents (
in Foundation::Core::ModelElement contents,
in ActivityGraphs::Partition partition,
in Foundation::Core::ModelElement new_contents)
raises (Reflective::NotFound, Reflective::MofError);
void modify_partition (
in Foundation::Core::ModelElement contents,
in ActivityGraphs::Partition partition,
in ActivityGraphs::Partition new_partition)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Foundation::Core::ModelElement contents,
in ActivityGraphs::Partition partition)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AContentsPartition
struct AActivityGraphPartitionLink
{
ActivityGraph activity_graph;
5-148
OMG-UML V1.3
March 2000
5
ActivityGraphs::Partition partition;
};
typedef sequence<AActivityGraphPartitionLink> AActivityGraphPartitionLinkSet;
interface AActivityGraphPartition : Reflective::RefAssociation
{
AActivityGraphPartitionLinkSet all_a_activity_graph_partition_links()
raises (Reflective::MofError);
boolean exists (
in ActivityGraph activity_graph,
in ActivityGraphs::Partition partition)
raises (Reflective::MofError);
ActivityGraph activity_graph (in ActivityGraphs::Partition partition)
raises (Reflective::MofError);
PartitionSet partition (in ActivityGraph activity_graph)
raises (Reflective::MofError);
void add (
in ActivityGraph activity_graph,
in ActivityGraphs::Partition partition)
raises (Reflective::MofError);
void modify_activity_graph (
in ActivityGraph activity_graph,
in ActivityGraphs::Partition partition,
in ActivityGraph new_activity_graph)
raises (Reflective::NotFound, Reflective::MofError);
void modify_partition (
in ActivityGraph activity_graph,
in ActivityGraphs::Partition partition,
in ActivityGraphs::Partition new_partition)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in ActivityGraph activity_graph,
in ActivityGraphs::Partition partition)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AActivityGraphPartition
struct ATypeObjectFlowStateLink
{
Foundation::Core::Classifier type;
ObjectFlowState object_flow_state;
};
typedef sequence<ATypeObjectFlowStateLink> ATypeObjectFlowStateLinkSet;
interface ATypeObjectFlowState : Reflective::RefAssociation
{
ATypeObjectFlowStateLinkSet all_a_type_object_flow_state_links()
raises (Reflective::MofError);
boolean exists (
in Foundation::Core::Classifier type,
in ObjectFlowState object_flow_state)
raises (Reflective::MofError);
Foundation::Core::Classifier type (in ObjectFlowState object_flow_state)
raises (Reflective::MofError);
ObjectFlowStateSet object_flow_state (in Foundation::Core::Classifier type)
raises (Reflective::MofError);
OMG-UML V1.3
IDL Modules
March 2000
5-149
5
void add (
in Foundation::Core::Classifier type,
in ObjectFlowState object_flow_state)
raises (Reflective::MofError);
void modify_type (
in Foundation::Core::Classifier type,
in ObjectFlowState object_flow_state,
in Foundation::Core::Classifier new_type)
raises (Reflective::NotFound, Reflective::MofError);
void modify_object_flow_state (
in Foundation::Core::Classifier type,
in ObjectFlowState object_flow_state,
in ObjectFlowState new_object_flow_state)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Foundation::Core::Classifier type,
in ObjectFlowState object_flow_state)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface ATypeObjectFlowState
struct AClassifierInStateInStateLink
{
ClassifierInState classifier_in_state;
StateMachines::State in_state;
};
typedef sequence<AClassifierInStateInStateLink> AClassifierInStateInStateLinkSet;
interface AClassifierInStateInState : Reflective::RefAssociation
{
AClassifierInStateInStateLinkSet all_a_classifier_in_state_in_state_links()
raises (Reflective::MofError);
boolean exists (
in ClassifierInState classifier_in_state,
in StateMachines::State in_state)
raises (Reflective::MofError);
ClassifierInStateSet classifier_in_state (in StateMachines::State in_state)
raises (Reflective::MofError);
StateMachines::StateSet in_state (in ClassifierInState classifier_in_state)
raises (Reflective::MofError);
void add (
in ClassifierInState classifier_in_state,
in StateMachines::State in_state)
raises (Reflective::MofError);
void modify_classifier_in_state (
in ClassifierInState classifier_in_state,
in StateMachines::State in_state,
in ClassifierInState new_classifier_in_state)
raises (Reflective::NotFound, Reflective::MofError);
void modify_in_state (
in ClassifierInState classifier_in_state,
in StateMachines::State in_state,
in StateMachines::State new_in_state)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in ClassifierInState classifier_in_state,
5-150
OMG-UML V1.3
March 2000
5
in StateMachines::State in_state)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AClassifierInStateInState
interface ActivityGraphsPackage : Reflective::RefPackage
{
readonly attribute ActivityGraphClass activity_graph_ref;
readonly attribute PartitionClass partition_ref;
readonly attribute SubactivityStateClass subactivity_state_ref;
readonly attribute CallStateClass call_state_ref;
readonly attribute ObjectFlowStateClass object_flow_state_ref;
readonly attribute ClassifierInStateClass classifier_in_state_ref;
readonly attribute ActionStateClass action_state_ref;
readonly attribute AParameterState a_parameter_state_ref;
readonly attribute ATypeClassifierInState a_type_classifier_in_state_ref;
readonly attribute AContentsPartition a_contents_partition_ref;
readonly attribute AActivityGraphPartition a_activity_graph_partition_ref;
readonly attribute ATypeObjectFlowState a_type_object_flow_state_ref;
readonly attribute AClassifierInStateInState a_classifier_in_state_in_state_ref;
};
}; // end of module ActivityGraphs
interface BehavioralElementsPackageFactory
{
BehavioralElementsPackage create_behavioral_elements_package ()
raises (Reflective::MofError);
};
interface BehavioralElementsPackage : Reflective::RefPackage
{
readonly attribute CommonBehavior::CommonBehaviorPackage common_behavior_ref;
readonly attribute UseCases::UseCasesPackage use_cases_ref;
readonly attribute StateMachines::StateMachinesPackage state_machines_ref;
readonly attribute Collaborations::CollaborationsPackage collaborations_ref;
readonly attribute ActivityGraphs::ActivityGraphsPackage activity_graphs_ref;
};
};
5.4.4 ModelManagement
#pragma prefix "org.omg.Uml"
#include "Reflective.idl"
#include "Foundation.idl"
module ModelManagement
{
interface ModelClass;
interface Model;
typedef sequence<Model> ModelSet;
interface PackageClass;
interface Package;
typedef sequence<Package> PackageSet;
interface SubsystemClass;
interface Subsystem;
OMG-UML V1.3
IDL Modules
March 2000
5-151
5
typedef sequence<Subsystem> SubsystemSet;
interface ElementImportClass;
interface ElementImport;
typedef sequence<ElementImport> ElementImportSet;
interface ModelManagementPackage;
interface PackageClass : Foundation::Core::NamespaceClass,
Foundation::Core::GeneralizableElementClass
{
readonly attribute PackageSet all_of_type_package;
readonly attribute PackageSet all_of_class_package;
Package create_package (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in boolean is_root,
in boolean is_leaf,
in boolean is_abstract)
raises (Reflective::MofError);
};
interface Package : PackageClass, Foundation::Core::Namespace,
Foundation::Core::GeneralizableElement
{
ElementImportSet element_import ()
raises (Reflective::MofError);
void set_element_import (in ElementImportSet new_value)
raises (Reflective::MofError);
void add_element_import (in ElementImport new_element)
raises (Reflective::MofError);
void modify_element_import (
in ElementImport old_element,
in ElementImport new_element)
raises (Reflective::NotFound, Reflective::MofError);
void remove_element_import (in ElementImport old_element)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface Package
interface ModelClass : PackageClass
{
readonly attribute ModelSet all_of_type_model;
readonly attribute ModelSet all_of_class_model;
Model create_model (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in boolean is_root,
in boolean is_leaf,
in boolean is_abstract)
raises (Reflective::MofError);
};
interface Model : ModelClass, Package
{
}; // end of interface Model
5-152
OMG-UML V1.3
March 2000
5
interface SubsystemClass : Foundation::Core::ClassifierClass, PackageClass
{
readonly attribute SubsystemSet all_of_type_subsystem;
readonly attribute SubsystemSet all_of_class_subsystem;
Subsystem create_subsystem (
in Foundation::DataTypes::Name name,
in Foundation::DataTypes::VisibilityKind visibility,
in boolean is_specification,
in boolean is_root,
in boolean is_leaf,
in boolean is_abstract,
in boolean is_instantiable)
raises (Reflective::MofError);
};
interface Subsystem : SubsystemClass, Foundation::Core::Classifier, Package
{
boolean is_instantiable ()
raises (Reflective::MofError);
void set_is_instantiable (in boolean new_value)
raises (Reflective::MofError);
}; // end of interface Subsystem
interface ElementImportClass : Reflective::RefObject
{
readonly attribute ElementImportSet all_of_type_element_import;
readonly attribute ElementImportSet all_of_class_element_import;
ElementImport create_element_import (
in Foundation::DataTypes::VisibilityKind visibility,
in Foundation::DataTypes::Name alias)
raises (Reflective::MofError);
};
interface ElementImport : ElementImportClass
{
Foundation::DataTypes::VisibilityKind visibility ()
raises (Reflective::MofError);
void set_visibility (in Foundation::DataTypes::VisibilityKind new_value)
raises (Reflective::MofError);
Foundation::DataTypes::Name alias ()
raises (Reflective::MofError);
void set_alias (in Foundation::DataTypes::Name new_value)
raises (Reflective::MofError);
Foundation::Core::ModelElement model_element ()
raises (Reflective::MofError);
void set_model_element (in Foundation::Core::ModelElement new_value)
raises (Reflective::MofError);
ModelManagement::Package package ()
raises (Reflective::MofError);
void set_package (in ModelManagement::Package new_value)
raises (Reflective::MofError);
}; // end of interface ElementImport
struct AModelElementElementImportLink
OMG-UML V1.3
IDL Modules
March 2000
5-153
5
{
Foundation::Core::ModelElement model_element;
ElementImport element_import;
};
typedef sequence<AModelElementElementImportLink> AModelElementElementImportLinkSet;
interface AModelElementElementImport : Reflective::RefAssociation
{
AModelElementElementImportLinkSet all_a_model_element_element_import_links()
raises (Reflective::MofError);
boolean exists (
in Foundation::Core::ModelElement model_element,
in ElementImport element_import)
raises (Reflective::MofError);
Foundation::Core::ModelElement model_element (in ElementImport element_import)
raises (Reflective::MofError);
ElementImportSet element_import (in Foundation::Core::ModelElement model_element)
raises (Reflective::MofError);
void add (
in Foundation::Core::ModelElement model_element,
in ElementImport element_import)
raises (Reflective::MofError);
void modify_model_element (
in Foundation::Core::ModelElement model_element,
in ElementImport element_import,
in Foundation::Core::ModelElement new_model_element)
raises (Reflective::NotFound, Reflective::MofError);
void modify_element_import (
in Foundation::Core::ModelElement model_element,
in ElementImport element_import,
in ElementImport new_element_import)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in Foundation::Core::ModelElement model_element,
in ElementImport element_import)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface AModelElementElementImport
struct APackageElementImportLink
{
ModelManagement::Package package;
ElementImport element_import;
};
typedef sequence<APackageElementImportLink> APackageElementImportLinkSet;
interface APackageElementImport : Reflective::RefAssociation
{
APackageElementImportLinkSet all_a_package_element_import_links()
raises (Reflective::MofError);
boolean exists (
in ModelManagement::Package package,
in ElementImport element_import)
raises (Reflective::MofError);
ModelManagement::Package package (in ElementImport element_import)
raises (Reflective::MofError);
5-154
OMG-UML V1.3
March 2000
5
ElementImportSet element_import (in ModelManagement::Package package)
raises (Reflective::MofError);
void add (
in ModelManagement::Package package,
in ElementImport element_import)
raises (Reflective::MofError);
void modify_package (
in ModelManagement::Package package,
in ElementImport element_import,
in ModelManagement::Package new_package)
raises (Reflective::NotFound, Reflective::MofError);
void modify_element_import (
in ModelManagement::Package package,
in ElementImport element_import,
in ElementImport new_element_import)
raises (Reflective::NotFound, Reflective::MofError);
void remove (
in ModelManagement::Package package,
in ElementImport element_import)
raises (Reflective::NotFound, Reflective::MofError);
}; // end of interface APackageElementImport
interface ModelManagementPackageFactory
{
ModelManagementPackage create_model_management_package ()
raises (Reflective::MofError);
};
interface ModelManagementPackage : Reflective::RefPackage
{
readonly attribute ModelClass model_ref;
readonly attribute PackageClass package_ref;
readonly attribute SubsystemClass subsystem_ref;
readonly attribute ElementImportClass element_import_ref;
readonly attribute AModelElementElementImport a_model_element_element_import_ref;
readonly attribute APackageElementImport a_package_element_import_ref;
};
};
OMG-UML V1.3
IDL Modules
March 2000
5-155
5
5-156
OMG-UML V1.3
March 2000
6
UML XMI DTD Specification
Contents
This chapter contains the following sections.
Section Title
Page
“Overview”
6-1
“Physical Metamodel”
6-2
“UML XMI DTD”
6-21
6.1 Overview
The OMG XMI standard specifies a structure for interchanging models that uses XML.
The XMI DTD generated for UML is a physical mechanism for interchanging UML
models conforming to the UML metamodel.
Section 6.2 contains the physical metamodel for UML from which the DTD was
generated, as well as a list of the changes required to produce the metamodel. Section
6.3 contains a normative DTD that represents the UML 1.3 metamodel.generated from
the XMI 1.0 specification.
One of the primary goals of providing this DTD is to advance the state of the industry
by enabling OO modeling tool interoperability, now available through XMI. When
interchanging UML models via streams or files, this normative XMI DTD should be
used.
OMG-UML V1.3
March 2000
6-1
6
6.2 Physical Metamodel
The physical metamodel is the representation of the abstract syntax with minor
modifications to support generation of an XMI DTD. The following changes were
made to the UML abstract syntax:
6.2.1 Names
•
•
Changed spaces in package names to '_'.
Added names for association ends that did not have them. Convention: the name of
the adjoining class with the first letter in lower case. If this resulted in a name
duplication, then a numbered suffix was added.
6.2.2 Additions
• Added enumeration literals as attributes of the enumeration classes for enumeration
data types.
•
•
Added 'sorted' enumeration literal to OrderingKind.
Added inheritance link from Message to ModelElement.
6.2.3 Association Classes
• Made ElementOwnership AssociationClass attributes by moving the visibility and
isSpecification attributes to the ModelElement class.
•
•
Removed the attribute "visiblity" from classes AssociationEnd and Feature.
•
Made the AssociationClass ElementImport a class by removing the association
between ModelElement and Package and adding associations between
ModelElement and ElementImport and between ElementImport and Package.
•
Made the AssociationClass TemplateParameter a class by removing the association
between ModelElement and ModelElement for template parameters and added
associations between ModelElement and TemplateParameter and between
TemplateParameter and ModelElement.
Made the AssociationClass ElementResidence a class by removing the association
between Component and ModelElement and adding associations between
ElementResidence and Component and between ElementResidence and
ModelElement.
6.2.4 MOF Stereotypes
• Added CORBA typecodes to the DataTypes in the MOF tab of the model.
• Added a dataType Geometry as tk_string
• Changed "LocationReference", "Mapping", "Name" as tk_string
6-2
OMG-UML V1.3
March 2000
6
•
Moved The Link between ModelElement & TaggedValue from "Core" to package
"Extension_Mechanisms"
•
Removed the duplicate Aggregation between Binding & ModelElement from
package "Core"
•
Relocated the following Associations to package "Activity_Graphs"
• A_parameter_state ( between class "Parameter" and "ObjectFlowState"),
• A_type_classifierInState (between classes "Classifier" and "ClassifierInState"),
• A_contents_partition (between ModelElement and Partition),
• A_activityGraph_partition (between ActivityGraph and Partition ),
• A_type_objectFlowState (between Classifier and ObjectFlowState),
• A_classifierInState_inState (between ClassifierInState and State)
•
Removed Association names "association", "guard", "h","Instantiation" and
"Parameters"
•
Changed the name of the role for the Assocaiation between classes "Component"
and "ElementResidence", A_implementationLocation_elementResidence to
A_implementationLocation_residentElement .
•
Changed the Cardinality for role "constrainedElement" from 1..n to 0..n (in
A_constrainedElement_constraint) and for role "constrainedElement2" from 1 to
0..1 for A_constrainedElement2_stereotypeConstraint
•
Removed "ordered" in Role "structuralFeature" of association
A_structuralFeature_type.
OMG-UML V1.3
Physical Metamodel
March 2000
6-3
6
Element
+ constraint
ModelElement
+ constr ain edElement
name : Name
visibility : VisibilityKind
isSpecification : Boolean
0..*
{ordered
*
+ ownedElement
*
+ namespace
0..1
F eature
G eneralizableElement
Namespace
isRoot : Boolean
isLeaf : Boolean
isAbstract : Boolean
ownerScope : ScopeKind
*
+ fe ature
Parameter
Constraint
body : BooleanExpression
defaultValue : Expression
kind : ParameterDirectionKind
*
parameter
*
+ parameter
+ owner
0..1
1
+ type
Ca
l ss if ier
{ or dered
1
structuralFeature
S truc tural Fe ature
multiplicity : Multiplicity
changeability : ChangeableKind
targetScope : ScopeKind
+ type
BehavioralFeature
*
isQuery : Boolean
0..1
{ordered
+ behavioralF eature
O peration
Attribute
initialValue : Expression
concurrency : CallConcurrencyKind
isRoot : Boolean
isLeaf : Boolean
isAbstract : Boolean
specification : String
1
*
+ specification
+ method
Method
body : ProcedureExpression
Figure 6-1 Backbone
6-4
OMG-UML V1.3
March 2000
6
ModelElement
+ source
*
+ targe t
name : Name
visibility : VisibilityKind
isSpecification : Boolean
*
Relationship
+ targetF low
+ s our ce F low
*
*
+ generalization
F low
G eneralization
discriminator : Name
+ powertype
G eneralizableElement
1
1
+ specialization
+ powertypeRange
+ child
*
*
i sRo ot : B oole an
i sL eaf : Boo e
l an
i sAb st ra ct : B oole an
+ parent
*
0..1
{ordered}
+ type
associationEnd
2..*
Classifier
1
+ specification
+ participant
*
*
+ qualifier
Class
isActive : Boolean
*
1
Association
AssociationEnd
isNavigable : Boolean
ordering : O rderingKind
aggregation : AggregationKind
targetScope : ScopeKind
multiplicity : Multiplicity
changeability : ChangeableKind
+ connection
+ association
+ associationEnd
Attribute
initialValue : Expression
*
0..1
{ordered
AssociationClass
Figure 6-2 Relationships
OMG-UML V1.3
Physical Metamodel
March 2000
6-5
6
Classifier
DataT yp e
Clas s
is Active : Boolean
Inter face
Node
+deploym entLocation
*
*
Com ponent
+res ident
1..1
*
+im plem entationLocation
+r eside ntEle me nt
Eleme ntResid ence
visi bility : VisibilityKin d
*
1
+elem entRes idence
+r es ide nt
ModelElem ent
nam e : Nam e
vis ibility : Vis ibilityKind
is Specification : Boolean
Figure 6-3 Classifiers
6-6
OMG-UML V1.3
March 2000
6
+tem pl ateParam e ter
{ordered}
T em pl ateParam eter
*
+tem pl ateParam eter2
*
+tem pl ateParam eter3
*
E l ement
+defaul t
+m odel El em ent2
1..1
0..1
Mod el Element
+subj ect
+m odel El em ent nam e : Nam e
visi bi li ty : Vi si bi l i tyKi nd
0..1 i sSpeci ficati on : Bool ean
1..*
+argum ent
+presentati on
*
*
+annotatedEl em ent
*
+com m ent
PresentationElement
*
{ordered}
0..1
+bi ndi ng
Com m ent
Bi ndi ng
Figure 6-4 Auxilliary Elements
OMG-UML V1.3
Physical Metamodel
March 2000
6-7
6
Relationshi p
ModelElement
nam e : Nam e
visi bi li ty : Vi si bi l i tyKi nd
i sSpeci ficati on : Bool ean
+suppl i er
+suppl i erDependency
1..*
1..*
+cl ient
*
Dependenc y
*
+cl ientDependency
Bi ndi ng
Usage
Abstraction
P erm ission
m appi ng : M appingExpressi on
Figure 6-5 Dependencies
6-8
OMG-UML V1.3
March 2000
6
Expression
l anguage : Nam e
body : String
<<pri m i ti ve>>
Integer
<<pri m i ti ve>>
U nli mi tedInte ger
<<pri m i ti ve>>
String
<<pri m i ti ve>>
Time
<<pri m i ti ve>>
Geom etry
<<enum eration>>
Aggregati onKi nd
<<enum eration>>
OrderingKi nd
none : type
aggregate : type
com posite : type
<<enum eration>>
Bool ean
true : type
fal se : type
unorder ed : type
ordered : type
sorted : type
<<enum eration>>
Param eterDirecti onKind
i n : ty pe
i nout : t ype
out : type
return : type
<<pri m i tive>>
M appi ng
<<pri m i ti ve>>
Nam e
<<pri m i ti ve>>
Loc ationR eferenc e
<<enum eration>>
Call ConcurrencyKi nd
<<enum eration>>
PseudostateKi nd
sequenti al : type
guarded : type
concurrent : type
M ulti pl i ci ty
i ni tial : type
deepHi story : type
shal l owHi story : type
j oi n : type
fork : type
branch : type
j uncti on : type
final : type
<<enum eration>>
Changeabl eKi nd
changeable : type
frozen : type
addOnl y : type
1
1..*
<<enum eration>>
S copeKi nd
<<enum eration>>
M essageDi rectionKi nd
cla ssi fi er : ty pe
i nstance : type
act ivati on : type
return : type
+mul tip li city
+range
M ulti pl i ci tyRange
l ower : Integer
upper : Unl i m i tedInteger
<<enum eration>>
Vi sibi li tyKind
publ i c : type
pri vate : type
protected : type
Figure 6-6 Data Types
OMG-UML V1.3
Physical Metamodel
March 2000
6-9
6
Expres s ion
language : Nam e
body : String
ActionExpres s ion
BooleanExpres s ion
ArgLis ts Expres s ion
MappingExpress i on
IterationExpres s ion
ProcedureExpres s ion
ObjectSetExpres s ion
Figure 6-7 Expressions
6-10
OMG-UML V1.3
March 2000
TypeExpres s ion
Tim eExpres s ion
6
+extendedElem ent
ModelElem ent
+m od elEle me nt
taggedValue
(f rom Core)
*
0..1
*
0..*
{ordered}
+requiredTag
+cons trainedElem ent
Cons traint
TaggedValue
tag : Na me
value : Strin g
*
+co nstra int
(f rom Core)
+s tereotypeCons traint
Gen eralizab leEleme nt
*
*
(f rom Core)
{xor }
s tereotype
0..1
Stereotype
0..1
icon : Geom etry
ba seClas s : Nam e
cons trainedElem ent2
+s tereotype
0..1
Figure 6-8 Extension Mechanisms
OMG-UML V1.3
Physical Metamodel
March 2000
6-11
6
Action
AttributeLink
ModelElemen t
(from Core)
recurrence : IterationExpression
target : O bjectSetExpression
isAsynchronous : Boolean
script : ActionExpression
+ qualifiedVal ue
1
0..*
+ dispatch
+ linkEnd
+ stimulus
attributeLink
Attribute
(from Core)
0..1
*
AttributeLink
Stimulus
+ attribut
1
+*stimulus
0..1
LinkEnd
Link
+ link
+ link
+ connectio
+ communication
*
1
+ slot
0..*
*
+ attributeLin k
+ stimulus1
* + stimulus2
* + stimulus3
*
1
1
*
link
1
+ associatio
{ordered}
*
2 .. *
linkEnd
*
{ordered}
+ instance
1
1
+ value
+ argument
*
+ receiver
+ sender
Instance
Classifier
(from Core)
instance
+ classifier
1..*
Association
(from Core)
*
1
+ instance
*
0..1
DataValue
ComponentInstance
+ resident
+ componentInstance
+ resident
*
+ nodeInstance
NodeInstance
O bject
0..1
LinkO bject
Figure 6-9 Instances
6-12
OMG-UML V1.3
March 2000
+ association
1
+ association End
+ connection
2..*
1
AssociationE nd
(from Core)
6
Arg ument
ModelElement
(from Core)
value : Expression
*
+actual
{ordered}
0..1
{ordered}
ActionSeq uence
+actionSeq uence
+action
0 .. *
0..1
Classifier
(from Core)
+createAction
+instantiatio
1
Assig nmentAction
CreateAction
+action
Action
recurrence : IterationExpression
targ et : ObjectSetExpression
isAsynchronous : Boolean
script : ActionExpression
*
CallAction
*
+callAction
1
+operation
UninterpretedAction
SendAction
0..*
+sendAction
Retur nAction
TerminateAction
1
DestroyAction
+sig nal
Sig nal
Operat ion
(from Core)
Figure 6-10 Actions
OMG-UML V1.3
Physical Metamodel
March 2000
6-13
6
Classifier
(from Core)
+signal
raisedSignal
Signal
+context
*
*
1
BehavioralFeature
(from Core)
Exception
0..*
+reception
Reception
specification : String
isRoot : Boolean
isLeaf : Boolean
isAbstract : Boolean
Figure 6-11 Signals
6-14
OMG-UML V1.3
March 2000
6
Classifier
+classif ier
Ins tance
+instanc e
(from Core)
1..*
*
(from Common_Behavior)
Us eC as eInsta nce
M odelElement
(from Core)
UseC as e
Actor
+useCase +ex tens ion
1
+addition
1
1
+bas
+ex tens io
1
Ex tensionPoin t
*
loc ation : Loc ationRef erence
+bas
1
1..*
+ex tens ion
{ordered
+include2
*
*
+includ
+ex tend *
Inc lude
*
+ex tend2
Extend
*
c ondition : BooleanEx pres sion
+ex tend
Relationship
(from Core)
Figure 6-12 Use Cases
OMG-UML V1.3
Physical Metamodel
March 2000
6-15
6
ModelElement
(from Core)
+context
0..1
behavior
+stateMachine
*
1
Gua rd
expression : BooleanExpression
StateM achine
+submachine
0..1
+stateMachine
0..1
0..1
*
+subvertex
0..*
StateVertex
+source
+ outg oing
+ targ et
+incoming
1
1
*
+ g uard
+transitions
+transition
+transition
1
Tra nsi ti on
*
*
1
tran sitio n
0..1
* +internalTransition
+top
State
+eff ect
SynchState
b ound : Unli mit edI nteg e r
Pseudostate
StubState
kind : PseudostateKind
ref erenc eStat e : Name
0..1
0 .. 1
0..1
0..1
state2
state1
state3
+state
+state
0..*
0..
0..1
1
0..1
0..1
+entry
+exit
+doActivity
Acti on
(from Common_Behavior)
+deferrableEvent
0..* 0..1
Event
+container
0..1
+subM achineState
CompositeState
isConcurrent : Boolean
Sim pleState
FinalState
Sub mac hine Stat e
*
Figure 6-13 State Machines
6-16
OMG-UML V1.3
March 2000
+ trig g er
6
ModelElement
(from Core)
{ordered
Param eter
(from Core)
Si gnal Event
occurrence
*
event
+param eter
Event
0..*
0..1
Call Event
occurrence
T i m eEvent
ChangeEvent
when : T i m eE xpressi on
changeExpressi on : Bool eanExpressi on
*
1
+si gnal
+operation
Si gnal
(fro m Common _Beh avio r)
1
Operati on
(from Core)
Figure 6-14 Events
OMG-UML V1.3
Physical Metamodel
March 2000
6-17
6
Namespac
G eneralizableElement
(from Core)
(from Core)
Collaboration
+ representedO peration
collaboration
{xor}
*
* collabor at io n
1
1
collaboration
+ collaboration
*
+ constrainingElement
*
ModelElement
(from Core)
+ /owned
*
1
+ contex
*
+ inter act ion
*
+ avail able
1
+ interaction
1..*
+ message
AssociationRole
Association
multiplicity : Multiplicity
(from Core)
0.. 1
+ message
+ communication
*
0..1
+ base
+ predecesso
Message
*
*
*
associationRole
1
+ message3
+ activato
1
+ associationRole
+ association
0..1
*
+ message4
mes + action
Action
(from Common_Behavior)
*
2..*
2..*
+ connection
A ssocia ti onEnd
0..1
1
+ message2
*
+ sender
1
ClassifierRole
*
*
*
+ receiver
+ /connection
AssociationEndRole
(from Core)
+ message1
1
collaborationMultiplicity : Multiplicity
classifierRole
1. .*
+ associationEndRole
associationEndRole
+ /typ
*
+ base
*
+ availableQ ualifier
1
asso ciation EndR ole
*
Attribute
(from Core)
F eature
*
classifierRole
*
*
(from Core)
+ availableFeature
classifierRole
Figure 6-15 Collaborations
6-18
+ /owned
multiplicity : Multiplicity
OMG-UML V1.3
March 2000
0..1
+ rep res ented
Classifier
+ collaboration
Interaction
O peration
(from Core)
0..1
Classifier
(from Core)
1..*
+ base
6
+be havior
StateM achine
(from State_Machines)
+context
*
ModelElement
0..1
(from Core)
0..1
+stateMachine
ActivityGraph
+activityGraph
+p artit ion
+co nt ents
*
+partition
Partition
0..*
1
+top
*
1
State
(from State_Machines)
1..*
+inState
SimpleState
CompositeState
isConcurent : Boolean
(from State_Machines)
+type
*
SubmachineState
(from State_Machines)
ActionState
Clas si fier
(from Core)
1
+t ype
ObjectFlowState
isDynamic : Boolean
dynamicArg uments : Arg ListsExpression
dynamicM ultiplicity : M ultiplicity
isSynch : Boolean
+parameter
+state
*
+classifierInState
+c la ssi fie rIn St at e
*
*
SubactivityState
isDynamic : Boolean
dynamicArg uments : Arg ListsExpres si on
dynamicM ultiplicity : M ultiplicity
1
+objectFlowState
CallState
0..*
ClassifierInState
Parameter
(f rom Cor e)
Figure 6-16 Activity Graphs
OMG-UML V1.3
Physical Metamodel
March 2000
6-19
6
+m odelElem ent
1
Mode lE le m ent
(from Core)
+ownedElem ent
*
* +elem entIm port
Elem entIm port
vis ibility : Vis ibilityKind
alias : Nam e
*
Nam es pace
(f rom Core)
0..1
Generaliz ab leElem ent
(from Core)
+nam es pace
+elem entIm port
Package
Classifier
+package
1
(from Cor e)
Model
Subs ys te m
is Ins tantiable : Boolean
Figure 6-17 Model Management
6UML XMI DTD Specificatio
6-20
OMG-UML V1.3
March 2000
6
6.3 UML XMI DTD
<?xml version="1.0" encoding="UTF-8" ?>
<!-- XMI Automatic DTD Generation
-->
<!-- Date: Fri May 28 14:48:41 PDT 1999 -->
<!-- Metamodel: UML1.3
-->
<!-_______________________________________________________________
-->
<!--
-->
<!-- XMI is the top-level XML element for XMI transfer text
-->
<!-_______________________________________________________________
-->
<!ELEMENT XMI (XMI.header, XMI.content?, XMI.difference*,
XMI.extensions*) >
<!ATTLIST XMI
xmi.version CDATA #FIXED "1.0"
timestamp CDATA #IMPLIED
verified (true | false) #IMPLIED
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- XMI.header contains documentation and identifies the model,
-->
<!-- metamodel, and metametamodel
-->
<!-_______________________________________________________________
-->
<!ELEMENT XMI.header (XMI.documentation?, XMI.model*,
XMI.metamodel*,
XMI.metametamodel*) >
OMG-UML V1.3
UML XMI DTD
March 2000
6-21
6
<!-_______________________________________________________________
-->
<!--
-->
<!-- documentation for transfer data
-->
<!-_______________________________________________________________
-->
<!ELEMENT XMI.documentation (#PCDATA | XMI.owner | XMI.contact |
XMI.longDescription | XMI.shortDescription
|
XMI.exporter | XMI.exporterVersion |
XMI.notice)* >
<!ELEMENT XMI.owner ANY >
<!ELEMENT XMI.contact ANY >
<!ELEMENT XMI.longDescription ANY >
<!ELEMENT XMI.shortDescription ANY >
<!ELEMENT XMI.exporter ANY >
<!ELEMENT XMI.exporterVersion ANY >
<!ELEMENT XMI.exporterID ANY >
<!ELEMENT XMI.notice ANY >
<!-_______________________________________________________________
-->
<!--
-->
<!-- XMI.element.att defines the attributes that each XML element
-->
<!-- that corresponds to a metamodel class must have to conform
to
-->
6-22
OMG-UML V1.3
March 2000
6
<!-- the XMI specification.
-->
<!-_______________________________________________________________
-->
<!ENTITY % XMI.element.att
'xmi.id ID #IMPLIED xmi.label CDATA #IMPLIED xmi.uuid
CDATA #IMPLIED ' >
<!-_______________________________________________________________
-->
<!--
-->
<!-- XMI.link.att defines the attributes that each XML element
that -->
<!-- corresponds to a metamodel class must have to enable it to
-->
<!-- function as a simple XLink as well as refer to model
->
<!-- constructs within the same XMI file.
-->
<!-_______________________________________________________________
-->
<!ENTITY % XMI.link.att
'xml:link CDATA #IMPLIED inline (true | false)
#IMPLIED
actuate (show | user) #IMPLIED href CDATA #IMPLIED
role
CDATA #IMPLIED title CDATA #IMPLIED show (embed |
replace
| new) #IMPLIED behavior CDATA #IMPLIED xmi.idref
IDREF
#IMPLIED xmi.uuidref CDATA #IMPLIED' >
<!-_______________________________________________________________
-->
<!--
-->
<!-- XMI.model identifies the model(s) being transferred
-->
OMG-UML V1.3
UML XMI DTD
March 2000
6-23
6
<!-_______________________________________________________________
-->
<!ELEMENT XMI.model ANY >
<!ATTLIST XMI.model
%XMI.link.att;
xmi.name
CDATA #REQUIRED
xmi.version
CDATA #IMPLIED
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- XMI.metamodel identifies the metamodel(s) for the transferred
-->
<!-- data
-->
<!-_______________________________________________________________
-->
<!ELEMENT XMI.metamodel ANY >
<!ATTLIST XMI.metamodel
%XMI.link.att;
xmi.name
CDATA #REQUIRED
xmi.version
CDATA #IMPLIED
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- XMI.metametamodel identifies the metametamodel(s) for the
-->
<!-- transferred data
-->
<!-_______________________________________________________________
-->
6-24
OMG-UML V1.3
March 2000
6
<!ELEMENT XMI.metametamodel ANY >
<!ATTLIST XMI.metametamodel
%XMI.link.att;
xmi.name
CDATA #REQUIRED
xmi.version
CDATA #IMPLIED
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- XMI.content is the actual data being transferred
->
-
<!-_______________________________________________________________
-->
<!ELEMENT XMI.content ANY >
<!-_______________________________________________________________
-->
<!--
-->
<!-- XMI.extensions contains data to transfer that does not
conform -->
<!-- to the metamodel(s) in the header
-->
<!-_______________________________________________________________
-->
<!ELEMENT XMI.extensions ANY >
<!ATTLIST XMI.extensions
xmi.extender CDATA #REQUIRED
>
<!-_______________________________________________________________
-->
<!--
OMG-UML V1.3
-->
UML XMI DTD
March 2000
6-25
6
<!-- extension contains information related to a specific model
-->
<!-- construct that is not defined in the metamodel(s) in the
header -->
<!-_______________________________________________________________
-->
<!ELEMENT XMI.extension ANY >
<!ATTLIST XMI.extension
%XMI.element.att;
%XMI.link.att;
xmi.extender
CDATA #REQUIRED
xmi.extenderID CDATA #REQUIRED
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- XMI.difference holds XML elements representing differences
to a -->
<!-- base model
-->
<!-_______________________________________________________________
-->
<!ELEMENT XMI.difference (XMI.difference | XMI.delete | XMI.add |
XMI.replace)* >
<!ATTLIST XMI.difference
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- XMI.delete represents a deletion from a base model
-->
6-26
OMG-UML V1.3
March 2000
6
<!-_______________________________________________________________
-->
<!ELEMENT XMI.delete EMPTY >
<!ATTLIST XMI.delete
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- XMI.add represents an addition to a base model
->
-
<!-_______________________________________________________________
-->
<!ELEMENT XMI.add ANY >
<!ATTLIST XMI.add
%XMI.element.att;
%XMI.link.att;
xmi.position CDATA "-1"
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- XMI.replace represents the replacement of a model construct
-->
<!-- with another model construct in a base model
->
-
<!-_______________________________________________________________
-->
<!ELEMENT XMI.replace ANY >
OMG-UML V1.3
UML XMI DTD
March 2000
6-27
6
<!ATTLIST XMI.replace
%XMI.element.att;
%XMI.link.att;
xmi.position CDATA "-1"
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- XMI.reference may be used to refer to data types not defined
in -->
<!-- the metamodel
-->
<!-_______________________________________________________________
-->
<!ELEMENT XMI.reference ANY >
<!ATTLIST XMI.reference
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- This section contains the declaration of XML elements
-->
<!-- representing data types
-->
<!-_______________________________________________________________
-->
<!ELEMENT XMI.TypeDefinitions ANY >
<!ELEMENT XMI.field ANY >
<!ELEMENT XMI.seqItem ANY >
6-28
OMG-UML V1.3
March 2000
6
<!ELEMENT XMI.octetStream (#PCDATA) >
<!ELEMENT XMI.unionDiscrim ANY >
<!ELEMENT XMI.enum EMPTY >
<!ATTLIST XMI.enum
xmi.value CDATA #REQUIRED
>
<!ELEMENT XMI.any ANY >
<!ATTLIST XMI.any
%XMI.link.att;
xmi.type CDATA #IMPLIED
xmi.name CDATA #IMPLIED
>
<!ELEMENT XMI.CorbaTypeCode (XMI.CorbaTcAlias | XMI.CorbaTcStruct
|
XMI.CorbaTcSequence | XMI.CorbaTcArray |
XMI.CorbaTcEnum | XMI.CorbaTcUnion |
XMI.CorbaTcExcept | XMI.CorbaTcString |
XMI.CorbaTcWstring | XMI.CorbaTcShort |
XMI.CorbaTcLong | XMI.CorbaTcUshort |
XMI.CorbaTcUlong | XMI.CorbaTcFloat |
XMI.CorbaTcDouble | XMI.CorbaTcBoolean |
XMI.CorbaTcChar | XMI.CorbaTcWchar |
XMI.CorbaTcOctet | XMI.CorbaTcAny |
XMI.CorbaTcTypeCode | XMI.CorbaTcPrincipal
|
XMI.CorbaTcNull | XMI.CorbaTcVoid |
XMI.CorbaTcLongLong |
XMI.CorbaTcLongDouble) >
<!ATTLIST XMI.CorbaTypeCode
%XMI.element.att;
>
<!ELEMENT XMI.CorbaTcAlias (XMI.CorbaTypeCode) >
OMG-UML V1.3
UML XMI DTD
March 2000
6-29
6
<!ATTLIST XMI.CorbaTcAlias
xmi.tcName CDATA #REQUIRED
xmi.tcId
CDATA #IMPLIED
>
<!ELEMENT XMI.CorbaTcStruct (XMI.CorbaTcField)* >
<!ATTLIST XMI.CorbaTcStruct
xmi.tcName CDATA #REQUIRED
xmi.tcId
CDATA #IMPLIED
>
<!ELEMENT XMI.CorbaTcField (XMI.CorbaTypeCode) >
<!ATTLIST XMI.CorbaTcField
xmi.tcName CDATA #REQUIRED
>
<!ELEMENT XMI.CorbaTcSequence (XMI.CorbaTypeCode |
XMI.CorbaRecursiveType) >
<!ATTLIST XMI.CorbaTcSequence
xmi.tcLength CDATA #REQUIRED
>
<!ELEMENT XMI.CorbaRecursiveType EMPTY >
<!ATTLIST XMI.CorbaRecursiveType
xmi.offset CDATA #REQUIRED
>
<!ELEMENT XMI.CorbaTcArray (XMI.CorbaTypeCode) >
<!ATTLIST XMI.CorbaTcArray
xmi.tcLength CDATA #REQUIRED
>
<!ELEMENT XMI.CorbaTcObjRef EMPTY >
<!ATTLIST XMI.CorbaTcObjRef
xmi.tcName CDATA #REQUIRED
6-30
xmi.tcId
CDATA #IMPLIED
OMG-UML V1.3
March 2000
6
>
<!ELEMENT XMI.CorbaTcEnum (XMI.CorbaTcEnumLabel) >
<!ATTLIST XMI.CorbaTcEnum
xmi.tcName CDATA #REQUIRED
xmi.tcId
CDATA #IMPLIED
>
<!ELEMENT XMI.CorbaTcEnumLabel EMPTY >
<!ATTLIST XMI.CorbaTcEnumLabel
xmi.tcName CDATA #REQUIRED
>
<!ELEMENT XMI.CorbaTcUnionMbr (XMI.CorbaTypeCode, XMI.any) >
<!ATTLIST XMI.CorbaTcUnionMbr
xmi.tcName CDATA #REQUIRED
>
<!ELEMENT XMI.CorbaTcUnion (XMI.CorbaTypeCode,
XMI.CorbaTcUnionMbr*) >
<!ATTLIST XMI.CorbaTcUnion
xmi.tcName CDATA #REQUIRED
xmi.tcId
CDATA #IMPLIED
>
<!ELEMENT XMI.CorbaTcExcept (XMI.CorbaTcField)* >
<!ATTLIST XMI.CorbaTcExcept
xmi.tcName CDATA #REQUIRED
xmi.tcId
CDATA #IMPLIED
>
<!ELEMENT XMI.CorbaTcString EMPTY >
<!ATTLIST XMI.CorbaTcString
xmi.tcLength CDATA #REQUIRED
>
OMG-UML V1.3
UML XMI DTD
March 2000
6-31
6
<!ELEMENT XMI.CorbaTcWstring EMPTY >
<!ATTLIST XMI.CorbaTcWstring
xmi.tcLength CDATA #REQUIRED
>
<!ELEMENT XMI.CorbaTcFixed EMPTY >
<!ATTLIST XMI.CorbaTcFixed
xmi.tcDigits CDATA #REQUIRED
xmi.tcScale
CDATA #REQUIRED
>
<!ELEMENT XMI.CorbaTcShort EMPTY >
<!ELEMENT XMI.CorbaTcLong EMPTY >
<!ELEMENT XMI.CorbaTcUshort EMPTY >
<!ELEMENT XMI.CorbaTcUlong EMPTY >
<!ELEMENT XMI.CorbaTcFloat EMPTY >
<!ELEMENT XMI.CorbaTcDouble EMPTY >
<!ELEMENT XMI.CorbaTcBoolean EMPTY >
<!ELEMENT XMI.CorbaTcChar EMPTY >
<!ELEMENT XMI.CorbaTcWchar EMPTY >
<!ELEMENT XMI.CorbaTcOctet EMPTY >
<!ELEMENT XMI.CorbaTcAny EMPTY >
<!ELEMENT XMI.CorbaTcTypeCode EMPTY >
<!ELEMENT XMI.CorbaTcPrincipal EMPTY >
6-32
OMG-UML V1.3
March 2000
6
<!ELEMENT XMI.CorbaTcNull EMPTY >
<!ELEMENT XMI.CorbaTcVoid EMPTY >
<!ELEMENT XMI.CorbaTcLongLong EMPTY >
<!ELEMENT XMI.CorbaTcLongDouble EMPTY >
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL:
UML1.3
-->
<!-_______________________________________________________________
-->
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL PACKAGE: Foundation
-->
<!-_______________________________________________________________
-->
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL PACKAGE: Core
-->
<!-_______________________________________________________________
-->
OMG-UML V1.3
UML XMI DTD
March 2000
6-33
6
<!ELEMENT Foundation.Core.Association.connection
(Foundation.Core.AssociationEnd |
Behavioral_Elements.Collaborations.AssociationEndRole)*
>
<!ELEMENT Foundation.Core.Classifier.feature
(Foundation.Core.Feature |
Foundation.Core.BehavioralFeature |
Behavioral_Elements.Common_Behavior.Reception |
Foundation.Core.Operation |
Foundation.Core.Method |
Foundation.Core.StructuralFeature |
Foundation.Core.Attribute)*
>
<!ELEMENT Foundation.Core.Namespace.ownedElement
(Foundation.Core.ModelElement |
Foundation.Core.Comment |
Foundation.Core.Relationship |
Behavioral_Elements.Use_Cases.Extend |
Behavioral_Elements.Use_Cases.Include |
Foundation.Core.Generalization |
Foundation.Core.Flow |
Foundation.Core.Association |
Foundation.Core.AssociationClass |
Behavioral_Elements.Collaborations.AssociationRole |
Foundation.Core.Dependency
|
Foundation.Core.Abstraction |
Foundation.Core.Usage |
6-34
OMG-UML V1.3
March 2000
6
Foundation.Core.Binding |
Foundation.Core.Permission
|
Foundation.Extension_Mechanisms.TaggedValue |
Behavioral_Elements.Common_Behavior.Instance |
Behavioral_Elements.Common_Behavior.Object |
Behavioral_Elements.Common_Behavior.LinkObject |
Behavioral_Elements.Common_Behavior.DataValue |
Behavioral_Elements.Common_Behavior.ComponentInstance |
Behavioral_Elements.Common_Behavior.NodeInstance |
Behavioral_Elements.Use_Cases.UseCaseInstance |
Behavioral_Elements.Common_Behavior.Action |
Behavioral_Elements.Common_Behavior.CallAction |
Behavioral_Elements.Common_Behavior.SendAction |
Behavioral_Elements.Common_Behavior.ActionSequence |
Behavioral_Elements.Common_Behavior.ReturnAction |
Behavioral_Elements.Common_Behavior.TerminateAction |
Behavioral_Elements.Common_Behavior.DestroyAction |
Behavioral_Elements.Common_Behavior.CreateAction |
Behavioral_Elements.Common_Behavior.UninterpretedAction |
Behavioral_Elements.Common_Behavior.AttributeLink |
Behavioral_Elements.Common_Behavior.Argument |
Behavioral_Elements.Common_Behavior.Link |
OMG-UML V1.3
UML XMI DTD
March 2000
6-35
6
Behavioral_Elements.Common_Behavior.LinkEnd |
Behavioral_Elements.Common_Behavior.Stimulus |
Behavioral_Elements.Use_Cases.ExtensionPoint |
Behavioral_Elements.State_Machines.StateMachine |
Behavioral_Elements.Activity_Graphs.ActivityGraph |
Behavioral_Elements.State_Machines.Event |
Behavioral_Elements.State_Machines.TimeEvent |
Behavioral_Elements.State_Machines.CallEvent |
Behavioral_Elements.State_Machines.SignalEvent |
Behavioral_Elements.State_Machines.ChangeEvent |
Behavioral_Elements.State_Machines.Transition |
Behavioral_Elements.State_Machines.StateVertex |
Behavioral_Elements.State_Machines.Pseudostate |
Behavioral_Elements.State_Machines.SynchState |
Behavioral_Elements.State_Machines.StubState |
Behavioral_Elements.State_Machines.State |
Behavioral_Elements.State_Machines.CompositeState |
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState |
Behavioral_Elements.State_Machines.SimpleState |
Behavioral_Elements.Activity_Graphs.ObjectFlowState |
Behavioral_Elements.Activity_Graphs.ActionState |
6-36
OMG-UML V1.3
March 2000
6
Behavioral_Elements.Activity_Graphs.CallState |
Behavioral_Elements.State_Machines.FinalState |
Behavioral_Elements.State_Machines.Guard |
Behavioral_Elements.Collaborations.Message |
Behavioral_Elements.Collaborations.Interaction |
Behavioral_Elements.Activity_Graphs.Partition |
Foundation.Core.Feature |
Foundation.Core.BehavioralFeature |
Behavioral_Elements.Common_Behavior.Reception |
Foundation.Core.Operation |
Foundation.Core.Method |
Foundation.Core.StructuralFeature |
Foundation.Core.Attribute |
Foundation.Core.GeneralizableElement |
Foundation.Extension_Mechanisms.Stereotype |
Behavioral_Elements.Collaborations.Collaboration |
Model_Management.Package |
Model_Management.Subsystem
|
Model_Management.Model |
Foundation.Core.Classifier
|
Foundation.Core.Class |
Foundation.Core.DataType |
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node |
Behavioral_Elements.Common_Behavior.Signal |
OMG-UML V1.3
UML XMI DTD
March 2000
6-37
6
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Foundation.Core.AssociationEnd |
Behavioral_Elements.Collaborations.AssociationEndRole |
Foundation.Core.Namespace |
Foundation.Core.Parameter |
Foundation.Core.Constraint)*
>
<!ELEMENT Foundation.Core.BehavioralFeature.parameter
(Foundation.Core.Parameter)* >
<!ELEMENT Foundation.Core.AssociationEnd.qualifier
(Foundation.Core.Attribute)* >
<!ELEMENT Foundation.Core.ModelElement.templateParameter
(Foundation.Core.TemplateParameter)* >
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Classifier
-->
<!-_______________________________________________________________
-->
6-38
OMG-UML V1.3
March 2000
6
<!ELEMENT Foundation.Core.Classifier.participant
(Foundation.Core.AssociationEnd |
Behavioral_Elements.Collaborations.AssociationEndRole)*
>
<!ELEMENT Foundation.Core.Classifier.powertypeRange
(Foundation.Core.Generalization)* >
<!ELEMENT Foundation.Core.Classifier.instance
(Behavioral_Elements.Common_Behavior.Instance |
Behavioral_Elements.Common_Behavior.Object |
Behavioral_Elements.Common_Behavior.LinkObject |
Behavioral_Elements.Common_Behavior.DataValue |
Behavioral_Elements.Common_Behavior.ComponentInstance |
Behavioral_Elements.Common_Behavior.NodeInstance |
Behavioral_Elements.Use_Cases.UseCaseInstance)*
>
<!ELEMENT Foundation.Core.Classifier.createAction
(Behavioral_Elements.Common_Behavior.CreateAction)* >
<!ELEMENT Foundation.Core.Classifier.classifierRole
(Behavioral_Elements.Collaborations.ClassifierRole)* >
<!ELEMENT Foundation.Core.Classifier.collaboration
(Behavioral_Elements.Collaborations.Collaboration)* >
<!ELEMENT Foundation.Core.Classifier.classifierInState
OMG-UML V1.3
UML XMI DTD
March 2000
6-39
6
(Behavioral_Elements.Activity_Graphs.ClassifierInState)* >
<!ELEMENT Foundation.Core.Classifier.objectFlowState
(Behavioral_Elements.Activity_Graphs.ObjectFlowState)* >
<!ELEMENT Foundation.Core.Classifier
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.GeneralizableElement.isRoot?,
Foundation.Core.GeneralizableElement.isLeaf?,
Foundation.Core.GeneralizableElement.isAbstract?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
6-40
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.GeneralizableElement.generalization*,
Foundation.Core.GeneralizableElement.specialization*,
Foundation.Core.Classifier.participant*,
Foundation.Core.Classifier.powertypeRange*,
Foundation.Core.Classifier.instance*,
Foundation.Core.Classifier.createAction*,
Foundation.Core.Classifier.classifierRole*,
Foundation.Core.Classifier.collaboration*,
Foundation.Core.Classifier.classifierInState*,
Foundation.Core.Classifier.objectFlowState*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Foundation.Core.Namespace.ownedElement*,
Foundation.Core.Classifier.feature*)?
>
OMG-UML V1.3
UML XMI DTD
March 2000
6-41
6
<!ATTLIST Foundation.Core.Classifier
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Class
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Core.Class.isActive EMPTY >
<!ATTLIST Foundation.Core.Class.isActive
xmi.value ( true | false ) #REQUIRED
>
<!ELEMENT Foundation.Core.Class
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.GeneralizableElement.isRoot?,
Foundation.Core.GeneralizableElement.isLeaf?,
Foundation.Core.GeneralizableElement.isAbstract?,
Foundation.Core.Class.isActive?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
6-42
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.GeneralizableElement.generalization*,
Foundation.Core.GeneralizableElement.specialization*,
Foundation.Core.Classifier.participant*,
Foundation.Core.Classifier.powertypeRange*,
Foundation.Core.Classifier.instance*,
Foundation.Core.Classifier.createAction*,
Foundation.Core.Classifier.classifierRole*,
Foundation.Core.Classifier.collaboration*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-43
6
Foundation.Core.Classifier.classifierInState*,
Foundation.Core.Classifier.objectFlowState*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Foundation.Core.Namespace.ownedElement*,
Foundation.Core.Classifier.feature*)? >
<!ATTLIST Foundation.Core.Class
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: DataType
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Core.DataType
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.GeneralizableElement.isRoot?,
Foundation.Core.GeneralizableElement.isLeaf?,
Foundation.Core.GeneralizableElement.isAbstract?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
6-44
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.GeneralizableElement.generalization*,
Foundation.Core.GeneralizableElement.specialization*,
Foundation.Core.Classifier.participant*,
Foundation.Core.Classifier.powertypeRange*,
Foundation.Core.Classifier.instance*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-45
6
Foundation.Core.Classifier.createAction*,
Foundation.Core.Classifier.classifierRole*,
Foundation.Core.Classifier.collaboration*,
Foundation.Core.Classifier.classifierInState*,
Foundation.Core.Classifier.objectFlowState*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Foundation.Core.Namespace.ownedElement*,
Foundation.Core.Classifier.feature*)?
>
<!ATTLIST Foundation.Core.DataType
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: StructuralFeature
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Core.StructuralFeature.multiplicity
(Foundation.Data_Types.Multiplicity) >
<!ELEMENT Foundation.Core.StructuralFeature.changeability EMPTY >
<!ATTLIST Foundation.Core.StructuralFeature.changeability
xmi.value ( changeable | frozen | addOnly ) #REQUIRED
6-46
OMG-UML V1.3
March 2000
6
>
<!ELEMENT Foundation.Core.StructuralFeature.targetScope EMPTY >
<!ATTLIST Foundation.Core.StructuralFeature.targetScope
xmi.value ( classifier | instance ) #REQUIRED
>
<!ELEMENT Foundation.Core.StructuralFeature.type
(Foundation.Core.Classifier |
Foundation.Core.Class |
Foundation.Core.AssociationClass |
Foundation.Core.DataType |
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node |
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Model_Management.Subsystem)?
>
<!ELEMENT Foundation.Core.StructuralFeature
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.Feature.ownerScope?,
OMG-UML V1.3
UML XMI DTD
March 2000
6-47
6
Foundation.Core.StructuralFeature.multiplicity?,
Foundation.Core.StructuralFeature.changeability?,
Foundation.Core.StructuralFeature.targetScope?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
6-48
OMG-UML V1.3
March 2000
6
Foundation.Core.Feature.owner?,
Foundation.Core.Feature.classifierRole*,
Foundation.Core.StructuralFeature.type?,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*)?
>
<!ATTLIST Foundation.Core.StructuralFeature
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Namespace
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Core.Namespace
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-49
6
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Foundation.Core.Namespace.ownedElement*)?
>
<!ATTLIST Foundation.Core.Namespace
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
6-50
OMG-UML V1.3
March 2000
6
<!--
-->
<!-- METAMODEL CLASS: AssociationEnd
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Core.AssociationEnd.isNavigable EMPTY >
<!ATTLIST Foundation.Core.AssociationEnd.isNavigable
xmi.value ( true | false ) #REQUIRED
>
<!ELEMENT Foundation.Core.AssociationEnd.ordering EMPTY >
<!ATTLIST Foundation.Core.AssociationEnd.ordering
xmi.value ( unordered | ordered | sorted ) #REQUIRED
>
<!ELEMENT Foundation.Core.AssociationEnd.aggregation EMPTY >
<!ATTLIST Foundation.Core.AssociationEnd.aggregation
xmi.value ( none | aggregate | composite ) #REQUIRED
>
<!ELEMENT Foundation.Core.AssociationEnd.targetScope EMPTY >
<!ATTLIST Foundation.Core.AssociationEnd.targetScope
xmi.value ( classifier | instance ) #REQUIRED
>
<!ELEMENT Foundation.Core.AssociationEnd.multiplicity
(Foundation.Data_Types.Multiplicity) >
<!ELEMENT Foundation.Core.AssociationEnd.changeability EMPTY >
<!ATTLIST Foundation.Core.AssociationEnd.changeability
xmi.value ( changeable | frozen | addOnly ) #REQUIRED
>
OMG-UML V1.3
UML XMI DTD
March 2000
6-51
6
<!ELEMENT Foundation.Core.AssociationEnd.association
(Foundation.Core.Association |
Foundation.Core.AssociationClass |
Behavioral_Elements.Collaborations.AssociationRole)?
>
<!ELEMENT Foundation.Core.AssociationEnd.type
(Foundation.Core.Classifier |
Foundation.Core.Class |
Foundation.Core.AssociationClass |
Foundation.Core.DataType |
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node |
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Model_Management.Subsystem)?
>
<!ELEMENT Foundation.Core.AssociationEnd.specification
(Foundation.Core.Classifier |
Foundation.Core.Class
|
Foundation.Core.AssociationClass |
Foundation.Core.DataType |
Foundation.Core.Interface |
6-52
OMG-UML V1.3
March 2000
6
Foundation.Core.Component |
Foundation.Core.Node |
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Model_Management.Subsystem)*
>
<!ELEMENT Foundation.Core.AssociationEnd.linkEnd
(Behavioral_Elements.Common_Behavior.LinkEnd)* >
<!ELEMENT Foundation.Core.AssociationEnd.associationEndRole
(Behavioral_Elements.Collaborations.AssociationEndRole)* >
<!ELEMENT Foundation.Core.AssociationEnd
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.AssociationEnd.isNavigable?,
Foundation.Core.AssociationEnd.ordering?,
Foundation.Core.AssociationEnd.aggregation?,
Foundation.Core.AssociationEnd.targetScope?,
OMG-UML V1.3
UML XMI DTD
March 2000
6-53
6
Foundation.Core.AssociationEnd.multiplicity?,
Foundation.Core.AssociationEnd.changeability?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.AssociationEnd.association?,
6-54
OMG-UML V1.3
March 2000
6
Foundation.Core.AssociationEnd.type?,
Foundation.Core.AssociationEnd.specification*,
Foundation.Core.AssociationEnd.linkEnd*,
Foundation.Core.AssociationEnd.associationEndRole*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Foundation.Core.AssociationEnd.qualifier*)?
>
<!ATTLIST Foundation.Core.AssociationEnd
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Interface
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Core.Interface
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.GeneralizableElement.isRoot?,
Foundation.Core.GeneralizableElement.isLeaf?,
Foundation.Core.GeneralizableElement.isAbstract?,
OMG-UML V1.3
UML XMI DTD
March 2000
6-55
6
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.GeneralizableElement.generalization*,
Foundation.Core.GeneralizableElement.specialization*,
Foundation.Core.Classifier.participant*,
6-56
OMG-UML V1.3
March 2000
6
Foundation.Core.Classifier.powertypeRange*,
Foundation.Core.Classifier.instance*,
Foundation.Core.Classifier.createAction*,
Foundation.Core.Classifier.classifierRole*,
Foundation.Core.Classifier.collaboration*,
Foundation.Core.Classifier.classifierInState*,
Foundation.Core.Classifier.objectFlowState*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Foundation.Core.Namespace.ownedElement*,
Foundation.Core.Classifier.feature*)?
>
<!ATTLIST Foundation.Core.Interface
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Constraint
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Core.Constraint.body
(Foundation.Data_Types.BooleanExpression) >
OMG-UML V1.3
UML XMI DTD
March 2000
6-57
6
<!ELEMENT Foundation.Core.Constraint.constrainedElement
(Foundation.Core.ModelElement |
Foundation.Core.Comment |
Foundation.Core.Relationship |
Behavioral_Elements.Use_Cases.Extend |
Behavioral_Elements.Use_Cases.Include |
Foundation.Core.Generalization |
Foundation.Core.Flow
|
Foundation.Core.Association |
Foundation.Core.AssociationClass |
Behavioral_Elements.Collaborations.AssociationRole |
Foundation.Core.Dependency |
Foundation.Core.Abstraction |
Foundation.Core.Usage
|
Foundation.Core.Binding |
Foundation.Core.Permission |
Foundation.Extension_Mechanisms.TaggedValue |
Behavioral_Elements.Common_Behavior.Instance |
Behavioral_Elements.Common_Behavior.Object |
Behavioral_Elements.Common_Behavior.LinkObject |
Behavioral_Elements.Common_Behavior.DataValue |
Behavioral_Elements.Common_Behavior.ComponentInstance |
Behavioral_Elements.Common_Behavior.NodeInstance |
6-58
OMG-UML V1.3
March 2000
6
Behavioral_Elements.Use_Cases.UseCaseInstance |
Behavioral_Elements.Common_Behavior.Action |
Behavioral_Elements.Common_Behavior.CallAction |
Behavioral_Elements.Common_Behavior.SendAction |
Behavioral_Elements.Common_Behavior.ActionSequence |
Behavioral_Elements.Common_Behavior.ReturnAction |
Behavioral_Elements.Common_Behavior.TerminateAction |
Behavioral_Elements.Common_Behavior.DestroyAction |
Behavioral_Elements.Common_Behavior.CreateAction |
Behavioral_Elements.Common_Behavior.UninterpretedAction |
Behavioral_Elements.Common_Behavior.AttributeLink |
Behavioral_Elements.Common_Behavior.Argument |
Behavioral_Elements.Common_Behavior.Link |
Behavioral_Elements.Common_Behavior.LinkEnd |
Behavioral_Elements.Common_Behavior.Stimulus |
Behavioral_Elements.Use_Cases.ExtensionPoint |
Behavioral_Elements.State_Machines.StateMachine |
Behavioral_Elements.Activity_Graphs.ActivityGraph |
Behavioral_Elements.State_Machines.Event |
Behavioral_Elements.State_Machines.TimeEvent |
Behavioral_Elements.State_Machines.CallEvent |
Behavioral_Elements.State_Machines.SignalEvent |
OMG-UML V1.3
UML XMI DTD
March 2000
6-59
6
Behavioral_Elements.State_Machines.ChangeEvent |
Behavioral_Elements.State_Machines.Transition |
Behavioral_Elements.State_Machines.StateVertex |
Behavioral_Elements.State_Machines.Pseudostate |
Behavioral_Elements.State_Machines.SynchState |
Behavioral_Elements.State_Machines.StubState |
Behavioral_Elements.State_Machines.State |
Behavioral_Elements.State_Machines.CompositeState |
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState |
Behavioral_Elements.State_Machines.SimpleState |
Behavioral_Elements.Activity_Graphs.ObjectFlowState |
Behavioral_Elements.Activity_Graphs.ActionState |
Behavioral_Elements.Activity_Graphs.CallState |
Behavioral_Elements.State_Machines.FinalState |
Behavioral_Elements.State_Machines.Guard |
Behavioral_Elements.Collaborations.Message |
Behavioral_Elements.Collaborations.Interaction |
Behavioral_Elements.Activity_Graphs.Partition |
Foundation.Core.Feature |
Foundation.Core.BehavioralFeature |
Behavioral_Elements.Common_Behavior.Reception |
6-60
OMG-UML V1.3
March 2000
6
Foundation.Core.Operation |
Foundation.Core.Method |
Foundation.Core.StructuralFeature |
Foundation.Core.Attribute |
Foundation.Core.GeneralizableElement |
Foundation.Extension_Mechanisms.Stereotype |
Behavioral_Elements.Collaborations.Collaboration |
Model_Management.Package |
Model_Management.Subsystem |
Model_Management.Model |
Foundation.Core.Classifier |
Foundation.Core.Class
|
Foundation.Core.DataType |
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node
|
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
OMG-UML V1.3
UML XMI DTD
March 2000
6-61
6
Foundation.Core.AssociationEnd |
Behavioral_Elements.Collaborations.AssociationEndRole |
Foundation.Core.Namespace |
Foundation.Core.Parameter |
Foundation.Core.Constraint)*
>
<!ELEMENT Foundation.Core.Constraint.constrainedElement2
(Foundation.Extension_Mechanisms.Stereotype)? >
<!ELEMENT Foundation.Core.Constraint
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.Constraint.body?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
6-62
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.Constraint.constrainedElement*,
Foundation.Core.Constraint.constrainedElement2?,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*)?
>
<!ATTLIST Foundation.Core.Constraint
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Association
-->
<!-_______________________________________________________________
-->
OMG-UML V1.3
UML XMI DTD
March 2000
6-63
6
<!ELEMENT Foundation.Core.Association.link
(Behavioral_Elements.Common_Behavior.Link |
Behavioral_Elements.Common_Behavior.LinkObject)*
>
<!ELEMENT Foundation.Core.Association.associationRole
(Behavioral_Elements.Collaborations.AssociationRole)* >
<!ELEMENT Foundation.Core.Association
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.GeneralizableElement.isRoot?,
Foundation.Core.GeneralizableElement.isLeaf?,
Foundation.Core.GeneralizableElement.isAbstract?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
6-64
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.GeneralizableElement.generalization*,
Foundation.Core.GeneralizableElement.specialization*,
Foundation.Core.Association.link*,
Foundation.Core.Association.associationRole*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Foundation.Core.Association.connection*)?
>
<!ATTLIST Foundation.Core.Association
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Element
-->
OMG-UML V1.3
UML XMI DTD
March 2000
6-65
6
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Core.Element (XMI.extension*)? >
<!ATTLIST Foundation.Core.Element
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: GeneralizableElement
->
-
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Core.GeneralizableElement.isRoot EMPTY >
<!ATTLIST Foundation.Core.GeneralizableElement.isRoot
xmi.value ( true | false ) #REQUIRED
>
<!ELEMENT Foundation.Core.GeneralizableElement.isLeaf EMPTY >
<!ATTLIST Foundation.Core.GeneralizableElement.isLeaf
xmi.value ( true | false ) #REQUIRED
>
<!ELEMENT Foundation.Core.GeneralizableElement.isAbstract EMPTY >
<!ATTLIST Foundation.Core.GeneralizableElement.isAbstract
xmi.value ( true | false ) #REQUIRED
>
<!ELEMENT Foundation.Core.GeneralizableElement.generalization
6-66
OMG-UML V1.3
March 2000
6
(Foundation.Core.Generalization)* >
<!ELEMENT Foundation.Core.GeneralizableElement.specialization
(Foundation.Core.Generalization)* >
<!ELEMENT Foundation.Core.GeneralizableElement
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.GeneralizableElement.isRoot?,
Foundation.Core.GeneralizableElement.isLeaf?,
Foundation.Core.GeneralizableElement.isAbstract?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-67
6
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.GeneralizableElement.generalization*,
Foundation.Core.GeneralizableElement.specialization*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*)?
>
<!ATTLIST Foundation.Core.GeneralizableElement
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Attribute
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Core.Attribute.initialValue
(Foundation.Data_Types.Expression |
Foundation.Data_Types.BooleanExpression |
6-68
OMG-UML V1.3
March 2000
6
Foundation.Data_Types.ActionExpression |
Foundation.Data_Types.IterationExpression |
Foundation.Data_Types.TypeExpression |
Foundation.Data_Types.ArgListsExpression |
Foundation.Data_Types.MappingExpression |
Foundation.Data_Types.ProcedureExpression |
Foundation.Data_Types.TimeExpression |
Foundation.Data_Types.ObjectSetExpression)
>
<!ELEMENT Foundation.Core.Attribute.associationEnd
(Foundation.Core.AssociationEnd |
Behavioral_Elements.Collaborations.AssociationEndRole)?
>
<!ELEMENT Foundation.Core.Attribute.attributeLink
(Behavioral_Elements.Common_Behavior.AttributeLink)* >
<!ELEMENT Foundation.Core.Attribute.associationEndRole
(Behavioral_Elements.Collaborations.AssociationEndRole)* >
<!ELEMENT Foundation.Core.Attribute
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.Feature.ownerScope?,
Foundation.Core.StructuralFeature.multiplicity?,
OMG-UML V1.3
UML XMI DTD
March 2000
6-69
6
Foundation.Core.StructuralFeature.changeability?,
Foundation.Core.StructuralFeature.targetScope?,
Foundation.Core.Attribute.initialValue?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
6-70
OMG-UML V1.3
March 2000
6
Foundation.Core.Feature.owner?,
Foundation.Core.Feature.classifierRole*,
Foundation.Core.StructuralFeature.type?,
Foundation.Core.Attribute.associationEnd?,
Foundation.Core.Attribute.attributeLink*,
Foundation.Core.Attribute.associationEndRole*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*)?
>
<!ATTLIST Foundation.Core.Attribute
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Operation
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Core.Operation.concurrency EMPTY >
<!ATTLIST Foundation.Core.Operation.concurrency
xmi.value ( sequential | guarded | concurrent ) #REQUIRED
>
<!ELEMENT Foundation.Core.Operation.isRoot EMPTY >
<!ATTLIST Foundation.Core.Operation.isRoot
xmi.value ( true | false ) #REQUIRED
>
OMG-UML V1.3
UML XMI DTD
March 2000
6-71
6
<!ELEMENT Foundation.Core.Operation.isLeaf EMPTY >
<!ATTLIST Foundation.Core.Operation.isLeaf
xmi.value ( true | false ) #REQUIRED
>
<!ELEMENT Foundation.Core.Operation.isAbstract EMPTY >
<!ATTLIST Foundation.Core.Operation.isAbstract
xmi.value ( true | false ) #REQUIRED
>
<!ELEMENT Foundation.Core.Operation.specification (#PCDATA |
XMI.reference)* >
<!ELEMENT Foundation.Core.Operation.method
(Foundation.Core.Method)* >
<!ELEMENT Foundation.Core.Operation.callAction
(Behavioral_Elements.Common_Behavior.CallAction)* >
<!ELEMENT Foundation.Core.Operation.occurrence
(Behavioral_Elements.State_Machines.CallEvent)* >
<!ELEMENT Foundation.Core.Operation.collaboration
(Behavioral_Elements.Collaborations.Collaboration)* >
<!ELEMENT Foundation.Core.Operation
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.Feature.ownerScope?,
Foundation.Core.BehavioralFeature.isQuery?,
6-72
OMG-UML V1.3
March 2000
6
Foundation.Core.Operation.concurrency?,
Foundation.Core.Operation.isRoot?,
Foundation.Core.Operation.isLeaf?,
Foundation.Core.Operation.isAbstract?,
Foundation.Core.Operation.specification?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-73
6
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.Feature.owner?,
Foundation.Core.Feature.classifierRole*,
Foundation.Core.BehavioralFeature.raisedSignal*,
Foundation.Core.Operation.method*,
Foundation.Core.Operation.callAction*,
Foundation.Core.Operation.occurrence*,
Foundation.Core.Operation.collaboration*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Foundation.Core.BehavioralFeature.parameter*)?
>
<!ATTLIST Foundation.Core.Operation
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Parameter
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Core.Parameter.defaultValue
(Foundation.Data_Types.Expression |
Foundation.Data_Types.BooleanExpression |
Foundation.Data_Types.ActionExpression |
6-74
OMG-UML V1.3
March 2000
6
Foundation.Data_Types.IterationExpression |
Foundation.Data_Types.TypeExpression |
Foundation.Data_Types.ArgListsExpression |
Foundation.Data_Types.MappingExpression |
Foundation.Data_Types.ProcedureExpression |
Foundation.Data_Types.TimeExpression |
Foundation.Data_Types.ObjectSetExpression)
>
<!ELEMENT Foundation.Core.Parameter.kind EMPTY >
<!ATTLIST Foundation.Core.Parameter.kind
xmi.value ( in | inout | out | return ) #REQUIRED
>
<!ELEMENT Foundation.Core.Parameter.behavioralFeature
(Foundation.Core.BehavioralFeature |
Behavioral_Elements.Common_Behavior.Reception |
Foundation.Core.Operation |
Foundation.Core.Method)?
>
<!ELEMENT Foundation.Core.Parameter.type
(Foundation.Core.Classifier |
Foundation.Core.Class |
Foundation.Core.AssociationClass
|
Foundation.Core.DataType |
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node |
OMG-UML V1.3
UML XMI DTD
March 2000
6-75
6
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Model_Management.Subsystem)? >
<!ELEMENT Foundation.Core.Parameter.event
(Behavioral_Elements.State_Machines.Event |
Behavioral_Elements.State_Machines.TimeEvent |
Behavioral_Elements.State_Machines.CallEvent |
Behavioral_Elements.State_Machines.SignalEvent |
Behavioral_Elements.State_Machines.ChangeEvent)?
>
<!ELEMENT Foundation.Core.Parameter.state
(Behavioral_Elements.Activity_Graphs.ObjectFlowState)* >
<!ELEMENT Foundation.Core.Parameter
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.Parameter.defaultValue?,
Foundation.Core.Parameter.kind?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
6-76
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.Parameter.behavioralFeature?,
Foundation.Core.Parameter.type?,
Foundation.Core.Parameter.event?,
Foundation.Core.Parameter.state*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*)?
OMG-UML V1.3
UML XMI DTD
March 2000
6-77
6
>
<!ATTLIST Foundation.Core.Parameter
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Method
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Core.Method.body
(Foundation.Data_Types.ProcedureExpression) >
<!ELEMENT Foundation.Core.Method.specification
(Foundation.Core.Operation)?
>
<!ELEMENT Foundation.Core.Method
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.Feature.ownerScope?,
Foundation.Core.BehavioralFeature.isQuery?,
Foundation.Core.Method.body?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
6-78
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.Feature.owner?,
Foundation.Core.Feature.classifierRole*,
Foundation.Core.BehavioralFeature.raisedSignal*,
Foundation.Core.Method.specification?,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Foundation.Core.BehavioralFeature.parameter*)?
>
OMG-UML V1.3
UML XMI DTD
March 2000
6-79
6
<!ATTLIST Foundation.Core.Method
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Generalization
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Core.Generalization.discriminator (#PCDATA |
XMI.reference)* >
<!ELEMENT Foundation.Core.Generalization.child
(Foundation.Core.GeneralizableElement |
Foundation.Extension_Mechanisms.Stereotype |
Behavioral_Elements.Collaborations.Collaboration |
Model_Management.Package |
Model_Management.Subsystem |
Model_Management.Model |
Foundation.Core.Classifier |
Foundation.Core.Class |
Foundation.Core.AssociationClass |
Foundation.Core.DataType |
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node |
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
6-80
OMG-UML V1.3
March 2000
6
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Foundation.Core.Association
|
Behavioral_Elements.Collaborations.AssociationRole)?
>
<!ELEMENT Foundation.Core.Generalization.parent
(Foundation.Core.GeneralizableElement |
Foundation.Extension_Mechanisms.Stereotype |
Behavioral_Elements.Collaborations.Collaboration |
Model_Management.Package |
Model_Management.Subsystem
|
Model_Management.Model |
Foundation.Core.Classifier
|
Foundation.Core.Class |
Foundation.Core.AssociationClass |
Foundation.Core.DataType |
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node |
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
OMG-UML V1.3
UML XMI DTD
March 2000
6-81
6
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Foundation.Core.Association
|
Behavioral_Elements.Collaborations.AssociationRole)?
>
<!ELEMENT Foundation.Core.Generalization.powertype
(Foundation.Core.Classifier |
Foundation.Core.Class |
Foundation.Core.AssociationClass |
Foundation.Core.DataType
|
Foundation.Core.Interface
|
Foundation.Core.Component
|
Foundation.Core.Node |
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Model_Management.Subsystem)?
>
<!ELEMENT Foundation.Core.Generalization
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
6-82
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.Generalization.discriminator?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.Generalization.child?,
OMG-UML V1.3
UML XMI DTD
March 2000
6-83
6
Foundation.Core.Generalization.parent?,
Foundation.Core.Generalization.powertype?,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*)?
>
<!ATTLIST Foundation.Core.Generalization
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: AssociationClass
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Core.AssociationClass
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.GeneralizableElement.isRoot?,
Foundation.Core.GeneralizableElement.isLeaf?,
Foundation.Core.GeneralizableElement.isAbstract?,
Foundation.Core.Class.isActive?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
6-84
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.GeneralizableElement.generalization*,
Foundation.Core.GeneralizableElement.specialization*,
Foundation.Core.Association.link*,
Foundation.Core.Association.associationRole*,
Foundation.Core.Classifier.participant*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-85
6
Foundation.Core.Classifier.powertypeRange*,
Foundation.Core.Classifier.instance*,
Foundation.Core.Classifier.createAction*,
Foundation.Core.Classifier.classifierRole*,
Foundation.Core.Classifier.collaboration*,
Foundation.Core.Classifier.classifierInState*,
Foundation.Core.Classifier.objectFlowState*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Foundation.Core.Association.connection*,
Foundation.Core.Namespace.ownedElement*,
Foundation.Core.Classifier.feature*)?
>
<!ATTLIST Foundation.Core.AssociationClass
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Feature
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Core.Feature.ownerScope EMPTY >
<!ATTLIST Foundation.Core.Feature.ownerScope
6-86
OMG-UML V1.3
March 2000
6
xmi.value ( classifier | instance ) #REQUIRED
>
<!ELEMENT Foundation.Core.Feature.owner
(Foundation.Core.Classifier |
Foundation.Core.Class |
Foundation.Core.AssociationClass
|
Foundation.Core.DataType |
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node |
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Model_Management.Subsystem)? >
<!ELEMENT Foundation.Core.Feature.classifierRole
(Behavioral_Elements.Collaborations.ClassifierRole)* >
<!ELEMENT Foundation.Core.Feature
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.Feature.ownerScope?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
OMG-UML V1.3
UML XMI DTD
March 2000
6-87
6
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.Feature.owner?,
Foundation.Core.Feature.classifierRole*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*)?
>
<!ATTLIST Foundation.Core.Feature
%XMI.element.att;
6-88
OMG-UML V1.3
March 2000
6
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: BehavioralFeature
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Core.BehavioralFeature.isQuery EMPTY >
<!ATTLIST Foundation.Core.BehavioralFeature.isQuery
xmi.value ( true | false ) #REQUIRED
>
<!ELEMENT Foundation.Core.BehavioralFeature.raisedSignal
(Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception)*
>
<!ELEMENT Foundation.Core.BehavioralFeature
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.Feature.ownerScope?,
Foundation.Core.BehavioralFeature.isQuery?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-89
6
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.Feature.owner?,
Foundation.Core.Feature.classifierRole*,
Foundation.Core.BehavioralFeature.raisedSignal*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Foundation.Core.BehavioralFeature.parameter*)?
>
6-90
OMG-UML V1.3
March 2000
6
<!ATTLIST Foundation.Core.BehavioralFeature
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: ModelElement
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Core.ModelElement.name (#PCDATA |
XMI.reference)* >
<!ELEMENT Foundation.Core.ModelElement.visibility EMPTY >
<!ATTLIST Foundation.Core.ModelElement.visibility
xmi.value ( public | private | protected ) #REQUIRED
>
<!ELEMENT Foundation.Core.ModelElement.isSpecification EMPTY >
<!ATTLIST Foundation.Core.ModelElement.isSpecification
xmi.value ( true | false ) #REQUIRED
>
<!ELEMENT Foundation.Core.ModelElement.namespace
(Foundation.Core.Namespace |
Behavioral_Elements.Collaborations.Collaboration |
Model_Management.Package |
Model_Management.Subsystem
|
Model_Management.Model |
Foundation.Core.Classifier
|
Foundation.Core.Class |
OMG-UML V1.3
UML XMI DTD
March 2000
6-91
6
Foundation.Core.AssociationClass |
Foundation.Core.DataType |
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node |
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState)?
>
<!ELEMENT Foundation.Core.ModelElement.clientDependency
(Foundation.Core.Dependency |
Foundation.Core.Abstraction |
Foundation.Core.Usage
|
Foundation.Core.Binding |
Foundation.Core.Permission)*
>
<!ELEMENT Foundation.Core.ModelElement.constraint
(Foundation.Core.Constraint)* >
<!ELEMENT Foundation.Core.ModelElement.supplierDependency
(Foundation.Core.Dependency |
Foundation.Core.Abstraction |
Foundation.Core.Usage |
6-92
OMG-UML V1.3
March 2000
6
Foundation.Core.Binding |
Foundation.Core.Permission)*
>
<!ELEMENT Foundation.Core.ModelElement.presentation
(Foundation.Core.PresentationElement)* >
<!ELEMENT Foundation.Core.ModelElement.targetFlow
(Foundation.Core.Flow)* >
<!ELEMENT Foundation.Core.ModelElement.sourceFlow
(Foundation.Core.Flow)* >
<!ELEMENT Foundation.Core.ModelElement.templateParameter3
(Foundation.Core.TemplateParameter)* >
<!ELEMENT Foundation.Core.ModelElement.binding
(Foundation.Core.Binding)? >
<!ELEMENT Foundation.Core.ModelElement.comment
(Foundation.Core.Comment)* >
<!ELEMENT Foundation.Core.ModelElement.elementResidence
(Foundation.Core.ElementResidence)* >
<!ELEMENT Foundation.Core.ModelElement.templateParameter2
(Foundation.Core.TemplateParameter)* >
<!ELEMENT Foundation.Core.ModelElement.stereotype
(Foundation.Extension_Mechanisms.Stereotype)? >
OMG-UML V1.3
UML XMI DTD
March 2000
6-93
6
<!ELEMENT Foundation.Core.ModelElement.behavior
(Behavioral_Elements.State_Machines.StateMachine |
Behavioral_Elements.Activity_Graphs.ActivityGraph)*
>
<!ELEMENT Foundation.Core.ModelElement.classifierRole
(Behavioral_Elements.Collaborations.ClassifierRole)* >
<!ELEMENT Foundation.Core.ModelElement.collaboration
(Behavioral_Elements.Collaborations.Collaboration)* >
<!ELEMENT Foundation.Core.ModelElement.partition
(Behavioral_Elements.Activity_Graphs.Partition)* >
<!ELEMENT Foundation.Core.ModelElement.elementImport
(Model_Management.ElementImport)* >
<!ELEMENT Foundation.Core.ModelElement
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
6-94
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*)?
>
<!ATTLIST Foundation.Core.ModelElement
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Dependency
-->
<!-_______________________________________________________________
-->
OMG-UML V1.3
UML XMI DTD
March 2000
6-95
6
<!ELEMENT Foundation.Core.Dependency.client
(Foundation.Core.ModelElement |
Foundation.Core.Comment |
Foundation.Core.Relationship |
Behavioral_Elements.Use_Cases.Extend |
Behavioral_Elements.Use_Cases.Include |
Foundation.Core.Generalization
|
Foundation.Core.Flow |
Foundation.Core.Association |
Foundation.Core.AssociationClass |
Behavioral_Elements.Collaborations.AssociationRole |
Foundation.Core.Dependency |
Foundation.Core.Abstraction |
Foundation.Core.Usage |
Foundation.Core.Binding |
Foundation.Core.Permission |
Foundation.Extension_Mechanisms.TaggedValue |
Behavioral_Elements.Common_Behavior.Instance |
Behavioral_Elements.Common_Behavior.Object |
Behavioral_Elements.Common_Behavior.LinkObject |
Behavioral_Elements.Common_Behavior.DataValue |
Behavioral_Elements.Common_Behavior.ComponentInstance |
Behavioral_Elements.Common_Behavior.NodeInstance |
Behavioral_Elements.Use_Cases.UseCaseInstance |
Behavioral_Elements.Common_Behavior.Action |
6-96
OMG-UML V1.3
March 2000
6
Behavioral_Elements.Common_Behavior.CallAction |
Behavioral_Elements.Common_Behavior.SendAction |
Behavioral_Elements.Common_Behavior.ActionSequence |
Behavioral_Elements.Common_Behavior.ReturnAction |
Behavioral_Elements.Common_Behavior.TerminateAction |
Behavioral_Elements.Common_Behavior.DestroyAction |
Behavioral_Elements.Common_Behavior.CreateAction |
Behavioral_Elements.Common_Behavior.UninterpretedAction |
Behavioral_Elements.Common_Behavior.AttributeLink |
Behavioral_Elements.Common_Behavior.Argument |
Behavioral_Elements.Common_Behavior.Link |
Behavioral_Elements.Common_Behavior.LinkEnd |
Behavioral_Elements.Common_Behavior.Stimulus |
Behavioral_Elements.Use_Cases.ExtensionPoint |
Behavioral_Elements.State_Machines.StateMachine |
Behavioral_Elements.Activity_Graphs.ActivityGraph |
Behavioral_Elements.State_Machines.Event |
Behavioral_Elements.State_Machines.TimeEvent |
Behavioral_Elements.State_Machines.CallEvent |
Behavioral_Elements.State_Machines.SignalEvent |
Behavioral_Elements.State_Machines.ChangeEvent |
Behavioral_Elements.State_Machines.Transition |
OMG-UML V1.3
UML XMI DTD
March 2000
6-97
6
Behavioral_Elements.State_Machines.StateVertex |
Behavioral_Elements.State_Machines.Pseudostate |
Behavioral_Elements.State_Machines.SynchState |
Behavioral_Elements.State_Machines.StubState |
Behavioral_Elements.State_Machines.State |
Behavioral_Elements.State_Machines.CompositeState |
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState |
Behavioral_Elements.State_Machines.SimpleState |
Behavioral_Elements.Activity_Graphs.ObjectFlowState |
Behavioral_Elements.Activity_Graphs.ActionState |
Behavioral_Elements.Activity_Graphs.CallState |
Behavioral_Elements.State_Machines.FinalState |
Behavioral_Elements.State_Machines.Guard |
Behavioral_Elements.Collaborations.Message |
Behavioral_Elements.Collaborations.Interaction |
Behavioral_Elements.Activity_Graphs.Partition |
Foundation.Core.Feature |
Foundation.Core.BehavioralFeature |
Behavioral_Elements.Common_Behavior.Reception |
Foundation.Core.Operation |
Foundation.Core.Method |
Foundation.Core.StructuralFeature |
6-98
OMG-UML V1.3
March 2000
6
Foundation.Core.Attribute |
Foundation.Core.GeneralizableElement |
Foundation.Extension_Mechanisms.Stereotype |
Behavioral_Elements.Collaborations.Collaboration |
Model_Management.Package |
Model_Management.Subsystem |
Model_Management.Model |
Foundation.Core.Classifier |
Foundation.Core.Class |
Foundation.Core.DataType |
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node |
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Foundation.Core.AssociationEnd
|
Behavioral_Elements.Collaborations.AssociationEndRole |
Foundation.Core.Namespace |
<!ELEMENT Foundation.Core.Dependency.supplier
(Foundation.Core.ModelElement |
Foundation.Core.Comment |
Foundation.Core.Relationship
|
Behavioral_Elements.Use_Cases.Extend |
OMG-UML V1.3
UML XMI DTD
March 2000
6-99
6
Behavioral_Elements.Use_Cases.Include |
Foundation.Core.Generalization |
Foundation.Core.Flow |
Foundation.Core.Association |
Foundation.Core.AssociationClass |
Behavioral_Elements.Collaborations.AssociationRole |
Foundation.Core.Dependency |
Foundation.Core.Abstraction |
Foundation.Core.Usage |
Foundation.Core.Binding |
Foundation.Core.Permission |
Foundation.Extension_Mechanisms.TaggedValue |
Behavioral_Elements.Common_Behavior.Instance |
Behavioral_Elements.Common_Behavior.Object |
Behavioral_Elements.Common_Behavior.LinkObject |
Behavioral_Elements.Common_Behavior.DataValue |
Behavioral_Elements.Common_Behavior.ComponentInstance |
Behavioral_Elements.Common_Behavior.NodeInstance |
Behavioral_Elements.Use_Cases.UseCaseInstance |
Behavioral_Elements.Common_Behavior.Action |
Behavioral_Elements.Common_Behavior.CallAction |
Behavioral_Elements.Common_Behavior.SendAction |
Behavioral_Elements.Common_Behavior.ActionSequence |
Behavioral_Elements.Common_Behavior.ReturnAction |
6-100
OMG-UML V1.3
March 2000
6
Behavioral_Elements.Common_Behavior.TerminateAction |
Behavioral_Elements.Common_Behavior.DestroyAction |
Behavioral_Elements.Common_Behavior.CreateAction |
Behavioral_Elements.Common_Behavior.UninterpretedAction |
Behavioral_Elements.Common_Behavior.AttributeLink |
Behavioral_Elements.Common_Behavior.Argument |
Behavioral_Elements.Common_Behavior.Link |
Behavioral_Elements.Common_Behavior.LinkEnd |
Behavioral_Elements.Common_Behavior.Stimulus |
Behavioral_Elements.Use_Cases.ExtensionPoint |
Behavioral_Elements.State_Machines.StateMachine |
Behavioral_Elements.Activity_Graphs.ActivityGraph |
Behavioral_Elements.State_Machines.Event |
Behavioral_Elements.State_Machines.TimeEvent |
Behavioral_Elements.State_Machines.CallEvent |
Behavioral_Elements.State_Machines.SignalEvent |
Behavioral_Elements.State_Machines.ChangeEvent |
Behavioral_Elements.State_Machines.Transition |
Behavioral_Elements.State_Machines.StateVertex |
Behavioral_Elements.State_Machines.Pseudostate |
Behavioral_Elements.State_Machines.SynchState |
Behavioral_Elements.State_Machines.StubState |
OMG-UML V1.3
UML XMI DTD
March 2000
6-101
6
Behavioral_Elements.State_Machines.State |
Behavioral_Elements.State_Machines.CompositeState |
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState |
Behavioral_Elements.State_Machines.SimpleState |
Behavioral_Elements.Activity_Graphs.ObjectFlowState |
Behavioral_Elements.Activity_Graphs.ActionState |
Behavioral_Elements.Activity_Graphs.CallState |
Behavioral_Elements.State_Machines.FinalState |
Behavioral_Elements.State_Machines.Guard |
Behavioral_Elements.Collaborations.Message |
Behavioral_Elements.Collaborations.Interaction |
Behavioral_Elements.Activity_Graphs.Partition |
Foundation.Core.Feature |
Foundation.Core.BehavioralFeature |
Behavioral_Elements.Common_Behavior.Reception |
Foundation.Core.Operation |
Foundation.Core.Method |
Foundation.Core.StructuralFeature |
Foundation.Core.Attribute |
Foundation.Core.GeneralizableElement |
Foundation.Extension_Mechanisms.Stereotype |
Behavioral_Elements.Collaborations.Collaboration |
Model_Management.Package |
6-102
OMG-UML V1.3
March 2000
6
Model_Management.Subsystem |
Model_Management.Model |
Foundation.Core.Classifier |
Foundation.Core.Class |
Foundation.Core.DataType |
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node |
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Foundation.Core.AssociationEnd |
Behavioral_Elements.Collaborations.AssociationEndRole |
Foundation.Core.Namespace |
Foundation.Core.Parameter |
Foundation.Core.Constraint)*
>
<!ELEMENT Foundation.Core.Dependency
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-103
6
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.Dependency.client*,
Foundation.Core.Dependency.supplier*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*)?
>
<!ATTLIST Foundation.Core.Dependency
%XMI.element.att;
%XMI.link.att;
6-104
OMG-UML V1.3
March 2000
6
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Abstraction
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Core.Abstraction.mapping
(Foundation.Data_Types.MappingExpression) >
<!ELEMENT Foundation.Core.Abstraction
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.Abstraction.mapping?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-105
6
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.Dependency.client*,
Foundation.Core.Dependency.supplier*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*)?
>
<!ATTLIST Foundation.Core.Abstraction
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: PresentationElement
-->
<!-_______________________________________________________________
-->
6-106
OMG-UML V1.3
March 2000
6
<!ELEMENT Foundation.Core.PresentationElement.subject
(Foundation.Core.ModelElement |
Foundation.Core.Comment
|
Foundation.Core.Relationship |
Behavioral_Elements.Use_Cases.Extend |
Behavioral_Elements.Use_Cases.Include |
Foundation.Core.Generalization |
Foundation.Core.Flow |
Foundation.Core.Association |
Foundation.Core.AssociationClass |
Behavioral_Elements.Collaborations.AssociationRole |
Foundation.Core.Dependency |
Foundation.Core.Abstraction |
Foundation.Core.Usage |
Foundation.Core.Binding
|
Foundation.Core.Permission |
Foundation.Extension_Mechanisms.TaggedValue |
Behavioral_Elements.Common_Behavior.Instance |
Behavioral_Elements.Common_Behavior.Object |
Behavioral_Elements.Common_Behavior.LinkObject |
Behavioral_Elements.Common_Behavior.DataValue |
Behavioral_Elements.Common_Behavior.ComponentInstance |
Behavioral_Elements.Common_Behavior.NodeInstance |
OMG-UML V1.3
UML XMI DTD
March 2000
6-107
6
Behavioral_Elements.Use_Cases.UseCaseInstance |
Behavioral_Elements.Common_Behavior.Action |
Behavioral_Elements.Common_Behavior.CallAction |
Behavioral_Elements.Common_Behavior.SendAction |
Behavioral_Elements.Common_Behavior.ActionSequence |
Behavioral_Elements.Common_Behavior.ReturnAction |
Behavioral_Elements.Common_Behavior.TerminateAction |
Behavioral_Elements.Common_Behavior.DestroyAction |
Behavioral_Elements.Common_Behavior.CreateAction |
Behavioral_Elements.Common_Behavior.UninterpretedAction |
Behavioral_Elements.Common_Behavior.AttributeLink |
Behavioral_Elements.Common_Behavior.Argument |
Behavioral_Elements.Common_Behavior.Link |
Behavioral_Elements.Common_Behavior.LinkEnd |
Behavioral_Elements.Common_Behavior.Stimulus |
Behavioral_Elements.Use_Cases.ExtensionPoint |
Behavioral_Elements.State_Machines.StateMachine |
Behavioral_Elements.Activity_Graphs.ActivityGraph |
Behavioral_Elements.State_Machines.Event |
Behavioral_Elements.State_Machines.TimeEvent |
Behavioral_Elements.State_Machines.CallEvent |
Behavioral_Elements.State_Machines.SignalEvent |
6-108
OMG-UML V1.3
March 2000
6
Behavioral_Elements.State_Machines.ChangeEvent |
Behavioral_Elements.State_Machines.Transition |
Behavioral_Elements.State_Machines.StateVertex |
Behavioral_Elements.State_Machines.Pseudostate |
Behavioral_Elements.State_Machines.SynchState |
Behavioral_Elements.State_Machines.StubState |
Behavioral_Elements.State_Machines.State |
Behavioral_Elements.State_Machines.CompositeState |
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState |
Behavioral_Elements.State_Machines.SimpleState |
Behavioral_Elements.Activity_Graphs.ObjectFlowState |
Behavioral_Elements.Activity_Graphs.ActionState |
Behavioral_Elements.Activity_Graphs.CallState |
Behavioral_Elements.State_Machines.FinalState |
Behavioral_Elements.State_Machines.Guard |
Behavioral_Elements.Collaborations.Message |
Behavioral_Elements.Collaborations.Interaction |
Behavioral_Elements.Activity_Graphs.Partition |
Foundation.Core.Feature
|
Foundation.Core.BehavioralFeature |
Behavioral_Elements.Common_Behavior.Reception |
OMG-UML V1.3
UML XMI DTD
March 2000
6-109
6
Foundation.Core.Operation |
Foundation.Core.Method
|
Foundation.Core.StructuralFeature |
Foundation.Core.Attribute |
Foundation.Core.GeneralizableElement |
Foundation.Extension_Mechanisms.Stereotype |
Behavioral_Elements.Collaborations.Collaboration |
Model_Management.Package |
Model_Management.Subsystem |
Model_Management.Model
|
Foundation.Core.Classifier |
Foundation.Core.Class |
Foundation.Core.DataType |
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node |
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
6-110
OMG-UML V1.3
March 2000
6
Foundation.Core.AssociationEnd |
Behavioral_Elements.Collaborations.AssociationEndRole |
Foundation.Core.Namespace |
Foundation.Core.Parameter |
Foundation.Core.Constraint)*
>
<!ELEMENT Foundation.Core.PresentationElement (XMI.extension*,
Foundation.Core.PresentationElement.subject*)?
>
<!ATTLIST Foundation.Core.PresentationElement
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Usage
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Core.Usage
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
OMG-UML V1.3
UML XMI DTD
March 2000
6-111
6
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.Dependency.client*,
Foundation.Core.Dependency.supplier*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*)?
>
<!ATTLIST Foundation.Core.Usage
%XMI.element.att;
%XMI.link.att;
>
6-112
OMG-UML V1.3
March 2000
6
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Binding
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Core.Binding.argument
(Foundation.Core.ModelElement |
Foundation.Core.Comment |
Foundation.Core.Relationship |
Behavioral_Elements.Use_Cases.Extend |
Behavioral_Elements.Use_Cases.Include |
Foundation.Core.Generalization
|
Foundation.Core.Flow |
Foundation.Core.Association |
Foundation.Core.AssociationClass |
Behavioral_Elements.Collaborations.AssociationRole |
Foundation.Core.Dependency |
Foundation.Core.Abstraction |
Foundation.Core.Usage |
Foundation.Core.Binding |
Foundation.Core.Permission |
Foundation.Extension_Mechanisms.TaggedValue |
Behavioral_Elements.Common_Behavior.Instance |
Behavioral_Elements.Common_Behavior.Object |
Behavioral_Elements.Common_Behavior.LinkObject |
OMG-UML V1.3
UML XMI DTD
March 2000
6-113
6
Behavioral_Elements.Common_Behavior.DataValue |
Behavioral_Elements.Common_Behavior.ComponentInstance |
Behavioral_Elements.Common_Behavior.NodeInstance |
Behavioral_Elements.Use_Cases.UseCaseInstance |
Behavioral_Elements.Common_Behavior.Action |
Behavioral_Elements.Common_Behavior.CallAction |
Behavioral_Elements.Common_Behavior.SendAction |
Behavioral_Elements.Common_Behavior.ActionSequence |
Behavioral_Elements.Common_Behavior.ReturnAction |
Behavioral_Elements.Common_Behavior.TerminateAction |
Behavioral_Elements.Common_Behavior.DestroyAction |
Behavioral_Elements.Common_Behavior.CreateAction |
Behavioral_Elements.Common_Behavior.UninterpretedAction |
Behavioral_Elements.Common_Behavior.AttributeLink |
Behavioral_Elements.Common_Behavior.Argument |
Behavioral_Elements.Common_Behavior.Link |
Behavioral_Elements.Common_Behavior.LinkEnd |
Behavioral_Elements.Common_Behavior.Stimulus |
Behavioral_Elements.Use_Cases.ExtensionPoint |
Behavioral_Elements.State_Machines.StateMachine |
Behavioral_Elements.Activity_Graphs.ActivityGraph |
Behavioral_Elements.State_Machines.Event |
6-114
OMG-UML V1.3
March 2000
6
Behavioral_Elements.State_Machines.TimeEvent |
Behavioral_Elements.State_Machines.CallEvent |
Behavioral_Elements.State_Machines.SignalEvent |
Behavioral_Elements.State_Machines.ChangeEvent |
Behavioral_Elements.State_Machines.Transition |
Behavioral_Elements.State_Machines.StateVertex |
Behavioral_Elements.State_Machines.Pseudostate |
Behavioral_Elements.State_Machines.SynchState |
Behavioral_Elements.State_Machines.StubState |
Behavioral_Elements.State_Machines.State |
Behavioral_Elements.State_Machines.CompositeState |
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState |
Behavioral_Elements.State_Machines.SimpleState |
Behavioral_Elements.Activity_Graphs.ObjectFlowState |
Behavioral_Elements.Activity_Graphs.ActionState |
Behavioral_Elements.Activity_Graphs.CallState |
Behavioral_Elements.State_Machines.FinalState |
Behavioral_Elements.State_Machines.Guard |
Behavioral_Elements.Collaborations.Message |
Behavioral_Elements.Collaborations.Interaction |
Behavioral_Elements.Activity_Graphs.Partition |
OMG-UML V1.3
UML XMI DTD
March 2000
6-115
6
Foundation.Core.Feature |
Foundation.Core.BehavioralFeature |
Behavioral_Elements.Common_Behavior.Reception |
Foundation.Core.Operation |
Foundation.Core.Method |
Foundation.Core.StructuralFeature |
Foundation.Core.Attribute |
Foundation.Core.GeneralizableElement |
Foundation.Extension_Mechanisms.Stereotype |
Behavioral_Elements.Collaborations.Collaboration |
Model_Management.Package |
Model_Management.Subsystem |
Model_Management.Model |
Foundation.Core.Classifier |
Foundation.Core.Class |
Foundation.Core.DataType |
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node |
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Foundation.Core.AssociationEnd
|
Behavioral_Elements.Collaborations.AssociationEndRole |
6-116
OMG-UML V1.3
March 2000
6
Foundation.Core.Namespace |
Foundation.Core.Parameter |
Foundation.Core.Constraint)* >
<!ELEMENT Foundation.Core.Binding
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-117
6
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.Dependency.client*,
Foundation.Core.Dependency.supplier*,
Foundation.Core.Binding.argument*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*)?
>
<!ATTLIST Foundation.Core.Binding
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Component
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Core.Component.deploymentLocation
(Foundation.Core.Node)* >
<!ELEMENT Foundation.Core.Component.residentElement
(Foundation.Core.ElementResidence)* >
<!ELEMENT Foundation.Core.Component
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
6-118
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.GeneralizableElement.isRoot?,
Foundation.Core.GeneralizableElement.isLeaf?,
Foundation.Core.GeneralizableElement.isAbstract?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-119
6
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.GeneralizableElement.generalization*,
Foundation.Core.GeneralizableElement.specialization*,
Foundation.Core.Classifier.participant*,
Foundation.Core.Classifier.powertypeRange*,
Foundation.Core.Classifier.instance*,
Foundation.Core.Classifier.createAction*,
Foundation.Core.Classifier.classifierRole*,
Foundation.Core.Classifier.collaboration*,
Foundation.Core.Classifier.classifierInState*,
Foundation.Core.Classifier.objectFlowState*,
Foundation.Core.Component.deploymentLocation*,
Foundation.Core.Component.residentElement*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Foundation.Core.Namespace.ownedElement*,
Foundation.Core.Classifier.feature*)?
>
<!ATTLIST Foundation.Core.Component
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
6-120
OMG-UML V1.3
March 2000
6
<!--
-->
<!-- METAMODEL CLASS:
Node
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Core.Node.resident
(Foundation.Core.Component)* >
<!ELEMENT Foundation.Core.Node
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.GeneralizableElement.isRoot?,
Foundation.Core.GeneralizableElement.isLeaf?,
Foundation.Core.GeneralizableElement.isAbstract?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-121
6
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.GeneralizableElement.generalization*,
Foundation.Core.GeneralizableElement.specialization*,
Foundation.Core.Classifier.participant*,
Foundation.Core.Classifier.powertypeRange*,
Foundation.Core.Classifier.instance*,
Foundation.Core.Classifier.createAction*,
Foundation.Core.Classifier.classifierRole*,
Foundation.Core.Classifier.collaboration*,
Foundation.Core.Classifier.classifierInState*,
Foundation.Core.Classifier.objectFlowState*,
Foundation.Core.Node.resident*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Foundation.Core.Namespace.ownedElement*,
Foundation.Core.Classifier.feature*)? >
<!ATTLIST Foundation.Core.Node
%XMI.element.att;
%XMI.link.att;
>
6-122
OMG-UML V1.3
March 2000
6
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Permission
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Core.Permission
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-123
6
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.Dependency.client*,
Foundation.Core.Dependency.supplier*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*)?
>
<!ATTLIST Foundation.Core.Permission
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Comment
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Core.Comment.annotatedElement
(Foundation.Core.ModelElement |
Foundation.Core.Comment |
Foundation.Core.Relationship |
Behavioral_Elements.Use_Cases.Extend |
6-124
OMG-UML V1.3
March 2000
6
Behavioral_Elements.Use_Cases.Include |
Foundation.Core.Generalization |
Foundation.Core.Flow |
Foundation.Core.Association |
Foundation.Core.AssociationClass |
Behavioral_Elements.Collaborations.AssociationRole |
Foundation.Core.Dependency |
Foundation.Core.Abstraction |
Foundation.Core.Usage |
Foundation.Core.Binding |
Foundation.Core.Permission |
Foundation.Extension_Mechanisms.TaggedValue |
Behavioral_Elements.Common_Behavior.Instance |
Behavioral_Elements.Common_Behavior.Object |
Behavioral_Elements.Common_Behavior.LinkObject |
Behavioral_Elements.Common_Behavior.DataValue |
Behavioral_Elements.Common_Behavior.ComponentInstance |
Behavioral_Elements.Common_Behavior.NodeInstance |
Behavioral_Elements.Use_Cases.UseCaseInstance |
Behavioral_Elements.Common_Behavior.Action |
Behavioral_Elements.Common_Behavior.CallAction |
Behavioral_Elements.Common_Behavior.SendAction |
Behavioral_Elements.Common_Behavior.ActionSequence |
OMG-UML V1.3
UML XMI DTD
March 2000
6-125
6
Behavioral_Elements.Common_Behavior.ReturnAction |
Behavioral_Elements.Common_Behavior.TerminateAction |
Behavioral_Elements.Common_Behavior.DestroyAction |
Behavioral_Elements.Common_Behavior.CreateAction |
Behavioral_Elements.Common_Behavior.UninterpretedAction |
Behavioral_Elements.Common_Behavior.AttributeLink |
Behavioral_Elements.Common_Behavior.Argument |
Behavioral_Elements.Common_Behavior.Link |
Behavioral_Elements.Common_Behavior.LinkEnd |
Behavioral_Elements.Common_Behavior.Stimulus |
Behavioral_Elements.Use_Cases.ExtensionPoint |
Behavioral_Elements.State_Machines.StateMachine |
Behavioral_Elements.Activity_Graphs.ActivityGraph |
Behavioral_Elements.State_Machines.Event |
Behavioral_Elements.State_Machines.TimeEvent |
Behavioral_Elements.State_Machines.CallEvent |
Behavioral_Elements.State_Machines.SignalEvent |
Behavioral_Elements.State_Machines.ChangeEvent |
Behavioral_Elements.State_Machines.Transition |
Behavioral_Elements.State_Machines.StateVertex |
Behavioral_Elements.State_Machines.Pseudostate |
Behavioral_Elements.State_Machines.SynchState |
6-126
OMG-UML V1.3
March 2000
6
Behavioral_Elements.State_Machines.StubState |
Behavioral_Elements.State_Machines.State |
Behavioral_Elements.State_Machines.CompositeState |
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState |
Behavioral_Elements.State_Machines.SimpleState |
Behavioral_Elements.Activity_Graphs.ObjectFlowState |
Behavioral_Elements.Activity_Graphs.ActionState |
Behavioral_Elements.Activity_Graphs.CallState |
Behavioral_Elements.State_Machines.FinalState |
Behavioral_Elements.State_Machines.Guard |
Behavioral_Elements.Collaborations.Message |
Behavioral_Elements.Collaborations.Interaction |
Behavioral_Elements.Activity_Graphs.Partition |
Foundation.Core.Feature |
Foundation.Core.BehavioralFeature |
Behavioral_Elements.Common_Behavior.Reception |
Foundation.Core.Operation
|
Foundation.Core.Method |
Foundation.Core.StructuralFeature |
Foundation.Core.Attribute
|
Foundation.Core.GeneralizableElement |
OMG-UML V1.3
UML XMI DTD
March 2000
6-127
6
Foundation.Extension_Mechanisms.Stereotype |
Behavioral_Elements.Collaborations.Collaboration |
Model_Management.Package
|
Model_Management.Subsystem |
Model_Management.Model |
Foundation.Core.Classifier |
Foundation.Core.Class |
Foundation.Core.DataType
|
Foundation.Core.Interface
|
Foundation.Core.Component
|
Foundation.Core.Node |
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Foundation.Core.AssociationEnd |
Behavioral_Elements.Collaborations.AssociationEndRole |
Foundation.Core.Namespace
|
Foundation.Core.Parameter
|
Foundation.Core.Constraint)*
>
6-128
OMG-UML V1.3
March 2000
6
<!ELEMENT Foundation.Core.Comment
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.Comment.annotatedElement*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-129
6
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*)?
>
<!ATTLIST Foundation.Core.Comment
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS:
Flow
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Core.Flow.target
(Foundation.Core.ModelElement |
Foundation.Core.Comment |
Foundation.Core.Relationship |
Behavioral_Elements.Use_Cases.Extend |
Behavioral_Elements.Use_Cases.Include |
Foundation.Core.Generalization |
Foundation.Core.Flow |
Foundation.Core.Association |
Foundation.Core.AssociationClass |
Behavioral_Elements.Collaborations.AssociationRole |
Foundation.Core.Dependency |
Foundation.Core.Abstraction |
Foundation.Core.Usage |
Foundation.Core.Binding |
Foundation.Core.Permission |
6-130
OMG-UML V1.3
March 2000
6
Foundation.Extension_Mechanisms.TaggedValue |
Behavioral_Elements.Common_Behavior.Instance |
Behavioral_Elements.Common_Behavior.Object |
Behavioral_Elements.Common_Behavior.LinkObject |
Behavioral_Elements.Common_Behavior.DataValue |
Behavioral_Elements.Common_Behavior.ComponentInstance |
Behavioral_Elements.Common_Behavior.NodeInstance |
Behavioral_Elements.Use_Cases.UseCaseInstance |
Behavioral_Elements.Common_Behavior.Action |
Behavioral_Elements.Common_Behavior.CallAction |
Behavioral_Elements.Common_Behavior.SendAction |
Behavioral_Elements.Common_Behavior.ActionSequence |
Behavioral_Elements.Common_Behavior.ReturnAction |
Behavioral_Elements.Common_Behavior.TerminateAction |
Behavioral_Elements.Common_Behavior.DestroyAction |
Behavioral_Elements.Common_Behavior.CreateAction |
Behavioral_Elements.Common_Behavior.UninterpretedAction |
Behavioral_Elements.Common_Behavior.AttributeLink |
Behavioral_Elements.Common_Behavior.Argument |
Behavioral_Elements.Common_Behavior.Link |
Behavioral_Elements.Common_Behavior.LinkEnd |
Behavioral_Elements.Common_Behavior.Stimulus |
OMG-UML V1.3
UML XMI DTD
March 2000
6-131
6
Behavioral_Elements.Use_Cases.ExtensionPoint |
Behavioral_Elements.State_Machines.StateMachine |
Behavioral_Elements.Activity_Graphs.ActivityGraph |
Behavioral_Elements.State_Machines.Event |
Behavioral_Elements.State_Machines.TimeEvent |
Behavioral_Elements.State_Machines.CallEvent |
Behavioral_Elements.State_Machines.SignalEvent |
Behavioral_Elements.State_Machines.ChangeEvent |
Behavioral_Elements.State_Machines.Transition |
Behavioral_Elements.State_Machines.StateVertex |
Behavioral_Elements.State_Machines.Pseudostate |
Behavioral_Elements.State_Machines.SynchState |
Behavioral_Elements.State_Machines.StubState |
Behavioral_Elements.State_Machines.State |
Behavioral_Elements.State_Machines.CompositeState |
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState |
Behavioral_Elements.State_Machines.SimpleState |
Behavioral_Elements.Activity_Graphs.ObjectFlowState |
Behavioral_Elements.Activity_Graphs.ActionState |
Behavioral_Elements.Activity_Graphs.CallState |
Behavioral_Elements.State_Machines.FinalState |
6-132
OMG-UML V1.3
March 2000
6
Behavioral_Elements.State_Machines.Guard |
Behavioral_Elements.Collaborations.Message |
Behavioral_Elements.Collaborations.Interaction |
Behavioral_Elements.Activity_Graphs.Partition |
Foundation.Core.Feature |
Foundation.Core.BehavioralFeature |
Behavioral_Elements.Common_Behavior.Reception |
Foundation.Core.Operation |
Foundation.Core.Method |
Foundation.Core.StructuralFeature |
Foundation.Core.Attribute |
Foundation.Core.GeneralizableElement |
Foundation.Extension_Mechanisms.Stereotype |
Behavioral_Elements.Collaborations.Collaboration |
Model_Management.Package |
Model_Management.Subsystem |
Model_Management.Model |
Foundation.Core.Classifier |
Foundation.Core.Class |
Foundation.Core.DataType |
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node |
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor
|
OMG-UML V1.3
UML XMI DTD
March 2000
6-133
6
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Foundation.Core.AssociationEnd |
Behavioral_Elements.Collaborations.AssociationEndRole |
Foundation.Core.Namespace |
Foundation.Core.Parameter |
Foundation.Core.Constraint)* >
<!ELEMENT Foundation.Core.Flow.source
(Foundation.Core.ModelElement |
Foundation.Core.Comment |
Foundation.Core.Relationship |
Behavioral_Elements.Use_Cases.Extend |
Behavioral_Elements.Use_Cases.Include |
Foundation.Core.Generalization |
Foundation.Core.Flow |
Foundation.Core.Association |
Foundation.Core.AssociationClass |
Behavioral_Elements.Collaborations.AssociationRole |
Foundation.Core.Dependency |
Foundation.Core.Abstraction |
Foundation.Core.Usage |
Foundation.Core.Binding |
Foundation.Core.Permission |
Foundation.Extension_Mechanisms.TaggedValue |
Behavioral_Elements.Common_Behavior.Instance |
Behavioral_Elements.Common_Behavior.Object |
Behavioral_Elements.Common_Behavior.LinkObject |
Behavioral_Elements.Common_Behavior.DataValue |
6-134
OMG-UML V1.3
March 2000
6
Behavioral_Elements.Common_Behavior.ComponentInstance |
Behavioral_Elements.Common_Behavior.NodeInstance |
Behavioral_Elements.Use_Cases.UseCaseInstance |
Behavioral_Elements.Common_Behavior.Action |
Behavioral_Elements.Common_Behavior.CallAction |
Behavioral_Elements.Common_Behavior.SendAction |
Behavioral_Elements.Common_Behavior.ActionSequence |
Behavioral_Elements.Common_Behavior.ReturnAction |
Behavioral_Elements.Common_Behavior.TerminateAction |
Behavioral_Elements.Common_Behavior.DestroyAction |
Behavioral_Elements.Common_Behavior.CreateAction |
Behavioral_Elements.Common_Behavior.UninterpretedAction |
Behavioral_Elements.Common_Behavior.AttributeLink |
Behavioral_Elements.Common_Behavior.Argument |
Behavioral_Elements.Common_Behavior.Link |
Behavioral_Elements.Common_Behavior.LinkEnd |
Behavioral_Elements.Common_Behavior.Stimulus |
Behavioral_Elements.Use_Cases.ExtensionPoint |
Behavioral_Elements.State_Machines.StateMachine |
Behavioral_Elements.Activity_Graphs.ActivityGraph |
Behavioral_Elements.State_Machines.Event |
Behavioral_Elements.State_Machines.TimeEvent |
OMG-UML V1.3
UML XMI DTD
March 2000
6-135
6
Behavioral_Elements.State_Machines.CallEvent |
Behavioral_Elements.State_Machines.SignalEvent |
Behavioral_Elements.State_Machines.ChangeEvent |
Behavioral_Elements.State_Machines.Transition |
Behavioral_Elements.State_Machines.StateVertex |
Behavioral_Elements.State_Machines.Pseudostate |
Behavioral_Elements.State_Machines.SynchState |
Behavioral_Elements.State_Machines.StubState |
Behavioral_Elements.State_Machines.State |
Behavioral_Elements.State_Machines.CompositeState |
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState |
Behavioral_Elements.State_Machines.SimpleState |
Behavioral_Elements.Activity_Graphs.ObjectFlowState |
Behavioral_Elements.Activity_Graphs.ActionState |
Behavioral_Elements.Activity_Graphs.CallState |
Behavioral_Elements.State_Machines.FinalState |
Behavioral_Elements.State_Machines.Guard |
Behavioral_Elements.Collaborations.Message |
Behavioral_Elements.Collaborations.Interaction |
Behavioral_Elements.Activity_Graphs.Partition |
Foundation.Core.Feature |
6-136
OMG-UML V1.3
March 2000
6
Foundation.Core.BehavioralFeature |
Behavioral_Elements.Common_Behavior.Reception |
Foundation.Core.Operation |
Foundation.Core.Method |
Foundation.Core.StructuralFeature |
Foundation.Core.Attribute |
Foundation.Core.GeneralizableElement |
Foundation.Extension_Mechanisms.Stereotype |
Behavioral_Elements.Collaborations.Collaboration |
Model_Management.Package |
Model_Management.Subsystem |
Model_Management.Model |
Foundation.Core.Classifier |
Foundation.Core.Class |
Foundation.Core.DataType |
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node |
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor
|
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Foundation.Core.AssociationEnd |
Behavioral_Elements.Collaborations.AssociationEndRole |
Foundation.Core.Namespace |
Foundation.Core.Parameter |
Foundation.Core.Constraint)* >
OMG-UML V1.3
UML XMI DTD
March 2000
6-137
6
<!ELEMENT Foundation.Core.Flow
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.Flow.target*,
Foundation.Core.Flow.source*,
6-138
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*)?
>
<!ATTLIST Foundation.Core.Flow
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Relationship
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Core.Relationship
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-139
6
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*)?
>
<!ATTLIST Foundation.Core.Relationship
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: ElementResidence
-->
<!-_______________________________________________________________
-->
6-140
OMG-UML V1.3
March 2000
6
<!ELEMENT Foundation.Core.ElementResidence.visibility EMPTY >
<!ATTLIST Foundation.Core.ElementResidence.visibility
xmi.value ( public | private | protected ) #REQUIRED
>
<!ELEMENT Foundation.Core.ElementResidence.resident
(Foundation.Core.ModelElement |
Foundation.Core.Comment
|
Foundation.Core.Relationship |
Behavioral_Elements.Use_Cases.Extend |
Behavioral_Elements.Use_Cases.Include |
Foundation.Core.Generalization |
Foundation.Core.Flow |
Foundation.Core.Association |
Foundation.Core.AssociationClass |
Behavioral_Elements.Collaborations.AssociationRole |
Foundation.Core.Dependency |
Foundation.Core.Abstraction |
Foundation.Core.Usage |
Foundation.Core.Binding
|
Foundation.Core.Permission |
Foundation.Extension_Mechanisms.TaggedValue |
Behavioral_Elements.Common_Behavior.Instance |
Behavioral_Elements.Common_Behavior.Object |
Behavioral_Elements.Common_Behavior.LinkObject |
OMG-UML V1.3
UML XMI DTD
March 2000
6-141
6
Behavioral_Elements.Common_Behavior.DataValue |
Behavioral_Elements.Common_Behavior.ComponentInstance |
Behavioral_Elements.Common_Behavior.NodeInstance |
Behavioral_Elements.Use_Cases.UseCaseInstance |
Behavioral_Elements.Common_Behavior.Action |
Behavioral_Elements.Common_Behavior.CallAction |
Behavioral_Elements.Common_Behavior.SendAction |
Behavioral_Elements.Common_Behavior.ActionSequence |
Behavioral_Elements.Common_Behavior.ReturnAction |
Behavioral_Elements.Common_Behavior.TerminateAction |
Behavioral_Elements.Common_Behavior.DestroyAction |
Behavioral_Elements.Common_Behavior.CreateAction |
Behavioral_Elements.Common_Behavior.UninterpretedAction |
Behavioral_Elements.Common_Behavior.AttributeLink |
Behavioral_Elements.Common_Behavior.Argument |
Behavioral_Elements.Common_Behavior.Link |
Behavioral_Elements.Common_Behavior.LinkEnd |
Behavioral_Elements.Common_Behavior.Stimulus |
Behavioral_Elements.Use_Cases.ExtensionPoint |
Behavioral_Elements.State_Machines.StateMachine |
Behavioral_Elements.Activity_Graphs.ActivityGraph |
Behavioral_Elements.State_Machines.Event |
6-142
OMG-UML V1.3
March 2000
6
Behavioral_Elements.State_Machines.TimeEvent |
Behavioral_Elements.State_Machines.CallEvent |
Behavioral_Elements.State_Machines.SignalEvent |
Behavioral_Elements.State_Machines.ChangeEvent |
Behavioral_Elements.State_Machines.Transition |
Behavioral_Elements.State_Machines.StateVertex |
Behavioral_Elements.State_Machines.Pseudostate |
Behavioral_Elements.State_Machines.SynchState |
Behavioral_Elements.State_Machines.StubState |
Behavioral_Elements.State_Machines.State |
Behavioral_Elements.State_Machines.CompositeState |
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState |
Behavioral_Elements.State_Machines.SimpleState |
Behavioral_Elements.Activity_Graphs.ObjectFlowState |
Behavioral_Elements.Activity_Graphs.ActionState |
Behavioral_Elements.Activity_Graphs.CallState |
Behavioral_Elements.State_Machines.FinalState |
Behavioral_Elements.State_Machines.Guard |
Behavioral_Elements.Collaborations.Message |
Behavioral_Elements.Collaborations.Interaction |
Behavioral_Elements.Activity_Graphs.Partition |
OMG-UML V1.3
UML XMI DTD
March 2000
6-143
6
Foundation.Core.Feature
|
Foundation.Core.BehavioralFeature |
Behavioral_Elements.Common_Behavior.Reception |
Foundation.Core.Operation |
Foundation.Core.Method |
Foundation.Core.StructuralFeature |
Foundation.Core.Attribute |
Foundation.Core.GeneralizableElement |
Foundation.Extension_Mechanisms.Stereotype |
Behavioral_Elements.Collaborations.Collaboration |
Model_Management.Package
|
Model_Management.Subsystem |
Model_Management.Model |
Foundation.Core.Classifier |
Foundation.Core.Class |
Foundation.Core.DataType
|
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node |
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
6-144
OMG-UML V1.3
March 2000
6
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Foundation.Core.AssociationEnd |
Behavioral_Elements.Collaborations.AssociationEndRole |
Foundation.Core.Namespace |
Foundation.Core.Parameter |
Foundation.Core.Constraint)?
>
<!ELEMENT
Foundation.Core.ElementResidence.implementationLocation
(Foundation.Core.Component)? >
<!ELEMENT Foundation.Core.ElementResidence
(Foundation.Core.ElementResidence.visibility?,
XMI.extension*,
Foundation.Core.ElementResidence.resident?,
Foundation.Core.ElementResidence.implementationLocation?)?
>
<!ATTLIST Foundation.Core.ElementResidence
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: TemplateParameter
-->
<!-_______________________________________________________________
-->
OMG-UML V1.3
UML XMI DTD
March 2000
6-145
6
<!ELEMENT Foundation.Core.TemplateParameter.defaultElement
(Foundation.Core.ModelElement |
Foundation.Core.Comment |
Foundation.Core.Relationship |
Behavioral_Elements.Use_Cases.Extend |
Behavioral_Elements.Use_Cases.Include |
Foundation.Core.Generalization |
Foundation.Core.Flow |
Foundation.Core.Association |
Foundation.Core.AssociationClass |
Behavioral_Elements.Collaborations.AssociationRole |
Foundation.Core.Dependency |
Foundation.Core.Abstraction |
Foundation.Core.Usage |
Foundation.Core.Binding |
Foundation.Core.Permission |
Foundation.Extension_Mechanisms.TaggedValue |
Behavioral_Elements.Common_Behavior.Instance |
Behavioral_Elements.Common_Behavior.Object |
Behavioral_Elements.Common_Behavior.LinkObject |
Behavioral_Elements.Common_Behavior.DataValue |
6-146
OMG-UML V1.3
March 2000
6
Behavioral_Elements.Common_Behavior.ComponentInstance |
Behavioral_Elements.Common_Behavior.NodeInstance |
Behavioral_Elements.Use_Cases.UseCaseInstance |
Behavioral_Elements.Common_Behavior.Action |
Behavioral_Elements.Common_Behavior.CallAction |
Behavioral_Elements.Common_Behavior.SendAction |
Behavioral_Elements.Common_Behavior.ActionSequence |
Behavioral_Elements.Common_Behavior.ReturnAction |
Behavioral_Elements.Common_Behavior.TerminateAction |
Behavioral_Elements.Common_Behavior.DestroyAction |
Behavioral_Elements.Common_Behavior.CreateAction |
Behavioral_Elements.Common_Behavior.UninterpretedAction |
Behavioral_Elements.Common_Behavior.AttributeLink |
Behavioral_Elements.Common_Behavior.Argument |
Behavioral_Elements.Common_Behavior.Link |
Behavioral_Elements.Common_Behavior.LinkEnd |
Behavioral_Elements.Common_Behavior.Stimulus |
Behavioral_Elements.Use_Cases.ExtensionPoint |
Behavioral_Elements.State_Machines.StateMachine |
Behavioral_Elements.Activity_Graphs.ActivityGraph |
Behavioral_Elements.State_Machines.Event |
Behavioral_Elements.State_Machines.TimeEvent |
OMG-UML V1.3
UML XMI DTD
March 2000
6-147
6
Behavioral_Elements.State_Machines.CallEvent |
Behavioral_Elements.State_Machines.SignalEvent |
Behavioral_Elements.State_Machines.ChangeEvent |
Behavioral_Elements.State_Machines.Transition |
Behavioral_Elements.State_Machines.StateVertex |
Behavioral_Elements.State_Machines.Pseudostate |
Behavioral_Elements.State_Machines.SynchState |
Behavioral_Elements.State_Machines.StubState |
Behavioral_Elements.State_Machines.State |
Behavioral_Elements.State_Machines.CompositeState |
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState |
Behavioral_Elements.State_Machines.SimpleState |
Behavioral_Elements.Activity_Graphs.ObjectFlowState |
Behavioral_Elements.Activity_Graphs.ActionState |
Behavioral_Elements.Activity_Graphs.CallState |
Behavioral_Elements.State_Machines.FinalState |
Behavioral_Elements.State_Machines.Guard |
Behavioral_Elements.Collaborations.Message |
Behavioral_Elements.Collaborations.Interaction |
Behavioral_Elements.Activity_Graphs.Partition |
Foundation.Core.Feature |
6-148
OMG-UML V1.3
March 2000
6
Foundation.Core.BehavioralFeature |
Behavioral_Elements.Common_Behavior.Reception |
Foundation.Core.Operation |
Foundation.Core.Method |
Foundation.Core.StructuralFeature |
Foundation.Core.Attribute |
Foundation.Core.GeneralizableElement |
Foundation.Extension_Mechanisms.Stereotype |
Behavioral_Elements.Collaborations.Collaboration |
Model_Management.Package |
Model_Management.Subsystem |
Model_Management.Model |
Foundation.Core.Classifier |
Foundation.Core.Class |
Foundation.Core.DataType |
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node |
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
OMG-UML V1.3
UML XMI DTD
March 2000
6-149
6
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Foundation.Core.AssociationEnd |
Behavioral_Elements.Collaborations.AssociationEndRole |
Foundation.Core.Namespace |
Foundation.Core.Parameter |
Foundation.Core.Constraint)?
>
<!ELEMENT Foundation.Core.TemplateParameter.modelElement
(Foundation.Core.ModelElement |
Foundation.Core.Comment |
Foundation.Core.Relationship |
Behavioral_Elements.Use_Cases.Extend |
Behavioral_Elements.Use_Cases.Include |
Foundation.Core.Generalization |
Foundation.Core.Flow
|
Foundation.Core.Association |
Foundation.Core.AssociationClass |
Behavioral_Elements.Collaborations.AssociationRole |
Foundation.Core.Dependency |
Foundation.Core.Abstraction |
Foundation.Core.Usage |
6-150
OMG-UML V1.3
March 2000
6
Foundation.Core.Binding |
Foundation.Core.Permission |
Foundation.Extension_Mechanisms.TaggedValue |
Behavioral_Elements.Common_Behavior.Instance |
Behavioral_Elements.Common_Behavior.Object |
Behavioral_Elements.Common_Behavior.LinkObject |
Behavioral_Elements.Common_Behavior.DataValue |
Behavioral_Elements.Common_Behavior.ComponentInstance |
Behavioral_Elements.Common_Behavior.NodeInstance |
Behavioral_Elements.Use_Cases.UseCaseInstance |
Behavioral_Elements.Common_Behavior.Action |
Behavioral_Elements.Common_Behavior.CallAction |
Behavioral_Elements.Common_Behavior.SendAction |
Behavioral_Elements.Common_Behavior.ActionSequence |
Behavioral_Elements.Common_Behavior.ReturnAction |
Behavioral_Elements.Common_Behavior.TerminateAction |
Behavioral_Elements.Common_Behavior.DestroyAction |
Behavioral_Elements.Common_Behavior.CreateAction |
Behavioral_Elements.Common_Behavior.UninterpretedAction |
Behavioral_Elements.Common_Behavior.AttributeLink |
Behavioral_Elements.Common_Behavior.Argument |
Behavioral_Elements.Common_Behavior.Link |
OMG-UML V1.3
UML XMI DTD
March 2000
6-151
6
Behavioral_Elements.Common_Behavior.LinkEnd |
Behavioral_Elements.Common_Behavior.Stimulus |
Behavioral_Elements.Use_Cases.ExtensionPoint |
Behavioral_Elements.State_Machines.StateMachine |
Behavioral_Elements.Activity_Graphs.ActivityGraph |
Behavioral_Elements.State_Machines.Event |
Behavioral_Elements.State_Machines.TimeEvent |
Behavioral_Elements.State_Machines.CallEvent |
Behavioral_Elements.State_Machines.SignalEvent |
Behavioral_Elements.State_Machines.ChangeEvent |
Behavioral_Elements.State_Machines.Transition |
Behavioral_Elements.State_Machines.StateVertex |
Behavioral_Elements.State_Machines.Pseudostate |
Behavioral_Elements.State_Machines.SynchState |
Behavioral_Elements.State_Machines.StubState |
Behavioral_Elements.State_Machines.State |
Behavioral_Elements.State_Machines.CompositeState |
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState |
Behavioral_Elements.State_Machines.SimpleState |
Behavioral_Elements.Activity_Graphs.ObjectFlowState |
Behavioral_Elements.Activity_Graphs.ActionState |
6-152
OMG-UML V1.3
March 2000
6
Behavioral_Elements.Activity_Graphs.CallState |
Behavioral_Elements.State_Machines.FinalState |
Behavioral_Elements.State_Machines.Guard |
Behavioral_Elements.Collaborations.Message |
Behavioral_Elements.Collaborations.Interaction |
Behavioral_Elements.Activity_Graphs.Partition |
Foundation.Core.Feature |
Foundation.Core.BehavioralFeature |
Behavioral_Elements.Common_Behavior.Reception |
Foundation.Core.Operation |
Foundation.Core.Method |
Foundation.Core.StructuralFeature |
Foundation.Core.Attribute |
Foundation.Core.GeneralizableElement |
Foundation.Extension_Mechanisms.Stereotype |
Behavioral_Elements.Collaborations.Collaboration |
Model_Management.Package |
Model_Management.Subsystem |
Model_Management.Model |
Foundation.Core.Classifier |
Foundation.Core.Class |
Foundation.Core.DataType |
OMG-UML V1.3
UML XMI DTD
March 2000
6-153
6
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node
|
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Foundation.Core.AssociationEnd |
Behavioral_Elements.Collaborations.AssociationEndRole |
Foundation.Core.Namespace |
Foundation.Core.Parameter |
Foundation.Core.Constraint)?
>
<!ELEMENT Foundation.Core.TemplateParameter.modelElement2
(Foundation.Core.ModelElement |
Foundation.Core.Comment |
Foundation.Core.Relationship |
Behavioral_Elements.Use_Cases.Extend |
Behavioral_Elements.Use_Cases.Include |
Foundation.Core.Generalization |
6-154
OMG-UML V1.3
March 2000
6
Foundation.Core.Flow
|
Foundation.Core.Association |
Foundation.Core.AssociationClass |
Behavioral_Elements.Collaborations.AssociationRole |
Foundation.Core.Dependency |
Foundation.Core.Abstraction |
Foundation.Core.Usage |
Foundation.Core.Binding |
Foundation.Core.Permission |
Foundation.Extension_Mechanisms.TaggedValue |
Behavioral_Elements.Common_Behavior.Instance |
Behavioral_Elements.Common_Behavior.Object |
Behavioral_Elements.Common_Behavior.LinkObject |
Behavioral_Elements.Common_Behavior.DataValue |
Behavioral_Elements.Common_Behavior.ComponentInstance |
Behavioral_Elements.Common_Behavior.NodeInstance |
Behavioral_Elements.Use_Cases.UseCaseInstance |
Behavioral_Elements.Common_Behavior.Action |
Behavioral_Elements.Common_Behavior.CallAction |
Behavioral_Elements.Common_Behavior.SendAction |
Behavioral_Elements.Common_Behavior.ActionSequence |
Behavioral_Elements.Common_Behavior.ReturnAction |
OMG-UML V1.3
UML XMI DTD
March 2000
6-155
6
Behavioral_Elements.Common_Behavior.TerminateAction |
Behavioral_Elements.Common_Behavior.DestroyAction |
Behavioral_Elements.Common_Behavior.CreateAction |
Behavioral_Elements.Common_Behavior.UninterpretedAction |
Behavioral_Elements.Common_Behavior.AttributeLink |
Behavioral_Elements.Common_Behavior.Argument |
Behavioral_Elements.Common_Behavior.Link |
Behavioral_Elements.Common_Behavior.LinkEnd |
Behavioral_Elements.Common_Behavior.Stimulus |
Behavioral_Elements.Use_Cases.ExtensionPoint |
Behavioral_Elements.State_Machines.StateMachine |
Behavioral_Elements.Activity_Graphs.ActivityGraph |
Behavioral_Elements.State_Machines.Event |
Behavioral_Elements.State_Machines.TimeEvent |
Behavioral_Elements.State_Machines.CallEvent |
Behavioral_Elements.State_Machines.SignalEvent |
Behavioral_Elements.State_Machines.ChangeEvent |
Behavioral_Elements.State_Machines.Transition |
Behavioral_Elements.State_Machines.StateVertex |
Behavioral_Elements.State_Machines.Pseudostate |
Behavioral_Elements.State_Machines.SynchState |
Behavioral_Elements.State_Machines.StubState |
6-156
OMG-UML V1.3
March 2000
6
Behavioral_Elements.State_Machines.State |
Behavioral_Elements.State_Machines.CompositeState |
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState |
Behavioral_Elements.State_Machines.SimpleState |
Behavioral_Elements.Activity_Graphs.ObjectFlowState |
Behavioral_Elements.Activity_Graphs.ActionState |
Behavioral_Elements.Activity_Graphs.CallState |
Behavioral_Elements.State_Machines.FinalState |
Behavioral_Elements.State_Machines.Guard |
Behavioral_Elements.Collaborations.Message |
Behavioral_Elements.Collaborations.Interaction |
Behavioral_Elements.Activity_Graphs.Partition |
Foundation.Core.Feature |
Foundation.Core.BehavioralFeature |
Behavioral_Elements.Common_Behavior.Reception |
Foundation.Core.Operation |
Foundation.Core.Method |
Foundation.Core.StructuralFeature |
Foundation.Core.Attribute |
Foundation.Core.GeneralizableElement |
Foundation.Extension_Mechanisms.Stereotype |
OMG-UML V1.3
UML XMI DTD
March 2000
6-157
6
Behavioral_Elements.Collaborations.Collaboration |
Model_Management.Package |
Model_Management.Subsystem |
Model_Management.Model |
Foundation.Core.Classifier |
Foundation.Core.Class |
Foundation.Core.DataType |
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node
|
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Foundation.Core.AssociationEnd |
Behavioral_Elements.Collaborations.AssociationEndRole |
Foundation.Core.Namespace |
Foundation.Core.Parameter |
Foundation.Core.Constraint)?
>
6-158
OMG-UML V1.3
March 2000
6
<!ELEMENT Foundation.Core.TemplateParameter (XMI.extension*,
Foundation.Core.TemplateParameter.defaultElement?,
Foundation.Core.TemplateParameter.modelElement?,
Foundation.Core.TemplateParameter.modelElement2?)?
>
<!ATTLIST Foundation.Core.TemplateParameter
%XMI.element.att;
%XMI.link.att;
>
<!ELEMENT Foundation.Core ((Foundation.Core.Classifier |
Foundation.Core.Class |
Foundation.Core.DataType |
Foundation.Core.StructuralFeature |
Foundation.Core.Namespace |
Foundation.Core.AssociationEnd |
Foundation.Core.Interface |
Foundation.Core.Constraint |
Foundation.Core.Association |
Foundation.Core.Element |
Foundation.Core.GeneralizableElement |
Foundation.Core.Attribute |
Foundation.Core.Operation |
Foundation.Core.Parameter |
Foundation.Core.Method |
Foundation.Core.Generalization |
Foundation.Core.AssociationClass |
Foundation.Core.Feature |
Foundation.Core.BehavioralFeature |
Foundation.Core.ModelElement |
Foundation.Core.Dependency |
Foundation.Core.Abstraction |
Foundation.Core.PresentationElement |
OMG-UML V1.3
UML XMI DTD
March 2000
6-159
6
Foundation.Core.Usage |
Foundation.Core.Binding |
Foundation.Core.Component |
Foundation.Core.Node |
Foundation.Core.Permission |
Foundation.Core.Comment |
Foundation.Core.Flow |
Foundation.Core.Relationship |
Foundation.Core.ElementResidence |
Foundation.Core.TemplateParameter)*) >
<!ATTLIST Foundation.Core
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL PACKAGE: Data_Types
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Data_Types.Multiplicity.range
(Foundation.Data_Types.MultiplicityRange)* >
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Multiplicity
-->
<!-_______________________________________________________________
-->
6-160
OMG-UML V1.3
March 2000
6
<!ELEMENT Foundation.Data_Types.Multiplicity (XMI.extension*,
Foundation.Data_Types.Multiplicity.range*)?
>
<!ATTLIST Foundation.Data_Types.Multiplicity
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: ObjectSetExpression
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Data_Types.ObjectSetExpression
(Foundation.Data_Types.Expression.language?,
Foundation.Data_Types.Expression.body?,
XMI.extension*)? >
<!ATTLIST Foundation.Data_Types.ObjectSetExpression
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: TimeExpression
-->
<!-_______________________________________________________________
-->
OMG-UML V1.3
UML XMI DTD
March 2000
6-161
6
<!ELEMENT Foundation.Data_Types.TimeExpression
(Foundation.Data_Types.Expression.language?,
Foundation.Data_Types.Expression.body?,
XMI.extension*)? >
<!ATTLIST Foundation.Data_Types.TimeExpression
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Expression
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Data_Types.Expression.language (#PCDATA |
XMI.reference)* >
<!ELEMENT Foundation.Data_Types.Expression.body (#PCDATA |
XMI.reference)* >
<!ELEMENT Foundation.Data_Types.Expression
(Foundation.Data_Types.Expression.language?,
Foundation.Data_Types.Expression.body?,
XMI.extension*)? >
<!ATTLIST Foundation.Data_Types.Expression
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
6-162
OMG-UML V1.3
March 2000
6
<!--
-->
<!-- METAMODEL CLASS: BooleanExpression
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Data_Types.BooleanExpression
(Foundation.Data_Types.Expression.language?,
Foundation.Data_Types.Expression.body?,
XMI.extension*)? >
<!ATTLIST Foundation.Data_Types.BooleanExpression
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: ActionExpression
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Data_Types.ActionExpression
(Foundation.Data_Types.Expression.language?,
Foundation.Data_Types.Expression.body?,
XMI.extension*)? >
<!ATTLIST Foundation.Data_Types.ActionExpression
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
OMG-UML V1.3
UML XMI DTD
March 2000
6-163
6
<!--
-->
<!-- METAMODEL CLASS: MultiplicityRange
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Data_Types.MultiplicityRange.lower (#PCDATA
|
XMI.reference)* >
<!ELEMENT Foundation.Data_Types.MultiplicityRange.upper (#PCDATA
|
XMI.reference)* >
<!ELEMENT Foundation.Data_Types.MultiplicityRange.multiplicity
(Foundation.Data_Types.Multiplicity)? >
<!ELEMENT Foundation.Data_Types.MultiplicityRange
(Foundation.Data_Types.MultiplicityRange.lower?,
Foundation.Data_Types.MultiplicityRange.upper?,
XMI.extension*,
Foundation.Data_Types.MultiplicityRange.multiplicity?)?
>
<!ATTLIST Foundation.Data_Types.MultiplicityRange
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: IterationExpression
-->
<!-_______________________________________________________________
-->
6-164
OMG-UML V1.3
March 2000
6
<!ELEMENT Foundation.Data_Types.IterationExpression
(Foundation.Data_Types.Expression.language?,
Foundation.Data_Types.Expression.body?,
XMI.extension*)? >
<!ATTLIST Foundation.Data_Types.IterationExpression
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: TypeExpression
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Data_Types.TypeExpression
(Foundation.Data_Types.Expression.language?,
Foundation.Data_Types.Expression.body?,
XMI.extension*)? >
<!ATTLIST Foundation.Data_Types.TypeExpression
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: ArgListsExpression
-->
<!-_______________________________________________________________
-->
OMG-UML V1.3
UML XMI DTD
March 2000
6-165
6
<!ELEMENT Foundation.Data_Types.ArgListsExpression
(Foundation.Data_Types.Expression.language?,
Foundation.Data_Types.Expression.body?,
XMI.extension*)? >
<!ATTLIST Foundation.Data_Types.ArgListsExpression
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: MappingExpression
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Data_Types.MappingExpression
(Foundation.Data_Types.Expression.language?,
Foundation.Data_Types.Expression.body?,
XMI.extension*)? >
<!ATTLIST Foundation.Data_Types.MappingExpression
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: ProcedureExpression
-->
<!-_______________________________________________________________
-->
6-166
OMG-UML V1.3
March 2000
6
<!ELEMENT Foundation.Data_Types.ProcedureExpression
(Foundation.Data_Types.Expression.language?,
Foundation.Data_Types.Expression.body?,
XMI.extension*)? >
<!ATTLIST Foundation.Data_Types.ProcedureExpression
%XMI.element.att;
%XMI.link.att;
>
<!ELEMENT Foundation.Data_Types
((Foundation.Data_Types.Multiplicity |
Foundation.Data_Types.ObjectSetExpression |
Foundation.Data_Types.TimeExpression |
Foundation.Data_Types.Expression |
Foundation.Data_Types.BooleanExpression
|
Foundation.Data_Types.ActionExpression
|
Foundation.Data_Types.MultiplicityRange
|
Foundation.Data_Types.IterationExpression |
Foundation.Data_Types.TypeExpression |
Foundation.Data_Types.ArgListsExpression |
Foundation.Data_Types.MappingExpression
|
Foundation.Data_Types.ProcedureExpression)*)
>
<!ATTLIST Foundation.Data_Types
%XMI.element.att;
%XMI.link.att;
>
OMG-UML V1.3
UML XMI DTD
March 2000
6-167
6
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL PACKAGE: Extension_Mechanisms
->
-
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Extension_Mechanisms.Stereotype.requiredTag
(Foundation.Extension_Mechanisms.TaggedValue)* >
<!ELEMENT
Foundation.Extension_Mechanisms.Stereotype.stereotypeConstraint
(Foundation.Core.Constraint)* >
<!ELEMENT Foundation.Core.ModelElement.taggedValue
(Foundation.Extension_Mechanisms.TaggedValue)* >
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Stereotype
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Extension_Mechanisms.Stereotype.icon
(#PCDATA |
XMI.reference)*
>
<!ELEMENT Foundation.Extension_Mechanisms.Stereotype.baseClass
(#PCDATA |
6-168
OMG-UML V1.3
March 2000
6
XMI.reference)*
>
<!ELEMENT
Foundation.Extension_Mechanisms.Stereotype.extendedElement
(Foundation.Core.ModelElement |
Foundation.Core.Comment |
Foundation.Core.Relationship |
Behavioral_Elements.Use_Cases.Extend |
Behavioral_Elements.Use_Cases.Include |
Foundation.Core.Generalization |
Foundation.Core.Flow |
Foundation.Core.Association |
Foundation.Core.AssociationClass |
Behavioral_Elements.Collaborations.AssociationRole |
Foundation.Core.Dependency |
Foundation.Core.Abstraction |
Foundation.Core.Usage |
Foundation.Core.Binding |
Foundation.Core.Permission |
Foundation.Extension_Mechanisms.TaggedValue |
Behavioral_Elements.Common_Behavior.Instance |
Behavioral_Elements.Common_Behavior.Object |
Behavioral_Elements.Common_Behavior.LinkObject |
OMG-UML V1.3
UML XMI DTD
March 2000
6-169
6
Behavioral_Elements.Common_Behavior.DataValue |
Behavioral_Elements.Common_Behavior.ComponentInstance |
Behavioral_Elements.Common_Behavior.NodeInstance |
Behavioral_Elements.Use_Cases.UseCaseInstance |
Behavioral_Elements.Common_Behavior.Action |
Behavioral_Elements.Common_Behavior.CallAction |
Behavioral_Elements.Common_Behavior.SendAction |
Behavioral_Elements.Common_Behavior.ActionSequence |
Behavioral_Elements.Common_Behavior.ReturnAction |
Behavioral_Elements.Common_Behavior.TerminateAction |
Behavioral_Elements.Common_Behavior.DestroyAction |
Behavioral_Elements.Common_Behavior.CreateAction |
Behavioral_Elements.Common_Behavior.UninterpretedAction |
Behavioral_Elements.Common_Behavior.AttributeLink |
Behavioral_Elements.Common_Behavior.Argument |
Behavioral_Elements.Common_Behavior.Link |
Behavioral_Elements.Common_Behavior.LinkEnd |
Behavioral_Elements.Common_Behavior.Stimulus |
Behavioral_Elements.Use_Cases.ExtensionPoint |
Behavioral_Elements.State_Machines.StateMachine |
Behavioral_Elements.Activity_Graphs.ActivityGraph |
Behavioral_Elements.State_Machines.Event |
6-170
OMG-UML V1.3
March 2000
6
Behavioral_Elements.State_Machines.TimeEvent |
Behavioral_Elements.State_Machines.CallEvent |
Behavioral_Elements.State_Machines.SignalEvent |
Behavioral_Elements.State_Machines.ChangeEvent |
Behavioral_Elements.State_Machines.Transition |
Behavioral_Elements.State_Machines.StateVertex |
Behavioral_Elements.State_Machines.Pseudostate |
Behavioral_Elements.State_Machines.SynchState |
Behavioral_Elements.State_Machines.StubState |
Behavioral_Elements.State_Machines.State |
Behavioral_Elements.State_Machines.CompositeState |
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState |
Behavioral_Elements.State_Machines.SimpleState |
Behavioral_Elements.Activity_Graphs.ObjectFlowState |
Behavioral_Elements.Activity_Graphs.ActionState |
Behavioral_Elements.Activity_Graphs.CallState |
Behavioral_Elements.State_Machines.FinalState |
Behavioral_Elements.State_Machines.Guard |
Behavioral_Elements.Collaborations.Message |
Behavioral_Elements.Collaborations.Interaction |
Behavioral_Elements.Activity_Graphs.Partition |
OMG-UML V1.3
UML XMI DTD
March 2000
6-171
6
Foundation.Core.Feature |
Foundation.Core.BehavioralFeature |
Behavioral_Elements.Common_Behavior.Reception |
Foundation.Core.Operation |
Foundation.Core.Method |
Foundation.Core.StructuralFeature |
Foundation.Core.Attribute |
Foundation.Core.GeneralizableElement |
Foundation.Extension_Mechanisms.Stereotype |
Behavioral_Elements.Collaborations.Collaboration |
Model_Management.Package |
Model_Management.Subsystem |
Model_Management.Model |
Foundation.Core.Classifier |
Foundation.Core.Class |
Foundation.Core.DataType |
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node |
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
6-172
OMG-UML V1.3
March 2000
6
Behavioral_Elements.Use_Cases.Actor |
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Foundation.Core.AssociationEnd |
Behavioral_Elements.Collaborations.AssociationEndRole |
Foundation.Core.Namespace |
Foundation.Core.Parameter |
Foundation.Core.Constraint)*
>
<!ELEMENT Foundation.Extension_Mechanisms.Stereotype
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.GeneralizableElement.isRoot?,
Foundation.Core.GeneralizableElement.isLeaf?,
Foundation.Core.GeneralizableElement.isAbstract?,
Foundation.Extension_Mechanisms.Stereotype.icon?,
Foundation.Extension_Mechanisms.Stereotype.baseClass?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-173
6
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.GeneralizableElement.generalization*,
Foundation.Core.GeneralizableElement.specialization*,
Foundation.Extension_Mechanisms.Stereotype.extendedElement*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Foundation.Extension_Mechanisms.Stereotype.requiredTag*,
Foundation.Extension_Mechanisms.Stereotype.stereotypeConstraint*
)?
>
6-174
OMG-UML V1.3
March 2000
6
<!ATTLIST Foundation.Extension_Mechanisms.Stereotype
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: TaggedValue
-->
<!-_______________________________________________________________
-->
<!ELEMENT Foundation.Extension_Mechanisms.TaggedValue.tag
(#PCDATA |
XMI.reference)*
>
<!ELEMENT Foundation.Extension_Mechanisms.TaggedValue.value
(#PCDATA |
XMI.reference)*
>
<!ELEMENT Foundation.Extension_Mechanisms.TaggedValue.stereotype
(Foundation.Extension_Mechanisms.Stereotype)? >
<!ELEMENT
Foundation.Extension_Mechanisms.TaggedValue.modelElement
(Foundation.Core.ModelElement |
Foundation.Core.Comment |
Foundation.Core.Relationship |
Behavioral_Elements.Use_Cases.Extend |
Behavioral_Elements.Use_Cases.Include |
OMG-UML V1.3
UML XMI DTD
March 2000
6-175
6
Foundation.Core.Generalization |
Foundation.Core.Flow |
Foundation.Core.Association |
Foundation.Core.AssociationClass |
Behavioral_Elements.Collaborations.AssociationRole |
Foundation.Core.Dependency |
Foundation.Core.Abstraction |
Foundation.Core.Usage |
Foundation.Core.Binding |
Foundation.Core.Permission |
Foundation.Extension_Mechanisms.TaggedValue |
Behavioral_Elements.Common_Behavior.Instance |
Behavioral_Elements.Common_Behavior.Object |
Behavioral_Elements.Common_Behavior.LinkObject |
Behavioral_Elements.Common_Behavior.DataValue |
Behavioral_Elements.Common_Behavior.ComponentInstance |
Behavioral_Elements.Common_Behavior.NodeInstance |
Behavioral_Elements.Use_Cases.UseCaseInstance |
Behavioral_Elements.Common_Behavior.Action |
Behavioral_Elements.Common_Behavior.CallAction |
Behavioral_Elements.Common_Behavior.SendAction |
Behavioral_Elements.Common_Behavior.ActionSequence |
6-176
OMG-UML V1.3
March 2000
6
Behavioral_Elements.Common_Behavior.ReturnAction |
Behavioral_Elements.Common_Behavior.TerminateAction |
Behavioral_Elements.Common_Behavior.DestroyAction |
Behavioral_Elements.Common_Behavior.CreateAction |
Behavioral_Elements.Common_Behavior.UninterpretedAction |
Behavioral_Elements.Common_Behavior.AttributeLink |
Behavioral_Elements.Common_Behavior.Argument |
Behavioral_Elements.Common_Behavior.Link |
Behavioral_Elements.Common_Behavior.LinkEnd |
Behavioral_Elements.Common_Behavior.Stimulus |
Behavioral_Elements.Use_Cases.ExtensionPoint |
Behavioral_Elements.State_Machines.StateMachine |
Behavioral_Elements.Activity_Graphs.ActivityGraph |
Behavioral_Elements.State_Machines.Event |
Behavioral_Elements.State_Machines.TimeEvent |
Behavioral_Elements.State_Machines.CallEvent |
Behavioral_Elements.State_Machines.SignalEvent |
Behavioral_Elements.State_Machines.ChangeEvent |
Behavioral_Elements.State_Machines.Transition |
Behavioral_Elements.State_Machines.StateVertex |
Behavioral_Elements.State_Machines.Pseudostate |
Behavioral_Elements.State_Machines.SynchState |
OMG-UML V1.3
UML XMI DTD
March 2000
6-177
6
Behavioral_Elements.State_Machines.StubState |
Behavioral_Elements.State_Machines.State |
Behavioral_Elements.State_Machines.CompositeState |
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState |
Behavioral_Elements.State_Machines.SimpleState |
Behavioral_Elements.Activity_Graphs.ObjectFlowState |
Behavioral_Elements.Activity_Graphs.ActionState |
Behavioral_Elements.Activity_Graphs.CallState |
Behavioral_Elements.State_Machines.FinalState |
Behavioral_Elements.State_Machines.Guard |
Behavioral_Elements.Collaborations.Message |
Behavioral_Elements.Collaborations.Interaction |
Behavioral_Elements.Activity_Graphs.Partition |
Foundation.Core.Feature |
Foundation.Core.BehavioralFeature |
Behavioral_Elements.Common_Behavior.Reception |
Foundation.Core.Operation |
Foundation.Core.Method |
Foundation.Core.StructuralFeature |
Foundation.Core.Attribute |
Foundation.Core.GeneralizableElement |
6-178
OMG-UML V1.3
March 2000
6
Foundation.Extension_Mechanisms.Stereotype |
Behavioral_Elements.Collaborations.Collaboration |
Model_Management.Package |
Model_Management.Subsystem |
Model_Management.Model |
Foundation.Core.Classifier |
Foundation.Core.Class |
Foundation.Core.DataType |
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node |
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Foundation.Core.AssociationEnd |
Behavioral_Elements.Collaborations.AssociationEndRole |
Foundation.Core.Namespace |
Foundation.Core.Parameter |
Foundation.Core.Constraint)?
OMG-UML V1.3
UML XMI DTD
March 2000
6-179
6
>
<!ELEMENT Foundation.Extension_Mechanisms.TaggedValue
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Extension_Mechanisms.TaggedValue.tag?,
Foundation.Extension_Mechanisms.TaggedValue.value?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
6-180
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Extension_Mechanisms.TaggedValue.stereotype?,
Foundation.Extension_Mechanisms.TaggedValue.modelElement?,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*)?
>
<!ATTLIST Foundation.Extension_Mechanisms.TaggedValue
%XMI.element.att;
%XMI.link.att;
>
<!ELEMENT Foundation.Extension_Mechanisms
((Foundation.Extension_Mechanisms.Stereotype |
Foundation.Extension_Mechanisms.TaggedValue)*)
>
<!ATTLIST Foundation.Extension_Mechanisms
%XMI.element.att;
%XMI.link.att;
>
<!ELEMENT Foundation ((Foundation.Core | Foundation.Data_Types |
Foundation.Extension_Mechanisms)*) >
<!ATTLIST Foundation
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
OMG-UML V1.3
UML XMI DTD
March 2000
6-181
6
<!--
-->
<!-- METAMODEL PACKAGE: Behavioral_Elements
->
-
<!-_______________________________________________________________
-->
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL PACKAGE: Common_Behavior
-->
<!-_______________________________________________________________
-->
<!ELEMENT
Behavioral_Elements.Common_Behavior.Action.actualArgument
(Behavioral_Elements.Common_Behavior.Argument)* >
<!ELEMENT Behavioral_Elements.Common_Behavior.Instance.slot
(Behavioral_Elements.Common_Behavior.AttributeLink)* >
<!ELEMENT Behavioral_Elements.Common_Behavior.Link.connection
(Behavioral_Elements.Common_Behavior.LinkEnd)* >
<!ELEMENT
Behavioral_Elements.Common_Behavior.ActionSequence.action
(Behavioral_Elements.Common_Behavior.Action |
Behavioral_Elements.Common_Behavior.CallAction |
Behavioral_Elements.Common_Behavior.SendAction |
Behavioral_Elements.Common_Behavior.ActionSequence |
Behavioral_Elements.Common_Behavior.ReturnAction |
6-182
OMG-UML V1.3
March 2000
6
Behavioral_Elements.Common_Behavior.TerminateAction |
Behavioral_Elements.Common_Behavior.DestroyAction |
Behavioral_Elements.Common_Behavior.CreateAction |
Behavioral_Elements.Common_Behavior.UninterpretedAction)*
>
<!ELEMENT
Behavioral_Elements.Common_Behavior.LinkEnd.qualifiedValue
(Behavioral_Elements.Common_Behavior.AttributeLink)* >
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Instance
-->
<!-_______________________________________________________________
-->
<!ELEMENT
Behavioral_Elements.Common_Behavior.Instance.classifier
(Foundation.Core.Classifier |
Foundation.Core.Class |
Foundation.Core.AssociationClass |
Foundation.Core.DataType |
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node |
Behavioral_Elements.Common_Behavior.Signal |
OMG-UML V1.3
UML XMI DTD
March 2000
6-183
6
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Model_Management.Subsystem)*
>
<!ELEMENT
Behavioral_Elements.Common_Behavior.Instance.attributeLink
(Behavioral_Elements.Common_Behavior.AttributeLink)* >
<!ELEMENT Behavioral_Elements.Common_Behavior.Instance.linkEnd
(Behavioral_Elements.Common_Behavior.LinkEnd)* >
<!ELEMENT Behavioral_Elements.Common_Behavior.Instance.stimulus1
(Behavioral_Elements.Common_Behavior.Stimulus)* >
<!ELEMENT Behavioral_Elements.Common_Behavior.Instance.stimulus3
(Behavioral_Elements.Common_Behavior.Stimulus)* >
<!ELEMENT
Behavioral_Elements.Common_Behavior.Instance.componentInstance
(Behavioral_Elements.Common_Behavior.ComponentInstance)? >
<!ELEMENT Behavioral_Elements.Common_Behavior.Instance.stimulus2
(Behavioral_Elements.Common_Behavior.Stimulus)* >
6-184
OMG-UML V1.3
March 2000
6
<!ELEMENT Behavioral_Elements.Common_Behavior.Instance
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-185
6
Behavioral_Elements.Common_Behavior.Instance.classifier*,
Behavioral_Elements.Common_Behavior.Instance.attributeLink*,
Behavioral_Elements.Common_Behavior.Instance.linkEnd*,
Behavioral_Elements.Common_Behavior.Instance.stimulus1*,
Behavioral_Elements.Common_Behavior.Instance.stimulus3*,
Behavioral_Elements.Common_Behavior.Instance.componentInstance?,
Behavioral_Elements.Common_Behavior.Instance.stimulus2*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.Common_Behavior.Instance.slot*)?
>
<!ATTLIST Behavioral_Elements.Common_Behavior.Instance
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Signal
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.Common_Behavior.Signal.reception
(Behavioral_Elements.Common_Behavior.Reception)* >
<!ELEMENT Behavioral_Elements.Common_Behavior.Signal.context
(Foundation.Core.BehavioralFeature |
6-186
OMG-UML V1.3
March 2000
6
Behavioral_Elements.Common_Behavior.Reception |
Foundation.Core.Operation |
Foundation.Core.Method)*
>
<!ELEMENT Behavioral_Elements.Common_Behavior.Signal.sendAction
(Behavioral_Elements.Common_Behavior.SendAction)* >
<!ELEMENT Behavioral_Elements.Common_Behavior.Signal.occurrence
(Behavioral_Elements.State_Machines.SignalEvent)* >
<!ELEMENT Behavioral_Elements.Common_Behavior.Signal
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.GeneralizableElement.isRoot?,
Foundation.Core.GeneralizableElement.isLeaf?,
Foundation.Core.GeneralizableElement.isAbstract?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-187
6
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.GeneralizableElement.generalization*,
Foundation.Core.GeneralizableElement.specialization*,
Foundation.Core.Classifier.participant*,
Foundation.Core.Classifier.powertypeRange*,
Foundation.Core.Classifier.instance*,
Foundation.Core.Classifier.createAction*,
Foundation.Core.Classifier.classifierRole*,
Foundation.Core.Classifier.collaboration*,
Foundation.Core.Classifier.classifierInState*,
Foundation.Core.Classifier.objectFlowState*,
6-188
OMG-UML V1.3
March 2000
6
Behavioral_Elements.Common_Behavior.Signal.reception*,
Behavioral_Elements.Common_Behavior.Signal.context*,
Behavioral_Elements.Common_Behavior.Signal.sendAction*,
Behavioral_Elements.Common_Behavior.Signal.occurrence*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Foundation.Core.Namespace.ownedElement*,
Foundation.Core.Classifier.feature*)?
>
<!ATTLIST Behavioral_Elements.Common_Behavior.Signal
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: CreateAction
-->
<!-_______________________________________________________________
-->
<!ELEMENT
Behavioral_Elements.Common_Behavior.CreateAction.instantiation
(Foundation.Core.Classifier |
Foundation.Core.Class |
Foundation.Core.AssociationClass |
Foundation.Core.DataType |
OMG-UML V1.3
UML XMI DTD
March 2000
6-189
6
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node |
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Model_Management.Subsystem)?
>
<!ELEMENT Behavioral_Elements.Common_Behavior.CreateAction
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Behavioral_Elements.Common_Behavior.Action.recurrence?,
Behavioral_Elements.Common_Behavior.Action.target?,
Behavioral_Elements.Common_Behavior.Action.isAsynchronous?,
Behavioral_Elements.Common_Behavior.Action.script?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
6-190
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.Common_Behavior.Action.actionSequence?,
Behavioral_Elements.Common_Behavior.Action.stimulus*,
Behavioral_Elements.Common_Behavior.Action.state1?,
Behavioral_Elements.Common_Behavior.Action.state2?,
Behavioral_Elements.Common_Behavior.Action.transition?,
Behavioral_Elements.Common_Behavior.Action.state3?,
Behavioral_Elements.Common_Behavior.Action.message*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-191
6
Behavioral_Elements.Common_Behavior.CreateAction.instantiation?,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.Common_Behavior.Action.actualArgument*)?
>
<!ATTLIST Behavioral_Elements.Common_Behavior.CreateAction
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: DestroyAction
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.Common_Behavior.DestroyAction
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Behavioral_Elements.Common_Behavior.Action.recurrence?,
Behavioral_Elements.Common_Behavior.Action.target?,
Behavioral_Elements.Common_Behavior.Action.isAsynchronous?,
Behavioral_Elements.Common_Behavior.Action.script?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
6-192
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.Common_Behavior.Action.actionSequence?,
Behavioral_Elements.Common_Behavior.Action.stimulus*,
Behavioral_Elements.Common_Behavior.Action.state1?,
Behavioral_Elements.Common_Behavior.Action.state2?,
Behavioral_Elements.Common_Behavior.Action.transition?,
OMG-UML V1.3
UML XMI DTD
March 2000
6-193
6
Behavioral_Elements.Common_Behavior.Action.state3?,
Behavioral_Elements.Common_Behavior.Action.message*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.Common_Behavior.Action.actualArgument*)?
>
<!ATTLIST Behavioral_Elements.Common_Behavior.DestroyAction
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: UninterpretedAction
-->
<!-_______________________________________________________________
-->
<!ELEMENT
Behavioral_Elements.Common_Behavior.UninterpretedAction
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Behavioral_Elements.Common_Behavior.Action.recurrence?,
Behavioral_Elements.Common_Behavior.Action.target?,
Behavioral_Elements.Common_Behavior.Action.isAsynchronous?,
Behavioral_Elements.Common_Behavior.Action.script?,
6-194
OMG-UML V1.3
March 2000
6
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.Common_Behavior.Action.actionSequence?,
Behavioral_Elements.Common_Behavior.Action.stimulus*,
Behavioral_Elements.Common_Behavior.Action.state1?,
OMG-UML V1.3
UML XMI DTD
March 2000
6-195
6
Behavioral_Elements.Common_Behavior.Action.state2?,
Behavioral_Elements.Common_Behavior.Action.transition?,
Behavioral_Elements.Common_Behavior.Action.state3?,
Behavioral_Elements.Common_Behavior.Action.message*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.Common_Behavior.Action.actualArgument*)?
>
<!ATTLIST
Behavioral_Elements.Common_Behavior.UninterpretedAction
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Action
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.Common_Behavior.Action.recurrence
(Foundation.Data_Types.IterationExpression) >
<!ELEMENT Behavioral_Elements.Common_Behavior.Action.target
(Foundation.Data_Types.ObjectSetExpression) >
<!ELEMENT
Behavioral_Elements.Common_Behavior.Action.isAsynchronous
6-196
OMG-UML V1.3
March 2000
6
EMPTY >
<!ATTLIST
Behavioral_Elements.Common_Behavior.Action.isAsynchronous
xmi.value ( true | false ) #REQUIRED
>
<!ELEMENT Behavioral_Elements.Common_Behavior.Action.script
(Foundation.Data_Types.ActionExpression) >
<!ELEMENT
Behavioral_Elements.Common_Behavior.Action.actionSequence
(Behavioral_Elements.Common_Behavior.ActionSequence)? >
<!ELEMENT Behavioral_Elements.Common_Behavior.Action.stimulus
(Behavioral_Elements.Common_Behavior.Stimulus)* >
<!ELEMENT Behavioral_Elements.Common_Behavior.Action.state1
(Behavioral_Elements.State_Machines.State |
Behavioral_Elements.State_Machines.CompositeState |
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState |
Behavioral_Elements.State_Machines.SimpleState |
Behavioral_Elements.Activity_Graphs.ObjectFlowState |
Behavioral_Elements.Activity_Graphs.ActionState |
Behavioral_Elements.Activity_Graphs.CallState |
Behavioral_Elements.State_Machines.FinalState)?
>
<!ELEMENT Behavioral_Elements.Common_Behavior.Action.state2
(Behavioral_Elements.State_Machines.State |
OMG-UML V1.3
UML XMI DTD
March 2000
6-197
6
Behavioral_Elements.State_Machines.CompositeState |
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState |
Behavioral_Elements.State_Machines.SimpleState |
Behavioral_Elements.Activity_Graphs.ObjectFlowState |
Behavioral_Elements.Activity_Graphs.ActionState |
Behavioral_Elements.Activity_Graphs.CallState |
Behavioral_Elements.State_Machines.FinalState)?
>
<!ELEMENT Behavioral_Elements.Common_Behavior.Action.transition
(Behavioral_Elements.State_Machines.Transition)? >
<!ELEMENT Behavioral_Elements.Common_Behavior.Action.state3
(Behavioral_Elements.State_Machines.State |
Behavioral_Elements.State_Machines.CompositeState |
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState |
Behavioral_Elements.State_Machines.SimpleState |
Behavioral_Elements.Activity_Graphs.ObjectFlowState |
Behavioral_Elements.Activity_Graphs.ActionState |
Behavioral_Elements.Activity_Graphs.CallState |
Behavioral_Elements.State_Machines.FinalState)?
>
6-198
OMG-UML V1.3
March 2000
6
<!ELEMENT Behavioral_Elements.Common_Behavior.Action.message
(Behavioral_Elements.Collaborations.Message)* >
<!ELEMENT Behavioral_Elements.Common_Behavior.Action
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Behavioral_Elements.Common_Behavior.Action.recurrence?,
Behavioral_Elements.Common_Behavior.Action.target?,
Behavioral_Elements.Common_Behavior.Action.isAsynchronous?,
Behavioral_Elements.Common_Behavior.Action.script?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-199
6
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.Common_Behavior.Action.actionSequence?,
Behavioral_Elements.Common_Behavior.Action.stimulus*,
Behavioral_Elements.Common_Behavior.Action.state1?,
Behavioral_Elements.Common_Behavior.Action.state2?,
Behavioral_Elements.Common_Behavior.Action.transition?,
Behavioral_Elements.Common_Behavior.Action.state3?,
Behavioral_Elements.Common_Behavior.Action.message*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.Common_Behavior.Action.actualArgument*)?
>
<!ATTLIST Behavioral_Elements.Common_Behavior.Action
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
6-200
-->
OMG-UML V1.3
March 2000
6
<!-- METAMODEL CLASS: AttributeLink
-->
<!-_______________________________________________________________
-->
<!ELEMENT
Behavioral_Elements.Common_Behavior.AttributeLink.attribute
(Foundation.Core.Attribute)? >
<!ELEMENT
Behavioral_Elements.Common_Behavior.AttributeLink.value
(Behavioral_Elements.Common_Behavior.Instance |
Behavioral_Elements.Common_Behavior.Object |
Behavioral_Elements.Common_Behavior.LinkObject |
Behavioral_Elements.Common_Behavior.DataValue |
Behavioral_Elements.Common_Behavior.ComponentInstance |
Behavioral_Elements.Common_Behavior.NodeInstance |
Behavioral_Elements.Use_Cases.UseCaseInstance)?
>
<!ELEMENT
Behavioral_Elements.Common_Behavior.AttributeLink.instance
(Behavioral_Elements.Common_Behavior.Instance |
Behavioral_Elements.Common_Behavior.Object |
Behavioral_Elements.Common_Behavior.LinkObject |
Behavioral_Elements.Common_Behavior.DataValue |
Behavioral_Elements.Common_Behavior.ComponentInstance |
Behavioral_Elements.Common_Behavior.NodeInstance |
Behavioral_Elements.Use_Cases.UseCaseInstance)?
OMG-UML V1.3
UML XMI DTD
March 2000
6-201
6
>
<!ELEMENT
Behavioral_Elements.Common_Behavior.AttributeLink.linkEnd
(Behavioral_Elements.Common_Behavior.LinkEnd)? >
<!ELEMENT Behavioral_Elements.Common_Behavior.AttributeLink
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
6-202
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.Common_Behavior.AttributeLink.attribute?,
Behavioral_Elements.Common_Behavior.AttributeLink.value?,
Behavioral_Elements.Common_Behavior.AttributeLink.instance?,
Behavioral_Elements.Common_Behavior.AttributeLink.linkEnd?,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*)?
>
<!ATTLIST Behavioral_Elements.Common_Behavior.AttributeLink
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: LinkObject
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.Common_Behavior.LinkObject
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
OMG-UML V1.3
UML XMI DTD
March 2000
6-203
6
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.Common_Behavior.Instance.classifier*,
Behavioral_Elements.Common_Behavior.Instance.attributeLink*,
Behavioral_Elements.Common_Behavior.Instance.linkEnd*,
6-204
OMG-UML V1.3
March 2000
6
Behavioral_Elements.Common_Behavior.Instance.stimulus1*,
Behavioral_Elements.Common_Behavior.Instance.stimulus3*,
Behavioral_Elements.Common_Behavior.Instance.componentInstance?,
Behavioral_Elements.Common_Behavior.Instance.stimulus2*,
Behavioral_Elements.Common_Behavior.Link.association?,
Behavioral_Elements.Common_Behavior.Link.stimulus*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.Common_Behavior.Instance.slot*,
Behavioral_Elements.Common_Behavior.Link.connection*)?
>
<!ATTLIST Behavioral_Elements.Common_Behavior.LinkObject
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Object
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.Common_Behavior.Object
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
OMG-UML V1.3
UML XMI DTD
March 2000
6-205
6
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.Common_Behavior.Instance.classifier*,
Behavioral_Elements.Common_Behavior.Instance.attributeLink*,
Behavioral_Elements.Common_Behavior.Instance.linkEnd*,
6-206
OMG-UML V1.3
March 2000
6
Behavioral_Elements.Common_Behavior.Instance.stimulus1*,
Behavioral_Elements.Common_Behavior.Instance.stimulus3*,
Behavioral_Elements.Common_Behavior.Instance.componentInstance?,
Behavioral_Elements.Common_Behavior.Instance.stimulus2*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.Common_Behavior.Instance.slot*)?
>
<!ATTLIST Behavioral_Elements.Common_Behavior.Object
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: DataValue
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.Common_Behavior.DataValue
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-207
6
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.Common_Behavior.Instance.classifier*,
Behavioral_Elements.Common_Behavior.Instance.attributeLink*,
Behavioral_Elements.Common_Behavior.Instance.linkEnd*,
Behavioral_Elements.Common_Behavior.Instance.stimulus1*,
Behavioral_Elements.Common_Behavior.Instance.stimulus3*,
Behavioral_Elements.Common_Behavior.Instance.componentInstance?,
6-208
OMG-UML V1.3
March 2000
6
Behavioral_Elements.Common_Behavior.Instance.stimulus2*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.Common_Behavior.Instance.slot*)?
>
<!ATTLIST Behavioral_Elements.Common_Behavior.DataValue
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: CallAction
-->
<!-_______________________________________________________________
-->
<!ELEMENT
Behavioral_Elements.Common_Behavior.CallAction.operation
(Foundation.Core.Operation)? >
<!ELEMENT Behavioral_Elements.Common_Behavior.CallAction
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Behavioral_Elements.Common_Behavior.Action.recurrence?,
Behavioral_Elements.Common_Behavior.Action.target?,
Behavioral_Elements.Common_Behavior.Action.isAsynchronous?,
OMG-UML V1.3
UML XMI DTD
March 2000
6-209
6
Behavioral_Elements.Common_Behavior.Action.script?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.Common_Behavior.Action.actionSequence?,
Behavioral_Elements.Common_Behavior.Action.stimulus*,
6-210
OMG-UML V1.3
March 2000
6
Behavioral_Elements.Common_Behavior.Action.state1?,
Behavioral_Elements.Common_Behavior.Action.state2?,
Behavioral_Elements.Common_Behavior.Action.transition?,
Behavioral_Elements.Common_Behavior.Action.state3?,
Behavioral_Elements.Common_Behavior.Action.message*,
Behavioral_Elements.Common_Behavior.CallAction.operation?,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.Common_Behavior.Action.actualArgument*)?
>
<!ATTLIST Behavioral_Elements.Common_Behavior.CallAction
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: SendAction
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.Common_Behavior.SendAction.signal
(Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception)?
>
<!ELEMENT Behavioral_Elements.Common_Behavior.SendAction
(Foundation.Core.ModelElement.name?,
OMG-UML V1.3
UML XMI DTD
March 2000
6-211
6
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Behavioral_Elements.Common_Behavior.Action.recurrence?,
Behavioral_Elements.Common_Behavior.Action.target?,
Behavioral_Elements.Common_Behavior.Action.isAsynchronous?,
Behavioral_Elements.Common_Behavior.Action.script?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
6-212
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.Common_Behavior.Action.actionSequence?,
Behavioral_Elements.Common_Behavior.Action.stimulus*,
Behavioral_Elements.Common_Behavior.Action.state1?,
Behavioral_Elements.Common_Behavior.Action.state2?,
Behavioral_Elements.Common_Behavior.Action.transition?,
Behavioral_Elements.Common_Behavior.Action.state3?,
Behavioral_Elements.Common_Behavior.Action.message*,
Behavioral_Elements.Common_Behavior.SendAction.signal?,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.Common_Behavior.Action.actualArgument*)?
>
<!ATTLIST Behavioral_Elements.Common_Behavior.SendAction
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: ActionSequence
-->
<!-_______________________________________________________________
-->
OMG-UML V1.3
UML XMI DTD
March 2000
6-213
6
<!ELEMENT Behavioral_Elements.Common_Behavior.ActionSequence
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Behavioral_Elements.Common_Behavior.Action.recurrence?,
Behavioral_Elements.Common_Behavior.Action.target?,
Behavioral_Elements.Common_Behavior.Action.isAsynchronous?,
Behavioral_Elements.Common_Behavior.Action.script?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
6-214
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.Common_Behavior.Action.actionSequence?,
Behavioral_Elements.Common_Behavior.Action.stimulus*,
Behavioral_Elements.Common_Behavior.Action.state1?,
Behavioral_Elements.Common_Behavior.Action.state2?,
Behavioral_Elements.Common_Behavior.Action.transition?,
Behavioral_Elements.Common_Behavior.Action.state3?,
Behavioral_Elements.Common_Behavior.Action.message*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.Common_Behavior.Action.actualArgument*,
Behavioral_Elements.Common_Behavior.ActionSequence.action*)?
>
<!ATTLIST Behavioral_Elements.Common_Behavior.ActionSequence
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
OMG-UML V1.3
-->
UML XMI DTD
March 2000
6-215
6
<!-- METAMODEL CLASS: Argument
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.Common_Behavior.Argument.value
(Foundation.Data_Types.Expression |
Foundation.Data_Types.BooleanExpression |
Foundation.Data_Types.ActionExpression |
Foundation.Data_Types.IterationExpression |
Foundation.Data_Types.TypeExpression |
Foundation.Data_Types.ArgListsExpression |
Foundation.Data_Types.MappingExpression |
Foundation.Data_Types.ProcedureExpression |
Foundation.Data_Types.TimeExpression |
Foundation.Data_Types.ObjectSetExpression)
>
<!ELEMENT Behavioral_Elements.Common_Behavior.Argument.action
(Behavioral_Elements.Common_Behavior.Action |
Behavioral_Elements.Common_Behavior.CallAction |
Behavioral_Elements.Common_Behavior.SendAction |
Behavioral_Elements.Common_Behavior.ActionSequence |
Behavioral_Elements.Common_Behavior.ReturnAction |
Behavioral_Elements.Common_Behavior.TerminateAction |
Behavioral_Elements.Common_Behavior.DestroyAction |
6-216
OMG-UML V1.3
March 2000
6
Behavioral_Elements.Common_Behavior.CreateAction |
Behavioral_Elements.Common_Behavior.UninterpretedAction)?
>
<!ELEMENT Behavioral_Elements.Common_Behavior.Argument
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Behavioral_Elements.Common_Behavior.Argument.value?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-217
6
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.Common_Behavior.Argument.action?,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*)?
>
<!ATTLIST Behavioral_Elements.Common_Behavior.Argument
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Reception
-->
<!-_______________________________________________________________
-->
<!ELEMENT
Behavioral_Elements.Common_Behavior.Reception.specification
(#PCDATA |
XMI.reference)*
>
<!ELEMENT Behavioral_Elements.Common_Behavior.Reception.isRoot
EMPTY >
<!ATTLIST Behavioral_Elements.Common_Behavior.Reception.isRoot
xmi.value ( true | false ) #REQUIRED
6-218
OMG-UML V1.3
March 2000
6
>
<!ELEMENT Behavioral_Elements.Common_Behavior.Reception.isLeaf
EMPTY >
<!ATTLIST Behavioral_Elements.Common_Behavior.Reception.isLeaf
xmi.value ( true | false ) #REQUIRED
>
<!ELEMENT
Behavioral_Elements.Common_Behavior.Reception.isAbstract
EMPTY >
<!ATTLIST
Behavioral_Elements.Common_Behavior.Reception.isAbstract
xmi.value ( true | false ) #REQUIRED
>
<!ELEMENT Behavioral_Elements.Common_Behavior.Reception.signal
(Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception)?
>
<!ELEMENT Behavioral_Elements.Common_Behavior.Reception
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.Feature.ownerScope?,
Foundation.Core.BehavioralFeature.isQuery?,
Behavioral_Elements.Common_Behavior.Reception.specification?,
Behavioral_Elements.Common_Behavior.Reception.isRoot?,
Behavioral_Elements.Common_Behavior.Reception.isLeaf?,
Behavioral_Elements.Common_Behavior.Reception.isAbstract?,
XMI.extension*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-219
6
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.Feature.owner?,
Foundation.Core.Feature.classifierRole*,
Foundation.Core.BehavioralFeature.raisedSignal*,
Behavioral_Elements.Common_Behavior.Reception.signal?,
6-220
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Foundation.Core.BehavioralFeature.parameter*)?
>
<!ATTLIST Behavioral_Elements.Common_Behavior.Reception
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS:
Link
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.Common_Behavior.Link.association
(Foundation.Core.Association |
Foundation.Core.AssociationClass |
Behavioral_Elements.Collaborations.AssociationRole)?
>
<!ELEMENT Behavioral_Elements.Common_Behavior.Link.stimulus
(Behavioral_Elements.Common_Behavior.Stimulus)* >
<!ELEMENT Behavioral_Elements.Common_Behavior.Link
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
XMI.extension*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-221
6
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.Common_Behavior.Link.association?,
Behavioral_Elements.Common_Behavior.Link.stimulus*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
6-222
OMG-UML V1.3
March 2000
6
Behavioral_Elements.Common_Behavior.Link.connection*)?
>
<!ATTLIST Behavioral_Elements.Common_Behavior.Link
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: LinkEnd
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.Common_Behavior.LinkEnd.instance
(Behavioral_Elements.Common_Behavior.Instance |
Behavioral_Elements.Common_Behavior.Object |
Behavioral_Elements.Common_Behavior.LinkObject |
Behavioral_Elements.Common_Behavior.DataValue |
Behavioral_Elements.Common_Behavior.ComponentInstance |
Behavioral_Elements.Common_Behavior.NodeInstance |
Behavioral_Elements.Use_Cases.UseCaseInstance)?
>
<!ELEMENT Behavioral_Elements.Common_Behavior.LinkEnd.link
(Behavioral_Elements.Common_Behavior.Link |
Behavioral_Elements.Common_Behavior.LinkObject)?
>
OMG-UML V1.3
UML XMI DTD
March 2000
6-223
6
<!ELEMENT
Behavioral_Elements.Common_Behavior.LinkEnd.associationEnd
(Foundation.Core.AssociationEnd |
Behavioral_Elements.Collaborations.AssociationEndRole)?
>
<!ELEMENT Behavioral_Elements.Common_Behavior.LinkEnd
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
6-224
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.Common_Behavior.LinkEnd.instance?,
Behavioral_Elements.Common_Behavior.LinkEnd.link?,
Behavioral_Elements.Common_Behavior.LinkEnd.associationEnd?,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.Common_Behavior.LinkEnd.qualifiedValue*)?
>
<!ATTLIST Behavioral_Elements.Common_Behavior.LinkEnd
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: ReturnAction
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.Common_Behavior.ReturnAction
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
OMG-UML V1.3
UML XMI DTD
March 2000
6-225
6
Behavioral_Elements.Common_Behavior.Action.recurrence?,
Behavioral_Elements.Common_Behavior.Action.target?,
Behavioral_Elements.Common_Behavior.Action.isAsynchronous?,
Behavioral_Elements.Common_Behavior.Action.script?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
6-226
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.Common_Behavior.Action.actionSequence?,
Behavioral_Elements.Common_Behavior.Action.stimulus*,
Behavioral_Elements.Common_Behavior.Action.state1?,
Behavioral_Elements.Common_Behavior.Action.state2?,
Behavioral_Elements.Common_Behavior.Action.transition?,
Behavioral_Elements.Common_Behavior.Action.state3?,
Behavioral_Elements.Common_Behavior.Action.message*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.Common_Behavior.Action.actualArgument*)?
>
<!ATTLIST Behavioral_Elements.Common_Behavior.ReturnAction
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: TerminateAction
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.Common_Behavior.TerminateAction
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
OMG-UML V1.3
UML XMI DTD
March 2000
6-227
6
Foundation.Core.ModelElement.isSpecification?,
Behavioral_Elements.Common_Behavior.Action.recurrence?,
Behavioral_Elements.Common_Behavior.Action.target?,
Behavioral_Elements.Common_Behavior.Action.isAsynchronous?,
Behavioral_Elements.Common_Behavior.Action.script?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
6-228
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.Common_Behavior.Action.actionSequence?,
Behavioral_Elements.Common_Behavior.Action.stimulus*,
Behavioral_Elements.Common_Behavior.Action.state1?,
Behavioral_Elements.Common_Behavior.Action.state2?,
Behavioral_Elements.Common_Behavior.Action.transition?,
Behavioral_Elements.Common_Behavior.Action.state3?,
Behavioral_Elements.Common_Behavior.Action.message*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.Common_Behavior.Action.actualArgument*)?
>
<!ATTLIST Behavioral_Elements.Common_Behavior.TerminateAction
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Stimulus
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.Common_Behavior.Stimulus.argument
(Behavioral_Elements.Common_Behavior.Instance |
OMG-UML V1.3
UML XMI DTD
March 2000
6-229
6
Behavioral_Elements.Common_Behavior.Object |
Behavioral_Elements.Common_Behavior.LinkObject |
Behavioral_Elements.Common_Behavior.DataValue |
Behavioral_Elements.Common_Behavior.ComponentInstance |
Behavioral_Elements.Common_Behavior.NodeInstance |
Behavioral_Elements.Use_Cases.UseCaseInstance)*
>
<!ELEMENT Behavioral_Elements.Common_Behavior.Stimulus.sender
(Behavioral_Elements.Common_Behavior.Instance |
Behavioral_Elements.Common_Behavior.Object |
Behavioral_Elements.Common_Behavior.LinkObject |
Behavioral_Elements.Common_Behavior.DataValue |
Behavioral_Elements.Common_Behavior.ComponentInstance |
Behavioral_Elements.Common_Behavior.NodeInstance |
Behavioral_Elements.Use_Cases.UseCaseInstance)?
>
<!ELEMENT Behavioral_Elements.Common_Behavior.Stimulus.receiver
(Behavioral_Elements.Common_Behavior.Instance |
Behavioral_Elements.Common_Behavior.Object |
Behavioral_Elements.Common_Behavior.LinkObject |
Behavioral_Elements.Common_Behavior.DataValue |
Behavioral_Elements.Common_Behavior.ComponentInstance |
Behavioral_Elements.Common_Behavior.NodeInstance |
6-230
OMG-UML V1.3
March 2000
6
Behavioral_Elements.Use_Cases.UseCaseInstance)?
>
<!ELEMENT
Behavioral_Elements.Common_Behavior.Stimulus.communicationLink
(Behavioral_Elements.Common_Behavior.Link |
Behavioral_Elements.Common_Behavior.LinkObject)?
>
<!ELEMENT
Behavioral_Elements.Common_Behavior.Stimulus.dispatchAction
(Behavioral_Elements.Common_Behavior.Action |
Behavioral_Elements.Common_Behavior.CallAction |
Behavioral_Elements.Common_Behavior.SendAction |
Behavioral_Elements.Common_Behavior.ActionSequence |
Behavioral_Elements.Common_Behavior.ReturnAction |
Behavioral_Elements.Common_Behavior.TerminateAction |
Behavioral_Elements.Common_Behavior.DestroyAction |
Behavioral_Elements.Common_Behavior.CreateAction |
Behavioral_Elements.Common_Behavior.UninterpretedAction)?
>
<!ELEMENT Behavioral_Elements.Common_Behavior.Stimulus
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-231
6
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.Common_Behavior.Stimulus.argument*,
Behavioral_Elements.Common_Behavior.Stimulus.sender?,
Behavioral_Elements.Common_Behavior.Stimulus.receiver?,
Behavioral_Elements.Common_Behavior.Stimulus.communicationLink?,
Behavioral_Elements.Common_Behavior.Stimulus.dispatchAction?,
Foundation.Core.ModelElement.templateParameter*,
6-232
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.taggedValue*)?
>
<!ATTLIST Behavioral_Elements.Common_Behavior.Stimulus
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Exception
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.Common_Behavior.Exception
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.GeneralizableElement.isRoot?,
Foundation.Core.GeneralizableElement.isLeaf?,
Foundation.Core.GeneralizableElement.isAbstract?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-233
6
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.GeneralizableElement.generalization*,
Foundation.Core.GeneralizableElement.specialization*,
Foundation.Core.Classifier.participant*,
Foundation.Core.Classifier.powertypeRange*,
Foundation.Core.Classifier.instance*,
Foundation.Core.Classifier.createAction*,
Foundation.Core.Classifier.classifierRole*,
Foundation.Core.Classifier.collaboration*,
Foundation.Core.Classifier.classifierInState*,
6-234
OMG-UML V1.3
March 2000
6
Foundation.Core.Classifier.objectFlowState*,
Behavioral_Elements.Common_Behavior.Signal.reception*,
Behavioral_Elements.Common_Behavior.Signal.context*,
Behavioral_Elements.Common_Behavior.Signal.sendAction*,
Behavioral_Elements.Common_Behavior.Signal.occurrence*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Foundation.Core.Namespace.ownedElement*,
Foundation.Core.Classifier.feature*)?
>
<!ATTLIST Behavioral_Elements.Common_Behavior.Exception
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: ComponentInstance
-->
<!-_______________________________________________________________
-->
<!ELEMENT
Behavioral_Elements.Common_Behavior.ComponentInstance.nodeInstan
ce
(Behavioral_Elements.Common_Behavior.NodeInstance)? >
OMG-UML V1.3
UML XMI DTD
March 2000
6-235
6
<!ELEMENT
Behavioral_Elements.Common_Behavior.ComponentInstance.resident
(Behavioral_Elements.Common_Behavior.Instance |
Behavioral_Elements.Common_Behavior.Object |
Behavioral_Elements.Common_Behavior.LinkObject |
Behavioral_Elements.Common_Behavior.DataValue |
Behavioral_Elements.Common_Behavior.ComponentInstance |
Behavioral_Elements.Common_Behavior.NodeInstance |
Behavioral_Elements.Use_Cases.UseCaseInstance)*
>
<!ELEMENT Behavioral_Elements.Common_Behavior.ComponentInstance
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
6-236
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.Common_Behavior.Instance.classifier*,
Behavioral_Elements.Common_Behavior.Instance.attributeLink*,
Behavioral_Elements.Common_Behavior.Instance.linkEnd*,
Behavioral_Elements.Common_Behavior.Instance.stimulus1*,
Behavioral_Elements.Common_Behavior.Instance.stimulus3*,
Behavioral_Elements.Common_Behavior.Instance.componentInstance?,
Behavioral_Elements.Common_Behavior.Instance.stimulus2*,
Behavioral_Elements.Common_Behavior.ComponentInstance.nodeInstan
ce?,
Behavioral_Elements.Common_Behavior.ComponentInstance.resident*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.Common_Behavior.Instance.slot*)?
>
OMG-UML V1.3
UML XMI DTD
March 2000
6-237
6
<!ATTLIST Behavioral_Elements.Common_Behavior.ComponentInstance
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: NodeInstance
-->
<!-_______________________________________________________________
-->
<!ELEMENT
Behavioral_Elements.Common_Behavior.NodeInstance.resident
(Behavioral_Elements.Common_Behavior.ComponentInstance)* >
<!ELEMENT Behavioral_Elements.Common_Behavior.NodeInstance
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
6-238
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.Common_Behavior.Instance.classifier*,
Behavioral_Elements.Common_Behavior.Instance.attributeLink*,
Behavioral_Elements.Common_Behavior.Instance.linkEnd*,
Behavioral_Elements.Common_Behavior.Instance.stimulus1*,
Behavioral_Elements.Common_Behavior.Instance.stimulus3*,
Behavioral_Elements.Common_Behavior.Instance.componentInstance?,
Behavioral_Elements.Common_Behavior.Instance.stimulus2*,
Behavioral_Elements.Common_Behavior.NodeInstance.resident*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.Common_Behavior.Instance.slot*)?
OMG-UML V1.3
UML XMI DTD
March 2000
6-239
6
>
<!ATTLIST Behavioral_Elements.Common_Behavior.NodeInstance
%XMI.element.att;
%XMI.link.att;
>
<!ELEMENT Behavioral_Elements.Common_Behavior
((Behavioral_Elements.Common_Behavior.Instance |
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.CreateAction |
Behavioral_Elements.Common_Behavior.DestroyAction |
Behavioral_Elements.Common_Behavior.UninterpretedAction |
Behavioral_Elements.Common_Behavior.Action |
Behavioral_Elements.Common_Behavior.AttributeLink |
Behavioral_Elements.Common_Behavior.LinkObject |
Behavioral_Elements.Common_Behavior.Object |
Behavioral_Elements.Common_Behavior.DataValue |
Behavioral_Elements.Common_Behavior.CallAction |
Behavioral_Elements.Common_Behavior.SendAction |
Behavioral_Elements.Common_Behavior.ActionSequence |
Behavioral_Elements.Common_Behavior.Argument |
Behavioral_Elements.Common_Behavior.Reception |
Behavioral_Elements.Common_Behavior.Link |
Behavioral_Elements.Common_Behavior.LinkEnd |
Behavioral_Elements.Common_Behavior.ReturnAction |
6-240
OMG-UML V1.3
March 2000
6
Behavioral_Elements.Common_Behavior.TerminateAction |
Behavioral_Elements.Common_Behavior.Stimulus |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Common_Behavior.ComponentInstance |
Behavioral_Elements.Common_Behavior.NodeInstance)*)
>
<!ATTLIST Behavioral_Elements.Common_Behavior
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL PACKAGE: Use_Cases
-->
<!-_______________________________________________________________
-->
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: UseCase
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.Use_Cases.UseCase.extend2
(Behavioral_Elements.Use_Cases.Extend)* >
<!ELEMENT Behavioral_Elements.Use_Cases.UseCase.extend
OMG-UML V1.3
UML XMI DTD
March 2000
6-241
6
(Behavioral_Elements.Use_Cases.Extend)* >
<!ELEMENT Behavioral_Elements.Use_Cases.UseCase.include
(Behavioral_Elements.Use_Cases.Include)* >
<!ELEMENT Behavioral_Elements.Use_Cases.UseCase.include2
(Behavioral_Elements.Use_Cases.Include)* >
<!ELEMENT Behavioral_Elements.Use_Cases.UseCase.extensionPoint
(Behavioral_Elements.Use_Cases.ExtensionPoint)* >
<!ELEMENT Behavioral_Elements.Use_Cases.UseCase
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.GeneralizableElement.isRoot?,
Foundation.Core.GeneralizableElement.isLeaf?,
Foundation.Core.GeneralizableElement.isAbstract?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
6-242
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.GeneralizableElement.generalization*,
Foundation.Core.GeneralizableElement.specialization*,
Foundation.Core.Classifier.participant*,
Foundation.Core.Classifier.powertypeRange*,
Foundation.Core.Classifier.instance*,
Foundation.Core.Classifier.createAction*,
Foundation.Core.Classifier.classifierRole*,
Foundation.Core.Classifier.collaboration*,
Foundation.Core.Classifier.classifierInState*,
Foundation.Core.Classifier.objectFlowState*,
Behavioral_Elements.Use_Cases.UseCase.extend2*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-243
6
Behavioral_Elements.Use_Cases.UseCase.extend*,
Behavioral_Elements.Use_Cases.UseCase.include*,
Behavioral_Elements.Use_Cases.UseCase.include2*,
Behavioral_Elements.Use_Cases.UseCase.extensionPoint*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Foundation.Core.Namespace.ownedElement*,
Foundation.Core.Classifier.feature*)?
>
<!ATTLIST Behavioral_Elements.Use_Cases.UseCase
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Actor
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.Use_Cases.Actor
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.GeneralizableElement.isRoot?,
Foundation.Core.GeneralizableElement.isLeaf?,
6-244
OMG-UML V1.3
March 2000
6
Foundation.Core.GeneralizableElement.isAbstract?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.GeneralizableElement.generalization*,
Foundation.Core.GeneralizableElement.specialization*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-245
6
Foundation.Core.Classifier.participant*,
Foundation.Core.Classifier.powertypeRange*,
Foundation.Core.Classifier.instance*,
Foundation.Core.Classifier.createAction*,
Foundation.Core.Classifier.classifierRole*,
Foundation.Core.Classifier.collaboration*,
Foundation.Core.Classifier.classifierInState*,
Foundation.Core.Classifier.objectFlowState*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Foundation.Core.Namespace.ownedElement*,
Foundation.Core.Classifier.feature*)?
>
<!ATTLIST Behavioral_Elements.Use_Cases.Actor
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: UseCaseInstance
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.Use_Cases.UseCaseInstance
(Foundation.Core.ModelElement.name?,
6-246
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.Common_Behavior.Instance.classifier*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-247
6
Behavioral_Elements.Common_Behavior.Instance.attributeLink*,
Behavioral_Elements.Common_Behavior.Instance.linkEnd*,
Behavioral_Elements.Common_Behavior.Instance.stimulus1*,
Behavioral_Elements.Common_Behavior.Instance.stimulus3*,
Behavioral_Elements.Common_Behavior.Instance.componentInstance?,
Behavioral_Elements.Common_Behavior.Instance.stimulus2*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.Common_Behavior.Instance.slot*)?
>
<!ATTLIST Behavioral_Elements.Use_Cases.UseCaseInstance
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Extend
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.Use_Cases.Extend.condition
(Foundation.Data_Types.BooleanExpression) >
<!ELEMENT Behavioral_Elements.Use_Cases.Extend.base
(Behavioral_Elements.Use_Cases.UseCase)? >
6-248
OMG-UML V1.3
March 2000
6
<!ELEMENT Behavioral_Elements.Use_Cases.Extend.extension
(Behavioral_Elements.Use_Cases.UseCase)? >
<!ELEMENT Behavioral_Elements.Use_Cases.Extend.extensionPoint
(Behavioral_Elements.Use_Cases.ExtensionPoint)* >
<!ELEMENT Behavioral_Elements.Use_Cases.Extend
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Behavioral_Elements.Use_Cases.Extend.condition?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-249
6
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.Use_Cases.Extend.base?,
Behavioral_Elements.Use_Cases.Extend.extension?,
Behavioral_Elements.Use_Cases.Extend.extensionPoint*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*)?
>
<!ATTLIST Behavioral_Elements.Use_Cases.Extend
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Include
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.Use_Cases.Include.addition
(Behavioral_Elements.Use_Cases.UseCase)? >
6-250
OMG-UML V1.3
March 2000
6
<!ELEMENT Behavioral_Elements.Use_Cases.Include.base
(Behavioral_Elements.Use_Cases.UseCase)? >
<!ELEMENT Behavioral_Elements.Use_Cases.Include
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-251
6
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.Use_Cases.Include.addition?,
Behavioral_Elements.Use_Cases.Include.base?,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*)?
>
<!ATTLIST Behavioral_Elements.Use_Cases.Include
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: ExtensionPoint
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.Use_Cases.ExtensionPoint.location
(#PCDATA |
XMI.reference)*
>
<!ELEMENT Behavioral_Elements.Use_Cases.ExtensionPoint.useCase
(Behavioral_Elements.Use_Cases.UseCase)? >
<!ELEMENT Behavioral_Elements.Use_Cases.ExtensionPoint.extend
(Behavioral_Elements.Use_Cases.Extend)* >
6-252
OMG-UML V1.3
March 2000
6
<!ELEMENT Behavioral_Elements.Use_Cases.ExtensionPoint
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Behavioral_Elements.Use_Cases.ExtensionPoint.location?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-253
6
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.Use_Cases.ExtensionPoint.useCase?,
Behavioral_Elements.Use_Cases.ExtensionPoint.extend*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*)?
>
<!ATTLIST Behavioral_Elements.Use_Cases.ExtensionPoint
%XMI.element.att;
%XMI.link.att;
>
<!ELEMENT Behavioral_Elements.Use_Cases
((Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
Behavioral_Elements.Use_Cases.UseCaseInstance |
Behavioral_Elements.Use_Cases.Extend |
Behavioral_Elements.Use_Cases.Include |
Behavioral_Elements.Use_Cases.ExtensionPoint)*)
>
<!ATTLIST Behavioral_Elements.Use_Cases
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
6-254
<!--
-->
<!-- METAMODEL PACKAGE: State_Machines
-->
OMG-UML V1.3
March 2000
6
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.State_Machines.State.entry
(Behavioral_Elements.Common_Behavior.Action |
Behavioral_Elements.Common_Behavior.CallAction |
Behavioral_Elements.Common_Behavior.SendAction |
Behavioral_Elements.Common_Behavior.ActionSequence |
Behavioral_Elements.Common_Behavior.ReturnAction |
Behavioral_Elements.Common_Behavior.TerminateAction |
Behavioral_Elements.Common_Behavior.DestroyAction |
Behavioral_Elements.Common_Behavior.CreateAction |
Behavioral_Elements.Common_Behavior.UninterpretedAction)?
>
<!ELEMENT Behavioral_Elements.State_Machines.State.exit
(Behavioral_Elements.Common_Behavior.Action |
Behavioral_Elements.Common_Behavior.CallAction |
Behavioral_Elements.Common_Behavior.SendAction |
Behavioral_Elements.Common_Behavior.ActionSequence |
Behavioral_Elements.Common_Behavior.ReturnAction |
Behavioral_Elements.Common_Behavior.TerminateAction |
Behavioral_Elements.Common_Behavior.DestroyAction |
Behavioral_Elements.Common_Behavior.CreateAction |
Behavioral_Elements.Common_Behavior.UninterpretedAction)?
OMG-UML V1.3
UML XMI DTD
March 2000
6-255
6
>
<!ELEMENT Behavioral_Elements.State_Machines.Event.parameter
(Foundation.Core.Parameter)* >
<!ELEMENT Behavioral_Elements.State_Machines.Transition.guard
(Behavioral_Elements.State_Machines.Guard)? >
<!ELEMENT Behavioral_Elements.State_Machines.StateMachine.top
(Behavioral_Elements.State_Machines.State |
Behavioral_Elements.State_Machines.CompositeState |
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState |
Behavioral_Elements.State_Machines.SimpleState |
Behavioral_Elements.Activity_Graphs.ObjectFlowState |
Behavioral_Elements.Activity_Graphs.ActionState |
Behavioral_Elements.Activity_Graphs.CallState |
Behavioral_Elements.State_Machines.FinalState)?
>
<!ELEMENT
Behavioral_Elements.State_Machines.CompositeState.subvertex
(Behavioral_Elements.State_Machines.StateVertex |
Behavioral_Elements.State_Machines.Pseudostate |
Behavioral_Elements.State_Machines.SynchState |
Behavioral_Elements.State_Machines.StubState |
Behavioral_Elements.State_Machines.State |
6-256
OMG-UML V1.3
March 2000
6
Behavioral_Elements.State_Machines.CompositeState |
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState |
Behavioral_Elements.State_Machines.SimpleState |
Behavioral_Elements.Activity_Graphs.ObjectFlowState |
Behavioral_Elements.Activity_Graphs.ActionState |
Behavioral_Elements.Activity_Graphs.CallState |
Behavioral_Elements.State_Machines.FinalState)*
>
<!ELEMENT Behavioral_Elements.State_Machines.Transition.effect
(Behavioral_Elements.Common_Behavior.Action |
Behavioral_Elements.Common_Behavior.CallAction |
Behavioral_Elements.Common_Behavior.SendAction |
Behavioral_Elements.Common_Behavior.ActionSequence |
Behavioral_Elements.Common_Behavior.ReturnAction |
Behavioral_Elements.Common_Behavior.TerminateAction |
Behavioral_Elements.Common_Behavior.DestroyAction |
Behavioral_Elements.Common_Behavior.CreateAction |
Behavioral_Elements.Common_Behavior.UninterpretedAction)?
>
<!ELEMENT
Behavioral_Elements.State_Machines.State.internalTransition
(Behavioral_Elements.State_Machines.Transition)* >
OMG-UML V1.3
UML XMI DTD
March 2000
6-257
6
<!ELEMENT
Behavioral_Elements.State_Machines.StateMachine.transitions
(Behavioral_Elements.State_Machines.Transition)* >
<!ELEMENT Behavioral_Elements.State_Machines.State.doActivity
(Behavioral_Elements.Common_Behavior.Action |
Behavioral_Elements.Common_Behavior.CallAction |
Behavioral_Elements.Common_Behavior.SendAction |
Behavioral_Elements.Common_Behavior.ActionSequence |
Behavioral_Elements.Common_Behavior.ReturnAction |
Behavioral_Elements.Common_Behavior.TerminateAction |
Behavioral_Elements.Common_Behavior.DestroyAction |
Behavioral_Elements.Common_Behavior.CreateAction |
Behavioral_Elements.Common_Behavior.UninterpretedAction)?
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: StateMachine
-->
<!-_______________________________________________________________
-->
<!ELEMENT
Behavioral_Elements.State_Machines.StateMachine.context
(Foundation.Core.ModelElement |
Foundation.Core.Comment |
Foundation.Core.Relationship |
6-258
OMG-UML V1.3
March 2000
6
Behavioral_Elements.Use_Cases.Extend |
Behavioral_Elements.Use_Cases.Include |
Foundation.Core.Generalization |
Foundation.Core.Flow |
Foundation.Core.Association |
Foundation.Core.AssociationClass |
Behavioral_Elements.Collaborations.AssociationRole |
Foundation.Core.Dependency |
Foundation.Core.Abstraction |
Foundation.Core.Usage |
Foundation.Core.Binding |
Foundation.Core.Permission |
Foundation.Extension_Mechanisms.TaggedValue |
Behavioral_Elements.Common_Behavior.Instance |
Behavioral_Elements.Common_Behavior.Object |
Behavioral_Elements.Common_Behavior.LinkObject |
Behavioral_Elements.Common_Behavior.DataValue |
Behavioral_Elements.Common_Behavior.ComponentInstance |
Behavioral_Elements.Common_Behavior.NodeInstance |
Behavioral_Elements.Use_Cases.UseCaseInstance |
Behavioral_Elements.Common_Behavior.Action |
Behavioral_Elements.Common_Behavior.CallAction |
OMG-UML V1.3
UML XMI DTD
March 2000
6-259
6
Behavioral_Elements.Common_Behavior.SendAction |
Behavioral_Elements.Common_Behavior.ActionSequence |
Behavioral_Elements.Common_Behavior.ReturnAction |
Behavioral_Elements.Common_Behavior.TerminateAction |
Behavioral_Elements.Common_Behavior.DestroyAction |
Behavioral_Elements.Common_Behavior.CreateAction |
Behavioral_Elements.Common_Behavior.UninterpretedAction |
Behavioral_Elements.Common_Behavior.AttributeLink |
Behavioral_Elements.Common_Behavior.Argument |
Behavioral_Elements.Common_Behavior.Link |
Behavioral_Elements.Common_Behavior.LinkEnd |
Behavioral_Elements.Common_Behavior.Stimulus |
Behavioral_Elements.Use_Cases.ExtensionPoint |
Behavioral_Elements.State_Machines.StateMachine |
Behavioral_Elements.Activity_Graphs.ActivityGraph |
Behavioral_Elements.State_Machines.Event |
Behavioral_Elements.State_Machines.TimeEvent |
Behavioral_Elements.State_Machines.CallEvent |
Behavioral_Elements.State_Machines.SignalEvent |
Behavioral_Elements.State_Machines.ChangeEvent |
Behavioral_Elements.State_Machines.Transition |
Behavioral_Elements.State_Machines.StateVertex |
6-260
OMG-UML V1.3
March 2000
6
Behavioral_Elements.State_Machines.Pseudostate |
Behavioral_Elements.State_Machines.SynchState |
Behavioral_Elements.State_Machines.StubState |
Behavioral_Elements.State_Machines.State |
Behavioral_Elements.State_Machines.CompositeState |
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState |
Behavioral_Elements.State_Machines.SimpleState |
Behavioral_Elements.Activity_Graphs.ObjectFlowState |
Behavioral_Elements.Activity_Graphs.ActionState |
Behavioral_Elements.Activity_Graphs.CallState |
Behavioral_Elements.State_Machines.FinalState |
Behavioral_Elements.State_Machines.Guard |
Behavioral_Elements.Collaborations.Message |
Behavioral_Elements.Collaborations.Interaction |
Behavioral_Elements.Activity_Graphs.Partition |
Foundation.Core.Feature |
Foundation.Core.BehavioralFeature |
Behavioral_Elements.Common_Behavior.Reception |
Foundation.Core.Operation |
Foundation.Core.Method |
Foundation.Core.StructuralFeature |
OMG-UML V1.3
UML XMI DTD
March 2000
6-261
6
Foundation.Core.Attribute |
Foundation.Core.GeneralizableElement |
Foundation.Extension_Mechanisms.Stereotype |
Behavioral_Elements.Collaborations.Collaboration |
Model_Management.Package |
Model_Management.Subsystem |
Model_Management.Model |
Foundation.Core.Classifier |
Foundation.Core.Class |
Foundation.Core.DataType |
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node |
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Foundation.Core.AssociationEnd |
Behavioral_Elements.Collaborations.AssociationEndRole |
Foundation.Core.Namespace |
6-262
OMG-UML V1.3
March 2000
6
Foundation.Core.Parameter |
Foundation.Core.Constraint)?
>
<!ELEMENT
Behavioral_Elements.State_Machines.StateMachine.subMachineState
(Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState)*
>
<!ELEMENT Behavioral_Elements.State_Machines.StateMachine
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-263
6
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.State_Machines.StateMachine.context?,
Behavioral_Elements.State_Machines.StateMachine.subMachineState*
,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.State_Machines.StateMachine.top?,
Behavioral_Elements.State_Machines.StateMachine.transitions*)?
>
<!ATTLIST Behavioral_Elements.State_Machines.StateMachine
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Event
-->
<!-_______________________________________________________________
-->
6-264
OMG-UML V1.3
March 2000
6
<!ELEMENT Behavioral_Elements.State_Machines.Event.state
(Behavioral_Elements.State_Machines.State |
Behavioral_Elements.State_Machines.CompositeState |
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState |
Behavioral_Elements.State_Machines.SimpleState |
Behavioral_Elements.Activity_Graphs.ObjectFlowState |
Behavioral_Elements.Activity_Graphs.ActionState |
Behavioral_Elements.Activity_Graphs.CallState |
Behavioral_Elements.State_Machines.FinalState)*
>
<!ELEMENT Behavioral_Elements.State_Machines.Event.transition
(Behavioral_Elements.State_Machines.Transition)* >
<!ELEMENT Behavioral_Elements.State_Machines.Event
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-265
6
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.State_Machines.Event.state*,
Behavioral_Elements.State_Machines.Event.transition*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.State_Machines.Event.parameter*)?
>
<!ATTLIST Behavioral_Elements.State_Machines.Event
%XMI.element.att;
%XMI.link.att;
>
6-266
OMG-UML V1.3
March 2000
6
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: State
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.State_Machines.State.stateMachine
(Behavioral_Elements.State_Machines.StateMachine |
Behavioral_Elements.Activity_Graphs.ActivityGraph)?
>
<!ELEMENT
Behavioral_Elements.State_Machines.State.deferrableEvent
(Behavioral_Elements.State_Machines.Event |
Behavioral_Elements.State_Machines.TimeEvent |
Behavioral_Elements.State_Machines.CallEvent |
Behavioral_Elements.State_Machines.SignalEvent |
Behavioral_Elements.State_Machines.ChangeEvent)*
>
<!ELEMENT
Behavioral_Elements.State_Machines.State.classifierInState
(Behavioral_Elements.Activity_Graphs.ClassifierInState)* >
<!ELEMENT Behavioral_Elements.State_Machines.State
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
XMI.extension*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-267
6
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.State_Machines.StateVertex.container?,
Behavioral_Elements.State_Machines.StateVertex.outgoing*,
Behavioral_Elements.State_Machines.StateVertex.incoming*,
Behavioral_Elements.State_Machines.State.stateMachine?,
6-268
OMG-UML V1.3
March 2000
6
Behavioral_Elements.State_Machines.State.deferrableEvent*,
Behavioral_Elements.State_Machines.State.classifierInState*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.State_Machines.State.entry?,
Behavioral_Elements.State_Machines.State.exit?,
Behavioral_Elements.State_Machines.State.internalTransition*,
Behavioral_Elements.State_Machines.State.doActivity?)?
>
<!ATTLIST Behavioral_Elements.State_Machines.State
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: TimeEvent
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.State_Machines.TimeEvent.when
(Foundation.Data_Types.TimeExpression) >
<!ELEMENT Behavioral_Elements.State_Machines.TimeEvent
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
OMG-UML V1.3
UML XMI DTD
March 2000
6-269
6
Behavioral_Elements.State_Machines.TimeEvent.when?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.State_Machines.Event.state*,
Behavioral_Elements.State_Machines.Event.transition*,
6-270
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.State_Machines.Event.parameter*)?
>
<!ATTLIST Behavioral_Elements.State_Machines.TimeEvent
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: CallEvent
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.State_Machines.CallEvent.operation
(Foundation.Core.Operation)? >
<!ELEMENT Behavioral_Elements.State_Machines.CallEvent
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-271
6
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.State_Machines.Event.state*,
Behavioral_Elements.State_Machines.Event.transition*,
Behavioral_Elements.State_Machines.CallEvent.operation?,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.State_Machines.Event.parameter*)?
>
<!ATTLIST Behavioral_Elements.State_Machines.CallEvent
%XMI.element.att;
6-272
OMG-UML V1.3
March 2000
6
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: SignalEvent
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.State_Machines.SignalEvent.signal
(Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception)?
>
<!ELEMENT Behavioral_Elements.State_Machines.SignalEvent
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-273
6
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.State_Machines.Event.state*,
Behavioral_Elements.State_Machines.Event.transition*,
Behavioral_Elements.State_Machines.SignalEvent.signal?,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.State_Machines.Event.parameter*)?
>
<!ATTLIST Behavioral_Elements.State_Machines.SignalEvent
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
6-274
-->
OMG-UML V1.3
March 2000
6
<!-- METAMODEL CLASS: Transition
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.State_Machines.Transition.state
(Behavioral_Elements.State_Machines.State |
Behavioral_Elements.State_Machines.CompositeState |
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState |
Behavioral_Elements.State_Machines.SimpleState |
Behavioral_Elements.Activity_Graphs.ObjectFlowState |
Behavioral_Elements.Activity_Graphs.ActionState |
Behavioral_Elements.Activity_Graphs.CallState |
Behavioral_Elements.State_Machines.FinalState)?
>
<!ELEMENT Behavioral_Elements.State_Machines.Transition.trigger
(Behavioral_Elements.State_Machines.Event |
Behavioral_Elements.State_Machines.TimeEvent |
Behavioral_Elements.State_Machines.CallEvent |
Behavioral_Elements.State_Machines.SignalEvent |
Behavioral_Elements.State_Machines.ChangeEvent)?
>
<!ELEMENT
Behavioral_Elements.State_Machines.Transition.stateMachine
(Behavioral_Elements.State_Machines.StateMachine |
Behavioral_Elements.Activity_Graphs.ActivityGraph)?
OMG-UML V1.3
UML XMI DTD
March 2000
6-275
6
>
<!ELEMENT Behavioral_Elements.State_Machines.Transition.source
(Behavioral_Elements.State_Machines.StateVertex |
Behavioral_Elements.State_Machines.Pseudostate |
Behavioral_Elements.State_Machines.SynchState |
Behavioral_Elements.State_Machines.StubState |
Behavioral_Elements.State_Machines.State |
Behavioral_Elements.State_Machines.CompositeState |
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState |
Behavioral_Elements.State_Machines.SimpleState |
Behavioral_Elements.Activity_Graphs.ObjectFlowState |
Behavioral_Elements.Activity_Graphs.ActionState |
Behavioral_Elements.Activity_Graphs.CallState |
Behavioral_Elements.State_Machines.FinalState)?
>
<!ELEMENT Behavioral_Elements.State_Machines.Transition.target
(Behavioral_Elements.State_Machines.StateVertex |
Behavioral_Elements.State_Machines.Pseudostate |
Behavioral_Elements.State_Machines.SynchState |
Behavioral_Elements.State_Machines.StubState |
Behavioral_Elements.State_Machines.State |
Behavioral_Elements.State_Machines.CompositeState |
6-276
OMG-UML V1.3
March 2000
6
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState |
Behavioral_Elements.State_Machines.SimpleState |
Behavioral_Elements.Activity_Graphs.ObjectFlowState |
Behavioral_Elements.Activity_Graphs.ActionState |
Behavioral_Elements.Activity_Graphs.CallState |
Behavioral_Elements.State_Machines.FinalState)?
>
<!ELEMENT Behavioral_Elements.State_Machines.Transition
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-277
6
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.State_Machines.Transition.state?,
Behavioral_Elements.State_Machines.Transition.trigger?,
Behavioral_Elements.State_Machines.Transition.stateMachine?,
Behavioral_Elements.State_Machines.Transition.source?,
Behavioral_Elements.State_Machines.Transition.target?,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.State_Machines.Transition.guard?,
Behavioral_Elements.State_Machines.Transition.effect?)?
>
<!ATTLIST Behavioral_Elements.State_Machines.Transition
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
6-278
OMG-UML V1.3
March 2000
6
<!--
-->
<!-- METAMODEL CLASS: StateVertex
-->
<!-_______________________________________________________________
-->
<!ELEMENT
Behavioral_Elements.State_Machines.StateVertex.container
(Behavioral_Elements.State_Machines.CompositeState |
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState)?
>
<!ELEMENT
Behavioral_Elements.State_Machines.StateVertex.outgoing
(Behavioral_Elements.State_Machines.Transition)* >
<!ELEMENT
Behavioral_Elements.State_Machines.StateVertex.incoming
(Behavioral_Elements.State_Machines.Transition)* >
<!ELEMENT Behavioral_Elements.State_Machines.StateVertex
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-279
6
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.State_Machines.StateVertex.container?,
Behavioral_Elements.State_Machines.StateVertex.outgoing*,
Behavioral_Elements.State_Machines.StateVertex.incoming*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*)?
>
<!ATTLIST Behavioral_Elements.State_Machines.StateVertex
%XMI.element.att;
%XMI.link.att;
>
6-280
OMG-UML V1.3
March 2000
6
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: CompositeState
-->
<!-_______________________________________________________________
-->
<!ELEMENT
Behavioral_Elements.State_Machines.CompositeState.isConcurrent
EMPTY >
<!ATTLIST
Behavioral_Elements.State_Machines.CompositeState.isConcurrent
xmi.value ( true | false ) #REQUIRED
>
<!ELEMENT Behavioral_Elements.State_Machines.CompositeState
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Behavioral_Elements.State_Machines.CompositeState.isConcurrent?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-281
6
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.State_Machines.StateVertex.container?,
Behavioral_Elements.State_Machines.StateVertex.outgoing*,
Behavioral_Elements.State_Machines.StateVertex.incoming*,
Behavioral_Elements.State_Machines.State.stateMachine?,
Behavioral_Elements.State_Machines.State.deferrableEvent*,
Behavioral_Elements.State_Machines.State.classifierInState*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.State_Machines.State.entry?,
Behavioral_Elements.State_Machines.State.exit?,
Behavioral_Elements.State_Machines.State.internalTransition*,
6-282
OMG-UML V1.3
March 2000
6
Behavioral_Elements.State_Machines.State.doActivity?,
Behavioral_Elements.State_Machines.CompositeState.subvertex*)?
>
<!ATTLIST Behavioral_Elements.State_Machines.CompositeState
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: ChangeEvent
-->
<!-_______________________________________________________________
-->
<!ELEMENT
Behavioral_Elements.State_Machines.ChangeEvent.changeExpression
(Foundation.Data_Types.BooleanExpression) >
<!ELEMENT Behavioral_Elements.State_Machines.ChangeEvent
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Behavioral_Elements.State_Machines.ChangeEvent.changeExpression?
,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-283
6
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.State_Machines.Event.state*,
Behavioral_Elements.State_Machines.Event.transition*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.State_Machines.Event.parameter*)?
>
<!ATTLIST Behavioral_Elements.State_Machines.ChangeEvent
%XMI.element.att;
6-284
OMG-UML V1.3
March 2000
6
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Guard
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.State_Machines.Guard.expression
(Foundation.Data_Types.BooleanExpression) >
<!ELEMENT Behavioral_Elements.State_Machines.Guard.transition
(Behavioral_Elements.State_Machines.Transition)? >
<!ELEMENT Behavioral_Elements.State_Machines.Guard
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Behavioral_Elements.State_Machines.Guard.expression?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-285
6
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.State_Machines.Guard.transition?,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*)?
>
<!ATTLIST Behavioral_Elements.State_Machines.Guard
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
6-286
<!--
-->
<!-- METAMODEL CLASS: Pseudostate
-->
OMG-UML V1.3
March 2000
6
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.State_Machines.Pseudostate.kind
EMPTY >
<!ATTLIST Behavioral_Elements.State_Machines.Pseudostate.kind
xmi.value ( initial | deepHistory | shallowHistory |
join | fork | branch | junction | final ) #REQUIRED
>
<!ELEMENT Behavioral_Elements.State_Machines.Pseudostate
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Behavioral_Elements.State_Machines.Pseudostate.kind?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-287
6
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.State_Machines.StateVertex.container?,
Behavioral_Elements.State_Machines.StateVertex.outgoing*,
Behavioral_Elements.State_Machines.StateVertex.incoming*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*)?
>
<!ATTLIST Behavioral_Elements.State_Machines.Pseudostate
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: SimpleState
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.State_Machines.SimpleState
(Foundation.Core.ModelElement.name?,
6-288
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.State_Machines.StateVertex.container?,
OMG-UML V1.3
UML XMI DTD
March 2000
6-289
6
Behavioral_Elements.State_Machines.StateVertex.outgoing*,
Behavioral_Elements.State_Machines.StateVertex.incoming*,
Behavioral_Elements.State_Machines.State.stateMachine?,
Behavioral_Elements.State_Machines.State.deferrableEvent*,
Behavioral_Elements.State_Machines.State.classifierInState*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.State_Machines.State.entry?,
Behavioral_Elements.State_Machines.State.exit?,
Behavioral_Elements.State_Machines.State.internalTransition*,
Behavioral_Elements.State_Machines.State.doActivity?)?
>
<!ATTLIST Behavioral_Elements.State_Machines.SimpleState
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: SubmachineState
-->
<!-_______________________________________________________________
-->
<!ELEMENT
Behavioral_Elements.State_Machines.SubmachineState.submachine
(Behavioral_Elements.State_Machines.StateMachine |
6-290
OMG-UML V1.3
March 2000
6
Behavioral_Elements.Activity_Graphs.ActivityGraph)?
>
<!ELEMENT Behavioral_Elements.State_Machines.SubmachineState
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Behavioral_Elements.State_Machines.CompositeState.isConcurrent?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-291
6
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.State_Machines.StateVertex.container?,
Behavioral_Elements.State_Machines.StateVertex.outgoing*,
Behavioral_Elements.State_Machines.StateVertex.incoming*,
Behavioral_Elements.State_Machines.State.stateMachine?,
Behavioral_Elements.State_Machines.State.deferrableEvent*,
Behavioral_Elements.State_Machines.State.classifierInState*,
Behavioral_Elements.State_Machines.SubmachineState.submachine?,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.State_Machines.State.entry?,
Behavioral_Elements.State_Machines.State.exit?,
Behavioral_Elements.State_Machines.State.internalTransition*,
Behavioral_Elements.State_Machines.State.doActivity?,
Behavioral_Elements.State_Machines.CompositeState.subvertex*)?
>
<!ATTLIST Behavioral_Elements.State_Machines.SubmachineState
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
6-292
OMG-UML V1.3
March 2000
6
<!--
-->
<!-- METAMODEL CLASS: SynchState
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.State_Machines.SynchState.bound
(#PCDATA |
XMI.reference)*
>
<!ELEMENT Behavioral_Elements.State_Machines.SynchState
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Behavioral_Elements.State_Machines.SynchState.bound?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-293
6
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.State_Machines.StateVertex.container?,
Behavioral_Elements.State_Machines.StateVertex.outgoing*,
Behavioral_Elements.State_Machines.StateVertex.incoming*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*)?
>
<!ATTLIST Behavioral_Elements.State_Machines.SynchState
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: StubState
-->
<!-_______________________________________________________________
-->
6-294
OMG-UML V1.3
March 2000
6
<!ELEMENT
Behavioral_Elements.State_Machines.StubState.referenceState
(#PCDATA |
XMI.reference)*
>
<!ELEMENT Behavioral_Elements.State_Machines.StubState
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Behavioral_Elements.State_Machines.StubState.referenceState?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
OMG-UML V1.3
UML XMI DTD
March 2000
6-295
6
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.State_Machines.StateVertex.container?,
Behavioral_Elements.State_Machines.StateVertex.outgoing*,
Behavioral_Elements.State_Machines.StateVertex.incoming*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*)?
>
<!ATTLIST Behavioral_Elements.State_Machines.StubState
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: FinalState
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.State_Machines.FinalState
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
6-296
OMG-UML V1.3
March 2000
6
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.State_Machines.StateVertex.container?,
Behavioral_Elements.State_Machines.StateVertex.outgoing*,
Behavioral_Elements.State_Machines.StateVertex.incoming*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-297
6
Behavioral_Elements.State_Machines.State.stateMachine?,
Behavioral_Elements.State_Machines.State.deferrableEvent*,
Behavioral_Elements.State_Machines.State.classifierInState*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.State_Machines.State.entry?,
Behavioral_Elements.State_Machines.State.exit?,
Behavioral_Elements.State_Machines.State.internalTransition*,
>
<!ATTLIST Behavioral_Elements.State_Machines.FinalState
%XMI.element.att;
%XMI.link.att;
>
<!ELEMENT Behavioral_Elements.State_Machines
((Behavioral_Elements.State_Machines.StateMachine |
Behavioral_Elements.State_Machines.Event |
Behavioral_Elements.State_Machines.State |
Behavioral_Elements.State_Machines.TimeEvent |
Behavioral_Elements.State_Machines.CallEvent |
Behavioral_Elements.State_Machines.SignalEvent |
Behavioral_Elements.State_Machines.Transition |
Behavioral_Elements.State_Machines.StateVertex |
Behavioral_Elements.State_Machines.CompositeState |
Behavioral_Elements.State_Machines.ChangeEvent |
6-298
OMG-UML V1.3
March 2000
6
Behavioral_Elements.State_Machines.Guard |
Behavioral_Elements.State_Machines.Pseudostate |
Behavioral_Elements.State_Machines.SimpleState |
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.State_Machines.SynchState |
Behavioral_Elements.State_Machines.StubState |
Behavioral_Elements.State_Machines.FinalState)*)
>
<!ATTLIST Behavioral_Elements.State_Machines
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL PACKAGE: Collaborations
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.Collaborations.Interaction.message
(Behavioral_Elements.Collaborations.Message)* >
<!ELEMENT
Behavioral_Elements.Collaborations.Collaboration.interaction
(Behavioral_Elements.Collaborations.Interaction)* >
<!-_______________________________________________________________
-->
OMG-UML V1.3
UML XMI DTD
March 2000
6-299
6
<!--
-->
<!-- METAMODEL CLASS: Collaboration
-->
<!-_______________________________________________________________
-->
<!ELEMENT
Behavioral_Elements.Collaborations.Collaboration.representedClas
sifier (Foundation.Core.Classifier |
Foundation.Core.Class |
Foundation.Core.AssociationClass |
Foundation.Core.DataType |
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node |
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Model_Management.Subsystem)?
>
<!ELEMENT
Behavioral_Elements.Collaborations.Collaboration.representedOper
ation
(Foundation.Core.Operation)? >
6-300
OMG-UML V1.3
March 2000
6
<!ELEMENT
Behavioral_Elements.Collaborations.Collaboration.constrainingEle
ment (Foundation.Core.ModelElement |
Foundation.Core.Comment |
Foundation.Core.Relationship |
Behavioral_Elements.Use_Cases.Extend |
Behavioral_Elements.Use_Cases.Include |
Foundation.Core.Generalization |
Foundation.Core.Flow |
Foundation.Core.Association |
Foundation.Core.AssociationClass |
Behavioral_Elements.Collaborations.AssociationRole |
Foundation.Core.Dependency |
Foundation.Core.Abstraction |
Foundation.Core.Usage |
Foundation.Core.Binding |
Foundation.Core.Permission |
Foundation.Extension_Mechanisms.TaggedValue |
Behavioral_Elements.Common_Behavior.Instance |
Behavioral_Elements.Common_Behavior.Object |
Behavioral_Elements.Common_Behavior.LinkObject |
Behavioral_Elements.Common_Behavior.DataValue |
Behavioral_Elements.Common_Behavior.ComponentInstance |
OMG-UML V1.3
UML XMI DTD
March 2000
6-301
6
Behavioral_Elements.Common_Behavior.NodeInstance |
Behavioral_Elements.Use_Cases.UseCaseInstance |
Behavioral_Elements.Common_Behavior.Action |
Behavioral_Elements.Common_Behavior.CallAction |
Behavioral_Elements.Common_Behavior.SendAction |
Behavioral_Elements.Common_Behavior.ActionSequence |
Behavioral_Elements.Common_Behavior.ReturnAction |
Behavioral_Elements.Common_Behavior.TerminateAction |
Behavioral_Elements.Common_Behavior.DestroyAction |
Behavioral_Elements.Common_Behavior.CreateAction |
Behavioral_Elements.Common_Behavior.UninterpretedAction |
Behavioral_Elements.Common_Behavior.AttributeLink |
Behavioral_Elements.Common_Behavior.Argument |
Behavioral_Elements.Common_Behavior.Link |
Behavioral_Elements.Common_Behavior.LinkEnd |
Behavioral_Elements.Common_Behavior.Stimulus |
Behavioral_Elements.Use_Cases.ExtensionPoint |
Behavioral_Elements.State_Machines.StateMachine |
Behavioral_Elements.Activity_Graphs.ActivityGraph |
Behavioral_Elements.State_Machines.Event |
Behavioral_Elements.State_Machines.TimeEvent |
Behavioral_Elements.State_Machines.CallEvent |
6-302
OMG-UML V1.3
March 2000
6
Behavioral_Elements.State_Machines.SignalEvent |
Behavioral_Elements.State_Machines.ChangeEvent |
Behavioral_Elements.State_Machines.Transition |
Behavioral_Elements.State_Machines.StateVertex |
Behavioral_Elements.State_Machines.Pseudostate |
Behavioral_Elements.State_Machines.SynchState |
Behavioral_Elements.State_Machines.StubState |
Behavioral_Elements.State_Machines.State |
Behavioral_Elements.State_Machines.CompositeState |
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState |
Behavioral_Elements.State_Machines.SimpleState |
Behavioral_Elements.Activity_Graphs.ObjectFlowState |
Behavioral_Elements.Activity_Graphs.ActionState |
Behavioral_Elements.Activity_Graphs.CallState |
Behavioral_Elements.State_Machines.FinalState |
Behavioral_Elements.State_Machines.Guard |
Behavioral_Elements.Collaborations.Message |
Behavioral_Elements.Collaborations.Interaction |
Behavioral_Elements.Activity_Graphs.Partition |
Foundation.Core.Feature |
Foundation.Core.BehavioralFeature |
OMG-UML V1.3
UML XMI DTD
March 2000
6-303
6
Behavioral_Elements.Common_Behavior.Reception |
Foundation.Core.Operation |
Foundation.Core.Method |
Foundation.Core.StructuralFeature |
Foundation.Core.Attribute |
Foundation.Core.GeneralizableElement |
Foundation.Extension_Mechanisms.Stereotype |
Behavioral_Elements.Collaborations.Collaboration |
Model_Management.Package |
Model_Management.Subsystem |
Model_Management.Model |
Foundation.Core.Classifier |
Foundation.Core.Class |
Foundation.Core.DataType |
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node |
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
Behavioral_Elements.Collaborations.ClassifierRole |
6-304
OMG-UML V1.3
March 2000
6
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Foundation.Core.AssociationEnd |
Behavioral_Elements.Collaborations.AssociationEndRole |
Foundation.Core.Namespace |
Foundation.Core.Parameter |
Foundation.Core.Constraint)*
>
<!ELEMENT Behavioral_Elements.Collaborations.Collaboration
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.GeneralizableElement.isRoot?,
Foundation.Core.GeneralizableElement.isLeaf?,
Foundation.Core.GeneralizableElement.isAbstract?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-305
6
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.GeneralizableElement.generalization*,
Foundation.Core.GeneralizableElement.specialization*,
Behavioral_Elements.Collaborations.Collaboration.representedClas
sifier?,
Behavioral_Elements.Collaborations.Collaboration.representedOper
ation?,
Behavioral_Elements.Collaborations.Collaboration.constrainingEle
ment*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Foundation.Core.Namespace.ownedElement*,
Behavioral_Elements.Collaborations.Collaboration.interaction*)?
>
<!ATTLIST Behavioral_Elements.Collaborations.Collaboration
%XMI.element.att;
6-306
OMG-UML V1.3
March 2000
6
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: ClassifierRole
-->
<!-_______________________________________________________________
-->
<!ELEMENT
Behavioral_Elements.Collaborations.ClassifierRole.multiplicity
(Foundation.Data_Types.Multiplicity) >
<!ELEMENT Behavioral_Elements.Collaborations.ClassifierRole.base
(Foundation.Core.Classifier |
Foundation.Core.Class |
Foundation.Core.AssociationClass |
Foundation.Core.DataType |
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node |
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
Behavioral_Elements.Collaborations.ClassifierRole |
OMG-UML V1.3
UML XMI DTD
March 2000
6-307
6
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Model_Management.Subsystem)*
>
<!ELEMENT
Behavioral_Elements.Collaborations.ClassifierRole.associationEnd
Role
(Behavioral_Elements.Collaborations.AssociationEndRole)* >
<!ELEMENT
Behavioral_Elements.Collaborations.ClassifierRole.collaboration
(Behavioral_Elements.Collaborations.Collaboration)? >
<!ELEMENT
Behavioral_Elements.Collaborations.ClassifierRole.availableFeatu
re (Foundation.Core.Feature |
Foundation.Core.BehavioralFeature |
Behavioral_Elements.Common_Behavior.Reception |
Foundation.Core.Operation |
Foundation.Core.Method |
Foundation.Core.StructuralFeature |
Foundation.Core.Attribute)*
>
<!ELEMENT
Behavioral_Elements.Collaborations.ClassifierRole.message2
(Behavioral_Elements.Collaborations.Message)* >
<!ELEMENT
Behavioral_Elements.Collaborations.ClassifierRole.message1
(Behavioral_Elements.Collaborations.Message)* >
6-308
OMG-UML V1.3
March 2000
6
<!ELEMENT
Behavioral_Elements.Collaborations.ClassifierRole.availableConte
nts (Foundation.Core.ModelElement |
Foundation.Core.Comment |
Foundation.Core.Relationship |
Behavioral_Elements.Use_Cases.Extend |
Behavioral_Elements.Use_Cases.Include |
Foundation.Core.Generalization |
Foundation.Core.Flow |
Foundation.Core.Association |
Foundation.Core.AssociationClass |
Behavioral_Elements.Collaborations.AssociationRole |
Foundation.Core.Dependency |
Foundation.Core.Abstraction |
Foundation.Core.Usage |
Foundation.Core.Binding |
Foundation.Core.Permission |
Foundation.Extension_Mechanisms.TaggedValue |
Behavioral_Elements.Common_Behavior.Instance |
Behavioral_Elements.Common_Behavior.Object |
Behavioral_Elements.Common_Behavior.LinkObject |
Behavioral_Elements.Common_Behavior.DataValue |
Behavioral_Elements.Common_Behavior.ComponentInstance |
OMG-UML V1.3
UML XMI DTD
March 2000
6-309
6
Behavioral_Elements.Common_Behavior.NodeInstance |
Behavioral_Elements.Use_Cases.UseCaseInstance |
Behavioral_Elements.Common_Behavior.Action |
Behavioral_Elements.Common_Behavior.CallAction |
Behavioral_Elements.Common_Behavior.SendAction |
Behavioral_Elements.Common_Behavior.ActionSequence |
Behavioral_Elements.Common_Behavior.ReturnAction |
Behavioral_Elements.Common_Behavior.TerminateAction |
Behavioral_Elements.Common_Behavior.DestroyAction |
Behavioral_Elements.Common_Behavior.CreateAction |
Behavioral_Elements.Common_Behavior.UninterpretedAction |
Behavioral_Elements.Common_Behavior.AttributeLink |
Behavioral_Elements.Common_Behavior.Argument |
Behavioral_Elements.Common_Behavior.Link |
Behavioral_Elements.Common_Behavior.LinkEnd |
Behavioral_Elements.Common_Behavior.Stimulus |
Behavioral_Elements.Use_Cases.ExtensionPoint |
Behavioral_Elements.State_Machines.StateMachine |
Behavioral_Elements.Activity_Graphs.ActivityGraph |
Behavioral_Elements.State_Machines.Event |
Behavioral_Elements.State_Machines.TimeEvent |
Behavioral_Elements.State_Machines.CallEvent |
6-310
OMG-UML V1.3
March 2000
6
Behavioral_Elements.State_Machines.SignalEvent |
Behavioral_Elements.State_Machines.ChangeEvent |
Behavioral_Elements.State_Machines.Transition |
Behavioral_Elements.State_Machines.StateVertex |
Behavioral_Elements.State_Machines.Pseudostate |
Behavioral_Elements.State_Machines.SynchState |
Behavioral_Elements.State_Machines.StubState |
Behavioral_Elements.State_Machines.State |
Behavioral_Elements.State_Machines.CompositeState |
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState |
Behavioral_Elements.State_Machines.SimpleState |
Behavioral_Elements.Activity_Graphs.ObjectFlowState |
Behavioral_Elements.Activity_Graphs.ActionState |
Behavioral_Elements.Activity_Graphs.CallState |
Behavioral_Elements.State_Machines.FinalState |
Behavioral_Elements.State_Machines.Guard |
Behavioral_Elements.Collaborations.Message |
Behavioral_Elements.Collaborations.Interaction |
Behavioral_Elements.Activity_Graphs.Partition |
Foundation.Core.Feature |
Foundation.Core.BehavioralFeature |
OMG-UML V1.3
UML XMI DTD
March 2000
6-311
6
Behavioral_Elements.Common_Behavior.Reception |
Foundation.Core.Operation |
Foundation.Core.Method |
Foundation.Core.StructuralFeature |
Foundation.Core.Attribute |
Foundation.Core.GeneralizableElement |
Foundation.Extension_Mechanisms.Stereotype |
Behavioral_Elements.Collaborations.Collaboration |
Model_Management.Package |
Model_Management.Subsystem |
Model_Management.Model |
Foundation.Core.Classifier |
Foundation.Core.Class |
Foundation.Core.DataType |
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node |
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
Behavioral_Elements.Collaborations.ClassifierRole |
6-312
OMG-UML V1.3
March 2000
6
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Foundation.Core.AssociationEnd |
Behavioral_Elements.Collaborations.AssociationEndRole |
Foundation.Core.Namespace |
Foundation.Core.Parameter |
Foundation.Core.Constraint)*
>
<!ELEMENT Behavioral_Elements.Collaborations.ClassifierRole
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.GeneralizableElement.isRoot?,
Foundation.Core.GeneralizableElement.isLeaf?,
Foundation.Core.GeneralizableElement.isAbstract?,
Behavioral_Elements.Collaborations.ClassifierRole.multiplicity?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-313
6
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.GeneralizableElement.generalization*,
Foundation.Core.GeneralizableElement.specialization*,
Foundation.Core.Classifier.participant*,
Foundation.Core.Classifier.powertypeRange*,
Foundation.Core.Classifier.instance*,
Foundation.Core.Classifier.createAction*,
Foundation.Core.Classifier.classifierRole*,
Foundation.Core.Classifier.collaboration*,
Foundation.Core.Classifier.classifierInState*,
Foundation.Core.Classifier.objectFlowState*,
Behavioral_Elements.Collaborations.ClassifierRole.base*,
6-314
OMG-UML V1.3
March 2000
6
Behavioral_Elements.Collaborations.ClassifierRole.associationEnd
Role*,
Behavioral_Elements.Collaborations.ClassifierRole.collaboration?
,
Behavioral_Elements.Collaborations.ClassifierRole.availableFeatu
re*,
Behavioral_Elements.Collaborations.ClassifierRole.message2*,
Behavioral_Elements.Collaborations.ClassifierRole.message1*,
Behavioral_Elements.Collaborations.ClassifierRole.availableConte
nts*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Foundation.Core.Namespace.ownedElement*,
Foundation.Core.Classifier.feature*)?
>
<!ATTLIST Behavioral_Elements.Collaborations.ClassifierRole
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: AssociationRole
-->
<!-_______________________________________________________________
-->
<!ELEMENT
Behavioral_Elements.Collaborations.AssociationRole.multiplicity
OMG-UML V1.3
UML XMI DTD
March 2000
6-315
6
(Foundation.Data_Types.Multiplicity) >
<!ELEMENT
Behavioral_Elements.Collaborations.AssociationRole.base
(Foundation.Core.Association |
Foundation.Core.AssociationClass |
Behavioral_Elements.Collaborations.AssociationRole)?
>
<!ELEMENT
Behavioral_Elements.Collaborations.AssociationRole.collaboration
(Behavioral_Elements.Collaborations.Collaboration)? >
<!ELEMENT
Behavioral_Elements.Collaborations.AssociationRole.message
(Behavioral_Elements.Collaborations.Message)* >
<!ELEMENT Behavioral_Elements.Collaborations.AssociationRole
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.GeneralizableElement.isRoot?,
Foundation.Core.GeneralizableElement.isLeaf?,
Foundation.Core.GeneralizableElement.isAbstract?,
Behavioral_Elements.Collaborations.AssociationRole.multiplicity?
,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
6-316
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.GeneralizableElement.generalization*,
Foundation.Core.GeneralizableElement.specialization*,
Foundation.Core.Association.link*,
Foundation.Core.Association.associationRole*,
Behavioral_Elements.Collaborations.AssociationRole.base?,
OMG-UML V1.3
UML XMI DTD
March 2000
6-317
6
Behavioral_Elements.Collaborations.AssociationRole.collaboration
?,
Behavioral_Elements.Collaborations.AssociationRole.message*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Foundation.Core.Association.connection*)?
>
<!ATTLIST Behavioral_Elements.Collaborations.AssociationRole
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: AssociationEndRole
-->
<!-_______________________________________________________________
-->
<!ELEMENT
Behavioral_Elements.Collaborations.AssociationEndRole.collaborat
ionMultiplicity
(Foundation.Data_Types.Multiplicity) >
<!ELEMENT
Behavioral_Elements.Collaborations.AssociationEndRole.associatio
nRole
(Behavioral_Elements.Collaborations.AssociationRole)? >
<!ELEMENT
Behavioral_Elements.Collaborations.AssociationEndRole.base
(Foundation.Core.AssociationEnd |
6-318
OMG-UML V1.3
March 2000
6
Behavioral_Elements.Collaborations.AssociationEndRole)?
>
<!ELEMENT
Behavioral_Elements.Collaborations.AssociationEndRole.availableQ
ualifier
(Foundation.Core.Attribute)* >
<!ELEMENT Behavioral_Elements.Collaborations.AssociationEndRole
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.AssociationEnd.isNavigable?,
Foundation.Core.AssociationEnd.ordering?,
Foundation.Core.AssociationEnd.aggregation?,
Foundation.Core.AssociationEnd.targetScope?,
Foundation.Core.AssociationEnd.multiplicity?,
Foundation.Core.AssociationEnd.changeability?,
Behavioral_Elements.Collaborations.AssociationEndRole.collaborat
ionMultiplicity?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-319
6
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.AssociationEnd.association?,
Foundation.Core.AssociationEnd.type?,
Foundation.Core.AssociationEnd.specification*,
Foundation.Core.AssociationEnd.linkEnd*,
Foundation.Core.AssociationEnd.associationEndRole*,
Behavioral_Elements.Collaborations.AssociationEndRole.associatio
nRole?,
Behavioral_Elements.Collaborations.AssociationEndRole.base?,
Behavioral_Elements.Collaborations.AssociationEndRole.availableQ
ualifier*,
6-320
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Foundation.Core.AssociationEnd.qualifier*)?
>
<!ATTLIST Behavioral_Elements.Collaborations.AssociationEndRole
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Message
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.Collaborations.Message.interaction
(Behavioral_Elements.Collaborations.Interaction)? >
<!ELEMENT Behavioral_Elements.Collaborations.Message.activator
(Behavioral_Elements.Collaborations.Message)? >
<!ELEMENT Behavioral_Elements.Collaborations.Message.message4
(Behavioral_Elements.Collaborations.Message)* >
<!ELEMENT Behavioral_Elements.Collaborations.Message.sender
(Behavioral_Elements.Collaborations.ClassifierRole)? >
<!ELEMENT Behavioral_Elements.Collaborations.Message.receiver
OMG-UML V1.3
UML XMI DTD
March 2000
6-321
6
(Behavioral_Elements.Collaborations.ClassifierRole)? >
<!ELEMENT Behavioral_Elements.Collaborations.Message.message3
(Behavioral_Elements.Collaborations.Message)* >
<!ELEMENT Behavioral_Elements.Collaborations.Message.predecessor
(Behavioral_Elements.Collaborations.Message)* >
<!ELEMENT
Behavioral_Elements.Collaborations.Message.communicationConnecti
on
(Behavioral_Elements.Collaborations.AssociationRole)? >
<!ELEMENT Behavioral_Elements.Collaborations.Message.action
(Behavioral_Elements.Common_Behavior.Action |
Behavioral_Elements.Common_Behavior.CallAction |
Behavioral_Elements.Common_Behavior.SendAction |
Behavioral_Elements.Common_Behavior.ActionSequence |
Behavioral_Elements.Common_Behavior.ReturnAction |
Behavioral_Elements.Common_Behavior.TerminateAction |
Behavioral_Elements.Common_Behavior.DestroyAction |
Behavioral_Elements.Common_Behavior.CreateAction |
Behavioral_Elements.Common_Behavior.UninterpretedAction)?
>
<!ELEMENT Behavioral_Elements.Collaborations.Message
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
6-322
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.isSpecification?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.Collaborations.Message.interaction?,
Behavioral_Elements.Collaborations.Message.activator?,
OMG-UML V1.3
UML XMI DTD
March 2000
6-323
6
Behavioral_Elements.Collaborations.Message.message4*,
Behavioral_Elements.Collaborations.Message.sender?,
Behavioral_Elements.Collaborations.Message.receiver?,
Behavioral_Elements.Collaborations.Message.message3*,
Behavioral_Elements.Collaborations.Message.predecessor*,
Behavioral_Elements.Collaborations.Message.communicationConnecti
on?,
Behavioral_Elements.Collaborations.Message.action?,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*)?
>
<!ATTLIST Behavioral_Elements.Collaborations.Message
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Interaction
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.Collaborations.Interaction.context
(Behavioral_Elements.Collaborations.Collaboration)? >
<!ELEMENT Behavioral_Elements.Collaborations.Interaction
(Foundation.Core.ModelElement.name?,
6-324
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.Collaborations.Interaction.context?,
OMG-UML V1.3
UML XMI DTD
March 2000
6-325
6
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.Collaborations.Interaction.message*)?
>
<!ATTLIST Behavioral_Elements.Collaborations.Interaction
%XMI.element.att;
%XMI.link.att;
>
<!ELEMENT Behavioral_Elements.Collaborations
((Behavioral_Elements.Collaborations.Collaboration |
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Collaborations.AssociationRole |
Behavioral_Elements.Collaborations.AssociationEndRole |
Behavioral_Elements.Collaborations.Message |
Behavioral_Elements.Collaborations.Interaction)*)
>
<!ATTLIST Behavioral_Elements.Collaborations
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL PACKAGE: Activity_Graphs
-->
<!-_______________________________________________________________
-->
6-326
OMG-UML V1.3
March 2000
6
<!ELEMENT
Behavioral_Elements.Activity_Graphs.ActivityGraph.partition
(Behavioral_Elements.Activity_Graphs.Partition)* >
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: ActivityGraph
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.Activity_Graphs.ActivityGraph
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-327
6
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.State_Machines.StateMachine.context?,
Behavioral_Elements.State_Machines.StateMachine.subMachineState*
,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.State_Machines.StateMachine.top?,
Behavioral_Elements.State_Machines.StateMachine.transitions*,
Behavioral_Elements.Activity_Graphs.ActivityGraph.partition*)?
>
<!ATTLIST Behavioral_Elements.Activity_Graphs.ActivityGraph
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
6-328
<!--
-->
<!-- METAMODEL CLASS: Partition
-->
OMG-UML V1.3
March 2000
6
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.Activity_Graphs.Partition.contents
(Foundation.Core.ModelElement |
Foundation.Core.Comment |
Foundation.Core.Relationship |
Behavioral_Elements.Use_Cases.Extend |
Behavioral_Elements.Use_Cases.Include |
Foundation.Core.Generalization |
Foundation.Core.Flow |
Foundation.Core.Association |
Foundation.Core.AssociationClass |
Behavioral_Elements.Collaborations.AssociationRole |
Foundation.Core.Dependency |
Foundation.Core.Abstraction |
Foundation.Core.Usage |
Foundation.Core.Binding |
Foundation.Core.Permission |
Foundation.Extension_Mechanisms.TaggedValue |
Behavioral_Elements.Common_Behavior.Instance |
Behavioral_Elements.Common_Behavior.Object |
Behavioral_Elements.Common_Behavior.LinkObject |
OMG-UML V1.3
UML XMI DTD
March 2000
6-329
6
Behavioral_Elements.Common_Behavior.DataValue |
Behavioral_Elements.Common_Behavior.ComponentInstance |
Behavioral_Elements.Common_Behavior.NodeInstance |
Behavioral_Elements.Use_Cases.UseCaseInstance |
Behavioral_Elements.Common_Behavior.Action |
Behavioral_Elements.Common_Behavior.CallAction |
Behavioral_Elements.Common_Behavior.SendAction |
Behavioral_Elements.Common_Behavior.ActionSequence |
Behavioral_Elements.Common_Behavior.ReturnAction |
Behavioral_Elements.Common_Behavior.TerminateAction |
Behavioral_Elements.Common_Behavior.DestroyAction |
Behavioral_Elements.Common_Behavior.CreateAction |
Behavioral_Elements.Common_Behavior.UninterpretedAction |
Behavioral_Elements.Common_Behavior.AttributeLink |
Behavioral_Elements.Common_Behavior.Argument |
Behavioral_Elements.Common_Behavior.Link |
Behavioral_Elements.Common_Behavior.LinkEnd |
Behavioral_Elements.Common_Behavior.Stimulus |
Behavioral_Elements.Use_Cases.ExtensionPoint |
Behavioral_Elements.State_Machines.StateMachine |
Behavioral_Elements.Activity_Graphs.ActivityGraph |
Behavioral_Elements.State_Machines.Event |
6-330
OMG-UML V1.3
March 2000
6
Behavioral_Elements.State_Machines.TimeEvent |
Behavioral_Elements.State_Machines.CallEvent |
Behavioral_Elements.State_Machines.SignalEvent |
Behavioral_Elements.State_Machines.ChangeEvent |
Behavioral_Elements.State_Machines.Transition |
Behavioral_Elements.State_Machines.StateVertex |
Behavioral_Elements.State_Machines.Pseudostate |
Behavioral_Elements.State_Machines.SynchState |
Behavioral_Elements.State_Machines.StubState |
Behavioral_Elements.State_Machines.State |
Behavioral_Elements.State_Machines.CompositeState |
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState |
Behavioral_Elements.State_Machines.SimpleState |
Behavioral_Elements.Activity_Graphs.ObjectFlowState |
Behavioral_Elements.Activity_Graphs.ActionState |
Behavioral_Elements.Activity_Graphs.CallState |
Behavioral_Elements.State_Machines.FinalState |
Behavioral_Elements.State_Machines.Guard |
Behavioral_Elements.Collaborations.Message |
Behavioral_Elements.Collaborations.Interaction |
Behavioral_Elements.Activity_Graphs.Partition |
OMG-UML V1.3
UML XMI DTD
March 2000
6-331
6
Foundation.Core.Feature |
Foundation.Core.BehavioralFeature |
Behavioral_Elements.Common_Behavior.Reception |
Foundation.Core.Operation |
Foundation.Core.Method |
Foundation.Core.StructuralFeature |
Foundation.Core.Attribute |
Foundation.Core.GeneralizableElement |
Foundation.Extension_Mechanisms.Stereotype |
Behavioral_Elements.Collaborations.Collaboration |
Model_Management.Package |
Model_Management.Subsystem |
Model_Management.Model |
Foundation.Core.Classifier |
Foundation.Core.Class |
Foundation.Core.DataType |
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node |
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
6-332
OMG-UML V1.3
March 2000
6
Behavioral_Elements.Use_Cases.Actor |
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Foundation.Core.AssociationEnd |
Behavioral_Elements.Collaborations.AssociationEndRole |
Foundation.Core.Namespace |
Foundation.Core.Parameter |
Foundation.Core.Constraint)*
>
<!ELEMENT
Behavioral_Elements.Activity_Graphs.Partition.activityGraph
(Behavioral_Elements.Activity_Graphs.ActivityGraph)? >
<!ELEMENT Behavioral_Elements.Activity_Graphs.Partition
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-333
6
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.Activity_Graphs.Partition.contents*,
Behavioral_Elements.Activity_Graphs.Partition.activityGraph?,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*)?
>
<!ATTLIST Behavioral_Elements.Activity_Graphs.Partition
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
6-334
-->
OMG-UML V1.3
March 2000
6
<!-- METAMODEL CLASS: SubactivityState
-->
<!-_______________________________________________________________
-->
<!ELEMENT
Behavioral_Elements.Activity_Graphs.SubactivityState.isDynamic
EMPTY >
<!ATTLIST
Behavioral_Elements.Activity_Graphs.SubactivityState.isDynamic
xmi.value ( true | false ) #REQUIRED
>
<!ELEMENT
Behavioral_Elements.Activity_Graphs.SubactivityState.dynamicArgu
ments
(Foundation.Data_Types.ArgListsExpression) >
<!ELEMENT
Behavioral_Elements.Activity_Graphs.SubactivityState.dynamicMult
iplicity
(Foundation.Data_Types.Multiplicity) >
<!ELEMENT Behavioral_Elements.Activity_Graphs.SubactivityState
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Behavioral_Elements.State_Machines.CompositeState.isConcurrent?,
Behavioral_Elements.Activity_Graphs.SubactivityState.isDynamic?,
Behavioral_Elements.Activity_Graphs.SubactivityState.dynamicArgu
ments?,
Behavioral_Elements.Activity_Graphs.SubactivityState.dynamicMult
iplicity?,
XMI.extension*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-335
6
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.State_Machines.StateVertex.container?,
Behavioral_Elements.State_Machines.StateVertex.outgoing*,
Behavioral_Elements.State_Machines.StateVertex.incoming*,
Behavioral_Elements.State_Machines.State.stateMachine?,
6-336
OMG-UML V1.3
March 2000
6
Behavioral_Elements.State_Machines.State.deferrableEvent*,
Behavioral_Elements.State_Machines.State.classifierInState*,
Behavioral_Elements.State_Machines.SubmachineState.submachine?,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.State_Machines.State.entry?,
Behavioral_Elements.State_Machines.State.exit?,
Behavioral_Elements.State_Machines.State.internalTransition*,
Behavioral_Elements.State_Machines.State.doActivity?,
Behavioral_Elements.State_Machines.CompositeState.subvertex*)?
>
<!ATTLIST Behavioral_Elements.Activity_Graphs.SubactivityState
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: CallState
-->
<!-_______________________________________________________________
-->
<!ELEMENT Behavioral_Elements.Activity_Graphs.CallState
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
OMG-UML V1.3
UML XMI DTD
March 2000
6-337
6
Behavioral_Elements.Activity_Graphs.ActionState.isDynamic?,
Behavioral_Elements.Activity_Graphs.ActionState.dynamicArguments
?,
Behavioral_Elements.Activity_Graphs.ActionState.dynamicMultiplic
ity?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
6-338
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.State_Machines.StateVertex.container?,
Behavioral_Elements.State_Machines.StateVertex.outgoing*,
Behavioral_Elements.State_Machines.StateVertex.incoming*,
Behavioral_Elements.State_Machines.State.stateMachine?,
Behavioral_Elements.State_Machines.State.deferrableEvent*,
Behavioral_Elements.State_Machines.State.classifierInState*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.State_Machines.State.entry?,
Behavioral_Elements.State_Machines.State.exit?,
Behavioral_Elements.State_Machines.State.internalTransition*,
Behavioral_Elements.State_Machines.State.doActivity?)?
>
<!ATTLIST Behavioral_Elements.Activity_Graphs.CallState
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: ObjectFlowState
-->
<!-_______________________________________________________________
-->
OMG-UML V1.3
UML XMI DTD
March 2000
6-339
6
<!ELEMENT
Behavioral_Elements.Activity_Graphs.ObjectFlowState.isSynch
EMPTY >
<!ATTLIST
Behavioral_Elements.Activity_Graphs.ObjectFlowState.isSynch
xmi.value ( true | false ) #REQUIRED
>
<!ELEMENT
Behavioral_Elements.Activity_Graphs.ObjectFlowState.parameter
(Foundation.Core.Parameter)* >
<!ELEMENT
Behavioral_Elements.Activity_Graphs.ObjectFlowState.type
(Foundation.Core.Classifier |
Foundation.Core.Class |
Foundation.Core.AssociationClass |
Foundation.Core.DataType |
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node |
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Model_Management.Subsystem)?
>
6-340
OMG-UML V1.3
March 2000
6
<!ELEMENT Behavioral_Elements.Activity_Graphs.ObjectFlowState
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Behavioral_Elements.Activity_Graphs.ObjectFlowState.isSynch?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-341
6
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.State_Machines.StateVertex.container?,
Behavioral_Elements.State_Machines.StateVertex.outgoing*,
Behavioral_Elements.State_Machines.StateVertex.incoming*,
Behavioral_Elements.State_Machines.State.stateMachine?,
Behavioral_Elements.State_Machines.State.deferrableEvent*,
Behavioral_Elements.State_Machines.State.classifierInState*,
Behavioral_Elements.Activity_Graphs.ObjectFlowState.parameter*,
Behavioral_Elements.Activity_Graphs.ObjectFlowState.type?,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.State_Machines.State.entry?,
Behavioral_Elements.State_Machines.State.exit?,
Behavioral_Elements.State_Machines.State.internalTransition*,
Behavioral_Elements.State_Machines.State.doActivity?)?
>
<!ATTLIST Behavioral_Elements.Activity_Graphs.ObjectFlowState
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
6-342
-->
OMG-UML V1.3
March 2000
6
<!-- METAMODEL CLASS: ClassifierInState
-->
<!-_______________________________________________________________
-->
<!ELEMENT
Behavioral_Elements.Activity_Graphs.ClassifierInState.type
(Foundation.Core.Classifier |
Foundation.Core.Class |
Foundation.Core.AssociationClass |
Foundation.Core.DataType |
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node |
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Model_Management.Subsystem)?
>
<!ELEMENT
Behavioral_Elements.Activity_Graphs.ClassifierInState.inState
(Behavioral_Elements.State_Machines.State |
Behavioral_Elements.State_Machines.CompositeState |
OMG-UML V1.3
UML XMI DTD
March 2000
6-343
6
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState |
Behavioral_Elements.State_Machines.SimpleState |
Behavioral_Elements.Activity_Graphs.ObjectFlowState |
Behavioral_Elements.Activity_Graphs.ActionState |
Behavioral_Elements.Activity_Graphs.CallState |
Behavioral_Elements.State_Machines.FinalState)*
>
<!ELEMENT Behavioral_Elements.Activity_Graphs.ClassifierInState
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.GeneralizableElement.isRoot?,
Foundation.Core.GeneralizableElement.isLeaf?,
Foundation.Core.GeneralizableElement.isAbstract?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
6-344
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.GeneralizableElement.generalization*,
Foundation.Core.GeneralizableElement.specialization*,
Foundation.Core.Classifier.participant*,
Foundation.Core.Classifier.powertypeRange*,
Foundation.Core.Classifier.instance*,
Foundation.Core.Classifier.createAction*,
Foundation.Core.Classifier.classifierRole*,
Foundation.Core.Classifier.collaboration*,
Foundation.Core.Classifier.classifierInState*,
Foundation.Core.Classifier.objectFlowState*,
Behavioral_Elements.Activity_Graphs.ClassifierInState.type?,
OMG-UML V1.3
UML XMI DTD
March 2000
6-345
6
Behavioral_Elements.Activity_Graphs.ClassifierInState.inState*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Foundation.Core.Namespace.ownedElement*,
Foundation.Core.Classifier.feature*)?
>
<!ATTLIST Behavioral_Elements.Activity_Graphs.ClassifierInState
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: ActionState
-->
<!-_______________________________________________________________
-->
<!ELEMENT
Behavioral_Elements.Activity_Graphs.ActionState.isDynamic
EMPTY >
<!ATTLIST
Behavioral_Elements.Activity_Graphs.ActionState.isDynamic
xmi.value ( true | false ) #REQUIRED
>
<!ELEMENT
Behavioral_Elements.Activity_Graphs.ActionState.dynamicArguments
(Foundation.Data_Types.ArgListsExpression) >
6-346
OMG-UML V1.3
March 2000
6
<!ELEMENT
Behavioral_Elements.Activity_Graphs.ActionState.dynamicMultiplic
ity
(Foundation.Data_Types.Multiplicity) >
<!ELEMENT Behavioral_Elements.Activity_Graphs.ActionState
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Behavioral_Elements.Activity_Graphs.ActionState.isDynamic?,
Behavioral_Elements.Activity_Graphs.ActionState.dynamicArguments
?,
Behavioral_Elements.Activity_Graphs.ActionState.dynamicMultiplic
ity?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-347
6
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Behavioral_Elements.State_Machines.StateVertex.container?,
Behavioral_Elements.State_Machines.StateVertex.outgoing*,
Behavioral_Elements.State_Machines.StateVertex.incoming*,
Behavioral_Elements.State_Machines.State.stateMachine?,
Behavioral_Elements.State_Machines.State.deferrableEvent*,
Behavioral_Elements.State_Machines.State.classifierInState*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Behavioral_Elements.State_Machines.State.entry?,
Behavioral_Elements.State_Machines.State.exit?,
Behavioral_Elements.State_Machines.State.internalTransition*,
Behavioral_Elements.State_Machines.State.doActivity?)?
>
<!ATTLIST Behavioral_Elements.Activity_Graphs.ActionState
%XMI.element.att;
%XMI.link.att;
>
6-348
OMG-UML V1.3
March 2000
6
<!ELEMENT Behavioral_Elements.Activity_Graphs
((Behavioral_Elements.Activity_Graphs.ActivityGraph |
Behavioral_Elements.Activity_Graphs.Partition |
Behavioral_Elements.Activity_Graphs.SubactivityState |
Behavioral_Elements.Activity_Graphs.CallState |
Behavioral_Elements.Activity_Graphs.ObjectFlowState |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Behavioral_Elements.Activity_Graphs.ActionState)*)
>
<!ATTLIST Behavioral_Elements.Activity_Graphs
%XMI.element.att;
%XMI.link.att;
>
<!ELEMENT Behavioral_Elements
((Behavioral_Elements.Common_Behavior |
Behavioral_Elements.Use_Cases |
Behavioral_Elements.State_Machines |
Behavioral_Elements.Collaborations |
Behavioral_Elements.Activity_Graphs)*) >
<!ATTLIST Behavioral_Elements
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL PACKAGE: Model_Management
-->
<!-_______________________________________________________________
-->
OMG-UML V1.3
UML XMI DTD
March 2000
6-349
6
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Model
-->
<!-_______________________________________________________________
-->
<!ELEMENT Model_Management.Model
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.GeneralizableElement.isRoot?,
Foundation.Core.GeneralizableElement.isLeaf?,
Foundation.Core.GeneralizableElement.isAbstract?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
6-350
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.comment*,
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.GeneralizableElement.generalization*,
Foundation.Core.GeneralizableElement.specialization*,
Model_Management.Package.elementImport*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Foundation.Core.Namespace.ownedElement*)?
>
<!ATTLIST Model_Management.Model
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Package
-->
OMG-UML V1.3
UML XMI DTD
March 2000
6-351
6
<!-_______________________________________________________________
-->
<!ELEMENT Model_Management.Package.elementImport
(Model_Management.ElementImport)* >
<!ELEMENT Model_Management.Package
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.GeneralizableElement.isRoot?,
Foundation.Core.GeneralizableElement.isLeaf?,
Foundation.Core.GeneralizableElement.isAbstract?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
6-352
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.GeneralizableElement.generalization*,
Foundation.Core.GeneralizableElement.specialization*,
Model_Management.Package.elementImport*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Foundation.Core.Namespace.ownedElement*)?
>
<!ATTLIST Model_Management.Package
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: Subsystem
-->
<!-_______________________________________________________________
-->
OMG-UML V1.3
UML XMI DTD
March 2000
6-353
6
<!ELEMENT Model_Management.Subsystem.isInstantiable EMPTY >
<!ATTLIST Model_Management.Subsystem.isInstantiable
xmi.value ( true | false ) #REQUIRED
>
<!ELEMENT Model_Management.Subsystem
(Foundation.Core.ModelElement.name?,
Foundation.Core.ModelElement.visibility?,
Foundation.Core.ModelElement.isSpecification?,
Foundation.Core.GeneralizableElement.isRoot?,
Foundation.Core.GeneralizableElement.isLeaf?,
Foundation.Core.GeneralizableElement.isAbstract?,
Model_Management.Subsystem.isInstantiable?,
XMI.extension*,
Foundation.Core.ModelElement.namespace?,
Foundation.Core.ModelElement.clientDependency*,
Foundation.Core.ModelElement.constraint*,
Foundation.Core.ModelElement.supplierDependency*,
Foundation.Core.ModelElement.presentation*,
Foundation.Core.ModelElement.targetFlow*,
Foundation.Core.ModelElement.sourceFlow*,
Foundation.Core.ModelElement.templateParameter3*,
Foundation.Core.ModelElement.binding?,
Foundation.Core.ModelElement.comment*,
6-354
OMG-UML V1.3
March 2000
6
Foundation.Core.ModelElement.elementResidence*,
Foundation.Core.ModelElement.templateParameter2*,
Foundation.Core.ModelElement.stereotype?,
Foundation.Core.ModelElement.behavior*,
Foundation.Core.ModelElement.classifierRole*,
Foundation.Core.ModelElement.collaboration*,
Foundation.Core.ModelElement.partition*,
Foundation.Core.ModelElement.elementImport*,
Foundation.Core.GeneralizableElement.generalization*,
Foundation.Core.GeneralizableElement.specialization*,
Model_Management.Package.elementImport*,
Foundation.Core.Classifier.participant*,
Foundation.Core.Classifier.powertypeRange*,
Foundation.Core.Classifier.instance*,
Foundation.Core.Classifier.createAction*,
Foundation.Core.Classifier.classifierRole*,
Foundation.Core.Classifier.collaboration*,
Foundation.Core.Classifier.classifierInState*,
Foundation.Core.Classifier.objectFlowState*,
Foundation.Core.ModelElement.templateParameter*,
Foundation.Core.ModelElement.taggedValue*,
Foundation.Core.Namespace.ownedElement*,
OMG-UML V1.3
UML XMI DTD
March 2000
6-355
6
Foundation.Core.Classifier.feature*)?
>
<!ATTLIST Model_Management.Subsystem
%XMI.element.att;
%XMI.link.att;
>
<!-_______________________________________________________________
-->
<!--
-->
<!-- METAMODEL CLASS: ElementImport
-->
<!-_______________________________________________________________
-->
<!ELEMENT Model_Management.ElementImport.visibility EMPTY >
<!ATTLIST Model_Management.ElementImport.visibility
xmi.value ( public | private | protected ) #REQUIRED
>
<!ELEMENT Model_Management.ElementImport.alias (#PCDATA |
XMI.reference)* >
<!ELEMENT Model_Management.ElementImport.modelElement
(Foundation.Core.ModelElement |
Foundation.Core.Comment
|
Foundation.Core.Relationship |
Behavioral_Elements.Use_Cases.Extend |
Behavioral_Elements.Use_Cases.Include |
Foundation.Core.Generalization |
Foundation.Core.Flow |
6-356
OMG-UML V1.3
March 2000
6
Foundation.Core.Association |
Foundation.Core.AssociationClass |
Behavioral_Elements.Collaborations.AssociationRole |
Foundation.Core.Dependency |
Foundation.Core.Abstraction |
Foundation.Core.Usage |
Foundation.Core.Binding
|
Foundation.Core.Permission |
Foundation.Extension_Mechanisms.TaggedValue |
Behavioral_Elements.Common_Behavior.Instance |
Behavioral_Elements.Common_Behavior.Object |
Behavioral_Elements.Common_Behavior.LinkObject |
Behavioral_Elements.Common_Behavior.DataValue |
Behavioral_Elements.Common_Behavior.ComponentInstance |
Behavioral_Elements.Common_Behavior.NodeInstance |
Behavioral_Elements.Use_Cases.UseCaseInstance |
Behavioral_Elements.Common_Behavior.Action |
Behavioral_Elements.Common_Behavior.CallAction |
Behavioral_Elements.Common_Behavior.SendAction |
Behavioral_Elements.Common_Behavior.ActionSequence |
Behavioral_Elements.Common_Behavior.ReturnAction |
Behavioral_Elements.Common_Behavior.TerminateAction |
OMG-UML V1.3
UML XMI DTD
March 2000
6-357
6
Behavioral_Elements.Common_Behavior.DestroyAction |
Behavioral_Elements.Common_Behavior.CreateAction |
Behavioral_Elements.Common_Behavior.UninterpretedAction |
Behavioral_Elements.Common_Behavior.AttributeLink |
Behavioral_Elements.Common_Behavior.Argument |
Behavioral_Elements.Common_Behavior.Link |
Behavioral_Elements.Common_Behavior.LinkEnd |
Behavioral_Elements.Common_Behavior.Stimulus |
Behavioral_Elements.Use_Cases.ExtensionPoint |
Behavioral_Elements.State_Machines.StateMachine |
Behavioral_Elements.Activity_Graphs.ActivityGraph |
Behavioral_Elements.State_Machines.Event |
Behavioral_Elements.State_Machines.TimeEvent |
Behavioral_Elements.State_Machines.CallEvent |
Behavioral_Elements.State_Machines.SignalEvent |
Behavioral_Elements.State_Machines.ChangeEvent |
Behavioral_Elements.State_Machines.Transition |
Behavioral_Elements.State_Machines.StateVertex |
Behavioral_Elements.State_Machines.Pseudostate |
Behavioral_Elements.State_Machines.SynchState |
Behavioral_Elements.State_Machines.StubState |
Behavioral_Elements.State_Machines.State |
6-358
OMG-UML V1.3
March 2000
6
Behavioral_Elements.State_Machines.CompositeState |
Behavioral_Elements.State_Machines.SubmachineState |
Behavioral_Elements.Activity_Graphs.SubactivityState |
Behavioral_Elements.State_Machines.SimpleState |
Behavioral_Elements.Activity_Graphs.ObjectFlowState |
Behavioral_Elements.Activity_Graphs.ActionState |
Behavioral_Elements.Activity_Graphs.CallState |
Behavioral_Elements.State_Machines.FinalState |
Behavioral_Elements.State_Machines.Guard |
Behavioral_Elements.Collaborations.Message |
Behavioral_Elements.Collaborations.Interaction |
Behavioral_Elements.Activity_Graphs.Partition |
Foundation.Core.Feature
|
Foundation.Core.BehavioralFeature |
Behavioral_Elements.Common_Behavior.Reception |
Foundation.Core.Operation |
Foundation.Core.Method
|
Foundation.Core.StructuralFeature |
Foundation.Core.Attribute |
Foundation.Core.GeneralizableElement |
Foundation.Extension_Mechanisms.Stereotype |
Behavioral_Elements.Collaborations.Collaboration |
OMG-UML V1.3
UML XMI DTD
March 2000
6-359
6
Model_Management.Package |
Model_Management.Subsystem |
Model_Management.Model
|
Foundation.Core.Classifier |
Foundation.Core.Class |
Foundation.Core.DataType |
Foundation.Core.Interface |
Foundation.Core.Component |
Foundation.Core.Node |
Behavioral_Elements.Common_Behavior.Signal |
Behavioral_Elements.Common_Behavior.Exception |
Behavioral_Elements.Use_Cases.UseCase |
Behavioral_Elements.Use_Cases.Actor |
Behavioral_Elements.Collaborations.ClassifierRole |
Behavioral_Elements.Activity_Graphs.ClassifierInState |
Foundation.Core.AssociationEnd |
Behavioral_Elements.Collaborations.AssociationEndRole |
Foundation.Core.Namespace |
Foundation.Core.Parameter |
Foundation.Core.Constraint)?
>
<!ELEMENT Model_Management.ElementImport.package
(Model_Management.Package |
6-360
OMG-UML V1.3
March 2000
6
Model_Management.Subsystem
|
Model_Management.Model)?
>
<!ELEMENT Model_Management.ElementImport
(Model_Management.ElementImport.visibility?,
Model_Management.ElementImport.alias?,
XMI.extension*,
Model_Management.ElementImport.modelElement?,
Model_Management.ElementImport.package?)?
>
<!ATTLIST Model_Management.ElementImport
%XMI.element.att;
%XMI.link.att;
>
<!ELEMENT Model_Management ((Model_Management.Model |
Model_Management.Package |
Model_Management.Subsystem |
Model_Management.ElementImport)*) >
<!ATTLIST Model_Management
%XMI.element.att;
%XMI.link.att;
>
OMG-UML V1.3
UML XMI DTD
March 2000
6-361
6
6-362
OMG-UML V1.3
March 2000
Object Constraint Language
Specification
7
This chapter introduces and defines the Object Constraint Language (OCL), a formal
language to express side-effect-free constraints.
Contents
This chapter contains the following topics.
Topic
Page
“Overview”
7-1
“Introduction”
7-3
“Connection with the UML Metamodel”
7-4
“Basic Values and Types”
7-6
“Objects and Properties”
7-11
“Collection Operations”
7-22
“Predefined OCL Types”
7-28
“Grammar”
7-50
7.1 Overview
This chapter introduces and defines the Object Constraint Language (OCL), a formal
language used to express constraints. These typically specify invariant conditions that
must hold for the system being modeled. Note that when the OCL expressions are
evaluated, they do not have side effects (i.e., their evaluation cannot alter the state of
OMG-UML V1.3
March 2000
7-1
7
the corresponding executing system). In addition to specifying invariants of the UML
metamodel, UML modelers can use OCL to specify application-specific constraints in
their models.
OCL is used in the UML Semantics chapter to specify the well-formedness rules of the
metaclasses comprising the UML metamodel. A well-formedness rule in the static
semantics chapters in the UML Semantics section normally contains an OCL
expression, specifying an invariant for the associated metaclass. The grammar for OCL
is specified at the end of this chapter. A parser generated from this grammar has
correctly parsed all the constraints in the UML Semantics section, a process which
improved the correctness of the specifications for OCL and UML.
7.1.1 Why OCL?
A UML diagram, such as a class diagram, is typically not refined enough to provide all
the relevant aspects of a specification. There is, among other things, a need to describe
additional constraints about the objects in the model. Such constraints are often
described in natural language. Practice has shown that this will always result in
ambiguities. In order to write unambiguous constraints, so-called formal languages
have been developed. The disadvantage of traditional formal languages is that they are
usable to persons with a string mathematical background, but difficult for the average
business or system modeler to use.
OCL has been developed to fill this gap. It is a formal language that remains easy to
read and write. It has been developed as a business modeling language within the IBM
Insurance division, and has its roots in the Syntropy method.
OCL is a pure expression language; therefore, an OCL expression is guaranteed to be
without side effect. When an OCL expression is evaluated, it simply returns a value. It
cannot change anything in the model. This means that the state of the system will never
change because of the evaluation of an OCL expression, even though an OCL
expression can be used to specify a state change (e.g., in a post-condition).
OCL is not a programming language; therefore, it is not possible to write program
logic or flow control in OCL. You cannot invoke processes or activate non-query
operations within OCL. Because OCL is a modeling language in the first place, not
everything in it is promised to be directly executable.
OCL is a typed language, so that each OCL expression has a type. To be well formed,
an OCL expression must conform to the type conformance rules of the language. For
example, you cannot compare an Integer with a String. Each Classifier defined within
a UML model represents a distinct OCL type. In addition, OCL includes a set of
supplementary predefined types (these are described in Section 7.8, “Predefined OCL
Types,” on page 7-28).
As a specification language, all implementation issues are out of scope and cannot be
expressed in OCL.
The evaluation of an OCL expression is instantaneous. This means that the states of
objects in a model cannot change during evaluation.
7-2
OMG-UML V1.3
March 2000
7
7.1.2 Where to Use OCL
OCL can be used for a number of different purposes:
•
•
•
•
•
•
To specify invariants on classes and types in the class model
To specify type invariant for Stereotypes
To describe pre- and post conditions on Operations and Methods
To describe Guards
As a navigation language
To specify constraints on operations
Within the UML Semantics chapter, OCL is used in the well-formedness rules as
invariants on the metaclasses in the abstract syntax. In several places, it is also used to
define ‘additional’ operations, which are used in the well-formedness rules.
7.2 Introduction
7.2.1 Legend
Text written in the courier typeface as shown below is an OCL expression.
'This is an OCL expression'
The context keyword introduces the context for the expression. The keywords inv, pre
and post denote the stereotypes, respectively «invariant», «precondition», and
«postcondition», of the constraint. The actual OCL expression comes after the colon.
context TypeName inv:
'this is an OCL expression with stereotype <<invariant>> in the
context of TypeName' = 'another string'
In the examples. the keywords of OCL are written in boldface in this document. The
boldface has no formal meaning, but is used to make the expressions more readable in
this document. OCL expressions are written using ASCII characters only.
Words in Italics within the main text of the paragraphs refer to parts of OCL
expressions.
7.2.2 Example Class Diagram
The following diagram is used in the examples in this document.
OMG-UML V1.3
Introduction
March 2000
7-3
7
Bank
accountNumber:Integer
0..1
customer
Person
isMarried : Boolean
isUnemployed : Boolean
birthDate : Date
age : Integer
firstName : String
lastName : String
sex : enum {male, female}
income(Date) : Integer
0..*
manager
managedCompanies
employee
employer
0..*
0..*
wife
0..1
husband 0..1
Company
name : String
numberOfEmployees : Integer
stockPrice() : Real
Job
title : String
startDate : Date
salary : Integer
Marriage
place : String
date : Date
Figure 7-1 Class Diagram Example
7.3 Connection with the UML Metamodel
7.3.1 Self
Each OCL expression is written in the context of an instance of a specific type. In an
OCL expression, the reserved word self is used to refer to the contextual instance. For
instance, if the context is Company, then self refers to an instance of Company.
7.3.2 Specifying the UML context
The context of an OCL expression within a UML model can be specified through a socalled context declaration at the beginning of an OCL expression. The context
declaration of the constraints in the following sections is shown.
7-4
OMG-UML V1.3
March 2000
7
If the constraint is shown in a diagram, with the proper stereotype and the dashed lines
to connect it to its contextual element, there is no need for an explicit context
declaration in the test of the constraint. The context declaration is optional.
7.3.3 Invariants
The OCL expression can be part of an Invariant, which is a Constraint stereotyped as
an «invariant». When the invariant is associated with a Classifier, the latter is referred
to as a “type” in this chapter. An OCL expression is an invariant of the type and must
be true for all instances of that type at any time. (Note that all OCL expressions that
express invariants are of the type Boolean.)
For example, if in the context of the Company type in Figure 7-1, the following
expression would specify an invariant that the number of employees must always
exceed 50:
self.numberOfEmployees > 50
where self is an instance of type Company. (We can view self as the object from where
we start the expression.) This invariant holds for every instance of the Company type.
The type of the contextual instance of an OCL expression, which is part of an
invariant, is written with the context keyword, followed by the name of the type as
follows. The label inv: declares the constraint to be an «invariant» constraint.
context Company inv:
self.numberOfEmployees > 50
In most cases, the keyword self can be dropped because the context is clear, as in the
above examples. As an alternative for self, a different name can be defined playing the
part of self:
context c : Company inv:
c.numberOfEmployees > 50
This invariant is equivalent to the previous one.
Optionally, the name of the constraint may be written after the inv keyword, allowing
the constraint to be referenced by name. In the following example the name of the
constraint is enoughEmployees. In the UML metamodel, this name is an attribute of the
metaclass Constraint that is inherited from ModelElement.
context c : Company inv enoughEmployees:
c.numberOfEmployees > 50
7.3.4 Pre- and Postconditions
The OCL expression can be part of a Precondition or Postcondition, corresponding to
«precondition» and «postcondition» stereotypes of Constraint associated with an
Operation or Method. The contextual instance self then is an instance of the type that
OMG-UML V1.3
Connection with the UML Metamodel
March 2000
7-5
7
owns the operation or method as a feature. The context declaration in OCL uses the
context keyword, followed by the type and operation declaration. The stereotype of
constraint is shown by putting the labels ‘pre:’ and ‘post:’ before the actual
Preconditions and Postconditions
context Typename::operationName(param1 : Type1, ... ): ReturnType
pre :
param1 > ...
post:
result = ...
The name self can be used in the expression referring to the object on which the
operation was called. The reserved word result denotes the result of the operation, if
there is one. The names of the parameters (param1) can also be used in the OCL
expression. In the example diagram, we can write:
context Person::income(d : Date) : Integer
post:
result = 5000
Optionally, the name of the precondition or postcondition may be written after the pre
or post keyword, allowing the constraint to be referenced by name. In the following
example the name of the precondition is parameterOk and the name of the
postcondition is resultOk. In the UML metamodel, these names are attributes of the
metaclass Constraint that is inherited from ModelElement.
context Typename::operationName(param1 : Type1, ... ): ReturnType
pre parameterOk:
param1 > ...
resultOk:
result = ...
post
7.3.5 General Expressions
Any OCL expression can be used as the value for an attribute of the UML metaclass
Expression or one of its subtypes. In that case, the semantics section describes the
meaning of the expression.
7.4 Basic Values and Types
In OCL, a number of basic types are predefined and available to the modeler at all
time. These predefined value types are independent of any object model and part of the
definition of OCL.
7-6
OMG-UML V1.3
March 2000
7
The most basic value in OCL is a value of one of the basic types. Some basic types
used in the examples in this document, with corresponding examples of their values,
are shown in Table 7-1.
Table 7-1 Basic types
type
values
Boolean
true, false
Integer
1, -5, 2, 34, 26524, ...
Real
1.5, 3.14, ...
String
'To be or not to be...'
OCL defines a number of operations on the predefined types. Table 7-2 gives some
examples of the operations on the predefined types. See Section 7.8, “Predefined OCL
Types,” on page 7-28 for a complete list of all operations.
Table 7-2 Operations on predefined types
type
operations
Integer
*, +, -, /, abs
Real
*, +, -, /, floor
Boolean
and, or, xor, not, implies, if-then-else
String
toUpper, concat
The complete list of operations provided for each type is described at the end of this
chapter. Collection, Set, Bag and Sequence are basic types as well. Their specifics will
be described in the upcoming sections.
7.4.1 Types from the UML Model
Each OCL expression is written in the context of a UML model, a number of
classifiers (types/classes, ...), their features and associations, and their generalizations.
All classifiers from the UML model are types in the OCL expressions that are attached
to the model.
7.4.2 Enumeration Types
As shown in the example diagram, new enumeration types can be defined in a model
by using:
enum{ value1, value2, value3 }
The values of the enumeration can be used within expressions.
As there might be a name conflict with attribute names being equal to enumeration
values, the usage of an enumeration value is expressed syntactically with an additional
pound (#) symbol prefixing the name of the value:
OMG-UML V1.3
Basic Values and Types
March 2000
7-7
7
#value1
The type of an enumeration attribute is Enumeration, with restrictions on the values for
the attribute.
7.4.3 Let Expression
Sometimes a sub-expression is used more than once in a constraint. The let expression
allows one to define a variable that can be used in the constraint.
context Person inv:
let income : Integer = self.job.salary->sum in
if isUnemployed then
income < 100
else
income >= 100
endif
7.4.4 Type Conformance
OCL is a typed language and the basic value types are organized in a type hierarchy.
This hierarchy determines conformance of the different types to each other. You
cannot, for example, compare an Integer with a Boolean or a String.
An OCL expression in which all the types conform is a valid expression. An OCL
expression in which the types don’t conform is an invalid expression. It contains a type
conformance error. A type type1 conforms to a type type2 when an instance of type1
can be substituted at each place where an instance of type2 is expected. The type
conformance rules for types in the class diagrams are simple.
•
•
Each type conforms to each of its supertypes.
Type conformance is transitive: if type1 conforms to type2, and type2 conforms to
type3, then type1 conforms to type3.
The effect of this is that a type conforms to its supertype, and all the supertypes above.
The type conformance rules for the value types are listed in Table 7-3.
Table 7-3 Type conformance rules
7-8
Type
Conforms to/Is a subtype of
Set(T)
Collection(T)
Sequence(T)
Collection(T)
Bag(T)
Collection(T)
Integer
Real
OMG-UML V1.3
March 2000
7
The conformance relation between the collection types only holds if they are
collections of element types that conform to each other. See Section 7.5.14, “Collection
Type Hierarchy and Type Conformance Rules,” on page 7-20 for the complete
conformance rules for collections.
Table 7-4 provides examples of valid and invalid expressions.
Table 7-4 Valid expressions
OCL expression
valid
explanation
1 + 2 * 34
yes
1 + 'motorcycle'
no
type Integer does not conform to type
String
23 * false
no
type Integer does not conform to
Boolean
12 + 13.5
yes
7.4.5 Re-typing or Casting
In some circumstances, it is desirable to use a property of an object that is defined on
a subtype of the current known type of the object. Because the property is not defined
on the current known type, this results in a type conformance error.
When it is certain that the actual type of the object is the subtype, the object can be retyped using the operation oclAsType(OclType). This operation results in the same
object, but the known type is the argument OclType. When there is an object object of
type Type1 and Type2 is another type, it is allowed to write:
object.oclAsType(Type2) --- evaluates to object with type Type2
An object can only be re-typed to one of its subtype; therefore, in the example, Type2
must be a subtype of Type1.
If the actual type of the object is not a subtype of the type to which it is re-typed, the
expression is undefined (see Section 7.4.9, “Undefined Values,” on page 7-10).
7.4.6 Precedence Rules
The precedence order for the operations, starting with highest precedence, in OCL is:
•
•
•
•
•
•
@pre
dot and arrow operations: ‘.’ and ‘->’
unary ‘not’ and unary minus ‘-’
‘*’ and ‘/’
‘+’ and binary ‘-’
‘if-then-else-endif’
OMG-UML V1.3
Basic Values and Types
March 2000
7-9
7
•
•
•
•
‘<’, ‘>’, ‘<=’, ‘>=’
‘=’, ‘<>’
‘and’, ‘or’ and ‘xor’
‘implies’
Parentheses ‘(’ and ‘)’ can be used to change precedence.
7.4.7 Use of Infix Operators
The use of infix operators is allowed in OCL. The operators ‘+’, ‘-’, ‘*’. ‘/’, ‘<‘, ‘>’,
‘<>’ ‘<=’ ‘>=’ are used as infix operators. If a type defines one of those operators with
the correct signature, they will be used as infix operators. The expression:
a + b
is conceptually equal to the expression:
a.+(b)
that is, invoking the ‘+’ operation on a with b as the parameter to the operation.
The infix operators defined for a type must have exactly one parameter. For the infix
operators ‘<‘, ‘>’, ‘<=’, ‘>=’, ‘<>’, ‘and’, ‘or’, and ‘xor’ the return type must be
Boolean.
7.4.8 Comment
Comments in OCL are written following two successive dashes (minus signs).
Everything immediately following the two dashes up to and including the end of line is
part of the comment. For example:
-- this is a comment
7.4.9 Undefined Values
Whenever an OCL expression is being evaluated, there is a possibility that one or more
of the queries in the expression are undefined. If this is the case, then the complete
expression will be undefined.
There are two exceptions to this for the Boolean operators:
1. True OR-ed with anything is True
2. False AND-ed with anything is False
The above two rules are valid irrespective of the order of the arguments and the above
rules are valid whether or not the value of the other sub-expression is known.
7-10
OMG-UML V1.3
March 2000
7
7.5 Objects and Properties
OCL expressions can refer to Classifiers (e.g., types, classes, interfaces, associations
(acting as types) and datatypes). Also all attributes, association-ends, methods, and
operations without side-effects that are defined on these types can be used. In a class
model, an operation or method is defined to be side-effect-free if the isQuery attribute
of the operations is true. For the purpose of this document, we will refer to attributes,
association-ends, and side-effect-free methods and operations as being properties. A
property is one of:
•
•
•
•
an Attribute
an AssociationEnd
an Operation with isQuery being true
a Method with isQuery being true
7.5.1 Properties
The value of a property on an object that is defined in a class diagram is specified by a
dot followed by the name of the property.
context AType inv:
self.property
If self is a reference to an object, then self.property is the value of the property
property on self.
7.5.2 Properties: Attributes
For example, the age of a Person is written as self.age:
context Person inv:
self.age > 0
The value of the subexpression self.age is the value of the age attribute on the
particular instance of Person identified by self. The type of this subexpression is the
type of the attribute age, which is the basic type Integer.
Using attributes and operations defined on the basic value types, we can express
calculations over the class model. For example, a business rule might be “the age of a
Person is always greater than zero.” This can be stated as shown in the invariant above.
7.5.3 Properties: Operations
Operations may have parameters. For example, as shown earlier, a Person object has an
income expressed as a function of the date. This operation would be accessed as
follows, for a Person aPerson and a date aDate:
aPerson.income(aDate)
OMG-UML V1.3
Objects and Properties
March 2000
7-11
7
The operation itself could be defined by a postcondition constraint. This is a constraint
that is stereotyped as «postcondition». The object that is returned by the operation can
be referred to by result. It takes the following form:
context Person::income (d: Date) : Integer
post: result = age * 1000
The right-hand-side of this definition may refer to the operation being defined (i.e., the
definition may be recursive) as long as the recursion is not infinite. The type of result
is the return type of the operation, which is Integer in the above example.
To refer to an operation or a method that doesn’t take a parameter, parentheses with an
empty argument list are mandatory:
context Company inv:
self.stockPrice() > 0
7.5.4 Properties: Association Ends and Navigation
Starting from a specific object, we can navigate an association on the class diagram to
refer to other objects and their properties. To do so, we navigate the association by
using the opposite association-end:
object.rolename
The value of this expression is the set of objects on the other side of the rolename
association. If the multiplicity of the association-end has a maximum of one (“0..1” or
“1”), then the value of this expression is an object. In the example class diagram, when
we start in the context of a Company (i.e., self is an instance of Company), we can
write:
context Company
inv: self.manager.isUnemployed = false
inv: self.employee->notEmpty
In the first invariant self.manager is a Person, because the multiplicity of the
association is one. In the second invariant self.employee will evaluate in a Set of
Persons. By default, navigation will result in a Set. When the association on the Class
Diagram is adorned with {ordered}, the navigation results in a Sequence.
Collections, like Sets, Bags, and Sequences are predefined types in OCL. They have a
large number of predefined operations on them. A property of the collection itself is
accessed by using an arrow ‘->’ followed by the name of the property. The following
example is in the context of a person:
context Person inv:
self.employer->size < 3
This applies the size property on the Set self.employer, which results in the number of
employers of the Person self.
context Person inv:
7-12
OMG-UML V1.3
March 2000
7
self.employer->isEmpty
This applies the isEmpty property on the Set self.employer. This evaluates to true if the
set of employers is empty and false otherwise.
7.5.4.1 Missing Rolenames
When a rolename is missing at one of the ends of an association, the name of the type
at the association end, starting with a lowercase character, is used as the rolename. If
this results in an ambiguity, the rolename is mandatory. This is the case with unnamed
rolenames in reflexive associations. If the rolename is ambiguous, then it cannot be
used in OCL.
7.5.4.2 Navigation over Associations with Multiplicity Zero or One
Because the multiplicity of the role manager is one, self.manager is an object of type
Person. Such a single object can be used as a Set as well. It then behaves as if it is a
Set containing the single object. The usage as a set is done through the arrow followed
by a property of Set. This is shown in the following example:
context Company inv:
self.manager->size = 1
The sub-expression self.manager is used as a Set, because the arrow is used to access
the size property on Set. This expression evaluates to true.
context Company inv:
self.manager->foo
The sub-expression self.manager is used as Set, because the arrow is used to access the
foo property on the Set. This expression is incorrect, because foo is not a defined
property of Set.
context Company inv:
self.manager.age> 40
The sub-expression self.manager is used as a Person, because the dot is used to access
the age property of Person.
In the case of an optional (0..1 multiplicity) association, this is especially useful to
check whether there is an object or not when navigating the association. In the example
we can write:
context Person inv:
self.wife->notEmpty implies self.wife.sex = #female
OMG-UML V1.3
Objects and Properties
March 2000
7-13
7
7.5.4.3 Combining Properties
Properties can be combined to make more complicated expressions. An important rule
is that an OCL expression always evaluates to a specific object of a specific type. After
obtaining a result, one can always apply another property to the result to get a new
result value. Therefore, each OCL expression can be read and evaluated left-to-right.
Following are some invariants that use combined properties on the example class
diagram:
[1] Married people are of age >= 18
context Person inv:
self.wife->notEmpty implies self.wife.age >= 18 and
self.husband->notEmpty implies self.husband.age >= 18
[2] A company has at most 50 employees
context Company inv:
self.employee->size <= 50
7.5.5 Navigation to Association Classes
To specify navigation to association classes (Job and Marriage in the example), OCL
uses a dot and the name of the association class starting with a lowercase character:
context Person inv:
self.job
The sub-expression self.job evaluates to a Set of all the jobs a person has with the
companies that are his/her employer. In the case of an association class, there is no
explicit rolename in the class diagram. The name job used in this navigation is the
name of the association class starting with a lowercase character, similar to the way
described in the section “Missing Rolenames” above.
In case of a recursive association, that is an association of a class with itself, the name
of the association class alone is not enough. We need to distinguish the direction in
which the association is navigated as well as the name of the association class. Take
the following model as an example.
Person
age
bosses
*
employees *
EmployeeRanking
score
Figure 7-2 Navigating recursive association classes
7-14
OMG-UML V1.3
March 2000
7
When navigating to an association class such as employeeRanking there are two
possibilities depending on the direction. For instance, in the above example, we may
navigate towards the employees end, or the bosses end. By using the name of the
association class alone, these two options cannot be distinguished. To make the
distinction, the rolename of the direction in which we want to navigate is added to the
association class name, enclosed in square brackets. In the expression
context Person inv:
self.employeeRanking[bosses]->sum > 0
the self.employeeRanking[bosses] evaluates to the set of EmployeeRankings belonging
to the collection of bosses. And in the expression
context Person inv:
self.employeeRanking[employees]->sum > 0
the self.employeeRanking[employees] evaluates to the set of EmployeeRankings
belonging to the collection of employees. The unqualified use of the association class
name is not allowed in such a recursive situation. Thus, the following example is
invalid:
context Person inv:
self.employeeRanking->sum > 0 -- INVALID!
In a non-recursive situation, the association class name alone is enough, although the
qualified version is allowed as well. Therefore, the examples at the start of this section
could also be written as:
context Person inv:
self.job[employer]
7.5.6 Navigation from Association Classes
We can navigate from the association class itself to the objects that participate in the
association. This is done using the dot-notation and the role-names at the associationends.
context Job
inv: self.employer.numberOfEmployees >= 1
inv:
self.employee.age > 21
Navigation from an association class to one of the objects on the association will
always deliver exactly one object. This is a result of the definition of AssociationClass.
Therefore, the result of this navigation is exactly one object, although it can be used as
a Set using the arrow (->).
OMG-UML V1.3
Objects and Properties
March 2000
7-15
7
7.5.7 Navigation through Qualified Associations
Qualified associations use one or more qualifier attributes to select the objects at the
other end of the association. To navigate them, we can add the values for the qualifiers
to the navigation. This is done using square brackets, following the role-name. It is
permissible to leave out the qualifier values, in which case the result will be all objects
at the other end of the association.
context Bank inv:
self.customer
This results in a Set(Person) containing all customers of the Bank.
context Bank inv:
self.customer[8764423]
This results in one Person, having account number 8764423.
If there is more than one qualifier attribute, the values are separated by commas, in the
order which is specified in the UML class model. It is not permissible to partially
specify the qualifier attribute values.
7.5.8 Using Pathnames for Packages
Within UML, different types are organized in packages. OCL provides a way of
explicitly referring to types in other packages by using a package-pathname prefix. The
syntax is a package name, followed by a double colon:
Packagename::Typename
This usage of pathnames is transitive and can also be used for packages within
packages:
Packagename1::Packagename2::Typename
7.5.9 Accessing overridden properties of supertypes
Whenever properties are redefined within a type, the property of the supertypes can be
accessed using the oclAsType() operation. Whenever we have a class B as a subtype of
class A, and a property p1 of both A and B, we can write:
context B inv:
self.oclAsType(A).p1
self.p1
-- accesses the p1 property defined in A
-- accesses the p1 property defined in B
Figure 7-3 shows an example where such a construct is needed.
7-16
OMG-UML V1.3
March 2000
7
s our c e
*
ta rg et
M od elE le m e n t
*
....
N ote
D e p en de n cy
v alu e: U n in t erp re te d
Figure 7-3 Accessing Overridden Properties Example
In this model fragment there is an ambiguity with the OCL expression on Dependency:
context Dependency inv:
self.source <> self
This can either mean normal association navigation, which is inherited from
ModelElement, or it might also mean navigation through the dotted line as an
association class. Both possible navigations use the same role-name, so this is always
ambiguous. Using oclAsType() we can distinguish between them with:
context Dependency
inv: self.oclAsType(Dependency).source
inv:
self.oclAsType(ModelElement).source
7.5.10 Predefined properties on All Objects
There are several properties that apply to all objects, and are predefined in OCL. These
are:
oclIsTypeOf(t : OclType)
: Boolean
oclIsKindOf(t : OclType)
: Boolean
oclInState(s : OclState)
oclIsNew
: Boolean
: Boolean
oclAsType(t : OclType) : instance of OclType
The operation is oclTypeOf results in true if the type of self and t are the same. For
example:
context Person
inv: self.oclIsTypeOf( Person )
-- is true
inv: self.oclIsTypeOf( Company)
-- is false
OMG-UML V1.3
Objects and Properties
March 2000
7-17
7
The above property deals with the direct type of an object. The oclIsKindOf property
determines whether t is either the direct type or one of the supertypes of an object.
The operation oclInState results in true if the object is in the state s. Values for s are
the names of the states in the statemachine(s) attached to the Classifier of object. For
nested states the statenames can be combined using the ::.
On
Off
Standby
NoPower
Figure 7-4 Statemachine Example
In the previous example of statemachine, values for s can be On, Off, Off::Standby,
Off::NoPower. If the classifier of object has the above associated statemachine, valid
OCL expressions are:
object.oclInState(On)
object.oclInState(Off)
object.oclInstate(Off::Standby)
object.oclInState(Off:NoPower)
If there are multiple statemachines attached to the object’s classifier, then the
statename can be prefixed with the name of the statemachine containing the state and
the double semicolon ::, as with nested states.
The operation oclIsNew evaluates to true if, used in a postcondition, the object is
created during performing the operation (i.e., it didn’t exist at precondition time).
7.5.11 Features on Classes Themselves
All properties discussed until now in OCL are properties on instances of classes. The
types are either predefined in OCL or defined in the class model. In OCL, it is also
possible to use features defined on the types/classes themselves. These are, for
example, the class-scoped features defined in the class model. Furthermore, several
features are predefined on each type.
A predefined feature on each type is allInstances, which results in the Set of all
instances of the type in existence at the specific time when the expression is evaluated.
If we want to make sure that all instances of Person have unique names, we can write:
context Person inv:
Person.allInstances->forAll(p1, p2 |
7-18
OMG-UML V1.3
March 2000
7
p1 <> p2 implies p1.name <> p2.name)
The Person.allInstances is the set of all persons and is of type Set(Person). It is the set
of all persons that exist at the snapshot in time that the expression is evaluated.
Note – The use of allInstances has some problems and its use is discouraged in most
cases. The first problem is best explained by looking at the types like Integer, Real and
String. For these types the meaning of allInstances is undefined. What does it mean for
an Integer to exist? The evaluation of the expression Integer.allInstances results in an
infinite set and is therefore undefined within OCL. The second problem with
allInstances is that the existence of objects must be considered within some overall
context, like a system or a model. This overall context must be defined, which is not
done within OCL. A recommended style is to model the overall contextual system
explicitly as an object within the system and navigate from that object to its containing
instances without using allInstances.
7.5.12 Collections
Single navigation results in a Set, combined navigations in a Bag, and navigation over
associations adorned with {ordered} results in a Sequence. Therefore, the collection
types play an important role in OCL expressions.
The type Collection is predefined in OCL. The Collection type defines a large number
of predefined operations to enable the OCL expression author (the modeler) to
manipulate collections. Consistent with the definition of OCL as an expression
language, collection operations never change collections; isQuery is always true. They
may result in a collection, but rather than changing the original collection they project
the result into a new one.
Collection is an abstract type, with the concrete collection types as its subtypes. OCL
distinguishes three different collection types: Set, Sequence, and Bag. A Set is the
mathematical set. It does not contain duplicate elements. A Bag is like a set, which
may contain duplicates (i.e., the same element may be in a bag twice or more). A
Sequence is like a Bag in which the elements are ordered. Both Bags and Sets have no
order defined on them. Sets, Sequences, and Bags can be specified by a literal in OCL.
Curly brackets surround the elements of the collection, elements in the collection are
written within, separated by commas. The type of the collection is written before the
curly brackets:
Set { 1 , 2 , 5 , 88 }
Set { 'apple' , 'orange', 'strawberry' }
A Sequence:
Sequence { 1, 3, 45, 2, 3 }
Sequence { 'ape', 'nut' }
A bag:
Bag {1 , 3 , 4, 3, 5 }
OMG-UML V1.3
Objects and Properties
March 2000
7-19
7
Because of the usefulness of a Sequence of consecutive Integers, there is a separate
literal to create them. The elements inside the curly brackets can be replaced by an
interval specification, which consists of two expressions of type Integer, Int-expr1 and
Int-expr2, separated by ‘..’. This denotes all the Integers between the values of Intexpr1 and Int-expr2, including the values of Int-expr1 and Int-expr2 themselves:
Sequence{ 1..(6 + 4) }
Sequence{ 1..10 }
-- are both identical to
Sequence{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
The complete list of Collection operations is described at the end of this chapter.
Collections can be specified by a literal, as described above. The only other way to get
a collection is by navigation. To be more precise, the only way to get a Set, Sequence,
or Bag is:
1. a literal, this will result in a Set, Sequence, or Bag:
Set
{1 , 2, 3 , 5 , 7 , 11, 13, 17 }
Sequence {1 , 2, 3 , 5 , 7 , 11, 13, 17 }
Bag
{1, 2, 3, 2, 1}
2. a navigation starting from a single object can result in a collection:
Company
self.employee
3. operations on collections may result in new collections:
collection1->union(collection2)
7.5.13 Collections of Collections
Within OCL, all Collections of Collections are flattened automatically; therefore, the
following two expressions have the same value:
Set{ Set{1, 2}, Set{3, 4}, Set{5, 6} }
Set{ 1, 2, 3, 4, 5, 6 }
7.5.14 Collection Type Hierarchy and Type Conformance Rules
In addition to the type conformance rules in Section 7.4.4, “Type Conformance,” on
page 7-8, the following rules hold for all types, including the collection types:
•
The types Set (X), Bag (X) and Sequence (X) are all subtypes of Collection (X).
Type conformance rules are as follows for the collection types:
•
•
7-20
Type1 conforms to Type2 when they are identical (standard rule for all types).
Type1 conforms to Type2 when it is a subtype of Type2 (standard rule for all types).
OMG-UML V1.3
March 2000
7
•
•
Collection(Type1) conforms to Collection(Type2), when Type1 conforms to Type2.
Type conformance is transitive: if Type1 conforms to Type2, and Type2 conforms to
Type3, then Type1 conforms to Type3 (standard rule for all types).
For example, if Bicycle and Car are two separate subtypes of Transport:
Set(Bicycle)
conforms to
Set(Transport)
Set(Bicycle)
conforms to
Collection(Bicycle)
Set(Bicycle)
conforms to Collection(Transport)
Note that Set(Bicycle) does not conform to Bag(Bicycle), nor the other way around.
They are both subtypes of Collection(Bicycle) at the same level in the hierarchy.
7.5.15 Previous Values in Postconditions
As stated in Section 7.3.4, “Pre- and Postconditions,” on page 7-5, OCL can be used to
specify pre- and post-conditions on Operations and Methods in UML. In a
postcondition, the expression can refer to two sets of values for each property of an
object:
•
•
the value of a property at the start of the operation or method
the value of a property upon completion of the operation or method
The value of a property in a postcondition is the value upon completion of the
operation. To refer to the value of a property at the start of the operation, one has to
postfix the property name with the keyword ‘@pre’:
context Person::birthdayHappens()
post: age = age@pre + 1
The property age refers to the property of the instance of Person on which executes the
operation. The property age@pre refers to the value of the property age of the Person
that executes the operation, at the start of the operation.
If the property has parameters, the ‘@pre’ is postfixed to the propertyname, before the
parameters.
context Company::hireEmployee(p : Person)
post: employees = employees@pre->including(p) and
stockprice() = stockprice@pre() + 10
The above operation can also be specified by a postcondition and a precondition
together:
context Company::hireEmployee(p : Person)
pre : not employee->includes(p)
post: employees->includes(p) and
stockprice() = stockprice@pre() + 10
OMG-UML V1.3
Objects and Properties
March 2000
7-21
7
When the pre-value of a property evaluates to an object, all further properties that are
accessed of this object are the new values (upon completion of the operation) of this
object. So:
[email protected]
-- takes the old value of property b of a, say x
-- and then the new value of c of x.
[email protected]@pre
-- takes the old value of property b of a, say x
-- and then the old value of c of x.
The ‘@pre’ postfix is allowed only in OCL expressions that are part of a
Postcondition. Asking for a current property of an object that has been destroyed
during execution of the operation results in Undefined. Also, referring to the previous
value of an object that has been created during execution of the operation results in
Undefined.
7.6 Collection Operations
OCL defines many operations on the collection types. These operations are specifically
meant to enable a flexible and powerful way of projecting new collections from
existing ones. The different constructs are described in the following sections.
7.6.1 Select and Reject Operations
Sometimes an expression using operations and navigations delivers a collection, while
we are interested only in a special subset of the collection. OCL has special constructs
to specify a selection from a specific collection. These are the select and reject
operations. The select specifies a subset of a collection. A select is an operation on a
collection and is specified using the arrow-syntax:
collection->select( ... )
The parameter of select has a special syntax that enables one to specify which elements
of the collection we want to select. There are three different forms, of which the
simplest one is:
collection->select( boolean-expression )
This results in a collection that contains all the elements from collection for which the
boolean-expression evaluates to true. To find the result of this expression, for each
element in collection the expression boolean-expression is evaluated. If this evaluates
to true, the element is included in the result collection, otherwise not. As an example,
the following OCL expression specifies that the collection of all the employees older
than 50 years is not empty:
context Company inv:
self.employee->select(age > 50)->notEmpty
The self.employee is of type Set(Person). The select takes each person from
self.employee and evaluates age > 50 for this person. If this results in true, then the
person is in the result Set.
7-22
OMG-UML V1.3
March 2000
7
As shown in the previous example, the context for the expression in the select
argument is the element of the collection on which the select is invoked. Thus the age
property is taken in the context of a person.
In the above example, it is impossible to refer explicitly to the persons themselves; you
can only refer to properties of them. To refer to the persons themselves, there is a more
general syntax for the select expression:
collection->select( v | boolean-expression-with-v )
The variable v is called the iterator. When the select is evaluated, v iterates over the
collection and the boolean-expression-with-v is evaluated for each v. The v is a
reference to the object from the collection and can be used to refer to the objects
themselves from the collection. The two examples below are identical:
context Company inv:
self.employee->select(age > 50)->notEmpty
context Company inv:
self.employee->select(p | p.age > 50)->notEmpty
The result of the complete select is the collection of persons p for which the p.age >
50 evaluates to True. This amounts to a subset of self.employee.
As a final extension to the select syntax, the expected type of the variable v can be
given. The select now is written as:
collection->select( v : Type | boolean-expression-with-v )
The meaning of this is that the objects in collection must be of type Type. The next
example is identical to the previous examples:
context Company inv:
self.employee.select(p : Person | p.age > 50)->notEmpty
The compete select syntax now looks like one of:
collection->select( v : Type | boolean-expression-with-v )
collection->select( v | boolean-expression-with-v )
collection->select( boolean-expression )
The reject operation is identical to the select operation, but with reject we get the
subset of all the elements of the collection for which the expression evaluates to False.
The reject syntax is identical to the select syntax:
collection->reject( v : Type | boolean-expression-with-v )
collection->reject( v | boolean-expression-with-v )
collection->reject( boolean-expression )
As an example, specify that the collection of all the employees who are not married is
empty:
context Company inv:
self.employee->reject( isMarried )->isEmpty
OMG-UML V1.3
Collection Operations
March 2000
7-23
7
The reject operation is available in OCL for convenience, because each reject can be
restated as a select with the negated expression. Therefore, the following two
expressions are identical:
collection->reject( v : Type | boolean-expression-with-v )
collection->select( v : Type | not (boolean-expression-with-v) )
7.6.2 Collect Operation
As shown in the previous section, the select and reject operations always result in a
sub-collection of the original collection. When we want to specify a collection which is
derived from some other collection, but which contains different objects from the
original collection (i.e., it is not a sub-collection), we can use a collect operation. The
collect operation uses the same syntax as the select and reject and is written as one of:
collection->collect( v : Type | expression-with-v )
collection->collect( v | expression-with-v )
collection->collect( expression )
The value of the reject operation is the collection of the results of all the evaluations of
expression-with-v.
An example: specify the collection of birthDates for all employees in the context of a
company. This can be written in the context of a Company object as one of:
self.employee->collect( birthDate )
self.employee->collect( person | person.birthDate )
self.employee->collect( person : Person | person.birthDate )
An important issue here is that the resulting collection is not a Set, but a Bag. When
more than one employee has the same value for birthDate, this value will be an
element of the resulting Bag more than once. The Bag resulting from the collect
operation always has the same size as the original collection.
It is possible to make a Set from the Bag, by using the asSet property on the Bag. The
following expression results in the Set of different birthDates from all employees of a
Company:
self.employee->collect( birthDate )->asSet
7.6.2.1 Shorthand for Collect
Because navigation through many objects is very common, there is a shorthand
notation for the collect that makes the OCL expressions more readable. Instead of
self.employee->collect(birthdate)
we can also write:
self.employee.birthdate
7-24
OMG-UML V1.3
March 2000
7
In general, when we apply a property to a collection of Objects, then it will
automatically be interpreted as a collect over the members of the collection with the
specified property.
For any propertyname that is defined as a property on the objects in a collection, the
following two expressions are identical:
collection.propertyname
collection->collect(propertyname)
and so are these if the property is parameterized:
collection.propertyname(par1, par2, ...)
collection->collect(propertyname(par1, par2, ...)
7.6.3 ForAll Operation
Many times a constraint is needed on all elements of a collection. The forAll operation
in OCL allows specifying a Boolean expression, which must hold for all objects in a
collection:
collection->forAll( v : Type | boolean-expression-with-v )
collection->forAll( v | boolean-expression-with-v )
collection->forAll( boolean-expression )
This forAll expression results in a Boolean. The result is true if the booleanexpression-with-v is true for all elements of collection. If the boolean-expression-withv is false for one or more v in collection, then the complete expression evaluates to
false. For example, in the context of a company:
context Company
inv:
self.employee->forAll( forename = 'Jack' )
inv:
self.employee->forAll( p | p.forename = 'Jack' )
inv:
self.employee->forAll( p : Person | p.forename = 'Jack' )
These invariants evaluate to true if the forename feature of each employee is equal to
‘Jack.’
The forAll operation has an extended variant in which more then one iterator is used.
Both iterators will iterate over the complete collection. Effectively this is a forAll on
the Cartesian product of the collection with itself.
context Company inv:
self.employee->forAll( e1, e2 |
e1 <> e2 implies e1.forename <> e2.forename)
context Company inv:
self.employee->forAll( e1, e2 : Person |
e1 <> e2 implies e1.forename <> e2.forename)
OMG-UML V1.3
Collection Operations
March 2000
7-25
7
This expression evaluates to true if the forenames of all employees are different. It is
semantically equivalent to:
context Company inv:
self.employee->forAll(e1 | self.employee->forAll (e2 |
e1 <> e2 implies e1.forename <> e2.forename)))
7.6.4 Exists Operation
Many times one needs to know whether there is at least one element in a collection for
which a constraint holds. The exists operation in OCL allows you to specify a Boolean
expression which must hold for at least one object in a collection:
collection->exists( v : Type | boolean-expression-with-v )
collection->exists( v | boolean-expression-with-v )
collection->exists( boolean-expression )
This exists operation results in a Boolean. The result is true if the boolean-expressionwith-v is true for at least one element of collection. If the boolean-expression-with-v is
false for all v in collection, then the complete expression evaluates to false. For
example, in the context of a company:
context Company inv:
self.employee->exists( forename = 'Jack' )
context Company inv:
self.employee->exists( p | p.forename = 'Jack' )
context Company inv:
self.employee->exists( p : Person | p.forename = 'Jack' )
These expressions evaluate to true if the forename feature of at least one employee is
equal to ‘Jack.’
7.6.5 Iterate Operation
The iterate operation is slightly more complicated, but is very generic. The operations
reject, select, forAll, exists, collect, can all be described in terms of iterate.
An accumulation builds one value by iterating over a collection.
collection->iterate( elem : Type; acc : Type = <expression> |
expression-with-elem-and-acc )
The variable elem is the iterator, as in the definitions of select and forAll. The variable
acc is the accumulator. The accumulator gets an initial value <expression>.
7-26
OMG-UML V1.3
March 2000
7
When the iterate is evaluated, elem iterates over the collection and the expression-withelem-and-acc is evaluated for each elem. After each evaluation of expression-withelem-and-acc, its value is assigned to acc. In this way, the value of acc is built up
during the iteration of the collection. The collect operation described in terms of iterate
will look like:
collection->collect(x : T | x.property)
-- is identical to:
collection->iterate(x : T; acc : T2 = Bag{} |
acc->including(x.property))
Or written in Java-like pseudocode the result of the iterate can be calculated as:
iterate(elem : T; acc : T2 = value)
{
acc = value;
for(Enumeration e = collection.elements() ;
e.hasMoreElements(); ){
elem = e.nextElement();
acc
= <expression-with-elem-and-acc>
}
}
Although the Java pseudo code uses a ‘next element,’ the iterate operation is defined
for each collection type and the order of the iteration through the elements in the
collection is not defined for Set and Bag. For a Sequence the order is the order of the
elements in the sequence.
7.7 The Standard OCL Package
Each UML model that uses OCL constraints contains a predefined standard package
called “UML_OCL.” This package is used by default in all other packages in the
model to evaluate OCL expressions. This package contains all predefined OCL types
and their features.
To extend the predefined OCL types, a modeler should define a separate package. The
standard OCL package can be imported, and each OCL type can be extended with new
features.
To specify that a package used the predefined OCL types from a user defined package
instead of the standard package, the using package must define a Dependency with
stereotype <<OCL_Types>> to the package which defines the extended OCL types.
A constraint on the user defined OCL package is that as a minimum all predefined
OCL types with all of their features must be defined. The user defined package must be
a proper extension to the standard OCL package.
OMG-UML V1.3
The Standard OCL Package
March 2000
7-27
7
7.8 Predefined OCL Types
This section contains all standard types defined within OCL, including all the
properties defined on those types. Its signature and a description of its semantics define
each property. Within the description, the reserved word ‘result’ is used to refer to the
value that results from evaluating the property. In several places, post conditions are
used to describe properties of the result. When there is more than one postcondition, all
postconditions must be true.
7.8.1 Basic Types
The basic types used are Integer, Real, String, and Boolean. They are supplemented
with OclExpression, OclType, and OclAny.
7.8.1.1 OclType
All types defined in a UML model, or pre-defined within OCL, have a type. This type
is an instance of the OCL type called OclType. Access to this type allows the modeler
limited access to the meta-level of the model. This can be useful for advanced
modelers.
Properties of OclType, where the instance of OclType is called type.
type.name : String
The name of type.
type.attributes : Set(String)
The set of names of the attributes of type, as they are defined in the model.
type.associationEnds : Set(String)
The set of names of the navigable associationEnds of type, as they are
defined in the model.
type.operations : Set(String)
The set of names of the operations of type, as they are defined in the model.
7-28
OMG-UML V1.3
March 2000
7
type.supertypes : Set(OclType)
The set of all direct supertypes of type.
post: type.allSupertypes->includesAll(result)
type.allSupertypes : Set(OclType)
The transitive closure of the set of all supertypes of type.
type.allInstances : Set(type)
The set of all instances of type and all its subtypes in existence at the
snapshot at the time that the expression is evaluated.
7.8.1.2 OclAny
Within the OCL context, the type OclAny is the supertype of all types in the model and
the basic predefined OCL type. The predefined OCL Collection types are not subtypes
of OclAny. Properties of OclAny are available on each object in all OCL expressions.
All classes in a UML model inherit all properties defined on OclAny. To avoid name
conflicts between properties in the model and the properties inherited from OclAny, all
names on the properties of OclAny start with ‘ocl.’ Although theoretically there may
still be name conflicts, they can be avoided. One can also use the oclAsType()
operation to explicitly refer to the OclAny properties.
Properties of OclAny, where the instance of OclAny is called object.
object = (object2 : OclAny) : Boolean
True if object is the same object as object2.
object <> (object2 : OclAny) : Boolean
True if object is a different object from object2.
post: result = not (object = object2)
OMG-UML V1.3
Predefined OCL Types
March 2000
7-29
7
object.oclIsKindOf(type : OclType) : Boolean
True if type is one of the types of object, or one of the supertypes
(transitive) of the types of object.
object.oclIsTypeOf(type : OclType) : Boolean
True if type is equal to one of the types of object.
object.oclAsType(type : OclType) : type
Results in object, but of known type type.
Results in Undefined if the actual type of object is not type or one of its
subtypes.
pre : object.oclIsKindOf(type)
post: result = object
post: result.oclIsKindOf(type)
object.oclInState(state : OclState) : Boolean
Results in true if object is in the state state, otherwise results in false. The
argument is a name of a state in the state machine corresponding with the
class of object.
object.oclIsNew : Boolean
Can only be used in a postcondition.
Evaluates to true if the object is created during performing the operation.
I.e. it didn’t exist at precondition time.
7.8.1.3 OclState
The type OclState is used as a parameter for the operation oclInState. There are no
properties defined on OclState. One can only specify an OclState by using the name of
the state, as it appears in a statemachine. These names can be fully qualified by the
nested states and statemachine that contain them.
7-30
OMG-UML V1.3
March 2000
7
7.8.1.4 OclExpression
Each OCL expression itself is an object in the context of OCL. The type of the
expression is OclExpression. This type and its properties are used to define the
semantics of properties that take an expression as one of their parameters. For
example; select, collect or forAll.
An OclExpression includes the optional iterator variable and type and the optional
accumulator variable and type.
Properties of OclExpression, where the instance of OclExpression is called expression.
expression.evaluationType : OclType
The type of the object that results from evaluating expression.
7.8.1.5 Real
The OCL type Real represents the mathematical concept of real. Note that Integer is a
subclass of Real, so for each parameter of type Real, you can use an integer as the
actual parameter.
Properties of Real, where the instance of Real is called r.
r = (r2 : Real) : Boolean
True if r is equal to r2.
r <> (r2 : Real) : Boolean
True if r is not equal to r2.
post: result = not (r = r2)
r + (r2 : Real) : Real
The value of the addition of r and r2.
r - (r2 : Real) : Real
The value of the subtraction of r2 from r.
OMG-UML V1.3
Predefined OCL Types
March 2000
7-31
7
r * (r2 : Real) : Real
The value of the multiplication of r and r2.
r / (r2 : Real) : Real
The value of r divided by r2.
r.abs : Real
The absolute value of r.
post: if r < 0 then result = - r else result = r endif
r.floor : Integer
The largest integer which is less than or equal to r.
post: (result <= r) and (result + 1 > r)
r.round : Integer
The integer which is closest to r. When there are two such integers, the
largest one.
post: ((r - result) < r).abs < 0.5) or ((r - result).abs = 0.5 and (result > r))
r.max(r2 : Real) : Real
The maximum of r and r2.
post: if r >= r2 then result = r else result = r2 endif
r.min(r2 : Real) : Real
The minimum of r and r2.
post: if r <= r2 then result = r else result = r2 endif
7-32
OMG-UML V1.3
March 2000
7
r < (r2 : Real) : Boolean
True if r1 is less than r2.
r > (r2 : Real) : Boolean
True if r1 is greater than r2.
post: result = not (r <= r2)
r <= (r2 : Real) : Boolean
True if r1 is less than or equal to r2.
post: result = (r = r2) or (r < r2)
r >= (r2 : Real) : Boolean
True if r1 is greater than or equal to r2.
post: result = (r = r2) or (r > r2)
7.8.1.6 Integer
The OCL type Integer represents the mathematical concept of integer.
Properties of Integer, where the instance of Integer is called i.
i = (i2 : Integer) : Boolean
True if i is equal to i2.
i + (i2 : Integer) : Integer
The value of the addition of i and i2.
i - (i2 : Integer) : Integer
The value of the subtraction of i2 from i.
OMG-UML V1.3
Predefined OCL Types
March 2000
7-33
7
i * (i2 : Integer) : Integer
The value of the multiplication of i and i2.
i / (i2 : Integer) : Real
The value of i divided by i2.
i.abs : Integer
The absolute value of i.
post: if i < 0 then result = - i else result = i endif
i.div( i2 : Integer) : Integer
The number of times that i2 fits completely within i.
pre : i2 <> 0
post: if i / i2 >= 0 then result = (i / i2).floor else result = -((-i/i2).floor) endif
i.mod( i2 : Integer) : Integer
The result is i modulo i2.
post: result = i - (i.div(i2) * i2)
i.max(i2 : Integer) : Integer
The maximum of i an i2.
post: if i >= i2 then result = i else result = i2 endif
i.min(i2 : Integer) : Integer
The minimum of i an i2.
post: if i <= i2 then result = i else result = i2 endif
7-34
OMG-UML V1.3
March 2000
7
7.8.1.7 String
The OCL type String represents ASCII strings.
Properties of String, where the instance of String is called string.
string = (string2 : String) : Boolean
True if string and string2 contain the same characters, in the same order.
string.size : Integer
The number of characters in string.
string.concat(string2 : String) : String
The concatenation of string and string2.
post: result.size = string.size + string2.size
post: result.substring(1, string.size) = string
post: result.substring(string.size + 1, result.size) = string2
string.toUpper : String
The value of string with all lowercase characters converted to uppercase
characters.
post: result.size = string.size
string.toLower : String
The value of string with all uppercase characters converted to lowercase
characters.
post: result.size = string.size
string.substring(lower : Integer, upper : Integer) : String
The sub-string of string starting at character number lower, up to and
including character number upper.
7.8.1.8 Boolean
The OCL type Boolean represents the common true/false values.
Features of Boolean, the instance of Boolean is called b.
b = (b2 : Boolean) : Boolean
Equal if b is the same as b2.
OMG-UML V1.3
Predefined OCL Types
March 2000
7-35
7
b or (b2 : Boolean) : Boolean
True if either b or b2 is true.
b xor (b2 : Boolean) : Boolean
True if either b or b2 is true, but not both.
post: (b or b2) and not (b = b2)
b and (b2 : Boolean) : Boolean
True if both b1 and b2 are true.
not b : Boolean
True if b is false.
post: if b then result = false else result = true endif
b implies (b2 : Boolean) : Boolean
True if b is false, or if b is true and b2 is true.
post: (not b) or (b and b2)
if b then (expression1 : OclExpression)
else (expression2 : OclExpression) endif : expression1.evaluationType
If b is true, the result is the value of evaluating expression1; otherwise,
result is the value of evaluating expression2.
7.8.1.9 Enumeration
The OCL type Enumeration represents the enumerations defined in an UML model.
7-36
OMG-UML V1.3
March 2000
7
Features of Enumeration, the instance of Enumeration is called enumeration.
enumeration = (enumeration2 : Boolean) : Boolean
Equal if enumeration is the same as enumeration2.
enumeration <> (enumeration2 : Boolean) : Boolean
Equal if enumeration is not the same as enumeration2.
post: result = not ( enumeration = enumeration2)
7.8.2 Collection-Related Types
The following sections define the properties on collections (i.e., these properties are
available on Set, Bag, and Sequence). As defined in this section, each collection type is
actually a template with one parameter. ‘T’ denotes the parameter. A real collection
type is created by substituting a type for the T. So Set (Integer) and Bag (Person) are
collection types.
7.8.2.1 Collection
Collection is the abstract supertype of all collection types in OCL. Each occurrence of
an object in a collection is called an element. If an object occurs twice in a collection,
there are two elements. This section defines the properties on Collections that have
identical semantics for all collection subtypes. Some properties may be defined with
the subtype as well, which means that there is an additional postcondition or a more
specialized return value.
The definition of several common properties is different for each subtype. These
properties are not mentioned in this section.
Properties of Collection, where the instance of Collection is called collection.
collection->size : Integer
The number of elements in the collection collection.
post: result = collection->iterate(elem; acc : Integer = 0 | acc + 1)
collection->includes(object : OclAny) : Boolean
True if object is an element of collection, false otherwise.
post: result = (collection->count(object) > 0)
OMG-UML V1.3
Predefined OCL Types
March 2000
7-37
7
collection->excludes(object : OclAny) : Boolean
True if object is not an element of collection, false otherwise.
post: result = (collection->count(object) = 0)
collection->count(object : OclAny) : Integer
The number of times that object occurs in the collection collection.
post: result = collection->iterate( elem; acc : Integer = 0 |
if elem = object then acc + 1 else acc endif)
collection->includesAll(c2 : Collection(T)) : Boolean
Does collection contain all the elements of c2 ?
post: result = c2->forAll(elem | collection->includes(elem))
collection->excludesAll(c2 : Collection(T)) : Boolean
Does collection contain none of the elements of c2 ?
post: result = c2->forAll(elem | collection->excludes(elem))
collection->isEmpty : Boolean
Is collection the empty collection?
post: result = ( collection->size = 0 )
collection->notEmpty : Boolean
Is collection not the empty collection?
post: result = ( collection->size <> 0 )
7-38
OMG-UML V1.3
March 2000
7
collection->sum : T
The addition of all elements in collection. Elements must be of a type
supporting the + operation. The + operation must take one parameter of type
T and be both associative: (a+b)+c = a+(b+c), and commutative: a+b = b+a.
Integer and Real fulfill this condition.
post: result = collection->iterate( elem; acc : T = 0 |
acc + elem )
collection->exists(expr : OclExpression) : Boolean
Results in true if expr evaluates to true for at least one element in collection.
post: result = collection->iterate(elem; acc : Boolean = false |
acc or expr)
collection->forAll(expr : OclExpression) : Boolean
Results in true if expr evaluates to true for each element in collection;
otherwise, result is false.
post: result = collection->iterate(elem; acc : Boolean = true |
acc and expr)
collection->isUnique(expr : OclExpression) : Boolean
Results in true if expr evaluates to a different value for each element in
collection; otherwise, result is false.
post: result = collection->collect(expr)->forAll(e1, e2 | e1 <> e2)
collection->sortedBy(expr : OclExpression) : Boolean
Results in the Sequence containing all elements of collection. The element for
which expr has the lowest value comes first, and so on. The type of the expr
expression must have the < operation defined. The < operation must be
transitive i.e. if a < b and b < c then a < c.
post:
OMG-UML V1.3
Predefined OCL Types
March 2000
7-39
7
collection->iterate(expr : OclExpression) : expr.evaluationType
Iterates over the collection. See “Iterate Operation” on page 7-26 for a
complete description. This is the basic collection operation with which the
other collection operations can be described.
7.8.2.2 Set
The Set is the mathematical set. It contains elements without duplicates. Features of
Set, the instance of Set is called set.
set->union(set2 : Set(T)) : Set(T)
The union of set and set2.
post: result->forAll(elem | set->includes(elem) or set2->includes(elem))
post: set->forAll(elem | result->includes(elem))
post: set2->forAll(elem | result->includes(elem))
set->union(bag : Bag(T)) : Bag(T)
The union of set and bag.
post: result->forAll(elem |
result->count(elem) = set->count(elem) + bag->count(elem))
post: set->forAll(elem | result->includes(elem))
post: bag->forAll(elem | result->includes(elem))
set = (set2 : Set(T)) : Boolean
Evaluates to true if set and set2 contain the same elements.
post: result = (set->forAll(elem | set2->includes(elem)) and
set2->forAll(elem | set->includes(elem)) )
set->intersection(set2 : Set(T)) : Set(T)
The intersection of set and set2 (i.e, the set of all elements that are in both set
and set2).
post: result->forAll(elem | set->includes(elem) and set2->includes(elem))
post: set->forAll(elem | set2->includes(elem) = result->includes(elem))
post: set2->forAll(elem | set->includes(elem) = result->includes(elem))
7-40
OMG-UML V1.3
March 2000
7
set->intersection(bag : Bag(T)) : Set(T)
The intersection of set and bag.
post: result = set->intersection( bag->asSet )
set – (set2 : Set(T)) : Set(T)
The elements of set, which are not in set2.
post: result->forAll(elem | set->includes(elem) and set2->excludes(elem))
post: set->forAll(elem | result->includes(elem) = set2->excludes(elem))
set->including(object : T) : Set(T)
The set containing all elements of set plus object.
post: result->forAll(elem | set->includes(elem) or (elem = object))
post: set->forAll(elem | result->includes(elem))
post: result->includes(object)
set->excluding(object : T) : Set(T)
The set containing all elements of set without object.
post: result->forAll(elem | set->includes(elem) and (elem <> object))
post: set->forAll(elem | result->includes(elem) = (object <> elem))
post: result->excludes(object)
set->symmetricDifference(set2 : Set(T)) : Set(T)
The sets containing all the elements that are in set or set2, but not in both.
post: result->forAll(elem | set->includes(elem) xor set2->includes(elem))
post: set->forAll(elem | result->includes(elem) = set2->excludes(elem))
post: set2->forAll(elem | result->includes(elem) = set->excludes(elem))
OMG-UML V1.3
Predefined OCL Types
March 2000
7-41
7
set->select(expr : OclExpression) : Set(T)
The subset of set for which expr is true.
post: result = set->iterate(elem; acc : Set(T) = Set{} |
if expr then acc->including(elem) else acc endif)
set->reject(expr : OclExpression) : Set(T)
The subset of set for which expr is false.
post: result = set->select(not expr)
set->collect(expr : OclExpression) : Bag(expr.evaluationType)
The Bag of elements which results from applying expr to every member of
set.
post: result = set->iterate(elem; acc : Bag(expr.evaluationType) = Bag{} |
acc->including(expr) )
set->count(object : T) : Integer
The number of occurrences of object in set.
post: result <= 1
set->asSequence : Sequence(T)
A Sequence that contains all the elements from set, in undefined order.
post: result->forAll(elem | set->includes(elem))
post: set->forAll(elem | result->count(elem) = 1)
set->asBag : Bag(T)
The Bag that contains all the elements from set.
post: result->forAll(elem | set->includes(elem))
post: set->forAll(elem | result->count(elem) = 1)
7-42
OMG-UML V1.3
March 2000
7
7.8.2.3 Bag
A bag is a collection with duplicates allowed. That is, one object can be an element of
a bag many times. There is no ordering defined on the elements in a bag.
Properties of Bag, where the instance of Bag is called bag.
bag = (bag2 : Bag(T)) : Boolean
True if bag and bag2 contain the same elements, the same number of times.
post: result = (bag->forAll(elem | bag->count(elem) = bag2->count(elem))
and
bag2->forAll(elem | bag2->count(elem) = bag->count(elem)) )
bag->union(bag2 : Bag(T)) : Bag(T)
The union of bag and bag2.
post: result->forAll( elem |
result->count(elem) = bag->count(elem) + bag2->count(elem))
post: bag->forAll( elem |
result->count(elem) = bag->count(elem) + bag2->count(elem))
post: bag2->forAll( elem |
result->count(elem) = bag->count(elem) + bag2->count(elem))
bag->union(set : Set(T)) : Bag(T)
The union of bag and set.
post: result->forAll(elem |
result->count(elem) = bag->count(elem) + set->count(elem))
post: bag->forAll(elem |
result->count(elem) = bag->count(elem) + set->count(elem))
post: set->forAll(elem |
result->count(elem) = bag->count(elem) + set->count(elem))
OMG-UML V1.3
Predefined OCL Types
March 2000
7-43
7
bag->intersection(bag2 : Bag(T)) : Bag(T)
The intersection of bag and bag2.
post: result->forAll(elem |
result->count(elem) = bag->count(elem).min(bag2->count(elem)) )
post: bag->forAll(elem |
result->count(elem) = bag->count(elem).min(bag2->count(elem)) )
post: bag2->forAll(elem |
result->count(elem) = bag->count(elem).min(bag2->count(elem)) )
bag->intersection(set : Set(T)) : Set(T)
The intersection of bag and set.
post: result->forAll(elem |
result->count(elem) = bag->count(elem).min(set->count(elem)) )
post: bag->forAll(elem |
result->count(elem) = bag->count(elem).min(set->count(elem)) )
post: set->forAll(elem |
result->count(elem) = bag->count(elem).min(set->count(elem)) )
bag->including(object : T) : Bag(T)
The bag containing all elements of bag plus object.
post: result->forAll(elem |
if elem = object then
result->count(elem) =
else
result->count(elem) =
endif)
post: bag->forAll(elem |
if elem = object then
result->count(elem) =
else
result->count(elem) =
endif)
7-44
OMG-UML V1.3
bag->count(elem) + 1
bag->count(elem)
bag->count(elem) + 1
bag->count(elem)
March 2000
7
bag->excluding(object : T) : Bag(T)
The bag containing all elements of bag apart from all occurrences of object.
post: result->forAll(elem |
if elem = object then
result->count(elem) =
else
result->count(elem) =
endif)
post: bag->forAll(elem |
if elem = object then
result->count(elem) =
else
result->count(elem) =
endif)
0
bag->count(elem)
0
bag->count(elem)
bag->select(expr : OclExpression) : Bag(T)
The sub-bag of bag for which expr is true.
post: result = bag->iterate(elem; acc : Bag(T) = Bag{} |
if expr then acc->including(elem) else acc endif)
bag->reject(expr : OclExpression) : Bag(T)
The sub-bag of bag for which expr is false.
post: result = bag->select(not expr)
bag->collect(expr: OclExpression) : Bag(expr.evaluationType)
The Bag of elements which results from applying expr to every member of
bag.
post: result = bag->iterate(elem; acc : Bag(expr.evaluationType) = Bag{} |
acc->including(expr) )
bag->count(object : T) : Integer
The number of occurrences of object in bag.
OMG-UML V1.3
Predefined OCL Types
March 2000
7-45
7
bag->asSequence : Sequence(T)
A Sequence that contains all the elements from bag, in undefined order.
post: result->forAll(elem | bag->count(elem) = result->count(elem))
post: bag->forAll(elem | bag->count(elem) = result->count(elem))
bag->asSet : Set(T)
The Set containing all the elements from bag, with duplicates removed.
post: result->forAll(elem | bag->includes(elem) )
post: bag->forAll(elem | result->includes(elem))
7.8.2.4 Sequence
A sequence is a collection where the elements are ordered. An element may be part of
a sequence more than once.
Properties of Sequence(T), where the instance of Sequence is called sequence.
sequence->count(object : T) : Integer
The number of occurrences of object in sequence.
sequence = (sequence2 : Sequence(T)) : Boolean
True if sequence contains the same elements as sequence2 in the same order.
post: result = Sequence{1..sequence->size}->forAll(index : Integer |
sequence->at(index) = sequence2->at(index))
and
sequence->size = sequence2->size
7-46
OMG-UML V1.3
March 2000
7
sequence->union (sequence2 : Sequence(T)) : Sequence(T)
The sequence consisting of all elements in sequence, followed by all elements
in sequence2.
post: result->size = sequence->size + sequence2->size
post: Sequence{1..sequence->size}->forAll(index : Integer |
sequence->at(index) = result->at(index))
post: Sequence{1..sequence2->size}->forAll(index : Integer |
sequence2->at(index) =
result->at(index + sequence->size)))
sequence->append (object: T) : Sequence(T)
The sequence of elements, consisting of all elements of sequence, followed by
object.
post: result->size = sequence->size + 1
post: result->at(result->size) = object
post: Sequence{1..sequence->size}->forAll(index : Integer |
result->at(index) = sequence ->at(index))
sequence->prepend(object : T) : Sequence(T)
The sequence consisting of object, followed by all elements in sequence.
post: result->size = sequence->size + 1
post: result->at(1) = object
post: Sequence{1..sequence->size}->forAll(index : Integer |
sequence->at(index) = result->at(index + 1))
OMG-UML V1.3
Predefined OCL Types
March 2000
7-47
7
sequence->subSequence(lower : Integer, upper : Integer) : Sequence(T)
The sub-sequence of sequence starting at number lower, up to and including
element number upper.
pre : 1 <= lower
pre : lower <= upper
pre : upper <= sequence->size
post: result->size = upper -lower + 1
post: Sequence{lower..upper}->forAll( index |
result->at(index - lower + 1) =
sequence->at(index))
endif
sequence->at(i : Integer) : T
The i-th element of sequence.
pre : i >= 1 and i <= sequence->size
sequence->first : T
The first element in sequence.
post: result = sequence->at(1)
sequence->last : T
The last element in sequence.
post: result = sequence->at(sequence->size)
sequence->including(object : T) : Sequence(T)
The sequence containing all elements of sequence plus object added as the
last element.
post: result = sequence.append(object)
7-48
OMG-UML V1.3
March 2000
7
sequence->excluding(object : T) : Sequence(T)
The sequence containing all elements of sequence apart from all occurrences
of object.
The order of the remaining elements is not changed.
post:result->includes(object) = false
post: result->size = sequence->size - sequence->count(object)
post: result = sequence->iterate(elem; acc : Sequence(T)
= Sequence{}|
if elem = object then acc else acc->append(elem) endif )
sequence->select(expression : OclExpression) : Sequence(T)
The subsequence of sequence for which expression is true.
post: result = sequence->iterate(elem; acc : Sequence(T) = Sequence{} |
if expr then acc->including(elem) else acc endif)
sequence->reject(expression : OclExpression) : Sequence(T)
The subsequence of sequence for which expression is false.
post: result = sequence->select(not expr)
sequence->collect(expression : OclExpression) :
Sequence(expression.evaluationType)
The Sequence of elements which results from applying expression to every
member of sequence.
sequence->iterate(expr : OclExpression) : expr.evaluationType
Iterates over the sequence. Iteration will be done from element at position 1
up until the element at the last position following the order of the sequence.
OMG-UML V1.3
Predefined OCL Types
March 2000
7-49
7
sequence->asBag() : Bag(T)
The Bag containing all the elements from sequence, including duplicates.
post: result->forAll(elem | sequence->count(elem) = result->count(elem) )
post: sequence->forAll(elem | sequence->count(elem) = result->count(elem) )
sequence->asSet() : Set(T)
The Set containing all the elements from sequence, with duplicated removed.
post: result->forAll(elem | sequence->includes(elem))
post: sequence->forAll(elem | result->includes(elem))
7.9 Grammar
This section describes the grammar for OCL expressions. An executable LL(1) version
of this grammar is available on the OCL web site. (See
http://www.software.ibm.com/ad/ocl).
The grammar description uses the EBNF syntax, where “|” means a choice, “?”
optionality, and “*” means zero or more times, + means one or more times. In the
description of the name, typeName, and string, the syntax for lexical tokens from the
JavaCC parser generator is used. (See http://www.suntest.com/JavaCC.)
constraint
:= contextDeclaration
(stereotype name? “:” expression)+
contextDeclaration
:= “context”
(classifierContext | operationContext)
classifierContext
:= (<name> “:”)? <typeName>
operationContext
:= <typeName> “::” <name>
“(“ formalParameterList? “)”
( “:” <typeName> )?
formalParameterList
formalParameter
:= formalParameter (“;” formalParameter)*
:= <name> “:” <typeName>
stereotype
:= “inv” | “pre” | “post”
expression
:= letExpression* logicalExpression
ifExpression
:= "if" expression
"then" expression
"else" expression
7-50
OMG-UML V1.3
March 2000
7
"endif"
logicalExpression := relationalExpression
( logicalOperator
relationalExpression )*
relationalExpression:= additiveExpression
( relationalOperator
additiveExpression )?
additiveExpression := multiplicativeExpression
( addOperator
multiplicativeExpression )*
multiplicativeExpression:= unaryExpression
( multiplyOperator unaryExpression )*
unaryExpression
:=
( unaryOperator postfixExpression )
| postfixExpression
postfixExpression := primaryExpression ( ("." | "->")
featureCall )*
primaryExpression := literalCollection
| literal
| pathName timeExpression? qualifier?
featureCallParameters?
| "(" expression ")"
| ifExpression
featureCallParameters:= "(" ( declarator )?
( actualParameterList )? ")"
letExpression
:= “let” <name>
( “:” pathTypeName )?
“=” expression “in”
literal
:= <STRING> | <number> | "#" <name>
enumerationType
:= "enum" "{" "#" <name> ( "," "#" <name>
)* "}"
simpleTypeSpecifier:= pathTypeName
| enumerationType
literalCollection := collectionKind "{"
expressionListOrRange? "}"
expressionListOrRange:= expression
( ( "," expression )+
| ( ".." expression )
)?
OMG-UML V1.3
Grammar
March 2000
7-51
7
featureCall
:= pathName timeExpression? qualifiers?
featureCallParameters?
qualifiers
:= "[" actualParameterList "]"
declarator
:= <name> ( "," <name> )*
( ":" simpleTypeSpecifier )? "|"
pathTypeName
:= <typeName> ( "::" <typeName> )*
pathName
:= ( <typeName> | <name> )
( "::" ( <typeName> | <name> ) )*
timeExpression
:= "@" <name>
actualParameterList:= expression ( "," expression )*
logicalOperator
:= "and" | "or" | "xor" | "implies"
collectionKind
:= "Set" | "Bag" | "Sequence" |
"Collection"
relationalOperator := "=" | ">" | "<" | ">=" | "<=" | "<>"
addOperator
:= "+" | "-"
multiplyOperator
:= "*" | "/"
unaryOperator
:= "-" | "not"
typeName
:= ( [“a”-”z”] | ["A"-"Z"] | “_” )
( ["a"-"z"] | ["0"-"9"] |
["A"-"Z"] | "_")*
name
:= ( [“a”-”z”] | ["A"-"Z"] | “_” )
( ["a"-"z"] | ["0"-"9"] |
["A"-"Z"] | "_")*
number
:= ["0"-"9"] (["0"-"9"])*
string
:= "'" ( (~["'","\\","\n","\r"])
| ("\\"
( ["n","t","b","r","f","\\","'","\""]
| ["0"-"7"] ( ["0"-"7"] )?
| ["0"-"3"] ["0"-"7"] ["0"-"7"]
)
)
)*
"'"
7-52
OMG-UML V1.3
March 2000
Glossary
This glossary defines the terms that are used to describe the Unified Modeling
Language (UML) and the Meta Object Facility (MOF). In addition to UML and MOF
specific terminology, it includes related terms from OMG standards and objectoriented analysis and design methods, as well as the domain of object repositories and
meta data managers. Glossary entries are organized alphabetically and MOF specific
entries are identified as ‘[MOF]’.
Notation Conventions
The entries in the glossary usually begin with a lowercase letter. An initial uppercase
letter is used when a word is usually capitalized in standard practice. Acronyms are all
capitalized, unless they traditionally appear in all lowercase.
When one or more words in a multi-word term is enclosed in brackets, it indicates that
those words are optional when referring to the term. For example, use case [class] may
be referred to as simply use case.
The following conventions are used in this glossary:
•
Contrast: <term>
Refers to a term that has an opposed or substantively different meaning.
•
See: <term>
Refers to a related term that has a similar, but not synonymous meaning.
•
Synonym: <term>
Indicates that the term has the same meaning as another term, which is referenced.
•
Acronym: <term>
Indicates that the term is an acronym. The reader is usually referred to the spelledout term for the definition, unless the spelled-out term is rarely used.
OMG-UML V1.3
March 2000
Glossary - 1
Glossary Terms
Glossary - 2
abstract class
A class that cannot be directly instantiated. Contrast:
concrete class.
abstraction
The essential characteristics of an entity that
distinguish it from all other kinds of entities. An
abstraction defines a boundary relative to the
perspective of the viewer.
action
The specification of an executable statement that
forms an abstraction of a computational procedure.
An action typically results in a change in the state of
the system, and can be realized by sending a message
to an object or modifying a link or a value of an
attribute.
action sequence
An expression that resolves to a sequence of actions.
action state
A state that represents the execution of an atomic
action, typically the invocation of an operation.
activation
The execution of an action.
active class
A class whose instances are active objects. See: active
object.
active object
An object that owns a thread and can initiate control
activity. An instance of active class. See: active class,
thread.
activity graph
A special case of a state machine that is used to
model processes involving one or more classifiers.
Contrast: statechart diagram.
actor [class]
A coherent set of roles that users of use cases play
when interacting with these use cases. An actor has
one role for each use case with which it
communicates.
actual parameter
Synonym: argument.
OMG-UML V1.3
March 2000
aggregate [class]
A class that represents the “whole” in an aggregation
(whole-part) relationship. See: aggregation.
aggregation
A special form of association that specifies a wholepart relationship between the aggregate (whole) and a
component part. See: composition.
analysis
The part of the software development process whose
primary purpose is to formulate a model of the
problem domain. Analysis focuses what to do, design
focuses on how to do it. Contrast: design.
analysis time
Refers to something that occurs during an analysis
phase of the software development process. See:
design time, modeling time.
architecture
The organizational structure and associated behavior
of a system. An architecture can be recursively
decomposed into parts that interact through interfaces,
relationships that connect parts, and constraints for
assembling parts. Parts that interact through interfaces
include classes, components and subsystems.
argument
A binding for a parameter that resolves to a run-time
instance. Synonym: actual parameter. Contrast:
parameter.
artifact
A piece of information that is used or produced by a
software development process. An artifact can be a
model, a description, or software. Synonym: product.
association
The semantic relationship between two or more
classifiers that specifies connections among their
instances.
association class
A model element that has both association and class
properties. An association class can be seen as an
association that also has class properties, or as a class
that also has association properties.
association end
The endpoint of an association, which connects the
association to a classifier.
OMG-UML V1.3
March 2000
Glossary - 3
Glossary - 4
attribute
A feature within a classifier that describes a range of
values that instances of the classifier may hold.
behavior
The observable effects of an operation or event,
including its results.
behavioral feature
A dynamic feature of a model element, such as an
operation or method.
behavioral model
aspect
A model aspect that emphasizes the behavior of the
instances in a system, including their methods,
collaborations, and state histories.
binary association
An association between two classes. A special case of
an n-ary association.
binding
The creation of a model element from a template by
supplying arguments for the parameters of the
template.
boolean
An enumeration whose values are true and false.
boolean expression
An expression that evaluates to a boolean value.
cardinality
The number of elements in a set. Contrast:
multiplicity.
child
In a generalization relationship, the specialization of
another element, the parent. See: subclass, subtype.
Contrast: parent.
call
An action state that invokes an operation on a
classifier.
class
A description of a set of objects that share the same
attributes, operations, methods, relationships, and
semantics. A class may use a set of interfaces to
specify collections of operations it provides to its
environment. See: interface.
classifier
A mechanism that describes behavioral and structural
features. Classifiers include interfaces, classes,
datatypes, and components.
OMG-UML V1.3
March 2000
classification
The assignment of an object to a classifier. See
dynamic classification, multiple classification and
static classification.
class diagram
A diagram that shows a collection of declarative
(static) model elements, such as classes, types, and
their contents and relationships.
client
A classifier that requests a service from another
classifier. Contrast: supplier.
collaboration
The specification of how an operation or classifier,
such as a use case, is realized by a set of classifiers
and associations playing specific roles used in a
specific way. The collaboration defines an interaction.
See: interaction.
collaboration diagram
A diagram that shows interactions organized around
the structure of a model, using either classifiers and
associations or instances and links. Unlike a sequence
diagram, a collaboration diagram shows the
relationships among the instances. Sequence diagrams
and collaboration diagrams express similar
information, but show it in different ways. See:
sequence diagram.
comment
An annotation attached to an element or a collection
of elements. A note has no semantics. Contrast:
constraint.
compile time
Refers to something that occurs during the
compilation of a software module. See: modeling
time, run time.
component
A physical, replaceable part of a system that packages
implementation and provides the realization of a set
of interfaces. A component represents a physical
piece of implementation of a system, including
software code (source, binary or executable) or
equivalents such as scripts or command files.
OMG-UML V1.3
March 2000
Glossary - 5
Glossary - 6
component diagram
A diagram that shows the organizations and
dependencies among components.
composite [class]
A class that is related to one or more classes by a
composition relationship. See: composition.
composite
aggregation
Synonym: composition.
composite state
A state that consists of either concurrent (orthogonal)
substates or sequential (disjoint) substates. See:
substate.
composition
A form of aggregation association with strong
ownership and coincident lifetime as part of the
whole. Parts with non-fixed multiplicity may be
created after the composite itself, but once created
they live and die with it (i.e., they share lifetimes).
Such parts can also be explicitly removed before the
death of the composite. Composition may be
recursive. Synonym: composite aggregation.
concrete class
A class that can be directly instantiated. Contrast:
abstract class.
concurrency
The occurrence of two or more activities during the
same time interval. Concurrency can be achieved by
interleaving or simultaneously executing two or more
threads. See: thread.
concurrent substate
A substate that can be held simultaneously with other
substates contained in the same composite state. See:
composite state. Contrast: disjoint substate.
constraint
A semantic condition or restriction. Certain
constraints are predefined in the UML, others may be
user defined. Constraints are one of three extensibility
mechanisms in UML. See: tagged value, stereotype.
container
1. An instance that exists to contain other instances,
and that provides operations to access or iterate over
its contents. (for example, arrays, lists, sets). 2. A
component that exists to contain other components.
OMG-UML V1.3
March 2000
containment
hierarchy
A namespace hierarchy consisting of model elements,
and the containment relationships that exist between
them. A containment hierarchy forms a graph.
context
A view of a set of related modeling elements for a
particular purpose, such as specifying an operation.
datatype
A descriptor of a set of values that lack identity and
whose operations do not have side effects. Datatypes
include primitive pre-defined types and user-definable
types. Pre-defined types include numbers, string and
time. User-definable types include enumerations.
defining model [MOF]
The model on which a repository is based. Any
number of repositories can have the same defining
model.
delegation
The ability of an object to issue a message to another
object in response to a message. Delegation can be
used as an alternative to inheritance. Contrast:
inheritance.
dependency
A relationship between two modeling elements, in
which a change to one modeling element (the
independent element) will affect the other modeling
element (the dependent element).
deployment diagram
A diagram that shows the configuration of run-time
processing nodes and the components, processes, and
objects that live on them. Components represent runtime manifestations of code units. See: component
diagrams.
derived element
A model element that can be computed from another
element, but that is shown for clarity or that is
included for design purposes even though it adds no
semantic information.
OMG-UML V1.3
March 2000
Glossary - 7
Glossary - 8
design
The part of the software development process whose
primary purpose is to decide how the system will be
implemented. During design strategic and tactical
decisions are made to meet the required functional
and quality requirements of a system.
design time
Refers to something that occurs during a design phase
of the software development process. See: modeling
time. Contrast: analysis time.
development process
A set of partially ordered steps performed for a given
purpose during software development, such as
constructing models or implementing models.
diagram
A graphical presentation of a collection of model
elements, most often rendered as a connected graph of
arcs (relationships) and vertices (other model
elements). UML supports the following diagrams:
class diagram, object diagram, use case diagram,
sequence diagram, collaboration diagram, state
diagram, activity diagram, component diagram, and
deployment diagram.
disjoint substate
A substate that cannot be held simultaneously with
other substates contained in the same composite state.
See: composite state. Contrast: concurrent substate.
distribution unit
A set of objects or components that are allocated to a
process or a processor as a group. A distribution unit
can be represented by a run-time composite or an
aggregate.
domain
An area of knowledge or activity characterized by a
set of concepts and terminology understood by
practitioners in that area.
dynamic
classification
A semantic variation of generalization in which an
object may change its classifier. Contrast: static
classification.
element
An atomic constituent of a model.
OMG-UML V1.3
March 2000
entry action
An action executed upon entering a state in a state
machine
regardless of the transition taken to reach that state.
enumeration
A list of named values used as the range of a
particular attribute type. For example, RGBColor =
{red, green, blue}. Boolean is a predefined
enumeration with values from the set {false, true}.
event
The specification of a significant occurrence that has
a location in time and space. In the context of state
diagrams, an event is an occurrence that can trigger a
transition.
exit action
An action executed upon exiting a state in a state
machine
regardless of the transition taken to exit that state.
export
In the context of packages, to make an element visible
outside its enclosing namespace. See: visibility.
Contrast: export [OMA], import.
expression
A string that evaluates to a value of a particular type.
For example, the expression “(7 + 5 * 3)” evaluates to
a value of type number.
extend
A relationship from an extension use case to a base
use case, specifying how the behavior defined for the
extension use case augments (subject to conditions
specified in the extension) the behavior defined for
the base use case. The behavior is inserted at the
location defined by the extension point in the base use
case. The base use case does not depend on
performing the behavior of the extension use case.
See extension point, include.
facade
A stereotyped package containing only references to
model elements owned by another package. It is used
to provide a ‘public view’ of some of the contents of
a package.
feature
A property, like operation or attribute, which is
encapsulated within a classifier, such as an interface, a
class, or a datatype.
OMG-UML V1.3
March 2000
Glossary - 9
final state
A special kind of state signifying that the enclosing
composite state or the entire state machine is
completed.
fire
To execute a state transition. See: transition.
focus of control
A symbol on a sequence diagram that shows the
period of time during which an object is performing
an action, either directly or through a subordinate
procedure.
formal parameter
Synonym: parameter.
framework
1. A stereotyped package consisting mainly of
patterns. See: pattern.
2. An architectural pattern that provides an extensible
template for for applications within a specific domain.
Glossary - 10
generalizable element
A model element that may participate in a
generalization relationship. See: generalization.
generalization
A taxonomic relationship between a more general
element and a more specific element. The more
specific element is fully consistent with the more
general element and contains additional information.
An instance of the more specific element may be used
where the more general element is allowed. See:
inheritance.
guard condition
A condition that must be satisfied in order to enable
an associated transition to fire.
implementation
A definition of how something is constructed or
computed. For example, a class is an implementation
of a type, a method is an implementation of an
operation.
implementation
inheritance
The inheritance of the implementation of a more
specific element. Includes inheritance of the interface.
Contrast: interface inheritance.
OMG-UML V1.3
March 2000
import
In the context of packages, a dependency that shows
the packages whose classes may be referenced within
a given package (including packages recursively
embedded within it). Contrast: export.
include
A relationship from a base use case to an inclusion
use case, specifying how the behavior for the base use
case contains the behavior of the inclusion use case.
The behavior is included at the location which is
defined in the base use case. The base use case
depends on performing the behavior of the inclusion
use case, but not on its structure (i.e., attributes or
operations). See extend.
inheritance
The mechanism by which more specific elements
incorporate structure and behavior of more general
elements related by behavior. See generalization.
instance
An entity to which a set of operations can be applied
and which has a state that stores the effects of the
operations. See: object.
interaction
A specification of how stimuli are sent between
instances to perform a specific task. The interaction is
defined in the context of a collaboration. See
collaboration.
interaction diagram
A generic term that applies to several types of
diagrams that emphasize object interactions. These
include collaboration diagrams and sequence
diagrams.
interface
A named set of operations that characterize the
behavior of an element.
interface inheritance
The inheritance of the interface of a more specific
element. Does not include inheritance of the
implementation. Contrast: implementation
inheritance.
internal transition
A transition signifying a response to an event without
changing the state of an object.
OMG-UML V1.3
March 2000
Glossary - 11
layer
The organization of classifiers or packages at the
same level of abstraction. A layer represents a
horizontal slice through an architecture, whereas a
partition represents a vertical slice. Contrast:
partition.
link
A semantic connection among a tuple of objects. An
instance of an association. See: association.
link end
An instance of an association end. See: association
end.
message
A specification of the conveyance of information from
one instance to another, with the expectation that
activity will ensue. A message may specify the raising
of a signal or the call of an operation.
metaclass
A class whose instances are classes. Metaclasses are
typically used to construct metamodels.
meta-metamodel
A model that defines the language for expressing a
metamodel. The relationship between a metametamodel and a metamodel is analogous to the
relationship between a metamodel and a model.
metamodel
A model that defines the language for expressing a
model.
metaobject
A generic term for all metaentities in a metamodeling
language. For example, metatypes, metaclasses,
metaattributes, and metaassociations.
method
The implementation of an operation. It specifies the
algorithm or procedure associated with an operation.
model
An abstraction of a physical system, with a certain
purpose.. See: physical system.
[MOF]
Usage note: In the context of the MOF specification,
which describes a meta-metamodel, for brevity the
meta-metamodel is frequently to as simply the model.
Glossary - 12
OMG-UML V1.3
March 2000
model aspect
A dimension of modeling that emphasizes particular
qualities of the metamodel. For example, the
structural model aspect emphasizes the structural
qualities of the metamodel.
model elaboration
The process of generating a repository type from a
published model. Includes the generation of interfaces
and implementations which allows repositories to be
instantiated and populated based on, and in
compliance with, the model elaborated.
model element
An element that is an abstraction drawn from the
system being modeled. Contrast: view element.
[MOF]
In the MOF specification model elements are
considered to be metaobjects.
modeling time
Refers to something that occurs during a modeling
phase of the software development process. It
includes analysis time and design time. Usage note:
When discussing object systems, it is often important
to distinguish between modeling-time and run-time
concerns. See: analysis time, design time. Contrast:
run time.
module
A software unit of storage and manipulation. Modules
include source code modules, binary code modules,
and executable code modules. See: component.
multiple classification
A semantic variation of generalization in which an
object may belong directly to more than one classifier.
See: static classification, dynamic classification.
multiple inheritance
A semantic variation of generalization in which a type
may have more than one supertype. Contrast: single
inheritance.
OMG-UML V1.3
March 2000
Glossary - 13
Glossary - 14
multiplicity
A specification of the range of allowable cardinalities
that a set may assume. Multiplicity specifications may
be given for roles within associations, parts within
composites, repetitions, and other purposes.
Essentially a multiplicity is a (possibly infinite) subset
of the non-negative integers. Contrast: cardinality.
multi-valued [MOF]
A model element with multiplicity defined whose
Multiplicity Type:: upper attribute is set to a number
greater than one. The term multi-valued does not
pertain to the number of values held by an attribute,
parameter, etc. at any point in time. Contrast: singlevalued.
n-ary association
An association among three or more classes. Each
instance of the association is an n-tuple of values
from the respective classes. Contrast: binary
association.
name
A string used to identify a model element.
namespace
A part of the model in which the names may be
defined and used. Within a namespace, each name has
a unique meaning. See: name.
node
A node is classifier that represents a run-time
computational resource, which generally has at least a
memory and often processing capability. Run-time
objects and components may reside on nodes.
object
An entity with a well-defined boundary and identity
that encapsulates state and behavior. State is
represented by attributes and relationships, behavior is
represented by operations, methods, and state
machines. An object is an instance of a class. See:
class, instance.
object diagram
A diagram that encompasses objects and their
relationships at a point in time. An object diagram
may be considered a special case of a class diagram
or a collaboration diagram. See: class diagram,
collaboration diagram.
OMG-UML V1.3
March 2000
object flow state
A state in an activity graph that represents the passing
of an object from the output of actions in one state to
the input of actions in another state.
object lifeline
A line in a sequence diagram that represents the
existence of an object over a period of time. See:
sequence diagram.
operation
A service that can be requested from an object to
effect behavior. An operation has a signature, which
may restrict the actual parameters that are possible.
package
A general purpose mechanism for organizing
elements into groups. Packages may be nested within
other packages.
parameter
The specification of a variable that can be changed,
passed, or returned. A parameter may include a name,
type, and direction. Parameters are used for
operations, messages, and events. Synonyms: formal
parameter. Contrast: argument.
parameterized
element
The descriptor for a class with one or more unbound
parameters. Synonym: template.
parent
In a generalization relationship, the generalization of
another element, the child. See: subclass, subtype.
Contrast: child.
participate
The connection of a model element to a relationship
or to a reified relationship. For example, a class
participates in an association, an actor participates in
a use case.
partition
1. activity graphs: A portion of an activity graphs that
organizes the responsibilities for actions. See:
swimlane.
2. architecture: A set of related classifiers or packages
at the same level of abstraction or across layers in a
layered architecture. A partition represents a vertical
slice through an architecture, whereas a layer
represents a horizontal slice. Contrast: layer.
pattern
A template collaboration.
OMG-UML V1.3
March 2000
Glossary - 15
Glossary - 16
persistent object
An object that exists after the process or thread that
created it has ceased to exist.
postcondition
A constraint that must be true at the completion of an
operation.
precondition
A constraint that must be true when an operation is
invoked.
primitive type
A pre-defined basic datatype without any
substructure, such as an integer or a string.
process
1. A heavyweight unit of concurrency and execution
in an operating system. Contrast: thread, which
includes heavyweight and lightweight processes. If
necessary, an implementation distinction can be made
using stereotypes.
2. A software development process—the steps and
guidelines by which to develop a system.
3. To execute an algorithm or otherwise handle
something dynamically.
projection
A mapping from a set to a subset of it.
property
A named value denoting a characteristic of an
element. A property has semantic impact. Certain
properties are predefined in the UML; others may be
user defined. See: tagged value.
pseudo-state
A vertex in a state machine that has the form of a
state, but doesn’t behave as a state. Pseudo-states
include initial and history vertices.
physical system
1. The subject of a model.
2. A collection of connected physical units, which can
include software, hardware and people, that are
organized to accomplish a specific purpose. A
physical system can be described by one or more
models, possibly from different viewpoints. Contrast:
system.
OMG-UML V1.3
March 2000
published model
[MOF]
A model which has been frozen, and becomes
available for instantiating repositories and for the
support in defining other models. A frozen model’s
model elements cannot be changed.
qualifier
An association attribute or tuple of attributes whose
values partition the set of objects related to an object
across an association.
receive [a message]
The handling of a stimulus passed from a sender
instance. See: sender, receiver.
receiver [object]
The object handling a stimulus passed from a sender
object. Contrast: sender.
reception
A declaration that a classifier is prepared to react to
the receipt of a signal.
reference
1. A denotation of a model element.
2. A named slot within a classifier that facilitates
navigation to other classifiers. Synonym: pointer.
refinement
A relationship that represents a fuller specification of
something that has already been specified at a certain
level of detail. For example, a design class is a
refinement of an analysis class.
relationship
A semantic connection among model elements.
Examples of relationships include associations and
generalizations.
repository
A facility for storing object models, interfaces, and
implementations.
requirement
A desired feature, property, or behavior of a system.
responsibility
A contract or obligation of a classifier.
reuse
The use of a pre-existing artifact.
OMG-UML V1.3
March 2000
Glossary - 17
Glossary - 18
role
The named specific behavior of an entity participating
in a particular context. A role may be static (e.g., an
association end) or dynamic (e.g., a collaboration
role).
run time
The period of time during which a computer program
executes. Contrast: modeling time.
scenario
A specific sequence of actions that illustrates
behaviors. A scenario may be used to illustrate an
interaction or the execution of a use case instance.
See: interaction.
schema [MOF]
In the context of the MOF, a schema is analogous to a
package which is a container of model elements.
Schema corresponds to an MOF package. Contrast:
metamodel, package.
semantic variation
point
A point of variation in the semantics of a metamodel.
It provides an intentional degree of freedom for the
interpretation of the metamodel semantics.
send [a message]
The passing of a stimulus from a sender instance to a
receiver instance. See: sender, receiver.
sender [object]
The object passing a stimulus to a receiver object.
Contrast: receiver.
sequence diagram
A diagram that shows object interactions arranged in
time sequence. In particular, it shows the objects
participating in the interaction and the sequence of
messages exchanged. Unlike a collaboration diagram,
a sequence diagram includes time sequences but does
not include object relationships. A sequence diagram
can exist in a generic form (describes all possible
scenarios) and in an instance form (describes one
actual scenario). Sequence diagrams and collaboration
diagrams express similar information, but show it in
different ways. See: collaboration diagram.
OMG-UML V1.3
March 2000
signal
The specification of an asynchronous stimulus
communicated between instances. Signals may have
parameters.
signature
The name and parameters of a behavioral feature. A
signature may include an optional returned parameter.
single inheritance
A semantic variation of generalization in which a type
may have only one supertype. Synonym: multiple
inheritance [OMA]. Contrast: multiple inheritance.
single valued [MOF]
A model element with multiplicity defined is single
valued when its Multiplicity Type:: upper attribute is
set to one. The term single-valued does not pertain to
the number of values held by an attribute, parameter,
etc., at any point in time, since a single-valued
attribute (for instance, with a multiplicity lower bound
of zero) may have no value. Contrast: multi-valued.
specification
A declarative description of what something is or
does. Contrast: implementation.
state
A condition or situation during the life of an object
during which it satisfies some condition, performs
some activity, or waits for some event. Contrast: state
[OMA].
statechart diagram
A diagram that shows a state machine. See: state
machine.
state machine
A behavior that specifies the sequences of states that
an object or an interaction goes through during its life
in response to events, together with its responses and
actions.
static classification
A semantic variation of generalization in which an
object may not change classifier. Contrast: dynamic
classification.
OMG-UML V1.3
March 2000
Glossary - 19
Glossary - 20
stereotype
A new type of modeling element that extends the
semantics of the metamodel. Stereotypes must be
based on certain existing types or classes in the
metamodel. Stereotypes may extend the semantics,
but not the structure of pre-existing types and classes.
Certain stereotypes are predefined in the UML, others
may be user defined. Stereotypes are one of three
extensibility mechanisms in UML. See: constraint,
tagged value.
stimulus
The passing of information from one instance to
another, such as raising a signal or invoking an
operation. The receipt of a signal is normally
considered an event. See: message.
string
A sequence of text characters. The details of string
representation depend on implementation, and may
include character sets that support international
characters and graphics.
structural feature
A static feature of a model element, such as an
attribute.
structural model
aspect
A model aspect that emphasizes the structure of the
objects in a system, including their types, classes,
relationships, attributes, and operations.
subactivity state
A state in an activity graph that represents the
execution of a non-atomic sequence of steps that has
some duration.
subclass
In a generalization relationship, the specialization of
another class; the superclass. See: generalization.
Contrast: superclass.
submachine state
A state in a state machine which is equivalent to a
composite state but its contents is described by
another state machine.
substate
A state that is part of a composite state. See:
concurrent state, disjoint state.
subpackage
A package that is contained in another package.
OMG-UML V1.3
March 2000
subsystem
A grouping of model elements that represents a
behavioral unit in a physical system. A subsystem
offers interfaces and has operations. In addition, the
model elements of a subsystem can be partitioned into
specification and realization elements. See package.
See: physical system.
subtype
In a generalization relationship, the specialization of
another type; the supertype. See: generalization.
Contrast: supertype.
superclass
In a generalization relationship, the generalization of
another class; the subclass. See: generalization.
Contrast: subclass.
supertype
In a generalization relationship, the generalization of
another type; the subtype. See: generalization.
Contrast: subtype.
supplier
A classifier that provides services that can be invoked
by others. Contrast: client.
swimlane
A partition on a activity diagram for organizing the
responsibilities for actions. Swimlanes typically
correspond to organizational units in a business
model. See: partition.
synch state
A vertex in a state machine used for synchronizing
the
concurrent regions of a state machine.
system
A top-level subsystem in a model. Contrast: physical
system.
tagged value
The explicit definition of a property as a name-value
pair. In a tagged value, the name is referred as the tag.
Certain tags are predefined in the UML; others may
be user defined. Tagged values are one of three
extensibility mechanisms in UML. See: constraint,
stereotype.
template
Synonym: parameterized element.
OMG-UML V1.3
March 2000
Glossary - 21
Glossary - 22
thread [of control]
A single path of execution through a program, a
dynamic model, or some other representation of
control flow. Also, a stereotype for the
implementation of an active object as lightweight
process. See process.
time event
An event that denotes the time elapsed since the
current state was entered. See: event.
time expression
An expression that resolves to an absolute or relative
value of time.
timing mark
A denotation for the time at which an event or
message occurs. Timing marks may be used in
constraints.
top level
A stereotype of package denoting the top-most
package in a containment hierarchy. The topLevel
stereotype defines the outer limit for looking up
names, as namespaces “see” outwards. For example,
opLevel subsystem represents the top of the
subsystem containment hierarchy.
trace
A dependency that indicates a historical or process
relationship between two elements that represent the
same concept without specific rules for deriving one
from the other.
transient object
An object that exists only during the execution of the
process or thread that created it.
transition
A relationship between two states indicating that an
object in the first state will perform certain specified
actions and enter the second state when a specified
event occurs and specified conditions are satisfied. On
such a change of state, the transition is said to fire.
type
A stereotype of class that is used to specify a domain
of instances (objects) together with the operations
applicable to the objects. A type may not contain any
methods. See: class, instance. Contrast: interface.
OMG-UML V1.3
March 2000
type expression
An expression that evaluates to a reference to one or
more types.
uninterpreted
A placeholder for a type or types whose
implementation is not specified by the UML. Every
uninterpreted value has a corresponding string
representation. See: any [CORBA].
usage
A dependency in which one element (the client)
requires the presence of another element (the
supplier) for its correct functioning or
implementation.
use case [class]
The specification of a sequence of actions, including
variants, that a system (or other entity) can perform,
interacting with actors of the system. See: use case
instances.
use case diagram
A diagram that shows the relationships among actors
and use cases within a system.
use case instance
The performance of a sequence of actions being
specified in a use case. An instance of a use case. See:
use case class.
use case model
A model that describes a system’s functional
requirements in terms of use cases.
utility
A stereotype that groups global variables and
procedures in the form of a class declaration. The
utility attributes and operations become global
variables and global procedures, respectively. A utility
is not a fundamental modeling construct, but a
programming convenience.
value
An element of a type domain.
vertex
A source or a target for a transition in a state machine.
A vertex can be either a state or a pseudo-state. See:
state, pseudo-state.
OMG-UML V1.3
March 2000
Glossary - 23
Glossary - 24
view
A projection of a model, which is seen from a given
perspective or vantage point and omits entities that are
not relevant to this perspective.
view element
A view element is a textual and/or graphical
projection of a collection of model elements.
view projection
A projection of model elements onto view elements.
A view projection provides a location and a style for
each view element.
visibility
An enumeration whose value (public, protected, or
private) denotes how the model element to which it
refers may be seen outside its enclosing namespace.
OMG-UML V1.3
March 2000
A
UML Standard Elements
This appendix contains a list of the predefined standard elements for UML. The
standard elements are stereotypes, constraints and tagged values. The names used for
UML predefined standard elements are considered reserved words; modelers should
not use overload these names with different definitions. Each standard element is
described in the chapter containing its base element.
Standard Element
Name
Applies to Base
Element
Kind
«access»
Permission
Stereotype
association
Association
Constraint
«association»
AssociationEnd
Stereotype
«become»
Flow
Stereotype
«call»
Usage
Stereotype
complete
Generalization
Constraint
«copy»
Flow
Stereotype
«create»
BehavioralFeature
Stereotype
«create»
CallEvent
Stereotype
«create»
Usage
Stereotype
«derive»
Abstraction
Stereotype
derived
ModelElement
Tag
«destroy»
BehavioralFeature
Stereotype
«destroy»
CallEvent
Stereotype
destroyed
Association
Constraint
destroyed
Association
Constraint
OMG-UML V1.3
March 2000
A-1
A-2
Standard Element
Name
Applies to Base
Element
Kind
disjoint
Generalization
Constraint
«document»
Component
Stereotype
documentation
Element
Tag
«executable»
Component
Stereotype
«facade»
Package
Stereotype
«file»
Component
Stereotype
«framework»
Package
Stereotype
«friend»
Permission
Stereotype
global
Association
Constraint
«global»
AssociationEnd
Stereotype
«implementation»
Generalization
Stereotype
«implementationClass»
Class
Stereotype
implicit
Association
Stereotype
«import»
Permission
Stereotype
incomplete
Generalization
Constraint
«instantiate»
Usage
Stereotype
«invariant»
Constraint
Stereotype
«library»
Component
Stereotype
local
Association
Constraint
«local»
AssociationEnd
Stereotype
«metaclass»
Classifier
Stereotype
«metamodel»
Package
Stereotype
new
Association
Constraint
new
Association
Constraint
overlapping
Generalization
Constraint
parameter
Association
Constraint
«parameter»
AssociationEnd
Stereotype
persistence
Association
Tag
persistence
Attribute
Tag
persistence
Classifier
Tag
persistent
Association
Tag
«postcondition»
Constraint
Stereotype
OMG-UML V1.3
March 2000
Standard Element
Name
Applies to Base
Element
Kind
«powertype»
Classifier
Stereotype
«precondition»
Constraint
Stereotype
«process»
Classifier
Stereotype
«realize»
Abstraction
Stereotype
«refine»
Abstraction
Stereotype
«requirement»
Comment
Stereotype
«responsibility»
Comment
Stereotype
self
Association
Constraint
«self»
AssociationEnd
Stereotype
semantics
Classifier
Tag
semantics
Operation
Tag
«send»
Usage
Stereotype
«signalflow»
ObjectFlowState
Stereotype
«stub»
Package
Stereotype
«systemModel»
Package
Stereotype
«table»
Component
Stereotype
«thread»
Classifier
Stereotype
«topLevel»
Package
Stereotype
«trace»
Abstraction
Stereotype
transient
Association
Constraint
transient
Association
Constraint
«type»
Class
Stereotype
«utility»
Classifier
Stereotype
xor
Association
Constraint
OMG-UML V1.3
March 2000
A-3
A-4
OMG-UML V1.3
March 2000
Index
A
abstract class 3-35
abstract operation 3-42
abstract syntax section 2-9
Abstraction 2-17
access 3-55, 3-83
access (Permission) 2-44, 2-179, 2-182
accessing a package 3-55
accessing elements 2-43
Action 2-89, 2-98, 2-105, 2-118
action (ActionSequence) 2-90
action (Message) 2-110
action expression 3-135
action state 3-148
ActionExpression 2-78
action-object flow relationships 3-153
ActionSequence 2-90, 2-98
ActionState 2-162, 2-166, 2-168
activation 3-100, 3-101
activator (Message) 2-110, 2-119
active class 2-26
active object 3-118
active state 2-145
active state configuration 2-146
activity diagram 3-145
activity graph 3-145
Activity Graphs Package 2-160
activity in a state 2-146
activity state 3-148, 3-149
ActivityGraph 2-161, 2-165, 2-168
Actor 2-120, 2-123, 2-125
actor 3-90
actor relationship 3-92
actualArgument (Action) 2-90
addition (Include) 2-122
addOnly (ChangeableKind) 2-21, 2-24, 2-80
addOnly (keyword) 3-66
adornment
on association 3-61
order 3-67
after (keyword) 3-133
aggregate (AggregationKind) 2-21, 2-78
aggregation 3-65
aggregation (AssociationEnd) 2-21, 2-60
AggregationKind 2-78
alias (ElementImport) 2-172
angle bracket
for binding argument 3-51
annotatedElement (Comment) 2-29
architecture of metamodel 2-3
ArgListsExpression 2-79
Argument 2-90, 2-98
argument (Binding) 2-26
argument (Stimulus) 2-97
argument list 3-123
arrow
dashed
for constraint 3-25
for dependency 3-82
for extend 3-91
for flow relationship 3-58
for include 3-91
for instance of 3-86
for object flow 3-153
for realization 3-45
for return 3-103
solid
for call 3-102
for generalization 3-78
for message 3-102
for navigation 3-66
for sending signal 3-102
for transition 3-135
Artifacts 1-2
development project 1-2
UML-defining Artifacts 1-2
artifacts
UML-defining 1-2
AssignmentAction 2-98, 2-105
Association 2-19, 2-46, 2-59
association 3-61
association (AssociationEnd) 2-23
association (keyword) 3-77
association (Link) 2-94
association (LinkEnd) 2-94
association class 3-62, 3-70
association end 3-61, 3-64
association name 3-61
association role 3-105, 3-115
AssociationClass 2-20, 2-47, 2-61
AssociationEnd 2-20, 2-47, 2-59
associationEnd (Attribute) 2-24
associationEnd (LinkEnd) 2-94
AssociationEndRole 2-107, 2-111
AssociationRole 2-108, 2-111, 2-116
Attribute 2-23, 2-47
attribute 3-35, 3-38
in object 3-58
attribute (AttributeLink) 2-91
AttributeLink 2-91, 2-98
availableContents (ClassifierRole) 2-109
availableFeature (ClassifierRole) 2-109
availableQualifier (AssociationEndRole) 2-108
B
Bag 7-43
bar
for stub state 3-142
for stubbed transition 3-138
for synchronization, fork, join 3-136
base (AssociationEndRole) 2-108
base (AssociationRole) 2-108
base (ClassifierRole) 2-109
base (Extend) 2-121
base (Include) 2-122
baseClass (Stereotype) 2-72
Basic Values and Types 7-6
become (Flow) 2-34
become (keyword) 3-58
behavior
of operation as note 3-43
Behavioral Elements Package 2-85
OMG-UML V1.3
March 2000
Index-1
Index
BehavioralFeature 2-25, 2-48
binary association 3-61
bind (keyword) 3-83
Binding 2-25, 2-40, 2-48, 2-67
binding 3-50
body (Constraint) 2-30, 2-71
body (Expression) 2-80
body (Mapping) 2-81
body (Method) 2-38
body (Name) 2-82
boldface
for class name 3-33
for compartment name 3-36
for special list element 3-34
Boolean 2-79, 7-35
Boolean property 3-28
BooleanExpression 2-79
bound (SynchState) 2-139, 2-154
bound element 3-50
braces
for constraint 3-25, 3-26
for property string 3-27, 3-35, 3-39
branch 3-150
branch point 3-140
bull’s eye
for final state 3-131
C
call 3-99
call (Usage) 2-46
call event 3-133
CallAction 2-91, 2-98, 2-105, 2-118
CallConcurrencyKind 2-79
CallEvent 2-132
CallState 2-163, 2-166
chain of transitions 3-140
changeability 3-66
changeability (AssociationEnd) 2-21
changeability (Attribute) 2-24
changeable (ChangeableKind) 2-21, 2-24, 2-80
ChangeableKind 2-80
ChangeEvent 2-133
changeExpression (ChangeEvent) 2-133
child (Generalization) 2-36
choice (PseudostateKind) 2-83, 2-136
circle
bull’s eye
for final state 3-131
filled
for initial state 3-130
for history state 3-138
for interface 3-47
for junction 3-140
for synch state 3-144
Class 2-26, 2-49, 2-61
class 3-32
declared in another class 3-74
class diagram 3-31
class in state 3-58
class scope
attribute 3-39
Index-2
OMG-UML V1.3
operation 3-42
Classifier 2-27, 2-49
classifier 3-32
classifier (Instance) 2-93
classifier (ScopeKind) 2-24, 2-33, 2-84
classifier role 3-105, 3-115
ClassifierInState 2-163
ClassifierRole 2-108, 2-112, 2-115
client (Dependency) 2-31
clientDependency (ModelElement) 2-39
Collaboration 2-106, 2-109, 2-112, 2-115, 2-118
collaboration 3-105, 3-107, 3-112
collaboration diagram 3-105, 3-107, 3-109
collaboration role 3-114
collaborationMultiplicity (AssociationEndRole) 2-108
Collaborations Package 2-106
Collect Operation 7-24
Collection 7-37
Collection Operations 7-22
Collection Type Hierarchy and Type Conformance Rules 7-20
Collection-Related Typed 7-37
Collections 7-19
Collections of Collections 7-20
colon
for return type 3-41
for sequence expression 3-121
for type 3-39, 3-42, 3-49, 3-54, 3-58, 3-65, 3-74, 3-115, 3-163,
3-165
Combining Properties 7-14
Comment 2-28, 2-52, 7-10
comment 3-25, 3-26
Common Behavior Package 2-86
communication association 3-90, 3-92
communication relationship 2-122, 2-127
communicationConnection (Message) 2-110
communicationLink (Stimulus) 2-97
compartment 3-35
name 3-36
special 3-33
complete (Generalization) 2-37
complete (keyword) 3-79
completion event 2-149
completion transition 2-149
complex transition 3-136, 3-137
Component 2-29, 2-52
component 3-164
on node 3-164
component diagram 3-159
ComponentInstance 2-91, 2-99
composite (AggregationKind) 2-21, 2-60, 2-78
composite object 3-60
composite state 3-130, 3-144
CompositeState 2-133, 2-140, 2-146
composition 3-60, 3-73
Compound transition 2-148
concurrency
in state machine 2-152
of operation 3-42
synchronizing 2-153
concurrency (Operation) 2-42
concurrent (CallConcurrencyKind) 2-42, 2-79
March 2000
Index
concurrent lifelines 3-100
concurrent substate 3-130
condition (Extend) 2-121
condition event 3-133
conditional fork 3-159
conflict 2-152
connection (Association) 2-19
connection (Link) 2-94
constant
enumeration 3-53
constrainedElement (Constraint) 2-30, 2-71
constraining model element 2-118
Constraint 2-30, 2-53, 2-66, 2-70, 2-74, 2-75
constraint 3-25, 3-26
as list element 3-25
constraint (ModelElement) 2-39, 2-71
constraint (Stereotype) 2-73
constraint language 2-10, 2-76, 3-25
container (StateVertex) 2-138
contents (Partition) 2-164
context 3-107
context (Exception) 2-93
context (Interaction) 2-110
context (Signal) 2-97
context (StateMachine) 2-138
control flow icon 3-120
control flow type 3-124
control icons 3-155
copy (Flow) 2-34
copy (keyword) 3-58
copying composite 2-60
create (BehavioralFeature) 2-25
create (CallEvent) 2-133
create (Usage) 2-46
CreateAction 2-92, 2-99, 2-105, 2-118
creation 3-100, 3-108, 3-125
cross
for destruction 3-100
cube
for node 3-163
D
data flow relationship 2-168
Data Types Foundation Package 2-77
DataType 2-31, 2-53, 2-67, 2-77
DataValue 2-92, 2-99, 2-103
decision, See</> branch
deepHistory (PseudostateKind) 2-83, 2-135, 2-147
default entry 2-147
defaultElement (TemplateParameter) 2-45
defaultValue (Parameter) 2-43
defer (keyword) 3-156
deferrableEvent (State) 2-137
deferred event 2-146, 2-147, 3-156
Dependency 2-31, 2-53, 2-67
dependency 3-82
subsystem 3-20
deployment diagram 3-161
deploymentLocation (Component) 2-29
Derivation 2-17
derivation 3-83
OMG-UML V1.3
derive (Abstraction) 2-18
derive (keyword) 3-83
derived (ModelElement) 2-40
derived element 3-85
descriptor 2-63
design pattern 3-110
destination state 3-136
destroy (BehavioralFeature) 2-25
destroy (CallEvent) 2-133
destroy action 2-105, 2-118
DestroyAction 2-92, 2-99
destroyed (Instance) 2-93
destroyed (keyword) 3-108
destroyed (Link) 2-94
destroying composite 2-60
destruction 3-100, 3-108, 3-125
development project 1-2
diamond
filled
for composition 3-73
for aggregation 3-65
for branch or merge 3-150
for merge 3-140
for n-ary association 3-72
discriminator 2-37, 3-78, 3-79
discriminator (Generalization) 2-36, 2-37
disjoint (Generalization) 2-37
disjoint (keyword) 3-79
disjoint substate 3-130
dispatchAction (Stimulus) 2-97
do activity 2-146, 3-128
doActivity (State) 2-137
document (Component) 2-29
documentation (Element) 2-32
dog-eared rectangle
for note 3-13
dot
for navigation 3-12
for sequence expression 3-121
double colon
for pathname 3-33, 3-54
double dot
for integer range 3-68
dynamic choice point 3-141
dynamicArguments (ActionState) 2-163
dynamicArguments (SubactivityState) 2-165
dynamicMultiplicity (ActionState) 2-163
dynamicMultiplicity (SubactivityState) 2-165
E
effect (Transition) 2-140
elapsed-time event 3-133
Element 2-31, 2-53
element property 3-27
ElementImport 2-172, 2-175
ElementOwnership 2-32, 2-53
ElementResidence 2-32, 2-53
ellipse
dashed
for collaboration 3-111
for use case 3-89
March 2000
Index-3
Index
ellipsis
for generalization 3-78
for missing element 3-36
else (keyword) 3-141
enabled transition 2-149
entering a concurrent composite state 2-147
entry (ActionState) 2-163
entry (State) 2-137
entry action 2-146, 3-128
entry stub state 3-142
Enumeration 7-36
enumeration 3-53
enumeration literal 3-53
Enumeration Types 7-7
equal sign
for attribute value 3-58
for default value 3-42, 3-49
for initial value 3-39
for tagged value 3-28
Event 2-134, 2-145
event 3-132
event processing 2-151
event signature 3-135
examples section 3-5
Exception 2-92, 2-99, 2-104
executable (Component) 2-29
Exists Operation 7-26
exit (State) 2-137
exit action 2-146, 3-128
exit stub state 3-142
exiting a concurrent state 2-147
exiting a non-concurrent state 2-147
Expression 2-80
expression 3-11
expression (Guard) 2-135
Extend 2-121, 2-123, 2-129
extend 3-90
extend (UseCase) 2-123
extendedElement (Stereotype) 2-73
extensibility mechanism 3-27, 3-29
extension (Extend) 2-121
extension mechanisms 3-24
Extension Mechanisms Foundation Package 2-67
extension point 3-89
extension points compartment 3-89
ExtensionPoint 2-121, 2-124
extensionPoint (Extend) 2-121
extensionPoint (UseCase) 2-123
F
facade (Package) 2-174
facade (stereotype) 3-16
Facility Implementation Requirements 5-5
factored transition path 3-140
false (Boolean) 2-79
Feature 2-33, 2-54
feature 3-35
feature (Classifier) 2-28
Features on Types Themselves 7-18
file (Component) 2-30
final state 3-131
Index-4
FinalState 2-134, 2-141, 2-148
fire a transition 2-151
Flow 2-33
flow relationship 3-58
focus of control 3-99, 3-101
font usage 3-8
ForAll Operation 7-25
fork (PseudostateKind) 2-83, 2-135
fork of control 2-119, 3-136
formalism 2-8
Foundation package 2-11
four-layer metamodel architecture 2-3
framework (Package) 2-174, 2-180
framework (stereotype) 3-16
friend (Permission) 2-44
frozen (ChangeableKind) 2-21, 2-24, 2-80
frozen (keyword) 3-40, 3-66
full descriptor 2-63
G
GeneralizableElement 2-34, 2-54, 2-63
Generalization 2-35, 2-54, 2-63
of package 2-180
of subsystem 2-181
of use case 2-128
generalization 3-78
association 3-78
constraints on 3-79
use case 3-90
generalization (GeneralizableElement) 2-35
General-purpose Repository 5-2
Geometry 2-80
global (AssociationEnd) 2-23
global (keyword) 3-77
global (LinkEnd) 2-94
Goals 1-4
Grammar for OCL 7-50
graphic constructs 3-6
graphic marker 3-30
group property 3-36
Guard 2-134, 2-141, 2-149
guard (Transition) 2-140
guard condition 3-135
guarded (CallConcurrencyKind) 2-42, 2-79
guillemets
for keyword 3-11
for stereotype 3-29, 3-35
H
Harel statechart 2-159
hidden element 3-36
high-level transition 2-148
history
deep 2-147
shallow 2-147
history state 3-138
hyperlink 3-7
I
icon
for stereotype 3-29, 3-35
OMG-UML V1.3
March 2000
Index
icon (Stereotype) 2-72
icons 3-6
IDL Modules 5-5, 6-21
implementation (Generalization) 2-36
implementation class
and type 3-44
implementation diagram 3-159
ImplementationClass 2-54
implementationClass (Class) 2-27
implementationLocation (ModelElement) 2-39
implicit (Association) 2-20
import 3-55, 3-83
import (Permission) 2-44, 2-179, 2-182
imported element 3-16
importedElement (Package) 2-174
importing a package 3-55
importing elements 2-43
in (ParameterDirectionKind) 2-43, 2-82
Include 2-122, 2-124, 2-128
include 3-129
a use case 3-90
include (keyword) 3-142
include (UseCase) 2-123
incoming (StateVertex) 2-138
incomplete (Generalization) 2-37
incomplete (keyword) 3-79
Industry Trends 1-3
Inheritance 2-63
inheritance relationship 2-35
initial (PseudostateKind) 2-83, 2-135
initial state 3-130
initial value
of attribute 3-39
initialValue (Attribute) 2-24
inout (ParameterDirectionKind) 2-43, 2-82
input event icon 3-155
Instance 2-93, 2-99
instance 3-14, 3-86
of classifier 3-86
instance (LinkEnd) 2-94
instance (ScopeKind) 2-24, 2-33, 2-84
instance level collaboration 3-108
instantiable subsystem 3-18
instantiate (Usage) 2-46
Instantiation 2-64
instantiation (CreateAction) 2-92
inState (ClassifierInState) 2-163
Integer 2-81, 7-33
Interaction 2-110, 2-114, 2-117, 2-118
interaction 3-106, 3-113
interaction (Collaboration) 2-109
interaction (Message) 2-110
interaction diagram 3-93, 3-105
Interface 2-37, 2-55, 2-65
use case 2-127
interface 3-46
on subsystem 3-20
interface specifier 3-65
internal transition 2-149
internal transition compartment 3-128
internalTransition (State) 2-137
invariant (Constraint) 2-30
Invariants 7-5
invisible hyperlink 3-7
isAbstract (GeneralizableElement) 2-34
isAbstract (Operation) 2-42
isAbstract (Reception) 2-96
isActive (Class) 2-26
isAsynchronous (Action) 2-90
isAsynchronous (CallAction) 2-91
isConcurrent (CompositeState) 2-134
isDynamic (ActionState) 2-163
isDynamic (SubactivityState) 2-165
isInstantiable (Subsystem) 2-175
isLeaf (GeneralizableElement) 2-35
isLeaf (Operation) 2-42
isLeaf (Reception) 2-96
isNavigable (AssociationEnd) 2-22
isQuery (BehavioralFeature) 2-25
isRegion (CompositeState) 2-134
isRoot (GeneralizableElement) 2-35
isRoot (Operation) 2-42
isRoot (Reception) 2-96
isSpecification (ElementOwnership) 2-32
isSynch (ObjectFlowState) 2-164
italics
for abstract class 3-35
for abstract operation 3-42
Iterate Operation 7-26
iteration indicator 3-122
IterationExpression 2-81
J
join (PseudostateKind) 2-83, 2-135
join of control 2-119, 3-136
junction 3-140
junction (PseudostateKind) 2-83, 2-135
K
keyword 3-10
kind (Parameter) 2-43
kind (PseudoState) 2-136
L
label 3-9
language (Expression) 2-80
layer, metamodel 2-3
library (Component) 2-30
lifeline 3-94, 3-100
line 3-61
dashed
for association class 3-71
for lifeline 3-100
solid
for actor-use case 3-91
for association 3-61
for association class 3-71
for communication association 3-92
Link 2-93, 2-101, 2-104
link 3-76
LinkEnd 2-94, 2-101
linkEnd (Instance) 2-93
OMG-UML V1.3
March 2000
Index-5
Index
LinkObject 2-95, 2-101
list compartment 3-35
literal
of enumeration type 3-53
local (AssociationEnd) 2-23
local (keyword) 3-77
local (LinkEnd) 2-95
location (ExtensionPoint) 2-121
LocationReference 2-81
M
many 3-68
Mapping 2-81
mapping (Abstraction) 2-18
Mapping from MOF to IDL 5-4
Mapping of UML Semantics to Facility Interfaces 5-3
mapping section 3-87
MappingExpression 2-81
Message 2-110, 2-114, 2-118
message 3-102, 3-120
message (Interaction) 2-110
message label 3-121
message name 3-123
Message Sequence Chart notation 3-94
MessageDirectionKind 2-81
metaclass 3-52
metaclass (Classifier) 2-28
meta-metamodel layer 2-4
metamodel (Model) 2-173
metamodel layer 2-4
Method 2-38, 2-55
method 3-43
minus sign
for private visibility 3-39
Missing Rolenames 7-13
Model 2-173, 2-175, 2-182
model 3-23
Model Access 5-2
model layer 2-4
model management 3-15
Model Management Package 2-171
model organization 3-15
Model Transfer 5-2
ModelElement 2-38, 2-56, 2-71, 2-75
modelElement (TaggedValue) 2-74
multiobject 3-117
Multiplicity 2-81
multiplicity 3-68
of association end 3-64
of attribute 3-39
of qualified association 3-69
on dynamic concurrency 3-159
multiplicity (AssociationEnd) 2-22
multiplicity (AssociationRole) 2-108
multiplicity (Attribute) 2-24
multiplicity (ClassifierRole) 2-108
MultiplicityRange 2-81
N
Name 2-82
name 3-9
Index-6
OMG-UML V1.3
name (Association) 2-19
name (AssociationEnd) 2-22
name (BehavioralFeature) 2-25
name (Feature) 2-33
name (ModelElement) 2-39
name (Parameter) 2-43
name compartment 3-35, 3-128
named compartment 3-36
Namespace 2-40, 2-57
namespace (ModelElement) 2-39
n-ary association 3-72
natural language 2-10, 2-76
navigability 2-59, 3-65
navigation arrow 3-66
Navigation from Association Classes 7-15
Navigation over Associations with Multiplicity Zero or One 7-13
Navigation through Qualified Associations 7-16
Navigation to Association Types 7-14
nested state 3-130
nesting
for composition 3-74
new (Instance) 2-93
new (keyword) 3-108
new (Link) 2-94
Node 2-41, 2-57
node 3-162, 3-164
NodeInstance 2-95, 2-101
none (AggregationKind) 2-21, 2-78
notation section 3-5
note 3-12, 3-26
Notes section 2-10
O
Object 2-95, 2-102, 2-103
object 3-57, 3-114, 3-153
lifeline 3-100
playing role 3-115
Object Constraint Language 7-1
object diagram 3-32
object flow 3-153
object in state 3-153
Object Management Group i
address of ii
Object Message Sequence Chart notation 3-94
object name syntax 3-116
ObjectFlowState 2-164, 2-166, 2-168
Objects and Properties 7-11
ObjectSetExpression 2-82
OCL 2-9, 2-76, 3-25
OCL - Legend 7-3
OCL (Language) 2-80
OCL expression 3-12
OCL Grammar 7-50
OCL Uses 7-3
OclAny 7-29, 7-30
OclExpression 7-30
OclType 7-28
Operation 2-41, 2-58, 2-65
operation 3-35, 3-41, 3-43
operation (CallAction) 2-91
operation (CallEvent) 2-132
March 2000
Index
ordered (keyword) 3-64
ordered (OrderingKind) 2-21, 2-82
ordering 3-64
ordering (AssociationEnd) 2-21
OrderingKind 2-82
out (ParameterDirectionKind) 2-43, 2-82
outgoing (StateVertex) 2-138
output event icon 3-155
overlapping (Generalization) 2-37
overlapping (keyword) 3-79
ownedElement (Collaboration) 2-110
ownedElement (Namespace) 2-41
owner (Feature) 2-33
ownerScope (Feature) 2-33
ownership of elements 2-179
powertype (Classifier) 2-28
powertype (Generalization) 2-36
powertypeRange (Classifier) 2-28
Pre and Postconditions 7-5
Precedence Rules 7-9
precondition (Constraint) 2-30
predecessor 3-100, 3-121
predecessor (Message) 2-111, 2-119
Predefined Features on All Objects 7-17
Predefined OCL Types 7-28
presentation (ModelElement) 2-39
presentation options 3-5, 3-7
PresentationElement 2-65
Previous Values in Postconditions 7-21
priority of transition 2-153
private (keyword) 3-39
private (VisibilityKind) 2-22, 2-32, 2-33, 2-85
procedural sequence diagram 3-99
ProcedureExpression 2-83
Process 1-8
process (Classifier) 2-28
Programming Languages 1-7
pronged rectangle
for component 3-165
propagation semantics 2-60
Properties 7-11
Association Ends and Navigation 7-12
Attributes 7-11
Operations 7-11
property 3-27
property string 3-28, 3-36
protected (keyword) 3-39
protected (VisibilityKind) 2-22, 2-32, 2-33, 2-85
protocol state machine 2-154
PseudoState 2-135, 2-141, 2-167
PseudostateKind 2-83
public (keyword) 3-39
public (VisibilityKind) 2-22, 2-32, 2-33, 2-85
P
Package 2-173, 2-175, 2-178
package 3-15
package structure of UML 2-5
Parameter 2-43, 2-58
parameter (AssociationEnd) 2-23
parameter (BehavioralFeature) 2-25
parameter (Event) 2-134
parameter (keyword) 3-77
parameter (LinkEnd) 2-95
parameter (ObjectFlowState) 2-164
parameter list 3-42
ParameterDirectionKind 2-82
parameterized class 3-48
parent (Generalization) 2-36
parentheses
for argument list 3-12
for parameter list 3-41, 3-129, 3-135
participant (Classifier) 2-28
participation (in a use case) 3-90, 3-92
Partition 2-164
partition (ActivityGraph) 2-162
passive class 2-26
path 3-6, 3-54
for association 3-61
path (symbol) 3-6
pathname 3-54
Pathnames for Packages and Properties 7-16
Pattern 2-119
pattern 3-110
pentagon
for signal receipt 3-155
for signal sending 3-155
Permission 2-43
persistence (Association) 2-20
persistence (Attribute) 2-24
persistence (Classifier) 2-28
persistent (Instance) 2-93
plus sign
for containment tree 3-16
for public visibility 3-39
postcondition (Constraint) 2-30
pound sign
for protected visibility 3-39
powertype 3-54
Q
qualifier 2-60, 3-65, 3-69
qualifier (AssociationEnd) 2-23
qualifierValue (LinkEnd) 2-94
query 3-42
R
range 3-68
Real 7-31
Realization 2-17
realization
of interface by classifier 3-47
realization element 3-18
realization relationship 3-45
realize (Abstraction) 2-18
receiver (Message) 2-111
receiver (Stimulus) 2-97
Reception 2-95, 2-102
reception (Signal) 2-97
rectangle
dog-eared
for note 3-13
OMG-UML V1.3
March 2000
Index-7
Index
pronged
for component 3-165
rounded ends
for action state 3-148
for state 3-128
for subactivity state 3-149
solid
for active class 3-118
for association class 3-71
for class 3-33
for object 3-57
for qualifier 3-69
stacked
for multiobject 3-117
tabbed
for package 3-15
thin
for activation lifeline 3-101
recurrence 3-122
recurrence (Action) 2-90
reference to another package 3-33
referenceState (StubState) 2-138
referencing elements 2-43
refine (Abstraction) 2-19
refine (keyword) 3-83
Refinement 2-17, 2-67
refinement 3-83
refinement of state machine 2-156
Relationship 2-31, 2-44
representedClassifier (Collaboration) 2-110
representedOperation (Collaboration) 2-110
requiredTag (Stereotype) 2-73
resident (Component) 2-29
resident (ComponentInstance) 2-92
resident (Node) 2-41
resident (NodeInstance) 2-95
responsibility (Comment) 2-29
return (ParameterDirectionKind) 2-43, 2-82
return action 2-105
return type expression 3-42
return value 3-122
ReturnAction 2-96, 2-102
Re-typing or Casing 7-9
right arrow
for special operation 3-12
role 3-14
role name syntax 3-116
rolename 3-65
run to completion 2-151
semantics (Classifier) 2-28
semantics (Operation) 2-42
semantics of state machines 2-144
Semantics Package 2-178
semantics section 2-9, 3-5
semaphore 2-154
send (Usage) 2-46
SendAction 2-96, 2-102, 2-105, 2-118
sender (Message) 2-111
sender (Stimulus) 2-97
Sequence 7-46
sequence diagram 3-93, 3-94, 3-98
sequence expression 3-121
sequence number 3-107, 3-121
sequential (CallConcurrencyKind) 2-42, 2-79
sequential substate 3-130
Set 7-40
shallowHistory (PseudostateKind) 2-83, 2-135, 2-147
Shorthand for Collect 7-24
Signal 2-97, 2-102, 2-104
signal 3-133
declaration 3-133
signal (Reception) 2-96
signal (SendAction) 2-97
signal (SignalEvent) 2-136
signal receipt icon 3-155
signal sending icon 3-155
SignalEvent 2-136
signalflow (ObjectFlowState) 2-164
signature 3-122
simple transition 3-135
SimpleState 2-136
slash
for action expression 3-128, 3-135
for derived element 3-85
for predecessor 3-121
for role 3-115
slot (Instance) 2-93
sorted (keyword) 3-64
sorted (OrderingKind) 2-21, 2-82
source (Transition) 2-140
source state 3-136
specialization (GeneralizableElement) 2-35
specification (AssociationEnd) 2-23
specification (Method) 2-38
specification (Reception) 2-96
specification element 3-18
specification level collaboration 3-108, 3-109
square brackets
for attribute multiplicity 3-39, 3-40
for condition clause 3-122
for guard condition 3-129, 3-135
for selection 3-12
for state 3-58, 3-153
standard elements section 2-9
star
for iteration indicator 3-122
for multiplicity 3-68
for synchronization bound 3-144
State 2-136, 2-145
state 3-127
S
Scope 1-6
ScopeKind 2-84
script (Action) 2-90
segment descriptor 2-63
Select and Reject Operations 7-22
Self 7-4
self (AssociationEnd) 2-23
self (keyword) 3-77
self (LinkEnd) 2-95
Semantics 2-75, 2-178
Index-8
OMG-UML V1.3
March 2000
Index
T
tabbed rectangle
for package 3-15
table (Component) 2-30
tag (TaggedValue) 2-73
tagged value 3-27
TaggedValue 2-73, 2-75
taggedValue (ModelElement) 2-72
target (Action) 2-90
target (Transition) 2-140
targetScope (AssociationEnd) 2-22
targetScope (Attribute) 2-24
taxonomic relationship 2-35, 3-78
template 2-38, 2-40, 2-56, 2-66, 3-48
collaboration 2-117, 2-119
TemplateParameter 2-45
templateParameter (ModelElement) 2-40
terminate action 2-105
TerminateAction 2-98, 2-103
thread (Classifier) 2-28
thread of control 2-119
tiling (a state) 3-130
Time 2-84
time dimension 3-94
time event 3-133
time expression 3-104, 3-135
time interval 3-95
TimeEvent 2-139
TimeExpression 2-84
timing constraint 3-94, 3-104
Tool Sharing Options 5-2
Tools 1-7
tools, interactive 3-7
top (StateMachine) 2-138
topLevel (Package) 2-174
topLevel (stereotype) 3-16
Trace 2-17, 2-58, 2-67
trace (Abstraction) 2-19, 2-183
trace (keyword) 3-83
Transformation for Association Classes 5-4
transient (Instance) 2-93
transient (keyword) 3-108
transient (Link) 2-94
Transition 2-140, 2-143, 2-148, 2-169
execution 2-150
firing rules 2-153
transition 3-135
chain 3-140
complex 3-136, 3-137
constraint 3-135
name 3-104
simple 3-135
string 3-135
stubbed 3-138
time 3-104
to composite state 3-137
transition (StateMachine) 2-138
triangle
for generalization 3-78
for realization 3-45
trigger (Transition) 2-140
composite 3-144
of object 3-58
state machine refinement 2-156
State Machines Package 2-130
statechart 2-159
statechart diagram 3-125
StateMachine 2-137, 2-142, 2-151
semantics 2-144
StateVertex 2-138
Stereotype 2-72, 2-74, 2-75
stereotype 3-29, 3-53
class 3-35
object 3-58
stereotype (ModelElement) 2-71
stereotype (TaggedValue) 2-74
stereotypeConstraint (Stereotype) 2-73
Stereotypes iii, 7-1
stick arrowhead
for control flow 3-102
stick man figure
for use case 3-90
Stimulus 2-97, 2-102, 2-104, 2-118
stimulus 3-102, 3-120
String 2-84, 7-35
string 3-6, 3-7, 3-9
StructuralFeature 2-44, 2-58
stub (Package) 2-174
stub (stereotype) 3-16
stub state 3-142
stubbed transition 3-138
StubState 2-138, 2-154
style guidelines 3-5
subactivity state 3-149
SubactivityState 2-165, 2-167, 2-169
submachine (SubactivityState) 2-165
submachine (SubmachineState) 2-139
submachine invocation 3-129
submachine state 3-142
SubmachineState 2-139, 2-143, 2-148
subordinate use case 2-117, 2-127
substate 3-130
Subsystem 2-174, 2-178, 2-180
subsystem 3-18, 3-20
subtyping and state machine 2-157
subvertex (CompositeState) 2-133
superordinate collaboration 2-117
superordinate use case 2-127
supplier (Dependency) 2-31
supplierDependency (ModelElement) 2-39
suppressed element 3-36
swimlane 3-151
synch state 3-144, 3-158
synchronization 3-144
synchronization bar 3-136
synchronization fork and join 2-153
SynchState 2-139, 2-143, 2-153
system boundary 3-87
systemModel (Model) 2-173
systemModel (stereotype) 3-23
OMG-UML V1.3
March 2000
Index-9
Index
true (Boolean) 2-79
two-dimensional symbols 3-6
Type 2-58
type
and implementation class 3-44
type (AssociationEnd) 2-23
type (Attribute) 2-24
type (Class) 2-27
type (ClassifierInState) 2-163
type (ObjectFlowState) 2-164
type (Parameter) 2-43
Type Conformance 7-8
type expression 3-39
TypeExpression 2-84
type-instance correspondence 3-14
Types 7-7
use case relationship 3-90
Use Cases Package 2-119
UseCase 2-122, 2-124, 2-126
description 2-127
instance 2-127
UseCaseInstance 2-123, 2-125
user object layer 2-4
Using Pathnames for Packages and Properties 7-16
utility (Classifier) 2-28
utility (keyword) 3-52
V
value (Argument) 2-91
value (AttributeLink) 2-91
value (TaggedValue) 2-74
ViewElement 2-44, 2-58
visibility
of association 3-66
of attribute 3-39
of operation 3-41
of package element 3-16
visibility (AssociationEnd) 2-22
visibility (ElementImport) 2-172
visibility (ElementOwnership) 2-32
visibility (ElementResidence) 2-32
visibility (Feature) 2-33
VisibilityKind 2-85
U
UML - defined 1-1
UML and other modeling languages 1-8
UML Extension for Business Modeling 4-8
UML features 1-9
Undefined Values 7-10
underlining
for class scope 3-39, 3-42
for instances 3-14
for object 3-57, 3-115
Uninterpreted 2-84
UninterpretedAction 2-98, 2-103, 2-105
unlimited multiplicity 3-68
UnlimitedInteger 2-84
unordered (keyword) 3-64
unordered (OrderingKind) 2-21, 2-82
Usage 2-45, 2-59, 2-67
usage dependency 3-83
use (keyword) 3-83
use case 3-89
use case diagram 3-87
Index-10
W
well-formedness rules section 2-9
when (keyword) 3-133
when (TimeEvent) 2-140
X
X
for destruction 3-100
xor (Association) 2-20
xor association 3-62
OMG-UML V1.3
March 2000