Code Munger

İlk ele alacağımız kod üretme modeli "Code Munger".

Bu model kod üretiminde en çok kullanılan modeldir. Code Munger genel olarak bazı kaynak kütükleri işler ve bunlara karşılık gelen bazı çıktı kütükleri oluşturur. JavaDoc iyi bir code munger örneğidir. JavaDoc java kayank kütüklerini içindeki açıklama satırlarını inceleyerek, çeşitli şablonları kullanarak bir HTML belgeleme meydana getirir.

Code Munger olarak iş gören araçlar, basit gerçekleştirimlerden çok karmaşık yapılara kadar çeşitlilik gösterir. XDoclet code mungerlara biraz daha karmaşık bir örnekdir. XDoclet'de JavaDoc gibi java kaynak kütüklerdeki açıklamaları okuyarak çalışır. Ama bir belgeleme oluşturmak yerine bean  için gerekli EJB sınıflarını ve interface leri oluşturur.

Örnek:

code_munger_ornek 

Genel Sorular

Kod üretimi modelleri ele almadan önce, kod üretme hususundaki genel olarak dikkat edilen noktaları ele alacağız.

Kod Üretimi bir Örüntü Dışlayıcı Durumdur

Örüntü dışlayıcı bir durum olarak tanımlanma sebebi, kopyala-yapıştır mantığının daha gelişmiş bir şekli olarak kabul edilmesidir. Bu bazı durumlarda doğru olsa da, bu durumu kabul edilebilir kılan bazı hususlar vardır.

  • Kopyala-Yapıştır programlama asıl olarak kötü bir yaklaşım değildir. Sizin keşfettiğiniz iyi bir örüntünün tekrar tekrar kullanımını ifade eder. Bazı örüntüler fonksiyel parçalara ayırmaya uygun olmamaktadır. Geleneksel programlamada onbeş defa kopyalayıp yapıştırırsınız, bir hata olduğunda ise onunu düzeltirsiniz; diğer hata kod kesimleri ise sağda solda unutulur. Ama kod üreticiler için bunun geçerliliğinden söz etmek zordur. Çünkü etken bir kod üretici kullanıyorsanız, üretici bütün kod kesimleri aynı anda güncelleyecektir.
  • Yapı iskeleleri (framework) gitgide daha karmaşıklaşmakta ve onları kullanırken pek çok kodlama gerekmektedir. Bu doğrudur, basit yapı iskeleleri eş özellikleri daha az karmaşıklık ile sunmaktadır, ama çoğunlukla yapı iskelesinin seçimi gerçekleştiriciye kalmamaktadır.
  • Kod üretmek üzere tasarımın soyut bir modelini kullanan kod üreticilerin, taşınabilirlik ve sürdürebilirlik açısından elle kodlanan en iyi sistemlerden bile üstündür. Eğer iş kurallarını kodun içinde tutuyorsanız, iş mantığını değişik teknolojilere taşımak için bir taşıma katmanına ihtiyaç duyarsınız.

Yukarıdaki başlıkları ele alınca elbette çok fazla kodun kendiliğinden üretilmesinin sakıncaları vardır. Ancak iyi tasarlanmış ve gerçekleştirilmiş bir kod üreteci sadece hammaliye işlerden kurtarmakla kalmaz, aynı zamanda kalite, tutarlılık, üretkenlik ve soyutlama açısından sıradan elle kodlamanın çok ötesine geçmeyi sağlar.

Mühendisler “Bu kesimi değiştirmeyin” (do not edit) uyarılarını dikkate almaz

Üreteçler,  üretikleri kodun değiştirilmemesi için bu kodları “do not edit” uyarılarıyla çevrelerler. Çünkü bu kod üreteç tarafından değiştirilmiştir ve değişikliğe uğrayabilir. Sonuç olarak burada yapılan değişiklikler üretecin bir sonraki sürümüyle birlikte kaybolacaktır. Ama yine de bu kesimler nedense değiştirilir.

Bir düzeltme yapılması gerekiyorsa ilk bakılması gereken kesim üretecin kendisidir. Acaba doğru şekilde ayarlanmış mıdır? Üretecin kullanılmasının bırakılmasının pek çok teknik sebeb vardır. İlk olarak bunlar halledilmelidir.

Etkin kullanılmama sebeblerinin bir diğeri de üreteçlerin kurulumunda dikkat edilmeyen hususlar vardır. Tabii ki kurulumun ve kullanımın tam anlamıyla gerçekleştirilebilmesi için iyi ve anlaşılır bir belgeleme bulunması gerekir.

 Benim Projem Bir Kod Üreteci için Çok Küçük

Elbetteki bir üreteç geliştirmenin proje getireceği ek bir maliyet vardır. Ama geleceğe yönelik olarak böyle bir aracın faydası da göz ardı edilmeden getirdikleri ve götürdükleri ele alınmalıdır.

Benim Projem Kod Üretimi İçin Çok Karmaşık

Projeniz ne kadar karmaşık olursa olsun kod üretiminden faydalanılabileceği alanlar vardır. Eğer veritabanı kullanıyorsanız, saklama (persistence) katmanında üreteç kullanabilirsiniz. API kesimlerini de üretebilirsiniz, XML-RPC kullanımlarında da üretecleri kullanabilirsiniz. Uygulamanın pek çok özel kesiminde üreteçleri kullanma imkanı vardır.

Sonuç olarak kod üretimi bir kodlama aracıdır. Yerine göre kullanılır. Bu da gerçekleştiricilerinin değerlendirmesine bağlı bir konudur.

 

Kalite, Tutarlılık, Üretkenlik ve Soyutlama Kriterleri

Kod oluşturmanın 4 temel yararı vardır. Bunlar :

  1. Kalite : Elle oluşturulan kodların kalitesi proje yaşam döngüsünde değişiklik gösterir. İyi başlayıp kötü sonlanabileceği gibi tersi de olabilir. Üretilen kodlar zamanla devamlı olarak kaliteyi artırır. Bunun sebebi, her düzeltilen hatada ya da gerçekleştirilen iyileştirmede kod şablonları daha yetkinleşir. Yapılan bu iyileştirmeler aynı anda tüm yazılıma yansır.
  2. Tutarlılık : Üretilen Uygulama Geliştirme Arayüzleri (API) sınıf yapıları, isimlendirme ve imzaları açısından tutarlılık gösterir. API’lar iel çalışan mühendisler ve değişik otomatik uygulamalar için bu çok yaralıdır.
  3. Üretkenlik : Bir geliştiricinin benzer bir kodu geliştirmesi için gereken zamanın çok küçük bir parçasında kod üreteci kodu hazırlar. Diğer bir açıdan bakarsak, kod üretecleri geliştiriciler üzerinde hamalliye işlerden kurtararak, onlarının zamanlarını daha yaratıcı çözümler gerektiren konulara yöneltmelerine imkan verir.
  4. Soyutlama : Üreteçler kod ile tasarım arasında bir soyutlama yüzeyi oluşturur. Genelde iş kuralları kaynak koda geçildiğinde kaybolmaktadır. Üreteçler tarafından kullanılan tanım kütükleri, uygulamanızın şemasını ve iş kurallarını bildiri şeklinde içerirler.

Bundan sonra bahsedeceğimiz her bir modelde, o modelin sunduğu; kalite, tutarlılık, üretkenlik ve soyutlama iyileştirmelerini inceleyeceğiz.

Modellerin Tanıtımı

İki tür kod oluşturucu vardır: etken ve edilgen. Etekn modeller uzun vadede oluşturucunun kodunu korurlar. Edilgen modeller birincil bir kod oluşturur, daha sonra bu kod ile ilgili işlemler mühendisin sorumluğundadır. Sihirbazlar (wizards) edilgen kod oluşturuculara tipik bir örnektir.

İşleyeceğimiz kod üreticiler etken kod üretici modelleri olacaktır. Bu modeller basit kod ayrıştırıcılardan, kod yönlendirilere ve son olarak soyut modellerden kod üreticilere kadar uzanmaktadır.

Kod Oluşturma (Code Generation) Nedir?

Kod oluşturucular otomatik olarak yüksek düzeyli kodlama dillerde (C, C++, C#, Java, Perl, Python, Ruby gibi) kod üreten programlardır. Bu araçlar boyut ve karmaşıklık olarak basit kod ayırıcılardan (code parser) tüm işlevleri kapsayan sınıf ve katman üreticilerine kadar uzanır.

Burada kullandığımız “Kod Oluşturma” kavramı derleyicilerdeki aynı adlı kavram çakışmaktadır. Derleyiceler işlemcilere yönelik “op-code” üretirlerken, bizim burada bahsettiğimiz daha çok yüksek düzeyli dilleri kapsayan “Kod Oluşturma” kavramıdır.