Software Disclaimer

Class UML 2.5::Package

Description:

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: PackageableElement, TemplateableElement, Namespace

Direct Subclasses: Profile, Model

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

Properties:

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
packageMerge : PackageMerge (0 *); -- source Package
packagedElement : PackageableElement (0 *); -- source Package
profileApplication : ProfileApplication (0 *); -- source Package
visibility : VisibilityKind (0 1); -- source PackageableElement
owningTemplateParameter : TemplateParameter (0 1); -- source ParameterableElement
templateParameter : TemplateParameter (0 1); -- source ParameterableElement

The TemplateParameter that exposes this ParameterableElement as a formal parameter.
Opposite: TemplateParameter.parameteredElement

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
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())

Operations:

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

Signature: ownedType.1() : Type;
Description: Derivation for Package::/ownedType
Expression: result = (packagedElement->select(oclIsKindOf(Type))->collect(oclAsType(Type))->asSet())

Signature: ownedStereotype.1() : Stereotype;
Description: Derivation for Package::/ownedStereotype
Expression: result = (packagedElement->select(oclIsKindOf(Stereotype))->collect(oclAsType(Stereotype))->asSet())

Signature: nestedPackage.1() : Package;
Description: Derivation for Package::/nestedPackage
Expression: result = (packagedElement->select(oclIsKindOf(Package))->collect(oclAsType(Package))->asSet())

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 = VisibilityKind::public)->collect(importedElement.oclAsType(NamedElement))->includes(el)) or (packageImport->select(visibility = VisibilityKind::public)->collect(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).
The OCL used here is not normative.
Editor's notes: Call recursive on namespace (which may be a Profile) not on namepsace.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 = (let ownedPackages : Bag(Package) = ownedMember->select(oclIsKindOf(Package))->collect(oclAsType(Package)) in ownedStereotype->union(ownedPackages.allApplicableStereotypes())->flatten()->asSet() )



Send questions or comments to [email protected].