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 GetCollection
APIs 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