1. Einleitung

Die heutige Lektion wollen wir der Kapselung widmen . Sie wissen bereits, was es im Allgemeinen ist.

Verkapselung

Welche Vorteile bietet die Kapselung? Davon gibt es einige, aber ich kann vier herausgreifen, die meiner Meinung nach die wichtigsten sind:


2. Gültiger interner Status

In Programmen kommt es häufig vor, dass ein Objekt mit mehreren anderen Klassen interagiert. Diese Interaktionen mit dem Objekt können die Daten innerhalb des Objekts beschädigen, sodass das Objekt nicht mehr wie erwartet funktionieren kann.

Daher muss das Objekt alle Änderungen an seinen internen Daten verfolgen oder, noch besser, die Änderungen selbst vornehmen.

Wenn wir nicht möchten, dass eine Variable von anderen Klassen geändert wird, deklarieren wir sie als privat. Sobald wir das tun, können nur noch die Methoden der eigenen Klasse darauf zugreifen. Wenn wir möchten, dass die Variablen schreibgeschützt sind, müssen wir ein public getterfür die relevanten Variablen hinzufügen.

Angenommen, wir möchten, dass jeder die Anzahl der Elemente in unserer Sammlung kennt, aber wir möchten nicht, dass er die Sammlung ohne unsere Erlaubnis ändern kann. Dann deklarieren wir eine private int countVariable und eine public getCount()Methode.

Durch die ordnungsgemäße Verwendung der Kapselung wird sichergestellt, dass keine Klasse direkt auf die internen Daten unserer Klasse zugreifen kann, wodurch Änderungen verhindert werden, die außerhalb unserer Kontrolle liegen. Diese Änderungen sind nur durch den Aufruf der Methoden derselben Klasse wie die zu ändernden Variablen möglich.

Gehen Sie am besten davon aus, dass andere Programmierer Ihre Klassen immer so nutzen, wie es für sie am bequemsten ist, und nicht so, wie es für Sie (für Ihre Klasse) am sichersten ist. Dieses Verhalten ist sowohl die Ursache für Fehler als auch für Versuche, diese zu verhindern.


3. Methodenargumente validieren

Manchmal müssen wir die an unsere Methoden übergebenen Argumente validieren. Angenommen, wir haben eine Klasse, die eine Person darstellt und es Ihnen ermöglicht, ein Geburtsdatum festzulegen. Wir müssen alle Eingabedaten überprüfen, um sicherzustellen, dass sie mit der Logik des Programms und der Logik unserer Klasse sinnvoll sind. Um beispielsweise ein Geburtsdatum im 13. Monat oder am 30. Februar usw. nicht zuzulassen.

Warum sollte jemand als Geburtsdatum den 30. Februar angeben? Erstens könnte es sich hierbei um einen Benutzerfehler bei der Eingabe der Daten handeln. Zweitens kann ein Programm viele Fehler enthalten, bevor es wie am Schnürchen läuft. Beispielsweise ist die folgende Situation möglich.

Ein Programmierer schreibt ein Programm, das Personen identifiziert, deren Geburtstag übermorgen ist. Nehmen wir zum Beispiel an, heute ist der 3. März. Das Programm fügt dem aktuellen Tag des Monats die Zahl 2 hinzu und sucht nach allen Personen, die am 5. März geboren wurden. Es scheint, dass alles korrekt ist.

Aber wenn der 30. März kommt, wird das Programm niemanden finden, weil der Kalender keinen 32. März hat. Ein Programm hat viel weniger Fehler, wenn wir die an Methoden übergebenen Daten überprüfen.

Erinnern Sie sich, als wir ArrayListden Code studiert und analysiert haben? Wir haben gesehen, dass die Methoden getund setprüfen, ob indexgrößer oder gleich Null und kleiner als die Länge des Arrays ist. Darüber hinaus lösen diese Methoden eine Ausnahme aus, wenn der Index außerhalb der Grenzen des Arrays liegt. Dies ist ein klassisches Beispiel für die Eingabevalidierung.


4. Fehler beim Ändern des Codes minimieren

Angenommen, wir haben eine äußerst nützliche Klasse geschrieben, als wir an einem großen Projekt beteiligt waren. Allen gefiel es so gut, dass andere Programmierer begannen, es an Hunderten von Stellen in ihrem Code zu verwenden.

Der Kurs war so nützlich, dass Sie beschlossen haben, ihn zu verbessern. Wenn Sie jedoch Methoden aus der Klasse entfernen, wird der Code von Dutzenden von Personen nicht mehr kompiliert. Sie werden alles neu schreiben müssen. Und je mehr Änderungen Sie vornehmen, desto mehr Fehler werden entstehen. Du wirst viele Versammlungen zerstören und gehasst werden.

Wenn wir jedoch Methoden ändern, die als privat deklariert sind, wissen wir, dass es nirgendwo eine einzige andere Klasse gibt, die diese Methoden aufrufen könnte. Wir können sie umschreiben, die Anzahl der Parameter und ihre Typen ändern und jeder abhängige externe Code wird weiterhin funktionieren. Nun, zumindest wird es kompiliert.


5. Wir entscheiden, wie unser Objekt mit externen Objekten interagiert

Wir können einige der Aktionen, die mit unserem Objekt ausgeführt werden können, einschränken. Angenommen, wir möchten, dass ein Objekt nur einmal instanziiert wird. Auch wenn es möglicherweise an mehreren Stellen im Projekt erstellt wird. Und das können wir dank der Kapselung tun.

Kapselung 2

Durch die Kapselung können wir zusätzliche Einschränkungen hinzufügen, die in zusätzliche Vorteile umgewandelt werden können . Beispielsweise Stringwird die Klasse als unveränderliches Objekt implementiert. Ein Objekt der StringKlasse ist vom Moment seiner Entstehung bis zum Moment seines Todes unveränderlich. Alle Methoden der StringKlasse ( remove, substring, ...) geben eine neue Zeichenfolge zurück, ohne Änderungen am Objekt vorzunehmen, für das sie aufgerufen werden.

Kapselung ist eine sehr interessante Sache.