Via a post at Pensieri di un lunatico minore I found this rather in rather intriguing old email from Alan Kay, the inventor of SmallTalk and of the concept of Object Oriented Programming. The email is in response to someone who asked Mr. Kay what his definition of Object Oriented Programming is. The response is quite enlightening, because it lacks many of the features most “experts” today claim are required for a language to be Object Oriented, and also because Kay’s description sounds quite a bit *unlike* many mainstream Object Oriented Languages (such as Java, and C#).
My favorite quote:
(I'm not against types, but I don't know of any type systems that aren't a complete pain, so I still like dynamic typing.) OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things. It can be done in Smalltalk and in LISP. There are possibly other systems in which this is possible, but I'm not aware of them.