You are on page 1of 15

Web Programc›l›¤›

<<
JavaScript-Java
kombine kullan›m›
Web programc›l›¤›n›n iki önemli teknolojisini daha etkileflimli uygulamalar yapmak için kombine
olarak kullanabilirsiniz.

S
tudioWeb’in daha ilk say›lar›ndan beri ço¤unun sand›¤›n›n ak- Bu ikisini birbiriyle dayan›flma ve etkileflim içinde kullanmak birbirle-
sine JavaScript ile Java’n›n iki farkl› teknoloji ve dil oldu¤unun, rinin dezavantajlar›n› bertaraf edece¤i gibi, web uygulamalar› aç›s›n-
benzerliklerinin sadece isimlerinden kaynakland›¤›n›n alt›n› dan yeni imkanlar› da beraberinde getirir.
her f›rsatta çiziyoruz. JavaScript bugün tüm web taray›c›lar taraf›n- Java ile JavaScript aras›ndaki bilgi aktar›m›n›n nas›l gerçeklefltirile-
dan desteklenen tek standart istemci tarafl› script dili olup web sayfa- bilece¤ine örnek olacak bir iki uygulamay› ele alal›m.
s›n›n tüm elementleriyle iletiflim kurabilen çok önemli bir teknoloji-
dir. JavaScipt’in web taray›c› üzerindeki hakimiyetine karfl›l›k baz› s›- JavaScript’ten Java’ya bilgi aktar›m›
n›rlamalar› söz konusudur. Mesela JavaScript’in grafik çizdirme des- Java applet’lerinize web sayfas›ndan bilgi aktar›m›n› HTML kodlar›n-
te¤i yoktur, kullan›c› tarafl› olmas›ndan dolay› da veritaban› uygula- daki parametrelerin d›fl›nda sayfa çal›fl›r durumda iken dinamik ola-
malar› gibi sunucu-taraf›na özgün ifllemleri yapamaz. Alternatifi ol- rak da gerçeklefltirebilirsiniz. JavaScript sayesinde ziyaretçi bizzat say-
mayan JavaScript’in sahip oldu¤u yetenekleri karfl›s›nda ço¤u tekno- fa üzerinden Java applet’ine bilgi aktar›labilir. Bu özelli¤i kullanarak
loji üretici firma ürünlerinin JavaScript ile konuflabilmesinin yollar›n› çeflitli uygulamalar gelifltirmek mümkün. Hayal gücünüze kalm›fl. Biz
aram›fllard›r. örne¤imizde applet içerisinde görünecek bir yaz›y› HTML sayfas›nda
JavaScript ile konuflabilen bir teknoloji bizzat üzerinde yer ald›¤› yer alan bir link yard›m›yla bizzat ziyaretçinin belirlemesini isteyece-
web sayfas›yla ya da web taray›c›yla konuflabilir hale gelir. Bu da say- ¤iz.
fan›n ziyaretçisiyle etkileflim ve iste¤ine uygun içeri¤i dinamik olarak Sayfam›zda kullan›lacak applet’in kaynak kodu afla¤›daki gibi ola-
oluflturma anlam›na gelir. Bu aç›dan bak›lacak olursa JavaScript’in bilir. Sayfam›zda kullan›lacak applet bu kodlar›n JSDK yaz›l›m paketi
web sayfalar› üzerinde sayfan›n kullanmas› muhtemel tüm teknoloji- ile derlenmesi sonucu oluflacak. Bilgisayar›n›zda JSDK yüklü de¤ilse
ler için bir çimento vazifesi gördü¤ü sonucunu ç›karabiliriz. Studi- CD’deki örnekleri al›p aynen kullanabilirsiniz ama applet’inizde de¤i-
oWeb’in önceki say›lar›nda Flash’in JavaScript ile iletiflimini konu alan fliklik yapamazs›n›z.
bir iki say›ya yer vermifltik. JavaScript’in di¤er web teknolojileriyle ile-
tiflimini göz önünde bulundurarak flu sonuca varabiliriz: E¤er JavaSc- Selamla.java
ript hem bir applet ile hem de bir Flash animasyonu ile konuflabiliyor- import java.awt.*;
sa, bir applet dolayl› yoldan Flash animasyonuyla konuflabilir. Bunun import java.applet.Applet;
tersi de geçerlidir. Java appletlerin çeflitli harici cihazlarla iletiflim ku-
rabildi¤ini düflünürsek ne derece çeflitli imkanlar›n olabilece¤ini gö- public class Selamla extends Applet
zünüzde canland›rabilirsiniz. {
Java’n›n ve JavaScript’in birbirinden farkl› özellikleri olmas›, birbi- String isim = "";
rinden farkl› avantajlar› ve dezavantajlar› bulundu¤u anlam›na gelir.
public void init() {
setBackground(Color.orange);
}

Font f = new Font("Arial",Font.BOLD,14);

public void paint(Graphics g)


{
g.setFont(f);
g.drawString("Merhaba " + isim + "!", 10 , 30);
}

public void yeniIsim(String ad) {


isim = ad;
repaint();
}

360 derecelik panoramik görüntü veren bu applet’i kumanda eden


Appletimizde temelde sadece HTML sayfas›ndan JavaScript ile te-
dü¤meler bizzat websayfas› üzerinde. Kullan›c›n›n dü¤melere bas-
mas› sonucu applet’e bilgi JavaScript yard›m›yla gidiyor. tiklenecek bir metot yer almakta. ‹htiyac›m›z olan bilgi web sayfas›n-
dan, metotun parantezleri aras›nda yeralacak parametre ile gelecek.

134• CHIP Workshop >>


>> Web Programc›l›¤›

public void yeniIsim(String ad) {


isim = ad;
repaint();
}

Elde edilen parametre de¤eri isim de¤iflkenine aktar›l›yor ve repa-


int() metodu ça¤r›l›yor. Bu da appletin kendini isim de¤iflkeninin yeni
de¤eriyle birlikte yeniden görüntülemesi anlam›na geliyor.
Bu sayede

g.drawString("Merhaba " + isim + "!", 10 , 30);

ifadesiyle applet üzerinde “Merhaba Zafer!” gibi bir metnin olufl-


mas›n› sa¤layacak. Gelelim HTML sayfas›ndan Java metodunun nas›l
ça¤r›laca¤›na.

SelamlaJS.html
<html>
<head>
<title>JavaScript Java Kombinasyonu</title>
<meta http-equiv="Content-Type" content="text/html; p
charset=windows-1254">

<script language="JavaScript">

function isimSor() {
var isim;
isim = prompt("Isminizi girin lütfen","isim")
document.Appletimiz.yeniIsim(isim);
}
</script>

</head> Web sayfam›zda bir script, script’imizde de bir adet fonksiyon var.
isimSor(). Sayfaya ekli link t›kland›¤› anda fonksiyonumuz tetikleni-
<body bgcolor="#ffffff"> yor.

<APPLET NAME="Appletimiz" CODE="Selamla.class" WIDTH="200" p <a href="javascript:isimSor()">Buraya t›klay›n lütfen</a>


HEIGHT="50">
</APPLET> Fonksiyonumuz tetiklendi¤inde ilk olarak JavaScript prompt’u sa-
<br><br> yesinde kullan›c›dan bir bilgi girilmesini istiyor. Bu bilgiyi form ele-
<a href="javascript:isimSor()">Buraya t›klay›n lütfen</a> manlar›yla da sorman›z mümkün.
</body>
</html> isim = prompt("Isminizi girin lütfen","isim")
<< CHIP Workshop • 135
Web Programc›l›¤›
<<
Elde etti¤i de¤eri isim adl› bir de¤iflkene kaydettikten sonra
script’imizin en önemli noktas› geliyor: Appletteki yeniIsim() metodu- <APPLET NAME="Appletimiz" CODE="Selamla2.class" WIDTH="200" p
nun ça¤r›lmas›. HEIGHT="50">
</APPLET>
document.Appletimiz.yeniIsim(isim); <br><br>
<a href="javascript:isimSor()">Appletin tekst içeri¤ini yazmak için p
Bu noktada DOM modelinden faydalanarak önce sayfadaki app- t›klay›n</a>
let’e ulafl›p, applet’te bulunan metodumuzu ça¤›r›yoruz. Web sayfas›- <form name="KontrolPaneli">
n› temsil eden document nesnesinden sonra applet’imize name özni- Bannerin tekst rengini seçin:
teli¤iyle verdi¤imiz Appletimiz ismiyle ulafl›yoruz. isim de¤iflkeninin <select name="secenekYaziRengi" onchange="renkDegistir()">
de¤erinin parametre olarak applet’e nas›l aktar›ld›¤›na dikkat edin <option value="orange">turuncu
lütfen. <option value="white">beyaz
Bu arada JavaScript’teki isim de¤iflkeniyle Java applet’indeki isim <option value="yellow">sari
de¤iflkeni iki farkl› uygulamaya ait iki farkl› de¤iflken olup kaydettikle- <option value="red">k›rm›z›
ri de¤er ayn› olacakt›r. <option value="blue">mavi
fiimdi görmüfl oldu¤umuz metotla basit bir Java applet’ini JavaSc- <option value="green">yeflil
ript sayesinde web sayfas› üzerinden kontrol etmeyi görelim. <option value="black" selected>siyah
<option value="pink">pembe
JavaScript ile bir appleti kontrol </select>
Bir önceki örne¤imizi biraz daha gelifltirip applet’imizi kontrol edilebi- <br>
lir hale getirece¤iz. Mesela applet’imizin arka plan rengini ve app- Bannerin arkaplan rengini seçin
let’te görünecek metnin rengini web sayfam›zdaki form elemanlar›n- <select name="secenekFonRengi" onchange="renkDegistir()">
dan kontrol edebiliriz. <option class="orange" selected>turuncu
Önce HTML sayfam›z›n kodlar›n› görelim. <option value="white">beyaz
<option value="yellow">sari
SelamlaJS2.html <option value="red">k›rm›z›
<html> <option value="blue">mavi
<head> <option value="green">yeflil
<title>JavaScript Java Kombinasyonu</title> <option value="black">siyah
<meta http-equiv="Content-Type" content="text/html; char- <option value="pink">pembe
set=windows-1254"> </select>
<br><br>
<script language="JavaScript"> </form>

function isimSor() { </body>


var isim; </html>
isim = prompt("Isminizi girin lütfen","isim")
document.Appletimiz.yeniIsim(isim); Script’imize yeni bir fonksiyon ekledik: renkDegistir(). Sayfam›zda
} bu fonksiyonu kullanacak iki adet seçim listesi form eleman› var. Bun-
lardan birincisi applet’in font rengini belirleyecekken ikincisi ise fon
function renkDegistir() { rengini seçmemize yard›mc› olacak. Her iki seçim listesini birbirinden
var secimNoRenkTekst = ay›ran en bafll›ca özellik form elemanlar›na verilen farkl› isimler.
‚document.KontrolPaneli.secenekYaziRengi.selectedIndex;
var renkTekst = <select name="secenekYaziRengi" onchange="renkDegistir()">
‚document.KontrolPaneli.secenekYaziRengi[secimNoRenkTekst].
‚value; <select name="secenekFonRengi" onchange="renkDegistir()">

var secimNoRenkFon = Her iki seçim listesi de farkl› bir de¤er seçildi¤i anda ayn› renkDe-
‚document.KontrolPaneli.secenekFonRengi.selectedIndex; gistir() fonksiyonunu tetikliyorlar. fiimdi de fonksiyonumuzu görelim.
var renkFon =
‚document.KontrolPaneli.secenekYaziRengi[secimNoRenkFon].value; var secimNoRenkTekst = ‚document.KontrolPaneli.secenekYaziRengi.p
selectedIndex;
document.Appletimiz.renkYeniden(renkFon,renkTekst); sat›r› seçilen de¤erde de¤ifliklik oldu¤u anda listeden hangi indeks
} numaral› de¤erin seçildi¤ini belirleyip bir de¤iflkende sakl›yor.

</script> var renkTekst = ‚document.KontrolPaneli.secenekYaziRengi[secimNop


RenkTekst].
</head> ‚value;
sat›r› ise elde edilen indeks numaras›ndan seçilen liste elementi-
<body bgcolor="#ffffff"> nin hangi de¤ere sahip oldu¤unu buluyor ve bunu renkTekst de¤iflke-

136• CHIP Workshop >>


>> Web Programc›l›¤›

nine at›yor. Bu durumda, mesela ilk liste eleman› seçildiyse indeks nu- private Color dizeyiRengeCevir(String c) {
maras› 0 olarak elde edilirken, renkTekst de¤iflkeninin de¤eri orange try {
olarak belirleniyor. if (c.equalsIgnoreCase("Black"))
Fon rengini belirleyen sat›rlar da ayn› prensipte çal›fl›yorlar ve bu- return Color.black;
radan elde edilen renk de renkFon de¤iflkenine kaydediliyor. Art›k elde else if (c.equalsIgnoreCase("White"))
edilen renk de¤erlerini applet’imize aktarmak için uygun Java meto- return Color.white;
dunun ad›n› ça¤›rabiliriz else if (c.equalsIgnoreCase("Red"))
return Color.red;
document.Appletimiz.renkYeniden(renkFon,renkTekst); else if (c.equalsIgnoreCase("Green"))
return Color.green;
fiimdi de appletimizin bu de¤erleri nas›l kulland›¤›n› görelim. else if (c.equalsIgnoreCase("Blue"))
return Color.blue;
Selamla2.java else if (c.equalsIgnoreCase("Yellow"))
import java.awt.*; return Color.yellow;
import java.applet.Applet; else if (c.equalsIgnoreCase("Orange"))
return Color.orange;
else if (c.equalsIgnoreCase("Pink"))
public class Selamla2 extends Applet return Color.pink;
{ else
String isim = ""; return Color.white;
Color fonRengi = Color.orange; }
Color tekstRengi = Color.black; catch (Exception e) {
return null;
public void init() { }
setBackground(Color.orange); }
} }

public void paint(Graphics g)


{

Font f = new Font("Arial",Font.BOLD,14);


g.setFont(f);

g.setColor(fonRengi);
g.fillRect(0,0,200,50);

g.setColor(tekstRengi);
g.setFont(f);

g.drawString("" + isim, 10 , 30);

public void yeniIsim(String ad) {


isim = ad;
repaint();
}

public void renkYeniden(String yeniFonRengi,


‚String yeniTekstRengi) {
if (yeniFonRengi.equals("") ||
‚yeniFonRengi.equals(null)) {}
else {fonRengi = dizeyiRengeCevir(yeniFonRengi);}
if (yeniTekstRengi.equals("") ||
‚yeniTekstRengi.equals(null)) {}
else {tekstRengi = dizeyiRengeCevir(yeniTekstRengi);}
repaint();
}

<< CHIP Workshop • 137


Web Programc›l›¤›
<<
Applet’imizdeki jenerik dizeyiRengeCevir(String c) metodu ad›n- function kontrolEt() {
dan da anlafl›laca¤› gibi dize cinsinden c de¤erini karfl›l›¤› olan Color if (document.Formumuz.Sifremiz.value != "") {
yani renk nesnesi haline getiriyor ve ça¤r›ld›¤› yere geri gönderiliyor. var girilenDeger = document.Formumuz.Sifremiz.p
Bu bak›mdan metodumuzun ilk sat›r›nda geri dönüfl tipi Color olarak value ;
verili. document.Appletimiz.sifreKontrol(girilenDeger)
}
private Color dizeyiRengeCevir(String c) { else {
alert("Bir deger girmediniz ki!");
Bu bak›mdan mesela dizeyiRengeCevir(“Pink”) ifadesi color nesne- }
si olarak pembe rengini geri döndürecektir. }
JavaScript taraf›ndan ça¤r›lan renkYeniden() metoduna gelince,
metodun ilk parametresi e¤er bir de¤ere sahipse </script>

if (yeniFonRengi.equals("") || yeniFonRengi.equals(null)) {} </head>


else {fonRengi = dizeyiRengeCevir(yeniFonRengi);}
<body bgcolor="#ffffff">
sat›r› gelen parametreyi renk cinsinden de¤ere sahip olan fonRen-
gi de¤iflkenine atayacak. Ayn› flekilde di¤er sat›r <form action="" name="Formumuz">
<APPLET NAME="Appletimiz" CODE="Sifre.class" WIDTH="250"p
if (yeniTekstRengi.equals("") || yeniTekstRengi.equals(null)) {} elsep HEIGHT="30"></APPLET>
{tekstRengi = dizeyiRengeCevir(yeniTekstRengi);} <br>
<input type="password" name="Sifremiz" value="" size="15">
ise gelen ikinci parametre de¤erini tekstRengi de¤iflkenine ataya- &nbsp;
cak. Bunlardan sonra ça¤r›lan repaint() metodundan sonra appletimiz <input type="button" name="dugme" value="Tamam" p
görüntüleyece¤i içeri¤i güncelleyecek, bu sefer elde etti¤i renk de¤er- onclick="kontrolEt()">
lerini
</form>
g.setColor(fonRengi);
</body>
g.setColor(tekstRengi); </html>

sat›rlar›nda kullanarak applet’imizin fon rengini ve yaz› rengini de- Script’imiz oldukça basit bir fonksiyondan olufluyor. Fonksiyon ise,
¤ifltirecek. ziyaretçi, flifre alan›na girifl bilgisini yaz›p butona t›klad›¤›nda devreye
giriyor. Öncelikle flifre alan›na bir de¤er girilip girilmedi¤ini kontrol
Java applet’i ile flifre kontrolü ediyoruz. E¤er bir de¤er girilmediyse script’imiz bunu bir mesaj
StudioWeb’in daha önceki say›lar›nda kullan›c› tarafl› JavaScript gibi kutusuyla ziyaretçiye iletecektir.
bir script diliyle flifre gibi güvenlik aç›s›ndan hassas uygulamalar
yapman›n uygun olmayaca¤›ndan bahsetmifltik. Bunun sebebini de if (document.Formumuz.Sifremiz.value != "") {
JavaScript kodlar›n›n ziyaretçi taraf›ndan aç›l›p okunabilmesinin ...
mümkün olmas› olarak göstermifltik. Java appletleri de kullan›c› ta- }
rafl› bir teknoloji olmalar›na karfl›l›k taray›c›daki JVM taraf›ndan yo- else {
rumlanan derlenmifl bytecode formunda class dosyalar› olmalar›n- alert("Bir de¤er girmediniz ki!");
dan dolay› basit flifre gibi uygulamalarda kullan›labilirler. fiifre ile }
saklanacak bilginizi bizzat applet’in içine yerlefltirip içinde göstere-
bilece¤iniz gibi, bir web sayfas›na koyup applet’lerden sadece flifre
geçerlili¤ini kontrol etmede faydalanabilirsiniz. Bu seferki JavaSc-
ript-Java kombinasyonu örne¤imiz ziyaretçiye flifre soracak, elde et-
ti¤i flifre geçerliyse uygun sayfa içeri¤ine yönlendirecek. Ziyaretçi
web sayfas›n›n kodlar›na baksa bile flifrenin ya da gidilecek sayfan›n
ne oldu¤unu bulamayacak.

Sifre.html
<html>
<head>
<title>JavaScript Java Kombinasyonu</title>
<meta http-equiv="Content-Type" content="text/html; p
charset=windows-1254">

<script language="JavaScript">

138 • CHIP Workshop >>


>> Web Programc›l›¤›

E¤er bir de¤er girildiyse bu önce bir de¤iflkene kaydediliyor. belirleyen ifllevselli¤e sahip. Applet’imize bu ifllevselli¤i katan sif-
var girilenDeger = document.Formumuz.Sifremiz.value ; reKontrol() metodu.

Sonra bu de¤er do¤rudan applet’imize gönderiliyor. Bundan son- public void sifreKontrol(String sifre) {
ras› ise tamamen applet’imizin kontrolünde if (sifre.equals("jsp")){
git("http://www.pusula.com/jsp");
Sifre.java }
import java.awt.*; else if (sifre.equals("dhtml")){
import java.applet.Applet; git("http://www.pusula.com/dhtml");
import java.net.*; }
else
public class Sifre extends Applet { {
mesaj="Geçersiz sifre! Tekrar deneyiniz..";
String mesaj = "Lütfen sifrenizi giriniz.."; }
repaint();
public void init() { }
setBackground(Color.white);
} Görüldü¤ü üzere kontrolü gerçeklefltiren metodumuz çok çok ba-
sit. Gayet sade bir if else kurgusuyla flifremiz “jsp” ise applet web say-
public void paint(Graphics g) fas›n› http://www.pusula.com/jsp adresine, “dhtml” ise
{ http://www.pusula.com/dhtml adresine yönlendiriyor. Bu iki flifre
Font f = new Font("Arial",Font.BOLD,14); d›fl›nda bir de¤er geçersiz olup bu durumda applet ziyaretçiye uygun
g.setFont(f); bir mesaj görüntülüyor.
g.setColor(Color.red); Numan Pekgöz
g.drawString("" + mesaj, 10 , 23); numanp@chip.com.tr
}

public void sifreKontrol(String sifre) {


if (sifre.equals("jsp")){
git("http://www.pusula.com/jsp");
}
else if (sifre.equals("dhtml")){
git("http://www.pusula.com/dhtml");

}
else
{
mesaj="Geçersiz sifre! Tekrar deneyiniz..";
}
repaint();
}

public void git(String adres)


{
try
{
URL linkAdresi = new URL(adres);
getAppletContext().showDocument(linkAdresi, p
"_top");
}
catch (MalformedURLException e)
{
System.err.println("Geçersiz URL:" + adres);
}
}

}
fiifre olarak jsp yaz›ld›¤›nda appletimiz karfl›l›k gelen sayfaya
Applet’imiz gidilecek web sayfas›n› girilen flifre de¤erine göre yönlendiriyor.

<< CHIP Workshop • 139


Java Serisi
<<

JAVA ile Programlama Bölüm 6


Bu ayki Java yaz›m›zda nesne yönelimli programc›l›¤›n temel tafllar›ndan olan s›n›flar konusunu
etrafl›ca ele alacak ve örneklerle inceleyece¤iz.

zun bir aradan sonra tekrar merha- vin çözümü ile ifle bafllayal›m. Hat›rlarsan›z fiimdi bu örne¤imizi biraz inceleyelim.

U ba. Bugüne kadarki derslerimizde


art›k nesne yönelimli programlama
tekni¤inin merkezinin oluflturan s›n›flar›n
uygulama sorumuz; içerisinde tarih tutan ve
tarihle ilgili ifllemleri yapabilecek metotlar›
bar›nd›ran bir s›n›f tasarlamakt›. Bu s›n›fa
S›n›f›m›z›n iki adet bafllang›ç metodu oldu-
¤unu görmekteyiz. Bu metotlardan bir ta-
nesi, 6. sat›rda tan›mlanmakta ve hiçbir pa-
ne anlama geldiklerini ve nas›l tasarland›k- iliflkin çözümü ve ayr›nt›l› aç›klamas›n› yine rametre almadan yarat›lan KarmasikSayi
lar›n› ö¤renmifltik. E¤er geçmifl olan dersle- yukar›da verdi¤im adreste bulabilirsiniz. nesnesinin “gercel” ve “imajinel” isimli de-
rimizde eksikleriniz oldu¤unu düflünüyor- ¤iflkenlerini 0.0 de¤erine eflitlemektedir. Di-
san›z ya da ilk defa bu ders ile Java prog- S›n›flar›n Kendi Kendilerini ¤er bafllang›ç metodu ise 11. sat›rda tan›m-
ramlama diline girifl yap›yorsan›z, size tav- Kullanmalar›: lanmaktad›r ve nesne yarat›l›rken kendisi-
siyem hemen önceki dersleri eksiksiz olarak Bundan önceki örneklerimizde bir s›n›f›n ne verilen parametreleri kullanarak “ger-
çal›flman›z olacakt›r. Önceki say›larda yer yaz›ld›ktan sonra, baflka bir s›n›f içerisinde cel” ve “imajinel” de¤iflkenlerinin de¤erleri-
alan derslere sahip olmayan arkadafllar da ya da örneklerde yapt›¤›m›z gibi main me- ni atamaktad›r.
CHIP dergisinin 100. say›s›n› alarak tüm todu içerisinde kullan›labildi¤ini görmüfl- NOT: S›n›f›n kendisine ait olan de¤iflken
dersleri de ellerinde bulundurma flans›na tük. Baz› s›n›flar otomatik olarak çal›flt›r›la- ve metotlar›n› s›n›f içerisinde kullan›rken,
sahip olabilirler. bilmek amac›yla da yaz›labilirler. Bir s›n›f›n bu de¤iflken ve metotlar›n bafl›na “this.” ek-
Bu yaz›da, tasar›m›n› ayr›nt›l› olarak ö¤- otomatik olarak çal›flabilmesi için içerisinde lemifl oldu¤uma dikkat ediniz. Daha önce
rendi¤imiz s›n›flar›n kullan›m›na iliflkin ba- main metodu olmas› gerekti¤ini zaten bili- de söyledi¤im gibi this anahtar sözcü¤ü s›-
z› örnekler üzerinde duraca¤›z. Ayr›ca Ja- yoruz. ‹flte bu flekilde main metodu içeri- n›f›n kendisini temsil eder. Örne¤in 12. sa-
va'da öntan›ml› olarak bulunan ve kendi sinde bir s›n›f, kendisi türünden nesne ya- t›rda “this.gercel” ifadesi, “o anda içerisin-
özeli ifllerimiz için kullanabilece¤imiz s›n›f- rat›p bunu kullanabilir. ‹flin özü asl›nda flu- de bulundu¤umuz s›n›fa ait olan gercel
lar›n baz›lar›n› da görmüfl olaca¤›z. Size dur: Bir s›n›f yaz›ld›ktan sonra, bu s›n›f tü- isimli de¤iflkeni temsil etmektedir.
tavsiyem burada anlat›lan ekleri mutlaka ründen nesneleri istedi¤imiz her metod ya 16. sat›rda tan›mlanan “topla” isimli
kendi bafl›n›za da yaz›p denemenizdir. Ayr›- da her s›n›f içerisinde art›k yarat›p kullana- metod parametre olarak baflka bir “Karma-
ca verilen örneklere iliflkin haz›r kodlar› da biliriz. Bu genel kural› bilirsek, zaten s›n›f sikSayi” nesnesi alarak, bu say›n›n “gercel”
http://cs.bilgi.edu.tr/~erman/index.html nesnelerinin ne zaman ve nerede yarat›la- ve “imajinel” de¤iflkenleri ile s›n›f›n kendi
adresine gitti¤inizde buradaki “E¤itimler” ca¤›na dair bir problemimiz de kalmaz. “gercel” ve “imajinel” de¤erleri toplam›n›
ba¤lant›s›na t›klayarak elde edebilirsiniz. Arka sayfadaki örne¤imizde, matema- elde eder ve bu de¤erlerle, “sonuc” ad›nda
fiimdi kollar› s›vayal›m ve Java ö¤renmeye tikte kullan›lan karmafl›k say›lara iliflkin de- yeni bir “KarmasikSayi” nesnesi yaratarak
devam edelim. ¤er ve metotlar› bar›nd›ran bir s›n›f yazaca- bu de¤iflkeni 19. sat›rda geri döndürür. Bu-
¤›z. Bu s›n›f ayn› zamanda “main” metodu na benzer flekilde 22. sat›rda yaz›lm›fl olan
Son Derste Verilen içerecek ve kendisi türünden nesneler yara- “cikart” metodu da ayn› ifllemi ç›kartma
Uygulaman›n Cevab›: tarak bu nesneler üzerinde ifllemler yapa- için yapar. Ancak bu metot biraz daha ilginç
Her fleyden önce son derste verdi¤imiz öde- cak: bir yöntemle de¤er döndürmektedir. Bu se-

35 • CHIP Workshop >>



>> Java Serisi

rak ça¤r›lmaktad›r. Ancak metodun içini is-


tedi¤iniz gibi yazabilirsiniz. E¤er yazd›¤›n›z
s›n›f içerisinde bu metodu eklemez ve bu s›-
n›f türünden bir de¤iflkeni ekrana basmak
isterseniz, o zaman Java otomatik olarak
bir toString metodunu kendisi yazacak ve
buna iliflkin bir String de¤eri de döndüre-
cektir. Ancak bu de¤er oldukça anlafl›lmaz
bilgiler içermektedir. Özetle s›n›f›n›z› nas›l
ifade etmek istiyorsan›z, buna iliflkin String
toString() prototipli bir metod yazabilirsi-
niz.

Öntan›ml› Java S›n›flar›n›n Kullan›m›:


Dersimizin bundan sonraki k›sm›nda yeni
bir konuya geçmeden önce, Java'da önta-
n›ml› baz› s›n›flara iliflkin örnekler yapmak-
ta yarar görüyorum. Görece¤imiz bu s›n›f-
lar, yazaca¤›m›z programlarda birçok yükü
üzerimizden almakta ve bize baz› yararl›
haz›r metotlar sunmaktad›r. Bu nedenle ifli-
mizi görecek ve daha önceden yaz›lm›fl bu
haz›r s›n›f ve metotlar› kullanarak zaman
kayb› ve zahmetten kurtulabiliriz.
Bir konuda sizleri uyarmak isterim: Bu-
rada bu öntan›ml› Java s›n›flar›n›n tüm me-
totlar›n› detayl› bir flekilde göstermek yeri-
ne, bu s›n›flar hakk›nda bilgi sahibi olman›-
z› ve sadece birkaç metot kullan›m›yla s›n›f›
sizlere tan›tmay› hedefledim. Kendi uygu-
lamalar›n›z için burada genel olarak ö¤ren-
mifl oldu¤unuz bu s›n›flar›n size uygun me-
totlar›n› ve burada gösterilmeyen baflka
öntan›ml› s›n›flar› Java dokümantasyonu
ve internette yapaca¤›n› aramalar ile bula-
bilirsiniz. Java dokümantasyonunun online
halini:http://java.sun.com/j2se
/1.4.2/docs/api/index.html adresinde bu-
labilirsiniz.
Özetle buradaki örnekleri sizlere sadece
neyi nerede arayaca¤›n›z› bilmeniz aç›s›n-
dan veriyorum. fiimdi bu s›n›flar› inceleme-
ye bafllayal›m.
KarmasikSayi s›n›f› kendi kendini kullanmaktad›r.
Math S›n›f›:
fer sonucu tutacak ayr› bir de¤iflken yarat- ça¤r›lmam›flt›r. Ancak ilginçtir ki, 47. sat›r- Bu s›n›f çeflitli matematiksel ifllemleri yapa-
mak yerine, 23. sat›rda oldu¤u gibi “return” daki “sayi1” isimli s›n›f de¤iflkeni ekrana bilece¤imiz metotlar› sunmaktad›r. Bu me-
anahtar sözcü¤ünün önünde yeni bir “Kar- yaz›lmak istendi¤i zaman sanki bu metod totlar içerisinde sin, cos, tan, kuvvet alma,
masikSayi” nesnesi yarat›larak hemen o an- ça¤r›lmaktad›r. Çünkü ekranda toString kök alma v.b. metotlar bulunmaktad›r. Bu
da döndürülür. Bu yöntemde arada “sonuc” metodunun döndürdü¤ü String ifadesi ya- s›n›f› kullanabilmeniz için uygulamalar›n›-
gibi baflka bir de¤iflken içerisinde “Karma- z›lmaktad›r. Asl›nda gerçekten de 47. sat›r- z›n bafl›nda herhangi bir kütüphaneyi “im-
sikSayi” nesnesi yaratma ihtiyac› ortadan da sayi1 de¤iflkeninin ekrana bas›ld›¤› nok- port” etmenize gerek yoktur. Afla¤›da Math
kalkmaktad›r. tada otomatik olarak bu metot ça¤r›l›r. s›n›f›n›n baz› metotlar›n›n kullan›m›na ilifl-
Yaz›lan tüm s›n›flara asl›nda toString kin bir örnek verilmektedir. Bu örnek, daha
Yazd›¤›m›z S›n›flar›n metodu da eklenebilir. E¤er “String toSt- önce yapm›fl oldu¤umuz karmafl›k say› s›n›-
toString metodu: ring()” prototipini bozmadan s›n›f›n›z içeri- f›n›n biraz daha gelifltirilmifl hali ve Math
Dikkat ederseniz 35. sat›rda “toString” sinde bir toString metodu yazarsan›z, bu s›- s›n›f›n›n fonksiyonlar›n›n kullan›ld›¤› bir ör-
ad›nda ilginç bir metod yer almaktad›r. Bu n›fa iliflkin bir s›n›f de¤iflkenini ekrana bas- nektir. Ayr›ca bu s›n›fa “aciHesapla” ad›nda
metod asl›nda main metodu içerisinde hiç mak istedi¤inizde bu metot otomatik ola- yeni bir metot daha eklenmifl ve s›n›f›n içe-

<< CHIP Workshop • 36


Java Serisi
<<
risinde saklanan karmafl›k say›n›n aç› de-
¤erleri bu metot yard›m›yla hesaplanm›flt›r.
fiimdi örne¤imizi daha detayl› inceleye-
lim. Her fleyden önce genel bir noktay› vur-
gulamak istiyorum. Dikkat ederseniz “Kar-
masikSayi2” s›n›f›n›n 23, 24, 27 sat›rlar›n-
da, “gercel” ve “imajinel” de¤erlerini
“this.gercel” diyerek do¤rudan almak yeri-
ne bu de¤erleri 13 ve 16. sat›rlarda yaz›lm›fl
olan “gerceliVer” ve “imajineliVer” metot-
lar› yard›m›yla al›yoruz. Bunun nedeni s›n›-
f›n veri elemanlar›n› korumak ve böylece s›-
n›f hiyerarflisini düzgün bir flekilde kurmak
içindir. Bu teknik bizlere oldukça önemli ve
sa¤lam bir mekanizma sunar. Zaten dikkat
ederseniz “gercel” ve “imajinel” isimli veri
elemanlar› da d›flar›dan do¤rudan eriflimin
engellenmesi amac› ile 7. sat›rda “private”
olarak tan›mlanm›flt›r. Veri elemanlar›na
eriflimin bu flekilde kontrollü olarak yap›l-
mas› gerekir. E¤er bu elemanlara eriflilmek
gerekiyorsa, bu ifli do¤rudan de¤il de set ve
get metotlar› gibi metotlar yard›m›yla yap-
mak gerekir. Kullan›c›ya sadece bu metot-
lar sunulmal›, s›n›f›n veri elemanlar›na eri-
flim ise metodlar içerisinde ve gerekti¤i gibi
yap›lmal›d›r.
23. sat›rda kullan›lan “Math.pow” isimli
metot 1. parametre ile ald›¤› say›n›n, 2. pa-
rametre ile ald›¤› say› kadar kuvvetini he-
saplar ve sonucu geri döndürür. Bu metodu
“gercel” ve “imajinel” k›s›mlar›n karelerini
hesaplamak için kulland›k. Bu karelerin
toplam›n›n da karekökünü, tahmin etti¤i-
niz gibi Math.sqrt metodu ile elde ettik. Ya-
ni özetle; Math.pow de¤erleri ile elde edi-
len “gercel” ve “imajinel” k›s›mlar›n karele-
rinin toplam›n›, Math.sqrt metoduna para-
metre olarak do¤rudan göndererek sonucu
da do¤rudan geri döndürdük. Sizler de bol
bol program yazd›kça bu tip h›zl› yaz›m tek-
niklerinizi gelifltirece¤inizden emin olabilir-
siniz. Ancak pratik olmas› amac›yla k›sa
kodlar yazarken bile kodunuzun okunabilir
olmas›na dikkat ediniz.
Örne¤imizin 27. sat›r›nda kulland›¤›m›z
“Math.atan2” isimli metod kendisine para-
metre olarak verilen “y” ve “x” gibi iki say›-
n›n polar koordinatlarda sahip oldu¤u aç›
de¤erini hesaplayan bir metottur. Yani as- Math s›n›f› ile gelifltirilmifl bir örnek
l›nda yapt›¤› ifllem y/x de¤erinin arktanjant
de¤erini hesaplamakt›r. Fakat geri dönen int Math.abs(int a) a say›s›n›n mutlak de¤e- nüz de¤erini geri döndürür. Benzer flekilde
bu de¤er radyan cinsindendir. Bu nedenle, rini geri döndürür. Ayn› metodun float, do- sin metodu da vard›r.
radyan olarak elde edilen aç› de¤eri 29. sa- uble ve long türler için de versiyonlar› var- double Math.exp(double a) a say›s›n›n e sa-
t›rda yaz›lan “aciyiDereceVer” metodu ile d›r. y›s›n› kuvveti olarak hesaplar ve bu de¤eri
derece olarak da elde edilebilir. double Math.acos(double a) a say›s›n›n ters döndürür.
H›zl› bir flekilde listelemek gerekirse kosinüs de¤erini döndürür. Benzer flekilde int Math.max(int a, int b) a ve b say›lar›n-
Math s›n›f›n›n baz› di¤er metotlar› flunlar- asin ve atan metotlar› da vard›r. dan büyük olan›n de¤erini geri döndürür.
d›r: double Math.cos(double a) a say›s›n›n cosi- Benzer flekilde bu metodun double, int, flo-

37• CHIP Workshop >>


>> Java Serisi

float Float.parseFloat(String str) str ile ge-


len String biçimindeki say›y› float biçimin-
de geri döndürür.
String Float.toString(float a) float türün-
deki a say›s›n›n String türünde de¤erini ge-
ri döndürür.
String String.valueOf(int a) integer türün-
deki a say›sn›n String de¤erini geri döndü-
rür. Ayn› metodun double, float, ve long tü-
ründe parametre alan versiyonlar› da vard›r

ArrayList S›n›f›:
Daha önce ö¤renmifl oldu¤umuz diziler ko-
nusundan bildi¤imiz gibi bir dizi yarat›ld›k-
tan sonra art›k otomatik olarak boyutu de-
¤iflmiyordu. Siz diziyi belirli bir uzunlukta
açt›ktan sonra dizinin tüm alanlar› doluysa,
yeni bir eleman eklemek için birtak›m algo-
ritmik yöntemler uygulaman›z gerekir. Ya
DecimalFormat s›n›f›n›n kullan›m› da diziden bir eleman ç›kard›¤›n›z zaman,
di¤er elemanlar› birer basmak geri kayd›r-
at ve long versiyonlar› da vard›r. mel türleri (integer, float, double gibi) mak gibi birtak›m iflleri de yapman›z gere-
int Math.random() 0 ile 1 aras›nda rastgele String türüne ya da tersine, String türünde- kir.
pozitif bir say› üretir ve bu de¤eri döndürür. ki bir ifadeyi temel türlere dönüfltürmektir. “ArrayList” s›n›f› bu tür görevleri otoma-
Asl›nda bu tür s›n›flara olan ihtiyac› örnek tik olarak yapan ve bize dinamik olarak kul-
DecimalFormat S›n›f›: üzerinde aç›klarsak daha anlafl›l›r olacakt›r. lanabilece¤imiz bir dizi mekanizmas› su-
Java ile yazd›¤›m›z programlarda say›sal Mesela en son yapt›¤›m›z “OndalikKi- nan bir s›n›ft›r. E¤er böyle bir diziye sahip
de¤erler ço¤u zaman anlafl›lmas› zor ve ge- sim” s›n›f› örne¤inde, 10. sat›rda tan›mla- olmak istiyorsan›z afla¤›daki flekilde bir “Ar-
reksiz uzunlukta üretilir. Ancak Java bizim nan “a” de¤iflkeni içerisindeki de¤erin bi- rayList” nesnesi tan›mlaman›z gerekir:
için say›n›n ne kadar uzunlukta olmas› ge- çimlendirilmifl hali String türünde elde edil-
rekti¤ini otomatik olarak bilemez ve bu ne- mektedir. Ancak biz bu biçimlendirilmifl hal ArrayList dinamikDizi = new ArrayList();
denle en do¤ru ve orjinal flekilleriyle bu de- ile baflka matematiksel ifllemler yapmak is-
¤erleri üretmektedir. E¤er yukar›daki örne- tedi¤imizde String türündeki bu sonuç ifli- Daha sonra bu nesneyi art›k kendi dizi-
¤i yaz›p çal›flt›rd›ysan›z, elde edilen sonuç- mize yaramayacakt›r. Bu sonucun tekrar niymifl gibi düflünerek “ArrayList” s›n›f›n›n
lar›n (aç› de¤erleri gibi) virgülden sonra ol- double türünde elde edilmesi gerekir. Bu- sundu¤u metodlar yard›m›yla eleman ekle-
dukça fazla miktarda basmak içerdi¤ini nun için String türünde elde edilen bu de- me, ç›kartma ve bulma gibi ifllemler yapabi-
görmüflsünüzdür. ¤er “Double.parseDouble” metodu ile tek- lirsiniz. Mesela “dinamikDizi” nesnesine
DecimalFormat s›n›f›, say›lar› istedi¤i- rar double türüne dönüfltürülebilir. Bu me- eleman eklemek için:
miz gibi ifade edebilmemize olanak sa¤lar. todun örnek kullan›m›:
Bu s›n›f›n kullan›m›na iliflkin bir örnek yaza- dinamikDizi.add(“merhaba”);
l›m: double yeniBicim = Double.parseDouble p
Örne¤imize dikkat edersek, “Decimal- (ikiHane.format(a)); ya da
Format” s›n›f›n› kullanmadan önce 4. sat›r-
da oldu¤u gibi “DecimalFormat.text.*” fleklinde olacakt›r. Bu dönüflümleri ya- int a = 3;
kütphanesini programa dahil etmeliyiz. 9. pan di¤er baz› sarg› s›n›flar› ve metotlar› da dinamikDizi.add(a);

sat›rda yarat›lan bir DecimalFormat nesne- flunlard›r:


si yapmak istedi¤imiz ifade biçimini String ArrayList s›n›f›n›n yukar›da gördü¤ümüz
bir de¤er olarak tutmaktad›r. Bu nesne ya- int Integer.parseInt(String str) str ile gelen gibi “add” isimli metodunun yan›s›ra di¤er
rat›ld›ktan sonra, nesne arac›l›¤›yla isteni- String biçimindeki say›y› integer biçiminde metotlar›ndan baz›lar› da flunlard›r:
len bir say› “format” metodu kullan›larak geri döndürür.
13. sat›rda oldu¤u gibi biçimlendirme yap›- String Integer.toString(int a) integer tü- void remove(int index) Dizinin verilen in-
labilir. “format” metodunun geri dönüfl de- ründeki a say›s›n›n String türünde de¤erini deks numaras›ndaki eleman›n› ç›kart›r ve
¤eri String bir de¤erdir. geri döndürür. diziyi buna göre düzenler. Örnek kullan›m:
double Double.parseDouble(String str) s t r int a = dinamikDizi.remove(2); //2.eleman
Sarg› S›n›flar›: ile gelen String biçimindeki say›y› double siliniyor
Java'da yayg›n olarak kullan›lan s›n›flar ara- biçiminde geri döndürür. int size() Dizinin içerisindeki elelman say›-
s›nda sarg› s›n›flar› da vard›r. Bu s›n›flar as- String Double.toString(double a) double s›n› verir. Örnek kullan›m: int a = dinamik-
l›nda genel olarak ayn› prensiple kullan›l›r. türündeki a say›s›n›n String türünde de¤e- Dizi.size();
Bu s›n›flar› kullanmaktaki amaç bilinen te- rini geri döndürür. Object get(int index) Dizinin index nolu

<< CHIP Workshop • 38


Java Serisi
<<
eleman›n› geri döndürür. Örnek kullan›m: mik çal›flma mekanizmas›n›n getirdi¤i ko- ca¤› program içerisinde s›n›f›n kendisi tara-
String str = dinamikDizi.get(0); layl›¤› daha iyi kavrayaca¤›n›z› tahmin edi- f›ndan ve uygun bir hiyerarfli ile belirlen-
int indexOf(Object o) o ile temsil edilen yorum. Bu metodlar›n parametre yap›lar› mektedir. Bu nedenle, bir de¤iflken üzerin-
nesnenin dizi içerisindeki indeks nuaaras›n› ve geri dönüfl de¤erlerini de siz belirleyiniz. den eriflilmemesi istenen metodlar private
geri döndürür. E¤er eleman dizide yoksa -1 Uygulaman›n cevab›n› her zaman oldu¤u olarak tasarlanm›flt›r. Böylece bu metotla-
geri döndürür. gibi bir sonraki dersimizde bulabilirsiniz. ra, sadece s›n›f›n di¤er metotlar›n›n erifle-
Afla¤›daki “KayitListesi.java” uygulama- bilmesine izin verilmektedir. Kullan›c›n›n
m›zda hem böyle bir dinamik dizi kullan›- KayitListesi.java Uygulamas›ndaki hizmetine ise sadece “public” metodlar su-
m›n›, hem de bugüne kadar ö¤rendikleri- Nesne Yönelimli Programc›l›k ‹zleri nulmaktad›r.
mizle gerçe¤e oldukça yak›n bir Java uygu- Uygulamam›z içerisinde , her seçime iliflkin
lamas›n›n yaz›m›n› görmekteyiz. Bu uygu- bir metot uygun ifli üstlenmektedir. Ayr›ca StringBuffer S›n›f›:
lama çal›flt›¤›nda, ekrana resimdeki gibi bir tüm alt görevleriyle ve de¤iflkenleriyle bir- Daha önceki derslerimizde ö¤rendi¤imiz
menü sunulmakta ve kullan›c›n›n yapt›¤› likte bu uygulama tek bir s›n›f alt›nda ve üzere String s›n›f› baz› yararl› metotlara sa-
seçimlerle kay›t ekleme, silme, kay›tlar› lis- tek bir amaç için oluflturulmufltur. Prog- hiptir. Hatta bu metotlardan “equals” ve
teleme gibi ifllemler yap›ld›ktan sonra tek- ramlar›n›zda bu flekilde ifl bölümü yapma “matches” isimli olanlar›n› da, “KayitListe-
rar ayn› menü ekrana gelmektedir. Kullan›- ifllemi nesne yönelimli programc›l›¤›n bafll›- si.java” uygulamam›zda 19.sat›rda ve “to-
c›ya istedi¤i zaman programdan ç›kabilece- ca prensiplerinden birisidir. UpperCase” isimli olan› da 37. sat›rda kul-
¤i bir seçenek de sunulmaktad›r. Yazm›fl oldu¤umuz bu uygulama tek bir lanmaktay›z.
Uygulamam›z›n daha detayl› incelemesini s›n›f nesnesi olarak tasarlanm›fl ve 106. sa- Bu metotlar sayesinde çeflitli kolayl›klar›
http://cs.bilgi.edu.tr/~erman/index.html t›rdaki main metodu içerisinde de bir de¤ifl- olan String türünde de¤iflkenlerin içerikleri
adresinde yer alan “E¤itimler” bölümünde ken arac›l›¤›yla çal›flt›r›lm›flt›r. Ayr›ca dikkat sabit uzunluktad›r. Bu nedenle içeri¤i de di-
bulabilirsiniz. ederseniz uygulamam›z›n baz› metotlar› namik olarak de¤ifltirilebilen bir s›n›f türü-
“private” olarak tasarlanm›flt›r. Bunun ne- ne ihtiyaç duyulmaktad›r. Bu amaçla
Uygulama Sorusu: deni; bu metotlar›n iç mekanizma iflleyifli StringBuffer isimli s›n›f kullan›labilir.
Pratik yapmak aç›s›ndan, ArrayList s›n›f› gi- için kullan›l›yor olmas›d›r. Yani 109. sat›rda StringBuffer s›n›f› kullan›lmadan önce
bi elemanCikart, elemanEkle, elemanBul, oldu¤u gibi kullan›c›, bu s›n›f›n “uygulama- bu s›n›f türünden bir nesne yarat›lmal›d›r:
metodlar› olan ve içerisinde bir String dizisi Baslat” metodunu ça¤›rabilmeli ancak di-
tutan genel amaçl› “StringDizi” isimli bir s›- ¤er metotlar›n› ça¤›ramamal›d›r. Bu me- StringBuffer strbuffer = new StringBuffer();
n›f yaz›n›z. Böylece ArrayList s›n›f›n›n dina- totlar›n hangi s›rada ve ne zaman ça¤r›la-
Bu flekilde, içerisinde hiç karakter tut-
mayan ve 16 karakter kapasiteli bir String-
Buffer nesnesi yarat›labilir. Bu s›n›f›n baflka
bafllang›ç metotlar› da vard›r. Mesela 20
karakter kapasiteli bir nesne yaratmak için:

StringBuffer strBuf = new StringBuffer(20);

Ya da haz›r bir String de¤iflkenini String-


Buffer halinde yaratmak için:

StringBuffer str = new StringBuffer(“Merhaba”);

yazmak gerekir. Bu s›n›f içerisinde tutu-


lan String de¤erinin String olarak kullan›la-
bilmesi için, s›n›fa ait olan toString metodu
kullan›labilir. Mesela az önce “Merhaba”
String de¤eri ile yaratm›fl oldu¤umuz “str”
isimli StringBuffer nesnesinin String de¤eri:

String a = str.toString();

fleklinde elde edilebilir.

Bu s›n›f›n sahip oldu¤u baz› metodlar


flunlard›r:
StringBuffer append(String) StringBuffer
nesnesi içerisinde tutulan String sonuna
parametre ile verilen String de¤erini ekler
KayitListesi.java uygulamas›n›n ekranlar› ve bu yeni hali StringBuffer nesnesi olarak

39 • CHIP Workshop >>


>> Java Serisi

geri döndürür. Bu metodun int, float, doub-


le, char [] parametreli versiyonlar› da vard›r.
int capacity() Nesnenin sahip oldu¤u karak-
ter kapasitesini verir.
void ensureCapacity(int minCapacity) Nes-
nenin kapasitesini minCapacity parametre-
si ile verilen de¤er haline getirir.
char charAt(int index) Nesnenin tuttu¤u
String de¤eri içerisinde verilen indekste yar
alan karakteri geri döndürür.
StringBuffer reverse() Nesnenin içerisinde
tutulan String de¤erinin ters çevrilmifl hali-
ni geri döndürür.
Ancak yine de hat›rlatmak isterim ki
StringBuffer s›n›f›n›n daha birçok metodu
vard›r. Di¤er metotlar› her zaman söyledi-
¤im gibi Java dokümantasyonu içerisinde
bulabilirsiniz.
Dersimiz boyunca sizlere, öncelikli iflleri-
mizi kolaylaflt›racak baz› s›n›flardan genel
olarak bahsettim. Burada bahsetmedi¤im
ancak yine de iflinizi görebilecek baflka s›-
n›flar da oldu¤unu belirtmeliyim. Sizlere
bu s›n›flar›n bir listesini veriyor ve gerekli
araflt›rmay› yapman›z› öneriyorum:

StringTokenizer
Vector
Enumaration
Dictionary
Character
Random
Stack
Properties

Bu dersimizin de sonuna gelmifl bulunu-


yoruz. Ders boyunca verdi¤im örnekleri
kendi bafl›n›za yaz›p denemenizin çok ya-
rarl› olaca¤›n› tekrar hat›rlatmak isterim.
Ayr›ca verilen uygulama sorusunu da mut-
laka yapmaya çal›flman›z eksiklerinizi gör-
meniz aç›s›ndan çok yararl› olacakt›r. Prog-
ram yazmak bir enstrüman çalmaya ben-
zer. Ne kadar çok pratik yaparsan›z o kadar
kolay ö¤renir ve o kadar iyi programlar ya-
zars›n›z.
Önümüzdeki derste S›n›flar›n Türetilmesi
konusunu detayl› bir flekilde inceleyece¤iz.
Son bir hat›rlatma olarak da derslerimizde
yap›lan tüm örneklerin haz›r kodlar›n›
http://cs.bilgi.edu.tr/~erman/index.html
adresini ziyaret ederek burada yer alan
“E¤itimler” bölümünde bulabilirsiniz.
‹yi programlar yazman›z dile¤iyle..

R. Erman Aykaç

‹stanbul Bilgi Üniversitesi


Bilgisayar Bilimleri Bölümü
ermanaykac@chip.com.tr KayitListesi.java uygulamas›

<< CHIP Workshop • 40


<<
Photoshop Serisi

Herkes için Photoshop


Photoshop’un farkl› alanlardaki kullan›m flekillerini daha iyi anlayabilmek için bu sayfalarda yer alan
Photoshop derslerinde her ay; foto¤raf düzenleme, çizim ve efektler fleklinde 3 ayr› bölüm alt›nda
çeflitli örnekler yer alacak.
Karakalem foto¤raflar

Önce foto¤raf›n›z› yeni bir katman içine kopyalay›n ve


ad›n› “Orijinal” olarak de¤ifltirin. Bu katman›n bir kop-
yas›n› ç›kar›n ve kopyay› “Desaturated” olarak adlan-
d›r›p renklerinden ar›nd›rmak için [Shift]+[Ctrl]+[U] tufllar› ile
Desaturate ifllemi uygulay›n. Bu katman›n da bir kopyas›n› ç›-
kar›n ve “1” olarak adland›r›n. fiimdi Filters / Blur / Smart Blur
filtresini seçin ve Radius=60, Threshold=100, Best Quality ve
Edge Only ayarlar› ile uygulay›n. Ard›ndan [Ctrl]+[I] ile kat-
man› tersine çevirin.

Bu sefer de Filters/Blur/Gaussian Blur filtresini radi-


us=1 ayar› ile kullan›p Blending modunu Hard Light
olarak de¤ifltirin. Desaturated katman›n› tekrar ço¤al-
t›n ve “2” olarak adland›r›p 1 katman›n›n üzerine al›n. Fil-
ter/Stylize/Emboss filtresini Height=1, Amount=119% ayarla-
r› ile uygulad›ktan sonra Blending modunu da yine Hard
Light olarak de¤ifltirin. Desaturated katman›n› bir kez daha
ço¤alt›n ve bu katmana “3” ad›n› verip 2'nin üzerine tafl›y›n.

Filters / Blur / Smart Blur filtresini bir kez daha Radi-


us=10, Threshold=100, Best Quality ve Edges Only
ayarlar› ile uygulay›n. Bu katman› da [Ctrl]+[I] ile tersi-
ne çevirin ve Blending modunu Multiply olarak de¤ifltirip
Opacity de¤erini de %40'a düflürün. Desaturated katman›n›
son bir defa ço¤alt›p ad›n› “4” olarak belirleyip 3 katman›n›n
üstüne tafl›y›n. Filter / Styling / Glowing Edges filtresini Edge
Width=1, Edge Brightness=7 ve Smoothness=6 de¤erleri ile
uygulay›n.

Bu katman› da [Ctrl]+[I] ile tersine çevirin ve yine


Blending modunu Multiply Opacity de¤erini ise %40
yap›n. fiimdi 4 katman›n›n bir kopyas›n› ç›kar›n ve
üzerine Filter / Blur / Gaussian Blur filtresini radius=3 olacak
flekilde uygulay›n. Blending modunu Multiply, Opacity
de¤erini de %100 yap›n. Biraz renk katmak için Orijinal kat-
man›n›n iki kopyas›n› ç›kart›p katmanlar›n en üstüne
tafl›mak ve birinin Blending modunu Hard Light di¤erini de
Color olarak de¤ifltirmek yeterli olacakt›r.

70'lere geri dönüfl


Önce istedi¤iniz bir resmi aç›n. Ard›ndan Image / Adjust-
ments / Threshold ayar›n› seçin ve kayd›rma çubu¤u ile 1.
resme benzer hale gelene kadar oynay›n. fiimdi
[Shift]+[Ctrl]+[N] ile resmin alt›nda kalacak yeni bir kat-
man (Layer) oluflturun. Son olarak da ön plan rengi olarak
(#FFAA05), arka plan rengi olarak da (#FF6600) kullana-
rak yeni katmana üstten afla¤› do¤ru degrade uygulay›n
ve resmin Layer Blending modunu da Soft Light olarak
de¤ifltirin.

35 • CHIP Workshop >>



>> Photoshop Serisi

Piksel sanat›na girifl

Bu ay mini mini dünyalar yaratabilece¤iniz piksel


sanat› tekni¤ine ilk ad›m› ataca¤›z. Önce ilk temel
örne¤imiz için 100x100 boyutunda beyaz arka
planl› bir dosya oluflturarak bafllayal›m. Kalem arac›n›
seçtikten sonra çizim boyutunu da 1 piksel olarak ayarla-
yal›m. Burada unutmaman›z gereken ilk kural her zaman
yukar› 1 kenara do¤ru 2 piksel çizmek olmal›d›r. fiimdi
oluflturaca¤›m›z blo¤un d›fl çizgilerini çizelim. Yard›mc›
olmas› için [Ctrl]+['] ile grid’i açabilirsiniz.

Art›k blo¤umuzu gölgelendirmenin zaman› geldi.


3 boyutlu görünüm için üst bölümü en aç›k renk
ile (#A28D69) boyayal›m. Alt sol bölüm biraz daha
koyu (#917F5D) ve alt sa¤ bölüm ise en koyu renk-
te olmal› (#78684B). Burada boyamay› fill arac› yerine ka-
lem ile yapmaya da özen göstermeniz gerekecektir. Son
olarak size yak›n kalan kenarlar›n üzerinden daha aç›k bir
renk ile geçerek (#CFC0A6) daha gerçekçi bir 3 boyutlu
görünüm elde edebilirsiniz.

Blo¤un tu¤lalardan olufltu¤u izlenimi yaratmak


için ise sol bölüme (#5C503A) rengi ile yukar›dan
afla¤› 3 piksel aral›k b›rakarak paralel çizgiler çize-
rek bafllayabiliriz. Dikine çizgileri daha rahat çizmek için
zum katsay›s›n› %600'e getirebilirsiniz. Aral›k olarak 5
piksel yeterli gelecektir. 3 boyutlu bir görünüm yaratmak
için flekildeki gibi bu çizgilerin sol ve üst taraflar›na
(#B3A17F) rengini kullanarak ek paralel çizgiler çizmeniz
ifle yarayacakt›r. Ayn› ifllemi sa¤ bölüme de uygulay›n ve
iflte ilk blo¤umuz haz›r.

Konuflma balonu yaratmak

Önce arka plan› beyaz 300x300 piksel boyutunda


bir dosya yarat›n. [M] tuflu ile eliptik seçim arac›n›
seçin ve oval bir seçim oluflturun. Ard›ndan poli-
gon seçim arac›na geçin ve bir önceki seçime ekleme yap-
mak için [Shift] tufluna bas›l› tutarak konuflma balonu-
nun hemen alt k›sm›na yak›n bir yere flekildekine benzer
bir üçgen daha çizin. fiimdi seçim hala geçerli iken
[Shift]+[F5] tufllar› yard›m›yla bu seçimin içini siyah renk
ile doldurun.

Bu flekilde konuflma balonunun tam flekli karfl›n›za


ç›kacakt›r. E¤er sonuçtan memnunsan›z art›k içini
tekrar beyaz renk ile doldurup çal›flmaya devam
edebilirsiniz. Bu noktadan sonra ilk olarak Layer / Layer
Style / Stroke seçene¤ini 1 numaral› resimdeki gibi uygu-
lay›n. Bunun hemen ard›ndan Bevel ve Emboss, Drop
Shadow ve Gradient Overlay seçeneklerini de s›ras›yla 2.,
3. ve 4. resimdeki ayarlar› örnek alarak uygulad›¤›n›zda
sonuç ortaya ç›kacakt›r.

<< CHIP Workshop • 36

You might also like