[PIPython] pensare da informatico

Valentino Volonghi dialtone
Ven 19 Nov 2004 15:16:52 CET


On Thu, 30 Sep 2004 14:59:22 +0200, tiziano @ work
<tiziano a axiastudio.it> wrote:
> Affronti un problema non da poco.
> 
> Affrontare lo sviluppo di un'applicazione professionale non può,
> oggigiorno, prescindere da buone fasi di analisi dei requisiti di base e
> modellazione (meglio se UML).

Falso. Specialmente in python. 
L'approcio che si consiglia e` quello dell'XP, non certo della
modellazione attraverso UML che non potra` mai essere esatta ed e` di
poco aiuto rispetto alla scrittura di test prima e assieme al codice.

D'altronde l'UML non ti garantisce codice portabile, non ti garantisce
che le rifattorizzazioni mantengano funzionante il programma,
sostanzialmente non garantisce nulla... E` solo un formalismo,
eccessivo, per far parlare due persone di una stessa cosa.

Solitamente per l'UML si usano strumenti che generano i diagrammi a
partire dal codice gia` scritto.

Esempi di software di grosse dimensioni, in python, scritti senza
guardare UML sono (ad esempio, quelli che uso e conosco io)
Twisted Matrix
Zope3

UML e` un buono strumento di documentazione di cio` che e` stato
fatto, ma solo buono, perche` i test lo sono ancora di piu`.

Chiunque, oggi, affidi un software di grosse dimensioni al solo UML
commette una grave ingenuita`, che verra` ripagata con maggiori sforzi
di manutenzione sul lungo periodo. E questo e` specialmente vero per
grossi progetti.

> Penso in ogni caso che si tratta di approcci che mal si adattano in una
> fase di "apprendimento" come quella da te affrontata.

Dal mio punto di vista, mal si adattano sempre.

> Il mio consiglio rimane sempre lo stesso: continua ancora per un po' con
> i tutorial, fatti saltare fuori più dubbi possibili e cerca di
> risolverli, anche con l'aiuto della lista.
> Poi proverai pian piano a costruire qualcosa di "utile", ma già con una
> conoscenza di base.

Questo e` vero.

> Se ti annoi a scrivere programmini "inutili", potresti provare a
> scomporre l'applicazione che hai in mente (sicuramente hai in mente
> qualcosa del genere) e costruirne un piccolo tassello, a livello più
> basso possibile.

Esatto, programmazione Bottom-Up, magari una volta individuato il
tassello cercare di modellarne il funzionamento e l'API attraverso dei
test funzionali (con pyunit o doctest o un qualche apposito framework
come puo` essere trial in Twisted) scritti prima della scrittura del
tassello (magari anche durante se si trova l'approcio un po` difficile
all'inizio).

> Se ad esempio pensi ad un software per gestire la tua libreria di dvd,
> non partire in tromba col cercare di capire come funziona la connessione
> ad un database, prova a costruire un oggetto 'dvd' con alcune
> proprietà... titolo, autore, anno... è in prestito? a chi? ...poi
> costruisci un metodo PrestaDVD, e un metodo RestituisciDVD....

Concordo, ogni classe con il suo doctest o la sua suite di test fatta
in questo modo:

def somma(self, a, b):
    """
    >>> somma(3,4)
    ... 7
    >>> somma(-4, 5)
    ... 1
    """
    return a+b
 
-- 
Valentino Volonghi aka Dialtone
Now running FreeBSD 5.3-beta6
Blog: http://vvolonghi.blogspot.com
Home Page: http://xoomer.virgilio.it/dialtone/



More information about the Python mailing list