|
Aspect oriented programming
Object-oriented programming (OOP) has been presented
as a technology that can fundamentally aid software engineering, because
the underlying object model provides a better fit with real domain
problems. However most software systems consist of several concerns that
crosscut multiple modules. Object-oriented techniques for implementing
such concerns result in systems that are invasive to implement, tough to
understand, and difficult to evolve. This forces the implementation of
those design decisions to be scattered throughout the code, resulting in
"tangled" code that is excessively difficult to develop and
maintain. The new aspect-oriented programming (AOP) methodology
facilitates modularization of crosscutting concerns. Using AOP, you can
create implementations that are easier to design, understand, and
maintain. Further, AOP promises higher productivity, improved quality,
and better ability to implement newer features.
AOP helps overcome the aforementioned problems caused by code tangling
and code scattering. Here are other specific benefits AOP offers:
" Modularized implementation of crosscutting concerns: AOP
addresses each concern separately with minimal coupling, resulting in
modularized implementations even in the presence of crosscutting
concerns. Such an implementation produces a system with less duplicated
code. Since each concern's implementation is separate, it also helps
reduce code clutter. Further, modularized implementation also results in
a system that is easier to understand and maintain.
" Easier-to-evolve systems: Since the aspected
modules can be unaware of crosscutting concerns, it's easy to add newer
functionality by creating new aspects. Further, when you add new modules
to a system, the existing aspects crosscut them, helping create a
coherent evolution.
" Late binding of design decisions: Recall the
architect's under/overdesign dilemma. With AOP, an architect can delay
making design decisions for future requirements, since she can implement
those as separate aspects.
" More code reuse: Because AOP implements each
aspect as a separate module, each individual module is more loosely
coupled. For example, you can use a module interacting with a database
in a separate logger aspect with a different logging requirement.
In general, a loosely coupled implementation
represents the key to higher code reuse. AOP enables more loosely
coupled implementations than OOP
|