Examen correction 1ere session 2015 2016 - design patterns -

Examen 1ère Session 2015-2016 : NSY 102 – AISL

Correction du QCM

QCM – Mode d’emploi

Ce sujet est un QCM dont les questions sont de trois natures :

  • Les questions à 2 propositions : une seule réponse est correcte (+1 point pour la bonne réponse, –1 pour la mauvaise).
  • Les questions à 3 propositions dont une seule est correcte (+1 point pour la bonne réponse, –½ pour chaque mauvaise réponse).
  • Les questions à 3 propositions dont une seule est fausse (+½ pour chaque bonne réponse, –1 pour la mauvaise réponse).

Cochez les cases appropriées. Si toutes les propositions sont cochées, cela équivaut à ne rien cocher (note de 0). Ratuez correctement les réponses erronées pour éviter toute ambiguïté.

N’oubliez pas d’inscrire votre nom et prénom en en-tête du QCM. Vous avez droit à 4 points négatifs sans pénalité.

Réponses aux questions

Q1. Une application dite « distribuée » est une application logicielle dans laquelle les données informatiques sont réparties sur le réseau et accessibles par tout logiciel qui utiliserait un ORB.

Q2. Une application dite « distribuée » est une application logicielle dans laquelle les données informatiques sont réparties sur le réseau et accessibles par tout logiciel qui utiliserait un ORB.

Q3. Ce schéma représente une architecture 3-Tiers.

Q4. L’IDL (Interface Definition Language) est un langage informatique utilisé par les ORB pour générer le code permettant de développer les servants (ou objets distants).

Q5. Un ORB (Object Request Broker) est composé d’au moins :

  • un annuaire pour enregistrer les objets distribués,
  • un compilateur IDL pour la génération des amorces et des squelettes,
  • une API de classes prédéfinies pour programmer son application distribuée.

Q6. Dans un ORB, le rôle d’un annuaire est de servir d’intermédiaire dans l’envoi et la réception des messages échangés entre les objets distribués.

Q7. Un Objet Distribué (ou Objet Distant) est un objet dont les méthodes sont accessibles depuis une autre machine.

Q8. Soit un objet quelconque Obj qui est une instance de la classe A implémentant l’interface AInt. En Java RMI, pour transformer cet objet en un objet distribué, il suffit de :

  • faire que la classe A implémente aussi l’interface Remote.

Q9. La classe IhmXXXRmiImp est un adaptateur de AppXXX.

Q10. Dans un système Java RMI utilisant des classes UnicastRemoteObject, on peut créer un nouvel Objet Distribué (OD) dans la JVM2 qui s’exécute sur le port 9101.

Q11. L’appel d’une méthode distante en RMI entre un client et un objet distribué se fait de la manière suivante :

  • le client récupère l’amorce (ou stub) de l’objet distribué,
  • le client utilise les méthodes de l’amorce.

Q12. Un Design Pattern (DP) ou Patron est une norme de description des interfaces entre les composants d’une architecture logicielle orientée objet.

Q13. Le code suivant d’implémentation d’un singleton est correct :


public class SingletonXXX {
    static private SingletonXXX sg = new SingletonXXX();

    private SingletonXXX() {}

    static public SingletonXXX getSingletonXXX() {
        return sg;
    }
}

Q14. Le Singleton est le Design Pattern qui décrit comment il est possible de créer un objet unique parmi l’ensemble des objets répartis sur un réseau.

Q15. Ce DP est celui du Factory. ProduitConcret est une classe abstraite dont héritent les classes ProduitA et ProduitB. Le rôle de la méthode getProduit du Factory est de créer des produits en faisant l’instanciation des classes ProduitA ou ProduitB.

Q16. Ce DP est celui d’un Factory.

Q17. Ce DP est celui du Builder. Le rôle de la classe BuilderCible est de construire totalement ou partiellement une instance de Cible.

Q18. Le rôle du DP « Délégation » est de déléguer à une autre classe la réalisation de traitements qu’une classe aurait dû implémenter.

Q19. Le DP « Délégation » est utilisé dans le DP « injection de dépendance ».

Q20. Le « Décorateur » est un Design Pattern qui permet d’étendre les méthodes d’une classe sans utiliser l’héritage.

Q21. Si la classe A est un décorateur de la classe B, alors les classes A et B héritent toutes deux d’une même classe abstraite.

Q22. L’ « inversion de contrôle » est un principe de conception qui permet de déléguer à un framework les appels aux fonctions de son application logicielle.

Q23. L’injection de dépendance utilise le principe de l’inversion de contrôle (IoC) appliqué au contrôle de la dépendance entre deux classes.

Q24. Ce schéma représente une injection de dépendance par l’utilisation d’un setteur.

