Remember Me
Or use your Academic/Social account:


Or use your Academic/Social account:


You have just completed your registration at OpenAire.

Before you can login to the site, you will need to activate your account. An e-mail will be sent to you with the proper instructions.


Please note that this site is currently undergoing Beta testing.
Any new content you create is not guaranteed to be present to the final version of the site upon release.

Thank you for your patience,
OpenAire Dev Team.

Close This Message


Verify Password:
Verify E-mail:
*All Fields Are Required.
Please Verify You Are Human:
fbtwitterlinkedinvimeoflicker grey 14rssslideshare1
Oliveira, Bruno; Wang, Meng; Gibbons, Jeremy (2008)
Languages: English
Types: Unknown
Subjects: QA75, QA76
The VISITOR design pattern shows how to separate the\ud structure of an object hierarchy from the behaviour of traversals\ud over that hierarchy. The pattern is very flexible; this very\ud flexibility makes it difficult to capture the pattern formally.\ud We show how to capture the essence of the VISITOR\ud pattern as a reusable software library, by using advanced\ud type system features appearing in modern object-oriented\ud languages such as Scala. We preserve type-safety statically:\ud no reflection or similar mechanisms are used. The library is\ud generic, in two senses: by types (the traversal return type and\ud the object hierarchy shape) and by strategy (internal versus\ud external control, imperative versus functional behaviour, orthogonal\ud aspects such as tracing and memoisation). Finally,\ud we propose a generalised datatype-like notation, providing a\ud convenient functional decomposition style in object-oriented\ud languages.
  • The results below are discovered through our pilot algorithms. Let us know how we are doing!

    • J. Aldrich. Open modules: Modular reasoning about advice. In LNCS 3586: European Conference on Object-Oriented Programming, pages 144-168, 2005.
    • Philippe Altherr and Vincent Cremet. Adding type constructor parameterization to Java, July 2007.
    • Richard Bird and Lambert Meertens. Nested datatypes. In J. Jeuring, editor, LNCS 1422: Mathematics of Program Construction, pages 52-67. 1998.
    • Richard S. Bird and Oege De Moor. Algebra of Programming. Prentice Hall, 1997.
    • C. Bo¨ hm and A. Berarducci. Automatic synthesis of typed lambda-programs on term algebras. Theoretical Computer Science, 39(2-3):135-153, August 1985.
    • Peter Buchlovsky and Hayo Thielecke. A type-theoretic reconstruction of the Visitor pattern. Electronic Notes in Theoretical Computer Science, 155, 2005. Mathematical Foundations of Programming Semantics.
    • Craig Chambers and Gary T. Leavens. Typechecking and modules for multimethods. ACM Transactions on Programming Languages and Systems, 17(6):805-843, November 1995.
    • A. Church. An unsolvable problem of elementary number theory. American Journal of Mathematics, 58:345-363, 1936.
    • Curtis Clifton, Gary T. Leavens, Craig Chambers, and Todd Millstein. MultiJava: Modular open classes and symmetric multiple dispatch for Java. In Object-Oriented Programming, Systems, Languages, and Applications, volume 35(10), pages 130-145, 2000.
    • Antonio Cunei and Jan Vitek. Polyd: a flexible dispatching framework. SIGPLAN Not., 40(10):487-503, 2005. ISSN 0362-1340. doi: http://doi.acm.org/10.1145/ 1103845.1094849.
    • Michael Ernst, Craig Kaplan, and Craig Chambers. Predicate dispatching: A unified theory of dispatch. In European Conference on Object-Oriented Programming, pages 186-211, London, UK, 1998. Springer-Verlag.
    • Re´mi Forax, Etienne Duris, and Gilles Roussel. Reflectionbased implementation of Java extensions: the doubledispatch use-case. In ACM Symposium on Applied Computing, pages 1409-1413, 2005.
    • E. Gamma, R. Helm, R. Johnson, and J. Vlissides. Design Patterns: Elements of Reusable Object-Oriented SoftJean-Yves Girard, Paul Taylor, and Yves Lafont. Proofs and types. Cambridge University Press, 1989.
    • Christian Grothoff. Walkabout revisited: The Runabout. In LNCS 2743: European Conference on Object-Oriented Programming, pages 103-125, 2003.
    • S. Gudmundson and G. Kiczales. Addressing practical software development issues in AspectJ with a pointcut interface. In ECOOP 2001 Workshop on Advanced Separation of Concerns, 2001.
    • Robert Harper and Mark Lillibridge. A type-theoretic approach to higher-order modules with sharing. In Principles of Programming Languages, pages 123-137, 1994.
    • Gregor Kiczales and Mira Mezini. Aspect-oriented programming and modular reasoning. In ACM: International Conference on Software engineering, pages 49-58, 2005.
    • Gregor Kiczales, John Lamping, Anurag Menhdhekar, Chris Maeda, Cristina Lopes, Jean-Marc Loingtier, and John Irwin. Aspect-oriented programming. In Mehmet Aks¸it and Satoshi Matsuoka, editors, LNCS 1241: European Conference on Object-Oriented Programming, pages 220-242. 1997.
    • Xavier Leroy. Manifest types, modules, and separate compilation. In Principles of Programming Languages, pages 109-122, 1994.
    • M.D. McIlroy. Mass Produced Software Components. In Naur and Randell [1969], pages 138-155.
    • L. Meertens. Paramorphisms. Formal Aspects of Computing, 4(5):413-425, 1992.
    • Erik Meijer and Graham Hutton. Bananas in space: Extending fold and unfold to exponential types. In Functional Programming Languages and Computer Architecture, pages 324-333. 1995.
    • Bertrand Meyer and Karine Arnout. Componentization: The Visitor example. Computer, 39(7):23-30, 2006.
    • Donald Michie. Memo functions and machine learning. Nature, 218:19-22, 1968.
    • Adriaan Moors, Frank Piessens, and Martin Odersky. Towards equal rights for higher-kinded types. In 6th International Workshop on Multiparadigm Programming with Object-Oriented Languages, 2007.
    • Peter Naur and Brian Randell, editors. Software Engineering: Report of a Conference Sponsored by the NATO Science Committee, Garmisch, Germany, 7-11 Oct. 1968. 1969.
    • Martin Odersky. An Overview of the Scala programming language (second edition). Technical Report IC/2006/001, EPFL Lausanne, Switzerland, 2006.
    • Martin Odersky and Matthias Zenger. Scalable component abstractions. In Object Oriented Programming, Systems, Languages, and Applications, pages 41-57, 2005.
    • Bruno C.d.S. Oliveira. Genericity, Extensibility and TypeSafety in the VISITOR Pattern. PhD thesis, University of Oxford, 2007.
    • Jens Palsberg and C. Barry Jay. The essence of the Visitor pattern. In Computer Software and Applications, pages 9-15, 1998.
    • Michel Parigot. Recursive programming with proofs. Theoretical Computer Science, 94(2):335-356, 1992.
    • Simon Peyton Jones, editor. Haskell 98 Language and Libraries - The Revised Report. Cambridge University Press, Cambridge, England, 2003.
    • Cuno Pfister and Clemens Szyperski. Why objects are not enough. In International Component Users Conference, 1996.
    • Zdzislaw Splawski and Pawel Urzyczyn. Type fixpoints: Iteration vs. recursion. In International Conference on Functional Programming, pages 102-113, 1999.
    • Clemens Szyperski. Independently extensible systems - software engineering potential and challenges. In 19th Australian Computer Science Conference, 1996.
    • Peri Tarr, Harold Ossher, William Harrison, and Stanley Sutton, Jr. N degrees of separation: Multi-dimensional separation of concerns. In International Conference on Software Engineering, pages 107-119, 1999.
    • Joost Visser. Visitor combination and traversal control. In Object Oriented Programming, Systems, Languages, and Applications, pages 270-282. ACM, 2001.
  • No related research data.
  • No similar publications.

Share - Bookmark

Download from

Cite this article