prototyping good OOdesign in Python?
Eric Brunel
eric.brunel at pragmadev.com
Thu Jun 6 06:32:10 EDT 2002
Geoff Gerrietts wrote:
[snip]
> Since Python doesn't care about most of this stuff, modelling it is
> only useful if you expect to port the code later.
Eeeer, maybe I'll start yet another flame war here, but I strongly disagree
with this statement! Modelling is *always* useful if your application isn't
a "quick and dirty" one, is significantly large and/or if it may have
several versions and/or several persons that will work on it. UML diagrams
are not just another representation of the code: it allows the developers
to take a step back and look at the whole picture instead of just their
little part of the code. If you have several cooperating classes, it also
allows to visually design these cooperations, instead of having to look
everywhere in the code to see where a particular class is used (and also
*if* it's still used at all...). In fact, I find UML design particularly
useful on large/medium Python applications, precisely *because* of Python's
dynamic features and lack of strong typing. If you want your code to be
readable by other people than just yourself, and maybe at a time where
you'll not even be around anymore, a good documentation of the code is
really needed...
Whether UML is well-suited for documenting Python applications is of course
debatable. I personaly find it quite convenient:
- on one hand, it counter-balances the "fuzzy" part of Python (no
declarations, everything is dynamic) by allowing to actually declare
everything. Let's be honest here: in a significantly large application, a
big part of the code make assumptions on the objects it handles, and may
benefit from strong typing. Not having to declare everything's type is
quite handy, but may in the end make the code unreadable if you do not have
something that tells you what is needed on the objects you manipulate...
- on the other hand, UML is quite open and may also allows to document
"fuzzy" features, or things really specific to a language like Python. For
example, UML doesn't know anything about Python dictionaries, since
dictionaries are quite often not natively supported by other languages. But
if you know your target language will be Python, you may just use a
specific "custom" type like "dict<key type, value type>" in your UML spec.
Of course, if the tool you use to design your UML diagrams is too
restrictive, it may report an error on this kind of declaration, but
well..., no big deal... The whole purpose of UML diagrams is documentation,
not making correct diagrams for Rational Rose or whatever other tool...
Of course, many features of UML tools cannot be used at all with Python:
semantics checking may be disturbed by your custom Python types, and I
don't know a single UML tool that can generate Python code (if anybody
knows one, please let me know!). But again: no big deal... When you'll get
back to your code in a few months or years, you'll be really glad to have
your UML spec at hand to understand how your few dozens classes speak to
each other...
--
- Eric Brunel <eric.brunel at pragmadev.com> -
PragmaDev : Real Time Software Development Tools - http://www.pragmadev.com
More information about the Python-list
mailing list