Theoretical Aspects of Object-Oriented Programming by Carl A. Gunter