Following are some design concepts which designer should keep in mind while preparing a design for the software.
1. Abstraction: –
Concentrate on the essential features and ignore details that are not relevant Means hiding the complexity.
1) Procedural Abstraction: –
It is name sequence of instructions that has a specific and limited function. E.g. procedural abstraction would be the word open for a door for open implies a long sequence of procedural steps like walk to the door, reached out and knocked and pull door and step away from moving door etc.
Means in-sort hiding the Procedure details here hiding the procedure of how to open door.
2) Data Abstraction: –
Data abstraction is a name collection of data that describes a data object in the context of the procedural abstraction open we can define a data abstraction called door like any data object. The data abstraction for door would be a set of attributes that describe the door. E.g. Door type, swing direction, opening mechanism, weight dimension etc. it follows that the procedural abstraction would make use of information contain in the attributes of the data abstraction door.
Means in-sort hiding the data details here hide the door details.
3) Control abstraction:
Implies a program control mechanisms without specify internal details.
Means in-sort hiding the Control Details.
2. Refinements: –
The process of program refinement (modification or enhancement) is a partitioning process i.e. used during requirement analysis. Refinement is actually a process of elaboration (expansion). we begin with a statement of function or description of information i.e. defines a high level of abstraction. The statement describes function or information conceptually but provides no information about the internal working of the functions or the internal structure of the information. Refinement causes the system designer to elaborate on the original statement providing more and more detail as each successive refinement occurs.
Abstraction and refinement are complimentary concepts. Abstractions enable a designer to specify procedure and data refinement helps the designer a detail at a low level.
3. Modularity: –
Software is divided into separately named and addressable components which are called modules. Those are integrated to satisfy problem requirements. Modularity is a single attribute of software that allows a program to be intellectually manageable. Monolithic software i.e. a large program composed of a single module cannot be easily readable the number of control paths, spend of referential number of variables and overall complexity would make understanding close of impossible.
it is easier to solve a complex problem when you break it into manageable PCs(Modules). When we divide software in to modules then development effort also decreased. From above graph we can show that as the number of modules grows the effort or cost associated with integrating the module also grows. These characteristics leads to a total cost or effort which shown in above figure. This is a M of modules that would result in minimum development cost and here another important question arises when modularity is consider how do we define an appropriate module of a given size? The answer lies in the method use to define modules within a system. These are arteries define that enable us to evaluate a design method with respect to define an effective module system.
1) Modular Decomposability: –
Provides a systematic approach for decomposing the problem into sub-problems.
If a design method provides a systematic mechanism for decomposable problem into the sub problem then we can reduce the complexity of overall problem by achieving effective modularity software.
2) Modular Compos ability: –
Modular compos ability means if a design method enable existing or reusable design components to be assembled into a new system then the modular solution does not reinventing wheel.
3) Modular Understandability: –
If a module can be understood as a standalone unit without reference to other module then it will be easier to build and easier to change.
4) Modular Continuity: –
If small changes to the system requirements results in changes to individual modules rather-then system wise changes the impact of change all other side effects should be minimized.
5) Modular Protection: –
If any unexpected condition occurs within a module and its effects are contain within that module only, the impact of other side effects should be minimized.
4. Software Architecture: –
Architecture is the hierarchical structure of program components or modules. There are some set of properties that should be specified as an architectural design.
1) Structural Properties: –
This aspect of the architectural design represents the components of a system.
2) Extra Functional Properties: –
The architectural design description should address how the design architecture achieves requirements for performance, capacity, security and other system characteristics.
The architectural design can be represented using one or more different models.
i. Structural Model: –
Which is represent architectural as an organized collection of program components.
ii. Framework Model: –
Increase the level of design abstraction by attempting to identify repeatable architectural design frame works.
iii. Dynamic Model: –
Address the behavioral aspects of the program architecture it indicates how the structure or system configuration may change as a function of external events.
iv. Process Model: –
Focus on the design of the business or technical process that system must accommodate.
v. Functional Model: –
It can be used to represent the functional hierarchy of the system.
The control hierarchy also called program structure represents the organization of program components and implies a hierarchy of control. It does not represent procedural aspects of software such as sequence of software, occurrence, and order of decision or representation of operations.
In above depth and width provide an indication of the number of levels of control and overall span of control. Fan – out is a major of the number of modules that are directly controlled by another module. Fan – in indicate how many modules directly control a given module? The control relationship among modules is expressed in the following way. A module that controls another module is said to be super ordinate to it and a module controlled by another is said to subordinate to the controller. In above figure module M is super-ordinate to modules a, b and c and module k is subordinate to module c.
Structural Partitioning: –
Program structure can be partitioned both horizontally and vertically.
Horizontal partitioning: defines separate principles branches of modular hierarchy for each major program function. Control modules represents each coordination between remaining modules and execution of the function, partitioning the horizontally provides following benefits.
1) Software i.e. easier to test.
2) Software i.e. easier to maintain.
3) Software i.e. easier to extend.
4) Propagation of fewer side effects or less side effects.
Vertical partitioning: is also called factoring we suggest that control and work should be distinguished top down in program structure. Top level modules should perform control functional do less actual processing word, modules that reside low in structure are called the worker modules performing all input computation and output task.
Data Structure: –
Data structure is a representation of logical relationship among individual elements of data. Data structure is an important program structure to the representation of software architecture.
Data structure shows the organization of methods to access a scalar item is the simplest form of all data structure. A scalar item represents a single element of information which is addressed by an identifier and i.e. accessed by specific a single address in memory. When scalar items are organized as a list of continuous group then a sequential vector is formed, when the sequential vector is extended into two or three or an arbitrary number of dimension then a n dimension space is created and the most common n dimension space is two dimensional matrix and n dimension space is also called an array and a link list is a data structure that organized the memory elements into a noncontiguous scalar item or vector.
5. Software Procedure: –
Focus on the processing details of each module. Procedure must provide a exact specification of processing, including sequence of events, exact decision points, repetitive operation and even data organization and structure, there is relationship between structure and procedure.
6. Information Hiding: –
The principle of information hiding suggest that modules should be specify and design so that procedure and data contain within a module is in accessible to other modules that have no need for such information hiding implies that effective modularity can be achieved by a set of independent module.