Source: http://fac-staff.seattleu.edu/zhuy/web/teaching/winter13/cpsc152/Classes.pdf