During High Level Design, language specific design patterns and mechanisms are incorporated and the overall design is clarified. There is often significant overlap between the Detailed Design and the Construction & Assembly phases. The activities of this phase are often driven by project specific details. Sequence diagrams, pseudo-code, state diagrams, communication diagrams and other techniques can be useful during this process. The following are commonly addressed as the design matures:
Define Class & Operation Visibility - Choose the most restricted visibility possible that can still accomplish the objective of the operation. Start with private and then, if necessary, move to a less restricted access as the design matures.
Define Class Methods - Specify the implementation of an operation. In many cases where the behavior required by the operation is sufficiently defined by the operation name, description, and parameters, methods are implemented directly in the programming language. Where the implementation of an operation requires the use of a specific algorithm or more information than is presented in the operation's description, a separate method description is required. The method describes how the operation works, not just what it does.
Define Class States - For some operations, the behavior of the operation depends upon the state of the receiver object. Describe the states an object can assume and the events that cause the object to move from one state to another.
Define Class Attributes - Identify the name, type, default value, visibility, etc.
Define Class Dependencies - Identify and document the class dependencies.
Define Class Associations - Associations provide the mechanism for objects to communicate with one another. They provide a conduit along which messages can flow. They also document the dependencies between classes, highlighting that changes in one class could be felt among many other classes.
Define Class Generalizations - Classes might be organized into a generalization hierarchy to reflect common behavior and common structure. A common superclass can be defined, from which, subclasses can inherit both behavior and structure. Generalization is a notational convenience that allows the developer to define common structure and behavior in one place, and to reuse it for repeated behavior and structure.
|