Hallo! Widmen wir die heutige Lektion der Verkapselung und beginnen gleich mit Beispielen :) Prinzipien der Kapselung - 1Hier haben Sie eine gewöhnliche Getränkemaschine . Ich habe eine Frage an Sie: Wie funktioniert es? Versuchen Sie, eine detaillierte Antwort zu geben: Woher kommt die Tasse, wie wird die Innentemperatur aufrechterhalten, wo wird das Eis gelagert, woher weiß die Maschine, welchen Sirup sie hinzufügen muss usw.? Auf diese Fragen haben Sie wahrscheinlich keine Antworten. Fair genug, da nicht jeder solche Maschinen nutzt. Heutzutage sind sie nicht mehr so ​​beliebt. Versuchen wir, ein weiteres Beispiel zu geben. Etwas, das Sie jeden Tag auf jeden Fall mehrmals verwenden. Oh, hier ist eine Idee! Prinzipien der Kapselung - 2Erzählen Sie uns, wie die Google-Suchmaschine funktioniertfunktioniert. Wie genau wird nach Informationen gesucht, die sich auf die von Ihnen eingegebenen Wörter beziehen? Warum werden bestimmte Ergebnisse hoch gerankt und andere nicht? Auch wenn Sie Google jeden Tag nutzen, ist die Wahrscheinlichkeit groß, dass Sie es nicht wissen. Aber es spielt keine Rolle. Das müssen Sie nicht wissen. Sie können Suchanfragen in eine Suchmaschine eingeben, ohne darüber nachzudenken, wie sie funktioniert. Sie können Limonade an einem Automaten kaufen, ohne zu wissen, wie es funktioniert. Sie können ein Auto fahren, ohne zu verstehen, wie ein Verbrennungsmotor funktioniert, und ohne überhaupt Kenntnisse in Physik zu haben, selbst auf dem Niveau der Grundschule. All dies ist dank eines der Hauptprinzipien der objektorientierten Programmierung möglich: der Kapselung. Beim Lesen verschiedener Artikel über objektorientierte Programmierung (OOP) sind Sie sicher auf die Tatsache gestoßen, dass es bei der Programmierung um zwei gemeinsame Konzepte geht: Kapselung und Ausblenden . Und Autoren verwenden das Wort „Kapselung“, um das eine und dann das andere zu meinen. Wir werden beide Begriffe untersuchen, damit Sie ein umfassendes Verständnis erlangen. In der Programmierung ist die ursprüngliche Bedeutung von Kapselung die Bündelung von Daten sowie der mit diesen Daten arbeitenden Methoden in einer einzigen Einheit (dh einer „Kapsel“). In Java ist die Klasse die Kapselungseinheit. Eine Klasse enthält sowohl Daten (Felder) als auch Methoden zum Arbeiten mit diesen Daten.Prinzipien der Kapselung - 3Dies mag für Sie wie der offensichtlich richtige Ansatz erscheinen, aber in anderen Programmierparadigmen ist alles anders geregelt. Beispielsweise werden in der funktionalen Programmierung Daten strikt von den darauf ausgeführten Operationen getrennt. In OOP bestehen Programme aus Kapseln oder Klassen, die sowohl aus Daten als auch aus Funktionen für die Arbeit mit diesen Daten bestehen. Lassen Sie uns nun über das Verstecken sprechen . Wie kommt es, dass wir alle möglichen komplexen Geräte verwenden, ohne zu verstehen, wie sie organisiert sind oder wie sie funktionieren? Es ist ganz einfach: Ihre Entwickler haben uns eine einfache und praktische Benutzeroberfläche zur Verfügung gestellt. Bei einem Getränkeautomaten sind die Tasten auf dem Bedienfeld die Schnittstelle. Durch Drücken einer Taste wählen Sie die Körbchengröße. Durch Drücken einer weiteren Taste wählen Sie die Geschmacksrichtung. Ein Drittel ist für die Eiszugabe zuständig. Und das ist alles, was Sie tun müssen. Die interne Organisation der Maschine spielt keine Rolle. Entscheidend ist, dass es so konzipiert ist, dass der Benutzer drei Tasten drücken muss, um Limonade zu erhalten . Das Gleiche gilt auch für Autos. Es spielt keine Rolle, was im Inneren vor sich geht. Entscheidend ist, dass sich das Auto vorwärts bewegt, wenn Sie das rechte Pedal betätigen, und wenn Sie das linke Pedal betätigen, wird es langsamer. Darum geht es beim Verstecken. Alle „Inneren“ eines Programms bleiben dem Benutzer verborgen. Für den Benutzer sind dies überflüssige, unnötige Informationen. Der Benutzer benötigt das Endergebnis, nicht den internen Prozess. Schauen wir uns die AutoKlasse als Beispiel an:

