Part 2 Nesne Tabanlı Programlama Sınıf Üyeleri(Class Members)

C# dilinde sınıf üyeleri, bir sınıfın yapı taşlarını oluşturur ve sınıfın özelliklerini ve davranışlarını tanımlar. Özellikler genellikle sınıfın durumunu temsil ederken, davranışlar ise sınıfın işlevselliğini belirler. Özellikler genellikle alanlar (fields) veya özellikler (properties) şeklinde tanımlanırken, davranışlar ise metotlar (methods) olarak tanımlanır. Sınıf üyeleri, nesne tabanlı programlamanın temel prensiplerini gerçekleştirmeye yardımcı olur ve kodun daha organize ve anlaşılabilir olmasını sağlar.

Nesne tabanlı programlamada sınıf üyeleri, kodun tekrar kullanılabilirliğini artırır, bakımını kolaylaştırır ve kodun yeniden kullanılabilir olmasını sağlar. Ayrıca, sınıf üyeleri sayesinde kodun daha modüler bir şekilde yazılması ve geliştirilmesi mümkün olur. Bu blog yazısında, C# dilindeki sınıf üyelerini detaylı bir şekilde ele alacak ve örneklerle nasıl kullanıldıklarını göstereceğiz.

1. Field(Alan)

C# dilinde bir sınıf içinde bulunan değişkenlere “field” denir. Field’lar, bir sınıfın durumunu ve özelliklerini temsil eder. Bu değişkenler, genellikle sınıfın dışarıya açık (public), özel (private), korumalı (protected) veya dahili (internal) erişim belirleyicileriyle tanımlanabilir. Public field’lar, sınıfın dışından doğrudan erişilebilirken, private field’lar sadece sınıf içindeki diğer üyeler tarafından erişilebilir. Field’lar, bir sınıfın durumunu saklayan veri alanları olarak düşünülebilir. Örneğin, bir Araba sınıfında hız, renk veya marka gibi özellikler field olarak tanımlanabilir. Field’lar genellikle sınıfın durumunu temsil ettiği için sınıfın dışından erişilebilirliklerine dikkat edilmesi önemlidir. Bu dikkat, sınıfın kapsülleme prensiplerine uygunluğunu sağlar ve sınıfın iç yapısının dışarıdan etkilenmesini kontrol altında tutar.

class Car{
  public string brand;
  public string model;
  public int year;
    // Constructor (Yapıcı Metot)
    // Metotlar
 }

2. Property

property (özellik) C# ve diğer birçok nesne yönelimli programlama dilinde kullanılan bir kavramdır. Bir property, bir sınıfın dışarıya açık bir alanına erişmek veya onu değiştirmek için kullanılan bir tür üyedir. Field’lar (alanlar) genellikle sınıfın durumunu saklar ve doğrudan erişilebilirlerken, property’ler bu alanlara erişim sağlar ve genellikle alanların erişimini ve değiştirilmesini kontrol etmek için kullanılır. C# dilinde, property’ler genellikle get ve set erişim örnekleriyle tanımlanır.

  • Read-Write (Okuma-Yazma) Property:
    • Bu tür property’ler hem okunabilir (get accessor) hem de yazılabilir (set accessor) özelliktedir. Yani, property üzerinden değer okunabilir ve değiştirilebilir.
      • Örnek:
class Person{
 private string name;
 public string Name{
   get { return name; }
   set { name = value; }   
  }
  }
    // Kullanım
 Person person = new Person();
  person.Name = "John";  // Değer atama
 Console.WriteLine("Name: " + person.Name); // Değer okuma
  • Read-Only (Sadece Okunabilir) Property:
    • Bu tür property’ler sadece okunabilir (get accessor) özelliktedir. Yani, property üzerinden sadece değer okunabilir, değiştirilemez.
      • Örnek:
class Circle{
 private readonly double radius;
   public Circle(double radius){
      this.radius = radius;
   }
   public double Radius{
    get { return radius; }
  }
}
 // Kullanım
   Circle circle = new Circle(5.0);
   Console.WriteLine("Radius: " + circle.Radius); // Değer okuma<br>
  1. Write-Only (Sadece Yazılabilir) Property:
    • Bu tür property’ler sadece yazılabilir (set accessor) özelliktedir. Yani, property üzerinden sadece değer atanabilir, okunamaz.
    • Bu tür property’ler daha az kullanılır, çünkü genellikle bir değeri okuma ihtiyacı daha yaygındır.
    • Örnek: public int Age { set; }
class Printer{
   private string documentToPrint;
   public string DocumentToPrint{
   set { documentToPrint = value; }
   }
   public void PrintDocument(){
    Console.WriteLine("Printing: " + documentToPrint);
  }
}
      // Kullanım
  Printer printer = new Printer();
  printer.DocumentToPrint = "Hello, World!";    // Değer atama
  printer.PrintDocument(); // Yazdırma

Encapsulation

Encapsulation, bir nesnenin iç durumunun dışarıdan erişime kapalı olması ve sadece belirli erişimörnekleri (get, set gibi) aracılığıyla erişilebilir olması prensibidir. Bu prensip, bir nesnenin iç durumunun güvenliğini ve tutarlılığını sağlar. Property’ler, bu encapsulation prensibini destekleyen önemli bir mekanizmadır.

Property’ler, nesne alanlarına (fields) erişimi kontrol etmek ve gerektiğinde bu erişimlere özel bir davranış sağlamak için kullanılır. Bu sayede, nesnenin iç durumunun doğrudan erişime açık olmasını önlerken, alanların (fields) değerlerinin kontrol altında tutulmasını sağlar.

Örneğin, bir sınıfta age adında bir alan bulunabilir. Ancak, doğrudan bu alana erişilmesi encapsulation prensibine aykırı olabilir çünkü bu durum nesnenin iç durumunun kontrolsüz bir şekilde değiştirilmesine yol açabilir. Bunun yerine, age alanına erişimi kontrol etmek ve belirli kuralları uygulamak için bir property (Age) tanımlanabilir. Bu property, değer atama ve okuma işlemlerini kontrol ederek, nesnenin iç durumunu korur ve tutarlılığını sağlar.

Property’ler ayrıca, nesnenin iç temsiline (implementation) ilişkin ayrıntıları gizleyerek, dış dünyaya sadece gerekli bilgileri sunma prensibini de destekler. Bu, bir sınıfın dış dünyaya sadece belirli bir arayüz sağlaması ve iç detaylarını gizlemesi demektir. Bu da, kodun daha modüler, esnek ve bakımı kolay olmasını sağlar.

Sonuç olarak, property’ler, encapsulation prensibini destekleyerek, nesnelerin iç durumunu güvenli bir şekilde kontrol etmeyi ve sadece gerekli bilgileri dış dünyaya sunmayı sağlar. Bu da, yazılımın daha güvenli, tutarlı ve bakımı kolay olmasını sağlar.

Neden Encapsulation önemli bir örnek ile açıklayalım:

Düşünün ki bir otel odası rezervasyon sistemi yazıyorsunuz. Her bir oda için bir sınıf oluşturmayı düşünüyorsunuz. Oda sınıfınızda kapasite adında bir alan (field) bulunuyor. Bu alan, odanın maksimum kişi kapasitesini temsil ediyor.

Ancak, kapasite alanına doğrudan erişimi istemiyoruz çünkü bu durum odanın maksimum kapasitesinin yanlışlıkla değiştirilmesine veya uygun olmayan bir değer atanmasına yol açabilir. Örneğin, odanın maksimum kapasitesinin 2 olduğunu varsayalım. Eğer bu alana dışarıdan erişilebilir ve değeri değiştirilebilirse, bir hata olasılığı artar. Örneğin, yanlışlıkla bir başka değer atanabilir ve oda kapasitesi olarak negatif bir sayı veya sıfır atanabilir. Bu durum, rezervasyon sisteminin istenmeyen sonuçlara yol açmasına neden olabilir.

Bu yüzden, encapsulation prensibini kullanarak kapasite alanına dışarıdan doğrudan erişim yerine, bir property kullanırız. Bu property, sadece uygun değerler atanmasına ve odanın maksimum kapasitesinin güvenli bir şekilde kontrol edilmesine izin verir. Bu sayede, odanın iç durumu korunur ve hatalı atamalar önlenir.

Aynı şekilde, diğer odalar için de benzer durumlar geçerlidir. Her bir oda için maksimum kapasite alanının dışarıdan doğrudan erişilebilmesi yerine, bu alanlara güvenli bir şekilde erişimi kontrol eden ve hatalı atamaları önleyen property’ler kullanılır. Bu, rezervasyon sisteminin güvenliği ve tutarlılığı açısından önemlidir.

3.Method

bir sınıf içinde tanımlanan metotlar, o sınıfa ait işlevselliği barındıran kod bloklarıdır. Metotlar, belirli bir işi gerçekleştiren ve gerektiğinde çağrılabilecek olan kod parçalarıdır. Nesne tabanlı programlamada, metotlar genellikle bir nesnenin davranışlarını tanımlar ve o nesne üzerinde çeşitli işlemleri gerçekleştirir.

