| In the past few years, object-oriented techniques have finally made the passage from the programming-in-the-small island to the mainland of programming-inthe- large. Accompanying this transition has been a change in the role and perception of software methods: in addition to their well-established use in the earliest stages of a project—requirements analysis and system specification— they are increasingly viewed as providing the intellectual support needed across the entire software construction process, through design and implementation to maintenance and reengineering. The object-oriented approach is best suited to achieve this seamlessness of the software development process, without which it would not be possible to meet the quality and productivity challenges that confront the software industry.
This book shows how a consistent set of object-oriented abstractions can be applied throughout the process, based on three major ideas: seamlessness, reversibility, and contracting.
Seamlessness, as in the first word of the title, follows from the observation that the similarities between the tasks to be carried out at the various steps of a project far outweigh their inevitable differences, making it possible to obtain a continuous process that facilitates communication between the various actors involved, ensures a direct mapping between a problem and its software solution, and results in a high level of quality for the final product.
Reversibility means that the seamless procedure must work in both directions: if one modifies a system that has already reached the implementation phase—a frequent case in practice—it must be possible to reflect the modification back to the higher levels of design, specification, and analysis. Without such reversibility the products of these earlier stages would soon become obsolete, raising disturbing questions about their very role in the software process. Since current object-oriented methods are still dominated by hybrid approaches—that is to say, encumber the application of object-oriented principles with techniques drawn from non-object-oriented analysis methods and with constructs drawn from non-object-oriented languages—reversibility has so far been almost absent from the concerns of the object-oriented literature. |