Java Nedir?

Bu kitap hiç programlama bilmeyenler için yazılmıştır.

Bir programlama dilini öğrenmek, anadil öğrenmeye benzer. Çocukken, ana dilimizin sözdizimini (gramer) bilmeden, başkalarının yaptığı gibi kullanmaya başlarız; yani taklit ederiz. Ancak okula başladıktan sonra grameri adım adım öğreniriz. Bu derste genellikle bu yöntemi izleyeceğiz; yani Java dilini sistematik değil, pedagojik öğreneceğiz. Bir çok kavramı önce kullanacak, sonra onların esasını öğreneceğiz.

İlk bölümlerde söylenen kavramları esastan anlamanız beklenmiyor. Programların sözdizimlerinin (syntax -gramer) dayandığı temelleri iyi anlamasanız bile, bir çocuğun ana dilini öğrenmesi gibi, o kalıpları olduğu gibi kullanmaya çalışmalısınız. Yeni başlayanların bir dili öğrenmesinin en iyi yolu budur. Taklit etmek ve bolca tekrarlamak. Bu ders boyunca kavramları sık sık tekrarlayacağız ama her tekrarda o kavrama yeni bilgiler eklemiş olacağız.

Birinci Bölümde Nesne Yönelimli Programlama kavramına doğrudan girmek yerine, her programlama dilinde var olan ve programlamanın temelleri sayılan kavramlar, hiç programlama bilmeyenler için açıklanacaktır. Daha önce bir programlama dili öğrenmiş olanlar, bu bölümü okumadan atlayabilirler.

Java Programlama Dili

İlk bilgisayarlar ortaya çıktığında, şimdi kullandığımız FORTRAN, COBOL, Pascal, C/C++, Java gibi üst düzey diller yoktu. Farklı makinelerin donanım yapıları farklı olduğu için, farklı marka ve model bilgisayarların makine dilleri (makinelerin anladığı tek dil) birbirlerinden farklı idi. O nedenle, ilk programcılar, bilgisayara, ancak kullandıkları makinenin  makine dili ile iş yaptırabiliyorlardı. Makine dilini öğrenmek zor olmak yanında, bir makine için öğrenilen makine dili, farklı marka ve modeller için geçerli olmuyordu. Bu zorluğu aşmak için önce assembler dili ve hemen arkasından üst düzey diller ortaya çıktı. Üst düzey diller, programcılara büyük rahatlık getirdi. Çünkü, programcı, işletim sistemini ve makineyi düşünmeden, kaynak programını istediği dille yazabiliyordu. Örneğin, C ile yazılan bir kaynak programı, uygun derleyici ile her işletim sisteminde ve her makinede derlenip çalıştırılabiliyordu. [Tabii, C derleyicisi yazan farklı şirketlerin standarttan ufak sapmalarını göz ardı ediyoruz.] 

Şimdi adına prosedürel diller denilen FORTRAN, COBOL, Pascal, Modula, C gibi üst düzey diller uzun yıllar programcılara başarıyla hizmet ettiler; halen de etmektedirler. Ama ortada bir problem vardı. Belirli bir işletim sistemi altında çalışan belirli tür bir makinede derlenen bir kaynak program, ancak o işletim sistemi altında çalışan o tür makinelerde koşturulabiliyordu. İşletim sistemi ve/veya makine türü değişince; yani platform değişince, program orada koşamıyordu; yeni platforma uygun bir derleyici ile yeniden derlenmesi gerekiyordu. Buna, kısaca platform bağımlılık diyoruz. Platform bağımlılıktan kastettiğimiz şey, bir kaynak programın belirli bir işletim sistemi altında çalışan belirli bir derleyici ile derlendiği ve ancak belirli bilgisayar türlerinde koşturulabildiği gerçeğidir. Örneğin, Windows işletim sistemi altında çalışan bir PC de derlenen bir bilgisayar programını  Macintosh ya da Linux işletim sistemi altında çalışan bir makinede koşturmak mümkün değildir.

Piyasaya farklı işletim sistemlerinin ve çok sayıda farklı donanımın çıkması, bilgisayar ağlarının gelişmesi, bir ağa bağlı makinelerin farklı işletim sistemleri altında çalışan farklı marka ve model bilgisayarlardan oluşuyor olması problemi büyüttü.

