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.
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.
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 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.
Kullanılan dil ne olursa olsun, programlama eylemi şu evrelerden oluşur:
Herhangi bir programlama dilinde metin (text) olarak yazılır. Kaynak program, kullandığı dilin sözdizimine (syntax) uymalıdır.
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.