JAVA Programlama Dili

____________________________________________________________________

Java nedir, nasıl çalışır?

Java Sun Microsystems mühendislerinden James Gosling tarafından geliştirilmeye başlanmış gerçek nesneye yönelik, platform bağımsız, yüksek performanslı, çok işlevli, yüksek seviye, interpreted[adım adım işletilen] bir dildir (son özellik, yani adım adım işletilen konusuna açıklık getirilecek).

Java ilk çıktığında daha çok küçük cihazlarda kullanılmak için tasarlanmış ortak bir platform dili olarak düşünülmüş. Ancak bakılmış ki platform bağımsızlığı özelliÄŸi C ve C++’dan çok daha üstün ve güvenli bir yazılım geliÅŸtirme ve iÅŸletme ortamı sunuyor, hemen her yerde kullanılmaya baÅŸlanmış. Åžu anda özellikle kurumsal alanda ve mobil cihazlarda son derece popüler olan java, özellikle J2SE 1.4 ve 1.5 sürümü ile masaüstünde de gücünü arttırmayı hedefliyor. Java’nın ilk sürümü olan Java 1.0 (1995) Java Platform 1 olarak adlandırıldı ve tasarlama amacına uygun olarak küçük boyutlu ve kısıtlı özelliklere sahipti. Daha sonra platformun gücü gozlendi ve tasarımında büyük deÄŸiÅŸiklikler ve eklemeler yapıldı. Bu büyük degisikliklerden dolayı geliÅŸtirilen yeni platforma Java Platform 2 adı verildi ama versiyon numarası 2 yapılmadı, 1.2 olarak devam etti. En son çıkan Java 1.5, geçen 1.2, 1.3 ve 1.4 sürümlerinin ardından en çok geliÅŸme ve deÄŸiÅŸikliÄŸi barındıran sürüm oldu.

Java nasıl çalışır?

Bir java yazılımı şu şekilde geliştirilir:

* Programcı java kodunu yazar.

* Bu kod bir java derleyicisi ile derlenir. Sonuçta bytekod adı verilen bir tür makine kodu ortaya çıkar. Platform bağımsızlığını saÄŸlayan ÅŸey bytecode’dir. Çünkü bir kere bytecode oluÅŸtuktan sonra yazılım tüm iÅŸletim sistemlerinde çalışabilir.

* Bu byte kod Java Virtual Machine (Java Sanal Makinesi) tarafından adım adım işletilir. Aşağıda java ve C++ kodunun geçirdiği aşamalar gösterilmiştir;

Java kodunun yazılması

Java nesneye yönelik bir dil olduÄŸundan tüm yazılım sınıflar ve nesneler üzerinden yürütülür. Sınıflar uygulamadaki nesnelerin tanımlandığı kod parçalarıdır. Java’da her bir sınıf bir dosya içerisinde yer alır. Dosyaların uzantıları .java ÅŸeklindedir. Dosya adı ise içinde tanımlanan sınıf ile aynıdır. ÖrneÄŸin, BenimSınıf.java gibi.

Derleme

Derleyici kısaca herhangi bir editör ile yazılan java kaynak kodlarını (yani .java uzantılı sınıfların yer aldığı dosyaları) Java Sanal Makinesinin çalıştırabileceÄŸi bir tür makine dili (assembler) olan Bytecode’a dönüştürür. Bu dönüştürülen bytekod ise (.class ) dosyaları içerisinde saklanır. Java kodunu derlemek için bir java derleyicisine ve java kütüphanelerine ihtiyacınız var. Åžu anda iki derleyici yaygın olarak kullanılmaktadır. Bir tanesi Sun’ın SDK’sı ile birlikte gelen Javac. DiÄŸeri ise IBM’in açık kodlu derleyicisi Jikes. Ayrıca Linux altında derleme yapmak için GNU lisansı ile geliÅŸtirilen açık kodlu Gnuj kullanılabilir. Derleyici ve kütüphanelerin bulunduÄŸu (Java API) uygulamaya “J2SE SDK” adı verilmiÅŸtir.

Çalıştırma ve Java Sanal Makinesi

