MODULE-III(CSE3005) [Autosaved] (1)
MODULE-III(CSE3005) [Autosaved] (1)
Backend(API,Gatewa
Frontend(Web& Database(
y, Task Mgmt,
Mobile) Tasks,Users)
Authentication)
• The architectural design is the highest abstract version of the system. It identifies
the software as a system with many components interacting with each other. At this
level, the designers get the idea of the proposed solution domain.
High-level Design
• The high-level design breaks the ‘single entity-multiple
component’ concept of architectural design into less-abstracted
view of sub-systems and modules and depicts their interaction
with each other. The high-level design focuses on how the system
along with all of its components can be implemented in forms of
modules. It recognizes the modular structure of each sub-system
and their relation and interaction with each other.
Detailed Design
• Detailed design deals with the implementation part of what is
seen as a system and its sub-systems in the previous two
designs. It is more detailed towards modules and their
implementations. It defines logical structure of each module and
their interfaces to communicate with other modules.
Software Design Concepts
• Let us look at some software design concepts that assist a software engineer in
creating the model of the system or software product to be developed or built. The
following ideas should be grasped before designing a software system.
Abstraction
• One of the fundamental concepts of object-oriented programming (OOP) languages
is abstraction. Its primary purpose is to deal with complexity by concealing internal
details from the user. This allows the user to build more complicated logic on top of
the offered abstraction without having to understand or even consider all the
hidden complexity.
Modularity
Modularity refers to breaking a system or project
into smaller sections to lessen the system's or
project's complexity. Similarly, modularity in
design refers to the division of a system into
smaller elements that can be built independently
and then used in multiple systems to execute
different. As a result, modularity in design has
become a trend that is also essential.
Architecture
• A system's software architecture represents the design decisions linked to the
general structure and behavior of the system. Architecture assists stakeholders in
comprehending and analyzing how the system will attain critical characteristics such
as modifiability, availability, and security. It specifies how components of a software
system are constructed, as well as their relationships and communication. It acts as
a software application blueprint and a development foundation for the developer
team.
Refinement
• Refinement means removing any impurities and improving the quality of something.
The software design refinement idea is a process of building or presenting the
software or system in a detailed manner, which implies elaborating on a system or
software. In addition, refinement is essential for identifying and correcting any
possible errors
Design Patterns
• A Software Design Pattern is a general, reusable solution to a commonly occurring
problem within a given context in software design. They are templates to solve
common software engineering problems, representing some of the finest practices
experienced object-oriented software engineers utilize. A design pattern
systematically describes and explains a general design that handles a recurring
design challenge in object-oriented systems. It discusses the problem, the remedy,
when to use it, and the repercussions. It also provides implementation guidance
and examples.
Information/Data Hiding
• Simply put, information hiding implies
concealing information so that an
unauthorized entity cannot access it. In
software design, information hiding is
accomplished by creating modules in
such a way that information acquired or
contained in one module is concealed
and cannot be accessible by other
modules.
Refactoring
• Refactoring is the process of reorganizing code without affecting its original
functionality. Refactoring aims to improve internal code by making modest changes
that do not affect the code's exterior behavior. Computer programmers and
software developers refactor code to improve the software's design, structure, and
implementation. As a result, Refactoring increases code readability while decreasing
complications. Refactoring can also assist software engineers in locating faults or
vulnerabilities in their code.