Nun wäre es gewiss wünschenswert, für das Entleeren eines Apfelsaftglases genau die »richtigen« Funktionen zur Verfügung zu haben, die nur für diese Art von Objekten gedacht sind. So ist beispielsweise das regelrechte Ausschütten eher für das Bewässern eines Gartens als für den Trinkvorgang geeignet. Das Abspreizen des Fingers ist - wenn es denn überhaupt einen Sinn dafür gibt - für das eigentliche Ziel völlig wirkungslos. Um zu verhindern, dass unbrauchbare oder gar falsche Funktionen auf Datenobjekte wirken, für die sie nicht gedacht sind, gibt es die sogenannte Klasse. In einer solchen Klasse werden Datenobjekte und ihre zugehörigen Funktionen zu einer Einheit verbunden und bilden ein hybrides Gebilde, was weder ein reines Datenobjekt noch eine reine Funktion ist. Auf diese Klassen wirken keine Funktionen mehr. Die in den Klassen enthaltenen Datensätze werden nur noch durch die klasseneigenen Funktionen manipuliert. Statt von Funktionen wird aus diesem Grunde von Methoden. Der eigentliche Arbeitsvorgang passiert also innerhalb der Klasse und kann von aussen nicht gesteuert werden. Untereinander tauschen die Klassen nur noch Nachrichten aus, also Datensätze, die von Methoden einer Klasse an die Methoden einer anderen Klasse weitergereicht werden. Klassen sind demnach Objekte, die miteinander kommunizieren können, während reine Datenobjekte Gebilde sind, die kein Eigenleben haben, sondern reine Befehlsempfänger sind.