Node:Inheritance, Next:, Previous:Obj Hierarchies, Up:Obj Hierarchies



Inheritance

Immediate super-objects are declared by defining the method super/2 within the object. (Any definition super(Super) is transformed to super(Super,[])). The objects declared by super/2 are the immediate objects from which a method is inherited if not defined within the object. This implies that the inheritance mechanism is an overriding one. One could possibly have a union inheritance, whereby all clauses defining a method are collected from the super hierarchy and executed in a Prolog fashion. This can easily be programmed in SICStus Objects, using delegation to super objects.

The following example shows some objects used for animal classification.

animal :: {}.

bird :: {
        super(animal) &
        skin(feather) &
        habitat(tree) &
        motions(fly)
        }.

penguin :: {
        super(bird) &
        habitat(land) &
        motions(walk) &
        motions(swim) &
        size(medium)
        }.

| ?- penguin :: motions(M).
M = walk ;
M = swim ;
no

| ?- penguin :: skin(S).
S = feather ;
no

The following is an example of multiple inheritance: an object john is both a sportsman and a professor:

john :: {
        super(sportsman) &
        super(professor) &
        :
        }.

Inheritance will give priority to the super-objects by the order defined in the super/2 method. Therefore in the above example John's characteristics of being a sportsman will dominate those of being professor. Other kinds of hierarchy traversal can be programmed explicitly using the delegation mechanism.