Contraintes sur les attributs :
Contraintes sur fonctionnalités :
3 opérations représentées par les méthodes :
Equide rencontre(Equide e);
int tracter();
int courir();
Pour rencontre()
:
Pour tracter()
:
Pour courir()
:
<aside> ⚠️
Les classes feuilles doivent toutes être instanciables. Pour les autres, on ne sait pas.
</aside>
<aside> ⚙
Donner le code des constructeurs de : Equide
, Chevaux
, Mules
, Jument
, Ane
. En écrivant le moins de code + copier/coller possible.
</aside>
class Equide{
int force, endurance, age, esperanceVie;
public Equide(){age = 0;}
}
class Chevaux extends Equide{
public Chevaux(){esperanceVie=20;}
}
class Mules extends Equide{
public Mules(){esperanceVie=25;}
}
class Jument extends Chevaux{
public Jument(){
force = 4;
force += 1;
Random loto = new Random();
force += loto.nextInt(5)-2;
endurance = 6;
endurance -= 1;
endurance += loto.nextInt(5)-2;
}
class Ane extends Anes{
public Ane(){
Random loto = new Random();
force = 6 + loto.nextInt(5)-2;
endurance = 5 + loto.nextInt(5)-2;
}
}
Avec cette approche, on fait la création du random + tirage +2/-2 dans chaque classe feuille = 8 copier/coller.
Réflexion sur les opérations communes entre classes + évaluer si on peut utiliser des valeurs par défaut qui s’appliquent à la majorité des cas (≥ 50% des cas).
Les 8 copier/coller peuvent être réduits à 1 seul exemplaire en déplaçant le code dans le constructeur de la classe Equide
.
Comme il y a 50% des cas où l’on connait la force, on peut choisir d’initialiser l’attribut force avec une valeur moyenne de 4 (ou 6) et modifier dans une sous-classe si la valeur par défaut ne correspond pas.
class Equide{
int force, endurance, age, esperanceVie;
Random loto,
public Equide(){
age = 0;
esperanceVie = 20;
loto = new Random();
force = 4 + loto.nextInt(5)-2;
endurance = 6 + loto.nextInt(5)-2;
}
}
class Chevaux extends Equide{
public Chevaux(){
super();
force +=1;
endurance -=1;
}
}
class Mules extends Equide{
public Mules(){
super();
endurance +=1;
}
}
class Jument extends Chevaux{
public Jument(){
super();
}
}
class Ane extends Anes{
public Ane(){
super();
force +=2;
endurance -=2;
}
}
Dans les classes femelles représentant les mâles, on doit corriger les attributs force / endurance.
Si on arrive à connaître le genre directement dans Equidé on peut éviter cette modification
<aside> ⚠️
La classe Equide
n’est pas censée savoir quoi que ce soit sur les sous-classes
</aside>
DONC SURTOUT PAS :
Equide(){
...
~~if(this instanceof Etalon || this instanceof Ane)~~...
}