Principles of Software Construction:Objects, Design, and Concurrency
Charlie Garrod & Jonathan Aldrich https://www.cs.cmu.edu/~charlie/courses/15-214/2014-fall/ https://www.cs.cmu.edu/~charlie/courses/15-214/2014-fall/slides
Charlie Garrod & Josh Bloch https://www.cs.cmu.edu/~charlie/courses/17-214/2020-fall/ https://www.cs.cmu.edu/~charlie/courses/17-214/2020-fall/slides