Implementations of GoF Design Patterns in Java and AspectJ Code base documentation Overview ======== The goal was to provide parallel implementations in AspectJ and Java that allow for direct comparisons. It has to be noted that most patterns offer variability in the implementation approach. We choose the one that appeared to be the most general. Sometimes, the AspectJ version implements a slightly different (or additional) case(s). This is because AJ sometimes allows for additional functionality. Please refer to the web page for a detailed description of this work. Example Setup ============= All pattern examples have a class called Main. This class is the test driver for the particular example. The Main classes are extensively documented using ajdoc, usually describing the experimental setup and the assignment of roles to participants. In most cases, the differences between Java and AspectJ implementations are also mentioned. Documentation (ajdoc) ===================== It is possible to generate the ajdoc documentation for either all examples, for only the reusable library aspects, or for one particular example. Since ajdoc shows type names without their package (on the left hand side), multiple types with the same name (but residing in different packages) may be confused when the documentation for all examples is generated. ==> Generate documentation for all examples: use the makeDocs batch file. (1) Change to the directory that you extracted the ZIP archive into. (2) Type "makeDocs" to generate the HTML documentation in the docs subdirectory. ==> Generate Documentation for the reusable library aspects: use the provided makeLibraryDocs batch file. (1) Change to the directory that you extracted the downloaded ZIP file into. (2) Type "makeLibraryDocs" to generate the HTML documentation in the docs subdirectory. ==> Generate docs for a single example: use the makeSingleExampleDocs batch file. (1) Change to the directory that you extracted the downloaded ZIP file into. (2) Call the batch file. It needs two arguments: the name of the pattern and the language used. For example, type: "makeSingleExampleDocs singleton aspectj" or type: "makeSingleExampleDocs templateMethod java". Within the ajdoc documentation, we tried to separate type names from our examples and role names (as presented in GoF). We show roles names in italics and actual type names in code font. This is reflected in the ajdoc documentation. Questions, feedback, suggestions, etc. The AODP web page is http://www.cs.ubc.ca/labs/spl/aodp.html Please send all questions, feedback, and suggestions to Jan Hannemann (jan@cs.ubc.ca). We are very much interested in improving our code. Please do not hesitate to drop us a line. Appendix ======== This appendix outlines how to compile and run the examples provided, and how to generate ajdoc documentation. A number of DOS batch files exist that automate these tasks somewhat. Note that they only work in Windows environments. The following is a list of tasks and a description of what commands accomplish them. For compiling, running and generating documentation, two options are given. The first one is using a provided script; the second is the standard command-line option (longer, but will work on all operation systems). Set up your system: 1. Install Java and AspectJ 2. Make sure your CLASSPATH contains the current directory (denoted by a period), e.g. CLASSPATH=.;C:\... 3. Extract the ZIP file into a directory of your choice 4. Change to that directory Compile Java and AspectJ versions of a design pattern example (e.g. observer). Choose one: � makePattern observer � ajc @examples\observer\files.lst Run a compiled example (e.g. observer). Choose one: � testPattern observer (this runs both Java and AspectJ versions) � java examples.observer.java.Main (for the Java version), java examples.observer.java.Main (for the AspectJ version) Generate documentation for all examples. Choose one: � makeDocs � ajdoc -private -d docs @allPatterns.lst Generate documentation for the library aspects. Choose one: � makeLibraryDocs � ajdoc -private -d docs ca.ubc.cs.spl.pattern.library Generate documentation for a single example (e.g. the AspectJ version of the observer example). Choose one: � makeSingleExampleDocs observer aspectj � ajdoc -private -d docs examples.observer.aspectj View the generated documentation: � Open the file index.html (located in the docs/ subdirectory) with your favorite browser.