Pagina 1 di 5 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 47

Discussione: Dubbio incapsulamento

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480

    Dubbio incapsulamento

    Ciao a tutti
    vorrei sapere una cosa riguardo all'incapsulamento.
    Considero una classe public (es.Data) con dati privati e quindi scrivo i metodi get e set all'interno della classe in modo tale che vi posso accedere appunto tramite set e get.
    A questo punto, vado a settare i valori in un'altra classe e voglio utilizzare questi dati tramite il metodo get in un'altra classe ancora (es. classe dove c'è il main).
    La mia domanda è: in quale classe devo istanziare la prima classe (cioè quella che ha i dati privati ed i metodi set e get ) ?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da roquentin Visualizza il messaggio
    La mia domanda è: in quale classe devo istanziare la prima classe (cioè quella che ha i dati privati ed i metodi set e get ) ?
    Onestamente ... non ho capito il dubbio. L'incapsulamento è principalmente solo una tecnica, non è un qualcosa di imposto o controllato da un linguaggio (perlomeno parlando in generale). Semmai a seconda del linguaggio l'incapsulamento è possibile o meno in base a cosa il linguaggio offre riguardo il controllo della "visibilità" degli elementi.

    In "C" non ci sono le parole chiave public/protected/private. Tutto è implicitamente "pubblico". Se si ha un riferimento ad una variabile struct, chiunque può accederci e a tutti i suoi campi. Se si ha (es. da un header .h) la dichiarazione di una funzione e questa è poi effettivamente definita in un obj/lib linkato, chiunque la può invocare.

    In Java il controllo della visibilità è invece ben presente e possibile. Se una classe A ha accesso (ovvero ne ha visibilità) ad una classe B, allora può averne un riferimento. Se ha accesso al suo costruttore, la può istanziare e se ha accesso a campi/metodi, li può usare.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    Allora, io creo questa classe:
    codice:
    public class DbRadiazione {
        private String db;
        
    
        public void setDbRadiazione(String d) {
                this.db = d;
        }
    
        public String getDbRadiazione(){
            return db;
        }
    }
    poi faccio così in un'altra classe
    codice:
    public class ApriFile {
    
        public static void ApriFiles(File directory) throws FileNotFoundException, IOException {
            DbRadiazione Database = new DbRadiazione();
            FileReader f = new FileReader(directory + "\\Gennaio.txt");
            BufferedReader b = new BufferedReader(f);
            ArrayList<String> gennaio = new ArrayList<>();
    
            String d = b.readLine();                  /* legge riga 1 */
    
            System.out.println(d);
            Database.setDbRadiazione(d);
    
            String s = b.readLine();
    
            while (s != null) {
                gennaio.add(s);
                s = b.readLine();
    
            }
            for (String i : gennaio) {
                System.out.println(i);
    
            }
    
        }
    }
    ora voglio settare il contenuto in una jTextArea, tipo:
    codice:
    jTextArea.setText(Radiazione.getDbRadiazione());
    della classe principale, come posso fare? Utilizzo il metodo get ??
    Ultima modifica di roquentin; 11-09-2014 a 11:40

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da roquentin Visualizza il messaggio
    Utilizzo il metodo get ??
    Beh, ovviamente.


    P.S.: nomi di variabili e di metodi dovrebbero iniziare con la minuscola.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Quote Originariamente inviata da andbin Visualizza il messaggio
    P.S.: nomi di variabili e di metodi dovrebbero iniziare con la minuscola.
    Aggiungo: e avere un nome parlante...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    Ok ho fatto così:
    codice:
    public class DbRadiazione {
    
        private String dBaseradiazione;
    
        public String getdBaseradiazione() {
            return dBaseradiazione;
        }
    
        public void setdBaseradiazione(String dBaseradiazione) {
            this.dBaseradiazione = dBaseradiazione;
        }
    
        
    
    }

    poi in questa classe:
    codice:
    public class ApriFile {
    
        public static void apriFiles(File directory) throws FileNotFoundException, IOException {
            DbRadiazione database = new DbRadiazione();
            FileReader f = new FileReader(directory + "\\Gennaio.txt");
            BufferedReader b = new BufferedReader(f);
            ArrayList<String> gennaio = new ArrayList<>();
    
            String d = b.readLine();                  /* legge riga 1 */
            database.setdBaseradiazione(d);
            System.out.println(d);
    
            String s = b.readLine();
    
            while (s != null) {
                gennaio.add(s);
                s = b.readLine();
    
            }
            for (String i : gennaio) {
                System.out.println(i);
    
            }
    
        }
    }

    e poi nella classe dove c'è il main:

    codice:
    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
            File dir = new File("dirIniziale");
            jTextArea1.setText(jComboBox1.getSelectedItem().toString());
            elemento.setCitta(String.valueOf(jComboBox1.getSelectedItem()));
            jTextArea2.setText(elemento.getCitta());
    
            try {
                RicercaFile.findDirectory(dir, elemento.getCitta());
                jTextArea6.setText(database.getdBaseradiazione());
            } catch (IOException ex) {
                Logger.getLogger(PVEstimation.class.getName()).log(Level.SEVERE, null, ex);
            }
    
    
        }
    ma mi dice, in corrispondenza di
    codice:
    jTextArea6.setText(database.getdBaseradiazione());
    cannot find symbol database

  7. #7
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Ancora... è lo stesso problema dell'element dell'altra volta...

    DbRadiazione database = new DbRadiazione();

    è locale al metodo apriFiles (orrore: openFiles oppure apriFile, non un misto inguardabile) e pertanto è visibile solo al suo interno.
    Se vuoi usarla in altri punti mettila come campo e fai in modo che arrivi all'altra classe.

    Ripeto quello che avevo detto l'altra volta: il tuo design è piuttosto fumoso e ingarbugliato. Prendi un pezzo di carta, segnati le entità in gioco e le loro relazioni (chi usa cosa, chi è cosa ecc) e vedrai che ti sarà tutto più chiaro.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    A te non è ancora chiaro che classi diverse non sanno nulla l'una dell'altra.
    Se una classe A crea un oggetto x (e non lo dice a nessuno, non mette le altre classi in condizioni di accedervi), tutte le altre classi non lo sanno e non possono, ovviamente, usare tale oggetto "x", perchè non è nella loro visibilità.

    La tua classe ApriFile ha istanziato un oggetto... e non l'ha detto a nessuno. Quindi, nessuno potrà usare quell'oggetto, se non la classe ApriFile. Per di più, tale oggetto è stato dichiarato dentro ad un metodo, quindi, finita l'esecuzione di quel metodo, l'oggetto viene buttato via.
    Diverso sarebbe stato se quell'oggetto fosse stato dichiarato a livello di classe... la sua vita sarebbe legata alla vita della particolare istanza di quella classe.

    Secondo me devi tornare un attimo sul libro di testo e chiarirti per bene i concetti relativi alla visibilità degli oggetti.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    In modo molto molto molto banale: per poter usare un oggetto "x", una classe deve:

    - Dichiaralo e istanziarlo (quindi eseguire una new; questo sarà, appunto, una nuova istanza di cui solo lei è a conoscenza)

    oppure

    - Dichiararlo e farselo passare da un'altra classe (quindi prevedere un metodo che accetti tale oggetto come parametro; metodo che verrà invocato dalla classe che "detiene" quell'oggetto)

    oppure

    - (Dichiararlo e) andarselo a prendere da un altro oggetto; oggetto di cui lei è in possesso tramite uno dei due casi sopra citati.


    Ciao.
    Ultima modifica di LeleFT; 11-09-2014 a 13:16
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    480
    Scusate ma se io voglio accedere ad una variabile che si trova all'interno di un metodo private static ?
    Ultima modifica di roquentin; 11-09-2014 a 20:03

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 © 2025 vBulletin Solutions, Inc. All rights reserved.