Software developers are confronted with additional requirements aside from the functional requirements of the program. The non-functional requirements such as robustness, reusability, evolvability, performance, and adaptability cannot be deemed to be less important. They determine to a large extent the quality of the software which users can relate to when using the software. Meeting up with these non-functional and functional requirements, as a result, will require a software development language that takes care of this need throughout the lifecycle of the software development.
Object To Aspect-Oriented Development
From the earlier software development process of procedural and structural designs, today’s software development utilizes object-oriented techniques for modeling. This language has features such as encapsulation, inheritance, delegation, and polymorphism.
The evolution of software development has introduced several useful techniques from the object-oriented techniques to implement efficient modularization methods. But it is seen in practice and in findings that the methods are not sufficiently able to fully modularize all the concerns in complex program development. Concerns like logging, synchronization, and recovery are systemic and cross-cutting to not be specific to a module. These complexities reduce quality issues of adaptability, reusability, maintainability and other factors.
Aspect-oriented software development as a new paradigm was born from the object-oriented development to give better modularization implementation in software development. As an advanced method for separation of concerns, it makes available specific concepts for better modularization of crosscutting concerns which are used for the composition of the program components.
Software restructuring is crucial to software development. From the law of software evolution by Lehman: “As a program evolves its complexity increases unless work is done to maintain or reduce it.”
Aspect-oriented software development introduces a restructuring technique to deal with the issues of cross-cutting concerns by the introduction of aspects which is a new abstraction mechanism into current programming languages of the program. For instance, AspectJ is a restructure of java. With this addition, cross-cutting will no longer be scattered all over many modules.
For Aspect-oriented software development to be successful current software programs require being translated to their aspect-oriented equivalent with a continual rephrase. For the size of industrial software, automated support is required for three important activities which are aspect mining, aspect introduction and aspect evolution.
Software development techniques need to continuously evolve to cope with the ever dynamic software requirements.