I interviewed David West, the author of the Object Thinking book, a few weeks ago, and he said that classes were not meant to be in object-oriented programming at all. He actually said that earlier; I just didn’t understand him then. The more I’ve thought about this, the more it appears obvious that we indeed do not need classes.
Here is a prototype.
Let’s say we have only types and objects. First, we define a type:
type Book {
void print();
}
Then we create an object (pay attention; we don’t “instantiate”):
Book b1 = create Book("Object Thinking") {
String title;
Book(String t) {
this.title = t;
}
public void print() {
print("My title: " + this.title);
}
}
Then we create another object, which will behave similarly to the one we already have but with different constructor arguments. We copy an existing one:
Book b2 = copy b1("Elegant Objects");
Libraries will deliver us objects, which we can copy.
That’s it.
No implementation inheritance and no static methods, of course. Only subtyping.
Why not?