Imparare a programmare con Java

Ambito delle variabili

Ogni variabile è disponibile (e accessibile) solo nel contesto in cui è stata dichiarata. Per determinare il contesto, fare riferimento ai segni di apertura e chiusura più vicini che circondano la dichiarazione. La maggior parte dei linguaggi di programmazione usa parentesi graffe ({}) per segnare l’inizio e la fine di un blocco di codice. Dai un’occhiata a questo esempio:

Ambito di una variabile

Non c’è bisogno di capire ogni bit di codice qui; basta concentrarsi sulle parentesi graffe. 🙂 Quando parliamo della disponibilità di una variabile all’interno di un contesto, ci riferiamo all’ambito. Qui, puoi vedere che la variabile root è stata dichiarata tra le due parentesi graffe cerchiate in viola. Lo scopo di quella variabile è tutto tra queste due parentesi graffe.

L’ambito di una variabile può essere locale e globale, a seconda di dove viene dichiarata una variabile. Una variabile globale può essere disponibile per tutte le classi e metodi all’interno di un programma, mentre una variabile locale potrebbe essere disponibile solo all’interno del metodo che si è dichiarato in:

Locale vs globale

Qui abbiamo ampliato il codice un po ‘ e esteso il nostro primo blocco di codice per includere un altro! Se tracci le linee viola, puoi vedere che le parentesi del primo blocco comprendono tutto il codice del secondo. Successivamente, puoi vedere che una nuova variabile, spy, è stata dichiarata all’interno dell’ambito locale verde.

Poiché la variabileroot è stata dichiarata nell’ambito globale, ciò significa che è accessibile a tutto ciò che si trova tra parentesi viola, incluso tutto ciò che è dichiarato nell’ambito locale. Nel secondo blocco di codice, puoi vedere una riga appena sotto la dichiarazione della variabile spia che utilizza root. E ‘ permesso!

Tuttavia, qualsiasi cosa si trovi nell’ambito locale non è disponibile per l’ambito globale o altri blocchi di codice locali. Vediamo un altro esempio:

Più ambiti

Qui abbiamo aggiunto un altro blocco di codice, che ha il suo ambito locale e la sua variabile, anotherSpy. Ora, controlla l’ultima riga nel nostro blocco variabile spia:

System.out.println(anotherSpy); // Error

Sembra che ci sia un errore! Questo perché sta cercando di usare la variabile anotherSpy. Ma non può perché anotherSpy non è né all’interno dell’ambito globale né nello stesso ambito locale. Ciò significa che questo blocco di codice non può accedervi. anotherSpy è disponibile solo nel blocco di codice in cui è stato dichiarato.

Lo stesso vale nella direzione opposta. Puoi vedere che anche l’ultima riga del nostro ultimo blocco di codice ha un errore:

System.out.println(spy); // Error

Qui, sta cercando di usare la variabile spy da un altro blocco di codice. Ma non può poiché spy non si trova nello stesso ambito del blocco di codice che sta cercando di usarlo.

Ambito variabile nelle classi

Quando si dichiara una classe, si applicano le stesse regole generali di scoping: ogni variabile è accessibile solo all’interno del suo blocco di dichiarazione. Proviamo con una classe unicorn:

Unicorn class

Proprio come nel nostro primo esempio, ci sono variabili di classe globali e locali. Esaminiamo in dettaglio:

  • Le variabili height e power sono campi della classe e sono accessibili ovunque all’interno della classe.

  • La variabileminutesToSleep è accessibile solo nell’ambito locale del blocco di codice in cui è dichiarato.

  • La variabileminutesToRun è accessibile solo nell’ambito locale del blocco di codice in cui è dichiarato.

L’ambito di una variabile limita la sua accessibilità per definizione. Tuttavia, i campi di classe sono accessibili al di fuori della classe e possono essere utilizzati da qualsiasi altro blocco di codice.

Nel nostro esempio, quelli sono heighte power. Se dichiariamo una variabile Unicorn, possiamo leggere o modificare quei valori:

Essere in grado di scherzare con le variabili di classe può avere gravi conseguenze. La buona notizia è – è possibile controllare che! Prima di verificare come, assicurati di esercitarti con l’ambito variabile.

