This application structure adheres to SOLID principles:
- Single Responsibility Principle (SRP): Each class has one responsibility.
- Open/Closed Principle (OCP): Classes are open for extension but closed for modification.
- Liskov Substitution Principle (LSP): Interfaces ensure derived classes can be substituted for their base class.
- Interface Segregation Principle (ISP): Smaller, more specific interfaces are used.
- Dependency Inversion Principle (DIP): High-level modules depend on abstractions, not concrete implementations.
We can now build and run the application to track student attendance in a maintainable and scalable way.