Sanal makine donanımdan bağımsız yazılım geliÅŸtirme ihtiyacına cevap verme amacıyla geliÅŸtirilen bir teknolojidir. Java’nın temel felsefesi olan “bir kere yaz, her yerde çalıştır” sanal makine sayesinde var olmuÅŸtur. Sanal makineyi bir yönden bir tür hayali bir mikroiÅŸlemci gibi düşünebiliriz. Gerçek tüm mikroiÅŸlemciler (Intel Pentium, AMD Athlon, Sun Sparc vs.) belirli bir grup komutu iÅŸlemek üzere tasarlanmıştır. Bu komutlara iÅŸlemcinin komut kümesi adı verilir. ÖrneÄŸin x86 komut kümesi gibi. Tüm yazılımlar çalışabilmek için önce bu komut kümesine dönüştürülür, daha sonra iÅŸlemci bu komutları sıra ile gerçek iÅŸlemci komutlarına dönüştürüp iÅŸletir. Java Sanal makinesi de Bytekod komut kümesini tıpkı iÅŸlemci gibi adım adım iÅŸletir. Java’nın interpreted bir dil olarak adlandırılmasının nedeni budur. Bytekod ilkel iÅŸlemlerin yanında (ilkel iÅŸlemler, mikroiÅŸlemci seviyesi komutlardır, aritmetik iÅŸlemler, bit iÅŸlemleri, bellek ve yığın iÅŸlemleri vs.) sanal makinenin üzerinde çalıştığı iÅŸletim sistemine yönelik iÅŸlemler de barındırır. Bu sayede Java Virtual Machine yazıcı, seri port, grafik, dosya servisi, aÄŸ baÄŸlantısı gibi yazılım ve donanım servislerine eriÅŸim yapabilir.

Java’nın doÄŸrudan bytecode çalıştırılması performansının düşük olabileceÄŸi izlenimini verebilir. Ancak, JVM tasarımı geçen 10 yılda çok deÄŸiÅŸmiÅŸ ve geliÅŸtirilmiÅŸtir. Åžu anda Java’nin performansı çoÄŸu alanda C++’in performansına yakın bir seviyededir ve iÅŸlemci hızı ve bellek miktarının her geçen yıl katlanarak artması ile performans konusu çoÄŸu uygulamada artık ikinci planda kalmıştır.

Java ile ilgili yazılarda karşılaşabileceğiniz bazı kavramlar:

Hot Spot teknolojisi

Java sanal makinesi HotSpot adı verilen özel bir teknolojiyi içinde barındırırır. HotSpot yani sıcak nokta , bir yazılımda sürekli olarak tekrarlanan ve üzerinden geçilen kod bölümlerine verilen bir isimdir. Java sanal makinesi bir kod çalışmaya başladıktan sonra sıklıkla kullanılan kod bloklarını gözler ve bir süre sonra bu bytecode bloklarının calışılan sistemdeki gerçek işlemci komut karşılıklarını bir tür cep belleğe yazar ve zaman ilerledikçe artık byte kod üzerinden değil doğrudan sistemin öz komutlarını kullanarak yazılımın o bölümlerini işletmeye başlar. Bu şekilde ciddi performans avantajı sağlanmıstır.

JIT

Java ilk çıktığında bytecode iÅŸletme hızı çok iyi deÄŸildi. Yerine göre sistemin öz yazılımlarından 5-10 kat yavaÅŸ çalışıyordu. Bu nedenle bazı yazılım geliÅŸtirme ÅŸirketleri JIT yani Just-in-time compile, “anında derleme” araçları üretmeye baÅŸladılar. Yapılan ÅŸey byte kodu sanal makinenin kurulu olduÄŸu gerçek sistemin diline anında derleme yaparak dönüştürmesiydi. Bu sayede performansta ciddi artışlar saÄŸlandı. Ama 2000 yılından sonra HotSpot teknolojisinin geliÅŸmesi ile JIT’in iÅŸlevi VM içinde yer almaya baÅŸlamış, iÅŸlemci hızı ve bellek miktarının dramatik biçimde artması ile dış JIT yazılımları popülerliÄŸini kaybetmiÅŸtir. Bugün halen bir kaç ürün pazarda bulunsa da genellikle bu yöndeki ihtiyaç yok olmuÅŸ gibi görünmektedir.

Java API

Java API, Java yazılımlarında kullanılıan yazılım kütüphanelerine genel olarak verilen isimdir. Java API ile disk, grafik, aÄŸ, veri tabanı, güvenlik gibi yüzlerce konuda kullanıcılara eriÅŸim imkanı sunulur. Java API J2SDK’nın bir parçasıdır.

