Foundations of Object- Oriented Programming

Object-oriented languages were invented to provide an intuitive view of data and computation, by drawing an analogy between software and the physical world of objects. The detailed explanation of this intuition, however, turned out to be quite complex; there are still no standard definitions of such fundamental notions as objects, classes, and inheritance.