Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
di Michele Arpaia
Soluzione al problema
Lo spunto mi è dato da un risposta di Carlo Pescio ad un lettore sul numero 62 di Computer Programming. In
quell’occasione si presentava un esempio simile al seguente: una classe gestisce operazioni su coordinate
cartesiane e polari. I costruttori assumerebbero la seguente signature:
Ovviamente il compilatore lancia un errore di ridefinizione. Una semplice soluzione sarebbe quella di avere
un solo costruttore con un parametro booleano in più, e capire con degli if quale significato deve assumere il
costruttore. Un siffatta soluzione offre il fianco a molte limitazioni. Intanto, da un punto di vista Object
Oriented, il metodo ha una low cohesion ovvero ha molte responsabilità, questo diventa difficile da
manutenere, da comprendere e da riusare. Basti pensare all’introduzione di un altro tipo di coordinate, come
quelle cilindriche. In base a questa soluzione, bisogna aggiungere un altro if, rimuovere il flag poiché
essendo booleano assume solo due valori, e sostituirlo con un byte, ma questo potrebbe assumere valori
che da un punto di vista semantico non hanno nessun significato, e così via.
Pescio in quella risposta utilizza i tipi enumerativi che in Java non sono presenti. L’idea è allora quella di
sfruttare la potenza delle inner-class. Vediamo il listato e poi lo commentiamo: