Most modern programming languages support the "object-oriented programming" (OOP) paradigm. But what exactly is OOP and why is it so useful?