[JAVA] Ein PHP-Ingenieur, der den Legacy-Code ständig verbessert, lernte die Objektorientierung kennen

Warum habe ich mich entschieden, diesen Artikel zu schreiben?

Ich verbessere ständig meinen Legacy-Code, arbeite aber nur daran, meinen Legacy-Code zu verbessern. Daher möchte ich mehr über die Objektorientierung erfahren und diesen Artikel ausgeben.

Was ist objektorientiert?

Kombination der zur Realisierung des Systems erforderlichen Prozesse in Teile

Warum Objektdenken notwendig ist

Der Prozess wird zu lang und der menschliche Geist weiß nicht, was er tut. Auch wenn Sie etwas machen können, das funktioniert, wenn Sie Wartungsarbeiten usw. durchführen. Wenn ich es zurücklese, weiß ich nicht, was ich mache und wo. → Der Engpass Nummer eins in der Entwicklung

Die Idee der objektorientierten Programmierung

――Wo und welche Funktion ――So erstellen Sie ein System, indem Sie die Funktionen kombinieren

Objektorientierte Definition

Die Idee, den Prozess der Softwareentwicklung zu Teilen zusammenzusetzen

Zum Beispiel, wenn es ein Objekt gibt, das Zug genannt wird Überlegen Sie, was für eine Bewegung ein Zug ist.

Wie oben erwähnt, als ich darüber nachdachte, etwas zu bauen, das man Zug nennt Überlegen Sie, welche Art von Verarbeitung es zu einem Zug macht

Drei wichtige objektorientierte Elemente

Wir werden die oben genannten drei Hauptelemente verwenden, um darüber nachzudenken, wie Objekte (Prozesse) erstellt und verknüpft werden, und nicht, was jede Programmzeile tut.

Ich werde jedes der drei Hauptelemente erklären.

Verkapselung

Unter der Annahme, dass es eine Fahrzeugklasse wie die folgende gibt, wird eine Methode namens moveOn vorbereitet.

Diese Art der Konstruktion wird als Kapselung bezeichnet.

Vehicle.java


public class Vehicle {

    private Boolean isMove = false;

    public void moveOn() {
        this.isMove = true;
        System.out.println("Das Fahrzeug bewegt sich");
    }

    public void stop() {
        this.isMove = false;
        System.out.println("Das Fahrzeug hält an");
    }
}

Die Kapselung wird implementiert, indem das Lesen und Schreiben auf Felder beschränkt und Methoden aufgerufen werden. Änderungen innerhalb des Objekts verursachen unerwartete Interferenzen und Auswirkungen auf die Außenseite, wodurch das Brechen schwierig wird.

Die Zugangskontrolle besteht aus den folgenden vier Stufen.

Stärke der Einschränkung(Je mehr schwarze Sterne, desto schwerer) Name Beschreibungsmethode Zugriffsberechtigungsbereich
★★★★ private Beschrieben als privat Nur meine eigene Klasse
★★★☆ package private Schreibe nichts Klassen, die zum selben Paket gehören wie Sie
★★☆☆ protected Beschrieben als geschützt Untergeordnete Klassen, die zum selben Paket gehören wie Sie oder von Ihnen erben
★☆☆☆ public Als öffentlich beschrieben Alle Klassen

Was ist Vererbung?

Es gibt eine Fahrzeugklasse und eine Zugklasse, die sie wie unten gezeigt erben. In diesem Fall kann es wie folgt aufgerufen werden.

Grob gesagt wird das Erben der übergeordneten Klasse als Vererbung bezeichnet.

Im folgenden Zug wird moveOn überschrieben und unabhängig implementiert, aber stop verwendet die Methode der übergeordneten Klasse.

Vehicle.java



public class Vehicle {

    protected Boolean isMove = false;

    public void moveOn() {
        this.isMove = true;
        System.out.println("Das Fahrzeug bewegt sich");
    }

    public void stop() {
        this.isMove = false;
        System.out.println("Das Fahrzeug hält an");
    }

    public void setIsMove(Boolean isMove) {
        this.isMove = isMove;
    }

