Kevo -- a language motivated by family resemblances. Perhaps the only object- oriented language
that comes closer to the family resemblance model presented by philosophers and cognitive
psychologists is Kevo [Tai92, SLS94]. Kevo differs from most other prototype-based
object-oriented languages in the respect that it does not support inheritance or delegation in
the traditional way. Instead of these and other mechanisms that put a heavy emphasis on sharing
and shared properties, Kevo objects are logically stand-alone and typically have no shared
properties with each other. (Note that at the implementation level Kevo uses sharing extensively
in order toconserve memory, but this is fully transparent to the programmer.) New objects are
created by copying, and the essence of inheritance, incremental modification, is captured by
providing a set of module operations that allow the objects to be manipulated flexibly. Late
binding is used to ensure that methods defined earlier can be overridden to extend existing
behavior in an object-oriented manner.
In order to make it possible to perform modifications to objects not only at the level of
individual objects, but also per group, Kevo uses a notion of object (clone) family. An object
family is a system-maintained group of objects who are considered to be similar. When objects
are modified, the system implicitly moves objects from one family to another, or creates new
families as necessary. For instance, when adding new properties to a window object, a new family
of objects is created, unless another object with identical properties already exist.
Conversely, if the added properties are later removed from the window object, the object will
again return to its earlier family (provided that the family still exists). As the criterion of
similarity, object interface compatibility is used, meaning that objects are considered to be
similar if they have the same external interface/signature. In an ideal situation, object
comparison should be based on behavioral compatibility, i.e., ensuring that objects react to
external stimuli identically, but in practice coming up with an algorithm that could determine
100% surely and efficiently whether two objects are behaviorally compatible is impossible.
Object families in Kevo have a conceptual relation to family resemblances presented by
philosophers. When combined with the notion of stand-alone objects and the reduced focus on
shared properties, this naturally leads to a design and programming style in which advance
classification and categorization have a lesser role. Yet even Kevo is still far away from the
model mostpresented by prototype theorists who argue that in modeling and classification
subjective perceptions have a central role. There is some recent work in the area of
subject-oriented programming that aims at taking into account the subjective factors in
object-oriented design, but at this point this work is stillly preliminary (see, e.g., [HaO93]).