public class Auto {

   public void go() {

       /* Some complicated things happen inside the car.
       As a result, it moves forward */
   }

   public void brake() {

       /* Some complicated things happen inside the car.
       As a result, it slows down. */
   }

   public static void main(String[] args) {

       Auto auto = new Auto();

       // From the user's perspective,

       // one pedal is pressed and the car accelerates.
       auto.gas();
      
       // The other is pressed, and the car slows down.
       auto.brake();
   }
}
So sieht das Ausblenden der Implementierung in einem Java-Programm aus. Es ist wie im wirklichen Leben: Dem Benutzer wird eine Schnittstelle (Methoden) zur Verfügung gestellt. Benötigt der Benutzer in einem Programm ein Auto, um eine Aktion auszuführen, ruft er einfach die gewünschte Methode auf. Was innerhalb dieser Methoden passiert, ist überflüssig. Wichtig ist, dass alles so funktioniert, wie es soll. Hier geht es um das Ausblenden der Implementierung . Darüber hinaus verfügt Java auch über das Ausblenden von Daten . Darüber haben wir in der Lektion über Getter und Setter geschrieben , aber eine Wiederholung des Konzepts wird nicht schaden. Wir haben zum Beispiel eine CatKlasse:

public class Cat {

   public String name;
   public int age;
   public int weight;

   public Cat(String name, int age, int weight) {
       this.name = name;
       this.age = age;
       this.weight = weight;
   }

   public Cat() {
   }

   public void sayMeow() {
       System.out.println("Meow!");
   }

  
}
Vielleicht erinnern Sie sich an das Problem mit dieser Klasse aus der letzten Lektion? Wenn nicht, erinnern wir uns jetzt daran. Das Problem besteht darin, dass seine Daten (Felder) für jedermann zugänglich sind – ein anderer Programmierer kann leicht eine namenlose Katze mit einem Gewicht von 0 und einem Alter von -1000 Jahren erstellen:

public static void main(String[] args) {

   Cat cat = new Cat();
   cat.name = "";
   cat.age = -1000;
   cat.weight = 0;

}
Vielleicht können Sie genau beobachten, ob einer Ihrer Kollegen Objekte mit ungültigem Status erstellt hat, aber es wäre viel besser, sogar die Möglichkeit der Erstellung solcher „ungültigen Objekte“ auszuschließen. Prinzipien der Kapselung - 4Die folgenden Mechanismen helfen uns dabei, Daten auszublenden:
  1. Zugriffsmodifikatoren ( privat , geschützt , Paketstandard )
  2. Getter und Setter
Dort können wir beispielsweise prüfen, ob jemand versucht, dem Alter der Katze eine negative Zahl zuzuordnen. Wie bereits erwähnt, meinen die Autoren verschiedener Artikel zum Thema Kapselung manchmal, Daten und Methoden zu kombinieren oder sie auszublenden, oder beides (kombiniert und ausgeblendet). Java verfügt über beide Mechanismen (dies gilt nicht unbedingt für andere OOP-Sprachen), daher ist die letzte Bedeutung am korrektesten. Die Kapselung bietet uns mehrere wichtige Vorteile:
  1. Kontrolle über den korrekten Zustand eines Objekts. Beispiele dafür gab es oben. Ein Setter und der private Modifikator stellen sicher, dass unser Programm keine Katzen hat, deren Gewicht 0 ist.

  2. Benutzerfreundlichkeit durch eine Schnittstelle. Nur Methoden bleiben der Außenwelt „ausgesetzt“. Es reicht aus, Methoden aufzurufen, um ein Ergebnis zu erhalten – es ist absolut nicht nötig, sich mit den Details ihrer Funktionsweise zu befassen.

  3. Codeänderungen wirken sich nicht auf Benutzer aus. Wir nehmen sämtliche Änderungen innerhalb der Methoden vor. Dies hat keine Auswirkungen auf den Benutzer der Methode: Wenn der richtige Code zuvor „auto.gas()“ war, um das Gaspedal zu betätigen, wird dies auch weiterhin der Fall sein. Dass wir innerhalb der gas()-Methode etwas geändert haben, bleibt für den Benutzer unsichtbar: Der Aufrufer erhält nach wie vor einfach das gewünschte Ergebnis.