JavaRush /Java-Blog /Random-DE /Kapselungsprinzipien in Java

Kapselungsprinzipien in Java

Veröffentlicht in der Gruppe Random-DE
Hallo! Der heutige Vortrag widmet sich der Verkapselung und wir beginnen gleich mit Beispielen :) Vor Ihnen steht ein bekannter Getränkeautomat. Ich habe eine Frage an Sie: Wie funktioniert es? Versuchen Sie, im Detail zu antworten: Woher kommt das Glas, wie wird die Temperatur im Inneren aufrechterhalten, wo das Eis gelagert wird, wie erkennt die Maschine, welchen Sirup sie hinzufügen muss usw. Höchstwahrscheinlich haben Sie keine Antworten auf diese Fragen. Nun ja, vielleicht nutzt nicht jeder solche Maschinen; sie sind heutzutage nicht so beliebt. Versuchen wir, ein weiteres Beispiel zu geben. Etwas, von dem Sie wissen, dass Sie es jeden Tag viele Male verwenden. Oh, ich habe eine Idee! Kapselungsprinzipien – 2 Erzählen Sie uns, wie die Google-Suchmaschine funktioniert . Wie genau sucht es nach Informationen basierend auf den von Ihnen eingegebenen Wörtern? Warum stehen diese Ergebnisse ganz oben und andere nicht? Auch wenn Sie Google jeden Tag nutzen, wissen Sie es wahrscheinlich nicht. Aber es ist nicht wichtig. Schließlich müssen Sie das nicht wissen. Sie können Suchanfragen in eine Suchmaschine eingeben, ohne darüber nachzudenken, wie das genau funktioniert. Sie können Limonade an einem Automaten kaufen, ohne zu wissen, wie es funktioniert. Sie können ein Auto fahren, ohne sich mit der Funktionsweise des Verbrennungsmotors auseinanderzusetzen und auch ohne physikalische Kenntnisse, selbst auf Schulniveau. All dies ist dank eines der Hauptprinzipien der objektorientierten Programmierung möglich – der Kapselung . Beim Lesen verschiedener Artikel zu diesem Thema sind Sie wahrscheinlich auf die Tatsache gestoßen, dass es in der Programmierung zwei gängige Konzepte gibt – Kapselung und Ausblenden . Und mit dem Wort „Kapselung“ meinen die Autoren das eine oder andere (wie es passiert). Wir werden beide Begriffe aufschlüsseln, damit Sie ein vollständiges Verständnis haben. Die ursprüngliche Bedeutung des Wortes „ Kapselung “ in der Programmierung ist die Kombination von Daten und Methoden zum Arbeiten mit diesen Daten in einem Paket („Kapsel“). In Java fungiert die Klasse als Kapselpaket . Eine Klasse enthält sowohl Daten (Klassenfelder) als auch Methoden zum Arbeiten mit diesen Daten. Kapselungsprinzipien – 3 Das erscheint Ihnen offensichtlich, aber bei anderen Programmierkonzepten funktioniert alles anders. Beispielsweise werden in der funktionalen Programmierung Daten strikt von den darauf ausgeführten Operationen getrennt. Bei OOP (objektorientierte Programmierung) bestehen Programme aus Kapselklassen, die sowohl Daten als auch Funktionen für die Arbeit damit sind. Lassen Sie uns nun über das Verstecken sprechen . Wie kommt es, dass wir alle möglichen komplexen Mechanismen nutzen, ohne zu verstehen, wie sie funktionieren und worauf ihre Arbeit basiert? Es ist ganz einfach: Ihre Entwickler haben eine einfache und benutzerfreundliche Oberfläche bereitgestellt. Bei einem Getränkeautomaten besteht die Schnittstelle aus Tasten auf einem Bedienfeld. Durch Drücken einer Taste wählen Sie die Lautstärke des Glases. Durch Drücken der zweiten Taste wählen Sie den Sirup aus. Der dritte ist für das Hinzufügen von Eis zuständig. Und das ist alles, was Sie tun müssen. Es spielt keine Rolle, wie genau die Maschine im Inneren konstruiert ist. Die Hauptsache ist, dass es so konzipiert ist, dass der Benutzer drei Tasten drücken muss, um Limonade zu erhalten . Mit einem Auto ist es genauso. Es spielt keine Rolle, was in ihm vorgeht. Die Hauptsache ist, dass das Auto vorwärts fährt, wenn Sie das rechte Pedal drücken, und wenn Sie das linke Pedal drücken, wird es langsamer . Das ist genau das Wesen der Verschleierung. Alle „Inneren“ des Programms bleiben dem Benutzer verborgen. Für ihn sind diese Informationen überflüssig und unnötig. Der Benutzer benötigt das Endergebnis, nicht den internen Prozess. Schauen wir uns die Klasse als Beispiel an Auto:
public class Auto {

