Separation of concerns in CodeWorker: @ // a list of method declarations (names only) insert this.methods["display"].name = "display"; insert this.methods["delete"].name = "delete"; insert this.methods["visit"].name = "visit"; // a joint point announcing the implementation // of methods jointpoint iterate methods(this.methods) { // generates the skeleton of a method @ void @this.name@() {} @ } @... This is the end of the test @ // Implementation of an aspect to apply on methods: // several advices // first advice: called while entering the joint point advice before : jointpoint == "methods" { @// beginning of methods @ } // advice to apply around each method iteration advice around_iteration : jointpoint == "methods" { @ // BEGIN around iteration @ #jointpoint @ // OUT around iteration @ } // last advice: called while leaving the joint point advice after : jointpoint == "methods" { @// end of methods @ traceObject(this, 10); }