Java programlama dili
Vikipedi, özgür ansiklopedi
Java, Sun Microsystems mühendislerinden James Gosling tarafından geliştirilmeye başlanmış açık kodlu, nesneye yönelik, platformdan bağımsız, yüksek performanslı, çok işlevli, yüksek seviye, adım adım işletilen (interpreted) bir dildir.
Java ilk çıktığında daha çok küçük cihazlarda kullanılmak için tasarlanmış ortak bir platform dili olarak düşünülmüştu. Ancak platform bağımsızlığı özelliği ve standart kutuphane destegi C ve C++'tan çok daha üstün ve güvenli bir yazılım geliştirme ve işletme ortamı sundugundan, 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 5 sürümü ile masaüstü uygulamalarda da yayginlasmaya baslamistir. Java'nin ilk sürümü olan Java 1.0 (1995) Java Platform 1 olarak adlandırıldı ve tasarlama amaçına uygun olarak küçük boyutlu ve kısıtlı özelliklere sahipti. Daha sonra platformun gücü gözlendi ve tasarımında büyük değişiklikler ve eklemeler yapıldı. Bu büyük değişikliklerden dolayı geliştirilen yeni platforma Java Platform 2 adı verildi ama versiyon numarası 2 yapılmadı, 1.2 olarak devam etti. 2004 sonbaharında çıkan Java 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 SE 7 ise (kod adı: Dolphin) Sun'un üzerinde çalıştığı, Java teknolojisinin gelecekteki sürümüdür. 13 Kasım 2006 da Java platformu GPL lisansıyla açık kodlu hale gelmiştir.
Konu başlıkları |
[değiştir] Sürüm Tarihçesi
Java Dili, JDK 1.0 dan bu yana çeşitli değişikliklere uğramıştır.
- 1.0 (1996) — İlk sürüm.
- 1.1 (1997) — Önemli eklentiler. Örneğin iç sınıflar.
- 1.2 (4 Kasım, 1998) — Kod adı:Playground. API'de önemli değişiklikler, reflection özelliği ve JIT Derleyicisi nin eklenmesi. ancak dilin kendisinde önemli değişiklikler olmadı.
- 1.3 (8 Mayıs, 2000) — Kod Adı: Kestrel. HotSpot JVM sunuldu.
- 1.4 (13 Şubat, 2002) — Kod adı: Merlin. assert kelimesinin dile eklenişi, nio sınıfları ve pek çok yeni API değişikliği.
- 5.0 (29 Eylül, 2004) — Kod Adı: Tiger. (Önce 1.5 olarak duyruldu) Pek çok yeni dil özelliği eklendi.
- 6.0 (11 Aralık, 2006) — Kod Adı: Mustang. Grafik alt yapısında ve sanal makine başarımında gelişmeler oldu.
- 7.0 (Yaz, 2007, öngörülen) — Kod Adı: Dolphin. Muhtemel JVM yapı değişikliği.
[değiştir] 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'dur. Çünkü bir kere bytecode oluştuktan sonra yazılım sanal makine iceren tüm işletim sistemlerinde çalışabilir.
- Bu byte kod Java Virtual Machine (Java Sanal Makinesi) tarafından adım adım işletilir.
Bu adımları inceleyelim::
[değiş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ıdir. 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.
[değiş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 teknolojdir. Java'nın temel felsefesi olan "bir kere yaz, her yerde çalıştır" sanal makine sayesinde varolmuş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'nin interpreted bir dil olarak adlandırılmasının nedeni budur.
Java'nın doğrudan bytecode çalıştırması performansının düşük olabileceği izlenimini verebilir. Gercekten Java'nin ilk yillarinda isletim basarimi cogu uygulama icin kabul edilemeyecek kadar kotu idi. Ancak, JVM tasarımı geçen 10 yılda çok değişmiş ve geliştirilmiştir. Şu anda Java'nın performansın ın çoğu alanda C++'ın performansına eş bir seviyede oldugu iddia edilmektedir. Her ne kadar C- C++ dilleri de tasinabilir bir yapida olsa da bu ozellikleri Java ile kiyaslanamayacak kadar geri bir yapidadir. Eğer sözkonusu dil C++ olsaydi üç ayrı kod ya da kodda üç ayrı #ifdef vs tanımı, üç ayrı obje dosyası oluşturulması gerekirdi ve çoğu uygulamada C++ projesi sadece tek platforma destek verirdi (win32 gibi)
[değiştir] Java İle İlgili Bazı Kavramlar
[değiştir] 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 gelistirilen sanal makinelerde (Hotspot gibi) 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 birkaç ürün (Excelsior JET gibi) pazarda bulunsa da genellikle bu yöndeki ihtiyaç azalmistir.
[değiştir] 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, ag, veri tabani, güvenlik gibi yüzlerce konuda kullanıcılara erişim imkanı sunulur. Java API J2SDK'nın bir parçasıdır.
[değiştir] Çöp toplayıcı (Garbage Collector)
Çöp toplama teknolojisi Javadan önce de var olan ama Java ile adını duyurmuş ve yaygın olarak kullanılmaya başlanmış bir kavramdır. 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, MLK) oluşur ve bu bir süre sonra yazılımın ve işletim sisteminin beklenenden farklı davranmasına yol açabilir. Sızıntıların tespiti oldukça güçtür ve bulunması zor hatalara yol açar. Bu nedenle 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). Çöp toplayıcı sayesinde Java'da bir nesne oluşturulduktan sonra o nesne ile işiniz bittiğinde hiçbir şey yapmanız gerekmez. Sanal makine akıllı bir biçimde kullanılmayan bellek bölümlerini belirli aralıklarla ya da uyarlamali 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.
[değiştir] Jar
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ılabiliecek bir şekilde kullanılabilir (Executable jar, işletilebilir jar) jar dosyalarının içeriğini sıkışıtırma yazılımları 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 hiper-compression algoritması ile jar dosyaları daha kucuk boyutlara indirilebiliyor. Ancak bu teknoloji daha çok ağ üzerinden yapilan transferlerde kullaniliyor....
[değiştir] AWT ve Swing
AWT, ilk java ile birlikte geliştirilen temel grafik arayuz oluşturma kütüphanesine verilen isimdir. AWT isletim sisteminin dogal grafik yapilarina erisimi saglar. Ancak Java 2 platformu ile birlikte AWT'nın yetersiz görülmüş ve çok daha geniş ve gelişmiş özelliklere sahip Swing kutuhanesi 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 5 ve 6 ile donanım özellikle OpenGL-DirecX kullanımı ve yeni arayuz gösterim şekli ile java'nin masaüstü uygulama geliştirmede popülerleşmesi bekleniyor. AWT halen swingin bir alt katmanında, temel 2 boyutlu grafik işlemlerinde kullanılmaya devam ediyor.
[değiştir] 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 sistminin 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. Swingin Java 1.5 ile performans açığını kapatacağı iddia edilse de SWT'nin de artık java camiasında kabul görmüş bir sistem olduğu aciktir. SWT'nin dezavantajı ise java'nin bir parçası olmamasıdır. yani SWT uygulamaları SWT kütüphanesi ile birlikte dağıtılmaktadır. Ayrıca SWT farklı işletim sistemlerinde farklı olgunluk ve performansta işlemektedir ve özellikle windows dişi sistemlerde henüz yeterince olgunlaşamamıştır. En bilinen SWT uygulamalari ünlü java yazılım geliştirme aracı Eclipse ve Bittorrent uygulamasi Azureus'tur.
[değiştir] Hot Spot Teknolojisi
Sun tarafından geliştirilen Java sanal makinesi HotSpot adı verilen özel bir teknolojiyi içinde barındı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. Hotspot sanal makinesi su anda iki ayrı modda sanal makinenin çalışmasını sağlamaktadır. Istemci (Client) ve Sunucu (Server) modlari. Istemci modunda byte kod buyuk ölçüde daha başlangıçta JIT ile sistemin öz makine koduna dönüştürülerek işletilir ama çalışma anında daha fazla iyileştirme işlemi gerçekleştirilmez. Bir uygulamanın hızı istemci modunda zaman içinde bu nedenle değişmez. Sunucu modunda ise sanal makine başlangıçta byte kodunu sistemin öz koduna dönüştürmekte acele etmez. Bu nedenle sunucu modu başlangıçta istemci modundan oldukça yavaştır. Program çalışmaya devam ettikçe sanal makine yazılımdaki sıcak noktaları tespit edip byte kodu sadece JIT ile makine koduna dönüştürmekle kalmaz, ayrıca oldukça yoğun bir iyileştirmeye de tabi tutar. Sonuçta sunucu modunda uygulamalar zaman içinde hızlanır, uzun soluklu uygulamaların bu nedenle sunucu modunda işletilmesi önerilir. Mustang Kod adli Java SE 6'da istemci modunda da benzeri bir teknolojinin kullanılması bekleniyor. Dolphin kod adli Java SE 7'de ise bu iki mod arasındaki fark azalacağından sistemin tek modda çalışması bekleniyor.
[değiştir] Applet
Applet, uzaktaki sistem üzerinden indirilip internet tarayıcı üzerinde çalıştırılabilien java uygulamalarına verilen isimdir. Java'nin son kullanıcılar tarafından tanınması applet sayesinde olmuştur dersek yanlış olmaz. Applet'ler sisteme zarar veremeyecek bir şekilde tasarlanmıştır ve bugün özellikle oyun sitelerinde halen yaygın olarak kullanılmaktadır. İçerisinde applet olan bir sayfayı açmaya çalıştığınızda tarayıcınız otomatik olarak java sanal makinesini çalıştırıp ekranın applet'e ayrılan bölümünde uygulamanın çalışmasını sağlar.
[değiştir] WebStart
Webstart teknolojisi uygulama kurulum, güncelleme ve silme dertlerine deva olmak üzere tasarlanmış bir sistemdir. Özellikle Java 1.5 ile daha yaygın kullanılmaya başlayacağı tahmin edilen 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. istenirse masaüstüne kısayol koymasını da sağlar. Daha sonra sistem cevrim-ici (on-line) ya da cevrim-disi (off-line) olarak calistirilabilir çalıştırılabilir, ve uzaktaki yazılım güncellendiğinde otomatik olarak -istenirse- yerel makinedeki yazılımın da güncelenmesi 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 (yanı virüs ve zararlı yazılım tehlikesini son derece aza indirger.)
[değiştir] Dış bağlantılar
- http://java.sun.com
- http://www.java.com
- http://www.java.net
- http://www.java-tips.org
- http://www.javaalmanac.com
- http://www.javalobby.com
Türkçe bağlantılar:
- http://ugur.wordpress.com/java-teknolojileri-ve-programlama-dili/
- http://ffjava.tripod.com
- Özgür Yazılım Sayfaları: Java Programlama Dersleri