Visualizzazione dei risultati da 1 a 5 su 5

Discussione: public/private

  1. #1

    public/private

    Ciao a tutti, continuando nello studio di java (finalmente qualche programmuccio sono riuscito a realizzarlo) mi sono inbattutto su "public" e "private".

    Ho capito a cosa serve l'uno e l'altro.

    Mi domando però in quali casi pratici dovrei utilizzare il "private".

    Mi fate un esempio chiaro di quando dovrebbe essere utilizzato?

    grazie!
    Pol

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Il private va praticamente "sempre" utilizzato sulle variabili che dichiari nella classe (nei campi di istanza). Questo per proteggere i dati da accessi esterni (di norma si mettono a disposizione dei metodi getter/setter per ottenere e settare i dati).

    Il public viene utilizzato pochissimo, appunto perchè può essere visto al di fuori della classe.

  3. #3
    grazie per la risposta

    il fatto che siano accessibili anche fuori dalla classe cosa comporta?

    Mi puoi fare un esempio pratico?

    grazie
    Pol

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Comporta che ai dati si può assegnare qualsiasi valore, e che qualsiasi parte del programma può modificarli a suo piacimento.

    codice:
    class Conto {
      private double denaro;
      
      Conto(double denaro) {
        this.denaro = denaro;
      }
    
      double getDenaro() {
        return denaro;
      }
    
      void preleva(double soldi) {
        denaro -= soldi;
      }
    }
    Nel metodo preleva() puoi effettuare un controllo per verificare che non venga prelevata più di una determinata cifra, ad esempio.

    Lo stesso tipo di esempio può essere fatto ad esempio con una classe che modella un magazzino, e che contiene N pezzi. Puoi disporre un metodo che prelevi tot pezzi, ma verificare che non siano più di una determinata quantità.

    Questo è un principio della OOP, l'incapsulamento. Il fatto che siano liberamente modificabili "viola" ciò che è il principio di incapsulamento, oltre che permettere ad altri parti del codice di modificare i valori a caso (nella classe sopra, essendoci le variabili private, ciò non può avvenire). In pratica le variabili dall'esterno della classe non sono visibili.

    Inoltre trovo anche più comodo l'utilizzo dei metodi getter e setter. Te ne accorgerai programmando.

  5. #5
    se variabili e/o metodi sono accessibili fuori da una classe A, significa che fanno parte dell'interfaccia di quella classe verso le classi cliente (classi che utilizzano A).

    Nascondere variabili e metodi serve a realizzare l'incapsulamento
    che e' prassi di buona programmazione

    in particolare: e' buona norma che le varibili membro di una classe siano sempre private (a parte poche eccezioni come ad esempio le variabili final static che descrivono delle costanti)

    ecco un semplice esempio:
    codice:
    class A {
    public java.awt.Point point = new java.awt.Point();
    
    public void print(){
        System.out.println(point.toString);
      
    }
    }
    
    class ClienteDiA {
    
    public static void main(String argv[]){
         A temp = new A();
         temp.point = null;
         temp.print(); // errore NullPointerException a causa del mancato incapsulamento 
    }
    
    }
    Nota che ClienteDiA non e' tenuto a sapere che point non puo' essere posto uguale a null
    perche non conosce l'implementazione interna di print()

    tutto quello che conosce e' l'interfaccia pubblica di A, ovvero la signature dei suoi metodi pubblici e le sue variabili pubbliche

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.