Model Refinement   «Prev  Next»
Lesson 1

How to Refine the Software Model


Rethinking Systems Development
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:
  1. People using the new technologies are still approaching analysis and design from a procedural and/or data-centric perspective.
  2. The systems development process is not closely linked to a business reengineering process.
  3. Reuse is not a priority.
This module focuses on the attitudes and practices that will help you avoid common pitfalls in software design.


Domain Driven Design

Concepts

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:
  1. abstraction,
  2. encapsulation,
  3. modularity,
  4. hierarchy,
  5. typing,
  6. concurrency, and
  7. 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.

Module Objectives

In this module you will learn to:
  1. Apply encapsulation throughout your models and your process
  2. Apply cohesion and coupling throughout your models and your process
  3. Focus on responsibility to improve cohesion and coupling
  4. Understand the purpose and process of refactoring
  5. Apply some guidelines for assigning attributes and operations