Was ist Kapselung? Wie sieht es eigentlich Daten ausblenden?
Suche wird eine einfache definition: Daten versteckt.
Aber, betrachten Sie die folgenden zwei Beispiele:
1) Erstes Beispiel:
Class Employee
{
public int age;
}
2) Zweites Beispiel:
Class Employee
{
private int age;
public int getAge(){return age;}
}
Frage:
In beiden der oben genannten Beispiele, gibt es keine Daten versteckt, als age
ist entweder durch andere modifizierte oder durch andere angesehen. Wo werden die Daten versteckt? Wie funktioniert die Kapselung Hilfe in den oben genannten Beispielen?
Haben Sie Lesen der Wikipedia-Artikel: en.wikipedia.org/wiki/...
Kapselung bedeutet nicht, dass zum Schutz von Daten vor Veränderung. Was ist, wenn ich dazu noch eine setter-Methode.... basierend auf Ihrer Erklärung, es bedeutet, dass die Kapselung bedeutet, Lesen Sie nur die Eigenschaften der Klasse ...die ist nicht....ich mir sicher....
Siehe auch: Warum Eigenschaften der Materie von Jon Skeet
Kapselung bedeutet nicht, dass zum Schutz von Daten vor Veränderung. Was ist, wenn ich dazu noch eine setter-Methode.... basierend auf Ihrer Erklärung, es bedeutet, dass die Kapselung bedeutet, Lesen Sie nur die Eigenschaften der Klasse ...die ist nicht....ich mir sicher....
Siehe auch: Warum Eigenschaften der Materie von Jon Skeet
InformationsquelleAutor Anil Purswani | 2011-04-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dort ist Daten versteckt. Das zweite Beispiel blendet wie der Wert gespeichert ist. Auch das zweite Beispiel macht den Wert zu Lesen-nur für code außerhalb der Klasse. Durch private Felder und setzen Sie durch Methoden oder Eigenschaften, die Sie sofort gewinnen einige Vorteile, von denen einige sind:
Beachten Sie, dass die Kapselung ist nicht nur über den Zugang kontrollieren. Der primäre nutzen für die Kapselung zu verbergen Implementierungsdetails vom aufrufenden code. Beim aufrufen von code abrufen möchte einen Wert, es sollte nicht davon abhängen von wo der Wert kommt. Intern kann die Klasse speichert den Wert in einem Feld oder abrufen aus einer externen Ressource (etwa eine Datei oder eine Datenbank). Vielleicht wird der Wert nicht gespeichert überhaupt, aber berechnet on-the-fly. Dies sollte keine Rolle spielen an den aufrufenden code.
Wenn Sie setzen Sie den Wert durch eine Methode oder-Eigenschaft verwendet, Schild aufrufen von code aus diesen Angaben, die auch gibt Ihnen die Möglichkeit der änderung der Implementierung ohne Auswirkungen auf die aufrufende code.
Nein, überhaupt nicht. Die Kapselung über das ausblenden von Implementierungsdetails. Indem er den Bereich privat-und setzen Sie es durch Methoden, Sie Kapseln die internen Implementierungsdetails. Der Wert gespeichert werden kann in einem Feld, in einer Datei auf einem Datenträger in einer Datenbank, es konnte berechnet werden on-the-fly", was auch immer. Der aufrufende code hat (und sollen) Sie nicht wissen, diese details. Das ist die Kapselung.
Ich denke, verbergen Implementierungsdetails bezieht sich auf die Abstraktion Kapselung nicht. Nun, das klingt zwei verschiedene Namen werden verwendet für den gleichen Zeitraum. schauen Sie unter diesem link : en.wikipedia.org/wiki/Abstraction_%28computer_science%29
Ich würde sagen, dass Kapselung ist eine form der Abstraktion. Dies wird auch unterstützt durch den text, den Sie verlinkt zu: Der Begriff der Kapselung bezieht sich auf das ausblenden von Status-details (im Absatz Abstraktion in Objekt-orientierte Programmierung)
InformationsquelleAutor Fredrik Mörk
Kapselung trennt das Konzept von was etwas tut von , wie es implementiert ist.
Kapselung ist ein sehr wichtiges Konzept in der objektorientierten Programmierung. Es ist das verstecken der Daten aus anderen Modulen in der Anwendung. In deinem Beispiel 2, wie Sie sehen können kann man nur das Alter und das auch noch mit einer getter-Methode, aber Sie können nur setzen Sie den Wert auf die privaten member innerhalb der Klasse und nicht außerhalb. Das ist der Vorteil der Kapselung.
oops! Ich meinte es sein die Kapselung. Danke für den Hinweis it out. 🙂
InformationsquelleAutor Shankar Raju
Denken über diese Variante:
In deinem Beispiel der außen-und Innenseite verwenden Sie eine Ganzzahl, und das ist verwirrend. (Vergleichbar mit den 2 * 2 = 4 zu erklären, Multiplikation und vergessen, dass 2 + 2 = 4)
Erno, mit denselben Datentyp innen und außen nicht schafft keine Verwirrung. Das Klang merkwürdig, dass Sie die Umwandlung in die string-für viele Grund-client brauchen ihn als integer. So gibt es einen echten Grund, es zu konvertieren zu einem string..außerdem, wie es hilft, Kapselung?
Die Umwandlung zu string ist, nur um zu zeigen, dass auf der Außenseite der Typ kann sehr unterschiedlich sein, von innen. Natürlich, wenn ein client ihn braucht als ein integer, die Age-Eigenschaft sollte in der Art. Das Beispiel ist nur um zu zeigen, dass die Eigenschaft-bekommen kapselt (oder Kapseln) die innere dataformat.
InformationsquelleAutor Erno de Weerd
Encapsulation
istdata hiding
einfach.lassen Sie uns sehen, wie Kapselung passiert.
Angenommen, Sie erstellen ein Mitarbeiter-Klasse und umfasst zwei Instanzvariablen. name und Gehalt. Sie nicht Sie privat. Was geschieht nun eine weitere Klasse in das Programm Zugriff auf diese beiden Variablen einfach, indem Sie ein Objekt erstellen, wenn die employee-Klasse. Was wir also wollen, ist das ausblenden dieser beiden oder Gehalt Informationen zu außerhalb von Klassen.
Wenn wir wollen, zu verstecken Gehalt können Wir einfach erklären Gehalt als
private
variable. Jetzt wissen wir sogar aus einer anderen Klasse ein Objekt erstellen und versuchen, auf Gehalt wie vorher, es funktioniert nicht. Denn es ist ein privater Bereich, der nur zugänglich für die Mitarbeiter-Klasse. Jetzt haben wir versteckten unsere Daten.Aber davon ausgehen, dass wir brauchen eine person, um Gehalt, die details zu jeder der Mitarbeiter.
Ich mache es klarer.
Die Daten der Eingabe person hat 3 Arten von Daten eingeben
woked_hours, OT and leaves
(Emplyee-Klasse hat drei Variablen, die für dieses).Wir wollen, dass diese person zu geben, diese details, aber wir
do not want
ihn zusee
wie diesalary calculation
ist getan. Es erfolgt nach der mathematischen Gleichung, die in Employee-Klasse.Er also nicht berechnen kann, und geben Sie das Gehalt selbst. Aber lassen wir ihn sehen, das Letzte Gehalt. dort erstellen Wir eine Methode, um den Wert der Lohn im employee-Klasse. es ist
Er weiß, dass es gibt zwei Methoden, die er verwenden kann, um Zugriff auf die versteckten Felder.
set method and get method.
So ercall getmethod.
er jacan see
diesalary
Informationen. Da haben wir den getMethod zurückkehren Gehalt. Nun wird er versuchen, die Verwendung von set-Methode geben Sie einen neuen Gehalt Betrag zu ändern aktuellen Wert des Gehalts. so ruft ere.setSalary(1000);
Aber es gibt eine Fehlermeldung. Warum? weil in der employee-Klasse gibt es keine Methode geschrieben, alsWir absichtlich nicht geschrieben, dass der code, weil wir nicht wollen, ihn zu setzen, Gehalt Wert sofort. So haben wir versteckt einige Informationen, aber einige, die wir noch lassen Sie ihn zugreifen. Wir Gaben ihm den Zugang zu
Read only
. Abernot Write
für das Gehalt.so war es nicht nützlich, jetzt, dass die Kapselung, die wir getan haben.
Die gleiche Weise wie er darf
set
diese Felderwoked_hours, OT and leaves
. für diejenigen Felder, die wir ihm gegeben haben Zugang nur zu Schreiben. Dort haben wir absichtlich nicht schreibengetter methods
. Wenn Sie schreiben, beidegetter
- und setter erlauben Sie ihm zuREAD/Write
sowohl den Zugang als auch.Ist es egal, nur festlegen oder abrufen, Das Feld ist privat, wird das Feld ausgeblendet, die bereits Daten verborgen ist. Aber einige Zugang ist gegeben durch
getters
undsetters
.InformationsquelleAutor SMK
In deinem ersten Beispiel die variable Alter ist festgelegt, wie eine öffentliche variable. Hier kann jeder ändern, der meeber Alter, wenn ein Objekt vom Typ Mitarbeiter deklariert ist.
Jedoch in Ihrem zweiten Beispiel die variable Alter ist eigentlich privat, und kann nur verändert werden, von innen der Klasse Mitarbeiter. Dies ist der Fall, der Daten versteckt.
In der objektorientierten Programmierung-Kapselung ist, wenn ein Objekt aus einem anderen. Dies ist im Gegensatz zur Vererbung, wo sich ein Objekt kann, sofern eine bereits vorhandene Klasse.
InformationsquelleAutor sosc
Es mehr um die Kapselung als Daten versteckt. Die Kapselung ermöglicht es Ihnen, um alle die Daten und die Funktionalität relevant, um eine Entität mit der Entität. Ebenen der Sichtbarkeit dieser Daten ist eine Verwandte, aber nicht identisch, Konzept. E. g. ein
Employee
Objekt Karies alle Mitarbeiter-Daten und Funktionen (Methoden). Beachten Sie, dass dies nicht durchgesetzt, aber aktiviert von den OO-Sprachen.Dies kann natürlich klingen, wenn Sie geboren wurden, in die OO-ära, aber das war die großen Sprung aus der Funktionalen Programmierung zu OOP, sowohl konzeptionell (Gestaltung) und in Sprachen, die Unterstützung, die dieses Paradigma.
Zitiert aus Wikipedia Artikel:
InformationsquelleAutor davka
Sagen, dass ich Ihren code wie folgt:
Hier, es sei denn, ich sehe an deinem Quelltext, ich habe absolut keine Ahnung, wie
Employee
berechnet hat, in seinem Alter. Für alle ich wissen, istgetAge()
könnte wie folgt Aussehen:oder vielleicht sogar noch etwas komplizierter. Ich weiß einfach nicht.
Also in Ihrem zweiten Beispiel, die Tatsache, dass
getAge()
nur gibt eine private member-variable ist mir komplett versteckt.InformationsquelleAutor Dunnie