A pure object model ensures that the power of object-oriented programming is uniformly available for all data and all parts of programs. We feel that a classless object model is simpler and more powerful than traditional class-based object models. Since message passing is the cornerstone of the power of object-oriented systems, Cecil includes a fairly general form of dynamic binding based on multiple dispatching.
Inheritance also plays a key role in organizing software and factoring out commonalities.
Cecil extends traditional inheritance mechanisms with predicate objects to support an automatic form of classification of objects into specialized subclasses based on their run-time state. Since this state can be mutable, an object's classification can change over time. This mechanism enables inheritance and classification to be applied even when modelling time-varying properties of an object. For example, a rectangle can be automatically classified as the predicate subobject square whenever it satisfies the predicate that its length equals its width, even if the rectangle's length and width are mutable. Fields can be given default initial values as part of their declaration.