A more methodical approach to software design is a purpose by structured methods, which are sets of notations and guidelines for software design. Budgen,(1993) describes some of the most commonly used methods such as structured design, structured systems analysis, Jackson system development, and various approaches to object-oriented design.
The use of structured methods involves producing large amounts of diagrammatic design documentation. CASE tools have been developed to support particular methods. Structured methods have been plied successfully in many large projects. They can deliver significant cost reductions because they use standard notations and ensure that standard design documentation is produced.
A mathematical method (such as the method for long division) is a strategy that will always lead to the same result irrespective of who applies the method. The term 'structured methods' suggests, therefore, that designers should normally generate similar designs from the same specification. A structured method set of activities notations, report format rules, and design guidelines. structure methods often support some of the following models of a system:
- A data-flow model where the system is modeled using the data transformations, which take place as it, is processed.
- An entity-relation model, which is used to describe the logical data, and structures being used.
- A structural model where the system components and their interactions are documented.
- If the method is object-oriented it will include an inheritance model of the system, a model of how objects are composed of other objects, and usually, an object-use model Which shows. how objects are used by other objects.
Particular methods supplement these with other system models such as state transition diagrams, entity life histories that show how each entity is transformed as it is processed, and so on. Most methods suggest a centralized repository for system information or a data dictionary should be used. No one method is better or worse than other methods: the success or otherwise of methods often depends on·their suitability for an application domain.
A software design is a model system that- has many participating entities' relationships. This design is used in a number of different ways. It acts as a basis for detailed implementation; it serves as a communication medium between the designers of sub-systems; it provides information to system maintainers about the original intentions of the system designers, and so on.
Designs are documented in a set of design documents that describes the design for programmers and other designers. There are three main types of notation used in design documents:
- Graphical notations: These are used to display the relationships between the components making up the design and to relate the design to real-world system modeling. A graphical view of a design is an abstract view. It is most useful for giving an overall picture of the system.
- Program description languages these languages (PDLs) use control and structuring constructs based on programming language constructs but also allow explanatory text and (sometimes) additional types of statements to be used. These allow the intention of the designer to be expressed rather than the details of how the design is to be implemented.
- Informal text much of the information that is associated with a design cannot be expressed formally. Information about design rationale or non-functional considerations may be expressed using natural language text.
All of these different notations may be used in describing a system design
The most commonly used software design strategy involved decomposing the design into functional components with system state information held in a shared data area. Since the late 1980s that this alternative, object-oriented design has been widely adopted.
Two design strategies are summarized as follows:
- Functional design: The system is designed from a functional viewpoint, starting with a high-level view and progressively refining this into a more detailed design. The System State is centralized and shared between the functions operating in that state. Methods such as Jackson Structured Programming and the Warnier Orr method are techniques of functional decomposition where the structure of the data is used to determine the functional structure used to process that data.
- Object-oriented design: The syste|\m is viewed as a collection of objects rather than as functions. Object-oriented design is based on the idea of information hiding and has been described by Meyer; Booch. and Jacobsen. and many others. JSD is a design method that falls somewhere between function-oriente2 and object-oriented design.
In an object-oriented design, the System State is decentralized and each object manages its own state information. Objects have a set of attributes defining their state and operations, which act on these attributes. Objects are usually members of an object class whose definition defines the attributes and operations of class members. These may be inherited from one or more super-classes so that a class definition need only set out the differences between that class and its super-classes. Objects communicated by exchanging messages; an object calling a procedure associated with another object achieves most object communication.
There is no 'best' design strategy, which is suitable for all projects and all types of applications. Functional and object-oriented approaches are complementary rather than opposing techniques. Software engineers select the most appropriate approach for each stage in the design process. In fact, large software systems are complex entities that different approaches might be used in the design of different parts of the system.
An object-oriented approach to software design seems to be natural at the highest. and lowest levels of system design. Using different approaches to design may require the designer to convert his or her design from one model to another. Many designers are not trained in multiple approaches so prefer to use either object-oriented or functional design.
A good design might be a design that allows efficient code to be produced; it might be a minimal design where the implementation is as compact as possible, or it might be the most maintainable design
A maintainable design can be adapted to modify existing functions and add new functionality. The design must therefore be understandable and changes should be local in effect. The design components should be cohesive which means that all parts of the component should have a close logical relationship. They should be loosely coupled which means that they should not be tightly integrated Coupling is a measure of the independence of components. The looser the coupling, the easier it is to adapt the design as the effects of change are localized.
Quality characteristics are equally applicable to object-oriented and function oriented design. Because of the nature of object-oriented design, which encourages the development of independent components, it is usually easier to achieve maintainable designs as information is concealed within objects.