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 ...
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?
C'est comme ça?
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
L'orientation de l'objet est en train d'être rongée. Veuillez signaler toute pénurie ou erreur.
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)
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