CJP = OBJ OBJ EJP EJP. EJP = OBJ List(OBJ) List(CJP). CJPT = CJP EJPT EJPT. EJPT = EJP List(CJPT). EJP = OBJ List(OBJ). CJP = OBJ OBJ. circular structure (if delete contained) Environment (dynamic): this: OBJ environment (e.g. immediate parts of this) args: method execution environment children: method body environment also global environment correspondence: lexical dynamic MethodDefinition EJP MethodCall CJP JPM 1. set of join points: all the CJP reachable from a CJPT-object over all CJPT-objects 2. Mechanism to define sets of JP Our pointcut language: Primitives: if ( e ), where e is an expression involving the fields of JP and JPT and thisJoinPoint and thisEnclosingJoinPoint: selects all JP in a given fixed JPT that satisfy property e. Operators: ||, &&, ! 3. Mechanism to define advice on a set of join points declare warning: pointcut p: String s; print the s for every join point selected by p.