İşte metotların bazı özellikleri ve ne işe yaradığı hakkında daha fazla bilgi:

  1. İşlevsellik: Metotlar, bir sınıfa özgü işlevselliği tanımlar. Bu işlevsellik, sınıfın dış dünya ile nasıl etkileşime geçeceğini belirler. Örneğin, bir Araba sınıfında “startEngine” ve “stopEngine” gibi metotlar olabilir. Bu metotlar, arabayı çalıştırma ve durdurma işlemlerini gerçekleştirir.
  2. Parametreler: Metotlar genellikle girdi alabilir. Bu girdiler, metotun işlevselliğini etkileyebilir veya metotun çalışma şeklini değiştirebilir. Örneğin, “add” metodu bir toplama işlemi gerçekleştirirken, aldığı parametreler sayesinde farklı sayılar üzerinde işlem yapabilir.
  3. Dönüş Değeri: Metotlar genellikle bir değer döndürebilir. Bu değer, metotun gerçekleştirdiği işlem sonucunu veya hesaplanan bir değeri temsil edebilir. Örneğin, “calculateArea” metodu bir alan hesaplaması gerçekleştirir ve bu hesaplanan alan değerini döndürebilir.
  4. Kapsülleme: Metotlar, bir sınıfın iç detaylarını gizleyerek kapsülleme prensibini destekler. Yani, metotlar aracılığıyla sınıfın dış dünya ile etkileşimi sağlanırken, sınıfın iç yapısı dışarıya gizlenir. Bu, kodun daha modüler, esnek ve güvenli olmasını sağlar.
  5. Çağrılar: Metotlar, sınıf dışından çağrılabilir ve kullanılabilir. Bu, bir nesnenin belirli işlevselliğini başka kod parçaları tarafından kullanılmasını sağlar. Örneğin, Araba sınıfındaki “startEngine” metodu, başka bir kod parçası tarafından arabayı çalıştırmak için çağrılabilir.

Bu özellikler sayesinde, metotlar nesne tabanlı programlamada önemli bir rol oynar ve bir sınıfın davranışlarını tanımlamak için kullanılır.

this Keywordu’nedir? ne işe yarar?

C# dilinde “this” keyword’u, bir sınıfın kendi örneklerine (instance) erişmek için kullanılır. Bu keyword, özellikle sınıfın içinde bulunduğu kapsamda bulunan alanlara ve metotlara referans vermek için kullanılır. “this” keyword’u, aynı isimde farklı kapsamlarda bulunan değişkenlerin veya metodların ayırt edilmesini sağlar.

İşlevleri şunlardır:

  1. Sınıfın Alanlarına Erişim: Sınıf içinde bulunan bir metot veya yapıcı (constructor) içinde, alanların (fields) isimleri metot parametreleriyle veya yerel değişkenlerle çakışabilir. Bu durumda, “this” keyword’u kullanılarak sınıfın alanlarına erişilir. Örneğin:
public class MyClass{
private int myField;
 public void SetField(int myField){
  this.myField = myField; // "this" keyword'u, sınıfın alanına erişmek için kullanılır
   }
}

  1. Yapıcı (Constructor) Çağrısı: Bir sınıfın yapıcı metotları içinde, aynı sınıfın farklı yapıcılarını çağırmak için “this” keyword’u kullanılabilir. Bu, tekrarlanan kodu önler ve kodun daha temiz ve sade olmasını sağlar. Örneğin:
public class MyClass{
 private int myField;
  public MyClass(int myField) {
  this.myField = myField; // Birinci yapıcıyı çağırmak
  }
  public MyClass() : this(0) //İkinci yapıcıyı çağırırken birinci yapıcıyı çağırmak
  {    
  // Başka işlemler...
  }
}
  1. Nesne Yönlendirme: Bir sınıfın bir metodu, o sınıfın başka bir metodunu çağırabilir. Bu durumda, “this” keyword’u kullanılarak aynı sınıfın başka bir metodu çağırılır. Örneğin:
public class MyClass{
   public void Method1(){
  // Başka işlemler...
   }
   public void Method2(){
    this.Method1(); // Aynı sınıfın başka bir metodu çağırılıyor
  }
}

Bu örneklerde “this” keyword’u, sınıfın kendi örneklerine erişmek için kullanılmıştır. Bu şekilde, sınıf içindeki alanlara ve metotlara referans vermek ve kodun daha açık ve anlaşılabilir olmasını sağlamak mümkün olur.

1 Comment

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir