Wie greifen Sie die privaten Variablen mit öffentlichen Funktionen?
Also ich weiß nicht, ob Sie einer von Euch gewesen sein/geht auf die NewBoston.Com (tolle Quelle übrigens), aber ich sah dieses video und der Lehrer sagte, wie können Sie den Zugriff auf private Informationen, und verwenden Sie die öffentlichen Funktionen...
Dies ist das video:
http://www.youtube.com/watch?v=jTS7JTud1qQ
Und natürlich einfach überspringen, um am Ende zu bekommen, um den Kern von ihm.
Die Sache, die ich nicht bekommen, obwohl, ist, wie können Sie Zugriff auf private Informationen mit einer öffentlichen Funktion. Wenn Sie eine Funktion, die den öffentlichen, mit dem jeder den Namen, und den Namen, dann ist es nicht nur öffentliche sowieso?, Würde nicht jeder in der Lage sein, um Chaos mein code und meine gewünschte Ausgabe?
InformationsquelleAutor Jim Jam | 2013-12-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dem Punkt der Bereitstellung einer öffentlichen Methode zu ändern, eine private-variable ist, können Sie weitere Steuerelemente einfügen.
Gibt es nicht viel Unterschied zwischen
und
Aber, im zweiten Fall können Sie hinzufügen, Logik, lehnt einige Daten (v. g. ein negativer Wert) oder updates in anderen Bereichen. So können Sie sicherstellen, dass die Daten des Objekts bleibt konstant. Wenn Sie Folgen dem ersten Ansatz, dass die Logik sollte repliziert werden jedes mal, wenn die Eigenschaft, auf die direkt zugegriffen wird (Hinweis: viele Programmierer vergessen, dies zu tun).
Einer der Vorteile von Kapselung (verbergen der internen details) ist wirksam, Sie kann sich ändern, die details der Implementierung einer Klasse/Modul ohne (und benötigen, um zu ändern) der rest des Codes, aber es ist nicht der einzige. Zum Beispiel, mein Beispiel spricht die Beibehaltung einer kohärenten internen status.
InformationsquelleAutor SJuan76
Erstellen triviale Getter und setter (öffentliche Funktionen), ist ein bisschen sinnlos meiner Meinung nach. Wenn Ihre Klasse die Funktionalität ist voll ausgedrückt durch die privaten Variablen, dann triviale Getter und setter sind eine Verschwendung und etwas von einer code smell. Vielleicht sollten Sie ein struct statt.
Aber öffentliche Funktionen bieten eine Schnittstelle, die Führungen der Verwendung der Klasse und einschränkt, was Sie tun können, mit der die privaten Mitglieder. Sie nicht möchten, dass Benutzer Ihrer Klasse zu ändern, einzelne private Mitglieder, die nur Sinn machen, wenn geändert-sync-Schritt.
Es ermöglicht auch die Implementierung ändern, ohne änderung der Schnittstelle. Zum Beispiel sagen Sie, Sie wollen zur Steigerung die Größe einer hash-map. Pseudo-code:
Nun Ihre Implementierung für
increaseSize()
tatsächlich prüfen kann, wenn die neue Größe größer ist als die Vorherige. Es kann auch tatsächlich erstellen Sie eine neue backing_array und kopieren Sie die Daten über. Freilegung der privaten variable Größe erreichen würde weder die Kontrollkästchen für die ordnungsgemäße Wert der Größe, noch die Zuweisung des neuen backing-array.InformationsquelleAutor Rajiv
Sorry, ich bin nicht gerade das video, aber ich nehme an, Sie reden über Dinge wie Getter (Funktionen, um den Wert einer Eigenschaft -- ein eigenes Daten-member in diesem Fall) - und Set-Methoden (Funktionen, um die Werte einstellen).
Wenn Sie Getter und setter als Reine pass-through-Funktionen, dann bist du richtig, es ist wirklich nicht viel anders als das, nur machen die Mitglieder öffentlich. Die normale Verwendung ist jedoch zu bieten Intelligenz in Ihre accessor-Funktionen-lassen Sie, zum Beispiel, begrenzen die Werte, die festgelegt werden können oder die Vermietung abgerufene Werte berechnet werden, anstatt nur auf einen reinen Wert.
InformationsquelleAutor mah
Wenn Sie nicht in der Lage, Zugriff auf private Daten von öffentlichen Funktionen, die Sie würde in der Lage sein, Zugang nur von privaten Funktionen, rechts. Allerdings ruft privaten Funktionen von öffentlichen Aufgaben sollte demzufolge auch verboten werden, so...
Wie soll man Zugriff auf private Daten?
InformationsquelleAutor Bartek Banachewicz
Dem Zweck, mit öffentlichen "Getter/setter" wenn man so will, ist die Tatsache, dass Sie eine Erschwernis für die user zu tun, mehr als Sie wollen. Statt Sie zu setzen die privaten member (in dem Sie irgendetwas tun können, um es), können Sie begrenzen, was Sie können/nicht können, indem er die privaten member in einem öffentlichen accessor. So, in diesem öffentlichen Eigenschaft/Funktion, begrenzen Sie den Wert können Sie es auch.
Können Sie auch nur die öffentliche Eigenschaft/Funktion der privaten Mitglieds, sondern verhindert, dass der Benutzer-Einstellung.
InformationsquelleAutor ryrich
Code mit Getter/setter sind als 'besser' als direkte private member zuzugreifen, da diese Funktionen können dann alle Steuern der Eingabe/Ausgabe von Variablen, und stellen Sie sicher, es ist der Typ, Bereich, oder was auch immer, dass die Klasse erwartet. Es ist eine Möglichkeit für die Klasse creator-Fehler-überprüfen der Daten festlegen oder manipulieren, bevor er es wieder.
Wenn könnte man nur tun
Klasse.var = Wert;
Sie konnte muck Dinge, indem Sie die falsche Art von Variablen, oder überfüllt etwas einzugrenzen, oder sogar putting in ein legitimer Wert, der eine gewisse Logik in die Klasse der code bricht mit. Für einfache Dinge mit einem einzigen Entwickler, der es in der Regel nicht ein großes Problem, aber für die eigentliche, professionelle code-es ist eine sehr gute Praxis zur Kapselung von member-Variablen innerhalb von get - /set-pair-Mädchen für den Zugriff/schreiben.
NÖ. Aber das ist nicht ein Ort, um zu diskutieren, also werde ich nur downvote und senden Ihnen die entsprechende Frage hier auf SO.
stackoverflow.com/a/12108025/560648
Der compiler Typ-überprüfen Sie die member-variable sowieso. Dies ist nicht ein Gültiger Grund.
Sie arbeiten nicht mit Zeigern sehr viel tun Sie? Keine Typ-überprüfung, wenn es keine Art zu überprüfen. Noch nicht sicher, wie meine Antwort war anders als die 'von Ihnen positiv bewertet werden' oben, die sagt meist das gleiche. Ich habe auch noch nie angedeutet, dass Sie hatte zu Kapseln, alles, oder, dass Sie es tun sollten, für jedes Mitglied var.
InformationsquelleAutor Coder101101010