Newsgroup: it.comp.java
Titolo: Domanda di teoria sulla buona programmazone

Salve, volevo chiedervi un consiglio sulla buona programmazione in Java 
per un passaggio di dati che devo fare: Ho una classe 1 contenente 
degli oggetti messi in una struttura dinamica (nel mio caso un 
arraylist) e ho una classe 2 che fa una simulazione e utilizza questa 
struttura. Il problema è che nonsolo deve leggere, ma anche modificare 
i dati contenuti questo arraylist, e quindi il mio dubbio era quale 
fosse il metodo più orientato alla filosofia della OOP. Le possibilità 
che avevo pensato erano tre:
1-) Passargli direttamente il riferimento all'arraylist alla classe 2 e 
lavorarci direttamente su;
2-) Fare 3 metodi nella calsse 1: uno che restituisca il numero degli 
elementi dell'arraylist, un get che ritorni l'elemento in base 
all'indice e l'ultimo un set che scriva un elemento in base all'indice;
3-) Clonare l'arraylist, passare il clone alla classe 2. La simulazione 
ci lavora su e alla fine restituisco il clone alla calsse 1 che lo 
andrà a sustituire alla versione originale.
Accetto suggerimenti di ogni tipo.
Grazie, ciao.


Direi di utilizzare la soluzione 1), è la più semplice e lineare a livello
concettuale.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 fosse il metodo piů orientato alla filosofia della OOP.
Mmmh, cosi' come lo descrivi potrebbe anche essere accettabile la 1
(passaggio dell'arraylist), soprattutto se - come sembra di capire - non hai
problemi di concorrenza e chi lavora sull'oggetto e' essenzialmente la
classe di calcolo. Ma in genere la 2 e' la piu' solida e OO, dipende anche
da cosa ci fa la prima classe con l'arraylist e se hai problemi di
sincronizzazione.

 concettuale.
Anche se in pratica viola di brutto encapsulamento e information hiding.
-- 
blog:  
http://www.akropolix.net/rik0/blogs
 | Uccidete i filosofi,
site:  
http://www.akropolix.net/rik0/
      | tenetevi riso e
forum: 
http://www.akropolix.net/forum/
     | bacchette per voi.

 Accetto suggerimenti di ogni tipo.
Dovresti dare qualche ragguaglio maggiore.
Per esempio tieni le cose in un ArrayList per quale ragione?
Perchè è il primo che ti è venuto in mente o perchè hai bisogno di
accesso elemento per elemento?
L'elaborazione va a pescare gli elementi in modo random o sempre in
sequenza (nel caso potrebbe anche valere la pena di passare un
iteratore). 
Un domani recente, estendendo l'applicazione, non è che per caso scopri
che è più conveniente invece di un ArrayList usare un qualche tipo di
dizionario/hash table, un albero o altra struttura dati ancora?
[ in questo caso sicuramente la situazione 1 non è accettabile e nemmeno
la tre ].


 Anche se in pratica viola di brutto encapsulamento e information hiding.
Quoto.
Ciao,
Giulio
-- 

> calsse 1 che lo andrà a sustituire alla versione originale.
Potresti tornare una struttura  che implementi l'interfaccia List, uno
che  implementa  l'interfaccia  RandomAccess  (uh, oh,  basta  clonare
l'array), e, perché no, un bell'array tradizionale, molto efficente
nell'accesso. Tutto senza far sapere all'esterno che usi una ArrayList.
Vantaggi  ? Quando nella  classe sostituirai  alla ArrayList  la nuova
EfficentissimaArrayList che però fa  a cazzotti (come castability) con
ArrayList, nessuno avrà problemi.
-- 
 /\           ___
/___/\_|_|\_|__|___Gian Uberto Lauri_____
  //--\| | \|  |   Integralista GNUslamico
\/                 e coltivatore diretto di Software
A Cesare avrei detto di scrivermi a 
fn...@rat.vg

 la tre ].
Grazie a tutti per le risposte, immaginavo che la risposta uno violasse 
di brutto l'incapsulamento, ma pensare astratto facendo classi non 
legate alle altre è difficile per me.. ammetto che sono ancora un po' 
legato ai linguaggi procedurali..
Comunque in realtà quando ho iniziato a fare la simulazione mi sono 
accorto che non avevo bisogno poi di accedere alla struttura 
direttamente, alla fine sono riuscito a ottenere quello che volevo 
accedendo solo dai metodi. Adesso tuttavia mi si è presentato un altro 
problema di altra anuta ma magari per quello posto un nuovo topic..