All software developers have been faced with situations where one aspect of their design spread itself across the code, rather than being localized in a dedicated object. As a result, they end up with an Object-Oriented version of spaghetti code.
This talk presents a new kind of solution to this problem -- aspect-oriented programming. Like objects, aspects are intended to be used in both design and implementation. During design, the concept of aspect facilitates thinking about cross-cutting concerns as well-defined entities. During implementation, aspect-oriented programming languages -- namely AspectJ -- make it possible to program directly in terms of design aspects.
Several examples of aspects will be presented, including aspects for tracing, contracts, feature addition/deletion, distribution support and error handling.
Participants should be familiar with Java.