Académique Documents
Professionnel Documents
Culture Documents
Examen UE Java-Objet
1. Si vous voulez utiliser certaines classes de Java dans votre code, vous devez utiliser le mot clé import.
Par exemple, si vous voulez utiliser la classe Random, vous devez écrire import java.util.Random;.
Est-il possible de se passer de cette ligne ? Si oui, comment ?
Quelle est la complexité de cette méthode si list est un ArrayList ? un LinkedList ? Pouvez-vous
proposer une meilleure réécriture de cette méthode ?
Si list est un ArrayList, la complexité est en O(n). Si list est un LinkedList, la complexité
est en O(n2 ). On peut proposer la réécriture suivante :
3. On dispose d’une classe Personne qui a trois attributs int abs, int ord et boolean contamine.
Cette classe dispose d’une méthode d’instance qui étant donné un Personne autre, et un seuil
double theta, passe l’attribut contamine de autre à true si ce dernier est à une distance inférieure
à theta :
5. Ce code compile-t-il ? Si la réponse est non, expliquer les erreurs. Si la réponse est oui, qu’affiche-
t-il ?
11 public emprunt(){
12 disponible = false;
13 }
14
19 a.emprunt();
20 Livre.nbEmprunt++;
21 Livre.nbEmpruntTotal++;
22
23 b.emprunt();
24 Livre.nbEmprunt++;
25 Livre.nbEmpruntTotal++;
26
27 System.out.println(a.nbEmpruntTotal);
28 }
29 }
Licence 3 – MIDO – 2020–2021 Programmation Java
12 a.emprunt();
13 Livre.nbEmprunt++; //nbEmprunt n'est pas une variable static
14 Livre.nbEmpruntTotal++;
15
16 b.emprunt();
17 Livre.nbEmprunt++; //nbEmprunt n'est pas une variable static
18 Livre.nbEmpruntTotal++;
19
20 System.out.println(a.nbEmpruntTotal);
21 }
22 }
6. Ce code compile-t-il ? Si la réponse est non, expliquer les erreurs. Si la réponse est oui, qu’affiche-
t-il ?
10 for(Livre l: liste){
11 l.affiche();
12 }
13 }
14 }
Une équipe de chercheur souhaite développer un logiciel pour modéliser comment un virus se propage
dans une population. Une personne possède un nom (de type String) et un identifiant unique (de type
int). On lui attribue également une variable contamine de type boolean qui indique si cette personne est
contaminée, et une variable seuil de type int. Enfin, une personne possède des amis. Cela sera représenté
à l’aide d’un HashMap où les clefs sont des Personne et les valeurs sont des int (cette valeur indique ce
que l’on nommera le poids de l’amitié). Plus le poids de l’amitié entre deux personnes est élevé et plus ils
passent de temps ensemble (ainsi on estime qu’il y a plus de chances de contamination).
Question 1 : Ecrivez une classe Personne qui représentera une personne avec un constructeur par défaut
et un constructeur qui prend en paramètre un String nom et un int seuil. Les questions 2, 3 et 4 vous
demanderont d’ajouter des méthodes, vous pouvez donc laisser de l’espace pour compléter cette classe plus
tard.
9 public Personne(){}
10
Question 3 : Comme vous devez utiliser la classe HashMap, quelles sont les deux méthodes de la classe
Object qu’il est préférable de redéfinir ? Quels liens existent entre ces deux méthodes ? Codez ces méthodes
en utilisant uniquement les attributs correspondant au nom et à l’identifiant de la personne (on suppose que
seuls ces attributs comptent pour ces deux méthodes).
Il faut redéfinir hashCode() et equals(). Deux objets égaux selon equals doivent avoir la même
valeur de hachage.
1 @Override
2 public int hashCode() {
3 return ID + ((name == null) ? 0 : name.hashCode());
4 }
5
6 @Override
7 public boolean equals(Object obj) {
8 if (this == obj)
9 return true;
10 if (obj == null)
11 return false;
12 if (getClass() != obj.getClass())
13 return false;
14 Personne other = (Personne) obj;
15 if (ID != other.ID)
16 return false;
17 if (name == null) {
18 if (other.name != null)
19 return false;
20 } else if (!name.equals(other.name))
21 return false;
22 return true;
23 }
Pour simuler la diffusion d’un virus, on utilisera la règle de propagation suivante : une Personne p de-
vient contaminée quand la somme des “poids de l’amitié” des amis contaminés devient supérieure ou égale
au seuil de p. Par exemple, si un individu p1 de seuil 3 est ami avec p2 et p3 avec des poids respectifs 1 et
2, alors il deviendra contaminé dès lors que ses deux amis le sont (un seul ne suffit pas).
Question 4 : Ecrire une méthode d’instance public boolean majContamine() qui indique si une personne
passe de non contaminée à contaminée et qui met à jour la variable contamine correspondante.
Licence 3 – MIDO – 2020–2021 Programmation Java
Question 5 : Ecrire une classe Communaute qui possède un LinkedList de Personne nommé membres.
Ecrire également un constructeur (si besoin) et une méthode public void ajoutMembre(Personne p) qui
ajoute un membre à la communauté.
Question 6 : Ecrire dans la classe Communaute une méthode public void propage(Set<Personne> s)
qui étant donné un ensemble de personnes, les déclare contaminés et propage le virus selon la règle de
propagation énoncée juste avant la question 4. Le processus de contamination s’arrête quand plus aucune
nouvelle personne ne devient contaminée.
5 boolean nouveauContamine;
6 do {
7 nouveauContamine = false;
8 for(Personne p:membres) {
9 nouveauContamine |= p.majContamine();
10 }
11 }while(nouveauContamine);
12 }
Question 7 : Ecrire une classe Main qui teste votre programme sur une communauté de 4 personnes de
votre choix. Pour utiliser la méthode de la question précédente, vous pouvez utiliser la classe HashSet<T>
qui implémente l’interface Set<T> et la méthode d’instance boolean add(T t) pour rajouter un élément à
une collection.
Licence 3 – MIDO – 2020–2021 Programmation Java
20 c.affiche();
21 Set<Personne> s = new HashSet<Personne>();
22 s.add(p1);
23 s.add(p3);
24 c.propage(s);
25 c.affiche();
26 }
27 }
Licence 3 – MIDO – 2020–2021 Programmation Java
Annexes
Méthodes de la classe Object :
Modifier and Type Method Description
protected Object clone()
Creates and returns a copy of this object.
boolean equals(Object obj)
Indicates whether some other object is "equal
to" this one.
protected void finalize()
Called by the garbage collector on an object
when garbage collection determines that there
are no more references to the object.
Class<?> getClass()
Returns the runtime class of this Object.
int hashCode()
Returns a hash code value for the object.
String toString()
Returns a string representation of the object.