it-swarm.com.de

Best Practices für die Verwendung von öffentlichen, geschützten, privaten?

Ist es fair zu sagen, dass es eine gute Praxis ist, alles im Voraus auf private zu setzen, wenn etwas codiert wird?

Und dann nur auf protected aktualisieren, wenn eine Unterklasse es benötigt, oder public, wenn eine andere Klasse es benötigt?

12
AJJ

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 das Klassendesign, 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. Dies beinhaltet das Nachdenken über Ihre öffentlichen Methoden, bevor Sie über private/Implementierungsdetails nachdenken.

Darüber hinaus verpasst dieser Ansatz normalerweise die Möglichkeit, 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 Designprinzipien fördern testbaren Code?" )

Sobald Sie die öffentliche Schnittstelle definiert haben, ist es eine gute Idee, den Rest standardmäßig auf privat zu setzen, da das meiste davon in der Regel grobe Implementierungsdetails sind, die für nichts außerhalb der Klasse von Bedeutung sind.

10
Ben Cottrell

"Und dann nur auf geschützt aktualisieren, wenn eine Unterklasse es benötigt, oder öffentlich, wenn eine andere Klasse es benötigt?"

Das ist der falsche Ansatz. Zur Entwurfszeit sollten Sie wissen, welchen öffentlichen Zugriff Sie möchten gewähren. Normalerweise gewähren Sie öffentlichen Zugang, weil dies der ganze Zweck Ihrer Klasse ist. Und Sie geben geschützten Zugriff, weil Sie wollen Unterklassen, um auf Dinge zuzugreifen. Und Sie verwenden privat für Dinge, die niemanden etwas angehen.

Wenn jemand braucht Zugang zu Dingen, auf die er nicht zugreifen kann, dann sollten Sie wirklich gründlich darüber nachdenken brauchen. Sie sollten nicht brauchen diesen Zugriff, oder Ihr Design ist falsch. Vielleicht ist dein Design ist falsch und etwas ist nicht öffentlich, das öffentlich sein sollte, also änderst du das. Aber wenn Ihr Design richtig ist, stimmt etwas nicht mit need, also beheben Sie that, anstatt Ihr Design zu beschädigen.

8
gnasher729

Der Schlüssel zum Verständnis dieses Aspekts der objektorientierten Programmierung ist das Konzept von Datenkapselung. Die Idee ist, eine Klasse verständlicher zu machen, indem ihre Implementierungsdetails ausgeblendet werden. Dies nennt man Daten verstecken. Daher möchten wir nur die Funktionen verfügbar machen (öffentlich 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 wie möglich über eine Klasse vor anderen Klassen verbergen. Zu verstehen, wann etwas öffentlich, privat oder geschützt sein sollte, ist leicht zu lernen, aber schwer zu meistern.

1
Chris Ghyzel