A few days ago, I ran across an interesting and commonsensical article on OOP by James Hague over at programming in the twenty-first century. In it he says that while OOP is sometimes useful, it's not a fundamental particle of computing. Too often, he says, OOP is blindly applied to inappropriate problems. Problems that aren't complicated enough to warrant its use and the difficulties that it brings.
It is, as I say, an interesting post and I was going to blog about it in a little more detail but Rob Pike beat me to it with his own post on OOP that makes the same point—and even mentions Hague's post—in a more provocative way. Pike points to an example of OOP run amok that can be characterized only as terrifying. Pike says of it
Local discussion focused on figuring out whether this was a joke or
not. For a while, we felt it had to be even though we knew it wasn't.
I can't begin to describe the horror of it so you'll have to go over to Pike's post and follow the link that he gives.
The problem itself is to determine the operating system you're running on and output a value judgment about it. As Pike says, this is a trivial problem that can be solved easily with a simple table look up in any language. Here it is in Elisp, for example:
(defvar systems '((usg-unix-v "UNIX" "good") (gnu/linux "UNIX" "good") (windows-nt "Windows" "bad") (darwin "Mac OS" "far superior"))) (let ((box (assoc system-type systems))) (if box (message "This is a %s box and therefore %s." (cadr box) (caddr box)) (message "This is not a box.")))
Simple, extensible, and not a class to be seen.