Design Patterns.: Visitor :.
Plan prezentacji 1. Trochę statystyk. 2. Zadanie problemowe. 3. Rozwiązanie… Visitor. 4. Visitor w UML (a,b,c). 5. Implementacja (a,b,c,d). 6. Diagram stanów 7. Gdzie gościł „Visitor”?
1.Trochę statystyk Singleton Proxy Facade Strategy Command Visitor
2. Zadanie problemowe Jedna struktura danych stanowi podstawę dla wielu nie związanych ze sobą zadań. Metody których zadań należy uwzględnić w elementach struktury? Przypisanie wielu różnych funkcjonalnie metod do jednej klasy
3. Rozwiązanie … Visitor Visitor Reprezentuje operację, którą możemy wykonać na elementach pewnej obiektowej struktury. Pozwala na zdefiniowanie nowej operacji bez konieczności ingerencji w klasy, na których operuje.
4.a. Visitor w UML Pierwotna struktura…
4.b. Visitor w UML …oraz metody w nowej szacie…
4.c. Visitor w UML …stanowią gotowy wzorzec
5.a. Implementacja class Node { public: virtual ~Node(); virtual void Accept(class Visitor&)=0; protected: Node(){}; };
5.b. Implementacja… class AssignmentNode : public Node { public: AssignmentNode(); virtual void Accept(class Visitor& v) { v.VisitAssignment(this); }; class VariableNode : public Node { public: VariableNode(); virtual void Accept(class Visitor& v) { v.VisitVariableRef(this); } };
5.c. Implementacja… class Visitor { public: virtual void VisitAssignment(class AssignmentNode*)=0; virtual void VisitVariableRef(class VariableNode*)=0; protected: Visitor(){}; };
5.d. Implementacja! class TypeCheckingVisitor : public Visitor { public: TypeCheckingVisitor(); virtual void VisitAssignment(class AssignmentNode*){/* kod */}; virtual void VisitVariableRef(class VariableNode*){/* kod */}; }; class CodeGeneratingVisitor : public Visitor { public: CodeGeneratingVisitor(); virtual void VisitAssignment(class AssignmentNode*){/* kod */}; virtual void VisitVariableRef(class VariableNode*){/* kod */}; };
6. Diagram stanów
7. Gdzie „gościł” Visitor? Smalltalk-80 (ProgramNodeEnumerator) IRIS Inventor
Na deser…
KONIEC