[Python] Classi (Was: Walks like Python. Runs like C.)

enrico franchi enrico.franchi a gmail.com
Mer 14 Gen 2015 17:14:45 CET


2015-01-14 15:39 GMT+00:00 Carlos Catucci <carlos.catucci a gmail.com>:

> Nel tuo caso il problema non si pone, ma è l'approccio ad essere sbagliato.
>
>
> A prescindere che ho usatto un caso al volo, ma dove sarfebbe l'errore? Se
> entrambe implementano dei metodi differenti, non ci sarebbero conflitti.
>

Diciamo che e' un esempio da manuale di come non andrebbe usata
l'ereditarieta'. E' anche un esempio da manuale di come la insegnavano i
libri negli anni 90 (e purtroppo tutt'ora). Esempio tipico Deitel&Deitel...

Tu stai usandola per sostituire un meccanismo di semplice composizione.

Ovviamente da un punto di vista sintattico funziona. Il tuo codice
funziona. Ma non ti rendi conto del numero di vincoli impliciti che stai
introducendo senza alcun beneficio.

Come diceva Manlio, una bolla *contiene* i due oggetti sopra menzionati.
Ora, per facilita' di ragionamento... supponi che vuoi fare una bolla a
qualcuno che non vive in Italia. Supponi anche che, sempre per fare buona
OOP, tu ti trovi che in effetti l'implementazione di un'Anagrafica Clienti
per qualcuno che non e' italiano e' implementata con una classe diversa
(diverse business rules, diversi campi, boh). Ecco che cominci ad avere un
problema.

Viceversa, siccome il comportamento esterno di un'anagrafica clienti e'
sempre lo stesso, se usi composizione semplicemente ci plugghi dentro
quella giusta, ma non ti esplodono le classi.

Allo stesso modo il Catalogo clienti...

Ora capiscimi, io conosco poco il dominio business di cui stiamo parlando.
Quindi potresti contestare l'esempio specifico. Oppure potresti dirmi che
no, non ha nessun senso avere piu' classi per un'anagrafica clienti. Ma
attenzione che se gia' hai una roba tipo

if self.codice_fiscale is None and self.is_a_bloody_foreigner:

hai gia' un buon motivo per avere una classe a parte. Per intenderci.


-- 
.
..: -enrico-
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20150114/e03377be/attachment.html>


Maggiori informazioni sulla lista Python