Nesne Yönelimli Yazılımın Temel Konseptleri

Örnekler Swift dilinde verilmiştir.

Nesne yönelimli yazılım kavramının tam olarak anlaşılması için 4 temel prensibin iyi anlaşılması gereklidir. Herhangi bir dil için de eğer bu prensipler sağlanamıyorsa o dil ile nesne yönelimli yazılım geliştirilemez demektir. Özetle bu prensipler şöyledir:

  • Soyutlama (Abstraction)
  • Sarmalama (Encapsulation)
  • Kalıtım (Inheritance)
  • Polimorfizm (Polymorphism)

Soyutlama

Yazılım tasarımı yaparken en önemli kısım bu soyutlamadır. Yazılım parçaları nesnelerden meydana gelir. Bu nesnelerin belli özellikleri vardır ve her nesne üzerine belli metodlar uygulanabilir. Daha açıklayıcı olabilmek için basit bir örnek vereyim. Starbucks adında bir sınıfımız olsun. Her nesne belli bir sınıfa aittir. Özellikler ve metodlar bu sınıf tanımında saklanır. Starbucks sınıfından bir nesne yaratalım ve adına latte koyalım. Genel olarak Starbucks sınıfında bulunabilecek özellikleri düşünelim: Alınan kahvelerle ilgili bilgileri tutacağına ve döndüreceğine göre, boyut, fiyat gibi temel özellikler başta olacak. Misafirler ekstra shot alabilir ya da uzun çekim isteyebilir. Önce aşağıdaki koda bir bakın isterseniz.

Burada Starbucks sınıfından latte ve mocha adında iki değişik nesne ürettik ve bu nesnelere çeşitli özellikler kazandırdık; latte sınıfı üzerine extraShotEkle() metodunu çalıştırdık ve fiyatHesapla() metoduyla fiyatlarını öğrendik.

Sarmalama

Aslında farkında olarak ya da olmadan kullandığımız bir özellik Sarmalama sınıfın özellik ve metodlarının kullanıcıdan gizlenmesi anlamında gelir. Bir sınıftan bir nesne oluşturduğumuzda bu nesne bağlı bulunduğu sınıfın özelliklerine sahip olacak ve üzerlerinde metodlar uygulanabilecektir. Ama Ancak ayrıntılar dışardan görünür olmayacaktır.

Biraz daha akla yatacak şekilde tarif etmek gerekirse: Yukarıdaki kodda extraShot adında bir özellik görüyorsunuz. Bu özellik dışarıdan müdahale edilerek değiştirilebilir değil. Yani extraShotEkle() metodu nasıl tanımlandıysa yalnızca içerde istendiği gibi müdahale edilebilir.

Kalıtım

Kalıtım yöntemiyle bir sınıftan yeni bir sınıf türeterek yeni özellikler ve metodlar ekleyebiliriz. Örneğin iOS uygulama geliştiricilerin sık kullandığı UIAlertViewController adında bir sınıf var. Bu sınıftan bir nesne oluşturduğumuzda o nesne o sınıfın bütün özelliklerine sahip olacak ama hep varsayılan özellikler. Biz kendi projemizde UIAlertViewController sınıfından yeni bir sınıf türetebiliriz ve farklı özellikler kazandırabiliriz.

Polimorfizm

Kalıtım konusunu kısa kesip örneğe burada devam etmek istedim. Yeni oluşturduğumuz sınıfa yeni özellikler verebiliriz demiştim. İşte bu iş de polimorfizm yani çok biçimlilik prensibini tanımlar. Yani varsayılan gibi değil de kendi istediğimiz gibi. Bütün projelerimizde kullanacağımız bize özel bir UIAlertViewController sınıfı oluşturabiliriz. Sonrasında nesneleri bu yeni sınıfımızdan oluştururuz. Aşağıdaki kodu incelerseniz Polimorfizm konusunu daha iyi anlamış olacaksınız.