This project is a demonstration of SOLID and GRASP principles in object-oriented design.
SOLID and GRASP are fundamental principles in object-oriented design. They help in creating maintainable, scalable, and flexible software systems.
Each class should have only one reason to change. It should have only one responsibility.
Software entities should be open for extension but closed for modification.
Objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program.
A client should never be forced to implement an interface that it doesn't use, or clients shouldn't be forced to depend on methods they do not use.
High-level modules should not depend on low-level modules. Both should depend on abstractions. Abstractions should not depend on details. Details should depend on abstractions.
Assigns responsibility for handling system events (like button clicks, etc.) to a non-UI class.
Assigns the responsibility for creating new instances of objects to a class.
Assigns a responsibility based on which class has the most information required to fulfill it.
A class should have a single, well-focused purpose.
Minimizes the dependencies between classes.