AUTHOR = "Fabio Rojas and Karl Lieberherr",
TITLE = "Applying Traversals Over Derived Edges",
INSTITUTION = "Northeastern University",
YEAR = 2003,
MONTH = "December",
NUMBER = "NU-CCIS-03-12"

Feedback is appreciated.

Paper (in several formats).

Notes by Karl

The paper currently uses an approach that is too dynamic and error-prone. A more static approach using traversal strategies both in the static call graph (to use arguments and return values of methods) and in the class graph (to use "distant" parts) works probably much better. This approach requires a unified treatment of traversals.

We need an example for Figure 1. The paper waits too long to motivate ContextVisitors. Add a method:

Room.Price promotionPrice(Promotion promotion){
Now the traversal: from Hotel via Promotion via Room to Price, if used with a ContextVisitor, will collect for each room that has a promotion the regular and the promotion price. Doing this without a ContextVisitor requires tedious programming. Can the ContextVisitor also be used together with other visitors? The traversal in 1.5 should be: from Hotel via Query to Room.

There have been several attempts to extend structure-shy programming (a consequence of finding good solutions to follow the Law of Demeter). There was Greg Sullivan's work on derived edges

  AUTHOR = "Greg Sullivan and Karl Lieberherr",
  TITLE = "An Object-oriented Design Methodology",
  INSTITUTION = "Northeastern University",
  YEAR = 1995,
  MONTH = "January",
  NUMBER = "NU-CCS-95-1",
  NOTE = "Was completed in December 1992"
followed by the work with Dean Allemang
AUTHOR       = "Dean Allemang and Karl J. Lieberherr",
TITLE        = "{Softening Dependencies between Interfaces}",
INSTITUTION  = "College of Computer Science, Northeastern University",
YEAR         = 1998,
MONTH        = "August",
NUMBER       = "{NU-CCS-98-07}",
ADDRESS      = "Boston, MA"

and the work of Pengcheng Wu and other students in COM 3360.
The current paper uses the flexibility of DJ to explore alternative techniques of finding the arguments to the derived edges in a structure-shy way.