You are on page 1of 25

Design Concepts

By Deepika Chaudhary

Definition
M.A.Jackson once said The beginning of wisdom for a software engineer is to recognize the difference between getting a program to work and getting it right. The following are the basic concepts for the software design:

Concepts
The following are the basic concepts for the software design Abstraction Refinement Modularity Software Architecture Control Hierarchy

Structural Partitioning Data Structure Software Procedure Information Hiding

Abstraction
Abstraction is a process whereby we identify the important aspects of phenomenon and ignore its details. According to wasserman the Psychological notion of abstraction permits one to concentrate on a problem at some level of generalization without regard to irrelevant low level details

Types of Abstraction
Procedural abstraction : A sequence of instructions that has a specific and limited function . For eg to open a doorimplies a long sequence of procedural steps ( walk to the door , reach out and grasp knob turn knob and pull door etc)

Control Abstaction
Control abstraction implies a program control mechanism without specifying internal details . An example of a control abstraction is the synchronization semaphore used to coordinate activities in an operating system.

Data Abstraction
A data abstraction is a named collection of data that describes a data object . For eg the data abstraction for door would encompass a set of attributes that describe a door (door type , swing direction , opening mechanisms , weight etc)

Refinement
Refinement is a top down technique for decomposition of a system from high level specifications to more elementary steps. Refinement is also known as stepwise program Development

IT begins with the specifications derived during requirements analysis and external design. The problem is first decomposed into a major processing steps and then the process is repeated for each part of the system until it is decomposed into sufficient details

Abstraction and Refinement


Abstraction enables a programmer to specify procedure and data and get suppress low level details Refinement helps the designer to reveal low level details as design progresses.

Modularity
There are many definition of the module . They range from a module in FORTRAN to a module in ADA to a module as a work assignment for an individual programmer Modular system consists of well defined manageable units with well defined interfaces among the units. Modularity enhances design clarity which in turn ease implementation debugging testing documenting and maintenance of the software product.

Software Architecture
It is the overall structure of the software and the ways in which that structure provides conceptual integrity for a system In the simplest form architecture is the hierarchical structure of a program components , the manner in which these components interact and the structure of data that are used by the components.

Shaw and Garlan (1996) suggest that software architecture is the step in producing a software design . They distinguish among three design. Architecture Design Code Design Executable Design

Architecture Design
It associates the system capabilities identified in the requirements specification with the system components that will implement them. Components are usually modules and the architecture defines the interconnection between them.

Code Design
Involves algorithms and data structures and the components are programming language primitives such as number characters pointers and control threads.

Executable Design
It addresses the code design at lower levels of details. It discusses memory allocation , data formats , bit patterns and so on.

Control Hierarchy
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 processes , occurrence of order of decisions etc.

In this design we check that how many components are under the control of a particular component. To check which one is the better design we minimize the number of components with high fan out ( the number of components controlled by a component) Fan in is the number of components controlling a particular component.( )

Structural partitioning
If the architectural style of a system is hierarchical the program structure can be partitioned both horizontal and vertically . The simplest approach to horizontal partitioning defines three partitions-input , data transformation and output.

Horizontal Partitioning
Defines separate branches of the modular hierarchy of each major program function. The simplest approach to horizontal partitioning defines three partitions Input Data transformation Output

Vertical Partitioning
Vertical partitioning often called factoring suggests that control and work should be distributed top down in the program structure. Top level modules should perform control functions and do little actual processing work.

Data Structure
Data structure is a representation of the logical representation among individual elements of data. Data structure dictates the organization method of access degree of associativity and processing alternatives for information.

Software procedure
Software procedure focuses on the processing details of each module individually. Procedure must provide a precise specification of processing, including sequence of events, exact decision points and even data organization.

Information Hiding
Information hiding is a fundamental design concept for software . Each module in the system hides the internal details of its processing activities and modules communicate only through well defined interfaces.

You might also like