Semplice rubrica

di il
20 risposte

20 Risposte - Pagina 2

  • Re: Semplice rubrica

    Regola ""filosofica"" sull uso/abuso di getter e setter.

    I "getter" servono per ESTRARRE informazioni da un oggetto. Sono utili nel 99% dei casi
    I "setter" servono per CAMBIARE le informazioni IN un oggetto. Si usano SOLO DOVE SERVE, NON PER PRINCIPIO!!!!!

    Una persona ha un nome e questo NON CAMBIA. QUINDI i "setter" NON SERVONO.

    Come si inizializzano i campi senza i setter?

    1) mediate un costruttore
    2) mediante un oggetto "Factory" che non e' altro che un'altro oggetto che fa le veci del "new Oggetto()", ma che e' l' UNICO che puo' usare i setter. In questo caso i setter avranno una visibilita' LIMITATA (quindi NON public) in modo che ci possa accedere solo la factory E NESSUN ALTRO.
  • Re: Semplice rubrica

    Buon giorno andbin,
    intendevi qualcosa di simile?
    comunque "cercaPersonaPerNome" è un po contorta e poco fluida, non c'è nulla di meglio?
    public class Persona
    {
        private String nome;
        private String indirizzo;
        private String nTel;
    
     public Persona (String nome, String indirizzo, String nTel )    // costruttore
        {
            setNome(nome);
            setIndirizzo(indirizzo);
            setNTel(nTel);
        } //-------------------------
    //-+++++++++++++++++++++++++++++++++++++++++
        public String leggiContatto ()
        {
            return getNome() +":"+"  "+ getIndirizzo() +"  Tel "+ getNTel() ;
        }
    
    //-++++++++++++++++++++++++++++++++++++++++
        public void setNome(String nome)
        {
            this.nome = nome;
        }
    
        public String getNome()
        {
            return nome;
        }
    
    //-+++++++++++++++++++++++++++++++++++++++++
        public void setIndirizzo(String indirizzo)
        {
            this.indirizzo = indirizzo;
        }
    
        public String getIndirizzo()
        {
            return indirizzo;
        }
    
    //-+++++++++++++++++++++++++++++++++++++++++
        public void setNTel(String nTel)
        {
            this.nTel = nTel;
        }
    
        public String getNTel()
        {
            return nTel;
        }
    
    
    //
    } //---fine Classe---
    public class Rubrica
    {
    
        private Persona persone[];
    
        public Rubrica(Persona persone[])
        {
            this.persone = persone;
        }
    
        public Persona cercaPersonaPerNome(String nome)
        {
            int i ;
    
            for ( i= 0; i< (persone.length); i++)
            {
                if ( (persone [i].getNome () ).equals(nome) )    // trovato !
                {
                    break ;
                }
                else
                if ( i >= ((persone.length)-1) )    // controllati tutti
                {
                    persone[i] = null ;
                    break ;
                }
            }
    
            return persone [i] ;
        }
    }
    public class GestioneRubrica
    {
        public static void main(String args[])
        {
            Persona[] alcunePersone =
            {
                new Persona("Minni","via libertà,14","06.313195"),
                new Persona("Topolino","via Tasso,3","055.956321"),
                new Persona("Pluto","via N.York,11","055.981437"),
                // ....
            } ;
    
            Rubrica rubrica = new Rubrica(alcunePersone);
    
            String testContatto = args[0] ;        // "Topolino"        
    
            Persona trovato = rubrica.cercaPersonaPerNome(testContatto);
    
            if(trovato == null )
            {
                System.out.println( testContatto +"  NON è in RUBRICA!");
            }
            else
            {
                System.out.println( trovato.leggiContatto () );
            }
        }
    }
  • Re: Semplice rubrica

    Esaurito ha scritto:


    "cercaPersonaPerNome" è un po contorta e poco fluida, non c'è nulla di meglio?
    Sì certo:
        public Persona cercaPersonaPerNome(String nome) {
            for (int i = 0; i < persone.length; i++) {
                if (persone[i].getNome().equals(nome)) {
                    return persone[i];
                }
            }
    
            return null;  //non trovato
        }
    E se si usa il ciclo enhanced-for (il "for-each") di Java 5 è pure leggermente meglio:
        public Persona cercaPersonaPerNome(String nome) {
            for (Persona persona : persone) {
                if (persona.getNome().equals(nome)) {
                    return persona;
                }
            }
    
            return null;  //non trovato
        }
  • Re: Semplice rubrica

    Grazie, il primo esempio l' ho capito, ma il secondo NEBBIA....
  • Re: Semplice rubrica

    Esaurito ha scritto:


    Grazie, il primo esempio l' ho capito, ma il secondo NEBBIA....
    Il secondo, di diverso, ha solo l'uso del enhanced-for (detto amichevolmente "for-each"), il nuovo tipo di ciclo che è stato introdotto in Java 5 per iterare più facilmente su: a) array; b) oggetti che implementano java.lang.Iterable
    Il for-each è solamente "zucchero sintattico", è solo una forma abbreviata che poi viene tradotta in altro codice dal compilatore. Non fa nulla di più rispetto a quanto si poteva fare prima di Java 5.

    Nel caso di un array, il for-each viene tradotto ESATTAMENTE nel ciclo con indice.

    Ovvero:
    for (Tipo nomeVar : unArray) {
        //resto... usa nomeVar
    }
    viene tradotto in:
    for (int x = 0; x < unArray.length; x++) {
        Tipo nomeVar = unArray[x];
        //resto... usa nomeVar
    }
    Dove x è una variabile generata dal compilatore con un nome scelto tale per cui non faccia conflitto con altro.

    Tutto qui (beh, non è tutto).
  • Re: Semplice rubrica

    Grazie
Devi accedere o registrarti per scrivere nel forum
20 risposte