Çöp Toplayıcı (Garbage Collector)

Çöp toplayıcı Java’nın en belirgin özelliklerinden birisidir. C++, C gibi dillerin en büyük handikaplarından birisi dinamik bellek yönetimidir. Yazılımda iÅŸaretçi (pointer) kullanarak dinamik olarak bellek ayırdıktan sonra o bellek ile iÅŸiniz bittiÄŸinde mutlaka ayrılan belleÄŸi bellek yöneticiye özel metodlar yardımıyla (delete, destructor vs.) iade etmeniz gerekir. Yoksa bellek sızıntısı (Memory Leak) oluÅŸur ve bu bir süre sonra yazılımın ve iÅŸletim sisteminin beklenenden farklı davranmasına yol açar. Bugünün tüm büyük C ve C++ yazılımları az da olsa bellek sızıntısı içerir (iÅŸletim sistemleri dahil). sızıntıların tespiti oldukça güçtür ve bulunması zor hatalara yol açar. Çöp toplayıcı sayesinde Java’da bir nesne oluÅŸturulduktan sonra o nesne ile iÅŸiniz bittiÄŸinde hiç bir sey yapmanız gerekmez. Sanal makine akıllı bir biçimde kullanılmayan bellek bölümlerini belirli aralıklarla ya da adaptif metodlarla otomatik olarak temizler ve sisteme iade eder. Bu iÅŸleme Çöp toplama, ya da garbage collection adı verilir. Çöp toplama sistemlerinin yapısı oldukça karmaşıktır ve geçen yıllar içinde büyük geliÅŸmeler kaydedilmiÅŸtir. Çöp toplayıcının varlığı Java’da bellek sızıntısı olmayacağı anlamına gelmez, ama bellek sızıntıları daha ender olarak ve farklı ÅŸekillerde karşınıza çıkar ve genellikle tedavi edilmesi daha kolaydır.

JAR (Java Archive)

Jar, aslında bir tür sıkıştırma formatıdır. Jar ile derlenen java kodları ile oluÅŸan yazılımın paketlenip taşınması kolay bir hale getirilir. Jar dosyaları temelde bytekod blokları içerir. Jar dosyaları genellikle kütüphane oluÅŸturmada ya da uygun biçimde hazırlanırsa iÅŸletim sisteminden doÄŸrudan çalıştırılabilecek bir ÅŸekilde kullanılabilir (Executable jar, iÅŸletilebilir jar).Jar dosyalarının içeriÄŸini sıkıştırma yazılımları(Ör;WinRAR) ya da java yazılım geliÅŸtirme araçları ile inceleyebilirsiniz. Java 1.5 ile yeni bir tür jar oluÅŸturma metodu da kullanıma girdi. Pack200 adı verilen hyper-compression algoritması ile jar dosyaları 8 kata varan oranlarda daha az yer kaplıyor. Bunun özellikle uzak uygulamaların kullanımını ciddi biçimde kolaylaÅŸtırması bekleniyor.Son sürümü Java 1.6’dır.

AWT ve Swing

AWT, ilk Java ile birlikte geliÅŸtirilen temel grafik arayüz oluÅŸturma kütüphanesine verilen isimdir. Ancak Java 2 platformu ile birlikte AWT’nin yetersizliÄŸi görülmüş ve çok daha geniÅŸ ve geliÅŸmiÅŸ özelliklere sahip Swing kütühanesi sisteme eklenmiÅŸtir. Özellikle çok platform destekleyen yazılımlarda kullanıcı arayüzü geliÅŸtirme aracı olarak Swing halen önemini korumaktadır. Swing, önceleri iÅŸletim sisteminin kullandığı donanım grafik hızlandırma araçlarını kullanmadığından yavaÅŸlığı ile eleÅŸtirilere hedef olmuÅŸtu. Özellikle Java 1.4 ile Swing, hem genel olarak sanal makinenin hızlanması ve kısmen donanım hızlandırmayı kullanması ile bu kötü şöhretinden sıyrılmaya baÅŸladı Java 1.5 ile donanım, özellikle OpenGL kullanımı ve yeni arayüz gösterim ÅŸekli ile Java’nın masaüstü uygulama geliÅŸtirmede popülerleÅŸmesi bekleniyor. AWT halen Swing’in bir alt katmanında, temel 2 boyutlu grafik iÅŸlemlerinde kullanılmaya devam ediyor.

