This work aims to introduce the world of aspect-oriented programming to a Java programmer and help her/him to understand main approaches and to sharpen lines between some of the AO languages, mainly AspectJ and CaesarJ. First part is about foundations of AOP, based on the paper by Kiczales et al. and paper of Filman and Friedman. I also discuss AOP-related approaches to software development. Another theme is an impact of AOP on modularity in the context of the work of Kiczales, Mezini and work of Aldrich. In the second part I describe AspectJ. I elaborate on the jumping aspect problem and show alternative solutions to it. Then I describe qualities of Gof design patterns AspectJ implementation, based on work by Hannemann and Kiczales and explain AOP community reaction. I give alternative approaches to observer design pattern implementation in AspectJ and discuss their difficulties. The third part is about AO languages, Java Layers and CaesarJ. I explain, why mixins are not possible with Java Generics and elaborate on work by Mezini and Osterman about CaesarJ and give more detailed analysis of problems addressed by CaesarJ in relation to AspectJ and Java. |