[JAVA] Un ingénieur PHP qui continue d'améliorer le code hérité a appris l'orientation des objets

Qu'est-ce qui m'a poussé à écrire cet article

J'améliore constamment mon code hérité, mais je ne travaille que sur l'amélioration de mon code hérité, donc j'aimerais en savoir plus sur l'orientation des objets et publier cet article.

Qu'est-ce que l'orientation objet?

Combinaison des processus nécessaires pour réaliser le système en plusieurs parties

Pourquoi la pensée objet est nécessaire

--Problèmes d'écriture de code

Le processus devient trop long et l'esprit humain ne sait pas ce qu'il fait. Même si vous pouvez faire quelque chose qui fonctionne, lorsque vous faites de la maintenance, etc. Quand je l'ai relu, je ne sais pas ce que je fais et où. → Le premier goulot d'étranglement du développement

L'idée de la programmation orientée objet

――Où et quelle fonction ――Comment créer un système en combinant les fonctions

Définition orientée objet

L'idée d'assembler le processus de développement d'un logiciel en plusieurs parties

Par exemple, quand il y a une chose (objet) appelée un train Pensez à quel type de mouvement est un train.

--Le train bouge --Le train s'arrête

Comme mentionné ci-dessus, quand j'ai pensé à faire quelque chose qui s'appelle un train Pensez au type de traitement qui en fera un train

Trois éléments importants orientés objet

Nous utiliserons les trois éléments majeurs ci-dessus pour réfléchir à la manière de créer des objets (processus) et de les lier, et non à ce que fait chaque ligne du programme.

J'expliquerai chacun des trois éléments majeurs.

Encapsulation

En supposant qu'il existe une classe Vehicle comme la suivante, une méthode appelée moveOn est préparée.

Ce type de construction est appelé encapsulation.

Vehicle.java


public class Vehicle {

    private Boolean isMove = false;

    public void moveOn() {
        this.isMove = true;
        System.out.println("Le véhicule bouge");
    }

    public void stop() {
        this.isMove = false;
        System.out.println("Le véhicule s'arrêtera");
    }
}

L'encapsulation est implémentée en limitant la lecture et l'écriture aux champs et aux appels aux méthodes, de sorte que les changements à l'intérieur de l'objet provoqueront des interférences inattendues et un impact sur l'extérieur, ce qui rendra difficile la rupture.

Le contrôle d'accès comprend les quatre étapes suivantes.

Force de restriction(Les étoiles les plus noires, les plus sévères) Nom Méthode de description Plage d'autorisation d'accès
★★★★ private Décrit comme privé Seulement ma propre classe
★★★☆ package private N'écris rien Classes appartenant au même package que vous
★★☆☆ protected Décrit comme protégé Classes enfants qui appartiennent au même package que vous ou héritent de vous
★☆☆☆ public Décrit comme public Toutes les classes

Qu'est-ce que l'héritage

Il existe une classe Véhicule et une classe Train qui en hérite comme indiqué ci-dessous. Dans ce cas, il peut être appelé comme suit.

--Vehicle: classe parent, super classe --Train: classe enfant, sous-classe

En gros, l'héritage de la classe parent s'appelle l'héritage.

Dans le Train ci-dessous, moveOn est remplacé et implémenté indépendamment, mais stop utilise la méthode de la classe parent.

Vehicle.java



public class Vehicle {

    protected Boolean isMove = false;

    public void moveOn() {
        this.isMove = true;
        System.out.println("Le véhicule bouge");
    }

    public void stop() {
        this.isMove = false;
        System.out.println("Le véhicule s'arrêtera");
    }

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

    public void info() {
        System.out.println("véhicule(Vehicle)est");
    }
}

Train.java



public class Train extends Vehicle {
    private Boolean isOpenDoor;

    @Override
    public void moveOn() {
        if (this.isOpenDoor) {
            throw new RuntimeException("Erreur d'exception");
        }
        super.moveOn();
    }

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

    public void openDoor() {
        if (super.isMove) {
            throw new RuntimeException("Erreur d'exception");
        }
        System.out.println("J'ai ouvert la porte");
    }

    public void info() {
        System.out.println("Train électrique(Train)est");
    }
}

Je vais vraiment le déplacer.

Main.java


public class Main {

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

    }
}

【résultat】

Puisqu'il hérite du véhicule, on peut voir que l'arrêt peut être appelé sans aucun problème.


Le véhicule bouge
Le véhicule s'arrêtera

Process finished with exit code 0

Qu'est-ce que le polymorphisme

Le polymorphisme est le traitement de différentes choses de la même manière en prenant les choses en grand. En termes simples, traitez les trains qui sont apparus jusqu'à présent comme des véhicules.

Créez une nouvelle classe de voiture et traitez-la comme un véhicule. (* Réutiliser le train et le véhicule utilisés pour l'héritage ...)

Car.java



public class Car extends Vehicle {

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

    @Override
    public void moveOn() {
        if (!isStartEngine) {
            throw new RuntimeException("Le moteur ne tourne pas");
        }
        if (gearMode.equals("NEUTRAL")) {
            throw new RuntimeException("Je ne peux pas procéder en neutre");
        }
        super.moveOn();
    }

    public void setGear(String mode) {

        switch (mode) {
            case "NEUTRAL":
            case "DRIVE":
            case "BACK":
                gearMode = mode;
            default:
                throw new RuntimeException("Le mode spécifié n'existe pas");
        }
    }

    public void info () {
        System.out.println("voiture(Car)est");
    }
}

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();
    }
}

[Résultat] Puisque Vehicle est la classe parente, Car / Train peut être traité comme Vehicle, et on peut dire qu'il satisfait le polymorphisme.

Avantages orientés objet

--Facile à changer le programme

Différence entre la programmation procédurale et la programmation orientée objet

--Type de procédure à écrire comme instructions dans l'ordre depuis le début du programme ――Il est orienté objet de penser le programme à réaliser par parties et de diviser le traitement.

Impressions

J'ai senti qu'il était très important de connaître les bases de l'orientation objet afin d'écrire du code facile à voir, à comprendre et à sécuriser afin de créer un système qui continuerait à être utilisé.

J'ai décrit le plan sans utiliser de mots difficiles, mais lors de l'écriture du code source, il y a des règles pour chaque fonction, donc j'aimerais les utiliser tout en les vérifiant.

Recommended Posts

Un ingénieur PHP qui continue d'améliorer le code hérité a appris l'orientation des objets
A propos de l'orientation des objets
Une histoire sur un ingénieur SIer majeur qui ne peut pas écrire correctement le code a créé une application Android à succès avec 600000 téléchargements