Modülerlik: Nesne-Merkezli ve Prosedürel Yaklaşım

Nesne-merkezli yaklaşımların, daha modüler dolayısıyla da daha basit ve anlaşılır yapılar üretmeye yatkın olduğu devamlı olarak söylenir. Fakat işin teorisi başka, pratiği ise başkadır. Şahsen ben bu durumun teoride böyle olduğunu bilmeme ve yazdığım kodlarda daima bu durumu uygulamama rağmen, herkes bu konuda aynı şekilde düşünmeyebilir ya da düşünse bile farklı sebeplerden dolayı bu şekilde davranmayabilir. Java ile kod yazıp da her türlü günahı kodlarında işleyen Javacılarla devalı karşılasıyorum, özellikle de sabahları aynaya bakınca 🙂

Aynı konuda meraklı iki araştırmacı, Lisa K. Ferrett ve Jeff Offutt 2002 yılında “An Empirical Comparison of Modularity of Procedural and Object-oriented Software” başlıklı bir makale yayınladılar. Offutt bir akademisyendir ve 90’lı yıllarda ben de Yazılım Mühendisliği yükek lisansında kendisinden ders almıştım. Bu makalede anlamak istedikleri şey, hakikatten nesne-merkezli dillerle yazılan yazılımların daha modüler olup olmadıklarını anlamak. Bu amaçla Internet üzerinden erişilebilen yazılımlardan 38 tanesinin açık olan kaynak kodunu malzeme olarka kullanmışlar. Makalede anlatıklarına göre 10 Fortran, 10 C, 10 C++ ve 8 Java uygulamasının kaynak kodunu incelemişler. Bu dillerden ilk ikisi prosedürel, diğer ikisi ise nesne-merkezlidir.  Bu deneysel çalışmada iki şeyi test etmek istiyorlar:

  1. Hakikatten nesne-merkezli programlar daha ufak modüllere sahipler mi?
  2. Nesne-merkezli programların modüllerine geçilen parametre sayısı ortalama olarak prosedürel programlardan daha mı az?

Bu amaçla yazarlar toplam 38 programın kaynak kodlarını, fonksyonarın satır sayısı ve fonksiyonlara geçilen parametre sayısı cinsinden analize tabi tutmuşlar. Bakın makalede yer alan sonuç tablolarını aşağıda sizinle paylaşıyorum:

Module Size

Yukarıdaki tablo, 4 dil içın ayrı ayrı olarak hazırlanmış ve bu dillerle yazılmış açık kaynak kodlu yazılımların, fonksiyon satır sayısı cinsinden analizlerini içeriyor. Yukarıdan da görebildiğiniz gibi ortalama sonuçlar söyle: Fortran: 44.6, C: 32.6, C++: 33.4, Java: 7.9.

Bu ilk sonuç iki şeyi gösteriyor. İlki nesne-merkezli programların ortalama olarak prosedürel olanlara göre daha ufak metotlara sahiptir. Bu durum hem ortalamalardan hem de standart sapmalardan açıkça görülüyor. Lakin bir diğer, belki de daha çarpıcı olan sonuç, C++ ile yazılan programların modül uzunluğunun C ile yazılanlar civarında olması. Bu durum yazarların da dikaktini çekiyor. Yazarların ve benim de kanaatim odur ki malesef C++ programcıları sağlıklı bir nesne-merkezli programlama kültürüne sahip değilller, bu yüzden C++ programları sanki C ile yazılıyor. Java programlarının metot uzunluğunun diğer üç dilinkilerden çok daha kısa olması, Java ile yazılan yazılımların hakikatten daha sağlıklı olduklarını, en azından burada örneklenen programlar temelinde gösteriyor. Doğru olan da bu zaten. Metot uzunluğu uzerine burada yayınlanan bu yazıya bakabilirsiniz.

İkinci sonuç ise fonksiyonlara geçilen parametre sayısı üzerine. Dört dildeki sonuçlar şöyle:

Module Parameters

Modüllere geçilen parametre sayısın açısından da dört dilin ortalamaları şöyle çıkmış: Fortran: 3.6, C: 2.3, C++: 2.2, Java: 0.9.

Bu sonuçlar da aslında ilk maddede çıkan sonuçları destekliyor. Nesne-merkezli dillerle yazılan programlardaki fonksiyonlar, prosedürel programlama ile yazılanlara göre daha az parametre alıyor. Az parametre daha basit ve kullanışlı API anlamına geldiğinden az parametreli metotlar tercih edilir. C++’ın yukarıda bahsedilen problemi burada da var. Bu yüzden nesne-merkezli programları Java ile yazılanlar olarak kabul edersek, iki maddede de ciddi bir prosedürel-nesne-merkezli karşıtlığı göze çarpıyor.

Her iki analizde de prosedürel dillerin ölçumlerindeki start sapmanın, nesne-merkezli dillerdekinden, özellikle de Java’nınkinden yüksek olduğuna da dikkat çekmek isterim. Bu durum Javacıların daha standart kod yazdıklarının bir göstergesidir.

Bu çalışma deneysel bir çalışma. Bu yüzden de doğruluğu sadece bu çalışmada ele alınan programlarla sınırlı. Java ile kötü yazılmış kodlar bulabileceğimiz gibi Fortran ile yazılmış, daha modüler yapılarla da karşılaşabiliriz. Ya da dört dilde ele alınan programların aynı programlar olmadıklarını, pek çoğunun farklı tipte uygulamalar olduklarını ve tamamen farklı kişiler tarafından yazıldığı gerçeği de bu arada düşünülmesi gereken noktalardan.

Her şeye rağmen bu çalışma bize Java ile ortalama 6-7 satırlık ve ortalama 1’in altında parametre alan metotlara sahip programların yazılmasının mümkün olduğunu gösteriyor. Darısı bu ülkedeki Javacıların başına 🙂 

Bu yazı toplam 1118 defa görüntülenmiştir.