Richiesta informazioni

di il
34 risposte

Richiesta informazioni

Buongiorno.
Ho qualche difficoltà a capire praticamente i java Generics.
Di teoria ne sto' mandando giù parecchia pero' poi nella pratica mi perdo.
Vorrei sapere se conoscete qualche sito oppure qualche Eserciziario in .pdf dopo posso trovare dei semplici esercizi sui java generics per far pratica .
Grazie .

34 Risposte

  • Re: Richiesta informazioni

    FabioJ ha scritto:


    Ho qualche difficoltà a capire praticamente i java Generics.
    Di teoria ne sto' mandando giù parecchia pero' poi nella pratica mi perdo.
    Vorrei sapere se conoscete qualche sito oppure qualche Eserciziario in .pdf dopo posso trovare dei semplici esercizi sui java generics per far pratica .
    Se cerchi Java generics con Google trovi molte risorse, tra cui la sezione relativa nel tutorial Oracle ufficiale. Ma trovi anche risorse in italiano.

    E comunque, se hai dubbi sui generics, chiedi pure qui. Io sono tra quelli che possono risponderti quasi subito e senza problemi.
  • Re: Richiesta informazioni

    Non avevo dubbi su la tua disponibilità .

    Vorrei affrontare questo argomento con dei semplici esercizi.
    In rete ci sono esercizi complessi che fino ad un certo punto seguo poi mi perdo e aumenta la frustrazione di non capire .

    Comunque Andbin ti ringrazio come al solito per tua disponibilità e appena ho bisogno non esito a chiedere.
  • Re: Richiesta informazioni

    FabioJ ha scritto:


    Vorrei affrontare questo argomento con dei semplici esercizi.
    Riguardo i generics c'è solo da distinguere tra esercizi in cui usi classi "generiche" già esistenti (tipicamente le collezioni del framework) oppure se devi definire tu classi "generiche" e poi usarle.

    Comunque di esercizi se ne possono trovare/inventare molti. Uno "classico" che ho sempre in mente è questo, spiego brevemente: fai una gerarchia di classi per figure 2D: classe astratta Figura (o Figura2D) poi sottoclassi concrete Cerchio, Quadrato, ecc... In Figura sono noti metodi es. calcolaArea e/o calcolaPerimetro che poi sono implementati concretamente nelle sottoclassi.
    Quindi crei un List<Figura> e ci inserisci un po' di figure miste e con dati a tua scelta. Quindi implementi uno o più Comparator<Figura> per ordinare la lista es. per area o per perimetro. E stampi la lista prima e dopo gli ordinamenti.
  • Re: Richiesta informazioni

    Andbin .

    Per dire il vero questo esercizio l'ho gia' risolto o parzialmente risolto in questo momento non mi ricordo lo devo rivedere.
    E' uno dei primi esercizi che ho affrontato per capire il polimorfismo e l'ereditarietà.
    In riferimento a questo esercizio devo capire bene il ruolo della classe generica e perché si usa .

    Per esempio : quando dici crei una Lista<Figura> ...etc .. intendi dire un'interfaccia Figura che ha al suo interno una lista ?
    Oppure Lista<Figura> va inserita nel main ?

    Capisco soltanto che Figura e' generica perché può' andar bene per tutte le figure geometriche .
    E' come se fosse una chiave a passpartu'
  • Re: Richiesta informazioni

    Provo prima di tutto a crearmi una classe astratta Figura usando BlueJ.
    Il primo frammento di codice potrebbe essere questo .


    public abstract class Figura
    {
    abstract double area();
    public void stampaArea()
    {
    System.out.println(area());
    }
    //fine metodo stampaArea
    //fine classe Figura
    }
  • Re: Richiesta informazioni

    Questo potrebbe essere il frammento di codice del cerchio .

    class Cerchio extends Figura
    {
    private int raggio;

    Cerchio(int r)
    {raggio = r;} //costruttore

    public int getRaggio() {
    return raggio;
    }
    public void setRaggio(int raggio) {
    this.raggio = raggio;
    }

    public double area()
    { return raggio*raggio*Math.PI; }
    }
  • Re: Richiesta informazioni

    FabioJ ha scritto:


    Per dire il vero questo esercizio l'ho gia' risolto o parzialmente risolto in questo momento non mi ricordo lo devo rivedere.
    E' uno dei primi esercizi che ho affrontato per capire il polimorfismo e l'ereditarietà.
    Ok, bene.

    FabioJ ha scritto:


    In riferimento a questo esercizio devo capire bene il ruolo della classe generica e perché si usa .

    Per esempio : quando dici crei una Lista<Figura> ...etc .. intendi dire un'interfaccia Figura che ha al suo interno una lista ?
    Oppure Lista<Figura> va inserita nel main ?
    No, attenzione. Figura può essere una classe astratta o una interfaccia. Ai fini di un esercizio, la differenza non è molto rilevante. La cosa da tenere presente è che Figura NON è (non deve certo esserlo) una classe "generica" nel senso dei generics di Java 5. E non deve nemmeno contenere alcuna lista. Una lista di figure la crei tu in un'altra classe di Prova con il main, ad esempio.

    Figura semplicemente deve fare principalmente da supertipo, cioè un tipo più generalizzato che "accomuna" più tipi differenti specifici come Cerchio, Quadrato, Triangolo, ecc...

    FabioJ ha scritto:


    public abstract class Figura
    [ .... ]
    Ok, lo stampaArea() non è certo "vitale" ma ok.

    FabioJ ha scritto:


    public class Cerchio
    [ .... ]
    Ok, il raggio può anche trattarlo come double. Però attenzione: Cerchio dovrebbe estendere Figura, altrimenti viene meno il polimorfismo di cui poi avrai bisogno con un List<Figura>
  • Re: Richiesta informazioni

    Andbin .

    Se sei d'accordo per semplificare un po' il tutto e non riscrivere tutte le classi ,decido di prendere come esempio di questo programma una sola figura geometrica che e' Cerchio.
    Perciò per il momento il mio programmino e' composta da un'interfaccia Figura una classe Cerchio e un main .
    A questo punto decido di utilizzare il Generics .
    Decido di utilizzare List<Figura> .
    A questo punto mi viene il dubbio ? devo andare nel main e aggiungere il Generics List<Figura> oppure devo creare un'latra classe con all'interno l'utilizzo del generics?
  • Re: Richiesta informazioni

    FabioJ ha scritto:


    Decido di utilizzare List<Figura> .
    A questo punto mi viene il dubbio ? devo andare nel main e aggiungere il Generics List<Figura> oppure devo creare un'latra classe con all'interno l'utilizzo del generics?
    Puoi tranquillamente fare in un main es.
    List<Figura> figure = new ArrayList<Figura>();
    figure.add(new Cerchio(20));
    // aggiungine altre (anche di altri tipi, se vorrai)
  • Re: Richiesta informazioni

    Ok.
    Mi sto perdendo in bicchier d'acqua .
    Più' volte negli esercizi che ho svolto ho utilizzato questo tipo di codice e non e' per niente difficile .

    Per il momento vorrei fermarmi qui perché la mia mente e' in loop .
    Ripercorro sempre la stessa strada senza via d' uscita.
    Domani a mente riposata vorrei provare ad usare i generics per comparare due oggetti .
    Mi sembra che si utilizzi Comparable e una classe con due parametri tipo ....public class Coppia<E,F>..
  • Re: Richiesta informazioni

    FabioJ ha scritto:


    Mi sto perdendo in bicchier d'acqua .
    Domani a mente riposata vorrei provare ad usare i generics per comparare due oggetti .
    Ok ... capisco ...

    FabioJ ha scritto:


    Mi sembra che si utilizzi Comparable e una classe con due parametri tipo ....public class Coppia<E,F>..
    Una classe Coppia non è una cosa che serve per Comparable.

    Se vuoi fare una classe es. Tupla2<A,B> e vuoi fare in modo che oggetti Tupla2 siano comparabili tra di loro tramite Comparable, allora sì, si può fare.
  • Re: Richiesta informazioni

    Per dire il vero mi servirebbe capire con qualche semplice esercizio a cosa serve e come si usa l'interfaccia Comparable .
  • Re: Richiesta informazioni

    FabioJ ha scritto:


    Per dire il vero mi servirebbe capire con qualche semplice esercizio a cosa serve e come si usa l'interfaccia Comparable .
    Ok, questo però tocca i generics in maniera abbastanza marginale/minimale.

    Fai una classe es. Persona con campi nome, cognome (e eventualmente altro es. annoNascita).
    In questa classe implementa Comparable<Persona> . Con Comparable l'ordinamento dovrebbe essere quello "naturale" degli oggetti, quindi ragionevolmente sarà per cognome/nome (solo a parità di cognome andrai a confrontare il nome).

    Fai quindi una lista di oggetti Persona, inseriscine alcuni e poi ordina la lista.
  • Re: Richiesta informazioni

    Buongiorno Andbin .

    Ho iniziato a fare l'esercizio che mi hai suggerito di fare per capire i generics .
    Ho creato una classe Persona con tre attributi nome, cognome , annodinascita.
    Ho implementato la classe persona parametrizzandola con Comparable<Persona> e ho aggiunto il metodo comapareTo(),( credo sia obbligatorio metterlo) .
    Se puoi dare un'occhiata alla prima parte di questo codice cosi' se e' giusto aggiungo una lista di oggetti Persona e faccio l'ordinamento .

    public class Persona implements Comparable<Persona>
    {

    public String nome;
    public String cognome;
    public int annodinascita;

    Persona(String nome, String cognome, int annodinascita)
    {
    this.nome = nome;
    this.cognome=cognome;
    this.annodinascita=annodinascita;

    }

    String getNome() {
    return nome;
    }

    String getCognome() {
    return cognome;
    }

    int getAnnodinascita() {
    return annodinascita;
    }

    void setNome(String nome) {
    this.nome = nome;
    }

    void setCognome(String cognome) {
    this.cognome = cognome;
    }
    void setAnnodinascita(int annodinascita) {
    this.annodinascita = annodinascita;
    }

    @Override
    public int compareTo(Persona arg0) {

    return 0;
    }


    }
Devi accedere o registrarti per scrivere nel forum
34 risposte