Problemin çözümü, platformdan bağımsız çalışabilecek bir dilin yaratılmasını gerektiriyordu. Bu iş, Sun firmasının geliştirdiği Java dili ile çözüldü. Gerçi Sun firması, ortaya çıkan bu büyük problemi çözmek için değil, daha basit bir amaçla yola çıktı. Elektrikli ev aletlerinin kolay kullanılmasını sağlayacak bir dil geliştirmek istiyordu. Kısa zamanda, bu işin ancak ortak bir platformda yapılabileceğini anladı. Sun’ın programcısı James Gosling, 1995 yılında her platformda çalışan Java dilini yarattı.

Gosling basit ama harika bir buluş yaptı. Farklı işletim sistemleri ve farklı donanımlarda kurulabilen ortak bir sanal makine tasarladı. Adına JVM (Java Virtual Machine) denilen bu sanal makine ücretsiz dağıtıldı. JVM her platforma kolayca kurulabilir. Java dili ile yazılan kaynak programlar, java derleyicisi ile JVM de çalışabilen bir tür makine diline dönüştürülür. Adına java byte kod denilen bu program JVM tarafından yorumlanır ve çalıştırılır. Java byte kod bir bakıma, prosedürel dillerde yazılıp derlenmiş kaynak programların işlevini yapar.

Java uygulamalarını çalıştırmak isteyen herkes, kendi makinesine JVM ‘i kurabilir. Bunun için JRE (Java Runtime Environment) adlı programı internetten indirip yüklemesi yetecektir. JRE bilgisayara bir kez yüklenir. Ondan sonra Java uygulamalarının hepsi bu makinede çalışabilir. Makinede bir java uygulaması çalışacağı zaman, JRE kendiliğinden JVM sanal makinesini oluşturur. JVM gerektiğinde çalışan bir programdır; her program gibi, işi bitince ana bellekten silinir. Dolayısıyla makineye bir zarar vermesi söz konusu değildir. Günümüzde, java uygulamaları ile karşılaşan tarayıcıların çoğu, JRE’yi otomatik olarak indirip yükleme yeteneğine sahiptir.   

Java basit, modern, nesne yönelimli, tip-korumalı ve C ile C++ dillerinin iyi özeliklerini almış bir dildir. Fazla olarak, her platformda çalışabilme yeteneğine sahiptir. Bu yetenek, onu yalnız bilgisayarlarda değil, internet uygulamalarına, cep telefonlarına, oyun makinelerine, ev aletlerine kadar geniş bir yelpazede uygulama alanı bulmasını sağladı. Bu nedenle, Java’yı hem programlama dili, hem de bir ortam olarak düşünebiliriz. Bu ortamda işletim sistemi, ağlar, internet programlama, veritabanı ve bütün orta katman (middleware) teknolojileri yer alır.

 

Özetle, Java basit bir dildir. Kolay öğrenilir. Genel amaçlı bir dilin bütün hünerlerine sahiptir. C, C++ dillerinin iyi özeliklerini almıştır. Kullanıcı dostu ve hızlı bir uygulama geliştirme  aracıdır.

 

Java dilinin başlıca nitelikleri

Java’nın kendi sitesinde Java’nın nitelikleri şu deyimlerle belirtiliyor:

·          Basittir

·          Mimari yapıdan bağımsızdır

·          Nesne Yönelimlidir

·          Taşınabilir

·          Dağıtıktır

·          Yüksek performansı vardır

·          Çoklu İş Yeteneği vardır

·          Sağlamdır

·          Dinamiktir

·          Güvenlidir

Biraz programlama bilenler bu deyimlerin ne anlama geldiğini kolayca sezebilirler. Bu kitap hiç programlama bilmeyenler için yazıldığına göre, yukarıdaki deyimleri biraz açıklamakta yarar olabilir. Yapılan açıklamaları şimdi anlamayanlar üzülmesinler, çünkü basitçe söylenen bu deyimler java dilinin özüdür. Onların gerçek anlamları ancak, kitabın tamamı okunduktan sonra iyice anlaşılabilecektir.

 

Java basittir. Java’yı tasarlayanlar kaynak programın kolay yazılabilmesini, kolay derlenmesini ve kolay düzeltilmesini (debug) amaçladılar. Java’nın C++ diline göre çok daha basit olmasının temel nedeni, otomatik bellek tahsisi yapması ve işi biten nesneleri bellekten yok etmesidir (garbage collection).