Provalo tu stesso!

Controllo di accesso

Useremo l’idea del controllo di accesso implementando l’accesso limitato a una classe, un modulo o un file. Sai già cosa sono una classe e un file da quando abbiamo lavorato con loro!

Un modulo è un insieme di file sorgente correlati associati a un nome, come un framework. Un framework è un insieme di funzionalità raggruppate per un particolare contesto. Accelera il processo di sviluppo e fornisce indicazioni su come scrivere il codice.

Esistono numerosi framework forniti da ogni ambiente di sviluppo. Il fatto è che l’implementazione di tali framework è ben oltre ciò che gli sviluppatori che li utilizzano possono vedere e utilizzare. Ciò viene fatto limitando l’accesso ai dettagli dell’implementazione, noto anche come implementazione del controllo degli accessi.

livelli di Controllo

In Java, è necessario utilizzare una delle parole chiave per indicare un livello di controllo:

  • Pubblico: visibile al mondo e quindi il meno restrittive

  • Protetto: visibile al pacchetto e tutte le sue sottoclassi

  • il Pacchetto protetto: tipicamente visibili solo al pacchetto in cui si trovano (impostazioni predefinite)

  • Privato: accessibile solo nel contesto in cui sono definiti (all’interno della classe in cui si trova)

Mettere in atto queste restrizioni distinte rende lo sviluppo molto più semplice. Non devi preoccuparti di alcuna visibilità indesiderata della tua implementazione e, soprattutto, di modifiche indesiderate.

Posiziona una parola chiave adatta davanti alla dichiarazione correlata:

Quindi, se provi ad accedere ai membri privati dall’esterno della classe, ottieni errori:

I livelli di controllo possono essere assegnati sia agli elementi della classe che alle classi:

public class PublicClass {}private class PrivateClass {}

Oltre alla sicurezza, la specifica dei livelli di controllo per i membri della classe offre una migliore leggibilità. Quando uno sviluppatore sta preparando un file sorgente, è sempre chiaro quali elementi possono essere utilizzati esternamente.

Gerarchia di controllo

Un elemento può avere lo stesso livello di controllo o più restrittivo del suo elemento contenente:

Nell’esempio precedente, la classe viene dichiarata comepublic . Poiché la classe è l’elemento contenente, ciò significa che tutti gli elementi di quella classe possono avere lo stesso o minore livello di esposizione. In questo caso, include tutti i livelli.

Se si dichiara una classe private, i suoi elementi possono essere solo package-private o private:

 class PrivateClass { int internalProperty = 0; // automatically assigned package-private by default protected defaultProperty = true; // automatically assigned package-private public boolean publicProperty = true; // automatically converted to package-private private String fileprivateProperty = "Hello!"; //only available to the class private static void privateMethod() { }}

Nell’esempio precedente, abbiamo aggiunto un attributo senza un esplicito controllo di accesso di parola chiave. In questo scenario, per impostazione predefinita, assume il livello dell’elemento contenente. In questo caso, è la nostra classe, quindi assume il livello di PrivateClass.

Una classe di livello superiore non può essere contrassegnata come privata, ma impostandola come predefinita la metterà nel livello protetto dal pacchetto. Quando si dichiara una variabile di una classe, se il livello di controllo del contesto della dichiarazione è superiore a quello della classe, la variabile deve avere anche un livello di controllo esplicito. Dichiariamo una variabile FileprivateClass:

String a = PrivateClass(); // Errorprivate String b = PrivateClass(); // Okprivate String c = PrivateClass(); // Ok

Come puoi vedere, se il livello di accesso predefinito del contesto della variabile è superiore a una classe che stai assegnando ad essa, devi specificare esplicitamente il livello della variabile uguale o inferiore a quello della classe.

Sommario

In questo capitolo, hai imparato a conoscere l’accessibilità delle variabili:

  • Un ambito di una variabile è l’area del codice in cui è stata dichiarata.

  • L’ambito variabile generale si applica a tutti i blocchi di codice, incluse le classi.

  • Un altro modo necessario per controllare l’accesso a variabili e funzioni è l’utilizzo di livelli di controllo: pubblico, protetto, protetto da pacchetti e privato.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.