Solid Design Principles In Java