SEPM
SEPM
1. Modularity: This concept involves breaking down a software system into smaller, self-
contained units or modules. Each module should have a specific responsibility and can be
developed, tested, and maintained independently. Modularity enhances reusability and
makes the system easier to understand and manage.
2. Encapsulation: Encapsulation refers to the bundling of data and methods that operate on
that data within a single unit, such as a class in object-oriented programming. It hides the
internal state of an object and only exposes a controlled interface to the outside world. This
helps protect the internal state from unintended interference and misuse.
3. Abstraction: Abstraction involves hiding complex implementation details and exposing only
the necessary and relevant features of a component. It simplifies interactions by allowing
users to focus on higher-level operations rather than the intricacies of the implementation.
4. Separation of Concerns: This principle advocates dividing a software system into distinct
sections, each addressing a separate concern or aspect of the system’s functionality. By
separating concerns, you can reduce complexity, improve maintainability, and make the
system more understandable.
5. Design Patterns: Design patterns are reusable solutions to common problems that arise in
software design. They provide a template for addressing particular design challenges and can
help streamline the development process by applying proven strategies.
6. Scalability: Scalability is the capability of a software system to handle increased load or
demand gracefully. A scalable design ensures that the system can grow and adapt to larger
volumes of data or users without significant modifications to its architecture.
7. Responsibility Assignment: This concept involves deciding which components or modules
should handle specific responsibilities or tasks within the system. Proper assignment of
responsibilities ensures that each part of the system is focused on a particular function,
which improves cohesion and reduces coupling.
8. Dependency Injection: Dependency injection is a design pattern used to manage
dependencies between objects. Instead of creating dependencies directly within a class, they
are provided (injected) from an external source. This approach enhances flexibility,
testability, and reduces tight coupling between components.