Smalltalk öffentliche Methoden vs private / geschützte Methoden [geschlossen]

7

Ich habe bemerkt, dass die Smalltalk-Sprache kein Konzept von privaten / geschützten Methoden hat. Alle Methoden sind öffentlich. Ausgehend von einem Java / C ++ - Hintergrund habe ich dies als eine grundlegende Schwäche der Sprache betrachtet, da jede in Smalltalk erstellte Anwendung vollständig manipulierbar wäre. Ich denke, man könnte sich darauf verlassen, Konventionen zu benennen, um die öffentliche API zu dokumentieren, und Präfix-Methoden, um sie als privat zu kennzeichnen (ich glaube, Squeak macht das), aber es ist immer noch komplett offen.

Hat dieser Ansatz Vorteile gegenüber expliziten Zugriffsmodifikatoren zur Steuerung? Zugriff auf Methodenaufrufe?

    
Desolate Planet 13.09.2011, 09:06
quelle

4 Antworten

13

Tatsächlich ist der Smalltalk-Weg, private Methoden in die Kategorie "privat" zu stellen. Dies zeigt an, dass Sie diese Methoden nicht verwenden sollten, aber dies wird natürlich nicht erzwungen.

Das ist Absicht - es ist eine Funktion, kein Bug. Smalltalk wurde von Anfang an als offenes System konzipiert.

Einige Vorteile:

  • Wenn ich es einfach tun muss - vielleicht hat der Bibliotheksdesigner nicht vorausgesehen, dass ich eine bestimmte Sache bloßstellen muss - kann ich immer noch diese privaten Methoden nennen. Offensichtlich ist dies nicht etwas, das man leichtfertig tut: eher, vernünftig, vorsichtig, wissend, dass es eine taktische Lösung ist.
  • Sprachliche Einfachheit.
  • (Laut Alexandre Jasmins Kommentar) macht Smalltalk keinen Unterschied zwischen dem, was Sie, der Programmierer, tun können und was die Sprache / Umgebung tun kann. Das bedeutet, dass Smalltalk-the-image all die Dinge offenlegt, die Sie brauchen, um Ihre eigenen Inspektoren / Debugger / was auch immer zu bauen, ohne spezielle Tools mit We-Can-Do-This-But-You-Can-Techniken zu liefern.
Frank Shearar 13.09.2011, 09:53
quelle
5

Private und geschützte Methoden sind in der Tat eine signifikante Schwäche von Sprachen wie C ++, Java und C #. Sie sagen grundsätzlich zu ihren Nutzern: Ich möchte nicht lernen und mich weiterentwickeln. Die Konsequenz daraus (und viel früher Bindung) ist, dass diese Sprachen viel mehr BDUF benötigen und somit für einen modernen (agilen) Entwicklungsprozess weit weniger brauchbar sind.

    
Stephan Eggermont 17.09.2011 17:45
quelle
3

Die erste Frage ist, um welche privaten / geschützten Zugriffsmodifizierer es sich handelt? Grundsätzlich geht es nicht um Sicherheit. Es geht darum, dem Benutzer die richtige Schnittstelle zur Verfügung zu stellen. Davon ausgehend macht es wenig Unterschied, ob Kategorien geschützt / privat und ein Sprachkonstrukt dafür sind.

Ich würde sogar sagen, dass das Vorhandensein eines privaten / geschützten Sichtbarkeitsmodifikators dem Problem mehr Komplexität bringt, als es tatsächlich löst.

Außerdem glaube ich nicht, dass private / geschützte Sichtbarkeit eine gute Antwort auf dieses Problem     

mathk 15.09.2011 08:07
quelle
-1

Zumindest sollte Smalltalk die textuelle Konvention haben, dass Methodennamen, die mit 'Unterstrich' beginnen, verboten sind, außerhalb der Objekte selbst aufzurufen. Leider glaube ich nicht, dass 'Unterstrich' als erstes Zeichen eines Methodennamens erlaubt ist.

    
Saijanai 13.09.2011 14:33
quelle