CS 586 -
Aspect-Oriented Software Development

Study Material
Related Links

Dr. Bedir Tekinerdoğan

CS 586 Aspect-Oriented Software Development 

One of the most important principles in software engineering for coping with complexity and achieving quality software is the separation of concerns principle. This principle states that a given design problem involves different kinds of concerns, which should be identified and separated in different modules. The history of software development has experienced an evolution of different programming languages and design methods that have provided useful modularity mechanisms. However, as it is experienced in practice and generally acknowledged by researchers, it appears that these approaches are inherently unable to modularize all concerns of complex software systems. Some concerns like synchronization, recovery and logging tend to be more systemic, crosscut a broader set of modules and as such cannot be easily specified in single modules. This increases complexity and reduces several quality factors of software, such as adaptability, maintainability and reusability.

Aspect-oriented software development (AOSD) is an advanced technology for separation of concerns (SOC), which provides explicit concepts to modularize the crosscutting concerns and compose these with the system components. This course will provide an in-depth analysis of this advanced separation of concerns paradigm and teach the state-of-the-art AOSD techniques.

The important topics in this course are the following:

- separation of concerns;
- object-oriented design patterns software evolution problems;
- examples of crosscutting aspects;
- composition anomalies.
- aspect-oriented programming aspect-oriented design;
- aspect-oriented modeling;
- aspects at the requirements and architecture design level;
- reflection and delegation techniques;


It is -highly- recommended that you have followed a course on object-oriented software development, know the fundamental object-oriented concepts, have sufficient knowledge on UML, and have sufficient programming skills in Java.