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 ...
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?
Ist es so
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
Die Objektorientierung nagt gerade. Bitte weisen Sie auf Mängel oder Fehler hin.
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)
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