Software Design Unit 3'
Software Design Unit 3'
that focuses on planning and structuring the solution before any coding begins. *It serves as a bridge between
gathering requirements and actual implementation. *The main goal of software design is to define the
architecture of the system, specify its components, their interactions, and decide on data structures, interfaces,
and algorithms that will be used. *This process ensures that the software is maintainable, scalable, and performs
well. *The design process typically starts with requirement analysis, where the functional and non-functional
needs of the software are understood and clarified. * This is followed by system design or high-level design, which
defines the overall architecture by identifying major subsystems and how they communicate, along with decisions
on the technologies and platforms to be used. * Next is the detailed design phase, where individual modules or
classes are designed with specifics about data structures, algorithms, interfaces, and input/output requirements.
*The design is then reviewed with stakeholders to ensure it is correct, complete, and feasible, allowing for
refinement before moving forward. * Proper documentation of all design decisions and diagrams is also an
essential part of the process, as it guides the development team. Throughout the design process, several
principles are followed to create an effective system. * These include modularity, which divides the system into
manageable parts; abstraction, which hides unnecessary complexity; encapsulation, which protects the internal
state of components; separation of concerns, which ensures different functionalities are handled by different
modules; and the DRY (Don’t Repeat Yourself) principle to avoid redundancy. *Additionally, designing with future
changes in mind helps make the software adaptable. Various tools and techniques are used during design, such as
UML diagrams for visualizing the system, flowcharts, prototyping for user interfaces, and common design patterns
like Singleton or Observer to solve recurring problems.
Function-Oriented Design:- Function-oriented design is a traditional approach to software design that focuses on
breaking down a system into a set of functions or procedures. In this design methodology, the primary emphasis is
on the processes that transform data rather than on the data itself. The system is viewed as a collection of
functions that perform specific tasks, and these functions are organized hierarchically in terms of their
relationships and interactions. This approach is closely related to structured programming and is often used in
procedural programming languages like C.In function-oriented design, the development process starts by
identifying the main functions required to fulfill the system’s requirements. These functions are then decomposed
into smaller sub-functions or modules, each responsible for a specific operation. The design ensures that each
function has a well-defined input and output, promoting modularity and clarity. Data flow diagrams (DFDs) are
commonly used to represent the flow of information between these functions, helping designers visualize how
data moves through the system and how functions interact. One of the strengths of function-oriented design is its
simplicity and straightforwardness, making it suitable for problems that can be clearly divided into distinct
processes. However, it can sometimes lead to challenges in maintaining and scaling software, especially when
dealing with complex systems where data and operations are tightly intertwined. This is because the focus is more
on functions rather than on encapsulating data, which can make the system less flexible in adapting to changes.
Despite this, function-oriented design remains an important foundational approach and is still relevant in many
applications, particularly where process-centric solutions are required.
Database-Oriented Design:-Database-oriented design is an approach to software design that centers on
organizing and structuring the system around the data it manages. Unlike function-oriented design, which focuses
on processes, database-oriented design places primary emphasis on the data entities, their relationships, and how
data is stored, accessed, and manipulated throughout the system. This approach is particularly common in
applications where data management is critical, such as enterprise systems, customer relationship management
(CRM), and inventory control systems. The process begins by identifying the key data entities and their attributes,
followed by defining the relationships between these entities. This often involves creating an entity-relationship
(ER) model or diagram, which visually represents how data elements relate to one another. The database schema,
derived from this model, serves as the backbone of the system’s design. Once the data structure is established,
the design then addresses how different system functions will interact with the database to retrieve, update, and
manipulate the data. Database-oriented design emphasizes data integrity, consistency, and efficiency in accessing
large volumes of data. It often involves normalization, which is the process of organizing data to reduce
redundancy and improve data integrity. This design style also integrates closely with database management
systems (DBMS) and leverages their capabilities such as transaction management, concurrency control, and
recovery mechanisms. While database-oriented design is highly effective for data-centric applications, it can
sometimes make the system less flexible when changes to processes or business logic are frequent, as changes in
data structure might impact many parts of the system. Nonetheless, it remains a vital approach for ensuring
robust, reliable, and scalable data management in software systems where data plays a central role.
Object-Oriented Design:-Object-oriented design (OOD) is a software design approach that models a system based
on real-world entities called objects. Each object represents an instance of a class, encapsulating both data
(attributes) and behavior (methods or functions) related to that data. This approach emphasizes organizing
software around objects rather than functions or data alone, making it easier to model complex systems in a way
that closely mirrors how things work in the real world. The object-oriented design process begins by identifying
the key objects or classes needed to fulfill the system requirements. Designers analyze the problem domain to
find relevant entities and define their attributes and behaviors. Objects interact with one another through well-
defined interfaces, sending messages (calling methods) to request services. The relationships among classes—
such as inheritance (where one class inherits properties and behavior from another), association, aggregation,
and composition—help to organize the system hierarchically and promote reuse of code.OOD follows several
important principles, including encapsulation (keeping data and the methods that operate on it together and
hiding internal details), inheritance (enabling new classes to reuse and extend existing ones), and polymorphism
(allowing objects of different classes to be treated uniformly based on shared interfaces). These principles help
improve modularity, flexibility, and maintainability of the software.Design artifacts in object-oriented design often
include UML diagrams such as class diagrams, sequence diagrams, and state diagrams, which help visualize
classes, their interactions, and behavior over time. Object-oriented design is widely used in modern software
development because it naturally supports modeling complex systems, encourages code reuse through
inheritance and polymorphism, and simplifies maintenance by isolating changes within individual classes.