Abstract Metamodel Extension Recommendations
Given that an extension of the abstract metamodel impacts MetaClasses and occurrences of the repository, and that modifications can be lost when installing a new version of HOPEX, you must comply with certain rules before intervening on the abstract metamodel.
Recommendations to be taken into account are the following:
• You can add abstract MetaClasses.
• Inheritances of several levels are not recommended.
• You must not modify status of MetaClasses of HOPEX, change parameters, or add MetaAttributes.
• You can add generic MetaAssociations, but they cannot relate to abstract MetaClasses of HOPEX. They can relate to a concrete MetaClass of HOPEX.
• You can add MetaAttributes, on condition that they do not relate to abstract MetaClasses of HOPEX. They can be connected to a generic MetaAssociation of HOPEX.
• You should avoid creating an abstract MetaClass simply because a MetaPropertyPage is common to several MetaClasses. It is preferable to configure different MetaPropertyPages on the adapted MetaClasses.
• You should avoid creating an abstract MetaClass simply because a MetaPropertyPage is common to several MetaClasses. It is preferable to configure different MetaCommands on the adapted MetaClasses.
• When you define a MetaAssociation that already exists as an alias of a generic MetaAssociation, you must convert all repositories that use the MetaAssociation defined as alias.
• If a HOPEX MetaAssociation is defined as alias, this alias cannot be removed.
• If you remove an alias on a MetaAssociation that is not HOPEX, you risk loss of consistency of your repositories and loss of links.
• The MetaAttributes of the MetaAssociation defined as alias must be identical to the MetaAttributes of the generic MetaAssociation.
• If a MetaAssociation defined as alias has additional MetaAttributes compared with the generic MetaAssociation, these MetaAttributes must be defined at the level of the generic MetaAssociation.
A perimeter enables building a set of objects and links from a root object.