[JAVA] Versuchen wir die Implementierung, um den Bereich des Dreiecks zu finden, den wir im Training für Neuankömmlinge durchgeführt haben

Zwei Jahre sind vergangen, seit ich mit dem Programmieren angefangen habe

Es ist fast zwei Jahre her, seit ich das Java-Training des Unternehmens programmiert habe, dem ich als neuer Absolvent beigetreten bin. In letzter Zeit habe ich mehr Möglichkeiten, mit Informationsstudenten zu sprechen, und mir ist oft klar, dass es viele erstaunliche Menschen gibt. Wenn ich zurückblicke, was ich im Training für Neuankömmlinge gemacht habe, hatte ich Zweifel ...

Was ich damals tat, war objektorientiert?

Eine der Trainingsaufgaben bestand darin, den Bereich des Dreiecks zu finden. Die Idee war, es mit Klassen zu implementieren, anstatt es prozedural zu schreiben. Ich denke, die Antwort, die ich gefunden habe, war ⬇️ so.

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

Ich denke, die vorbildliche Antwort war so. Vielleicht ist es in Ordnung. (Befriedigend)





Moment mal: Denken: Wird das Dreieck dieser Klasse so dargestellt? スクリーンショット 2020-03-27 16.52.11.png

Ist es so スクリーンショット 2020-03-27 16.48.18.png

Hmmm, kein Dreieck ...





Aber es ist okay! !! !! Es wäre schön, wenn wir damals "die Kombination von Basis und Höhe" als Dreieck definieren würden! vielleicht

Da der Text zu dieser Zeit jedoch eine feste Dreiecksfigur hatte, muss der Schöpfer darüber nachdenken. Apropos

Versuchen Sie, die Aufgabe zu diesem Zeitpunkt objektorientiert erneut herauszufordern

Die Objektorientierung nagt gerade. Bitte weisen Sie auf Mängel oder Fehler hin.

Definieren Sie ein Dreieck

Da die einzige Information, die als Aufgabe angegeben wird, ** Basis ** und ** Höhe ** ist, nehmen wir an, dass das "Dreieck ein rechtwinkliges Dreieck" mit diesen beiden Seiten als Seiten ist. (Bitte lass mich)

Versuchen Sie zu implementieren

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

Ich habe versucht, die diagonale Seite von zwei Seiten zu finden, als ich die Dreiecksklasse initialisiert habe. Ich denke, das wird das Dreieck sein, das Sie sich vorstellen. Ich habe versucht, die Seite wie ein Wertobjekt auszudrücken und ihm den Zustand der diagonalen Seite zu geben. Wenn Sie die Fläche nach der Dreiecksklasse abfragen, wird sie berechnet und von den beiden Seiten zurückgegeben, die keine diagonalen Seiten sind.

Die Länge der Seite hätte als Längenklasse ausgeschnitten werden können. Der Initialisierungsprozess der Dreiecksklasse und der Seitenklasse ist möglicherweise nicht cool. Es kann überhaupt nicht cool sein. Dies ist das Beste, was ich jetzt tun kann ... Versuchen wir es zwei Jahre später noch einmal: Rice_ball:

Wenn Sie Vorschläge haben: bow_tone1: Ich möchte die Objektorientierung verstehen

Recommended Posts

Versuchen wir die Implementierung, um den Bereich des Dreiecks zu finden, den wir im Training für Neuankömmlinge durchgeführt haben
Die Geschichte von Collectors.groupingBy, die ich für die Nachwelt behalten möchte
So machen Sie den Einzug zu zwei Einzelbyte-Leerzeichen in der JAXB-Implementierung des JDK
Dies und das der Implementierung der zeitlichen Beurteilung von Daten in Java
So ermitteln Sie die Gesamtzahl der Seiten beim Paging in Java
[Einführung in die Informatik Teil 1: Versuchen wir es mit maschinellem Lernen] Implementieren wir die k-Mittelungsmethode in Java - Über das Konzept der Koordinaten -
Die Geschichte, absichtlich zum ersten Mal in meinem Leben Try Catch zu verwenden
[Java] Wo befindet sich die Implementierungsklasse der Annotation, die in BeanValidation vorhanden ist?
AndroidStudio Verweisen wir auf C ++ im Modul anderer Projekte (Java / Kotlin).
[Java] Ist es nicht erforderlich, "Identität" bei der Implementierung der equals () -Methode zu überprüfen?
[Swift, ein Muss für Jungvögel! ] Lassen Sie uns die Implementierung der Kommunikationsverarbeitung der Web-API verstehen
10 Sperrfeuer mit ● oder ■, die wahrscheinlich im Training auftreten (Java)
Eine Geschichte, dass eine Person, die ein solides iOS gemacht hat, möglicherweise von der Implementierung von Listener abhängig ist, wenn sie zu Android wechselt