Link Search Menu Expand Document

Funcons-beta : Objects.cbs | PRETTY | PDF


Objects

Datatype
  objects ::= object(_:atoms, _:identifiers, _:environments, _:objects*)

object( A, C, Env, O*) is an object:

  • distinguished by an atom A,
  • of a class named C,
  • with an environment Env with the features of the object, and
  • a sequence O* of subobjects of the direct superclasses of C. object( A, C, Env) is an object of a base class. object( A, C, Env, O′) is an object of a class with a single superclass. With multiple inheritance, subobjects due to repeated inheritance of the same class may be shared.

Implementations of objects generally represent an object as a vector of fields, and use pointers and offsets for efficient access to individual fields. The representation of objects used in this specification is independent of such implementation concerns.

Funcon
  object-identity(_:objects) : =>atoms
Rule
  object-identity
    object(A:atoms, _:identifiers, _:environments, _*:objects*) ~> A
Funcon
  object-class-name(_:objects) : =>identifiers
Rule
  object-class-name
    object(_:atoms, C:identifiers, _:environments, _*:objects*) ~> C
Funcon
  object-feature-map(_:objects) : =>environments
Rule
  object-feature-map
    object(_:atoms, _:identifiers, Env:environments, _*:objects*) ~> Env
Funcon
  object-subobject-sequence(_:objects) : =>objects*
Rule
  object-subobject-sequence
    object(_:atoms, _:identifiers, _:environments, O*:objects*) ~> O*
Funcon
  object-tree(_:objects) : =>trees(objects)

object-tree O forms a tree where the branches are the object trees for the direct subobjects of O.

For multiple inheritance, different resolution orders can be specified by using difference linearisations of the object tree.