🔹 GRASP Principles
**General Responsibility Assignment Software Patterns (GRASP)** are **design principles** used in **Object-Oriented Programming (OOP)** to improve **software modularity, maintainability, and flexibility**.
📌 Why Use GRASP Principles?
GRASP principles provide guidelines for **assigning responsibilities** in software design.
- ✅ **Enhances Code Maintainability** – Reduces complexity and improves structure.
- ✅ **Promotes Reusability** – Encourages modular and reusable components.
- ✅ **Improves Readability** – Leads to cleaner, more understandable code.
💡 Key GRASP Principles
GRASP includes the following core principles:
- 1. Information Expert – Assign responsibility to the class with the most relevant data.
- 2. Creator – Assign the responsibility of creating an object to a class that closely uses it.
- 3. Controller – Assign responsibility for handling user input to a controller class.
- 4. Low Coupling – Minimize dependencies between classes to improve flexibility.
- 5. High Cohesion – Ensure each class has a single, well-defined purpose.
- 6. Polymorphism – Use interfaces or abstract classes to allow multiple implementations.
- 7. Pure Fabrication – Introduce artificial classes to reduce direct dependencies.
- 8. Indirection – Use intermediate objects to manage communication between classes.
- 9. Protected Variations – Use encapsulation and design patterns to shield against changes.
🖥️ Example: Applying GRASP Principles
Consider an **e-commerce system** where we apply GRASP principles:
class Order {
private List<Product> products;
public void addProduct(Product product) {
products.add(product);
}
}
class OrderController { // Controller Principle
private Order order;
public void processOrder() {
PaymentProcessor.processPayment(order); // Indirection Principle
}
}
class PaymentProcessor { // Pure Fabrication Principle
public static void processPayment(Order order) {
// Handle payment logic
}
}
🎯 Summary
**GRASP Principles** guide developers in **assigning responsibilities** effectively. They help in building **scalable, maintainable, and modular** software systems.