In questo tutorial imparerai a conoscere l'incapsulamento e l'occultamento dei dati in Java con l'aiuto di esempi.
Java Encapsulation
L'incapsulamento è una delle caratteristiche chiave della programmazione orientata agli oggetti. L'incapsulamento si riferisce al raggruppamento di campi e metodi all'interno di una singola classe.
Impedisce alle classi esterne di accedere e modificare i campi e i metodi di una classe. Questo aiuta anche a ottenere l'occultamento dei dati .
Esempio 1: Java Encapsulation
class Area ( // fields to calculate area int length; int breadth; // constructor to initialize values Area(int length, int breadth) ( this.length = length; this.breadth = breadth; ) // method to calculate area public void getArea() ( int area = length * breadth; System.out.println("Area: " + area); ) ) class Main ( public static void main(String() args) ( // create object of Area // pass value of length and breadth Area rectangle = new Area(5, 6); rectangle.getArea(); ) )
Produzione
Area: 30
Nell'esempio sopra, abbiamo creato una classe denominata Area. Lo scopo principale di questa classe è calcolare l'area.
Per calcolare un'area, abbiamo bisogno di due variabili: la lunghezza e la larghezza e un metodo: getArea()
. Quindi, abbiamo raggruppato questi campi e metodi all'interno di una singola classe.
Qui è possibile accedere ai campi e ai metodi anche da altre classi. Quindi, questo non è nascondere i dati .
Questo è solo l' incapsulamento . Stiamo solo tenendo insieme codici simili.
Nota : le persone spesso considerano l'incapsulamento come un nascondiglio dei dati, ma non è del tutto vero.
L'incapsulamento si riferisce al raggruppamento di campi e metodi correlati insieme. Può essere utilizzato per nascondere i dati. L'incapsulamento in sé non significa nascondere i dati.
Perché l'incapsulamento?
- In Java, l'incapsulamento ci aiuta a mantenere uniti i campi e i metodi correlati, il che rende il nostro codice più pulito e facile da leggere.
- Aiuta a controllare i valori dei nostri campi dati. Per esempio,
class Person ( private int age; public void setAge(int age) ( if (age>= 0) ( this.age = age; ) ) )
Qui, stiamo rendendo variabile l'etàprivate
e applicando la logica all'interno delsetAge()
metodo. Ora, l'età non può essere negativa. - I metodi getter e setter forniscono l'accesso di sola lettura o di sola scrittura ai nostri campi di classe. Per esempio,
getName() // provides read-only access setName() // provides write-only access
- Aiuta a disaccoppiare i componenti di un sistema. Ad esempio, possiamo incapsulare il codice in più bundle.
Questi componenti disaccoppiati (bundle) possono essere sviluppati, testati e sottoposti a debug in modo indipendente e simultaneo. Inoltre, qualsiasi modifica in un particolare componente non ha alcun effetto su altri componenti. - Possiamo anche ottenere l'occultamento dei dati utilizzando l'incapsulamento. Nell'esempio precedente, se cambiamo la variabile di lunghezza e larghezza in privata, l'accesso a questi campi è limitato.
E sono tenuti nascosti alle classi esterne. Questo si chiama nascondere i dati .
Dati nascosti
L'occultamento dei dati è un modo per limitare l'accesso dei nostri membri dei dati nascondendo i dettagli di implementazione. L'incapsulamento fornisce anche un modo per nascondere i dati.
Possiamo usare i modificatori di accesso per ottenere l'occultamento dei dati. Per esempio,
Esempio 2: dati nascosti utilizzando l'identificatore privato
class Person ( // private field private int age; // getter method public int getAge() ( return age; ) // setter method public void setAge(int age) ( this.age = age; ) ) class Main ( public static void main(String() args) ( // create an object of Person Person p1 = new Person(); // change age using setter p1.setAge(24); // access age using getter System.out.println("My age is " + p1.getAge()); ) )
Produzione
La mia età è 24 anni
Nell'esempio sopra, abbiamo private
un'età del campo. Poiché lo è private
, non è possibile accedervi dall'esterno della classe.
Per accedere all'età, abbiamo utilizzato public
metodi: getAge()
e setAge()
. Questi metodi sono chiamati metodi getter e setter.
Rendere privata l'età ci ha permesso di limitare l'accesso non autorizzato dall'esterno della classe. Questo è nascondere i dati .
Se proviamo ad accedere al campo età dalla classe principale, otterremo un errore.
// error: age has private access in Person p1.age = 24;