Jump to content

SOMClass: Difference between revisions

From EDM2
Created page with "==Description== SOMClass is the root class for all SOM metaclasses. That is, all SOM metaclasses must be subclasses of SOMClass or some other class derived from it. It defines..."
 
No edit summary
Line 55: Line 55:
Group: Instance Creation (Factory)
Group: Instance Creation (Factory)


    somAllocate
* somAllocate
    somDeallocate
* somDeallocate
    somNew
* somNew
    somNewNoInit
* somNewNoInit
    somRenew
* somRenew
    somRenewNoInit
* somRenewNoInit
    somRenewNoInitNoZero
* somRenewNoInitNoZero
    somRenewNoZero  
* somRenewNoZero  


Group: Initialization/Termination
Group: Initialization/Termination
Line 71: Line 71:
Group: Access
Group: Access


* somGetInstancePartSize
* somGetInstancePartSize
* somGetInstanceSize
* somGetInstanceSize
            somGetInstanceToken
* somGetInstanceToken
            somGetMemberToken
* somGetMemberToken
            somGetMethodData, �
* somGetMethodData
            somGetMethodDescriptor
* somGetMethodDescriptor
            somGetMethodIndex
* somGetMethodIndex
            somGetMethodToken
* somGetMethodToken
            somGetName
* somGetName
            somGetNthMethodData
* somGetNthMethodData
            somGetNthMethodInfo
* somGetNthMethodInfo
            somGetNumMethods
* somGetNumMethods
            somGetNumStaticMethods
* somGetNumStaticMethods
            somGetParents
* somGetParents
            somGetVersionNumbers  
* somGetVersionNumbers  


Group: Testing
Group: Testing


            somCheckVersion
* somCheckVersion
                somDescendedFrom
* somDescendedFrom
                somSupportsMethod  
* somSupportsMethod  


Group: Dynamic
Group: Dynamic


                somFindMethod
* somFindMethod
                    somFindMethodOk
* somFindMethodOk
                    somFindSMethod
* somFindSMethod
                    somFindSMethodId
* somFindSMethodId
                    somFindSMethodOk
* somFindSMethodOk
                    somLookupmethod  
* somLookupmethod  


===Overridden Methods===
===Overridden Methods===
Line 123: Line 123:
* somGetClassMtab
* somGetClassMtab
* somGetInstanceOffset
* somGetInstanceOffset
* somGetMethodOffset
* somGetMethodOffset
                            somGetParent
* somGetParent
                            somGetPCIsMtab
* somGetPCIsMtab
                            somGetPCIsMtabs
* somGetPCIsMtabs
                            somGetRdStub
* somGetRdStub
                            somInitClass
* somInitClass
                            somInitMIClass
* somInitMIClass
                            somOverrideMtab
* somOverrideMtab
                            somOverrideSMethod
* somOverrideSMethod
                            somSetClassData
* somSetClassData
                            somSetMethodDescriptor
* somSetMethodDescriptor
                            _get_somDirectInitClasses attribute
* _get_somDirectInitClasses attribute
                            _set_somDirectInitClasses attribute
* _set_somDirectInitClasses attribute




[[Category:The OS/2 API Project]]
[[Category:The OS/2 API Project]]
[[Category:SOM Kernel]]
[[Category:SOM Kernel]]

Revision as of 04:01, 23 November 2016

Description

SOMClass is the root class for all SOM metaclasses. That is, all SOM metaclasses must be subclasses of SOMClass or some other class derived from it. It defines the essential behavior common to all SOM classes. In particular, it provides a suite of methods for initializing class objects, generic methods for manufacturing instances of those classes, and methods that dynamically obtain or update information about a class and its methods at run time.

Just as all SOM classes are expected to have SOMObject (or a class derived from SOMObject) as their base class, all SOM classes are expected to have SOMClass or a class derived from SOMClass as their metaclass. Metaclasses define "class" methods (sometimes called "factory" methods or "constructors") that manufacture objects from any class object that is defined as an instance of the metaclass.

To define your own class methods, define your own metaclass by subclassing SOMClass or one of its subclasses. Three methods that SOMClass inherits and overrides from SOMObject are typically overridden by any metaclass that introduces instance data somInit, somUninit, and somDumpSelfInt. The new methods introduced in SOMClass that are frequently overridden are somNew, somRenew, and somClassReady. (See the descriptions of these methods for further information.)

