17 Ağustos 2011 Çarşamba

Java ve J'li Harf Çorbası

Java programlamaya başlayanların aklını karıştıran konuların başında, ekseriye J ile başlayan teknoloji, standart ve ürün adları gelir. Çoğu zaman arka planda ne olup bittiğinin bilinmemesinden kaynaklanan bu durum, pek çok zamansa Sun şirketinin seçtiği (ve değiştirdiği) adlandırma biçiminden kaynaklanır.

İnternet olgusunun ayırdındaki herkesin bildiği ve yazıya giriş tümcesinden de anlaşılabileceği gibi, Java gözde bir programlama dilinin adıdır. Java kullanılarak yazılan programlar, genelde derlemeli-yorumlama yöntemi ile çalıştırılır. Yani; Java kaynak kodu önce derlenerek [Bytecode adındaki] bir ara dilin komutlarını içeren sınıf dosyalarına çevrilir, sonra Java Sanal Makinesi (JSM; İng., Java Virtual Machine [JVM]) adı verilen bir diğer sistem yazılımı tarafından çalıştırılır. JSM, Bytecode komutlarından oluşan sınıf dosyalarını yorumlamanın yanısıra, sınıf yükleme ve çalıştırma sırasında güvenlik denetimleri de yapar. Örneğin, derleme ile yükleme arasında geçen zaman zarfında sınıf dosyasında oluşabilecek değişiklikler, sınıfın yüklenmesi sırasında yapılan sağlamalar ile saptanabilir. Böylece, kimi kötü niyetle yapılan değişikliklerin kullanıcıya zarar vermesinin  önüne geçilmiş olur. Benzer şekilde, programı çalıştıran kullanıcının yetkisiz olduğu güvenlik zaafı yaratabilecek işlemler programın çalıştırılması sırasında yapılan denetimler ile engellenir. JSM'nin bir diğer önemli görevi, kullanılmaz hale gelmiş yığın bellek bölgelerini toplayan çöp toplayıcı bileşeni yoluyla kaynak yönetimini kolaylaştırmaktır. Bu sayede, Java programcıları kaynak yönetimine dönük daha az kod yazacaklar ve bunun sonucunda üretilen kod daha güvenilir olacaktır.

Rekabete açık bir sektör olan yazılım geliştirme işinde başarıya giden yol, olabildiğince az kaynak (geliştirici zamanı, bilgisayar zamanı ve belleği, vb.) kullanarak piyasanın rağbet edeceği nitelikli ürünleri en kısa sürede geliştirip piyasaya sürmekten geçer. Bu bağlamda uygulanan evrensel kural, aynı ürünün tekrar tekrar geliştirilmesinden kaçınarak daha önceden yapılmış eş işlevli bir ürünün kullanılmasıdır. Yeniden geliştirme için harcanacak zamanın ürünün eniyileştirilmesi ve son ürüne tümleştirilmesine ayrılması, daha güvenilir ve daha yüksek performanslı yazılım üretilmesini olanaklı kılacaktır. İşte bu noktada, Java geliştiricisinin hizmetine Java ortamı (platform) adı verilen standart kitaplıklar sunulur. Söz konusu ortam, hedeflenen kitleye bağlı olarak farklı işlevsellikler sunabilir ve buna bağlı olarak değişik şekillerde adlandırılabilir. Java SE, standart (dizüstülü/masaüstülü) geliştiriciye hitap ederken, Java EE başta İnternet olmak üzere dağıtık ortamlarda çalışacak sunucu tarafı programların geliştirilmesini kolaylaştıran yazılım çerçeveleri içerir; Java ME ise mobil aygıtlar başta olmak üzere gömük sistemler düşünülerek hazırlanmıştır.

Java platformlarının oluşturulması, Java Topluluğu'nun ortaklaşa çabasıyla ortaya çıkarılan çeşitli standartların ürün haline getirilmesiyle mümkün olur. Örneğin, programcıların sıklıkla ihtiyaç duydukları veri yapılarına dair arayüz/sınıf tanımlarının bulunduğu Java Kapları (İng., Java Collections) Java SE'nin bir parçası iken, bileşen temelli dağıtık sunucu programları geliştirmekte kullanılan Java Şirket Taneleri (İng., Enterprise Java Beans [EJB]) Java EE'nin bir parçasıdır.

Java geliştiricileri çalıştıkları platformdaki sınıf dosyası kitaplıklarına ek olarak,  yazılım geliştirmenin değişik aşamalarında kullanılmak üzere, derleyici, JSM, arşivci ve dokümantasyon aracı gibi bir çok sistem programına ihtiyaç duyar. Bu araçlar ve platformun bileşkesi, Yazılım Geliştirme Kutusu (YGK; İng., Software Development Kit [SDK]) olarak adlandırılır. Söz konusu platformun Java SE olması durumunda, adlandırma Java Geliştirme Kutusu (JGK; İng., Java Development Kit [JDK]) şeklinde yapılır.

Java kaynak kodu yazmaktansa Java platformunda hazırlanmış programları kullananların geliştirme araçlarının tümüne ihtiyacı olmaz. Örneğin, bu kişiler programları çalıştırmak için JSM'ne ihtiyaç duyarken, derleyici ve arşivci gibi sistem programlarına ihtiyaç duymayacaklardır. Sadece kullanıcı olmak özelliği taşıyan bu kişiler için Java Çalıştırma Ortamı (JÇO; İng., Java Runtime Environment [JRE]) yeterli olacaktır.

Pek çok zaman, kullanılan platform hangisi olursa olsun, Java geliştiricileri ilişkin kısaltmayı da kısaltarak, Java SE/Java EE/JavaME yerine Java demek yoluna giderler. Ancak bu kullanımın programlama dili adı kullanımından ayırt edilmesi gerekir. Çünkü; en yaygın dilin Java olmasına karşın Java platformu, kaynak kodları sınıf dosyasına derlenebilen tüm dillere açıktır. Ne de olsa, programlar sınıf dosyalarının JSM üzerinde çalıştırılması ile işini görmektedir. Dolayısıyla, Python'un Java platformu uyarlaması olan Jython veya Groovy'nin platform indinde Java programlama dilinden hiçbir farkı yoktur. Ne demek istediğime aşağıdaki örnek üzerinden açıklık getireyim.


Sırasıyla, A ve B şirketleri tarafından yazılan a.groovy ve b.py dosyalarının derlenmesiyle elde edilen a.class ve b.class, iki şirketin ortak müşterilerinden birinin yazdığı Prog.java içinden kullanılmaktadır. Sınıf yolu (İng., classpath) ayarlarına uygun bir şekilde müşteri bilgisayarının erişimindeki disk konumlarına yerleştirilen bu dosyalar, Prog.java dosyasındaki ilişkin atıfların doğruluk denetimlerinin yapılması noktasında derleyici tarafından kullanılır. Derleyicinin kaynak kod yerine sınıf dosyasından yararlanabilmesini olanaklı kılan özellik, sınıf dosyası formatı ve dosyanın içeriğini oluşturan Bytecode komutlarının standardize edilmiş olmasıdır. Bir diğer deyişle, Java kaynak kodlarının taşınabilirliğine ek olarak, sınıf dosyaları da nesne kodu düzeyinde taşınabilirliğe sahiptir. Daha sonra, derleme sonucunun olumlu olması durumunda üretilen Prog.class, JSM'ne geçirilerek çalıştırılacak ve Java, Python ve Groovy dillerinin işlevsellik kattıkları program işini görecektir.