Kapsülleme (Encapsulation), ‘bir veya daha fazla öğeyi fiziksel veya mantıksal bir paket içinde gizleme işlemi’ olarak tanımlanır. Nesneye yönelik programlama dillerinin temel felsefesidir. Uygulama yazımında nesnenin ögelerinin ulaşımla ilgili izinlerini düzenleyerek daha daha tutarlı program yazma imkanı sunar.
Nesne yönelimli programlamada soyutlama ve kapsülleme ilişkili konulardır. Soyutlama, ilgili bilgilerin görünür olup olmamasını sağlar ve kapsülleme, bir programcının istenen soyutlama seviyesini gerçekleştirmesine imkan verir.
Kapsülleme erişim belirteçleri kullanılarak gerçekleştirilir. Bir erişim belirteci, bir sınıf üyesinin kapsamını ve görünürlüğünü tanımlar. C# aşağıdaki erişim belirteçleri destekler
C# Erişim Belirleyici
- public
- private
- protected
- internal
- protected internal
public erişim belirteci
public erişim belirteci, bir sınıfın üye değişkenlerini ve üye işlevlerini diğer işlevlere ve nesnelere görünür kılmasına verir. Herhangi bir public üye sınıf dışından erişilebilir kılınmış olur.
Dikdortgen sınıfı:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
class Dikdortgen { //üye değişkenler public double uzunluk; public double genislik; public double AlanGetir() { return uzunluk * genislik; } public void Yazdir() { Console.WriteLine("Uzunluk: {0}", uzunluk); Console.WriteLine("Genişlik: {0}", genislik); Console.WriteLine("Dikdörtgen Alanı: {0}", AlanGetir()); } } |
Main içinde Kullanımı:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class Program { static void Main(string[] args) { Dikdortgen sekil = new Dikdortgen(); sekil.uzunluk = 4; //public olduğu için sınıf dışından ulaşılabilir durumda sekil.genislik = 5; //public olduğu için sınıf dışından ulaşılabilir durumda sekil.Yazdir(); //public olduğu için sınıf dışından ulaşılabilir durumda Console.ReadLine(); } } |
Yukarıdaki örnekte neler oldu inceleyelim.
Üye değişkenleri uzunluk ve genişlik değişkenlerini public olarak ayarlayıp, Dikdortgen sınıfından sekil nesnesini türeterek genislik ve yukseklik değerlerini girdik. Yazdir metodunu public olarak ayarlardığımız için yine sekil.Yazdir() diyerek metodun çalıştırılmasını sağladık.
private erişim belirteci
private erişim belirteci, bir sınıfın üye değişkenlerini ve üye işlevlerini diğer işlevlerden ve nesnelerden gizlemesine izin verir. private yapılan öge sadece sınıf üyeleri tarafından erişilebilir. Sınıf dışından hiçbir şekilde private olan üyeye erişilemez.
Dikdortgen sınıfı:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
class Dikdortgen { //üye değişkenler private double uzunluk; private double genislik; public void Uzunluk(double sayi) { genislik = sayi; } public void Genislik(double sayi) { genislik = sayi; } public double AlanGetir() { return uzunluk * genislik; } public void Yazdir() { Console.WriteLine("Uzunluk: {0}", uzunluk); Console.WriteLine("Genişlik: {0}", genislik); Console.WriteLine("Alan: {0}", AlanGetir()); } } |
Main metodunun içi:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class Program { static void Main(string[] args) { Dikdortgen sekil = new Dikdortgen(); sekil.Uzunluk(4); // uzunluk üyesi private olduğu için public yaptığım Uzunluk() metodu ile erişim sağlıyorum. sekil.Genislik(5); //genislik üyesi private olduğu için public yaptığım Genislik() metodu ile erişim sağlıyorum. sekil.Yazdir(); //public olduğu için sınıf dışından ulaşılabilir durumda Console.ReadLine(); } } |
private belirteci olan üyelere sadece sınıf içinden ulaşılabilir demiştim. Burada double genislik ve double uzunluk üyelerine dışarıdan değer girebilmek için public olan Genislik() ve Uzunluk() üye metotlarını kullandım.
sekil nesnesini oluşturduktan sonra genişlik ve uzunluk değerini aktarmak için Genislik() ve Uzunluk() metotlarını kullanarak değerli aktarıp, Yazdır() metodu ile sonucu ekrana yazdırdım.
protected erişim belirteci
protected erişim belirteci, bir alt sınıfın, üye değişkenlerine ve temel sınıfının üye işlevlerine erişmesine izin verir. protected erişim belirteci kalıtım uygulanmasında yardımcı olur. Kendisini miras olarak kullanan her sınıfta protected üyelere ulaşım sağlanır.
Sekil class
1 2 3 4 5 6 |
class Sekil { protected double kenar1; } |
Kare class
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
class Kare:Sekil { public void Kenar(double kenar) { //kalıtım yolu ile kenar1 alındı kenar1 = kenar; } public double AlanGetir() { return kenar1 * kenar1; } public void Yazdir() { Console.WriteLine("Kenar: {0}", kenar1); Console.WriteLine("Alan: {0}", AlanGetir()); } } |
Dikdortgen class
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
class Dikdortgen:Sekil { //üye değişkenler //kalıtım yolu ile kenar1 alındı private double kenar2; public void Uzunluk(double sayi) { kenar1 = sayi; } public void Genislik(double sayi) { kenar2 = sayi; } public double AlanGetir() { return kenar1 * kenar2; } public void Yazdir() { Console.WriteLine("Uzunluk: {0}", kenar1); Console.WriteLine("Genişlik: {0}", kenar2); Console.WriteLine("Alan: {0}", AlanGetir()); } } |
Sekil classı kendisinde 1 tane kenar adında üye taşımaktadır. Kare ve Dikdortgen sınıfları bu Sekil sınıfını kalıtım yolu ile kendisine miras almaktadır. Mevcut örnekte Sekil sınıfındaki protected olan kenar1 değeri kendisini miras olarak alan Dikdortgen ve Kare sınıflarına miras yolu ile aktarılmıştır.
internal erişim belirteci
internal erişim belirteci, bir sınıfın üye değişkenlerini ve üye işlevlerini geçerli derlemedeki (DLL ve EXE) tüm sınıflardan erişilebilir olmasını sağlar. Geçerli derleme dışında erişim mümkün değildir. Başka bir deyişle, internal erişim belirticisine sahip herhangi bir üyeye uygulama içinde tanımlanan herhangi bir sınıf veya yöntemden erişilebilir.
Dikdortgen sınıfı:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
class Dikdortgen { //üye değişkenler internal double uzunluk; internal double genislik; public double AlanGetir() { return uzunluk * genislik; } public void Yazdir() { Console.WriteLine("Uzunluk: {0}", uzunluk); Console.WriteLine("Genişlik: {0}", genislik); Console.WriteLine("Dikdörtgen Alanı: {0}", AlanGetir()); } } |
Main içinde Kullanımı:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class Program { static void Main(string[] args) { Dikdortgen sekil = new Dikdortgen(); sekil.uzunluk = 4; sekil.genislik = 5; sekil.Yazdir(); Console.ReadLine(); } } |
Yukarıdaki örnekte bulunan genislik ve uzunluk geçerli derleme içinde bulunan bütün sınıflardan ulaşılabilir olmuştur.
protected internal erişim belirteci
protected internal erişim belirteci, bir sınıfın, aynı uygulama içindeki bir alt sınıf dışında, diğer sınıf nesnelerinden ve işlevlerinden üye değişkenlerini ve üye işlevlerini gizlemesine izin verir. Bu, kalıtımın uygulanması sırasında da kullanılır.
Varsayılan Erişim Belirteci
Bir sınıf ve üyesine her hangi bir erişim belirteci tanımlanmadıysa C# dilinde bu nesneler private olarak ayarlanır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
class Dikdortgen { //üye değişkenler internal double uzunluk; internal double genislik; public double AlanGetir() { return uzunluk * genislik; } void Yazdir() { Console.WriteLine("Uzunluk: {0}", uzunluk); Console.WriteLine("Genişlik: {0}", genislik); Console.WriteLine("Dikdörtgen Alanı: {0}", AlanGetir()); } } |
Yukarıdaki örnekte Yazdır() metoduna her hangi bir erişim belirteci tanımlanmamıştır. Bu Yazdır() metodunun varsayılan olarak private olduğunu gösterir.
Add Comment