Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 23

Discussione: Il reference this

  1. #11
    Utente di HTML.it
    Registrato dal
    Jul 2016
    Messaggi
    8
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Ma l'ho fatto prima l'esempio: voglio permettere di creare un oggetto Libro non solo con titolo+editore espliciti ma anche con solo titolo (e con un editore implicito predefinito).
    Magari voglio gestire tutta una serie di validazioni, ad esempio che il titolo non sia null e non più lungo di 100 caratteri e l'editore non null e non più di 50 caratteri.

    codice:
    public class Libro {
        private String titolo;
        private String editore;
    
        public Libro(String titolo, String editore) {
            if (titolo == null) {
                throw new IllegalArgumentException("titolo non può essere null");
            }
    
            if (titolo.length() > 100) {
                throw new IllegalArgumentException("titolo non può essere lungo più di 100 caratteri");
            }
    
            if (editore == null) {
                throw new IllegalArgumentException("editore non può essere null");
            }
    
            if (editore.length() > 50) {
                throw new IllegalArgumentException("editore non può essere lungo più di 50 caratteri");
            }
    
            this.titolo = titolo;
            this.editore = editore;
        }
    
        public Libro(String titolo) {
            this(titolo, "Editore sconosciuto");
        }
    
        // altro ....
    }
    Tutta la validazione e la assegnazione ai campi la metto nel costruttore generale, il primo. Il secondo è solo una comodità che passa un valore predefinito per l'editore. Ma sfrutta appunto tutta la logica del primo costruttore che invoca.
    NON c'è bisogno quindi di replicare (pessima cosa) la validazione in entrambi i costruttori!
    Ah ora è chiarissimo per il secondo costruttore valgono tutte le validazioni del primo si risparmia quindi tempo,g grazie ancora,infine sai consigliare qualche testo da studiare?

  2. #12
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Stark89 Visualizza il messaggio
    per il secondo costruttore valgono tutte le validazioni del primo
    Certo, perché lo ripeto, è solo una invocazione di un altro pezzo di codice.

    Quote Originariamente inviata da Stark89 Visualizza il messaggio
    sai consigliare qualche testo da studiare?
    Per me "IL" libro su Java è "Java™ Programming Language, The, 4th Edition", Addison-Wesley Professional, anche se arriva solo fino a Java 5 (è del 2006) ma è ovviamente in inglese e comunque non è "per tutti". Esiste mi pare una traduzione in italiano.

    In italiano e recente, ci sono i libri di De Sio che sono ben citati sui forum. Ma non li conosco personalmente.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #13
    Utente di HTML.it
    Registrato dal
    Jul 2016
    Messaggi
    8
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Certo, perché lo ripeto, è solo una invocazione di un altro pezzo di codice.


    Per me "IL" libro su Java è "Java™ Programming Language, The, 4th Edition", Addison-Wesley Professional, anche se arriva solo fino a Java 5 (è del 2006) ma è ovviamente in inglese e comunque non è "per tutti". Esiste mi pare una traduzione in italiano.

    In italiano e recente, ci sono i libri di De Sio che sono ben citati sui forum. Ma non li conosco personalmente.
    Ti ringrazio, purtroppo il libro in inglese lo dego passare,faccio fatica ad apprendere questi concetti in italiano figuriamoci in inglese,sto studiando proprio l'ultimo di Claudio De Sio

  4. #14
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Stark89 Visualizza il messaggio
    faccio fatica ad apprendere questi concetti in italiano figuriamoci in inglese
    La documentazione javadoc (del framework di Java SE o di altre librerie) devi però cercare di leggerla ... senza non si va in generale molto lontano ...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #15
    Utente di HTML.it
    Registrato dal
    Jul 2016
    Messaggi
    8
    Quote Originariamente inviata da andbin Visualizza il messaggio
    La documentazione javadoc (del framework di Java SE o di altre librerie) devi però cercare di leggerla ... senza non si va in generale molto lontano ...
    Si ho dato un occhio,credo che mi serviranno pii avanti, sono arrivato al l'incapsulamento,dopo aver studiato l'ereditarietà credo di poter iniziare a sviluppare qualcosa,per fare un programma con interfaccia grafica devo conoscere qualche altro argomento?vorrei creare un programma che calcoli il codice fiscale

  6. #16
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Stark89 Visualizza il messaggio
    per fare un programma con interfaccia grafica devo conoscere qualche altro argomento?
    Visto che stai ancora studiando le basi di Java, consiglio di lasciar perdere (almeno ancora per un po') le interfacce grafiche. Puoi invece realizzare piccole applicazioni "console" e soprattutto cerca di testare, nel senso di sperimentare, le caratteristiche del linguaggio che man mano incontri.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #17
    Utente di HTML.it
    Registrato dal
    Jun 2016
    Messaggi
    18
    E' quindi plausibile pensare ad uno standard come proposto qui sotto? (dubito.., l'avrebbero sviluppato da framework)

    codice:
    public class Abcdefg {
        
        private String a;
        private String b;
        private String c;
        private String d;    
        
        public Abcdefg() {
        System.out.println("Sono il costruttore di default.");
        }
        
        public Abcdefg(String a) {
        this(); // Chiama il costruttore senza parametri
        this.a=a;
        }
    
    
        public Abcdefg(String a, String b) {
        this(a); // Chiama il costruttore con un parametro
        this.b=b;
        }
        
        public Abcdefg(String a, String b, String c) {
        this(a,b); // Chiama il costruttore con due parametri
        this.c=c;
        }  
        
        public Abcdefg(String a, String b, String c, String d) {
        this(a,b,c); // Chiama il costruttore con tre parametri
        this.d=d;
        }   
        
        // e via cosi' anche per un evenyuale parametro e,f,g etc..
    }

  8. #18
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Vettel Visualizza il messaggio
    E' quindi plausibile pensare ad uno standard come proposto qui sotto?
    Non è uno standard ma un "pattern", un modo di sfruttare i costruttori quando ci sono svariati parametri opzionali.
    Ed ha un nome: nel suo libro "Effective Java, 2nd Edition" Joshua Bloch lo chiama il "telescoping constructor pattern" (traducibile in: "costruttori telescopici") in cui ogni costruttore "allunga" di un parametro in più (il "telescopico" è in questo senso, appunto).

    E come l'hai scritto tu comunque è, tra l'altro, nel peggiore dei modi. Generalmente quando si usa questo pattern, l'assegnamento ai campi si fa solo nel costruttore più completo (quello con tutti i parametri) e gli altri costruttori fanno solo invocazioni this( .. ) invocando il costruttore con un parametro in più passandogli un valore predefinito (o passando più/tutti gli altri valori predefiniti).

    Ma come dice Joshua Bloch, nel Item 2 "Consider a builder when faced with many constructor parameters":

    In short, the telescoping constructor pattern works, but it is hard to write client code when there are many parameters, and harder still to read it.
    Quindi "funziona", è ok. Ma è meno leggibile e non bisogna esagerare con il numero di parametri opzionali.

    E poi:

    A second alternative when you are faced with many constructor parameters is the JavaBeans pattern
    Ma questo chiaramente ha altri svantaggi: a) richiede che l'oggetto sia "mutabile" (non si può fare se deve essere immutabile) e b) lo stato dell'oggetto non è subito ben definito, poiché richiede più setter da invocare e quindi ci possono essere errori dovuti ad un cattivo uso, anche solo per svista del programmatore.

    Come ultima/ulteriore alternativa:

    Luckily, there is a third alternative that combines the safety of the telescoping constructor pattern with the readability of the JavaBeans pattern. It is a form of the Builder pattern
    Questo è assolutamente valido, specialmente se l'oggetto deve essere immutabile. Ma richiede più codice per implementare il Builder (che tipicamente è una public nested class interna alla classe da gestire).
    Ultima modifica di andbin; 24-07-2016 a 17:43
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #19
    Utente di HTML.it
    Registrato dal
    Jun 2016
    Messaggi
    18
    Quote Originariamente inviata da andbin Visualizza il messaggio
    E come l'hai scritto tu comunque è, tra l'altro, nel peggiore dei modi. Generalmente quando si usa questo pattern, l'assegnamento ai campi si fa solo nel costruttore più completo (quello con tutti i parametri) e gli altri costruttori fanno solo invocazioni this( .. ) invocando il costruttore con un parametro in più passandogli un valore predefinito (o passando più/tutti gli altri valori predefiniti).
    Quindi nel mio esempio come diventerebbe il codice se scritto da un purista? (non capisco come si possa assegnare i campi solo nel più completo nel caso in cui non si arriva ad esso)

    Al di là del "purismo" del codice che rispetto e mi affascina perchè sbiadisce la linea di confine con l'arte, tornando "terra terra" è tutta qui la funzione del this ? Non ha in java altre funzioni, corretto?

  10. #20
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,514
    ciao Vettel
    ti consiglio questo ilbro

    Programmazione di base e avanzata con Java Copertina flessibile – 27 mar 2014
    di Walter Savitch (Autore), D. Micucci (a cura di), F. Fiamberti (Traduttore)

    ti spiega tutto dalle basi a swing (utile appunto per fare applicazioni java desktop)


    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.