Reposes examen IFT-785 - Informatique - Université de Sherbrooke

27 avr. 2006 ... Examen FINAL (Réponses) ? Hiver 2006 .... Le design pattern utilisé est le « F
actory Design Pattern », pour avoir un objet d'un certain type ...

Part of the document


Université de Sherbrooke
Département d'informatique
Examen FINAL (Réponses) - Hiver 2006 IFT785 - Approches Orientées Objets
Remis à : M. Sylvain Giroux
Par : Youssef Bannari
00 979 686 Jeudi 27 avril 2006 PARTIE THEORIQUE Question#1
En ObjVlisp, La différence entre instance terminale, classe et méta-
classes en est une de comportement et non de nature. o Les classes et instances terminales sont seulement une conséquence de
l'héritage pas de la distinction de type.
o Ils diffèrent par leur capacité de réagir au message d'instanciation.
o Pas de distinctions de structure ou de type entre les classes et les
instances terminales.
o Méta-classe est simplement une classe qui instancie d'autres classes.
Si la classe d'un objet possède la méthode primitive d'instanciation
(Nouveau sélecteur, possédé par la classe primitive de la classe) ou
elle l'hérite :
- Cet objet est une classe.
- Autrement c'est une instance terminale. [pic] Question#2 (Pseudo-code) Variable Index {
Private int _nb;
Private Object _Tabl;
VariableIndex (int nb) {
_nb = nb;
_Tabl = new object [_nb];
}
Set Variable (int pos, Object var) {
If (_nb > pos) {
Throw exception ("Erreur-1")
}
_Tabl [pos] = var;
}
Object get Variable (int pos) {
If (_nb > pos) {
Throw exception ("Erreur-2")
}
Return _tab [pos];
}
} Class fifa {
VariableIndex _joeur = new VariableIndex (11);
VariableIndex _Regle = new VariableIndex (17);
Public void Set Regle (int pos, string regle) {
_Regle.setVariable (_pos, Regle)
}
Public void Set Joeur (int pos, string joeur) {
_Joeurs.setVariable (_pos, joeur)
}
Public void get Joeur (int pos) {
Return _joeur.getJoeur ();
}
Public void get Regle (int pos) {
Return _Regle.getRegle ();
}
}
PARTIE PRATIQUE
Étude de cas : Du multimédia partagé Question#1
Le design pattern utilisé est le « State Design Pattern », parce que
chaque état du player exécute des fonctionnalités différentes pour chaque
méthode.
J'ai déplacé le code des fonctions « Play, Pause, Resume et Stop » dans la
nouvelle classe stateMedia appropriée. (Méthode de refactorisation de MOVE) Test Unitaires : « AgentPlayerMultimedia »
Test les fonctionnalités par exemple :
1- Play, Stop
2- Play, Pause, Stop
Pour vérifier si l'état est valide, ainsi que la variable « Joue » se fasse
incrémenter et décrémenter. Question#2
Le design pattern utilisé est le « Factory Design Pattern », pour
avoir un objet d'un certain type sans le connaitre.
La fonction getMediaPlayer retourne un media player en fonction du système
d'exploitation «Windows/Mac » et du type passé en paramètre. Question#3
Le design pattern utilisé est le « Singleton Design Pattern » pour
avoir une seul instance d'affichage. Question#4
Ajouter un nouvel état « State3DPlaying » Question#5
Le design pattern utilisé est le « Composite Design Pattern ». Il
suffit de créer un arbre a l'aide d'un arbre par la commande (creerRegle
(paramètre(s) à comparer, valeur(s) à comparer, arbre ou l'on ajoutera la
feuille ou l'arbre qui sera créer selon le nombre de paramètre dans les
vecteurs)). Prendre en note que les paramètres sont une liste.
Pour créer un sous arbre, il faut d'abord créer un arbre, puis créer
un autre arbre, puis avec le premier arbre ajouter le deuxième.
Par exemple : arbre1.addRegle (arbre2) Test Unitaire : « ComponentTest »
Test sur la création de règle simple (simplement des feuilles) et
complexe (avec un sous arbre). Question#6
Le design pattern utilisé est l'Observer(MultimediaP2P) avec le
Singleton pour l'Agora. Dans le cas ou il ya une seule agora et plusieurs
observateur, des clients, qui observe les changements ou demande la liste
des clients actuellement connecter. De plus j'ai modifié les classes
existantes afin d'ajouter les fonctionnalités nécessaires. Test unitaires : «MultimediaP2PTest »
J'ai ajouté des tests unitaires pour la recherche de multimédia par
l'entremise d'un client «MultimediaP2P» pour que ce dernier puisse
rechercher dans tous les clients participant à l'agora s'il existe un
multimédia qu'il veut. Également, que cela retourne un seul résultat s'il
existe 2 copie sur le serveur ou plus.