Özellikleri:
* Bir nesnenin dış dünyadan soyutlanıp iç dünyasında işlem yapması
* Başka kod ve sınıflar tarafından kulanılmaması için koruyucu bariyer görevi görür.
*Kodları erişilmez hale getirir.
*Nesne tabanlı programlamanın temel ilkelerinden birisidir.
Not : Class içinde bir değişkene ulaşılmaması için private olarak tanımlamalsınız.
Encapsulation programcıya nesneleri koruma gücünü verir.
Örneğin emlak işlemleri yapan bir programımız olduğunu varsayalım. Emlak programında olması gereken bir ev nesnemiz bulunmaktadır. Bu ev nesnemizin kaç metrekare olduğu, kaç odasının olduğu, hangi semtte olduğu gibi bir sürü özelliği bulunmaktadır. Visual Studio yu açarak ConsoleApplication projesi açıyoruz. EmlakciApp ismini veriyoruz. Kodlarımız aşağıda ki gibi. Açıklama satırlarında açıklamaları yaptım.
EmlakciApp: Console Application
EmlakciLib: Class Libary
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EmlakciLib;
namespace EmlakciApp
{
class Program
{
static void Main(string[] args)
{
Ev evim = new Ev(); // ev class ından
yeni evim isminde türetiyoruz.
//Ev classının elemanlarına değer atıyoruz.
evim.Alan = 85; // burada -85 şeklinde negatif
bir değer girseydik kapsülleme özelliği sayesinde
//bize mutlak değerini alıp o şekilde değerini getirecekti.
evim.Semt = "Isparta-Cunur";
evim.Katno = 5;
evim.Odasayisi = 3;
Console.WriteLine( evim.EvBilgileriniGetir()); // EvBilgileriniGetir metodu string döndürdüğü için
Console.WriteLine metodu ile kullanılması gerekir.
Console.ReadKey();
}
}
}
Programımız main bloğundan itibaren çalışmaya başlayacak. Namaspace kısmında
using EmlakciLib; bu satır bulunmaktadır. Aslında ev class ını EmlakciApp projesinin içersinde de yazabilirdik fakat ayrı bir ClassLibary projesi açarak ev class ını oluşturduk ve özelliklerini kapsülledik. Class Libary projesi oluşturmak için Solution üzerinde sağ tıklayıp Add > New Project adımlarını takip ederek Windows C# menüsü altında Windows un altında Class Libary seçiyoruz ve Name ine EmlakciLib adını veriyoruz.
//Class Libary projemizin kodları.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace EmlakciLib
{
public class Ev // Class Libary
projesi. Çıktısı dll dosyasıdır. İstenilen projede add reference diyerek kullanılabilir.
{
// hiyerarşi
namespace, sınıf, metod
//field ları kapsüllemek için field e (örneğin semt in üzerine)
sağ tıklayıp refactor sonra encapsuolate field seçeneği ile otomatik oluşturabilir.
//Yada klavyeden control + r + e tuş kombinasyonları
private string semt;
public string Semt // Control + r + e kısayolu kullanarak semt alanını kapsülledik
{
get { return semt; }
set { semt = value; }
}
private int katno;
public int Katno // Control + r + e kısayolu kullanarak Katno alanını kapsülledik
{
get { return katno; }
set { katno = value;
}
}
private int
odasayisi;
public int Odasayisi // Control + r + e kısayolu kullanarak Odasayisi alanını kapsülledik
{
get { return
odasayisi; }
set { odasayisi = value;
}
}
private double alan; // Control + r + e kısayolu kullanarak alan alanını kapsülledik
public double Alan // privare double alan field nın properties i
{
get
{
return alan;
}
set // Burada sadece değerleri kontrol etmedik. Şart deyimleri ile loglama işlemlerinide yaptık
{
if (value
< 0)
{
// FileMode.Append eğer gösterilen dizinde
dosya yoksa hata verir. Dosyayı açar üzerine yazar
//OpenOrCreate olursa her seferinde aynı
dosyayı yolu gösterilen dizine üretir.
FileInfo fi = new FileInfo("c:/loglar.txt");
FileStream fs;
if (fi.Exists) //
Eğer dosya daha önce oluşmuşsa append ile aç
{
fs = new FileStream("c:/loglar.txt", FileMode.Append);
}
else // eğer açılmamışsa
dosya yazılan dizine verilen isim ve türde dosya oluştur.
{
fs = new FileStream("c:/loglar.txt", FileMode.Create);
}
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine("Alan bilgisi "
+ DateTime.Now + "
tarihinde hatalı girildi. Girilen değer: " + value);
sw.Flush();
fs.Close();
}
alan = Math.Abs(value); // mutlak değer fonksiyonu ile değerler pozitif yapılıyor
}
}
public string
EvBilgileriniGetir() // Dışarıya yani çağrıldığı yere
biçimlenmiş string olarak ev bilgilerini gönderen metod
{
return string.Format("Kat No : {0} \n Oda Sayisi: {0} \n Semt: {2} \n
Alan: {3}", katno, odasayisi, semt, alan);
}
}
}
1 yorum:
elinize saglık cok güzel anlatmıssınız cidden
Yorum Gönder