Software Disclaimer

Class UML 2.4.1::Package


A package can have one or more profile applications to indicate which profiles have been applied. Because a profile is a package, it is possible to apply a profile not only to packages, but also to profiles.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.A package is used to group elements, and provides a namespace for the grouped elements.

Direct Superclasses: Namespace, PackageableElement, TemplateableElement

Direct Subclasses: Profile, Model

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


URI : String (0 1); -- source Package
nestedPackage : Package (0 *); -- source Package
nestingPackage : Package (0 1); -- source Package
ownedStereotype : Stereotype (0 *); -- source Package
ownedType : Type (0 *); -- source Package

References the packaged elements that are Types.
{composite, derived}
Subsets: Package.packagedElement
Opposite: Type.package
The spec does not provide a function to compute this derived property!

packageMerge : PackageMerge (0 *); -- source Package
packagedElement : PackageableElement (0 *); -- source Package
profileApplication : ProfileApplication (0 *); -- source Package
elementImport : ElementImport (0 *); -- source Namespace
importedMember : PackageableElement (0 *); -- source Namespace
member : NamedElement (0 *); -- source Namespace

A collection of NamedElements identifiable within the Namespace, either by being owned or by being introduced by importing or inheritance.
Derived union with sources: (ownedRule, ownedMember, importedMember, packagedElement)

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
ownedTemplateSignature : TemplateSignature (0 1); -- source TemplateableElement

The optional template signature specifying the formal template parameters.
Subsets: Element.ownedElement
Opposite: TemplateSignature.template

templateBinding : TemplateBinding (0 *); -- source TemplateableElement
ownedComment : Comment (0 *); -- source Element
ownedElement : Element (0 *); -- source Element
owner : Element (0 1); -- source Element


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)


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()) self.member->includes(el)

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).
The OCL used here is not normative.
Editor's notes: Call recursive on namespace (which may be a Profile) not on namespace.oslAsType(Package). Requires change to the Profile method also.
Expression: if self.oclIsKindOf(Profile) then self.oclAsType(Profile) else self.namespace.containingProfile() endif
Original: 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].