SWT

SWT Swing’e bir alternatif olarak IBM tarafından geliÅŸtirilen bir gösterim sistemidir. Swing’den en büyük farkı çalıştığı iÅŸletim sisteminin grafik kütüphanesi ve komutlarını kullanmasıdır. Bu nedenle SWT uygulamaları Swing’e göre çoÄŸu yerde daha hızlı ve iÅŸletim sistemindeki diÄŸer uygulamaları andıran bir ÅŸekilde çalışmasını saÄŸlar. Ancak yapı itibarı ile SWT kullanımı Swing kadar efektif olamayabiliyor (özellikle olay mekanizması, tablo ve aÄŸaç yapılarındaki yavaÅŸlığı, ayrıca Linux performansı ile SWT eleÅŸtirilmiÅŸtir.) Swing’in Java 1.5 ile performans açığını kapattığı iddia edilse de SWT’nin de artık Java camiasında kabul görmüş bir sistem olduÄŸu aÅŸikardır. SWT’nin dezavantaji ise Java’nın bir parçası olmamasıdır. Yani SWT uygulamaları SWT kütüphanesi ile birlikte dağıtılmaktadır. En bilinen SWT uygulaması ünlü Java yazılım geliÅŸtirme araci Eclipse’tir. Bununla birlikte son yıllarda Swing ile profesyonel derecede arayüze sahip masaüstü yazılımları da ortaya çıkmıştır. Sonuçta her ÅŸey yazılımcının aracı ne kadar efektif kullandığına bakıyor.

Applet

Applet, uzaktaki sistem uzerinden indirilip internet tarayıcısı üzerinde çalıştırılabilen Java uygulamalarına verilen isimdir. Java’nın son kullanıcılar tarafından tanınması applet sayesinde olmuÅŸtur dersek yanlış olmaz. Applet’ler sisteme zarar vermeyecek bir ÅŸekilde tasarlanmıştır ve bugün özellikle oyun sitelerinde halen yaygın olarak kullanılmaktadır. Içerisinde applet olan bir sayfayı açmaya calıştığınızda tarayıcınız otomatik olarak Java Sanal Makinesi’ni çalıştırıp ekranın applete ayrılan bölümünde uygulamanın calışmasını saÄŸlar.

WebStart

Webstart teknolojisi Windows ve Linux sistemlerinin baş belası olan uygulama kurulum, güncelleme ve silme dertlerine deva olmak üzere tasarlanmış bir sistemdir. Özellikle Java 1.5 ile daha yaygın kullanılmaya baslayan WebStart teknolojisi kısaca yazılımların uzaktan yerel sisteme güvenli olarak kurulmasını ve korumalı bir alanda çalıştırılmasını sağlar. Appletlerin bir sonraki adımı olarak görülebilir. Bir WebStart uygulamasını kurmak için internet üzerindeki özel bir bağlantıya tıklamak yeterli. Sistem otomatik olarak WebStart sistemini çalıştırıp yazılımı Java cep belleğine indirir. İsterseniz masaüstüne kısayol koymasını da sağlar. Daha sonra sistem off-line ya da on-line olsa bile uygulama calıştırılabilir ve uzaktaki yazılım güncellendiğinde otomatik olarak -istenirse- yerel makinedeki yazılımın da güncellenmesi sağlanabilir. Kullanıcının özel olarak izin vermesi halinde uygulama yerel sisteme erişim hakkı kazanabilir. Aksi taktirde WebStart uygulamaları sisteme yazma işlemi gerçekleştiremezler (yani virus ve zararlı yazılım tehlikesini son derece aza indirger.)

Java hangi dilde yazıldı?

Java’nın çekirdek kısmı yani sanal makinenin C++ ve belki bazı yerlerde doğrudan assembler kullanılarak yazıldığını sanıyorum.. Bu hükmü Java bug sayfalarındakı örnek kodlara bakarak verdim. Java kütüphanelerinin büyük kısmı ise Java ile yazılmıştır.

Java Her yerde kullanılabilir mi?

