[JAVA] Essayons la mise en œuvre pour trouver l'aire du triangle que nous avons fait dans la formation des nouveaux arrivants

Deux ans se sont écoulés depuis que j'ai commencé à programmer

Cela fait presque deux ans que je me suis programmé pour la première fois dans la formation Java de l'entreprise que j'ai rejoint en tant que nouveau diplômé. Récemment, j'ai plus d'occasions de parler avec des étudiants en information et je me rends souvent compte qu'il y a beaucoup de gens extraordinaires. En repensant à ce que je faisais dans la formation des nouveaux arrivants, j'avais des doutes ...

Ce que je faisais à l'époque était orienté objet?

L'une des tâches de formation était de trouver l'aire du triangle. L'idée était de l'implémenter en utilisant des classes plutôt que de l'écrire de manière procédurale. Donc, je pense que la réponse que j'ai trouvée était ⬇️ comme ça.

class Triangle {
  int bottom;
  int height;
  
  public Triangle(int arg1, int arg2) {
    this.bottom = arg1;
    this.height = arg2;
  }

  public int calc() {
    return this.bottom * this.height / 2;
  }
}

Je pense que la réponse modèle était comme ça. Peut-être que ça va. (Satisfaisant)





Attendez une minute: réfléchissez: le triangle est-il représenté par cette classe comme ça? スクリーンショット 2020-03-27 16.52.11.png

C'est comme ça? スクリーンショット 2020-03-27 16.48.18.png

Hmmm, pas un triangle ...





Mais c'est d'accord! !! !! Ce serait bien si nous définissions à ce moment-là «la combinaison de la base et de la hauteur» comme un triangle »! peut être

Cependant, puisque le texte à cette époque avait une figure triangulaire solide, le créateur doit y réfléchir. Au fait

Essayez de relancer la tâche à ce moment-là d'une manière orientée objet

L'orientation de l'objet est en train d'être rongée. Veuillez signaler toute pénurie ou erreur.

Définir un triangle

Puisque la seule information donnée comme tâche est ** base ** et ** hauteur **, supposons que le triangle est un triangle rectangle avec ces deux côtés comme côtés. (S'il te plait laisse moi)

Essayez de mettre en œuvre

public class RightTriangle {
    private Set<Side> sideSet;

    public RightTriangle(Side bottom, Side height) {
        assert !bottom.isHypotenuse();
        assert !height.isHypotenuse();

        sideSet = Set.of(bottom, height, calcHypotenuse(bottom, height));
    }

    private Side calcHypotenuse(Side bottom, Side height) {
        return Side.createHypotenuse(Math.hypot(bottom.length(), height.length()));
    }

    public double area() {
        return sideSet.stream()
          .filter(s -> !s.isHypotenuse())
          .map(Side::length)
          .reduce(1.0, (s1, s2) -> s1 * s2) / 2;
    }
}

public class Side {
    private boolean isHypotenuse;
    private double value;

    private Side(double value, boolean isHypotenuse) {
        assert value > 0;
        this.value = value;
        this.isHypotenuse = isHypotenuse;
    }

    public static Side createSide(double value) {
        return new Side(value, false);
    }

    public static Side createHypotenuse(double value) {
        return new Side(value, true);
    }

    public boolean isHypotenuse() { return this.isHypotenuse; }

    public double length() { return this.value; }
}

J'ai essayé de trouver le côté diagonal de deux côtés lors de l'initialisation de la classe triangle. Je pense que ce sera le triangle que vous imaginez. J'ai essayé d'exprimer le côté comme un objet de valeur et de lui donner l'état du côté diagonal. Lors de la demande de l'aire à la classe du triangle, elle sera calculée et renvoyée à partir des deux côtés qui ne sont pas des côtés diagonaux.

La longueur du côté aurait pu être découpée en tant que classe de longueur. Le processus d'initialisation de la classe triangle et de la classe latérale peut ne pas être cool. Ce n'est peut-être pas cool en premier lieu. C'est le mieux que je puisse faire maintenant ... Réessayons deux ans plus tard: Rice_ball:

Si vous avez des suggestions: bow_tone1: je veux comprendre l'orientation des objets

Recommended Posts

Essayons la mise en œuvre pour trouver l'aire du triangle que nous avons fait dans la formation des nouveaux arrivants
L'histoire de Collectors.groupingBy que je veux garder pour la postérité
Comment créer un retrait de deux espaces d'un octet dans l'implémentation JAXB du JDK
Ceci et cela de la mise en œuvre du jugement en temps réel des dates en Java
Comment trouver le nombre total de pages lors de la pagination en Java
[Introduction à l'informatique Partie 1: Essayons l'apprentissage automatique] Implémentons la méthode de calcul de la moyenne k en Java - À propos du concept de coordonnées -
L'histoire de l'utilisation intentionnelle de Try catch pour la première fois de ma vie
[Java] Où est la classe d'implémentation de l'annotation qui existe dans BeanValidation?
AndroidStudio Faisons référence au C ++ dans le module des autres projets (Java / kotlin)
[Java] Est-il inutile de vérifier "l'identité" dans l'implémentation de la méthode equals ()?
[Swift, un incontournable pour les débutants! ] Comprenons la mise en œuvre du traitement des communications de l'API Web
10 barrages de dessin avec ● ou ■ qui sont susceptibles d'apparaître dans la formation (Java)
Une histoire que les personnes qui ont fait iOS solidement peuvent être accro à la mise en œuvre de Listener lors du passage à Android