Please see the
Principles of Object Oriented Programming courses:
© 2010 by Stephen Wong and Scott Rixner