Ich habe die frühe Geschichte von Smalltalk gelesen und es gibt einige Erwähnungen von "Aufgaben", die mich dazu bringen, mein Verständnis ihrer Bedeutung in Frage zu stellen:
Obwohl OOP aus vielen Motivationen stammte, standen zwei im Mittelpunkt. Die große Aufgabe bestand darin, ein besseres Modulschema für komplexe Systeme zu finden, bei dem Details ausgeblendet wurden, und die kleine Aufgabe darin, eine flexiblere Version der Zuweisung zu finden und dann zu versuchen, sie insgesamt zu beseitigen.
( 1960-66 - Early OOP und andere prägende Ideen der sechziger Jahre , Sektion I)
Was ich von Simula bekommen habe, war, dass Sie jetzt Bindungen und Aufgaben durch Ziele ersetzen können . Das Letzte, was Sie von einem Programmierer erwarten, ist das Durcheinander mit dem internen Zustand, auch wenn er im übertragenen Sinne dargestellt wird. Stattdessen sollten die Objekte als Orte mit höherem Verhalten dargestellt werden, die für die Verwendung als dynamische Komponenten besser geeignet sind . (...) Es ist bedauerlich, dass vieles, was heute als "objektorientiertes Programmieren" bezeichnet wird, einfach altmodisches Programmieren mit schickeren Konstrukten ist. Viele Programme sind mit "Zuweisungsstil" -Operationen geladen, die jetzt durch teurere angehängte Prozeduren ausgeführt werden.
(aus "Objektorientierter" Stil , Abschnitt IV)
Stimmt es, dass ich die Absicht dahingehend interpretiere, dass Objekte als Fassaden gedacht sind, und dass eine Methode (oder "Nachricht"), mit der eine Instanzvariable für ein Objekt festgelegt werden soll (dh eine "Zuweisung"), den Zweck missachtet? Diese Interpretation scheint durch zwei spätere Aussagen in Abschnitt IV gestützt zu werden:
Vier Techniken, die zusammen verwendet werden - Dauerzustand, Polymorphismus, Instanziierung und Methoden als Ziele für das Objekt - machen einen Großteil der Kraft aus. Keines von diesen erfordert den Einsatz einer "objektorientierten Sprache" - ALGOL 68 kann fast auf diesen Stil umgestellt werden - und OOPL fokussiert lediglich den Verstand des Designers in eine bestimmte fruchtbare Richtung. Die richtige Kapselung ist jedoch nicht nur eine Verpflichtung zur Abstraktion des Staates, sondern auch zur Beseitigung zustandsorientierter Metaphern aus der Programmierung.
...und:
Zuweisungserklärungen - auch abstrakte - drücken sehr niedrige Ziele aus, von denen mehr benötigt werden, um etwas zu erreichen. Im Allgemeinen möchten wir nicht, dass der Programmierer mit dem Status herumspielt, ob simuliert oder nicht.
Wäre es fair zu sagen, dass hier undurchsichtige, unveränderliche Instanzen gefördert werden? Oder sind es einfach direkte Zustandsänderungen, die entmutigt werden? Wenn ich einen Zum Beispiel habe BankAccount
Klasse, es ist OK zu haben GetBalance
, Deposit
und Withdraw
Instanz - Methoden / Nachrichten; nur sicherstellen, dass es keine SetBalance
Instanzmethode / -nachricht gibt?