Master UML diagrams and SOLID principles to design scalable, maintainable software with practical object-oriented skills