   public void gas() {

       /*einige komplizierte Dinge passieren im Inneren des Autos
       , wodurch es vorwärts geht*/
   }

   public void brake() {

       /*Einige komplizierte Dinge passieren im Inneren des Autos
       , wodurch es langsamer wird*/
   }

   public static void main(String[] args) {

       Auto auto = new Auto();

       // Wie alles für den Benutzer aussieht

       //ein Pedal gedrückt - ging
       auto.gas();

       //anderes Pedal gedrückt - gebremst
       auto.brake();
   }
}
So sieht das Ausblenden der Implementierung in einem Java-Programm aus. Alles ist wie im echten Leben: Dem Benutzer wird eine Schnittstelle (Methoden) zur Verfügung gestellt. Wenn er das Auto im Programm benötigt, um eine Aktion auszuführen, muss er nur die gewünschte Methode aufrufen. Und was in diesen Methoden passiert, sind unnötige Informationen. Hauptsache, alles funktioniert so, wie es sollte. Hier haben wir darüber gesprochen, die Implementierung zu verbergen . Darüber hinaus verfügt Java auch über das Ausblenden von Daten . Wir haben darüber in der Vorlesung über Getter und Setter geschrieben , aber es würde nicht schaden, Sie daran zu erinnern. Wir haben zum Beispiel eine Klasse Cat:
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("Miau!");
   }


}
Erinnern Sie sich vielleicht aus der letzten Vorlesung, was das Problem dieser Vorlesung ist? Wenn nicht, erinnern wir uns. Das Problem besteht darin, dass seine Daten (Felder) für jeden offen sind und ein anderer Programmierer problemlos eine namenlose Katze mit einem Gewicht von 0 und einem Alter von -1000 Jahren im Programm erstellen kann:
public static void main(String[] args) {

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

}
In einer solchen Situation können Sie genau überwachen, ob einer Ihrer Kollegen Objekte mit dem falschen Status erstellt. Es wäre jedoch viel besser, die Möglichkeit der Erstellung solcher „falschen Objekte“ auszuschließen. Kapselungsprinzipien – 4 Sie helfen uns beim Verstecken von Daten:
  1. Zugriffsmodifikatoren ( private , protected , package default );
  2. Getter und Setter.
Dort können wir beispielsweise prüfen, ob jemand versucht, der Katze als Alter eine negative Zahl zuzuordnen. Wie bereits erwähnt, meinen die Autoren verschiedener Artikel zum Thema Kapselung entweder Kapselung (Kombination von Daten und Methoden) oder Verstecken oder beides. Java verfügt über beide Mechanismen (dies ist in anderen OOP-Sprachen nicht unbedingt der Fall), daher ist die letztere Option die korrekteste. Die Verwendung der Kapselung bietet uns mehrere wichtige Vorteile:
  1. Überwachung des korrekten Zustands des Objekts. Beispiele dafür gab es oben: Dank des Setters und des privaten Modifikators haben wir unser Programm vor Katzen mit Gewicht 0 geschützt.

  2. Benutzerfreundlichkeit durch die Schnittstelle. Für den Benutzerzugriff lassen wir nur Methoden „draußen“. Er muss sie lediglich anrufen, um das Ergebnis zu erfahren, und er muss sich überhaupt nicht mit den Details ihrer Arbeit befassen.

  3. Änderungen am Code haben keine Auswirkungen auf Benutzer. Wir nehmen alle Änderungen innerhalb von Methoden vor. Dies hat keine Auswirkungen auf den Benutzer: Er hat auto.gas() für das Benzin des Autos geschrieben, also wird er es schreiben. Und die Tatsache, dass wir etwas an der Funktionsweise der gas()-Methode geändert haben, wird für ihn unsichtbar bleiben: Er wird wie zuvor einfach das gewünschte Ergebnis erhalten.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION