Java Nedir?
Bundan taa 8 sene kadar önce, bu bloğun ilk yazılarından birisi olarak “Java Nedir?” başlıklı bir yazı yazmıştım. Tabi o zamandan bu yana köprünün altından çok sular aktı ve ben de biraz hatırlatma biraz yeni bilgilerle “Java Nedir?” sorusuna tekrar cevap vermek istedim.
Java’nın Kısa Tarihi
Sun Microsystems, 1982 yılında iki mühendis ve iki işletmecinin ortak girişimi olarak kuruldu. Sun, Solaris işletim sistemi ve Sparc CPU ve makinaları (workstation) ile kurumsal Unix platformlarında başarılı bir markaydı. Sun yeni imkanlar aramak adına 1991’de Sun, Patrick Naughton, Mike Sheridan ve James Gosling önderliğindeki küçük bir takımla bir AR-GE projesi başlattı. “Green Team” (Yeşil Takım) adlı bu takımın amacı ICT (Information & Communication Technology) dünyasına yönelik AR-GE yapmaktı.
18 aylık bir çalışmadan sonra 1992 yazında “*7”, (Star Seven) isminde, dokunmalı ekrana sahip bir kontrol cihazı geliştirdirler. “*7”, TV, video oynatıcısı ve müzik seti gibi pek çok ev cihazını kontrol edebiliyordu. Bu konuda Gosling’in şu videosunu seyredebilirsiniz: https://www.youtube.com/watch?v=1CsTH9S79qI
Gosling, projede önce C++’ı kullanıp, ona bazı eklentiler yapmasına rağmen sonrasında yepyeni bir dil geliştirmenin daha iyi olacağını düşündü. Oak ismini verdiği bu dil, C/C++’a çok benzer söz dizimine sahip, nesne-merkezli ve platformdan bağımsızdı. Basit olması için, C/C++’ın pek çok özelliğini dışarıda bırakacak şekilde tasarlanmıştı
Green Team’in projesi ticari olarak başarılı olamadı. Ama takımın ileri gelenleri o sırada, geliştirdikleri alt yapının ve Oak dilinin Internet’e çok uygun
olduğunu farkettiler ve hemen yönlerini değiştirip, ismi daha sonra resmi olarak HotJava olan Java-tabanlı bir tarayıcı geliştirdiler: WebRunner
Bu konuda Gosling daha sonra şöyle demişti: “We had already been developing the kind of `underwear’ to make content available at the same 9me the Web was being developed. Even though the Web had been around for 20 years or so, with FTP and telnet, it was difficult to use. Then Mosaic came out in 1993 as an easy-to-use front end to the Web, and that revolutionized people’s perceptions. The Internet was being transformed into exactly the network that we had been
trying to convince the cable companies they ought to be building. All the stuff we had wanted to do, in generali9es, fit perfectly with the way applications were written, delivered, and used on the Internet. It was just an incredible accident. And it was patently obvious that the Internet and Java were a match made in heaven. So that’s what we did.”
Java, Sun tarafından 23 Mayıs 1995’te genel amaçlı bir programlama dili olarak piyasaya sunuldu. Java ilk çıktığında, yukarıda anlatılan sebeplerden dolayı pek çokları tarafından “Web’in dili” olarak algılandı. Nitekim Netscape’in web yenilikleriyle ile Java birlikte gelişti. Oracle’ın 2010 yılında Sun’ı satın almasıyla Java, Oracle’ın sahipliğinde hayatına devam etmektedir.
Java’nın çıkışıyla ilgili hala erişilebilen şu online kaynağa bakabilirsiniz: http://tech-insider.org/java/research/1998/05.html
Java’nın Temel Özellikleri
Java, söz dizimi (syntax) açısından C++’a çok benzeyen ve temelde Smalltalk ve C++ kültürünü benimseyen bir dildir. Java, 90lı yıllarda en yaygın sistem geliştirme dili olan C/C++’ın yerine geçecek şekilde geliştirildi. C++’dan daha küçük, daha soyut ve daha yetenekli bir dil olması amaçlandı.
1995 yılında büyük bir beklenti ile karşılanan Java’nın, o günden bugüne bu beklentileri karşıladığı söylenebilir. Java, muhtemelen, şu anda dünyada en geniş geliştirici topluluğu tarafından kullanılan, en büyük kapalı ya da açık kaynak kodlu kütüphanelere sahip, en çok kullanılan yazılım geliştirme dilidir.
Java Nedir?
Sun, 1995’te Java’yı sunarken yayınladığı ve “Java’nın babası” James Gosling’in kaleme aldığı bir yazıda (bu yazı “Java Whitepaper” diye anılan ve 1994 ve 1995 yıllarını tarih olarak içinde barındıran makaledir. Bu makaleyi Oracle’ın sitesinde bulamadım, bu adreste buldum. Bu tanıtıcı ve kısa makalenin daha uzun hali, 1996 Mayıs tarihli olarak ve yine James Gosling’in elinden çıkmış bir şekilde, “The Java Language Environment” başlığıyla yayınlandı ve şu anda da Oracle’ın Java sayfalarında bulunmakta.) Java’yı şöyle tanıtıyordu:
Java: A simple, object-oriented, network-savvy, interpreted, robust, secure, architecture neutral, portable, high-performance, multithreaded, dynamic language.
ya da
Java: Basit, nesne-merkezli, ağlarda yetenekli, yorumlanan, sağlam, güvenli, mimari olarak tarafsız, taşınabilir, yüksek performanslı/ba.arımlı, çok kanallı, dinamik bir dil.
Java Basittir
Java, ataları olan C ve C++’tan daha basittir. Çünkü onların pek çok karmaşık özelliğini budamıştır:
- Pointer aritmetiği,
- Programcıya bağımlı bellek yönetimi (memory management),
- İşlemci çoklu kullanımı (operator overloading),
- Platforma bağımlı yapılar.
Budanan ve yeni gelen özellikler ile Java, C/C++’tan daha küçük ama özellikle genel amaçlı kullanım ve iş uygulamaları için, nesne-merkezli ve daha soyut yapısı sayesinde daha güçlü bir dil oldu. Budanan özellikler ve soyut yapısı, Java’yı daha rahat kullanılabilir hale getirdi.
Diğer Özellikleri
Nesne-merkezli (object-oriented), ağlarda yetenekli (network-savvy), sağlam (robust), güvenli (secure) ve çok kanallı (multithreaded) gibi
özellikleri, 90’lı yılların şartlarında ve C/C++’a göre yorumlamak daha anlamlıdır. Bugünlerde bir dilin bu özelliklere sahip olması sıradan bir durum olarak görülür.
Dinamik Dil
Java, dinamik tipli (dynamically-typed) değildir, aksine statik tipli (statically-typed) bir dildir. Java’nın dinamik olmasıyla kastedilen, tipleri
çalışma zamanında (run-time) yükleyebilmesidir. Dolayısıyla Java’da bir programın kullanacağı tipler,
uygulamanın derlenmesi ya da ayağa kalkması sırasında hazır olması gerekmez. Webin tabiatına daha uygundur.
Mimari Olarak Tarafsız
Mimari olarak tarafsız (architectural-neutral) olması, Java’nın herhangi bir platforma (donanım ve işletim sistemi) bağımlı olmaması demektir. Java, standartlar üzerine kurulmuştur. Örneğin, int her platformda 32-bittir. Ayrıca, Java ve JVM, platformlarla alakalı sadece en genel ön kabullere sahiptir
Taşınabilir
Java’nın platformlardan bağımsız olması ve yorumlanan (interpreted) tabiatı, onu aynı zamanda taşınabilir (portable) kılmaktadır. .java uzantılı dosyalarda saklanan Java kaynak kodu derlendiğinde (compiled), .class dosyasında bytecode olarak saklanır ve bytecode, platformdan bağımsızdır, JVM’in olduğu her ortamda çalıştırılabilir. Aşağıdaki çizimlerde bu mekanizma anlatılmaktadır.
WORA ve WOTA
Başından bu yana Bir Kere Yaz Her Yerde Çalıştır (Write Once, Run Anywhere, WORA) Java’nın taşınabilirlik konusundaki hedefidir. Tabi olarak bu prensibin geçerli olması için Java programcısı da platforma özel kod yazmamalıdır. Ama pratikte geçerli olan, Bir Kere Yaz Her Yerde Test Et (Write Once, Test Anywhere, WOTA) prensibidir.
Yüksek Başarımlı
Yüksek başarımlı (high-performance) ile aslen, tüm bu özelliklerine rağmen performans açısından iyi bir seviyede olduğu/olabileceği/olma hedefi vurgulanmıştır. Aslen Java’nın performansı ilk yıllarında iyi değildi. Fakat özellikle 2. sürümünden itibaren HotSpot JVM ile performansı iyileşti. Sonraki sürümlerinde özellikle kullanılmayan nesnelerin toplanmasından sorumlu çöp toplayıcı (Garbage Collector, GC) noktasında yapılan iyileştirmeler, Java’yı hemen her türlü yüksek performans ve ölçeklenirlik gerektiren uygulamalar için uygun hale getirmiştir. Her halükarda Java geliştirenlerin performans konusunda bilgili ve dikkatli olmaları gereklidir.
Nesne-Merkezli
Java nesne-merkezli bir dildir. Nesne-merkezli diller, prosedürel/yordamsal dillerden çok farklıdırlar. Yordamsal dillerde en önemli kavram/soyutlama yordam/prosedür/fonksiyondur ve bu yapılar, bir problemi alt problemlere bölüp, her birini adım adım (step-wise decompositioon) tanımlamakta kullanılır. Fakat nesne-merkezli diller tamamen nesne kavramı üzerine otururlar.
Nesne, insan zihninin kendisine yöneldiği, özellik ve davranı.lara sahip, fiziksel olan ya da olmayan herhangi
bir olgudur. Yazılımda her tip nesne için, verisi ile davranışını bir paket haline getirip sarmalayan ya da kapsülleyen (encapsulation) ve adına genelde sınıf (class) denen kalıplar (şablonlar) oluşturulur.
Sınıf = Veri + Davranış
Nesneler, sınıflardan üretilmiş çalışma zamanı yapılarıdır.
Java Derlenir
Derleme (compilation) ve yorumlama (interpretation), programlama dilleri dünyasının en temel kavramlarındandır. Genel olarak derleme, kaynak kodun bir formdan
başka bir forma çevrilmesidir. Özelde ise kaynak kodun, çalıştırılabilir (executable) makina koduna çevrilmesidir.
Yorumlama ile kaynak kod, başka bir forma çevrilmeden, makina kodundaki bloklar çağırılarak çalıştırılır, yorumlanır.
Derlenen kodlar, çok daha etkindirler çünkü hem hatadan temizlenmişlerdir hem de çalışma zamanına daha az iş bırakmışlardır. Ama makina koduna derleme, kodu platforma bağımlı kılar. Yorumlama, kodu daha kırılgan ama dinamik ve platformdan bağımsız yapar, çünkü, platform bilgisi ancak çalışma zamanında gerekir.
Java hem derlenir (compiled) hem de yorumlanır (interpreted). Java’nın çıktığı zamanın paradigması genel olarak güçlü sistem dillerinin derlenen olmasıydı. Bu durum programları hem daha az hatalı hale getiriyor hem de çok ciddi performans avantajı sağlıyordu. Java ise iki tarafın da avantajlarını kullanabilmek için hem derlenen hem de yorumlanan bir yapıda tasarlanmıştır. Bu sayede Java hem olabildiğince sağlam (robust) bir çalışma-zamanı yapısı geliştirmiş hem de platformadan bağımsız olmuştur. Bu sebeple Java’nın yorumlanan yapısı daha fazla vurgulanmıştır.
Java kaynak kodları (.java dosyaları) doğrudan makina koduna derlenmez, bytecodelardan oluşan .class dosyalarına derlenir. Bytecodelar ise çalışma zamanında JVM tarafından yorumlanır. Bytecodelar, JVM’in komutlarıdır, Bir byte uzunlu.unda olduğu için böyle adlandırılmıştır. Bytecode, herhangi bir işlemciye özel değildir yani sadece JVM’e özeldir. Bytecodelar, JVM tarafından çalışma zamanında platforma özel komutlara çevrilir, yorumlanır. Bu şekilde Java’nın platformdan bağımsız ve taşınabilir olması sağlanır.
JVM
JVM (Java Virtual Machine ya da Java Sanal Makinası), platform üzerinde çalı.an sanal bir makinadır. Derlenmiş Java kodlarını, bytecode, çalıştıran sistemdir. JRE’nin (Java Runtime Environment) ana parçasıdır, C/C++ ve Java ile yazılmıştır. Java’nın çalışması beklenen her platformda kurulu bir JVM olmalıdır. JVM’i, geliştiriciye bakan yüzü standart ama platforma bakan yüzü, onunla konuşan bir ara katman olarak düşünebilirsiniz.
Java’nın Tipleri
Farklı türde uygulamalar için 3 farklı Java sürümü ya da paketi mevcuttur:
- Standart Java (Standard Edition, SE), çekirdek dildir. En son 9. sürümü çıkmıştır.
- Mikro Java (Micro Edi5on, ME), gömülü ve mobil ortamlar içindir. En son 8. sürümü çıkmıştır.
- Kurumsal Java (Enterprise Edition, EE), kurumsal uygulamalar içindir. En son 8. sürümü çıkmıştır.
21 Eylül 2017’de Java SE’nin 9., Java EE’nin 8. sürümü yayınlandı. Java EE ve ME, Java SE üzerine bina edilmiştir. Dolayısıyla önce Java SE öğrenilmeli, daha sonra ihtiyaca göre örneğin Java EE’nin web, entegrasyon ya da transactional yapılarına geçilmelidir.
Java’nın Popülerliği
(Dillerin popülerliği ile ilgili pek çok index vardır. Kesin bir şey söylemek zor olsa bile muhtemelen Java en çok kullanılan 2-3 dilden birisidir. İddia edilen şey, Java’nın muhtemelen, dünya çapında en büyük geliştirme toplumuna sahip bir dil olduğudur. Örneğin Java TIOBE indexinde Ekim 2017’de birincidir. Dünya çapında 7 ila 10 milyon civarında geliştirici sayısından bahsedilmektedir. TIOBE’ye göre dünyadaki programcıların %17’si Java kullanmaktadır. Ya da Amazon’da farklı dilleri kullanarak kitap araması yapıldığında Java kitaplarının en zengin grubu oluşturduğunu görebilirsiniz.
Pek çok ülkede olduğu gibi ülkemizde de iyi yetişmiş programcı/developer eksikliği söz konusudur. Bu konuda kesin bir ölçüme ya da niceliksel bir çalışmaya rastlamamış olmakla beraber, kurumsal uygulamalar (örneğin 10 ya da daha fazla programcıya sahip olan yazılım evleri ve BT birimlerinin projeleri bu tanıma girsin) açısından bakıldığında muhtemelen ülkemizde de Java dünyası en geniş dil topluluğunu oluşturuyor olabilir.
Bol Java’lı günler dilerim 🙂
Toplam görüntülenme sayısı: 3051