Discussione:
[niubbo] Esempio Rubrica da Array ad Arraylist
(troppo vecchio per rispondere)
Angelo Ferracane
2006-01-27 08:29:50 UTC
Permalink
Salve sto studiando Java e mi sono imbattuto nel solito esempio della
rubrica:

class Rubrica {
// Attributi
private Persona[] elencoPersone;
private int numeroPersone;
.....

Qua si capisce bene che elenco elencoPersone è un array del tipo Persona.

Se dovessi passare ad arrayList otterrei una cosa tipo:

class Rubrica {
// Attributi
private arrayList elencoPersone;
....

Capisco che in ogni caso poi dove usare un metodo per agire su
elencoPersone, quindi so che passo un oggetto di tipo Persona, ora la
mia domanda è: E' giusto come ho riscritto la classe usando arrayList?

Non c'è modo di esplicitare che l'arrayList deve essere un arrayList di
oggetti di tipo Persona?

Grazie a tutti, scusate se ho posto una domanda che per i veterani di
Java è una cosa ovvia, prima di postare ho cercato sui 4 libri di java
che ho, ho cercato su google e si trova sempre la stessa cosa
lista.add(new tipoggetto); ma non è spiegato quello che vorrei sapere io :(
Wolverine
2006-01-27 09:16:52 UTC
Permalink
Post by Angelo Ferracane
Salve sto studiando Java e mi sono imbattuto nel solito esempio della
Io non mi ci sono mai imbattuto...
Post by Angelo Ferracane
class Rubrica {
// Attributi
private Persona[] elencoPersone;
private int numeroPersone;
.....
Qua si capisce bene che elenco elencoPersone è un array del tipo Persona.
class Rubrica {
// Attributi
private arrayList elencoPersone;
....
E' corretto, basta che dopo i puntini non ci sia più private int
numeroPersone; non serviva nemmeno prima bastava usare elencoPersone.length.
Post by Angelo Ferracane
Capisco che in ogni caso poi dove usare un metodo per agire su
elencoPersone, quindi so che passo un oggetto di tipo Persona, ora la
mia domanda è: E' giusto come ho riscritto la classe usando arrayList?
Non c'è modo di esplicitare che l'arrayList deve essere un arrayList
di oggetti di tipo Persona?
Nel JDK 1.5 ArrayList, è come si suol dire usando un neologismo,
tipizzato di natura (se non erro...) nel JDK 1.4 e precedenti non si può
fare, ricordo che il mio prof. di Progettazione del Software creò una
classe ad hoc che chiamò InsiemeSS (non era nazista è!!!). Dovresti fare
lo stesso anche tu, oppure giocare con gli array oppure con JDK 1.5
Post by Angelo Ferracane
Grazie a tutti, scusate se ho posto una domanda che per i veterani di
Java è una cosa ovvia, prima di postare ho cercato sui 4 libri di java
che ho, ho cercato su google e si trova sempre la stessa cosa
lista.add(new tipoggetto); ma non è spiegato quello che vorrei sapere io :(
Non conta essere veterano per dare un suggerimento o magari solo un
aiuto seppur sbagliato...
L'uomo che muove le montagne, porta dapprima le pietre una per una...
Angelo Ferracane
2006-01-27 09:54:29 UTC
Permalink
Post by Wolverine
Post by Angelo Ferracane
Salve sto studiando Java e mi sono imbattuto nel solito esempio della
Io non mi ci sono mai imbattuto...
I tipici esempi sono: Rubrica, Area e/o perimetro di una figura
geometrica e la bitica classe Employee :)
Post by Wolverine
Post by Angelo Ferracane
class Rubrica {
// Attributi
private Persona[] elencoPersone;
private int numeroPersone;
.....
Qua si capisce bene che elenco elencoPersone è un array del tipo Persona.
class Rubrica {
// Attributi
private arrayList elencoPersone;
....
E' corretto, basta che dopo i puntini non ci sia più private int
numeroPersone; non serviva nemmeno prima bastava usare
elencoPersone.length.
Ovvio a questo ci arrivo...l'arrayList si dimensiona dinamicamente, int
numeroPersone perchè poi faccio il costruttore:

public Rubrica( int numeroMaxPersone ) {
elencoPersone = new Persona[numeroMaxPersone];
numeroPersone = 0;
}
Post by Wolverine
Post by Angelo Ferracane
Capisco che in ogni caso poi dove usare un metodo per agire su
elencoPersone, quindi so che passo un oggetto di tipo Persona, ora la
mia domanda è: E' giusto come ho riscritto la classe usando arrayList?
Ma che cosa ho scritto? :S
Post by Wolverine
Post by Angelo Ferracane
Non c'è modo di esplicitare che l'arrayList deve essere un arrayList
di oggetti di tipo Persona?
Nel JDK 1.5 ArrayList, è come si suol dire usando un neologismo,
tipizzato di natura (se non erro...) nel JDK 1.4 e precedenti non si può
fare, ricordo che il mio prof. di Progettazione del Software creò una
classe ad hoc che chiamò InsiemeSS (non era nazista è!!!). Dovresti fare
lo stesso anche tu, oppure giocare con gli array oppure con JDK 1.5
Cmq vedo che sono stato capito ^_^
Allora in buona sostanza devo fare un controllo se qualche bontempone (o
io stesso in un momento di follia) ha inserito nell'arrayList, in
qualche punto del programma, un elemento di un tipo diverso da quello
voluto.
Post by Wolverine
Post by Angelo Ferracane
Grazie a tutti, scusate se ho posto una domanda che per i veterani di
Java è una cosa ovvia, prima di postare ho cercato sui 4 libri di java
che ho, ho cercato su google e si trova sempre la stessa cosa
lista.add(new tipoggetto); ma non è spiegato quello che vorrei sapere io :(
Non conta essere veterano per dare un suggerimento o magari solo un
aiuto seppur sbagliato...
L'uomo che muove le montagne, porta dapprima le pietre una per una...
Grazie ancora per la delucidazione.
p***@inwind.it
2006-01-27 10:04:17 UTC
Permalink
Post by Angelo Ferracane
Post by Wolverine
Post by Angelo Ferracane
class Rubrica {
// Attributi
private arrayList elencoPersone;
....
Se solo per questo, potresti anche fare class Rubrica extends ArrayList
(te lo dico per informazione, l'ereditarietà può essere comoda ma la
composizione permette una migliore manutenzione)
Post by Angelo Ferracane
Post by Wolverine
Post by Angelo Ferracane
Non c'è modo di esplicitare che l'arrayList deve essere un arrayList
di oggetti di tipo Persona?
Nel JDK 1.5 ArrayList, è come si suol dire usando un neologismo,
tipizzato di natura (se non erro...) nel JDK 1.4 e precedenti non si può
fare, ricordo che il mio prof. di Progettazione del Software creò una
classe ad hoc che chiamò InsiemeSS (non era nazista è!!!). Dovresti fare
lo stesso anche tu, oppure giocare con gli array oppure con JDK 1.5
Cmq vedo che sono stato capito ^_^
Allora in buona sostanza devo fare un controllo se qualche bontempone (o
io stesso in un momento di follia) ha inserito nell'arrayList, in
qualche punto del programma, un elemento di un tipo diverso da quello
voluto.
No, fino alla 1.4 dovevi fare un controllo (o intercettare la
ClassCastException).
Ora, dalla 1.5 PUOI dichiarare il tipo dell'oggetto che inserisci nella
Collection.
In tal caso, se prendi un errore lo prendi a compile-time invece che a
run-time.
Cerca "Generics" sul sito della SUN
Angelo Ferracane
2006-01-27 10:20:47 UTC
Permalink
Post by p***@inwind.it
Post by Angelo Ferracane
class Rubrica {
// Attributi
private arrayList elencoPersone;
....
Se solo per questo, potresti anche fare class Rubrica extends ArrayList
(te lo dico per informazione, l'ereditarietà può essere comoda ma la
composizione permette una migliore manutenzione)
Post by Angelo Ferracane
Non c'è modo di esplicitare che l'arrayList deve essere un arrayList
di oggetti di tipo Persona?
[cut]
Post by p***@inwind.it
No, fino alla 1.4 dovevi fare un controllo (o intercettare la
ClassCastException).
Ora, dalla 1.5 PUOI dichiarare il tipo dell'oggetto che inserisci nella
Collection.
In tal caso, se prendi un errore lo prendi a compile-time invece che a
run-time.
Cerca "Generics" sul sito della SUN
import java.util.*;

public class Ex2 {

private void testCollection() {
List<String> list = new ArrayList<String>();
list.add(new String("Hello world!"));
list.add(new String("Good bye!"));
list.add(new Integer(95));
printCollection(list);
}

Uaa il tipo racchiuso fra < > già mi sento confuso :D

Ecco perfetto list.add(new Integer(95)); genera un errore in fase di
compilazione, in più a colpo d'occhio si vede che posso inserire solo
String.

Grazie della dritta...ora mi leggo bene bene l'articolo e vedo di capire
come funzionana questa sintassi < > che mi è aliena
p***@inwind.it
2006-01-27 10:46:25 UTC
Permalink
Guarda, se vuoi ci sono anche degli articoli fatti bene su mokabyte
Angelo Ferracane
2006-01-27 11:35:17 UTC
Permalink
Post by p***@inwind.it
Guarda, se vuoi ci sono anche degli articoli fatti bene su mokabyte
Si trovati grazie... Andrea G. negli articoli spiega pure < > ottimo
ottimo :)
Vincent Vega
2006-01-27 11:46:53 UTC
Permalink
Post by p***@inwind.it
Se solo per questo, potresti anche fare class Rubrica extends ArrayList
(te lo dico per informazione, l'ereditarietà può essere comoda ma la
composizione permette una migliore manutenzione)
L'ereditarietà è un errore di design in questo caso. Per dirne una,
fa si che i metodi di ArrayList siano esposti direttamente e con ogni
probabilità non è ciò che si vuole (anzi è dannoso).
Questo è un tipico caso in cui si implementa un wrapper.
p***@inwind.it
2006-01-27 12:02:01 UTC
Permalink
Beh, dipende.
Non ne sappiamo abbastanza da capire se per esempio avere un remove() a
disposizione è utile (alla sua causa) oppure no.
Angelo Ferracane
2006-01-27 12:22:54 UTC
Permalink
Post by p***@inwind.it
Beh, dipende.
Non ne sappiamo abbastanza da capire se per esempio avere un remove() a
disposizione è utile (alla sua causa) oppure no.
utile :)
Mi fa piacere vedere che la mia domanda è stata meno banale di quanto mi
fosse sembrata all'inizio.

E come sarebbe usando un wrapper?
Vincent Vega
2006-01-27 16:19:20 UTC
Permalink
Post by Angelo Ferracane
E come sarebbe usando un wrapper?
Niente di particolare, in pratica è quello che stai facendo.
Vincent Vega
2006-01-27 17:01:19 UTC
Permalink
Post by p***@inwind.it
Beh, dipende.
Non ne sappiamo abbastanza da capire se per esempio avere un remove() a
disposizione è utile (alla sua causa) oppure no.
Beh, il problema è abbastanza generico e comunque è buona norma
generalizzarlo per ricondurlo ad un design pattern. Non è comunque
questo l'utilizzo giusto dell'ereditarietà.

Fra l'altro in java non c'è l'ereditarietà multipla, per cui così
facendo ti "bruci" la possibilità di [fare|derivare da] una
generalizzazione. Se proprio serve che la classe implementi
l'interfaccia List è corretto aggiungere l'interfaccia alle implements
e implementare i metodi, ovviamente delegando alla collection interna.
Wolverine
2006-01-27 11:37:56 UTC
Permalink
Come ti dicevo prima, prova a dare uno sguardo a questa classe e se fa
al caso tuo usala...

http://www.dis.uniroma1.it/~cadoli/didattica/fond2/programmi_java/InsiemeSS.java
Angelo Ferracane
2006-01-27 12:24:29 UTC
Permalink
Post by Wolverine
Come ti dicevo prima, prova a dare uno sguardo a questa classe e se fa
al caso tuo usala...
http://www.dis.uniroma1.it/~cadoli/didattica/fond2/programmi_java/InsiemeSS.java
Grazie vado a guardare :)
Vincent Vega
2006-01-27 11:37:38 UTC
Permalink
Post by Angelo Ferracane
Capisco che in ogni caso poi dove usare un metodo per agire su
elencoPersone, quindi so che passo un oggetto di tipo Persona, ora la
mia domanda è: E' giusto come ho riscritto la classe usando arrayList?
Ovviamente si. Banalmente: se devi aggiungere o rimuovere una voce,
nella collection hai dei metodi specifici e una gestione ottimale della
dimensione, mentre in un array devi fare tutto a mano. E naturalmente
è solo uno dei vantaggi.
Post by Angelo Ferracane
Non c'è modo di esplicitare che l'arrayList deve essere un arrayList di
oggetti di tipo Persona?
Dal java 1.5 si (vedi i generics).
Loading...