UNIVERSITE DE LA MANOUBA -----¤¤¤¤----- ECOLE NATIONALE DES SCIENCES DE L'INFORMATIQUE
Matière : ACOO A.U. : 2017-2018
Niveau : I.I. 2 Série N°6: Patrons de conception
Exercice1 Toutes les fabriques de chocolat modernes ont des bouilleurs assistés par ordinateur. La tâche du bouilleur consiste à contenir un mélange de chocolat et de lait, à le porter à ébullition puis à le transmettre à la phase suivante où il est transformé en plaquettes de chocolat. Voici la classe contrôleur du bouilleur industriel de Bonchoco, SA. Si vous étudiez le code; vous constatez qu’ils ont essayé très soigneusement d’éviter les catastrophes, par exemple de vider deux mille litres de mélange qui n’a pas bouilli, de remplir un bouilleur déjà plein ou de faire bouillir un bouilleur vide.
Bonchoco a fait un travail honorable en essayant d’éviter les problèmes ; Pourtant, vous soupçonnez probablement qu’en lâchant deux instances de BouilleurChocolat dans la nature, on s’expose à des catastrophes. Question : Aidez Bonchoco à améliorer sa classe BouilleurChocolat en la transformant en singleton. Exercice2 Une expression arithmétique peut se représenter de manière arborescente. Par exemple, l'expression (2+3)*4 peut se représenter comme le résultat de l'opération * appliquée à 4 et au résultat d'une seconde opération + appliquée à 2 et à 3. 4 et +(2,3) sont dits opérandes de l'expression qui a * comme opérateur. Selon ce principe, une autre notation pour cette expression arithmétique est *(+(2,3) , 4), aussi appelée notation « polonaise » et notamment utilisée sur les calculatrice HP. Cette notation peut se représenter de avec un arbre comme suit. Il est à noter qu’il devient ainsi 1
possible de se passer tout à fait de parenthèses : il n'y a aucune ambiguïté lorsqu'on utilise la notation *+234.
Publicité
Il y a deux types d'expressions : les expressions binaires comme +(2,3) et les expressions unaires qui utilisent des opérations ne prenant qu'un seul argument, comme par exemple l'opérateur de changement de signe dans l'expression. Ces deux types d'expression sont caractérisées par un opérateur et disposent d'une opération calculerValeur(). Le terme est un concept plus général qu'une expression : il peut être soit une valeur constante (1,2, 3 ou 4) soit une expression comme +(2,3). Dans tous les cas, un terme doit disposer d'une opération calculerValeur(). Un autre type de terme peut être une variable qui, en plus d'une valeur comme pour les constantes, dispose d'un nom.
Question : Utilisez le pattern composite pour produire un diagramme de classes adéquat pour la représentation des expressions arithmétiques.
Exercice3
Un calculateur permet d’effectuer des calculs. Etant donné que n’importe qui peut demander à un calculateur d’effectuer des calculs, la classe Synchronisateur a été construite pour réguler les calculs.
Les personnes qui souhaitent demander la réalisation d’un calcul doivent passer par le synchronisateur (via l’opération calculer()). Celui-ci distribue les calculs aux différents calculateurs avec lesquels il est lié (c’est lui qui appelle l’opération calculer () sur les calculateurs). Un calculateur connaît le synchronisateur auquel il est relié grâce à la propriété sync de type Synchronisateur. Sa valeur doit être déterminée lors de la création des objets de type Calculateur.
Nous souhaitons maintenant définir une classe représentant une barre de progression. Cette barre affiche l’état d’avancement du calcul (en pourcentage).
Publicité
Une barre de progression reçoit des messages d’un calculateur qui l’informe que l’état d’avancement du calcul a changé. Définissez cette classe.
Tout comme le synchronisateur, une barre de progression doit se déclarer auprès d’un calculateur. De plus, le calculateur doit offrir une opération permettant de connaître le pourcentage d’avancement du calcul.
Question : Appliquez le patron de conception Observer pour améliorer la conception de ces classes. 2