Tutorial 4 Visitor Pattern - cs.uwaterloo.ca · Goals •Scenario of using Visitor Pattern •Why...
Transcript of Tutorial 4 Visitor Pattern - cs.uwaterloo.ca · Goals •Scenario of using Visitor Pattern •Why...
![Page 1: Tutorial 4 Visitor Pattern - cs.uwaterloo.ca · Goals •Scenario of using Visitor Pattern •Why naïve approaches are bad? •Elements of Visitor Pattern •Real world application](https://reader033.fdocuments.us/reader033/viewer/2022042318/5f072c0e7e708231d41baa44/html5/thumbnails/1.jpg)
Tutorial 4Visitor Pattern
Wei Wang
Nov. 25th, 2011
![Page 2: Tutorial 4 Visitor Pattern - cs.uwaterloo.ca · Goals •Scenario of using Visitor Pattern •Why naïve approaches are bad? •Elements of Visitor Pattern •Real world application](https://reader033.fdocuments.us/reader033/viewer/2022042318/5f072c0e7e708231d41baa44/html5/thumbnails/2.jpg)
Goals
• Scenario of using Visitor Pattern
• Why naïve approaches are bad?
• Elements of Visitor Pattern
• Real world application
2
![Page 3: Tutorial 4 Visitor Pattern - cs.uwaterloo.ca · Goals •Scenario of using Visitor Pattern •Why naïve approaches are bad? •Elements of Visitor Pattern •Real world application](https://reader033.fdocuments.us/reader033/viewer/2022042318/5f072c0e7e708231d41baa44/html5/thumbnails/3.jpg)
Scenario
• Sarah wants to find out who does NOT like Lady Gaga at UWaterloo
3
![Page 4: Tutorial 4 Visitor Pattern - cs.uwaterloo.ca · Goals •Scenario of using Visitor Pattern •Why naïve approaches are bad? •Elements of Visitor Pattern •Real world application](https://reader033.fdocuments.us/reader033/viewer/2022042318/5f072c0e7e708231d41baa44/html5/thumbnails/4.jpg)
• For male (female) students: borrowed >1 (>3)book about Lady Gaga from school library
• For profs: purchased >2 Lady Gaga CDs
• For staff: …
4
![Page 5: Tutorial 4 Visitor Pattern - cs.uwaterloo.ca · Goals •Scenario of using Visitor Pattern •Why naïve approaches are bad? •Elements of Visitor Pattern •Real world application](https://reader033.fdocuments.us/reader033/viewer/2022042318/5f072c0e7e708231d41baa44/html5/thumbnails/5.jpg)
Essence of this scenario
• Iterate a variety of elements under one hierarchy– Student/prof/staff
• Customization of the iterating algorithm– Gender/library history/purchasing history
• Data aggregation– Total number of student fans? What about CS only?
• New algorithm may arise from future demands– Looking for fans of Justin Bieber?
• “open for extension, but closed for modification”
5
![Page 6: Tutorial 4 Visitor Pattern - cs.uwaterloo.ca · Goals •Scenario of using Visitor Pattern •Why naïve approaches are bad? •Elements of Visitor Pattern •Real world application](https://reader033.fdocuments.us/reader033/viewer/2022042318/5f072c0e7e708231d41baa44/html5/thumbnails/6.jpg)
Naïve solution 1
Instanceof and type cast!
isLadyGagaFans(IPerson){
If(Iperson instanceofStudent){}
Else if (Iperson instanceofProfessor){
}}
6
![Page 7: Tutorial 4 Visitor Pattern - cs.uwaterloo.ca · Goals •Scenario of using Visitor Pattern •Why naïve approaches are bad? •Elements of Visitor Pattern •Real world application](https://reader033.fdocuments.us/reader033/viewer/2022042318/5f072c0e7e708231d41baa44/html5/thumbnails/7.jpg)
Naïve Solution 2
class Student{
isLadyGagaFans(){
checklibraryRecords();
checkGender();
}}
Algorithm defined in the student class
7
![Page 8: Tutorial 4 Visitor Pattern - cs.uwaterloo.ca · Goals •Scenario of using Visitor Pattern •Why naïve approaches are bad? •Elements of Visitor Pattern •Real world application](https://reader033.fdocuments.us/reader033/viewer/2022042318/5f072c0e7e708231d41baa44/html5/thumbnails/8.jpg)
Problems of Naïve solutions
• “instanceof” solution:
– Instanceof or type casting is error prone
– hard coding!
•“pseudo OO” solution
•Touch original code
•Similar solution is scattered in many place!
8
![Page 9: Tutorial 4 Visitor Pattern - cs.uwaterloo.ca · Goals •Scenario of using Visitor Pattern •Why naïve approaches are bad? •Elements of Visitor Pattern •Real world application](https://reader033.fdocuments.us/reader033/viewer/2022042318/5f072c0e7e708231d41baa44/html5/thumbnails/9.jpg)
Visitor Pattern SolutionClass Student implement IPerson{
void accept(Visitor visitor){visitor.visit(this);
}}
Class LadyGagaFansChecker(){visit(Student student){
student.checkLibraryHistory();student.checkGender();print;
}}
…… studentA.accept(new LadyGagaFansChecker());
9
![Page 10: Tutorial 4 Visitor Pattern - cs.uwaterloo.ca · Goals •Scenario of using Visitor Pattern •Why naïve approaches are bad? •Elements of Visitor Pattern •Real world application](https://reader033.fdocuments.us/reader033/viewer/2022042318/5f072c0e7e708231d41baa44/html5/thumbnails/10.jpg)
Class Diagram of Visitor Pattern
CheckJustinBieberFan
10
![Page 11: Tutorial 4 Visitor Pattern - cs.uwaterloo.ca · Goals •Scenario of using Visitor Pattern •Why naïve approaches are bad? •Elements of Visitor Pattern •Real world application](https://reader033.fdocuments.us/reader033/viewer/2022042318/5f072c0e7e708231d41baa44/html5/thumbnails/11.jpg)
Real world application
• Processing syntactical elements in compilerdesign
– Eclipse JDT
11
![Page 12: Tutorial 4 Visitor Pattern - cs.uwaterloo.ca · Goals •Scenario of using Visitor Pattern •Why naïve approaches are bad? •Elements of Visitor Pattern •Real world application](https://reader033.fdocuments.us/reader033/viewer/2022042318/5f072c0e7e708231d41baa44/html5/thumbnails/12.jpg)
Visitor Pattern in JDT
compiler ASTVisitor
DeclarationVisitorMethodVisitor
If the syntax of Java changes (such as generics and enhanced
loop), we just need add new visitors and invoke them later
12
![Page 13: Tutorial 4 Visitor Pattern - cs.uwaterloo.ca · Goals •Scenario of using Visitor Pattern •Why naïve approaches are bad? •Elements of Visitor Pattern •Real world application](https://reader033.fdocuments.us/reader033/viewer/2022042318/5f072c0e7e708231d41baa44/html5/thumbnails/13.jpg)
What if we cannot change JDT?
• The Compiler of AspectJ reuses most of JDT elements (because we still need to compile the JAVA part of the code)
JointPointVisitor
JointPoint
AspectJcompiler
13
![Page 14: Tutorial 4 Visitor Pattern - cs.uwaterloo.ca · Goals •Scenario of using Visitor Pattern •Why naïve approaches are bad? •Elements of Visitor Pattern •Real world application](https://reader033.fdocuments.us/reader033/viewer/2022042318/5f072c0e7e708231d41baa44/html5/thumbnails/14.jpg)
14
![Page 15: Tutorial 4 Visitor Pattern - cs.uwaterloo.ca · Goals •Scenario of using Visitor Pattern •Why naïve approaches are bad? •Elements of Visitor Pattern •Real world application](https://reader033.fdocuments.us/reader033/viewer/2022042318/5f072c0e7e708231d41baa44/html5/thumbnails/15.jpg)
Take-away of this tutorial
• Separate the algorithm with from an object structure on which it operates
• Easy to add new operations on existing objects
– “open for extension, but closed for modification”
• Almost all compilers implementation use visitor pattern to iterate syntactical elements
– JDT & AspectJ compiler
15