Java nesne yönelimli bir programlama dilidir. Nesne yönelimli programlama paradigmasının bütün avantajlarını taşır. Programcıya kalıtım, polimorfizm, modular programlama, hata ayıklama (debug) ve kodların yeniden kullanılabilmesi gibi önemli yetenekleri sunar.

Java dağıtık bir sistem olma niteliğine sahiptir. Bir ağ üzerindeki birden çok farklı bilgisayarın bütünleşik bir sistem olarak bir arada çalışmasını sağlar.

Java çoklu iş yapma (multithreaded) yeteneğine sahiptir. Çoklu iş yapma niteliği, bilgisayarın aynı anda birden çok işi yapabilmesi demektir. Başka dillerde sistemle ilgili prosedürlerin çağrılmasıyla yaptırılan multithreaded özeliği java dilinin özünde vardır. Multithreaded yeteneği, özellikle görsel programlamada ve ağ programlamada önem kazanır.

Java platform bağımsızdır. Java programları harklı platformlar için ayrı ayrı değil, JVM için bir kez derlenir. Derleme sonunda ortaya çıkan java bytecode JVM tarafından yorumlanır. Bytecode, JVM yüklü her makinede çalışabilir. JVM sanal makinesi her makineye kolayca ve ücretsiz yüklenebilir. Dolayısıyla, java programları bir kez yazılır ve her yerde çalışır.

Java taşınabilir. İşletim sisteminden ve donanımdan bağımsız oluşu nedeniyle, Java Bytecode bir bilgisayar sisteminden farklı bir başkasına kolayca taşınır. Aynı java  programının farklı sistemlerde sorunsuz çalışabilme yeteneği,  programlama alanında geniş ufuklar açmıştır.

Java sağlamdır. Başka dillerin ancak koşturma anında belirleyebileceği hataları, java  derleme anında belirler. Güçlü hata ayıklama (debug) yeteneği vardır. 

Java güvenlidir. Java dili, derleyicisi ve yorumlayıcısı güvenlik öncelikli olarak tasarlanmıştır. Tasarımında güvenliği öne çıkaran ilk dildir.

Java Ağ dostudur. Java’da ağ programı yazmak, dosyalara veri gönderip veri almak kadar kolay bir iştir.

 

Java Dilinin Başlıca Uygulama Geliştirme Araçları

Genel amaçlı üst düzey bir dil olan Java güçlü bir yazılım geliştirme aracıdır. Java ile yapılan bazı uygulamaları şöyle sıralayabiliriz:

Yazılım Geliştirme Araçları

Kaynak programı derleme, koşturma, hata ayıklama ve uygulama programının dökümantasyonunu hazırlamak için gerekli olan araçlar JSDK içinde yer alır. Windows işletim sisteminde java kaynak programlarını derlemek için JSDK içindeki javac.exe derleyicisini, java uygulamalarını çalıştırmak için java.exe programını ve doküman hazırlamak için javadoc.exe yorumlayıcısını kullanacağız. Başka işletim sistemleri için de bu programların karşılıkları vardır.

Uygulama Programları Arayüzü

[API - Application Programming Interface] : Java’nın en önemli özeliklerinden birisi büyük ve ücretsiz bir kütüphaneye sahip olmasıdır. Java API  denilen bu kütüphanede bir programcının gerekseme duyabileceği basit sınıflardan başlayarak, ağ, güvenlik, XML, veri tabanlarına erişim gibi ileri konularla ilgili sınıflar, arayüzler ve metotlar yer alır. Bu satırların yazıldığı sırada, sözkonusu kütüphane http://download.oracle.com/javase/6/docs/api/  adresinde yer almaktadır. Bu adrese isteyen herkes ulaşabilir ve orada yer alan araçlar, gene ücretsiz olarak dağıtılan JSEDK [Java Standard Environment Development Kit 6]  içinde yer alır. Bu satılar yazılırken JSEDK nın 6. Sürümü sonuncudur. Zaman içerisinde, JSEDK nın ve dolayısıyla API nin yeni sürümleri ortaya çıkar. Yeni uygulamalar yazarken, en son sürümün kullanılması tercih edilmelidir.

Kullanıcı Arayüzü Araçları

Kullanıcı görsel arayüzlerini [GUI- Graphical User Interfaces] hazırlamak için, Java dili, Swing ve Java 2D gibi gelişmiş araçlara sahiptir.

