Kapsülleme, gereksiz detayların sınıfın dışından gözükmesini engellemek.
Kendisine verilen sayıları toplayıp istediğimizde bize toplamı veren bir sınıf oluşturalım:
#include <iostream>
using namespace std;
class Accumulator {
public:
float value;
Accumulator() { value = 0; }
float get_value() { return value; }
void add(float inc) { value += inc; }
};
int main() {
Accumulator acc;
cout << acc.get_value() << endl; // 0
acc.add(5);
cout << acc.get_value() << endl; // 5
acc.add(5);
cout << acc.get_value() << endl; // 10
}Sınıfımız şuanlık doğru çalışıyor. Fakat bir problemimiz var:
int main() {
Accumulator acc;
cout << acc.get_value() << endl; // 0
acc.add(5);
cout << acc.get_value() << endl; // 5
acc.add(5);
cout << acc.get_value() << endl; // 10
acc.value = 2;
cout << acc.get_value() << endl; // 2
}Sınıfımızı kullanan birisi value değişkenine direk olarak erişebilir. Erişsin sorun ne?
Sorun sınıfın amacına uygun olmaması. Başta ne demiştik: “Kendisine verilen sayıları toplayıp istediğimizde bize toplamı veren bir sınıf oluşturalım”. Burada ise bu amacın dışına çıkan bir durum söz konusu. Kullanıcının bu değişkene erişmesini engelleyerek bu sorunu çözebiliriz:
#include <iostream>
using namespace std;
class Accumulator {
float value;
public:
Accumulator() { value = 0; }
float get_value() { return value; }
void add(float inc) { value += inc; }
};
int main() {
Accumulator acc;
cout << acc.get_value() << endl; // 0
acc.add(5);
cout << acc.get_value() << endl; // 5
acc.add(5);
cout << acc.get_value() << endl; // 10
//acc.value = 2; // hata
}
Leave a Reply