Newsgroup: it.comp.java
Titolo: un po' [OT] ma OOP

Vorrei il parere del NG sulla seguente questione teorica (probabilmente tra
poco questo sarà
un problema reale per me): supponiamo di avere una classe con vari metodi,
tutti di dimensione
considerevole. Il file .java diventa in una situazione del genere poco
gestibile a livello di
programmazione e anche come chiarezza globale. Si potrebbe dividere il tutto
in varie classi e
sottoclassi; d'altra parte, se i metodi sono legati da un punto di vista
logico in maniera chiara alla
classe di partenza, questa divisione in più classi mi sembra una forzatura
dal punto di vista OOP.
Chiarisco con un esempio: ho una classe Veicolo e i metodi accendiMotore( )
, spegniMotore( ) ...
diciamo 10 metodi di 200 righe l'uno, 2000 righe in tutto.
Non è logico spezzare i metodi in più classi, ma è comodo per gestirli
meglio.
Cosa consigliate? C'è un modo per risolvere elegantemente la situazione? C'è
una soluzione OOP?
grazie comunque,ciao
Federico
------------------
   Imparo !
------------------


Dipende da come ti trovi bene tu, io al momento sto lavorando ad un
progetto, che da un frame chiamiamolo main gestisce altri  sotto frame che a
loro volta hanno altri sottoframe e pannelli opzione, ogni sotto frame ha le
sue funzioni e per gestire il tutto devo far passare i dati tra un
sottoframe e l'altro attraverso il frame centrale ed ogni frame a dalle 50
alle 300 righe di codice.
Io mi trovo bene ha separare ogni funzione con un commento tipo:
[FUNZIONE LOAD] spiegzionee....
e poi dividere i vari pezzi della classe con
[GESTIONE INTERFACCIA]----------------------------------------->>
....
.......
[FUNZIONI DI CALCOLO]---------------------------------------------->>
io mi trovo bene ma e' normale perdersi in un programma, se e' grosso per
questo hanno inventato il comando trova : )
Se poi usi un buon programma, come jbuilder (anche lentoooooo) una volta
creati i tuoi metodi e le tue funzioni le inserisce automat. nell'aiuto
mostrandotele con i vari parametri che vanno passati.
Scusa la divagazione
Spero di essere stato utile
Cia
Maded


Personalmente trovo che in una classe metodi lunghi (in media, immagino)
200 righe siano decisamente troppo lunghi. Di solito questo accade se i
metodi e quindi la classe fanno "troppe cose", nel senso che eseguono
anche compiti che dovrebbero essere demandati ad altre classi piu'
specializzate. Tanto per rimanere nel tuo esempio: d'accordo che la
classe Veicolo dovra' accendere il motore, ma forse i dettagli
dell'accensione del motore dovranno essere demandati ad una classe
Motore, cosi' come forse la classe Motore si affidera' alla classe
MotorinoDiAvviamento per mettersi in moto...e cosi' via.  Alla fine
quindi si otterranno delle classi piu' compatte e molto specializzate.
Un altro motivo dell'eccessiva corposita' dei metodi potrebbe essere la
mancanza di una componente "evolutiva" delle classi, nel senso che
dovrebbe accadere raramente che una classe introduca lei stessa tutte le
funzionalita' che mette a disposizione. Di solito molte le eredita da
classi piu' generiche e piu' semplici, che permetterano quindi di
mantenere anche la classe stessa ad un livello minore di complessita'
dato che non sara' responsabile delle funzionalita' che eredita dalla/e
classi genitrici. Ad esempio se esiste una classe Veicolo che e' in
grado di muoversi avanti indietro, girare a destra e a sinistra,
ecc...se ho bisogno di un "veicolo a motore" non dovro' reimplementare
tutte quelle funzionalita', ma potro' definire la classe VeicoloAmotore
semplicemente derivandolo per ereditarieta' dalla classe Veicolo e
implementando al suo interno solo le caratteristiche specifiche dei
veicoli a motore.
L'importante secondo me e' di non introdurre classi fittizie, pensate
semplicemente per spezzettare il codice, dato che alla fine generano
piu' confusione che benefici di manutenibilita'.
Un saluto
  Lucio
--
(
  Lucio Benfante
 
http://www.dei.unipd.it/~benfante
                                          )
Sent via Deja.com 
http://www.deja.com/
Before you buy.


--
Bruno Bossola, a Java Developer