    public void info() {
        System.out.println("Fahrzeug(Vehicle)ist");
    }
}

Train.java



public class Train extends Vehicle {
    private Boolean isOpenDoor;

    @Override
    public void moveOn() {
        if (this.isOpenDoor) {
            throw new RuntimeException("Ausnahmefehler");
        }
        super.moveOn();
    }

    public void closeDoor() {
        this.isOpenDoor = false;
    }

    public void openDoor() {
        if (super.isMove) {
            throw new RuntimeException("Ausnahmefehler");
        }
        System.out.println("Ich habe die Tür geöffnet");
    }

    public void info() {
        System.out.println("Elektrischer Zug(Train)ist");
    }
}

Ich werde es tatsächlich bewegen.

Main.java


public class Main {

    public static void main(String[] args) {
        Train train = new Train();
        train.closeDoor();
        train.moveOn();
        train.stop();

    }
}

【Ergebnis】

Da es das Fahrzeug erbt, ist ersichtlich, dass stop problemlos aufgerufen werden kann.


Das Fahrzeug bewegt sich
Das Fahrzeug hält an

Process finished with exit code 0

Was ist Polymorphismus?

Polymorphismus ist die Behandlung verschiedener Dinge auf die gleiche Weise, indem Dinge in großem Stil aufgenommen werden. Einfach ausgedrückt, behandeln Sie die Züge, die bisher als Fahrzeuge erschienen sind.

Erstellen Sie eine neue Fahrzeugklasse und behandeln Sie sie als Fahrzeug. (* Zug und Fahrzeug für die Vererbung wiederverwenden ...)

Car.java



public class Car extends Vehicle {

    private Boolean isStartEngine = false;
    private String gearMode = "NEUTRAL";

    @Override
    public void moveOn() {
        if (!isStartEngine) {
            throw new RuntimeException("Der Motor läuft nicht");
        }
        if (gearMode.equals("NEUTRAL")) {
            throw new RuntimeException("Ich kann nicht neutral vorgehen");
        }
        super.moveOn();
    }

    public void setGear(String mode) {

        switch (mode) {
            case "NEUTRAL":
            case "DRIVE":
            case "BACK":
                gearMode = mode;
            default:
                throw new RuntimeException("Der angegebene Modus existiert nicht");
        }
    }

    public void info () {
        System.out.println("Wagen(Car)ist");
    }
}

Main.java


public class Main {

    public static void main(String[] args) {

        Vehicle vehicle = new Vehicle();
        Vehicle vehicleCar = new Car();
        Vehicle vehicleTrain = new Train();

        vehicle.info();
        vehicleCar.info();
        vehicleTrain.info();
    }
}

[Ergebnis] Da Fahrzeug die übergeordnete Klasse ist, kann Auto / Zug als Fahrzeug behandelt werden, und es kann gesagt werden, dass es den Polymorphismus erfüllt.

Objektorientierte Vorteile

Unterschied zwischen prozeduraler Programmierung und objektorientierter Programmierung

--Verfahrenstyp, der ab Programmbeginn als Anweisungen in der Reihenfolge geschrieben werden soll ――Es ist objektorientiert, über das durch Teile zu realisierende Programm nachzudenken und die Verarbeitung aufzuteilen.

Impressionen

Ich fand es sehr wichtig, die Grundlagen der Objektorientierung zu kennen, um Code zu schreiben, der leicht zu sehen, zu verstehen und zu sichern ist, um ein System zu erstellen, das weiterhin verwendet wird.

Ich habe die Gliederung ohne schwierige Wörter beschrieben, aber beim eigentlichen Schreiben des Quellcodes gibt es Regeln für jede Funktion, daher möchte ich sie beim Überprüfen verwenden.

Recommended Posts

Ein PHP-Ingenieur, der den Legacy-Code ständig verbessert, lernte die Objektorientierung kennen
Informationen zur Objektorientierung
Eine Geschichte über einen großen SIer-Ingenieur, der Code nicht richtig schreiben kann, hat eine Blockbuster-Android-App mit 600.000 Downloads erstellt