Many programmers, especially when starting out, find it hard to really understand Object-Oriented Programming (OOP). OOP principles (encapsulation,...