Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24
  1. #1

    [JAVA]Accedere indirettamente a variabili private

    Ciao a tutti!

    Vi espongo subito il mio problema, ho due classi:
    -Dipendente, che definisce (private) nome, cognome, indirizzo e ruolo e relativi metodi;
    -Programmatore, che estende Dipendente e definisce altre variabili e metodi.

    A compile-time, però, il compilatore mi emette due warning:
    codice:
    Programmatore.java:18: warning: The parameter cognome is never read
    	public int getMatricola(String cognome, String indirizzo) {
    	                               ^^^^^^^
    Programmatore.java:18: warning: The parameter indirizzo is never read
    	public int getMatricola(String cognome, String indirizzo) {
    Immagino che sia a causa dell'"invisibilità" delle due variabili "cognome" e "indirizzo" dichiarate private nell'altra classe (ho scoperto l'acqua calda, eh!?)..però, a livello teorico non c'è nessun modo in cui potrei accedervi, anche indirettamente accedendo ad un metodo della superclasse?
    Posto quì sotto le due classi:
    codice:
    public class Dipendente {
    
        private String nome;
        private String cognome;
        private String indirizzo;
        private String ruolo; 
    
         public Dipendente(String nome, String cognome, String indirizzo, String ruolo) { 
    		this.nome = nome;
    		this.cognome = cognome;
    		this.indirizzo = indirizzo;
    		this.ruolo = ruolo; 
        }
    
    	public Dipendente(String nome, String cognome) {
    		this.nome = nome;
    		this.cognome = cognome;
    	}
    
         public String getNome() { 
            return nome; 
        }
    
         public String getCognome() { 
            return cognome; 
        }
    
         public String getIndirizzo() { 
            return indirizzo; 
        }
    
         public String getRuolo() { 
            return ruolo; 
        }
    }
    Classe Programmatore:
    codice:
    /* Programmatore eredita variabili e metodi da Dipendente
    	nome, cognome, indirizzo, ruolo*/
    public class Programmatore extends Dipendente { 
    
        int matricola;	// Nuova variabile istanza 
        int pagaBase;	// Nuova variabile istanza
        int pagaOraria;	// Nuova variabile istanza
        int oreGiorno;	// Nuova variabile istanza
    
        static int nextMatricola = 1; 
        // Nuova variabile statica (di classe)
    
        public Programmatore(String nome, String cognome, String indirizzo, String ruolo) { 
    	super(nome, cognome, indirizzo, ruolo);
    	this.matricola = nextMatricola++;
    	}
    
        public int getMatricola(String cognome, String indirizzo) {
            return matricola; 
        }
    
        public int getPBase() {
            return pagaBase; 
        } 
    
        public int getPOraria() {
            return pagaOraria; 
        } 
    
        public int getOreGiorno() {
            return oreGiorno; 
        } 
    
        public void aumentaStipendio(int aumento) { 
            this.pagaOraria += aumento; 
        }
    }
    Vi ringrazio anticipatamente!!
    Gato

  2. #2
    il compilatore ti comunica solamente che i due parametri che passi non vengono utilizzati all'interno del metodo, sono quindi superflui

  3. #3
    Innanzitutto ti ringrazio per la risposta!!
    Comunque devo proprio aver sbagliato la sintassi allora, perchè quello che volevo fargli fare è "Avendo il cognome e l'indirizzo, se richiamo questo metodo mi devi ritornare la matricola" che sintassi devo usare secondo te?
    Gato

  4. #4
    nel tuo caso non è necessario specificare nome e cognome per recuperare la matricola in quanto, un'istanza della classe programmatore, conterrà i dati relativi ad uno ed un solo programmatore.

    Quando dichiari

    Programmatore svilupJava = new Programmatore(Mario, Rossi, ...);

    il metodo getMatricola() verrà invocato sull'istanza svilupJava che è relativa ad una specifica persona (in questo caso Mario Rossi).

    Osservando il codice si intuisce la tua necessità di assegnare una matricola ad ogni nuovo programmatore creato.
    Purtroppo c'è un problema, ogni volta che crei una nuova istanza, invocando il costruttore Programmatore(...), la matricola partirà sempre da 1 e di fatto non verrà riutilizzata da eventuali nuovi programmatori.

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da fpertegato
    Comunque devo proprio aver sbagliato la sintassi allora, perchè quello che volevo fargli fare è "Avendo il cognome e l'indirizzo, se richiamo questo metodo mi devi ritornare la matricola" che sintassi devo usare secondo te?
    La classe Dipendente va bene ed è corretta. La estensione a livello concettuale "un programmatore è-un dipendente" va ovviamente anche bene.

    In Programmatore però non si capisce bene perché getMatricola() (un getter) dovrebbe avere 2 parametri cognome/indirizzo. Non servirebbe .... getMatricola() dovrebbe solo restituire appunto la matricola e basta ....

    La tua espressione "Avendo il cognome e l'indirizzo, se richiamo questo metodo mi devi ritornare la matricola" non mi pare molto sensata. Quando istanzi un oggetto Programmatore, avrai al suo interno tutti i campi del Programmatore, più i campi forniti da Dipendente.

    Ripeto la questione: perché dovresti passare cognome/indirizzo a getMatricola() ??
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da andbin
    In Programmatore però non si capisce bene perché getMatricola() (un getter) dovrebbe avere 2 parametri cognome/indirizzo. Non servirebbe .... getMatricola() dovrebbe solo restituire appunto la matricola e basta ....
    penso sia un'infelice scelta di nomi, dettata anche da un po' di inesperienza sulla programmazione ad oggetti.
    Penso che in questo caso se proprio si vuole fare una ricerca su nome e cognome, si dovrebbe dare un
    codice:
    public String findMatr (String nome, String cognome){
        //.....
        return matricola; 
    }
    mantenendo ovviamente getter e setter in modo opportuno
    è ovvio che istanziando un programmatore non devo assegnare una nuova matricola, ma si desume che si ha già un'istanza corretta di persona, ergo bisogna controllare bene la logica con cui si assegnano le matricole

  7. #7
    Ok, che sia concettualmente giusto mi ravviva il sorriso, vuol dire che sto capendo qualcosa questa volta!
    Quello di cui invece non tenevo conto è che istanziando un oggetto Programmatore ne valorizzo ogni campo più tutti i campi della sua superclasse.

    Ora, andando avanti con il percorso, vorrei farmi un frame in modo da immettere pochi campi e farmi ritornare gli altri tramite questi, per esempio immetto una matricola e l'applicazione mi ritorna il resto dei campi, per quello ragionavo così, ma appunto non tenevo conto che istanziando un oggetto ne valorizzo ogni campo...credo che dovrò studiare ancora un bel po', eh??
    Gato

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da valia
    Penso che in questo caso se proprio si vuole fare una ricerca su nome e cognome, si dovrebbe dare un
    codice:
    public String findMatr (String nome, String cognome){
        //.....
        return matricola; 
    }
    Ma non c'è comunque una "collezione" di oggetti Programmatore. E non è comunque Programmatore (che "modella" appunto 1 programmatore) che dovrebbe a) averla e b) fare la ricerca.

    Se mi fate una classe es. InsiemeProgrammatori che contiene una "collezione" di oggetti Programmatore e volete fare un metodo che "da nome/cognome fa la ricerca e restituisce la sua matricola", allora .... dico di SÌ, ha senso.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Si, effettivamente andbin ha ragione, infatti credo che sarà la mia prossima mossa provare a creare una classe "Ufficio", ma credo che dovrò studiarci un po' su perchè (e anche su questo avete ragione) sono inesperto su Java, anzi, MOLTO inesperto!!

    Comunque credo che un'array o una serie di array di programmatori possa andare bene nella classe "Ufficio", giusto? O comincia a divenire troppo complessa da gestire?
    Gato

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    @andbin
    è chiaro che un eventuale metodo di find lo sposterei nell'aggregato, rimettilo nel contesto.
    Se non ti rendi perfettamente conto che un oggetto programmatore eredita il metodo getMatricola, probabile ti serve la matricola date le sue generalità e questa la vuoi come caratteristica dell'oggetto.

    In questo caso quel getMatricola è pensato appunto come find e se tanto lo volevi mettere
    (dimenticando la programmazione ad oggetti) andava usato così. Ovvio che avendo chiari i concetti di programmazione ad oggetti il find finisce nell'aggregato (giustamente) :-)

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.