Anasayfa / Teknik Eğitimler / Nesne Tabanlı Programlama ve Soyutlama(Abstraction)

Nesne Tabanlı Programlama ve Soyutlama(Abstraction)

Nesne tabanlı programlama (object oriented programming), kullanıcı ara yüzü olan uygulamalara duyulan ihtiyaç ile birlikte ortay açıkmış bir yaklaşımlar bütünüdür. Temel amacı “günlük hayatımızdaki nesne ve kavramların” yazılım dili içerisinde modellenmesine olanak tanımasıdır.

Bugün geldiğimiz nokta; elimizdeki sadece toplama yapabilen bir işlemci ve binary veri depolayabilen bir bellek ile gerçek hayattaki nesne ve kavramları tarif edebilme seviyesindedir.

OOP destekleyen C# ve Java gibi yazılım dilleri, verileri bellek üzerine öbekler halinde yazıp referansı ile okuyabilme yeteneğine sahiptir.

public class Ürün
{
public string Ad { get; set; }
public decimal Fiyat { get; set; }
}

C# dilinde yazılmış olan yukarıdaki kod parçası, basitçe bir ürüne ait bilgileri RAM’e yerleştirmede ve okumada kullanılabilir. Yani bir nesnenin tarifi yazılımsal olarak modellenmiş ve kullanılabilir haldedir.

Bu noktadan sonra bazı ihtiyaçlar belirmeye başlamıştır; Günlük hayattaki soyut kavramların modellenmesi nasıl olmalıdır? Soyut kavramların yazılımın işleyişine olumsuz etkisi nasıl engellenebilir?

Bu durumu şu örnek senaryo ile açıklamaya çalışayım;

Bir markete girdiğimizde;

  • İçerisi Ürünler ile doludur.
  • İnsanlar sepetlerine çeşitli ürünler atarlar.
  • Çıkarken sepetlerindeki ürünlerin ödemesini yaparlar.
  1. olgular geçerlidir.

Ancak

  • “Bana şuradan iki adet ürün verebilir misiniz?”
  • “Tüh bir kilo ürün alacaktım unuttum”
  1. olgular için Ürün kavramı soyutlaşır.

Aynı durum yazılım içinde de geçerlidir. Bazı nesnelerin somut olarak kullanılamaması gerekir. Yukarıdaki cümleleri günlük hayatta kullanamamamız gibi yazılım içinde de kullanılması engellenmelidir.

Bu duruma OOP Abstraction yaklaşımının getirdiği çözümü inceleyelim;

 

 

public abstract class Ürün
{
public string Adet { get; set; }
public decimal Fiyat { get; set; }
}

public class Ekmek : Ürün
{

}

public class Ketçap : Ürün
{
public DateTime SonKullanmaTarihi { get; set; }
}

 

Ürün class’ı abstract kelimesi ile define edildiği için instance’ları üretilemeyecek ama Ürün class’ından miras alınarak define edilen Ekmek ve Ketçap classlarının instance’ları oluşturulabilecektir. Bu sayede kod içinde sepete Ürün atmak mümkün olmayacak, sadece Ekmek ve Ketçap atabiliyor olacağız. Bu da yazılımımızın sağlığının sağlamlığını garanti etmiş olacaktır.

Şimdi sepetimizin nasıl olduğuna bakalım;

var sepet = new List<Ürün>();

Görüldüğü gibi sepet isimli instance’ımız içine Ürün tipli instance’lar koyulabilen bir listedir ve içine sadece Ekmek ve Ketçap koyabileceğiz.

sepet.Add(new Ürün() { Adet = 1, Fiyat = 1.0m  }); //hata!

Mantıken hatalı olan bu ifadeyi, Ürün class’ını abstract olarak define ederek yazılımsal olarak kullanılamamasını sağladık. Bununla birlikte aşağıdaki ifadeler kullanılabilir ve mantıklı olacaktır;

sepet.Add(new Ekmek() { Adet = 1, Fiyat = 1.0m  });
sepet.Add(new Ketçap() { Adet = 1, Fiyat = 4.3m  });

 

Bu örnekteki classlar pratikte pek işlevsel değildir, sadece abstract kavramının rahat anlaşılması amacıyla oluşturulmuştur. Bunun yanında frameworkler içinde bu yapıda birçok class mevcuttur. Örneğin .Net Framework içindeki veri akış denetimini sağlamak için oluşturulmuş Stream classı abstract’tır. Veri akışının networkten, dosya sisteminden ya da bellekten vs. geldiği belli olmadan Stream classının instance’ının oluşturulmasının bir anlamı yoktur. Bunun yerine Stream classından miras alınarak tasarlanmış NetworkStream, FileStream ve MemoryStream classları tasarlanmıştır.

Hakkında bilisimegitim

Ayrıca Kontrol Edin

Mimarların Bilmesi Gereken Programlar

Mimarların Bilmesi Gereken Programlar

Ülkemizde hizmet veren pek çok devlet ve özel üniversite bünyesinde, fakültede okutulan bölümlerden birisi de …

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir