Kann mir jemand ein konkretes Beispiel geben, wo eine "private" Methode etwas erreichen würde, was mit einer "geschützten" Methode nicht möglich ist? Mit anderen Worten, ich möchte wissen, warum ein Sprachentwickler "private" Methoden in Ruby einfügt.Warum brauchen wir 'private' Methoden in Ruby
Antwort
Es hängt wirklich von Ihrem Entwicklerteam und davon ab, wie Ihr Code verwendet wird. In Ruby sind diese Tags oft mehr als harte und schnelle Regeln, es gibt Möglichkeiten, die Methoden private
und protected
bei Bedarf zu umgehen, aber sie können als starker Hinweis für jemanden dienen, der Ihren Code verwendet, dessen Aufruf unerwünscht ist.
private
ist etwas, das sparsam verwendet werden sollte, da es das Leben für diejenigen schwierig machen kann, die etwas unterklassifizieren wollen. protected
ist normalerweise ausreichend und hilft, externen Code zu den Methoden zu steuern, die verwendet werden sollten.
Es gibt Situationen, in denen private
notwendig ist, das heißt, Sie möchten verhindern, dass Unterklassen zu viel darüber wissen, wie die Elternklasse funktioniert. Dies ist häufiger in Bibliotheken, in denen Sie Benutzer zur Unterklasse ermutigen, aber Sie möchten auch einige der internen Funktionen, die nicht von ihnen verwendet werden sollen, sperren. Dadurch können Sie diese Methoden später nach Belieben umgestalten, ohne den Code einer anderen Person zu verletzen.
Einer der Grundsätze eines guten objektorientierten Designs ist die Kontrolle, wie viel Methodenexposition Sie haben. Zu viel Engagement bedeutet, dass Sie sich verpflichtet fühlen, dass sie sich jetzt und in Zukunft identisch verhalten, es sei denn, Sie sind bereit, bahnbrechende Änderungen vorzunehmen. Zu wenig Belichtung bedeutet, dass Ihre Klasse schwierig zu verwenden, wenn nicht sogar nutzlos ist. Dieses Gleichgewicht ist immer schwierig.
Also private
und protected
existieren aus Gründen, und es ist weitgehend die gleichen Gründe, dass C++, Java, PHP, Python und viele andere diese haben. Es ist die Kontrolle darüber, wie und wo Ihre Methoden verwendet werden sollten.
Kannst du ein Beispiel geben, wo' private' es schwierig macht, Unterklassen zu bilden? –
@ JörgWMittag Wenn Sie Ihre Methoden zu sehr beschützen und Ihre Unterklasse Zugriff auf eine dieser "privaten" Methoden benötigt, um etwas Nützliches zu tun, dann ist das ein Problem. Es ist sehr situationsbedingt, aber Sie werden wissen, wann es passiert, weil genau das, was Sie brauchen, hinter Glas verschlossen ist. – tadman
Ich sehe nicht, wie eine Oberklasse den Zugriff auf eine Methode auf eine Unterklasse verhindern kann, indem sie 'privat' macht. Können Sie ein Beispiel geben, in dem 'private' den Zugriff auf eine Methode einer Superklasse in einer Unterklasse verhindert? –
- 1. Warum brauchen wir den Gemfile.lock in Ruby?
- 2. Private Methoden in Ruby
- 3. Verständnis private Methoden in Ruby
- 4. Warum brauchen wir np.squeeze()?
- 5. Warum brauchen wir targetNamespace?
- 6. Warum brauchen wir "out" -Parameter?
- 7. Warum brauchen wir Entwurfsmuster
- 8. warum brauchen wir WCF
- 9. Warum brauchen wir hier typename?
- 10. Warum brauchen wir Standardmethoden in Java?
- 11. Warum brauchen wir Nginx mit dünnen Produktionseinstellungen?
- 12. Warum brauchen wir statische Konstruktoren?
- 13. Warum brauchen wir einen Grobquantisierer?
- 14. Warum brauchen wir virtuellen Speicher?
- 15. Warum brauchen wir ng-click?
- 16. Warum brauchen wir Web-Sockets?
- 17. Warum brauchen wir virtuelle Tabelle?
- 18. Warum brauchen wir ungültige Funktionen?
- 19. Ruby Conditional-Assignment und Private Methoden
- 20. Builder-Entwurfsmuster: Warum brauchen wir einen Director?
- 21. Warum brauchen wir benutzerdefinierte Klassenlader in Java
- 22. Warum brauchen wir Routing-Schlüssel in Rabbitmq
- 23. Warum brauchen wir Audit-Spalten in Datenbanktabellen?
- 24. Warum brauchen wir BindToController in Custom Direktive
- 25. Warum brauchen wir force.on ('tick' .. in d3
- 26. Warum brauchen wir Schnittstellen in Java?
- 27. Warum platziert OpenJDK private Methoden in vtable?
- 28. Sollten wir private Methoden in @covers in PHP-Codeabdeckung einschließen
- 29. Warum brauchen wir Konstruktoren und private Mitglieder in der abstrakten Klasse?
- 30. Warum brauchen wir ZooKeeper im Hadoop-Stack?
Sie haben Recht, dass sie nicht mehr Funktionalität als geschützt oder öffentlich ermöglichen. Tatsächlich entfernen sie die Funktionalität - insbesondere machen sie die Ausführung der Methode etwas schwieriger außerhalb der Klasse/des Moduls, in der sie definiert sind. Betrachten Sie eine Hilfsmethode, die intern von einer anderen Methode verwendet wird. Jemand, der die Bibliothek benutzt, wird diese Hilfsmethode wahrscheinlich nicht direkt aufrufen. Es könnte als privat markiert werden, damit jemand, der den Quellcode durchsucht, diese Funktionalität erkennt. Es ähnelt der Typ-Überprüfung, dass es keine Funktionalität hinzufügt, aber Entwicklern das Leben leichter machen kann. –
eine Verwendung von privaten Methoden, die ich gefunden habe, ist ihre Verwendung bei der Definition von 'globalen' Methoden (Methoden außerhalb jeder Klasse definiert) diese Methoden werden private Methoden von Object und kann ohne Empfänger aufgerufen werden, so imitiert einen mehr nicht-objektorientierten Stil . Dies ist jedoch eher eine "syntaktische Zucker" -Funktion als ein Sprachdesign-Problem. –
Ich verstehe das nicht wirklich. Wenn Sie eine globale Methode definieren, d. H. "Def foo" im globalen Gültigkeitsbereich. Welchen Unterschied macht es, wenn es öffentlich oder privat ist? In jedem Fall könntest du 'foo' einfach anrufen. Es ist auch erwähnenswert, dass private oder protected nie vollständig verhindert, die Methode aufzurufen - es erfordert nur "send", um manchmal verwendet zu werden. –