Evolution of APIs
A consequence of the abstract metamodel is that conventional MetaAssociations, MetaAssociationEnds and MetaAttributes are no longer systematically accessible from a concrete MetaClass.
New APIs, using the compiled metamodel are proposed, to enable optimized and precise access to abstract metamodel concepts. These are generally based on "MegaObject" and "MegaCollection" concepts.
Accessing abstract MetaClasses
Objects handled in HOPEX are attached to a concrete MetaClass inherited from one or several abstract MetaClasses.
The GetType function allows an object or collection to be considered as an instance of a given MetaClass.
Used from a MegaObject, the GetType function enables consideration of the object as a function of the MetaClass given as parameter.
Example: MyOrgProc.GetType("BPMN Owner Element").explore runs the explorer from an object of the Organizational Process concrete MetaClass, considering it as an object of the "BPMN Owner Element" MetaClass.

Used without a parameter, operator
GetType enables consideration of the current object as an element of the concrete MetaClass to which it belongs.
Used from a MegaCollection of objects of different concrete MetaClasses, operator GetType allows you to obtain a collection restricted to instances of the MetaClass specified as parameter.
Example: oCollection.GetType("Sequence flow").explore runs the explorer on objects of the collection belonging to the "Sequence flow" MetaClass.
If no object of the collection inherits the MetaClass given as parameter, operator GetType returns nothing. No error is generated.
Notions of class and collection description
APIs enabling browsing of the abstract metamodel are accessible from two main entry points:
• "ClassDescription" which finds the MetaClass of a "MegaObject" from the function GetClassObject .
Example: myMegaObject.GetClassObject.Explore
• "CollectionDescription" which enables discovery of the interface of a "MegaCollection" from the GetTypeObject function.
Example: myMegaCollection.GetTypeObject.Explore
API s available from a class description
Among available APIs, APIs relating to the abstract metamodel are:
• UpperClasses: returns the list of inherited MetaClasses, viewed as ClassDescription
• LowerClasses: returns the list of MetaClasses, viewed as ClassDescription, inheriting the given MetaClass..

These APIs return a collection accessible by
GetCollectionAPIs available from a collection description
The main APIs available are:
• TargetClassID: returns identifier of the target MetaClass (of the collection)
• SourceClassID: returns identifier of the source MetaClass (of the collection)
• TargetTypeID: returns identifier of the target MetaClass, abstract in the case of a generic MetaAssociation
• SourceTypeID: returns identifier of the source MetaClass, abstract in the case of a generic MetaAssociation
• AliasID: returns identifier of the alias of the collection if this exists
• RootID: returns identifier of the generic association if we are on an alias

These APIs return a property accessible by
GetProp• IsSuperClassOf (): returns a positive boolean if the MetaClass passed as argument inherits the MetaClass from which the collection is built
• IsSubClassOf (): returns a positive boolean on elements of the collection that inherits the MetaClass passed as argument
• IsClassAvailable(): tests if an object of the MetaClass passed as argument can be inserted in the collection

These APIs are functions with argument