On Nov 7, 2006, at 2:02 PM, Shane Hathaway wrote:
In particular, you'll find that static typing has a strong effect on
what people think OOP is. The canonical Design Patterns book expects
static typing and thus applies well to C++ and Java, but many of the
patterns become irrelevant when applied to dynamic languages. For
example, in Python, the factory pattern is in a sense built in to the
language, since constructors and functions are called the same way.
This is not entirely true. The Gang of Four had one or two hardcore
Smalltalk programmers among them, and IIRC the Design Patterns book
has a few Smalltalk examples and mentions the situations where the
patterns are only required because of the static type system.
The examples within are in Java, but the concepts translate fairly
easily to C++. Although some people are saying these days that
design
patterns are signs of language deficiency,
That sentiment comes directly from the LISP community. It's both
right
and wrong. It's right because a more flexible language like LISP lets
you eliminate the repetition that sometimes arises from design
patterns.
However, another intent of design patterns is to express the
design of
the software to other developers, and that alone has obvious value.
Sorry to be pedantic, but we don't call it LISP anymore. It was only
ever called LISP because there weren't any lowercase characters on
terminals when it was invented! It's not a proper acronym, so LISP
is just wrong. Lisp is the way to name it.
Anyway, it's not just from the Lisp community. It's more generally
from the functional programming community, and even from people in
the Perl community like Mark Jason Dominus (who probably truly
belongs in all three communities). But there's still value in
learning about patterns, because they are often elegant solutions to
difficult design problems.
Also, here's another candidate book on OO design: Grady Booch,
"Object-Oriented Design"
It was recommended by Bjarne Stroustrup in an interview I was just
reading, and Booch has been a huge name in the OO design community
for a long time, so I imagine it's good.
--Levi
/*
PLUG: http://plug.org, #utah on irc.freenode.net
Unsubscribe: http://plug.org/mailman/options/plug
Don't fear the penguin.
*/