The Extension Mechanisms package is the subpackage that specifies how specific UML model elements are customized and extended with new semantics by using stereotypes, tag definitions, and tagged values. A coherent set of such extensions, defined for specific purposes, constitutes a UML profile.
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 beyond those defined in the UML standard. These needs are met in UML by its 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. The principal extension mechanism is the concept of Stereotype. It provides a way of defining virtual subclasses of UML metaclasses with new metaattributes and additional semantics.
A fundamental constraint on all extensions defined using the profile extension mechanism is that extensions must be strictly additive to the standard UML semantics. This means that such extensions must not conflict with or contradict the standard semantics. In effect, these extension mechanisms are a means for refining the standard semantics of UML and do not support arbitrary semantic extension. They allow the modeler to add new modeling elements to UML for use in creating UML models for process-specific or implementation language-specific domains (for example, supporting code generation for a certain language and infrastructure). It should be noted that stereotypes and tags are used in the definition of UML itself. They are used to define standard model elements that are not considered complex enough to be defined directly as UML metaclasses.
Stereotypes are themselves metaclasses in UML. Consequently, the user of a ARIS UML Designer can define stereotypes; for example, a new stereotype «persistent» could be defined that can be attached to classes. Many users will not define new stereotypes, but will only apply them during modeling; for example, the stereotype ?«persistent»? can be attached to the class ?Invoice? by the modeler. A tool could use this as an indicator that a database table definition needs to be generated.
A {@link com.idsscheer.aris.common.uml.metamodel.foundation.extensionmechanisms.IUmlProfile profile} is a specialized package that contains model elements that have been customized for a specific domain or purpose by extending the metamodel using stereotypes, tagged definitions, and constraints. A profile may specify model libraries on which it depends and the metamodel subset that it extends.
A {@link com.idsscheer.aris.common.uml.metamodel.foundation.extensionmechanisms.IUmlStereotype stereotype} is a model element that defines additional values (based on tag definitions), additional constraints, and optionally a new graphical representation. All model elements that are branded by one or more particular stereotypes receive these values and constraints in addition to the attributes, associations, and superclasses that the element has in the standard UML. 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 UML metamodel elements or standard elements.
{@link com.idsscheer.aris.common.uml.metamodel.foundation.extensionmechanisms.IUmlTagDefinition Tag definitions} specify new kinds of properties that may be attached to model elements. The actual properties of individual model elements are specified using {@link com.idsscheer.aris.common.uml.metamodel.foundation.extensionmechanisms.IUmlTaggedValue Tagged Values}. These may either be simple datatype values or references to other model elements. Tag definitions can be compared to metaattribute definitions while tagged values correspond to values attached to model elements. They may be used to represent properties such as management information (author, due date, status), code generation information (optimizationLevel, containerClass).