Software development is changing. The opportunities of the Internet, computerized businesses, and computer-savvy consumers, the exponential decline in the cost of computation and communication, and the increasingly dynamic environment for longer-living systems are pressing software developers to come up with better ways to create and evolve systems. There is fomenting in software development process, system structure, programming, quality assurance, and maintenance. Software is about building computational models of some part of the elements or information flow of the world. For all but the most trivial software systems, conquering the engineering of the system requires (perhaps recursively) dividing the system into chunks that can be (by and large) separately created and managed. The last decade of the twentieth century saw the rise (and perhaps dominance) of the object-oriented perspective on system modularization. Object-orientation focuses on selecting objects as the primary unit of modularity and associating with these objects all the system's behavior. Objects are typically elements of the domain or of the computational process. Object-orientation is reaching its limits. Many things one cares about in creating a software system (concerns) are not neatly localized to the behavior of specific "things." Building diverse systems requires simultaneously manipulating many concerns. Examples of concerns range from non-functional notions such as security, reliability, and manageability to precise implementation techniques such as concurrency control, caching, and error recovery. Since conventional programming technologies are centered on producing a direct sequence of instructions, they require the programmer to remain cognizant of all such concerns throughout the programming process. The programmer must explicitly intermix the commands to achieve these concerns with the code for the primary application functionality. This produces tangled code and erroneous and difficult-to-maintain systems. New technologies are emerging to allow richer specifications of programs and better modularization of these specifications. Along with these new technologies, we are also seeing novel software engineering methodologies for using them. One of the most exciting of these new technologies is aspect-oriented software development (AOSD). AOSD programming technologies (aspect-oriented programming, or AOP) provide linguistic mechanisms for separate expression of concerns, along with implementation technologies for weaving these separate concerns into working systems. Aspect-oriented software engineering (AOSE) technologies are emerging for managing the process of developing systems within this new paradigm.
|Number of pages||755|
|Publication status||Published - 2004|