Object-Oriented Programming in Common Lisp by Sonya E. Keene
Many people unfamiliar with Common Lisp believe it’s a purely functional language, but this is untrue. While you can shape your Common Lisp programs in a functional way, Common Lisp also support Object Oriented Programming via CLOS, the Common Lisp Object System. It is truly a multi-paradigm language.
This books teaches all the aspects of CLOS, and although written several years ago, the knowledge still applies today. After learning about Object Oriented programming using languages like C++ and Java, learning about CLOS really opened my eyes to what this style of programming should feel like. All the other languages now seem to constrained compared to the power and flexibility of CLOS.
In CLOS, classes only have member variables, called slots, and support multiple inheritance. They do not define methods. Instead, methods are defined for Generic Functions which specialize on the classes. While most OO languages use single dispatch, meaning methods specialize on only one class, CLOS uses multiple dispatch. It also supports specializing on distinct object instances. In addition to primary methods, CLOS has before, after and around methods. You can even dictate the order in which CLOS calls all of the applicable methods.
I truly enjoyed this book as it expanding my understanding of object oriented techniques. I hope the mainstream language designers can take the time to read this and incorporate more of CLOS into today’s popular, but limited, object oriented systems.