By the way, do you know the book Domain-Driven Design? I think it is the most sophisticated book on OO and domain modeling. But I also think that it's straining beyond OO toward a design style that is not really about object models, but rather about how to create a good language for talking about one's problem. (The application then reduces to a series of statements in that language.) Lisp programmers would be comfortable with this distinction. In the book it's obscured by the fact that the examples are in Java.