Podcast
Questions and Answers
Quel est le principal problème que le patron Visiteur cherche à résoudre?
Quel est le principal problème que le patron Visiteur cherche à résoudre?
- La duplication de code dans les classes de la hiérarchie.
- La complexité de la gestion de la mémoire dans les applications orientées objet.
- La difficulté d'ajouter de nouvelles opérations à une structure d'objets sans modifier les classes existantes. (correct)
- Le manque de flexibilité dans la définition des relations entre les objets.
Le patron Visiteur facilite l'ajout de nouveaux types d'éléments concrets (ConcreteElement) à la structure d'objets.
Le patron Visiteur facilite l'ajout de nouveaux types d'éléments concrets (ConcreteElement) à la structure d'objets.
False (B)
Quelle méthode les nœuds définissent-ils pour accepter le visiteur en paramètre?
Quelle méthode les nœuds définissent-ils pour accepter le visiteur en paramètre?
accept()
Dans le contexte du patron Visiteur, l'interface commune ___________ des objets visiteurs définit une méthode pour visiter chaque type de nœud.
Dans le contexte du patron Visiteur, l'interface commune ___________ des objets visiteurs définit une méthode pour visiter chaque type de nœud.
Associez les termes du patron Visiteur à leur équivalent dans l'exemple du compilateur présenté:
Associez les termes du patron Visiteur à leur équivalent dans l'exemple du compilateur présenté:
Quel est l'avantage principal de séparer les opérations des nœuds dans le patron Visiteur?
Quel est l'avantage principal de séparer les opérations des nœuds dans le patron Visiteur?
L'utilisation du patron Visiteur améliore l'encapsulation des objets (ConcreteElement).
L'utilisation du patron Visiteur améliore l'encapsulation des objets (ConcreteElement).
Comment appelle-t-on le mécanisme par lequel le patron Visiteur opère, impliquant deux appels polymorphiques?
Comment appelle-t-on le mécanisme par lequel le patron Visiteur opère, impliquant deux appels polymorphiques?
Dans l'exemple du compilateur, les étapes réalisées par celui-ci incluent l'analyse lexical, l'analyse ___________ et l'analyse sémantique.
Dans l'exemple du compilateur, les étapes réalisées par celui-ci incluent l'analyse lexical, l'analyse ___________ et l'analyse sémantique.
Que représente un compilateur selon le problème de conception présenté dans le contenu?
Que représente un compilateur selon le problème de conception présenté dans le contenu?
Selon le texte, l'interface commune Visitor des objets visiteurs définit une méthode pour visiter chaque type de nœud.
Selon le texte, l'interface commune Visitor des objets visiteurs définit une méthode pour visiter chaque type de nœud.
Quel patron de conception peut être utilisé conjointement avec le patron Visiteur pour appliquer des opérations sur une structure d'objets définie?
Quel patron de conception peut être utilisé conjointement avec le patron Visiteur pour appliquer des opérations sur une structure d'objets définie?
Le patron Visiteur est particulièrement utile lorsque l'ensemble des opérations __________ n'est pas stable et risque d'évoluer avec le temps.
Le patron Visiteur est particulièrement utile lorsque l'ensemble des opérations __________ n'est pas stable et risque d'évoluer avec le temps.
Quelle est la principale différence entre le patron Composite et le patron Visiteur?
Quelle est la principale différence entre le patron Composite et le patron Visiteur?
L'ajout d'une opération avec une première conception nécessite la modification et la recompilation de toutes les classes de la hiérarchie.
L'ajout d'une opération avec une première conception nécessite la modification et la recompilation de toutes les classes de la hiérarchie.
Quelle est la conséquence d'utilisation du patron Visiteur?
Quelle est la conséquence d'utilisation du patron Visiteur?
Que doit-on faire afin d'implémenter une opération avec le patron Visiteur?
Que doit-on faire afin d'implémenter une opération avec le patron Visiteur?
Chaque classe ___________ (ConcreteElement) définit une méthode (accept) qui reçoit un visiteur en paramètre et invoque la bonne méthode de ce visiteur.
Chaque classe ___________ (ConcreteElement) définit une méthode (accept) qui reçoit un visiteur en paramètre et invoque la bonne méthode de ce visiteur.
Si un nœud accepte un objet visiteur, le visiteur exécute l'opération pour un autre nœud.
Si un nœud accepte un objet visiteur, le visiteur exécute l'opération pour un autre nœud.
Quels sont les problèmes survenus avec une prèmiere conception qui implémente les opérations dans les classes de la hiérarchie?
Quels sont les problèmes survenus avec une prèmiere conception qui implémente les opérations dans les classes de la hiérarchie?
Quelles sont les deux classes nommées dans le patron visiteur?
Quelles sont les deux classes nommées dans le patron visiteur?
_______ les opérations des nœuds sur lesquels elles s'appliquent.
_______ les opérations des nœuds sur lesquels elles s'appliquent.
Les classes définissant la structure changent souvent.
Les classes définissant la structure changent souvent.
Quel est l'équivalent dans l'exemple compilateur de la classe abstraite Visiteur de la structure du patron GoF?
Quel est l'équivalent dans l'exemple compilateur de la classe abstraite Visiteur de la structure du patron GoF?
Associez les termes suivants:
Associez les termes suivants:
Flashcards
Arbre Syntaxique Abstrait
Arbre Syntaxique Abstrait
Un compilateur représente un programme par un arbre syntaxique abstrait.
Opérations du compilateur
Opérations du compilateur
Le compilateur a besoin d'exécuter différentes opérations sur les nœuds de l'arbre, comme vérifier le type, l'initialisation et générer le code machine.
Problème d'ajout d'opération
Problème d'ajout d'opération
Ajouter une opération nécessite de modifier et recompiler toutes les classes de la hiérarchie.
Solution avec le pattern Visiteur
Solution avec le pattern Visiteur
Signup and view all the flashcards
Visiteur et Parcours
Visiteur et Parcours
Signup and view all the flashcards
Transmission de requête
Transmission de requête
Signup and view all the flashcards
Interface Visitor
Interface Visitor
Signup and view all the flashcards
Définition de l'interface Visitor
Définition de l'interface Visitor
Signup and view all the flashcards
Méthode Accept
Méthode Accept
Signup and view all the flashcards
Comment implémenter une opération ?
Comment implémenter une opération ?
Signup and view all the flashcards
Contexte du pattern Visiteur
Contexte du pattern Visiteur
Signup and view all the flashcards
Visiteur regroupe
Visiteur regroupe
Signup and view all the flashcards
Avantage du pattern Visiteur
Avantage du pattern Visiteur
Signup and view all the flashcards
Structure d'objets stable
Structure d'objets stable
Signup and view all the flashcards
Patron combiné
Patron combiné
Signup and view all the flashcards
Le 'Double dispatch'
Le 'Double dispatch'
Signup and view all the flashcards
Visiteur
Visiteur
Signup and view all the flashcards
Composite
Composite
Signup and view all the flashcards
Study Notes
- LOG121 concerne la conception orientée objet et le patron Visiteur.
Exemple de problème de conception
- Un compilateur représente un programme par un arbre syntaxique abstrait.
- Les étapes réalisées par un compilateur sont l'analyse lexicale, l'analyse syntaxique, l'analyse sémantique et la génération de code machine.
- Les arbres syntaxiques sont utilisés pour représenter des expressions et des instructions conditionnelles.
- Un compilateur doit exécuter différentes opérations sur les nœuds de l'arbre, comme vérifier le type, l'initialisation et générer du code machine.
- L'arbre peut contenir différents types de nœuds : instructions d'affectation, variables, expressions arithmétiques.
- Les opérations du compilateur doivent traiter les nœuds différemment selon leur type.
Première Conception
- Une première conception implique des classes abstraites et concrètes avec des méthodes pour la vérification de type et la génération de code.
Ajouter un Comportement
- Ajouter un comportement impliquerait d'ajouter une méthode
prettyPrint()
aux classes existantes. - L'ajout d'une opération nécessite la modification et la recompilation de toutes les classes de la hiérarchie.
- L'implémentation de toutes ces opérations à travers les classes de la hiérarchie donne une conception difficile à maintenir et à modifier.
Solution au Problème
- Il est nécessaire de séparer les opérations des nœuds sur lesquels elles s'appliquent.
- Chaque opération doit être encapsulée dans un objet appelé visiteur.
- Par exemple, une classe
TypeCheckVisitor
pour l'opérationtypeCheck
. - Le visiteur est passé aux nœuds lors du parcours.
- Les nœuds définissent une méthode
accept()
qui accepte le visiteur en paramètre. - Quand un nœud accepte un visiteur, il lui transmet la requête qui inclut le nœud comme paramètre.
- Le visiteur exécute l'opération pour ce nœud.
- Un visiteur regroupe les différentes implémentations d'une opération pour les différents nœuds de la hiérarchie.
- L'interface commune
Visitor
des objets visiteurs définit une méthode pour visiter chaque type de nœud. - Exemples de méthodes :
visitVariableRefNode(VariableRefNode)
etvisitAssignmentNode(AssignmentNode)
.
Code
- L'implémentation comprend une interface
NodeVisitor
avec des méthodesvisitVariableRefNode
etvisitAssignmentNode
. - Une classe
TypeCheckVisitor
implémenteNodeVisitor
et effectue la vérification de type. - Les classes
VariableRefNode
etAssignmentNode
implémentent une méthodeaccept
qui accepte unNodeVisitor
.
Le Patron Visiteur
- Contexte : Une structure d'objets contient plusieurs types d'objets sur lesquels des opérations doivent être exécutées, et l'exécution de ces opérations varie selon le type de l'objet. Les classes définissant la structure changent rarement, mais l'ensemble des opérations n'est pas stable.
- Solution : Définir une interface
Visitor
qui déclare une méthode pour visiter chaque classe concrète (ConcreteElement
) de la structure d'objet. Chaque classe concrète définit une méthodeaccept
qui reçoit un visiteur en paramètre et invoque la bonne méthode de ce visiteur. Pour implémenter une opération, définir une classe qui implémente l'interfaceVisitor
.
Structure
- La structure du patron Visiteur implique un client, des visiteurs concrets, une interface Visiteur, et des éléments concrets.
Noms
- Dans l'exemple du compilateur,
Element
correspond àNode
,ConcreteElement
àVariableRefNode
etAssignmentNode
,Visitor
àNodeVisitor
, etConcreteVisitor
àTypeCheckVisitor
etGenerateCodeVisitor
.
Double Dispatch
- Le « double dispatch » utilise deux appels polymorphiques.
- Le premier polymorphisme correspond à
node.accept
qui correspond àVariableRefNode.accept
, sélectionnant le type de nœud. - Le deuxième polymorphisme est l'appel de la méthode
accept
qui appellev.visitVariableRefNode
, oùv
est unTypeCheckVisitor
, sélectionnant le type de visiteur.
Conséquences
- Le patron Visiteur permet d'ajouter des méthodes sans changer une structure d'objets et facilite l'ajout d'une opération.
- Un visiteur regroupe des opérations et les structures de données nécessaires.
- Il est difficile d'ajouter de nouveaux types d'éléments concrets, et l'encapsulation des objets concrets est violée.
Patron Jumelé
- Le patron Visiteur peut être utilisé pour appliquer des opérations sur une structure d'objets définie par le patron Composite.
Composite vs Visiteur
- Composite : structurel, permet de créer des structures hiérarchiques arborescentes récursives, permet d'appliquer la même opération à un ensemble d'éléments partageant la même interface.
- Visiteur : comportemental, permet à un objet visiteur de « visiter » chaque élément d'une hiérarchie structurelle pour appliquer une opération sur cet élément (les opérations diffèrent d'un élément à l'autre).
Studying That Suits You
Use AI to generate personalized quizzes and flashcards to suit your learning preferences.