В основе предлагаемой объектной модели лежит объектная модель из операционной системы NextStep (сейчас используемая в Max OS X), адаптированная к языку С++ (насколько это возможно в силу ограниченности языка С++).
Класс Object является корневым классом для всех используемых далее объектов (в отличие от АТД) (в конце этой главы приводится диаграмма введенных в него классов). Данный класс поддерживает подсчет количества ссылок на него (reference counting), элементы RTTI, возможности сравнения объектов, использования их в качестве ключей в ассоциативных массивах, имя и битовые флаги.
Ниже приводится описание этого класса.
class Object {
protected :
char * name ;
int refCount ;
long flags;
Object * owner;
int lockCount;
MetaClass * metaClass;
Объектная модель. Основные классы
public:
Object () ;
Object ( const char * aName ); virtual -Object ();
virtual const char * getClassName () const
{
return metaClass != NULL ? metaClass -> getClassName () : "";
}
virtual bool isOk () const
// returns non-zero if objects is ok
{
return true;
}
virtual bool isNull () const
{
return false;
}
virtual int init () // postconstructor initialization
{
return 1;
virtual long hash () const // return hash for object
{
return 01;
}
bool isKindOfClass ( const MetaClass& theClass ) const
return metaClass != NULL ? metaClass -> isKindOfClass ( theClass ) : false;
bool isInstanceOfClass ( const MetaClass& theClass ) const
{
return metaClass != NULL ? metaClass ->
isInstanceOfClass (theClass) : false;
}
virtual int compare ( const Object * obj ) const;
// returns non-zero if this object is // equal to the object obj
virtual bool isEqual ( const Object * obj ) const
{
return compare ( obj ) == 0;
}
virtual void lock () {
if ( lockCount++ < 1 ) doLock ();
}
virtual void unlock () {
if ( --lockCount < 1 ) doUnlock ();
}
virtual void doLock () {} virtual void doUnlock () {}