PDF One
PDF One
Architectural Design
• A system's architecture can be defined as the system's overall structure and how that
structure offers conceptual integrity to the system.
• The architectural design characterizes the software as a system with numerous
interconnected components.
• The designers acquire an overview of the proposed solution domain at this level.
High-level Design
• The high-level design deconstructs the architectural design's 'single entity-multiple
component' notion into a less abstract perspective of subsystems and modules,
depicting their interaction with one another.
• High-level design is concerned with how the system and its components can be
implemented as modules.
• It recognizes the modular structure of each subsystem, as well as their relationship
and interaction with one another.
Detailed Design
• After the high-level design is completed, the detailed design begins.
• Each module is extensively investigated at this level of software design to establish
the data structures and algorithms to be used.
• Finally, a module specification document is used to document the stage's outcome. It
defines the logical structure of each module as well as its interfaces with other
modules.
Problem Partitioning
For small problem, we can handle the entire problem at once but for the significant
problem, divide the problems and conquer the problem it means to divide the problem
Abstraction
An abstraction is a tool that enables a designer to consider a component at an abstract
level without bothering about the internal details of the implementation. Abstraction can
be used for existing element as well as the component being designed.
Here, there are two common abstraction mechanisms
1. Functional Abstraction
2. Data Abstraction
Functional Abstraction
a. A module is specified by the method it performs.
b. The details of the algorithm to accomplish the functions are not visible to the user of
the function.
Functional abstraction forms the basis for Function oriented design approaches.
Data Abstraction
Details of the data elements are not visible to the users of data. Data Abstraction
forms the basis for Object Oriented design approaches.
Modularity
• Modularity specifies to the division of software into separate modules which are
differently named and addressed and are integrated later on in to obtain the
completely functional software.
• Single large programs are difficult to understand and read due to a large number of
reference variables, control paths, global variables, etc.
Modular Design
Modular design reduces the design complexity and results in easier and faster
implementation by allowing parallel development of various parts of a system.
1. Functional Independence:
2. Information hiding:
The fundamental of Information hiding suggests that modules can be characterized by
the design decisions that protect from the others
In other words, modules should be specified that data include within a module is
inaccessible to other modules that do not need for such information.
Strategy of Design
A good system design strategy is to organize the program modules in such a method that
are easy to develop and latter too, change.
Structured design methods help developers to deal with the size and complexity of
programs.
Analysts generate instructions for the developers about how code should be composed and
how pieces of code should fit together to form a program.
1. Top-down Approach:
This approach starts with the identification of the main components and then
decomposing them into their more detailed sub-components.
2. Bottom-up Approach:
A bottom-up approach begins with the lower details and moves towards up the
hierarchy, as shown in fig. This approach is suitable in case of an existing system.
Type of Coupling:
2. General Coupling:
Modules share global data or resources that are frequently used and modified by
different modules. Although not as direct as pooling content, it still represents tight
pooling through shared resources.
3. External Coupling:
Modules communicate by exchanging data through external interfaces such as
function parameters or method calls. Although external binding is more flexible than
content and general binding, it can still cause dependencies.
4. Control Coupling:
One module affects the behaviour of another by passing control information, often
through parameters. This type of connection may be less direct than a content
connection but still requires close communication.
5. Stamp Coupling:
Modules share a composite data structure such as a record or object without sharing.
Changes to the structure can affect several modules, but the connection is weaker
than in the content connection.
6. Data Coupling:
Modules share data through parameters, but there is no direct relationship between
functions. Compared to the previous types, it is a relatively loose form of connection.
7. No Coupling:
Modules work independently without direct communication. This is the ideal type of
connection to aim for as it encourages modular design and minimizes the impact of
changes.
What is Cohesion?
Cohesion in software engineering refers to the degree of interrelatedness and focus among
the elements within a module, class, or component.
It measures how well the internal components of a module work together to achieve a
single, well-defined purpose.
High cohesion indicates that the elements within a module are closely related and
contribute collectively to a specific functionality.
Low cohesion suggests that the elements are less focused and may serve multiple
unrelated purposes.