Um noch ein bisschen zu Klugscheißen: Natürlich sind Klassen nicht notwendig. Selbst das Konzept von Objekten - welches von Klassen unabhängig ist, auch wenn das häufig in einen Topf geworfen wird - ist entbehrlich. Ebenso sind Funktionen als Abstraktion entbehrlich. Wir wissen, dass eine Turingmaschine (Turing, 1936) alle berechnbaren Probleme lösen kann. Wir wissen, dass z.B. eine Unbeschränke Registermaschine (Shepherson und Sturgis, 1963) mit den beiden Befehlen "Springe, wenn Register X ungleich 0 ist" und "Ziehe 1 von Registerinhalt X ab" auskommt, da man damit eine Turning-Maschine simulieren kann. Ein weiteres Stichwort ist "Lambda-Kalkül" (Church und Kleene, 1936), ein Formalismus, der einzig Funktionen kennt und die mathematische Grundlage für fast alle Programmiersprachen, die wir so kennen (und die auf dem von Neumann-Prinzip basieren), bildet.
Es ist eine Fingerübung, Objekte mittels Funktionen (die über Variablen abgeschlossen sind, so genannte Closures) zu repräsentieren. Klassen sind schließlich nichts anderes (neben der Idee, als Bauplan zu fungieren) als Funktionen, die Objekte erzeugen können.
Stefan