The success of object-oriented design lies in the correct and intelligent definition of application objects and their methods as coherent and independent units. The secret of a successful approach to this task is the consideration of the data objects themselves as the focus, rather than the procedures that will operate upon these objects. Since the objects are typically associated with data, an entity-relationship model is often a useful starting point.
Correctly-designed application objects facilitate reusability, since the data object and applicable actions are all defined within the application object. Additional applications that require manipulation of that data object may use the existing application object to achieve the required actions. Certain applications may require additional, unforeseen actions, or that existing actions be carried out in a different manner; in such cases, subclassing the application object allows such modifications to be carried out. One of the aims in the high-level design of an object-oriented application should be to make maximum use of existing application objects where possible, in order to reduce the design, coding and testing effort required. This not only reduces the time and expense involved in application development, but enables application solutions to be delivered in a shorter time frame, allowing the business enterprise to respond more quickly to a dynamic marketplace.
The correct definition of application objects and their boundaries also facilitates change management and maintenance of application code, since changes to a particular data object should affect only the application object(s) dealing with that data object. Thus the effects of change are ideally confined to a single application object. Modifications to a method within an application object should not affect the workings of other objects with which that application object interacts, provided the external interfaces of that object are not altered by the modification. This containment of change within a single application object has the potential, in conjunction with proper configuration management techniques, to greatly ease the effort and cost involved in application maintenance.
The following steps are necessary in the design of an object-oriented application:
These steps are generic in nature, and must be combined with suitable management controls, checkpoints and documentation standards to ensure adequate design quality at each stage in the process.