Java Beginner Escape Boot Camp Teil 2 Grundlegendes zu Java-Klassen und -Kapselung

Um diese Zeit

In diesem Artikel lernen Sie "Klassen" kennen, die die Grundlage für Programmiersprachen bilden, die auf Objektdenken basieren.

Was ist eine Java "Klasse"?

Zuerst vor dem Unterricht

"Was ist objektorientiert ???"

Beginnen wir mit dem, was das bedeutet.

Ursprung des Objektdenkens

Das Wichtigste in der Idee des Objektdenkens ist ** "Rolle" **.

Aus Sicht des Benutzers arbeitet ein Programm als eines.

Zum Beispiel kann ein Smartphone-Spiel, das Sie oft spielen, mit nur einem Symbol ausgeführt werden. Hinter den Kulissen laufen viele Programme.

Zum Beispiel in einem Rhythmus-Spiel

Es gibt also verschiedene Elemente.

Natürlich können Sie all dies in eine Datei packen und mit dem Programm fortfahren. Ich denke, Sie können leicht verstehen, dass so etwas schwierig wäre.

Objektdenken zielt darauf ab, diese Elemente durch "Rolle" zu trennen.

Praktisch durch Rollentrennung

Der Hauptvorteil der Trennung von Klassen nach Rollen besteht darin, dass sie "leichter zu verstehen" sind.

Angenommen, Sie teilen die Klassen, die sich auf den Fortschritt des Spiels beziehen, wie folgt auf.

Angenommen, die folgenden Spezifikationsänderungen treten auf.

Die Geschwindigkeit zur Wiederherstellung der Ausdauer wurde von "1 Spur in 10 Minuten" auf "1 Spur in 5 Minuten" geändert.

Wo soll ich es in einem solchen Fall beheben?

Die Antwort ist einfach: "Ausdauer-Management".

Auf diese Weise wird die gesamte Ausdauer-Verarbeitung der Ausdauer-Management-Klasse überlassen. Es wird sehr leicht zu verstehen sein, wenn Änderungen vorgenommen werden.

Das Folgende ist ein Beispiel für eine Ausdauer-Management-Klasse.


Ausdauer-Management der öffentlichen Klasse{

private int Ausdauer;

private long Letzte Wiederherstellungszeit;

public int Ausdauer bekommen() {
    return this.Aktuelle Ausdauer; 
  }
  
Public Void Recovery Check() {
    
    //Holen Sie sich die aktuelle Zeit mit millSec
lange aktuelle Zeit= new Date().getTime();

    //10 Minuten= 10 * 60(sec) * 1000(millSec)
    if (Aktuelle Uhrzeit-Letzte Wiederherstellungszeit> 10 * 60 * 1000) {
      //Stellt 1 Ausdauer wieder her
      this.Aktuelle Ausdauer++;

      //Aktualisieren Sie die letzte Wiederherstellungszeit auf die aktuelle Zeit
      this.Letzte Wiederherstellungszeit=Aktuelle Uhrzeit;
    }
  }
}

Der Punkt hier ist nun der Teil, der sich auf den numerischen Wert der Ausdauer bezieht.

private int Ausdauer;

private int letzte Wiederherstellungszeit;

Diese in der Klasse deklarierte Variable wird als "Feldwert" bezeichnet und bezieht sich auf die Variable, die in der Klasse verwaltet werden kann. Auf die hier deklarierten Feldwerte kann in der Regel von überall innerhalb der Klasse ** zugegriffen werden.

Insbesondere bei Java ist es üblich, diesen Feldwert privat zu machen, damit der Wert nicht direkt von außen geändert werden kann.

Getter

In dieser Klasse stellen wir nun die folgende Methode zur Verfügung, um die aktuelle Ausdauer zu ermitteln.

public int Ausdauer bekommen() {
    return this.Aktuelle Ausdauer; 
  }

Eine Methode, die darauf abzielt, den Vorschubwert auf diese Weise zu erhalten, wird als "Getter" bezeichnet.

Nur als public deklarierte Methoden können von außerhalb der Klasse aufgerufen werden. Durch die Vorbereitung eines Getters,

Sie können das angeben.

Auf diese Weise können Sie unbeabsichtigte Bewegungen unterdrücken, indem Sie die Operationen auf den Feldern der Klasse selbst absichtlich einschränken.

Weitere Spezifikationsänderung der Spezifikationsänderung

Erinnern wir uns jetzt an die frühere Spezifikationsänderung.

Die Geschwindigkeit zur Wiederherstellung der Ausdauer wurde von "1 Spur in 10 Minuten" auf "1 Spur in 5 Minuten" geändert.

