Java Programlarının Hazırlanması

advertisement
Java Programlama Diline Giriş
●
●
●
●
Amaç:
Kullanacağımız Java Development Kit 1.1.6 ortamında, Java pogramlarının nasıl
hazırlanacağı öğretilecektir.
Basit Java program örnekleri ile Java programlarının yapısı öğrenciye
tanıtılacaktır.
Bu çerçevede Java dilinde bulunan iki değişik program yapısı olan konsol
uygulamaları (console applications) ve appletler (applets) anlatılacaktır.
Java Programlarının
Hazırlanması
●
●
●
●
Yazacağımız her Java programı ya bir konsol uygulaması ya da bir applet
olacaktır. Bir applet programı Netscape gibi bir web-browser ya da
kullanacağımız Java Development Kit (JDK) ortamında da bulunan ve basit bir
web-browser görevini yapan bir appletviewer ile çalıştırılır. Bir konsol
uygulaması diğer program dillerinde yazılan programlarına benzer ve bir webbrowser dışında çalıştırılır. Yazacağımız Java programı hangi tür olursa olsun,
programı hazırlamak için aşağıdaki aşamalardan geçmemiz gerekecektir:
Kurgulama (Editing)
Derleme (Compiling)
Çalıştırma (Executing)
Kurgulama
●
Yaratacağımız Java programını bir editör yardımı ile bir kütüğün içine koymalıyız.
Kullanacağımız editör vi, emacs, MS editör ya da notepad gibi bir kütüğü ASCII
text olarak yaratabilecek olan bir editör olmalıdır (MS-Word, WordPerfect gibi
yazılımlar kullanılmamalıdır). Yaratılan kütüğün adı .java eki ile bitmelidir. Bu ek
o kütüğün bir Java programı sakladığını gösterir. Örneğin, kütük adları
Test1.java ve Test2.java bir Java programı saklayan kütüklerin adları
olabilir. Her Java programını saklayan kütük bir Java sınıfını (class)
tanımlayacaktır. Bir sınıfın adı onu saklayan kütüğün adıyla aynı olmak
zorundadır. Java büyük ve küçük harf ayrımı yaptığından, eğer sınıf adında
büyük harf kullanıldıysa kütük adında da büyük harf kullanılmalıdır. Örneğin,
test1 ve Test1 Java tarafından iki farklı ad olarak görülecektir.
Derleme
●
Bir editör yardımı ile bir Java programını saklayan Test1.java kütüğünü
yaratmış olduğumuzu varsayalım. İkinci adım, bu kütüğü Java derleyicisiyle
derlemektir. Bir başka deyişle, yüksek seviyeli dille yazılan programımızı, bir ara
dile (Java byte code) çevirmemiz gerekmektedir. Bu amaçla JDK içindeki javac
programını kullanarak komut ortamında (DOS ya da UNIX ortamında) örnek
Java programımızı aşağıdaki komutu vererek derleriz:
javac Test1.java
Eğer yazdığımız programda hiçbir yazım hatası yoksa, bu komut Test1.class
kütüğünü yaratacaktır. Eğer programımızda yazım hataları varsa, .class
kütüğü üretilmeyecek ve javac programı, programımızdaki hataları, hata
mesajları ile bize bildirecektir. Bu durumda programımızdaki hataları bulup
hataya neden olan yerleri bir editör yardımıyla düzeltmeliyiz. Düzeltmeleri
yaptıktan sonra, programımızı yeniden derlemeliyiz. Bu işe programımızdaki
bütün yazım hataları temizlenene kadar devam etmeliyiz. Hatasız programlar
için yaratılan .class kütüğü yazdığımız Java programının bir ara-dil olan Javabytecode türünden gösterimidir. Bir başka deyişle, javac programı bizim Java
programlama dili kullanarak yazdığımız komutları Java-bytecode olarak bilinen
dildeki komutlara çevirir. Java-bytecode dilinin komutları hiçbir makinaya bağlı
olmadığından aynı kod değişik ortamlarda ve makinalarda çalıştırılabilir.
Çalıştıracağımız program, bu .class kütüğündeki program olacaktır.
Çalıştırma
●
●
●
Eğer yazdığımız Java programı bir konsol uygulaması ise, örnek programımız
için yaratılan ve Java byte kodlarını tutan Test1.class kütüğünü JDK'nın
içinde bulunan Java yorumlayıcısı java ile aşağıdaki komutu kullanarak
çalıştırabiliriz:
java Test1
Eğer programımız bir applet ise, bu applet için ilk önce bir HTML kütüğü
yaratmalıyız. Bu HTML kütüğünün adı, genelde programı saklayan kütükle aynı
olmalıdır; yalnızca eki .html olacaktır. Bu HTML kütüğünün içinden yaratılmış
appleti saklayan .class kütüğüne referans olacaktır. Yaratılan bu appleti
JDK'nın içinde bulunan ve basit bir web-browser olan appletviewer programı
ile çalıştırabiliriz. Örnek programımızı,
appletviewer Test1.html
komutuyla çalıştırmak gerekir.
Böylece Test1.html kütüğü appletviewer tarafından yüklenecek ve onun
içindeki referans sayesinde Test1.class içinde bulunan applet çalıştırılacaktır.
Basit Bir Konsol Uygulama
Programı
●
Bu bölümde basit bir konsol uygulama programının yapısını inceleyeceğiz. Şekil
2.1'de verilen uygulama programı bir editör yardımı ile AnaApplication.java
kütüğünün içine konduktan sonra,
javac AnaApplication.java
komutuyla derlenir ve bu derleme sonucunda AnaApplication.class kütüğü
yaratılır. Bu Java byte kodlarını saklayan kütük,
java AnaApplication
komutuyla çalıştırılır.
AnaApplication.java
1 import java.io.*;
2
3 public class AnaApplication {
4
5 public static void main(String args[]) throws IOException {
6
7 String yourName;
8
9 // Klavye ile ozdeslenen System.in akisini kullanacak olan
10 // yeni bir BufferedReader nesnesi yarat
11 BufferedReader stdin =
12 new BufferedReader(new InputStreamReader(System.in));
13
14 // prompti bastir
15 System.out.print("Adinizi girin ve enter tusununa basin > ");
16 System.out.flush();
17
18 // adin okunmasi
19 yourName = stdin.readLine();
20
21 // okunan adin Merhaba kelimesi ile birlikte yazilmasi
22 System.out.println("Merhaba " + yourName);
23 }
24 }
●
●
●
Her Java programı bir sınıftan ve her sınıf da bir ya da daha fazla işlevden
oluşur. Java sisteminde daha önceden tanımlanmış birçok sınıf vardır. Bu
sınıflardaki işlevlere bizim yazacağımız programlardan erişebiliriz. Java
sistemindeki sınıflar da gruplanan paketlere konmuştur. Bir paket birden fazla
sınıf kapsayabilir. Her sınıf, işlevlerine ek olarak o sınıfın bir nesnesini
yaratabilen özel bir işlevi ve o sınıfın değişkenlerini içerebilir.
Örnekteki konsol uygulama programında '//' ile başlayan satırlar açıklama
satırlarıdır. Programlama açısından hiçbir önemi olmayan bu satırlar yalnızca
programı açıklamak için kullandığımız bilgileri kapsar. Java derleyicisi bir satırın
'//' ile başlayan ve satırın sonuna kadar devam eden bölümünü açıklama olarak
görür ( NOT: Programda satırbaşlarındaki numaralar açıklama yapabilmek
amacıyla konulmuştur, ve programımızın bir parçası değildir).
Programımızın içinde, kodun okunmasını kolaylaştırmak için, istediğimiz kadar
boş satır kullanabiliriz. Java derleyicisi bu boş satırları gözönüne almaz.
●
Programın 3. satırdan 24. satıra kadar olan bölümü bir sınıf tanımlar. 11. satır
sınıfımızın adının AnaApplication olacağını ve o satırdaki public kelimesi de bu
sınıfın dışarıdan (yani başka sınıflardan) erişilebileceğini gösterir. Bu sınıfın
içindeki her şey, 3. satırdaki '{' sembolü ve 24. satırdaki '}' sembolü arasında
tanımlanmıştır. Bizim sınıfımız yalnızca tek bir işlev içermektedir ve bu işlev 5. ve
23. satırlar arasında tanımlanmıştır. 5. satır bu işlevin adının main olduğunu
gösterir. Her konsol uygulama programının tanımladığı sınıfın bir main işlevi
içermesi gerekir. Bu programı çalıştırdığımızda ilk olarak bu main işlevine
girilecek ve programın komutları o noktadan itibaren sırayla çalışmaya
başlayacaktır. Şu an için 23. satırdaki diğer bilgileri olduğu gibi kabul edelim;
çünkü onları daha sonra yeri geldiğinde daha ayrıntılı olarak işleyeceğiz. Şimdilik
her uygulama programının bir main işlevi olması gerektiğini ve onun ilk satırının
bu örnekteki gibi olmasını bilmemiz yeterli.
●
●
7. satır main işlevi içinde kullanılacak bir değişken (yourName) tanımlar. Bu satır
bu değişkenin türünün String olacağını belirtir. Bu değişken içinde veri türü String
olan değerleri saklayabiliriz. 11. ve 12. satırlar veri türü BufferedReader olan
başka bir değişken (stdin) tanımlar. Bu satırlar sadece o değişkeni tanımlamakla
kalmaz, aynı zamanda o değişkene ilk değerini de verirler. Burada klavye ile
özdeşleşen System.in akışından new işlemcisi ile yeni bir InputStreamReader
nesnesi yaratılır. Bu yaratılan InputStreamReader nesnesinden de yeni bir
BufferedReader nesnesi yaratılarak stdin değişkeni içinde saklanır. Bu nesne
klavyeden girdi almak için kullanılacaktır.
15. ve 16. satırlardaki çalıştırılabilir ifadeler ekrana veri girişi için mesaj bastırır.
Bu komutlar çalıştıktan sonra ekranda,
Adinizi girin ve enter tusuna basin
mesajı gözükecektir. 19. satır klavyeden sizin yazacağınız adınızı okur ve onu
yourName değişkeninin içine saklar. Adınızı yazdıktan sonra Enter tuşuna
bastığınızda adınız okunacaktır. 22. satırdaki komut da, programın okuduğu adın
önüne 'Merhaba' sözcüğünü koyarak yeniden ekrana yazdırır.
Konsol Uygulama
Programlarının Yapısı
Şimdi bir Java konsol programının genel yapısını inceleyelim. Her Java konsol
programı, bir ya da birden fazla işlevi içeren bir sınıftan oluşur ve bu işlevlerden biri
ana işlev (main method) olmalıdır. Hazır Java sınıflarından kullanmamız gerekenler
varsa, bunlar programın başında belirtilir. Aşağıdaki şekil bu genel yapıyı
göstermektedir:
imported classes
public class sınıfın-adı {
public static void main (String args[]) throws IOException {
değişkenlerin tanımlanması
çalıştırılabilir ifadeler
}
varsa diğer işlevler
}
imported classes
●
Bu bölümde, yazdığımız programın sınıfından erişilecek bütün hazır Java
sınıfları import komutu kullanılarak belirtilmelidir. Hemen hemen yazdığımız
bütün sınıflarda girdi ve çıktı yapacağımızı düşünürsek, girdi/çıktı işlemlerini
kapsayan java.io paketindeki bütün sınıfları her programımıza eklemeliyiz. Bunu
aşağıdaki ifadeyi kullanarak sağlayabiliriz:
import java.io.*;
public class
Bundan sonra public class sözcükleri, o sınıfın adı olacak bir tanımlayıcı (identifier)
tarafından izlenir.
Bu sınıf içinde tanımlanacak her şey sınıf adını izleyen '{' ile onu kapatan '}' arasına
konur. Bir uygulama programında en azından main işlevi bulunacağından sınıfın ilk
işlevi olarak main işlevini tanımlarız. Bu main işlev,
public static void main (String args[]) throws IOException {
ile başlar ve kapatan '}' simgesine kadar devam eder.
Değişkenlerin Tanımlanması
Her değişken tanımlama ifadesi bir ya da birden fazla değişkeni tanımlar.
Aynı türe sahip olan değişkenler tek bir tanımlama ifadesi ile tanımlanabilirler.
Eğer birden fazla değişken tanımlanacaksa, değişkenlerin adları virgül ile
ayrılır.
Her değişkenin adı bir tanımlayıcıdır. Tanımlayıcılar, harfleri, rakamları, _ ya da
$ karakterlerini içeren fakat rakamlar ile başlamayan sözcüklerdir.
Java büyük harf küçük harf ayrımına duyarlı olduğundan, aynı harfin büyük
harfi küçük harfinden farklıdır.
Örnek bazı tanımlayıcılar: x y n1 n2 p5 newvalue kelime
Bazı geçersiz tanımlayıcılar: 1a b+1
Değişkenler tanımlayıcıları ve türleri ile aşağıdaki gibi tanımlanırlar:
int x, y, z;
String prompt1, prompt2;
int A;
int b;
Burada, int,String gibi sözcükler, anahtar sözcüklerdir ve değişkenlerin türlerini
gösterir. Bunları daha ayrıntılı olarak önümüzdeki zamanlarda inceleyeceğiz.
Çalıştırılabilir İfadeler
●
●
●
●
●
●
Bu bölüme program işlediği zaman çalışan ifadeler konur. Bu komutlar
çalıştırılabilir komutlar olarak bilinir. Bazı çalıştırılabilir komutlar şunlardır:
atama ifadesi (assignment statement)
işlev çağırma komutu (method call statement)
if deyimi
while deyimi
Şimdiye kadar bir önceki bölümde yalnızca atama ifadesi ve işlev çağırma
komutları ile karşılaştık. Örneğin,
yourName = instream.readLine();
bir atama ifadesiydi ve
System.out.println("Merhaba " + yourName);
bir işlev çağırma komutuydu.
Basit Bir Applet Programı
●
İlerdeki örnekte verilen basit applet programı, önceki konsol uygulaması gibi
sizin adınızı okur ve onu 'Merhaba' kelimesiyle birlikte appletin içine yazar. Bu
applet programını yaratmak için bu örnekteki program bir editör yardımıyla
AnaApplet.java kütüğünün içine konur. Daha sonra,
javac AnaApplet.java
komutuyla derlendiğinde AnaApplet.class adlı kütük yaratılır. Bu programı
JDK içindeki appletviewer programı ile çalıştırmadan önce aşağıdaki satırları
AnaApplet.html kütüğüne, yine bir editörle, yazmalıyız.
<html>
<applet code="AnaApplet.class" width=400
height=200></applet>
</html>
Daha sonra
appletviewer AnaApplet.html
komutuyla yarattığımız appleti çalıştırırız. Bu applet çalıştığında Şekil 2.4'teki
applet ekranda gözükecektir. Appletin içindeki yazı alanının (TextField) içinde
adınızı yazıp Enter tuşuna bastığınızda, yazı alanının hemen yanında
'Merhaba' kelimesiyle adınızı göreceksiniz.
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class AnaApplet extends Applet implements ActionListener {
Label prompt,greeting; // ciktilarin yapilacagi bolgeler
TextField input; // girdinin yapilacigi bolge
// aplet ilk calistirildiginda bu method cagrilacaktir ve
// apletin gerekli olan kismilarini yaratacaktir.
public void init() {
// prompt bolgesini yarat ve appletin uzerine koy
prompt = new Label("Adinizi girin ve enter tusuna basin: ");
add(prompt);
// input bolgesini yarat ve appletin uzerine koy
input = new TextField(20);
add(input);
// greeting bolgesini yarat ve appletin uzerine koy
greeting = new Label(" ");
add(greeting);
// "this" (bu applet) input bolgesindeki olaylari dinleyip
// o olaylara karcilik verecektir.
input.addActionListener(this);
}
// Bu method adinizi yazdiktan sonra her enter
// tusuna bastiginizda cagirilacaktir
public void actionPerformed(ActionEvent e) {
greeting.setText("Merhaba " + input.getText());
input.setText("");
}
}
AnaApplet.java
Örnek Applet Programının
Yapısı:
●
Özetle:
– Programın başındaki import komutları ile java.awt,java.applet ve
java.awt.event paketlerindeki bütün sınıflara erişiriz. java.awt paketinden
TextField ve Label sınıflarını, java.applet paketinden Applet
sınıfını kullanırız. Bu sınıflardaki bütün işlevlere erişebiliriz.
– Yarattığımız yeni sınıf AnaApplet varolan Applet sınıfını genişletir. Eğer
istenen bir işlev bizim sınıfımız AnaAppletin içinde varsa o işlev
çalışacaktır; eğer yoksa o işlev Applet sınıfı içinde aranacaktır. Bu örnekte
biz yalnızca init ve actionPerformed adlı iki işlev tanımladık. Appletimiz ilk
çalışmaya başladığında init işlevi çalışarak appletimizin ilk görüntüsünü
sağlayacaktır. Appletimiz üzerindeki girdi bölgesinden adınızı girip enter
tuşuna bastığımızda ise actionPerformed işlevi çalışır.
– AnaApplet sınıfında üç değişken (prompt, greeting, input)
tanımladık. Bu değişkenler sınıf değişkenleridir ve o sınıftaki bütün işlevler
tarafından erişilebilirler.
Örnek Applet Programının
Yapısı(Devamı)
–
–
init işlevi appletimiz ilk çalışmaya başladığında çağrılır ve appletimizin
ekrandaki görüntüsünü yaratır. Bu amaçla iki Label nesnesini verilen ilk
değerleri ile new işlemcisini kullanarak yaratır, ve yaratılan nesneler prompt
ve greeting değişkenlerinin içinde saklanır. Daha sonra adımızı girmek
için kullanacağımız bir TextField nesnesi yaratır ve onu input
değişkeninin içinde saklar. Bu TextField nesnesinin büyüklüğü (adımızı
yazacağımız alanın büyüklüğü), 20 karakter uzunluğunda olacaktır. Bu üç
nesne add işlevi ile appletimizin içine konur. Bu işlevde en son yaptığımız iş
ise, input bölgesini appletimizin (this) bir dinleme bölgesi olarak
addActionListener işlevini kullanarak kayıt ederiz. Böylece input bölgesinde
her enter tuşuna basıldığında bu olay appletimize bildirilecektir.
actionPerformed işlevi adımızı yazıp enter tuşuna bastığımızda çağrılır.
greeting nesnesinin içi de, yazdığımız ad ve 'Merhaba' sözcüğünün
birleşiminden oluşan dizin ile doldurulur. Yazdığımız ad input.getText()
komutu yardımıyla okunur, daha sonra bu okunan ad ve bir dizin olan
'Merhaba' kelimesi + (ulama-concatenation) işlemcisinin yardımıyla
birleştirilir. Bu birleştirme sonucunda elde edilen dizin greeting nesnesinin
içine konan dizindir. input nesnesinin içi setText işlevi kullanılarak
temizlenir.
Örnek Applet Programının
Yapısı(Devamı)
–
Gördüğünüz gibi, bir appletteki işlevler bir sırayla çağrılmaz. Appletteki
işlevler bir olay (event) olduğunda ya da otomatik olarak sistem tarafından
belirli bir noktada çağrılırlar. init işlevi yalnızca appletimiz ilk çalışmaya
başladığında sistem tarafından bir kez çağrılır. Ama actionPerformed
işlevi, her adımızı yazıp enter tuşuna bastığımızda çalışır. Appletimizi
kapatmak istediğimizde bir olay olmuştur ve bu olaya karşılık verilecek olan
işlev otomatik olarak çağrılır. Bu kapatma olayına karşılık gelecek işlevi
kendimiz yazmadığımızdan Applet sınıfındaki kapatma işlevi çağrılmış
olacaktır.
Applet Programlarının Yapısı
imported classes
public class sınıfın-adı extends Applet {
değişkenlerin tanımlanması
işlevlerin tanımlanması
}
Applet Programlarının Yapısı
(Devamı)
●
●
●
Bu applet sınıfından erişilebilecek bütün sınıflar, konsol uygulama
programlarındaki gibi, import komutu ile belirtilir. Genelde java.awt (girdi/çıktı
yapan sınıflar) ve java.applet (applet sınıfı var) paketlerindeki sınıflara
ihtiyacımız olduğundan bu paketlerdeki sınıflara erişir ve onları kullanırız. Eğer
appletimizden olayları dinleyeceksek (girdi gibi), örneğimizdeki gibi
java.awt.event paketindeki sınıflara erişmemiz gerekir.
Yaratacağımız appletin tanımlanması,
public class sınıfın-adı extends Applet {
satırıyla başlar. Bu satırda sınıfımızın adı public class anahtar sözcüklerini
izler ve sınıfımızın diğer sınıflar tarafından istenirse görüleceğini belirtir. Sınıf
adını izleyen extends Applet, sınıfımızın Applet sınıfını genişlettiğini
gösterir. Eğer appletimiz olaylara karşılık verecekse, satırımıza örneğimizdeki
gibi implements ActionListener da eklemeliyiz. Appletin içi, '{' ve '}' arasında
tanımlanır.
Daha sonra appletimizin bütün işlevleri tarafından erişilebilecek değişkenler
tanımlanır. Bu tanımlardan sonra appletimizin işlevleri tanımlanır. Yazacağımız
işlevlerin bir bölümü appletimiz içinde olacak olaylara karşılık verecek olan
işlevler, diğer bir bölümü de başka amaçlar için yazacağımız işlevler olacaktır.
Appletimizde olaylara karşılık verecek bazı işlevler şöyledir:
Applet Programlarının Yapısı
(Devamı)
●
●
●
●
●
public void init()
Bu işlev, applet ilk başladığında bir kez çağrılır ve appletin ilk yapması gereken
işleri yapar.
public void paint (Graphics g)
paint işlevi, init işlevinden sonra ve appletimizin yeniden boyanması
gerektiği bütün diğer durumlarda otomatik olarak çağrılır.
public void destroy()
destroy işlevi, applet yokedileceği zaman çağrılır.
public void actionPerformed(ActionEvent event)
Bu işlev, appletimizde her olay olduğunda otomatik olarak çağrılır.
(Yukarıdaki işlevlerin tümünü tanımlamak zorunda değiliz; yalnızca kontrol
etmek istediğimiz bölümlerin işlevlerini yazarız ve geri kalan olaylar Applet
sınıfının içindeki işlevler tarafından kontrol edilir. Eğer appletimizden bir işlev
çalıştırılması istendiğinde, o işlev appletimiz içinde tanımlanmamış ise, o işlevi
Applet sınıfından alırız.)
SON
Download