Other reasons for creating a new metaclass include tracking object instances, automatic garbage collection, interfacing to a persistent object store, or providing/managing information that is global to a set of object instances.

  • File stem: somcls
  • Base: SOMObject
  • Metaclass : SOMClass (SOMClass is the only class with itself as metaclass.)
  • Ancestor Classes: SOMObject

Types

   typedef sequence <SOMClass> SOMClassSequence;

   struct somOffsetInfo  {
      SOMClass          cls;
      long              offset
      };
   typedef sequence <somOffsetInfo> SOMOffsets;


Attributes

  readonly attribute somOffsets somInstanceDataOffsets

_get_somInstanceDataOffsets returns a sequence of structures, each of which indicates an ancestor of the receiver class (or the receiver class itself) and the offset to the beginning of the instance data introduced by the indicated class in an instance of the receiver class. The somOffsets information can be used in conjunction with information derived from calls to a SOM Interface Repository to completely determine the layout of SOM objects at runtime.


Example Code

#include <somcls.xh>
main()
{
   int i;
   SOMClassMgr *scm = somEnvironmentNew();
   somOffsets so = _SOMClass->_get_somInstanceDataOffsets();
   for (i=0; i
      printf("In an instance of SOMClass, %s data starts at %d\n",
                so._buffer[i]->cls->somGetName(),
                so._buffer[i]->offset);
}

Introduced Methods

The following list shows all the SOMClass introduced methods.

Group: Instance Creation (Factory)

  • somAllocate
  • somDeallocate
  • somNew
  • somNewNoInit
  • somRenew
  • somRenewNoInit
  • somRenewNoInitNoZero
  • somRenewNoZero

Group: Initialization/Termination

  • somAddDynamicMethod
  • somClassReady

Group: Access

  • somGetInstancePartSize
  • somGetInstanceSize
  • somGetInstanceToken
  • somGetMemberToken
  • somGetMethodData
  • somGetMethodDescriptor
  • somGetMethodIndex
  • somGetMethodToken
  • somGetName
  • somGetNthMethodData
  • somGetNthMethodInfo
  • somGetNumMethods
  • somGetNumStaticMethods
  • somGetParents
  • somGetVersionNumbers

Group: Testing

  • somCheckVersion
  • somDescendedFrom
  • somSupportsMethod

Group: Dynamic

  • somFindMethod
  • somFindMethodOk
  • somFindSMethod
  • somFindSMethodId
  • somFindSMethodOk
  • somLookupmethod

Overridden Methods

The following list shows all the methods overridden by the SOMClass class. These methods are overridden in order to modify the behavior defined by an ancestor class.

  • somDumpSelfInt
  • somDefaultInit
  • somDestruct

Deprecated Methods

Use of the methods listed below is discouraged. There are three reasons for this:

First, these methods are used in constructing classes, and this capability is provided by the function somBuildClass. Class construction in SOM is currently a fairly complex activity, and it is likely to become even more so as the SOMobjects kernel evolves. To avoid breaking source code that constructs classes, you are advised to always use somBuildClass to build SOM classes. Note that the SOM language bindings always use somBuildClass.

Second, these methods are used for customizing aspects of SOM classes, such as method resolution and object creation. Doing this requires that metaclasses override various methods introduced by SOMClass. However, if this is done without the Cooperation Framework that implements the SOM Metaclass Framework, SOMobjects cannot guarantee that applications will function correctly. Unfortunately, the Cooperation Framework (while available to SOM users as an experimental feature) is not officially supported by the SOMobjects Toolkit. So, this is another reason why the following methods are deprecated.

Finally, some of these methods are now obsolete, so it seems appropriate that their use be discouraged.

  • somAddStaticMethod
  • somGetApplyStub
  • somGetClassData
  • somGetClassMtab
  • somGetInstanceOffset
  • somGetMethodOffset
  • somGetParent
  • somGetPCIsMtab
  • somGetPCIsMtabs
  • somGetRdStub
  • somInitClass
  • somInitMIClass
  • somOverrideMtab
  • somOverrideSMethod
  • somSetClassData
  • somSetMethodDescriptor
  • _get_somDirectInitClasses attribute
  • _set_somDirectInitClasses attribute