  The main goal of concept-oriented programming (COP) is describing how objects
are represented and accessed. It makes references (object locations)
first-class elements of the program responsible for many important functions
which are difficult to model via objects. COP rethinks and generalizes such
primary notions of object-orientation as class and inheritance by introducing a
novel construct, concept, and a new relation, inclusion. An advantage is that
using only a few basic notions we are able to describe many general patterns of
thoughts currently belonging to different programming paradigms: modeling
object hierarchies (prototype-based program-ming), precedence of parent methods
over child methods (inner methods in Beta), modularizing cross-cutting
con-cerns (aspect-oriented programming), value-orientation (functional
programming). Since COP remains backward compatible with object-oriented
programming, it can be viewed as a perspective direction for developing a
simple and natural unified programming model.
