Ist es fair zu sagen, dass es eine gute Praxis ist, private
beim Codieren alles nach vorne zu verschieben?
Und aktualisieren Sie es dann nur, protected
wenn eine Unterklasse es benötigt oder public
wenn eine andere Klasse es benötigt?
Ist es fair zu sagen, dass es eine gute Praxis ist, private
beim Codieren alles nach vorne zu verschieben?
Und aktualisieren Sie es dann nur, protected
wenn eine Unterklasse es benötigt oder public
wenn eine andere Klasse es benötigt?
Antworten:
Kurze Antwort: Ja
Längere Antwort:
Ja, aber das sollte nicht als Vorschlag interpretiert werden, zunächst Ihre Klassen mit allem Privaten zu schreiben. Dieser Ansatz impliziert Klassenentwurf, indem Sie sich auf die Implementierungsdetails konzentrieren, bevor Sie sich für eine Schnittstelle entschieden haben.
Einer der wichtigsten Aspekte, die beim Entwerfen einer Klasse berücksichtigt werden müssen, ist die Art und Weise, wie sie verwendet wird. Dazu müssen Sie über Ihre öffentlichen Methoden nachdenken, bevor Sie sich Gedanken über Details zu Private / Implementierung machen.
Außerdem verpasst dieser Ansatz normalerweise die Chance, sich zu fragen: "Wie würde ich einen Komponententest für diese Klasse schreiben?" - Dies ist eine wichtige Frage, auch wenn Sie keine Unit-Tests schreiben. (Siehe auch: "Welche Gestaltungsprinzipien fördern testbaren Code?" )
Sobald Sie die öffentliche Schnittstelle definiert haben, ist es eine gute Idee, den Rest auf privat zurückzusetzen, da die meisten Details der Implementierung normalerweise grobkörnig sind und für nichts außerhalb der Klasse von Belang sind.
"Und aktualisieren Sie es dann nur auf protected, wenn eine Unterklasse es benötigt, oder public, wenn eine andere Klasse es benötigt?"
Das ist der falsche Ansatz. Zur Entwurfszeit sollten Sie wissen, welchen öffentlichen Zugriff Sie gewähren möchten . Normalerweise gewähren Sie öffentlichen Zugang, weil das der ganze Zweck Ihrer Klasse ist. Und Sie geben geschützten Zugang , weil Sie wollen Subklassen Zugang Dinge. Und Sie verwenden privat für Dinge, die niemand anderes zu tun hat.
Wenn jemand Zugang zu Dingen benötigt, auf die er nicht zugreifen kann, sollten Sie sich wirklich Gedanken über diese Notwendigkeit machen . Sie sollten diesen Zugang nicht benötigen , oder Ihr Design ist falsch. Vielleicht ist Ihr Design ist falsch, und etwas ist nicht öffentlich , die öffentlich sein sollten, so können Sie das ändern. Aber wenn Ihr Design stimmt, stimmt etwas mit dem Bedarf nicht . Sie beheben dies , anstatt Ihr Design zu beschädigen.
private
oder protected
?
Der Schlüssel zum Verständnis dieses Aspekts der objektorientierten Programmierung ist das Konzept der Datenkapselung . Die Idee ist, eine Klasse verständlicher zu machen, indem die Implementierungsdetails ausgeblendet werden. Dies wird als Ausblenden von Daten bezeichnet . Daher möchten wir nur die Funktionen verfügbar machen, die für die Verwendung der Klasse erforderlich sind. Diese Funktionen sind die Schnittstelle zur Klasse.
Stellen Sie sich eine Schnittstelle wie das Rad eines Autos vor. Sie entscheiden, in welche Richtung das Auto fährt, indem Sie das Rad drehen. Unter den Abdeckungen befinden sich jedoch Drehventile, Hydraulik und Riemenscheiben, die die Drehung Ihrer Räder ändern. Sie müssen jedoch kein Maschinenbauingenieur sein, um ein Auto zu fahren.
Die Antwort auf Ihre Frage lautet also ja. Sie möchten so viele Details zu einer Klasse wie möglich vor anderen Klassen verbergen. Zu verstehen, wann etwas öffentlich, privat oder geschützt sein sollte, ist leicht zu lernen, aber schwer zu meistern.