Um dies zu erreichen, sollten die folgenden Teile modifiziert werden.

    if (Aktuelle Uhrzeit-Letzte Wiederherstellungszeit> 10 * 60 * 1000) {

Nun, als ich darüber nachdachte, es in 5 Minuten zu reparieren, wurde mir so etwas gesagt.

Grundsätzlich 10 Minuten, zum Zeitpunkt des Ereignisses 1 Messgerät pro Minute oder 1 Messgerät in 5 Minuten

In diesem Fall reicht es nicht aus, nur umzuschreiben.

Setter

Es kann nicht geholfen werden, also ändern wir diese Wiederherstellungsspanne in einen Feldwert, damit sie von außen neu geschrieben werden kann.


Ausdauer-Management der öffentlichen Klasse{

private int Ausdauer;

private long Letzte Wiederherstellungszeit;

private lange Erholungsspanne;

public int Ausdauer bekommen() {
    return this.Aktuelle Ausdauer; 
  }

Wiederherstellungsspanne für öffentliche Leersätze(int Wiederherstellungsminuten) {
    this.Wiederherstellungsspanne=Erholungsprotokolle* 60 * 1000;
  }
  
Public Void Recovery Check() {
    
    //Holen Sie sich die aktuelle Zeit mit millSec
lange aktuelle Zeit= new Date().getTime();

    //10 Minuten= 10 * 60(sec) * 1000(millSec)
    if (Aktuelle Uhrzeit-Letzte Wiederherstellungszeit> 10 * 60 * 1000) {
      //Stellt 1 Ausdauer wieder her
      this.Aktuelle Ausdauer++;

      //Aktualisieren Sie die letzte Wiederherstellungszeit auf die aktuelle Zeit
      this.Letzte Wiederherstellungszeit=Aktuelle Uhrzeit;
    }
  }
}

Übrigens werden hier folgende Methoden vorgestellt.

Wiederherstellungsspanne für öffentliche Leersätze(int Wiederherstellungsminuten) {
    this.Wiederherstellungsspanne=Erholungsprotokolle* 60 * 1000;
  }

Wenn Sie die Ausdauerwiederherstellungszeit aufgrund eines Ereignisses usw. reduzieren möchten, können Sie die Wiederherstellungszeit ändern, indem Sie diese Methode aufrufen.

Eine Methode, die darauf abzielt, Feldwerte auf diese Weise neu zu schreiben, wird als "Setter" bezeichnet.

Verkapselung

Auf diese Weise wird durch Einschränkung des Feldzugriffs mithilfe von Getter und Setter Sie können unerwartete Bewegungen und Anrufe verhindern.

Dies wird als ** "Kapselung" ** bezeichnet.

Was wäre, wenn es eine "Weltlinie ohne Kapselung" wäre?

Was würde passieren, wenn wir auf einer Weltlinie leben würden, auf der es keine Kapselung gibt?

Wenn alle Felder von außen leicht zugänglich sind, Der folgende Quellcode wird überall auf dem Spielbildschirm eingebettet.

while(true) {
  //Alle 10 Minuten ausführen
  Thread.sleep(10 * 60 * 1000);  
Ausdauermanagement.Ausdauer++;
}

Wenn dies mehrmals funktioniert, können Sie plötzlich 2 Ausdauer wiederherstellen oder es kann auch nach 10 Minuten nicht wiederhergestellt werden.

Wenn dies gekapselt ist ...?

Was ist, wenn dies gut gekapselt ist?

while(true) {
  Thread.sleep(1000);  
Widerherstellung der Kondition.Wiederherstellungsprüfung();
}

In diesem Fall führt die Wiederherstellungsprüfung keine zusätzliche Wiederherstellung durch, selbst wenn sie kontinuierlich aufgerufen wird.

Indem Sie Ausdauer auf diese Weise einkapseln, Es wird ein wunderschönes Programm sein, ohne seltsame Fehler zu verursachen.

Zweck der Einkapselung

Die Kapselung verdeutlicht die Kategorien, die von der Klasse selbst verwaltet werden. Der Zweck besteht darin, den Anruf verständlicher zu machen.

Dies ist ein objektorientiertes Programm

Zum Beispiel besteht die Rolle dieser Ausdauer-Management-Klasse darin, "Ausdauer zu verwalten" Ich möchte das Verhalten, die Ausdauer zu erhöhen oder zu verringern, nicht anderen Klassen überlassen.

Um dies zu erreichen, verbieten Sie den direkten Zugriff auf Ausdauerinformationen von außen. ** Ich frage nur "Hey Managementklasse, was ist deine aktuelle Ausdauer?" **.

Die Grundlage der Kapselung ist "externe Referenzen einfacher machen".

Auch wenn Sie den Prozess oder Status ausblenden Code, dessen Aufruf kompliziert ist oder der nur dann gut funktioniert, wenn Sie ihn in einer bestimmten Reihenfolge aufrufen, ist kein sehr guter Code.

schließlich

Diesmal habe ich die Kapselung erklärt. Indem Sie die Kapselung beherrschen, können Sie den sogenannten "verdammten Code" reduzieren, der viele Fehler verursacht.

Es ist nicht nur für Java sehr wichtig, sondern auch für die objektorientierte Programmierung Bitte tragen Sie es richtig.

Übrigens weisen die meisten gängigen Getter und Setter nur Werte zu und geben sie zurück Die diesmal eingeführte Verwendung von Setter kann als ein ganz besonderes Muster bezeichnet werden.

Bitte beachten Sie, dass es in einigen Fällen verboten sein kann, den Getter oder Setter tatsächlich zu verarbeiten.

Recommended Posts

Java Beginner Escape Boot Camp Teil 2 Grundlegendes zu Java-Klassen und -Kapselung
Java Anfänger Escape Boot Camp Teil 1 Struktur und Schreiben der Java-Klasse
Java (Klasse und Instanz)
[Java] Generics-Klasse und Generics-Methode
Java und Iterator Teil 1 Externe Iterator Edition
Apache Hadoop und Java 9 (Teil 1)
Java abstrakte Methoden und Klassen
Java-Kapselung und Getter und Setter
Unterschiede zwischen "Anfänger" Java und Kotlin
[Java-Anfänger] Über Abstraktion und Schnittstelle
[Java-Anfänger] == Operator und Gleiche Methode
Verstehe gleich und hashCode in Java
Java Generics (definiert Klassen und Methoden)
Java-Programmierung (Klassen und Instanzen, Hauptmethoden)
JAVA lernen Geschichte abstrakte Klassen und Methoden