Incapsulamento dei dati in C ++
Tutti i programmi C ++ sono composti dai seguenti due elementi fondamentali:
Program statements (code) - Questa è la parte di un programma che esegue le azioni e sono chiamate funzioni.
Program data - I dati sono le informazioni del programma che vengono influenzate dalle funzioni del programma.
L'incapsulamento è un concetto di programmazione orientata agli oggetti che lega insieme i dati e le funzioni che manipolano i dati e che li protegge da interferenze esterne e usi impropri. L'incapsulamento dei dati ha portato all'importante concetto di OOP didata hiding.
Data encapsulation è un meccanismo di raggruppamento dei dati e delle funzioni che li utilizzano e data abstraction è un meccanismo per esporre solo le interfacce e nascondere i dettagli di implementazione all'utente.
C ++ supporta le proprietà di incapsulamento e nascondere i dati attraverso la creazione di tipi definiti dall'utente, chiamati classes. Abbiamo già studiato che una classe può contenereprivate, protected e publicmembri. Per impostazione predefinita, tutti gli elementi definiti in una classe sono privati. Ad esempio:
class Box {
public:
double getVolume(void) {
return length * breadth * height;
}
private:
double length; // Length of a box
double breadth; // Breadth of a box
double height; // Height of a box
};
Le variabili lunghezza, larghezza e altezza sono private. Ciò significa che possono essere acceduti solo da altri membri della classe Box e non da qualsiasi altra parte del programma. Questo è un modo in cui si ottiene l'incapsulamento.
Per fare parti di una classe public (cioè accessibili ad altre parti del programma), è necessario dichiararli dopo il publicparola chiave. Tutte le variabili o le funzioni definite dopo l'identificatore pubblico sono accessibili da tutte le altre funzioni nel programma.
Rendere una classe amica di un'altra espone i dettagli di implementazione e riduce l'incapsulamento. L'ideale è mantenere il maggior numero possibile di dettagli di ciascuna classe nascosti a tutte le altre classi.
Esempio di incapsulamento dei dati
Qualsiasi programma C ++ in cui si implementa una classe con membri pubblici e privati è un esempio di incapsulamento e astrazione dei dati. Considera il seguente esempio:
#include <iostream>
using namespace std;
class Adder {
public:
// constructor
Adder(int i = 0) {
total = i;
}
// interface to outside world
void addNum(int number) {
total += number;
}
// interface to outside world
int getTotal() {
return total;
};
private:
// hidden data from outside world
int total;
};
int main() {
Adder a;
a.addNum(10);
a.addNum(20);
a.addNum(30);
cout << "Total " << a.getTotal() <<endl;
return 0;
}
Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:
Total 60
La classe sopra somma i numeri e restituisce la somma. I membri pubbliciaddNum e getTotal sono le interfacce con il mondo esterno e un utente deve conoscerle per usare la classe. Il membro privatototal è qualcosa che è nascosto al mondo esterno, ma è necessario affinché la classe funzioni correttamente.
Strategia di progettazione
La maggior parte di noi ha imparato a rendere privati i membri della classe per impostazione predefinita a meno che non sia davvero necessario esporli. È solo un beneencapsulation.
Questo viene applicato più frequentemente ai membri dati, ma si applica ugualmente a tutti i membri, comprese le funzioni virtuali.