6 Aralık 2018 Perşembe

Güle güle, Nesne Yönelimli Programlama

Onlarca yıl boyunca Object Oriented dillerinde programlama yapıyorum. Kullandığım ilk OO dili C++  ve sonra Smalltalk ve sonunda .NET ve Java idi.

Kalıtım, Kapsülleme ve Polimorfizm'in faydalarından yararlanmak için gung-ho'daydım.

Bu yeni ve heyecan verici manzarada benimle gelenlerin kazandığı bilgeliği yeniden kullanma ve yeniden kullanma vaadini kazanmaya hevesliydim.Gerçek dünyadaki nesnelerini Sınıflarına ayırma düşüncesinde heyecanımı tutamıyordum ve tüm dünyanın düzgün bir şekilde yerine oturmasını bekledim.

İlk bakışta Kalıtım, Nesne Odaklı Paradigmanın en büyük yararı gibi görünüyor. Yeni hiyerarşiye örnek olarak gösterilmiş olan şekil hiyerarşilerinin tüm basit örnekleri mantıklı görünmektedir.

Sınıf Hiyerarşileri oluşturmaya ve kod yazmaya başladım.O gün, varolan bir sınıftan miras kalan Reuse'nin vaadinde bulunmaya hazır olduğumda asla unutamayacağım. Beklediğim an geldi.Yeni bir proje geldi ve son projemde çok sevdiğim Sınıf'a geri döndüm.Projenin yapıtaşı  yeniden kullanmaktı. Tek yapmam gereken şey bu sınıfı diğer projeden almak ve kullanmak.Eh… aslında… sadece bu Sınıf değil. Ebeveyn sınıfına ihtiyacımız olacak. Ayrıca ebeveynin ebeveyine de ihtiyacımız var gibi görünüyor ... Ve sonra… Ebeveynlerine tümüne ihtiyacımız var. Bunu hallediyorum. Sorun değil.Bu bir nevi insandan başlayıp Memelilere doğru bir geri dönüştü.
 Şimdi derlenmeyecek. Niye ya?? Oh, anladım… Bu nesne diğer nesneyi içerir. O yüzden buna da ihtiyacım olacak. Sorun değil. Sadece o nesneye ihtiyacım yok. Nesnenin ebeveyne ve ebeveyne ait ebeveyine ve buna dahil olan her nesneye ve ebeveynlerinin, ebeveynlerinin, ebeveynlerinin ve ebeveynlerinin ...
Erlang’ın yaratıcısı Joe Armstrong’un büyük bir teklifi var:

Nesne yönelimli dillerle ilgili sorun, yanlarında taşıdıkları tüm bu örtük ortamı ele geçirmeleridir. Muz istiyordun ama elinizde olan şey muzu ve bütün ormanı tutan bir gorildi.Çok derin olan hiyerarşileri oluşturmamakla bu sorunu çözebilirim. Ama Miras, Yeniden Kullanmanın anahtarıysa, o mekanizmaya koyduğum herhangi bir sınır, yeniden kullanmanın faydalarını kesinlikle sınırlayacaktır. Daha sonra bu işlemin ne kadar doğru olduğunu  sorgulamaya başlamıştım.Bir sınıf için bütün nesneleri çekmeye çalışıyorduk.
Bir sınıfı çağırmak, bir kişinin soyağacındaki en büyük dedesini çağırmak gibiydi. 

Class PoweredDevice {
}
Class Scanner inherits from PoweredDevice {
  function start() {
  }
}
Class Printer inherits from PoweredDevice {
  function start() {
  }
}
Class Copier inherits from Scanner, Printer {
}
Hem Scanner sınıfının hem de Yazıcı sınıfının başlangıç ​​adı verilen bir işlevi gerçekleştirdiğine dikkat edin.Peki, Copier sınıfı hangi başlatma işlevini devralır? Tarayıcı mı? Yazıcı mı? İkisi de olamaz.Nesne yönelimli programlama beklentileri karşılayamıyor artık, görevlerine  ve bilinenlere sadık değil.

Hiç yorum yok:

Yorum Gönder