In recent years, object-oriented development concepts and methods have received a lot of attention. Some outstanding success stories sing the praises of objects. The claims run as high as 90% savings in time and money, 70% to 90% savings on code.
The counterpoint to these claims is an industry-wide savings of only 10% to 30%. Some development teams even slow down because the learning curve is so steep for the new technologies and techniques.
Research into why these powerful new concepts are not yielding the expected results has identified three very important causes:
- People using the new technologies are still approaching analysis and design from a procedural and/or data-centric perspective.
- The systems development process is not closely linked to a business reengineering process.
- Reuse is not a priority.
This module focuses on the attitudes and practices that will help you avoid common pitfalls in software design.
The first section examines the inherent complexity of software and the ways in which complexity manifests itself. We present the object model as a means of helping us manage this complexity.
In detail, we examine the fundamental elements of the object model:
- abstraction,
- encapsulation,
- modularity,
- hierarchy,
- typing,
- concurrency, and
- persistence.
We address basic questions such as "What is a class?" and "What is an object?"
Because the identification of meaningful classes and objects is the key task in object-oriented development, we spend considerable time studying the nature of classification. In particular, we examine approaches to classification in other disciplines, such as biology, linguistics, and psychology, then apply these lessons to the problem of discovering classes and objects in software systems.