Hayır, Java, özellikle donanım sürücüsü geliştirme, işletim sistemi seviyesi yazılımlar, bazı özel grafik yazılımları, yüksek hızlı 3 boyutlu grafikli oyunlarda kullanmak için uygun değildir. Java 1.5 ve sonraki sürümlerde OpenGL desteği ile 3 boyutlu oyun uygulamalarında daha fazla kullanılması umuluyor.Özellikle 1.6 sürümü ile donanımsal OpenGL vb. desteği iyice artırılmıştır.

Neden java?

Bu soruya kişisel olarak cevap vereceğim, şu nedenleri gösterebilirim

* En önemlisi platform bağımsız. herhangi bir yerde yazdığım yazılımı tek satır bile deÄŸistirmeden tüm iÅŸletim sistemlerinde ve donanımlarda çalıştırabiliyorum. Bu özelliÄŸi .Net’i benim için safdışı ediyor.

* Güvenli kod yazımı. Pointer kullanımı, bellek sızıntıları, #ifdef satırları, karmaşık derleme sistemleri, iÅŸletim sistemi hatta derleyici bağımlı kütüphanelerden bıkmış birisi olarak Java’yı günümüzdeki haliyle C, C++’a bin kere tercih ederim.

* Nesneye yönelik. Bir kere alıştıktan ve kavradıktan sonra bir daha terkedemeyeceÄŸiniz nesneye yönelik yazılım geliÅŸtirmenin güzel bir gerçeklemesidir. Bu nedenle kriptik anlaşılmaz script dilleri, hem ondan hem bundan diyen C++ gibi hibrit dilleri ve C gibi alt seviye bir iÅŸkence aletine karşı Java’yı tercih ediyorum.

* Yüksek performans. script dilleri geri dursun.

* Basitlik: az komut sayısı ve konulara çoÄŸunlukla aynı yönden yazılması ile öğrenilmesi C++ ve C#’a gore kolay olduÄŸundan tercih ediyorum.

* Seçenek: Birden fazla sanal makine, SDK ve uygulama sunucu geliÅŸtirici sayesinde tek geliÅŸtiriciye bağımlı deÄŸilsiniz. Java’nın geliÅŸtirilmesi her ne kadar Sun’ın denetiminde yapılsa da JCP adı verilen bir organizasyon ile diÄŸer ÅŸirketler de Java’nın geliÅŸtirilmesine doÄŸrudan katkıda bulunmaktadır. Ayrıca Java’yı karmaşık bulanlar daha kolay anlaşılabilir BeanShell, Jython, Rubby, Groovy gibi JVM üzerinde çalışabilecek script dillerini kullanabilir.

* Geliştirme ortamları: Java ile yazılım geliştirebileceğiniz ticari ya da bedava ve açık son derece güçlü ve çok sayıda yazılım geliştirme ortamları mevcut. Üstelik tüm platformlarda.

* Olgunluk. Java geçen on yılda havanda iyice dövülerek olgun bir hale geldi. Åžu anda çeÅŸitli Java sürümleri bankalar, askeri sistemler hatta uzay araçlarında kullanılmaya uygun olarak görülmektedir. Kurumsal alandaki uygulamaların büyük çogunluÄŸunda Java tercih edilmektedir. .Net’in bu aÅŸamaya gelmesi için daha kırk fırın ekmek yemesi gerekir ve genellikle ciddi bir yatırımcının zaman kaybına tahammülü yoktur.

* Açık kod: Java ile gerçekleştirilen açık kodlu proje ve framework sayısı on binlerle ifade ediliyor. Hemen her ticari uygulamanın bir açık kodlu karşılığını bulmanız mümkün. Örneğin; Microsoft’un Office paketine karşı Java ile hazırlanmış açık kaynak OpenOffice.org kullanılabilir.

* Destek, Java ÅŸu anda IBM, Oracle, Sun, Bea gibi dev ÅŸirketler tarafından desteklenmektedir. Bu ÅŸirketlerin hiç birisi .Net yoluna gideceklerine dair en ufak bir iÅŸaret vermemiÅŸlerdir. O nedenle Java’nın geleceÄŸini aydınlık olarak görüyorum.

* Eğer iyi derecede Java ve yazılım geliştirme bilirseniz iyi ve ciddi bir iş bulma şansınız diğer dillerden daha yüksektir.

Kaynak”http://tr.wikipedia.org/wiki/Java_programlama_dili

Yorum yok

Henüz bir yorum yok.

Bu yazıdaki yorumlar için RSS beslemesi. Geri izleme URI

Yorum yaz