Q25. Soit le Design Pattern Observateur suivant :


ObserverXXX
├── Observer
└── update()

ObservableXXX
├── Observable
└── notify()

La classe ObserverXXX implémente la méthode update de l’interface Observer, appelée par Observable.

Q26. Le DP Observateur est constitué d’une classe (Observable) et d’une interface (Observer).

Q27. Une fonction de la classe Observable est d’ajouter un nouvel Observer dans sa collection d’Observer.

Q28. Ce schéma de Design Pattern est le DP Observer/Observable de type « push asynchrone ».

Q29. Un proxy est une classe se substituant à une autre classe. Par convention et simplicité, le proxy implémente la même interface que la classe à laquelle il se substitue.

Q30. Ce diagramme de classe est la conception d’un Objet Distribué dans lequel B est un Proxy de C.

Q31. Ce schéma est celui du DP Dynamic Proxy. Le rôle de la classe MyServiceHandler est de créer une instance d’une classe qui implémente l’interface AppInt, dont le rôle est de servir de proxy à l’appel des méthodes de App.

Q32. La définition de l’envoi d’un message synchrone entre un producteur et plusieurs consommateurs est que, avant d’envoyer un nouveau message, le producteur attend que le message envoyé ait été consommé par tous les consommateurs.

Q33. Dans la communication synchrone via un « canal d’événement » entre un producteur et un consommateur, le producteur utilise un proxy de consommateur afin de lui pousser un événement.

Questions libres – Correction

Question 1 : Le diagramme UML du DP de l’injection de dépendance par setteur est le suivant :

  • F (exemple : Framework) injecte une dépendance B dans A via un setteur de A.
  • Ce setteur accepte en paramètre toute classe implémentant l’interface InterfaceB.
  • L’utilisateur délègue à F le soin de réaliser cette injection.
  • L’injection de dépendance utilise le principe de l’inversion de contrôle (IoC).
  • La classe F utilise souvent un fichier de configuration pour déterminer quelle injection doit être réalisée.

Question 2 : Ce diagramme UML est celui d’un stub RMI utilisant le DP Dynamic Proxy. Le fonctionnement est :

  • L’implémentation de la méthode invoke de l’interface InvocationHandler dans RemoteObjectInvocationHandler consiste à écrire et lire sur le socket (avec sérialisation des paramètres).
  • Le lookup construit un Dynamic Proxy.
  • Le mandataire réalise les accès et reste transparent pour l’utilisateur.
  • Le Stub du protocole RMI est un Dynamic Proxy.

Question 3 : Trois exemples d’utilisation du DP Proxy :

  • Proxy de notification : Le proxy implémente les méthodes de setteur en réalisant successivement :
    • la notification à travers un observable de l’appel au setteur (nom de l’attribut + valeur de l’attribut),
    • l’appel au setteur de la classe applicative dont il est le proxy.
  • Proxy de vérification de connexion : Le proxy implémente les méthodes du contrôleur en réalisant :
    • la vérification que l’utilisateur est bien connecté (attribut du contrôleur),
    • l’appel au traitement du contrôleur si correct, sinon erreur.
  • Proxy pour communication distante : Le proxy est créé par le lookup et implémente chaque méthode de l’interface distante en réalisant :
    • connexion au serveur de socket de UnicastRemoteObject,
    • écriture d’une requête sur le socket (encodage du nom de la méthode et des paramètres),
    • attente de réponse du serveur de socket,
    • lecture sur le socket de la valeur de retour et décodage,
    • retour de la valeur de retour.

FAQ

Qu’est-ce qu’un ORB et quel est son rôle dans une application distribuée ?

Un ORB (Object Request Broker) est un framework qui facilite la communication entre objets répartis sur un réseau. Il permet d’enregistrer, de localiser et d’interagir avec des objets distants en utilisant des interfaces définies en IDL.

Comment fonctionne le Design Pattern Dynamic Proxy en Java RMI ?

Le Dynamic Proxy en Java RMI permet de créer dynamiquement des objets qui agissent comme des mandataires (stubs) pour les objets distants. La classe MyServiceHandler implémente l’interface InvocationHandler et gère les appels aux méthodes distantes en sérialisant les paramètres et en retournant les résultats.

Quelle est la différence entre une injection de dépendance par setteur et par constructeur ?

L’injection par setteur utilise une méthode pour définir la dépendance après la création de l’objet, tandis que l’injection par constructeur définit la dépendance lors de la création de l’objet. Les deux méthodes respectent le principe de l’inversion de contrôle (IoC).

Cela peut vous intéresser :

Partagez vos remarques, questions , propositions d'amélioration ou d'autres cours à ajouter dans notre site

Enregistrer un commentaire (0)
Plus récente Plus ancienne