Partial Class (Parçalı Sınıf)

Eyl 08, 2013

Parçalı sınıflar Object Oriented (Nesne Tabanlı) programlamanın temelini oluşturan sınıfların parçalanmasıyla oluşmaktadır. .NET teknolojisi de dahil olmak üzere birçok teknoloji tarafından desteklenen parçalı sınıflar;

  • Büyük sınıf dosyalarını parçalama
  • Mantıksal katmanlama (veritabanı ve sınıf işlemlerini ayrıştırma gibi)
  • Öznitelik (attribute) ve metod ayrıştırma
  • Aynı sınıf üzerinde farklı yazılımcılara çalışma imkanı sağlama gibi birçok işlemde kullanılır.

.NET, parçalı sınıfları çoğunlukla sistem ile yazılım geliştiricinin çalışma alanlarını ayırmak için kullanılır. Bu nedenle .NET sistem tarafından oluşturulan ve yazılım geliştiricinin üzerinde işlem yapabileceği sınıfları parçalı olarak tanımlamaktadır. Örneğin; ASP.NET, İnternet sayfalarını oluştururken sayfaya ait sınıfı taşıyacak iki adet kod dosyası oluşturur. Üzerlerindeki sınıf parçalı olarak tanımlanan bu dosyalardan biri sistemin diğeri ise yazılım geliştiricinin düzenlemeleri için ayrılmıştır.

Parçalı sınıflar fiziksel olarak birden çok dosyada var olabilmektedirler. Ancak bu dosyalar derlenme anında, derleyici  tarafından birleştirilerek mantıksal olarak tek bir dosya haline gelmektedir. Böylece sınıf bir bütün halini alır. Bu birleştirme işlemi derleme zamanında gerçekleştirildiği için yazılım üzerine hiçbir olumsuz etki yaratmaz.

Uygulama:

Bu uygulamada C# dili kullanılarak Ogrenci sınıfı üzerinde öznitelikleri ve metotları ayırmak adına parçalı sınıflar kullanılmıştır. Bu amaçla parçalı sınıf barındıran iki adet dosya oluşturulmuştur:

  • Ogrenci.Oznitelik Dosyası
    Bu dosya üzerinde Ogrenci sınıfının öznitelikleri ve özniteliklerle ilişkili atama (set) ve çekme (get) metotları tanımlanmıştır. Dosyanın içeriği aşağıdaki gibidir: 

partial class Ogrenci
{
     private string _numara;
     private string _ad;
     private List<float> _lNot;
     private float _ortalama;

     public string Numara
     {
          get { return this._numara; }
          set { this._numara = value; }
     }

     public string Ad
     {
          get { return this._ad; }
          set { this._ad = value; }
     }

     public float Ortalama
     {
          get { return this._ortalama; }
     }
}

  • Ogrenci.Metod Dosyası
    Ogrenci.Metod dosyası Ogrenci sınıfının metotlarını barındırmaktadır. Dosyanın içeriği aşağıdaki gibidir:

partial class Ogrenci
{
     public Ogrenci()
     {
          this._lNot = new List<float>();
     }

     public Ogrenci(string numara, string ad) : this()
     {
          this.Numara = numara;
          this.Ad = ad;
     }

     public void NotEkle(float not)
     {
          this._lNot.Add(not);
          this.OrtalamaGuncelle();
     }

     public void NotCikar(float not)
     {
          this._lNot.Remove(not);
          this.OrtalamaGuncelle();
     }

     private void OrtalamaGuncelle()
     {
          float toplam = 0;
          foreach (float not in this._lNot)
               toplam += not;

          this._ortalama = toplam / this._lNot.Count;
     }
}

 

Ana programda sınıf üzerindeki tüm öznitelikler ve metodlar farklı dosyalarda olsalar dahi sorunsuz olarak kullanılabilmektedir. Sınıf üzerinden çeşitli işlemler yapan ana program aşağıdaki gibidir:

class Program;
{
     static void Main(string[] args)
     {
          Ogrenci yeniKayit = new Ogrenci("999999999", "Test Ogrenci");

          yeniKayit.NotEkle(80);
          yeniKayit.NotEkle(60);
          yeniKayit.NotCikar(60);

          Console.WriteLine("Ogrenci  : {0} - {1}", yeniKayit.Numara, yeniKayit.Ad);
          Console.WriteLine("Ortalama : {0}", yeniKayit.Ortalama);
     }
}