Software Disclaimer

Class UML 2.3::Package

Description:

Package specializes TemplateableElement and PackageableElement specializes ParameterableElement to specify that a package can be used as a template and a PackageableElement as a template parameter.

Direct Superclasses: TemplateableElement, Namespace, PackageableElement

Direct Subclasses: Profile, Model

Class Precedence List: Package, TemplateableElement, Namespace, PackageableElement, ParameterableElement, NamedElement, Element

Properties:

nestedPackage : Package (0 *); -- source Package
nestingPackage : Package (0 1); -- source Package
ownedStereotype : Stereotype (0 *); -- source Package

References the Stereotypes that are owned by the Package
{composite, derived}
Subsets: Package.packagedElement
The spec does not provide a function to compute this derived property!

ownedType : Type (0 *); -- source Package
packageMerge : PackageMerge (0 *); -- source Package
packagedElement : PackageableElement (0 *); -- source Package
profileApplication : ProfileApplication (0 *); -- source Package
ownedTemplateSignature : TemplateSignature (0 1); -- source TemplateableElement
templateBinding : TemplateBinding (0 *); -- source TemplateableElement
elementImport : ElementImport (0 *); -- source Namespace
importedMember : PackageableElement (0 *); -- source Namespace
member : NamedElement (0 *); -- source Namespace
ownedMember : NamedElement (0 *); -- source Namespace
ownedRule : Constraint (0 *); -- source Namespace
packageImport : PackageImport (0 *); -- source Namespace
visibility : VisibilityKind (1 1); -- source PackageableElement
owningTemplateParameter : TemplateParameter (0 1); -- source ParameterableElement
templateParameter : TemplateParameter (0 1); -- source ParameterableElement
clientDependency : Dependency (0 *); -- source NamedElement
name : String (0 1); -- source NamedElement
nameExpression : StringExpression (0 1); -- source NamedElement
namespace : Namespace (0 1); -- source NamedElement
qualifiedName : String (0 1); -- source NamedElement
ownedComment : Comment (0 *); -- source Element
ownedElement : Element (0 *); -- source Element
owner : Element (0 1); -- source Element

Constraints:

Signature: CMOF_14_3_9() : Boolean;
Description: [9] A CMOF metamodel is restricted to use the concrete metaclasses from UML's Kernel
The OCL used here is not normative.
Editor's notes: not investigated
Expression: self->closure(ownedElement)->forAll(e | e.isWithinCMOFSubset())
Original: self->closure(ownedElement)->forAll(e | e.Element::isWithinCMOFSubset())

Signature: elements_public_or_private() : Boolean;
Description: If an element that is owned by a package has visibility, it is public or private.
The OCL used here is not normative.
Editor's notes: (1) ownedElement not ownedElements, visibility not visbility (2) Element.ownedComment subsets Element.ownedElement, thus ownedElement includes things of type Comment. Property visibility is defined on PackagableElement. Comment, TemplateBinding, TemplateSignature, ProfileApplication, and PackageMerge are not of type PackageableElement (which supplies this property).
Expression: true
Original: self.ownedElements->forAll(e | e.visibility->notEmpty() implies e.visbility = #public or e.visibility = #private)

Operations:

Signature: visibleMembers() : PackageableElement;
Description: The query visibleMembers() defines which members of a Package can be accessed outside it.
Expression: result = member->select( m | self.makesVisible(m))

Signature: mustBeOwned() : Boolean;
Description: The query mustBeOwned() indicates whether elements of this type must have an owner.
Expression: result = false

Signature: makesVisible(el : NamedElement; ) : Boolean;
Description: The query makesVisible() defines whether a Package makes an element visible outside itself. Elements with no visibility and elements with public visibility are made visible.
Expression: result = (ownedMember->includes(el)) or (elementImport->select(ei|ei.importedElement = #public)->collect(ei|ei.importedElement)->includes(el)) or (packageImport->select(pi|pi.visibility = #public)->collect(pi|pi.importedPackage.member->includes(el))->notEmpty())

Signature: containingProfile() : Profile;
Description: The query containingProfile() returns the closest profile directly or indirectly containing this package (or this package itself, if it is a profile).
Expression: result = if self.oclIsKindOf(Profile) then self.oclAsType(Profile) else self.namespace.oclAsType(Package).containingProfile() endif

Signature: allApplicableStereotypes() : Stereotype;
Description: The query allApplicableStereotypes() returns all the directly or indirectly owned stereotypes, including stereotypes contained in sub-profiles.
Expression: result = self.ownedStereotype->union(self.ownedMember-> select(oclIsKindOf(Package)).oclAsType(Package).allApplicableStereotypes()->flatten())->asSet()



Send questions or comments to [email protected].