@Ligatur:
es ist für mich ziemlich offensichtlich, dass du noch nicht objektorientiert programmiert hast.
Kapselung ist sinnvoll, da wo sie einem zweck dient. Bietet eine Programmiersprache nicht die möglichkeit da zu kapseln wo es sinnvoll ist, dann ist sie keine objektorientierte programmiersprache. Alan Kay ist ein theoretiker, der es sich leisten kann prinziep vor realität zu setzen.
Ein programm verliert aber nicht an sicherheit und stabilität, wenn man dort auf kapselung verzichtet, wo sie vollkomener quatsch ist.
Sagen wir, wir haben ein objekt das ein Fenster steuern soll mit der eigenschaft, dass das Fenster auf der x-achse nur an positionen stehen darf, die ein vielfaches von 10 sind. Dann macht es sinn eine Setterfunktion dafür zu schreiben, die verhindert das die x position einen ungültigen wert annimmt, wie zb 24. Ist es aber egal, wo das fenster auf der x-achse steht dann würde eine setterfunktion so aussehen:
Code: Alles auswählen
;Objekt-PB pseudocode
Method SetXPosition(argument_x.l)
object_x=argument_x
EndMethod
Was in der Funktion vollkommen identisch ist mit
;Objekt-PB pseudocode
MyObject\object_x=position
Ersteres ist viel inefizienter (brauch in der anwendung einen Funktionsaufruf) und bringt keine zusätzliche Sicherheit. Viele theoretische Konzepte lassen sich nicht realistisch in reiner Ursprungsform umsetzen.
Wenn du tatsächlich Kays anspruch als maß für eine Objektorientierte Sprache nimmst (wozu ich mal anmerken möchte das entgegen anderslautender Gerüchte Kay nicht der einzige Mensch auf dem Planeten ist und auch nicht der einzige Informatiker), dann ist auch die aktuellste Implemantierung von Lisp (Dylan) afaik nichtmehr objektorientiert, dann gibt es übrigens auch keine Risc-Prozessoren, weil Riscprozessoren in theoretischer reinform ebenfalls nicht praktikabel sind.
Im wissenschaftlichen umfeld gibt es viele Puristen, die dermaßen auf den theoretischen Grundlagen bestehen, dass ihre Lösungen sogar Teilweise überhauptnicht funktionsfähig sind (siehe einige akademische implementierungen von Wireless Mesh Networks, die tatsächlich nur unter simulationsbedingungen funktionieren).
Übrigens gibt auch die ISO definition von Objektorientierter Programmierung Kay nicht recht. Natürlich kannst du dich seiner Meinung anschließen und darauf bestehen, dass man uneffiziente implementierungen schreibt, aber die mehrheit derjenigen, die den begriff objektorientiert benutzt sind eben anderer Meinung.