Generic vs Template

Java dili, programlama yapan kişilere çok fazla uzak olmasın diye C++ dilinin syntax’ını ve bazı özelliklerini baz alarak piyasaya sürülmüştür. Tabi sadece bu özelliklerle kalınılmamış,üstüne extradan bazı yenilikler sunulmuştur.

Java dilinin C++ dilinden almadığı bazı kavramlar vardı. Bunların başında pointer, multi implementation inheritance, operator overloading, template geliyordu. 4-5 sene öncesine kadar yapılan bazı çalışmalar sonucu Java diline ’Generic’ adında bir konu daha eklendi. Generic, C++ dilinin template konusuna karşılık gelmektedir. 

Template ; yazılan fonksiyonun bütün tipler için çalışacağını belirten jenerik bir yapıdır. Yani template olarak yazılan bir fonksiyona int, double, char vs. veya user-defined tipler gönderilse dahi bu fonksiyon başarılı bir şekilde çalışır. 

Özellikle Java’nın 1.6 sürümünden sonra çıkardığı yeni Generic kavramı eskiyi bozmamak adına tamamen bir felaket olmuştur. Boşuna fazladan casting olayları zaten cok hızlı olmayan bir dili iyice yavaşlatmaktadır. C++ dilinden tek artı yanı ise sadece <> kullanarak Generic yapma olayıdır. C++ template’ne bir göz atalım.

template<class T>
T add( T a, T b )
{
     return a+b;
}

Sadece iki tane parametreyi toplayan bir fonksiyon. Java da ise ;

<E> add( E a, E b )
{
     return a+b;
}

görüldüğü gibi Java’nın generic olayı kod yazma bakımından C++ templatelerine göre çok kısa. Ayrıca JAVA’da Generic bir class yaptığımız da sadece class için <E> yapmamız bütün methodların Generic olması anlamına geliyor. C++ dilinde ise her fonksiyon başına ’template’ keyword’unu eklemek zorundayız. Hal böyle iken Java’nın Generic kavramı C++ dilinin template kavramından daha iyi gibi dursa da işin iç yüzü öyle demiyor. Java dilinde her şey Object class’ından extend olduğu için gelen object Object class türünde ve cast edilmek zorundadır. a ve b objectleri öncelikle E tipine cast edilirler.

a = ( E ) new object() ;
b = ( E ) new object() ;

Bu değişkenler toplanıp method tarafından return edilirler. Şu anda E tipinde olan bu nesneler başka bir yerde kullanılacakları zaman atanacakları tipe yeniden compile tarafından cast edilmek zorundadırlar. C++ dilinde template bir fonksiyona parametre gönderildiği zaman bu parametre tipi için yeniden bir fonksiyon yazılır ve bu fonksiyon üzerinden işlemler yapılır. Bu nedenle JAVA’ya nazaran bu konuda daha hızlıdır.

Popular posts from this blog

Polya’nın Problem Çözme Teknikleri

Mikroislemci Temelleri