Bir önceki konumuzda Kapsülleme (Encapsulation)‘nin ne olduğunu , nasıl yapıldığını anlatmaya çalışmıtım, şimdi ise Kapsülleme konusunda farklı uygulamalar yaparak konuyu pekiştirelim
Yukarıdaki form tasarımını yapalım amacımız programımızda dikdörtgen isimli bir sınıf tanımlayıp bu sınıf üzerinden üretilen nesne ile alan hesaplaması yapacağız.
İlk olarak dikdörtgen için kısa ve uzun kenar,sonuc bilgilerini tutacak ve alan hesaplayan metot olan bir sınıf oluşturalım.
class kapsulleme { public int kisakenar; public int uzunkenar; public int sonuc; public int alan(int a, int b) { kisakenar = a; uzunkenar = b; sonuc = a * b; return sonuc; } }
Şimdi de hesapla butonuna tıklayıp kapsülleme sınıfından bir nesne türetip hesaplama işlemini yapalım.
kapsulleme dikdortgen = new kapsulleme(); int a= Convert.ToInt32(textBox1.Text); int b= Convert.ToInt32(textBox2.Text); label2.Text ="İşlem Sonucu="+ Convert.ToString(dikdortgen.alan(a,b));
programı çalıştırdınız hesaplamalar güzel ama kullanıcı negatif bir değer girerse
sonuç gördüğünüz gibi negatif yada kodlarımıza erişen biri sonucu değiştirmek isterse
dikdortgen.sonuc = 5; label2.Text = dikdortgen.sonuc.ToString();
ne yapacağız sonuçlar yanlış çıkıyor hep, işte tam bu anda yardımımıza kapsülleme yetişiyor hatırlayalım ne yapıyordu kapsülleme “Değişkenleri ve verileri hatalı kullanım ve dış etkenlerden koruyor” o zaman hemen sınıfımızı uygun hale getirelim kısa yolumuz vardı hatırlayalım değişkenin üzerinde sağ tıklayıp->Refactor->Encapsulate dememiz yeterli idi
bu işlemi üç değişken üzerinde de yapıp kodlarımızı aşağıdaki gibi düzenliyoruz
class kapsulleme { private int kisakenar; public int Kisakenar { get { return kisakenar; } set { if (value < 0) { kisakenar = Math.Abs(value); } else { kisakenar = value; } } }//www.bilisimogretmeni.com private int uzunkenar; public int Uzunkenar { get { return uzunkenar; } set { if (value < 0) { uzunkenar = Math.Abs(value); } else { uzunkenar = value; } } }//www.bilisimogretmeni.com private int sonuc; public int Sonuc { get { return sonuc; } } public int alan(int a, int b) { sonuc = a * b; return sonuc; } } private void button1_Click(object sender, EventArgs e) {//www.bilisimogretmeni.com kapsulleme dikdortgen = new kapsulleme(); dikdortgen.Kisakenar = (Convert.ToInt32(textBox1.Text)); dikdortgen.Uzunkenar = (Convert.ToInt32(textBox2.Text)); label2.Text = "İşlem Sonucu=" + Convert.ToString(dikdortgen.alan(dikdortgen.Kisakenar, dikdortgen.Uzunkenar)); }
ve sonuç artık negatif bir değer çıkamayacak ve Sonuc değişkenini de yalnızca okunabilir yaptığımız için dikdortgen.Sonuc = 5; gibi bir ifadeyle sonuç değiştirilemeyecek… Sonraki örnekte görüşmek üzere..