|title:||Manipulating Java states as graphs|
|topics:||Algorithms and Data Structures , Graphs|
Many problem domains let themselves be described in terms of graph-like structures; examples are data structures, traffic flows, computer networks, games. The graph transformation tool GROOVE offers an easy and intuitive way to declare how such graphs evolve, on the basis of graph transformation rules, as well as functionality to automatically simulate such rules and model check the resulting state space. In doing so, GROOVE uses its own underlying graph class; this is the data structure that it actually manipulates.
In this assignment, you are asked to enable the transformation of actual Java objects instead. That is, through Java annotations you should define which classes constitute the nodes of your graph and which associations the edges of your graph, as well as which methods are available for their manipulation. Subsequently, you should adapt the GROOVE implementation so that it accesses the graphs through these annotated methods.
The following steps of the assignment can be foreseen:
- Understanding the concept of graph transformation and getting familiar with the GROOVE tool
- Designing a set of Java annotations that can serve the purpose of identifying the node/edge classes and their manipulation methods, as described above
- Coding the appropriate GROOVE extension
- Validating the solution by applying it to a pre-defined test suite
As inspiration, you can take a look at an annotation library that was created for the same purpose in another context; see http://eprints.eemcs.utwente.nl/21270/
- de Mol, M.J. and Rensink, A. and Hunt, J.J. (2012) Graph Transforming Java Data. In: Proceedings of the 15th International Conference on Fundamental Approaches to Software Engineering (FASE 2012), 26-29 Mar 2012, Talinn, Estonia. pp. 209-223. Lecture Notes in Computer Science 7212. (Digital version available here)