Object-oriented programming (OOP) is a highly preferred approach for implementing software artifacts. Despite the modeling expressiveness of OOP and the popularity of many programming languages supporting it, the notions and concepts involved in class-based object orientation are hard to learn and prone to design errors by nonexperts.
The traditional way to program with objects and classes requires the programmer to first define classes and then orchestrate the interaction of class instances. The authors of this paper propose reversing this process: define classless objects, also known as prototypes, first; then, generalize and abstract a web of interacting objects, and only then extract classes from the generalized objects.
The paper proposes innovative elementary operators that enable a bottom-up process for designing class-based, object-based applications. Although significant research efforts have been expended on related topics, such as mixing functional and OOP approaches, gradual typing, and prototype-based programming, this is apparently the first paper to tackle the issues of class construction from groups of objects.
Although only small examples are included, mainly for pedagogical purposes, it is easy to see the potential of the proposed ideas for promoting better design and teaching object orientation.