CPP 045 – Encapsulation

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

}

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *