Java'nin handikaplari ve gec kalinmis yeni ozellikleri

java
  • Turgay Can
  • Tarih

    16 May, 2013
  • Yorum

    0
  • Görüntüleme

    1414
  • İndirme

    0

Java'nin handikaplari ve gec kalinmis yeni ozellikleri

Java 2013 yılı verilerine göre en çok kullanılan programlama dili dünyada fakat bu programlama dilinin bazı eksiklikleri ya JDK 7 versiyonu ile güncellendi yada bazı limitasyonları hala devam ediyor.

benim diğer dillere göre gördüğüm bariz kısıtlaması bir sınıfın kalıtımı sadece bir sınıftan alabilmesi halbuki C++ ve C# dillerinde bir sınıf birden fazla sınıftan kalıtım alabiliyor. Java içinde bu tür bir kısıtlamanın olmasının sebebi ise bu tip kullanımların yarattığı belirsizlik(ambiguity).

Örnek ile açıklayacak olursam; Bir ABC sınıfımız olsun ve 3 özellik barındırsın içinde ;

class ABC{

String type1;
String type2;
String type3;

}

Bu sınıfımızı kalıtım alınacak sınıf olarak blirtip bir alt sınıf tanımlayıp, yukarıdaki sınıfımızın özelliklerini aktaralım. XYZ sınıfı içinde 2 özelliğimiz olsun.

class XYZ extends ABC {

String tip1;
String tip2;

//extends ise yukarıdaki sınıfın bütün özelliklerini XYZ sınıfınada taşımış olduk.
}

Bu javada kalıtımın aktarılması için basit bir örnek. Mesela şöyle bir yapı olsaydı;

XYZ sınıfımızı oluşturmak için DEF diye bir sınıfında özelliğini kullanmak istediğimizde, Java yapısında dolayı buna izin vermyecekti.

Kısacası;

class XYZ extends ABC,DEF{
}

gibi bir tanımlama yapamazsınız.

Mesela enum önemli bir tip yada anahtar kelimedir programlama dilleri arasında ve ilginçtir ki bu Java içine JDK 1.5 (5) versiyonu içinde dahil edilmiştir. C++ ve C# içine çok daha önce dahil edilmiştir.

public enum GPA {

    AA(4), BA(3.5), BB(3.0), CB(2.5), CC(2.0), DC(1.5), DD(1.0);
    private double value;

    private GPA(double value) {
        this.value = value;
    }
};

Kullanırken ;

for(GPA gpa : GPA.values()){
//todo 
}

Diğer yandan Java'da switch case'leri içinde String nesnesi ile karşılaştırma yapılması gibi özellik JDK 7 ile getirilmiştir!!!

Keza ARM(Auto Resource Management) yani oto kaynak yönetimi özelliğide JDK 7 ile beraber getirilmiş bir özelliktir. Öncesinde en basitinden siz bir file io işlemi yaptığınızda dosya üzerinde işlem yapmayı bitirip, başlatılan işlemi kapatmayı unutursanız vahki ne vah bekleyin ki Garbage Collector işlem görmeyen o sınıfı timeout süresi bitince temizlesin! Bu özelliğin diğer yüksek seviye dillerde çok önceleri olmasıda ve javada yeni olması ilginç!

JDK 7 öncesi

  FileInputStream reader= null;
  FileOutputStream writer= null;
  try {
    reader= new FileInputStream("test.txt");
    writer= new FileOutputStream("test.txt");
    int var;
    while (var = reader.read()) != -1)
      writer.write(var);
  } finally {
    if (reader!= null)
      reader.close();
    if (writer!= null)
      writer.close();
  }

JDK 7 sonrası

    try (FileInputStream reader= new FileInputStream("test.txt");
FileOutputStream writer= new FileOutputStream("test.txt")) {
          int var;
          while((var= reader.read()) != -1 )
                writer.write();
      }

Şükür ki, JDK 7 ile bu sorundanda kurtulmuş olduk!

Diğer bir handikap ise Type inference gibi bir özelliğin JDK ile daha yeni eklenmesi. Type inference ile tanımlanan objelerin parametrelerinin yada tiplerinin arayüz sınıflarında tanımlanması ve constructor bu arayüz sınıfı üzerinden tetiklenmesini sağlıyor ve ekstra bir karmaşıklığı (clutter) ve tekrarı(redundancy) önlemiş oluyoruz. Bu işlemi yapan operatörü diamond operatör olarak nitelendiriyor java!

JDK 7 öncesi

List<S tring> list = new ArrayList<S tring>();

JDK 7 ve sonrası diamond operator

List<S tring> list = new ArrayList<>();

Bu arada closure özelliği JDK 7'dede bulunmuyor, JDK 8 proje ismi ile Lambda ile gelebileceği söyleniyordu orasıda muamma! Bu kadar java karalamasından sonra bol javalı günler dilerim :)

İyi çalışmalar!

0 Yorum..

Yorum yapmak için "Giriş yapın" yada "Misafir üye" olarak yorum yapabilirsiniz.

Yorum Yap