Bütünleşik Kütüphaneler

Java IDL API, JDBCTM API, Java Naming and Directory InterfaceTM ("J.N.D.I.") API, Java RMI  (Java Remote Method Invocation over Internet ), Inter-ORB Protocol Technology (Java RMI-IIOP Technology) gibi araçlar, veri tabanlarına ve uzaktaki nesnelere erişimi sağlar.

Java Dilinin Başlıca Uygulamaları

Sınıf Kütüphaneleri                  Başka uygulamalarda kullanılacak kütüphane sınıfları yaratır.

Konsol Uygulamaları               Satır komutu arayüzü için görsel Java uygulamaları yaratır.

Web Uygulamaları                   Web kullanıcı arayüzü için görsel Java uygulamaları yaratır.

XML Uygulamaları                 xml Web servisleri yaratır.

Veritabanı Uygulamaları           veritanlarını yönetmek için uygulama programları yaratır.

Mobile Web Uygulamaları        PDA,  cep telefonları gibi taşınabilir cihazlar için uygulama programları yaratır.

Oyun Programları                   java ile gelişkin oyun programları yazılır.

 

Java size ne sağlar?

Java dili bilgisayarla ilgili hemen her konuda işe yarayan bir dil olduğu için, bütün dünyada, java programcıları üstün bir ayrıcalığa sahiptir. Onlar kolayca yüksek ücretli iş bulabilirler. Programcılığa yeni başlayan birisi iseniz, java, bu derste size şu kolylıkları sunacaktır:

 

·         Java basit bir dil olduğu için, onu diğer dillere göre daha kısa bir zamanda öğreneceksiniz.

·         Java programları, örneğin, aynı işi yapan C++ kaynak programlarının dörtte biri kadar uzundur. Dolayısıyla daha az kod yazarak zamandan ve emekten kazanacaksınız.

·         Daha kolay kod yazacaksınız. Java API size gerekseme duyacağınız hemen her sınıfı ve metodu hazır verecektir. İstediğinizde, bu sınıfları ve metotlarını kullanabilecek, istediğinizde onlardan altsınıflar türetebileceksiniz. Bunları yapmakla, kaynak programınızda oluşabilecek hataları önlemiş olacaksınız. Tabii, gerekseme duyuyorsanız, her zaman yeni sınıflar ve yeni metotlar yazabileceksiniz.

·         Java uygulamalarını bir kez yazıp her yerde çalıştırabilirsiniz.

·         Yazdığınız uygulamalar, Java API dışında bir kütüphane kullanmadığı için, her platformda çalışır. Dolayısıyla onları kolayca yayabilirsiniz.

 

Programlamanın Evreleri

Kullanılan dil ne olursa olsun, programlama eylemi şu evrelerden oluşur:

1. Kaynak programı yazma

Herhangi bir programlama dilinde metin (text) olarak yazılır. Kaynak program, kullandığı dilin sözdizimine (syntax) uymalıdır.

2. Derleme

Kaynak programı bilgisayarın anlayacağı bir ara dile dönüştürür. Ara dil kullanılan dile bağlıdır. Örneğin, C dilinde obj kodları, java dilinde bytecode, C# dilinde IL, vb adlar alır.

3. Aradil kodları yürütülebilir makine diline dönüştürülür 

Programın koşabilir (yürütülebilir, çalışabilir, yorumlanabilir - executable) olabilmesi için, kullanılan bilgisayar sisteminin anladığı dile (makine dili) dönüşmesi gerekir. Java derleyicisinin yarattığı bytecode, JVM tarafından yorumlanır.

Bu bağlamda bir konuyu daha açıklamakta yarar vardır. Çağdaş programcılıkta, her şey bir program içinde yapılmaz. Daha önce yaratılmış, kullanılmaya hazır çok sayıda program öğeleri vardır. Bunlar, kullanılan dilin kütüphanesi gibidir. Programcı, kütüphaneden istediklerini alıp, kendi programına yerleştirebilir.  Birleştirme yöntemi farklı olsa da her dilde bu olanak vardır. Java  dilinin çok geniş bir kütüphanesi vardır. Onu kullanmayı gelecek bölümlerde öğreneceğiz.

Java kaynak programlarının nasıl derleneceğini ve nasıl yorumlanacağını Birinci Bölümde anlatmıştık. Öğrenci, önce o bölümü okumalıdır.