the documentation on this site is exemplary. I would start there.
In terms of 'good design', one of the primary benefits of OOP (there are many), is that code can be written with reuse and modularization in mind. Read up on inheritance and polymorphism to see how these techniques relate to code reuse.
Being able to write classes (and use objects) allow for more 'modularized' code. That is, each logical part of your program/application can be self-contained, allowing other parts of your program/application to make use of them. This way, adding new things and maintaining old features (in theory) becomes easier to manage.
Google around for 'design patterns' to learn about different techniques that can make code more modular and 'correct'.