| FAUX :
void proposerProjet(...) {
rechercher()
createProjet()
ajouter()
envoyerCourriel()
}
(
Les opérations « rechercher » sont appelées sur des classes,
donc avec le nom de la classe puis un point avant le nom de
l'opération. Par ailleurs, le diagramme de communications montre six
messages dans la séquence de l'opération « proposerProjet »
de la classe « Picoforge ». En outre, les opérations
renvoient des valeurs de retour. Enfin, l'opération
« ajouter » n'est pas appelée par l'opération
« proposerProjet » mais par le constructeur de la classe
« Projet » : c'est un message imbriqué qui ne fait pas
partie de l'opération « proposerProjet ».
) |
| FAUX :
void proposerProjet(...) {
util=Utilisateur.rechercher(...)
t=Type.rechercher(...)
th=Theme.rechercher(...)
l=Licence.rechercher(...)
p.createProjet(...)
g.envoyerCourriel()
}
(
Les appels aux opérations sur les classes et les objets sont corrects,
excepté que l'objet « p » est la valeur de retour de la
création du projet et non un objet sur lequel est appelée l'opération
« createProjet ». Par ailleurs, certains appels doivent être
conditionnels.
) |
| FAUX :
void proposerProjet(...) {
util=Utilisateur.rechercher(...)
t=Type.rechercher(...)
th=Theme.rechercher(...)
l=Licence.rechercher(...)
createProjet(util,nom,...)
g.envoyerCourriel()
}
(
Les appels aux opérations sur les classes et les objets sont
corrects. Mais, certains appels sont conditionnels.
) |
| FAUX :
void proposerProjet(...) {
util=Utilisateur.rechercher(...)
t=Type.rechercher(...)
th=Theme.rechercher(...)
l=Licence.rechercher(...)
p=createProjet(util,nom,...)
if (p!=null) {
g.envoyerCourriel()
}
}
(
Les appels aux opérations sur les classes et les objets sont
corrects. L'appel a l'opération « envoyerCourriel » est bien
conditionnel. Mais, l'appel au constructeur de la classe
« Projet » doit aussi être conditionnel.
) |
| VRAI :
void proposerProjet(...) {
util=Utilisateur.rechercher(...)
t=Type.rechercher(...)
th=Theme.rechercher(...)
l=Licence.rechercher(...)
if (util!=null et t != null et th != null et l!=null) {
p=createProjet(util,nom,...)
}
if (p!=null) {
g.envoyerCourriel()
}
}
(
Bonne utilisation des classes et des objets pour les appels. Bon
séquencement des appels. Bonnes conditions pour les deux derniers
messages.
) |
| FAUX :
void proposerProjet(...) {
util=Utilisateur.rechercher(...)
t=Type.rechercher(...)
th=Theme.rechercher(...)
l=Licence.rechercher(...)
if (util!=null et t != null et th != null et l!=null) {
p=createProjet(util,nom,...)
g=createGroupe(nom)
if (g!=null) {
ajouter(util)
}
}
if (p!=null) {
g.envoyerCourriel()
}
}
(
Pour que l'algorithme soit correct, il faut retirer la construction de
l'objet « g » et l'appel à l'opération
« ajouter » : ces deux dernières opérations sont
appelées non pas dans l'opération « proposerProjet », mais
dans le constructeur de la classe « Projet ». En effet, les
deux messages sont des messages imbriqués qui ne font pas partie de
l'opération « proposerProjet ».
) |
| FAUX :
constructeur(util,nom...) {
}
(
Le constructeur n'est pas vide, il crée le groupe « g » et
appelle l'opération « ajouter ».
) |
| FAUX :
constructeur(util,nom...) {
createGroupe(nom)
ajouter(...)
}
(
Les deux messages sont bien présents mais mal traduits : il
manque la récupération de la valeur de retour du constructeur et la
référence de l'objet pour l'appel de l'opération
« ajouter ».
) |
| FAUX :
constructeur(util,nom...) {
createGroupe(nom)
if (g!=null) {
ajouter(...)
}
}
(
La condition sur l'appel de l'opération « ajouter » est bien
présente. Les deux messages sont bien présents mais il manque la
récupération de la valeur de retour du constructeur et l'objet sur
lequel est appelé l'opération « ajouter ».
) |
| VRAI :
constructeur(util,nom...) {
...
g.createGroupe(nom)
if (g!=null) {
g.ajouter(...)
}
}
(
Bonne traduction des messages et de la condition.
) |
| FAUX :
constructeur(util,nom...) {
...
g.createGroupe(nom)
if (g!=null) {
g.ajouter(...)
}
if (p!=null) {
g.envoyerCourriel(...)
}
}
(
L'appel à l'opération « envoyerCourriel » n'est pas dans ce
niveau d'imbrication ; elle est en trop.
) |