Seance 9: LOG121: Patron Visiteur et Arbres Syntaxiques

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to Lesson

Podcast

Play an AI-generated podcast conversation about this lesson

Questions and Answers

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.

False (B)

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.

<p>Visitor</p> Signup and view all the answers

Associez les termes du patron Visiteur à leur équivalent dans l'exemple du compilateur présenté:

<p>Element = Node ConcreteElement = VariableRefNode, AssignmentNode Visitor = NodeVisitor ConcreteVisitor = TypeCheckVisitor, GenerateCodeVisitor</p> Signup and view all the answers

Quel est l'avantage principal de séparer les opérations des nœuds dans le patron Visiteur?

<p>Cela permet d'ajouter de nouvelles opérations sans modifier les classes des nœuds. (B)</p> Signup and view all the answers

L'utilisation du patron Visiteur améliore l'encapsulation des objets (ConcreteElement).

<p>False (B)</p> Signup and view all the answers

Comment appelle-t-on le mécanisme par lequel le patron Visiteur opère, impliquant deux appels polymorphiques?

<p>Double dispatch</p> Signup and view all the answers

Dans l'exemple du compilateur, les étapes réalisées par celui-ci incluent l'analyse lexical, l'analyse ___________ et l'analyse sémantique.

<p>syntaxique</p> Signup and view all the answers

Que représente un compilateur selon le problème de conception présenté dans le contenu?

<p>Un arbre syntaxique abstrait. (B)</p> Signup and view all the answers

Selon le texte, l'interface commune Visitor des objets visiteurs définit une méthode pour visiter chaque type de nœud.

<p>True (A)</p> Signup and view all the answers

Quel patron de conception peut être utilisé conjointement avec le patron Visiteur pour appliquer des opérations sur une structure d'objets définie?

<p>Composite</p> Signup and view all the answers

Le patron Visiteur est particulièrement utile lorsque l'ensemble des opérations __________ n'est pas stable et risque d'évoluer avec le temps.

<p>opération</p> Signup and view all the answers

Quelle est la principale différence entre le patron Composite et le patron Visiteur?

<p>Le patron Composite est structurel, tandis que le patron Visiteur est comportemental. (A)</p> Signup and view all the answers

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.

<p>True (A)</p> Signup and view all the answers

Quelle est la conséquence d'utilisation du patron Visiteur?

<p>Cela permet d'ajouter des méthodes sans changer une structure d'objets. (B)</p> Signup and view all the answers

Que doit-on faire afin d'implémenter une opération avec le patron Visiteur?

<p>définir une classe qui implémente le type interface et qui regroupe les différentes implémentations de cette opération pour chaque type concret d'élément</p> Signup and view all the answers

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.

<p>concrète</p> Signup and view all the answers

Si un nœud accepte un objet visiteur, le visiteur exécute l'opération pour un autre nœud.

<p>False (B)</p> Signup and view all the answers

Quels sont les problèmes survenus avec une prèmiere conception qui implémente les opérations dans les classes de la hiérarchie?

<p>L'ajout d'une opération nécessite la modification et recompilation de toutes les classes de la hiérarchie. (C)</p> Signup and view all the answers

Quelles sont les deux classes nommées dans le patron visiteur?

<p>ConcreteElement et Visitor</p> Signup and view all the answers

_______ les opérations des nœuds sur lesquels elles s'appliquent.

<p>Séparer</p> Signup and view all the answers

Les classes définissant la structure changent souvent.

<p>False (B)</p> Signup and view all the answers

Quel est l'équivalent dans l'exemple compilateur de la classe abstraite Visiteur de la structure du patron GoF?

<p>NodeVisitor (A)</p> Signup and view all the answers

Associez les termes suivants:

<p>Texte du programme = Analyseur lexical Analyseur lexical = Analyseur syntaxique Analyseur syntaxique = Analyseur sémantique</p> Signup and view all the answers

Flashcards

Arbre Syntaxique Abstrait

Un compilateur représente un programme par un arbre syntaxique abstrait.

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

Ajouter une opération nécessite de modifier et recompiler toutes les classes de la hiérarchie.

Solution avec le pattern Visiteur

Ce patron sépare les opérations des nœuds et encapsule chaque opération dans un objet visiteur.

Signup and view all the flashcards

Visiteur et Parcours

Ce visiteur est passé aux nœuds lorsqu'ils sont parcourus.

Signup and view all the flashcards

Transmission de requête

Lorsqu'un nœud accepte un objet visiteur, il lui transmet la requête qui inclut le nœud comme paramètre.

Signup and view all the flashcards

Interface Visitor

L'interface commune Visitor définit une méthode pour visiter chaque type de nœud.

Signup and view all the flashcards

Définition de l'interface Visitor

Définir une interface (Visitor) qui déclare une méthode pour visiter chaque classe concrète (ConcreteElement) de la structure d'objet.

Signup and view all the flashcards

Méthode Accept

Chaque classe concrète (ConcreteElement) définit une méthode (accept) qui reçoit un visiteur en paramètre et invoque la bonne méthode de ce visiteur.

Signup and view all the flashcards

Comment implémenter une opération ?

Pour implémenter une opération, définir une classe qui implémente le type interface (Visitor) et qui regroupe les différentes implémentations de cette opération pour chaque type concret d'élément (ConcreteElement).

Signup and view all the flashcards

Contexte du pattern Visiteur

Une structure d'objets contient plusieurs types d'objets. On veut exécuter des opérations sur ces objets et l'exécution de ces opérations varie selon le type de l'objet.

Signup and view all the flashcards

Visiteur regroupe

Une opération regroupe des opérations et tout ce qui leur est nécessaire (ex: structure de données).

Signup and view all the flashcards

Avantage du pattern Visiteur

Le pattern Visiteur permet d'ajouter des méthodes sans changer une structure d'objets.

Signup and view all the flashcards

Structure d'objets stable

Les classes définissant la structure changent rarement.

Signup and view all the flashcards

Patron combiné

Le patron Visiteur peut être jumelé avec le patron Composite.

Signup and view all the flashcards

Le 'Double dispatch'

On utilise deux appels polymorphiques.

Signup and view all the flashcards

Visiteur

Visiteur : comportemental.

Signup and view all the flashcards

Composite

Composite : structurel.

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ération typeCheck.
  • 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) et visitAssignmentNode(AssignmentNode).

Code

  • L'implémentation comprend une interface NodeVisitor avec des méthodes visitVariableRefNode et visitAssignmentNode.
  • Une classe TypeCheckVisitor implémente NodeVisitor et effectue la vérification de type.
  • Les classes VariableRefNode et AssignmentNode implémentent une méthode accept qui accepte un NodeVisitor.

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éthode accept 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'interface Visitor.

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 et AssignmentNode, Visitor à NodeVisitor, et ConcreteVisitor à TypeCheckVisitor et GenerateCodeVisitor.

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 appelle v.visitVariableRefNode, où v est un TypeCheckVisitor, 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.

Quiz Team

Related Documents

More Like This

Visitor Segments and Traveler Classifications Quiz
10 questions
Visitor Management Strategies
19 questions
Visitor Visa vs. Visitor Record Quiz
5 questions
Use Quizgecko on...
Browser
Browser