Explain the core principles of Object-Oriented Programming (OOP) and how you have used them to build scalable software.