PART 1 ====================================== An important concept in Computer Science is the concept of simulation between languages: can one language L1 express another language L2 within a certain resource bound? For example, in hw 1 you probably encountered the simulation that any program that violates the LoD can be simulated by an equivalent program that is not much larger and that satisfies the LoD. Here we investigate the simulation: Can any Java program be simulated by an equivalent AspectJ program where all Java method bodies are empty. The idea of the simulation is: The normal method: in class Supplier: void add(Object target,String i) { targets.put(target,i); is equivalent to the aspectual method: in aspect Supplier: void add(Object target,String i) {} void around (Object target,String i): call(void Supplier.add(Object,String)) && args(target, i){ targets.put(target,i); } In this example we notice that the size increases by less than a factor of 4: the signature is duplicated less than 4 times. The body of the method is copied to the body of the advice. Translate the program from hw 2 PART 2 into an AspectJ program where there are no non-empty method calls. All code has to be in advice. Write a paragraph or two that argues for or against the following statement: Any Java or AspectJ program can be simulated by an equivalent AspectJ program where all Java method bodies are empty. The AspectJ program is less than 4 times the length of the Java program.