You are on page 1of 14

Web Programcl

<<

JSP ile login uygulamalar


Dilediiniz web sayfalarnz annda ifreyle ulalabilir hale getirebilirsiniz. Bir defa yapn her, yerde kullann.Bu ay ziyaretilere zel sayfalar yapmay reniyoruz.
unucu-tarafl uygulamalarda en sk karlalan zorunluluklardan biri de belirli ziyaretilere zel ierikleri ifre ile koruma altna almaktr. mtiyazl ziyaretilerinizin ancak ifreyle ulaabilecei sayfalarn ounlukla birden fazla olmasndan dolay, korumaya alnacak her bir sayfada ziyaretiye ifre sormak pek salkl bir yaklam olmaz. Ziyaretiniz bir defasnda ifre sorgulamasndan baar ile kmsa, onun o oturum boyunca ifreli sayfalarn tmne ulaabilmesine izin verecek bir dzenee ihtiya duyarsnz. Dier taraftan, ziyaretinin girecei ifre bilgilerinin uygulamanz tarafndan hatrlanabilmesi de sitenize art deer katacaktr. Bu gibi durumlar iin ifre sorgularnda geen ay incelediimiz oturum (session) ve erez (cookie)lerden faydalanabilirsiniz.

evvela ifre sorgulamasnn yaplaca form ekrann oluturmalsnz. Bu atlyemizde ilk olarak session nesnesinden faydalanan login prosedrl bir uygulama yapacaz. Uygulamamz bir form yoluyla girilen bilgileri baka bir sayfada deerlendirecek. ifre doruysa kullancy ifre korumas altndaki herhangi bir sayfaya eriime imkan tanyacak, yanlsa ya da eksik girilmise login giriiminin baarsz olduunu belirten bir ifade ile kullancya geri dnecek. Uygulamada sessionlardan faydalanmamzn sebebi, bir defasnda login ilemini gerekletiren kullancnn, ayn oturum iinde, koruma altndaki birden fazla sayfaya eriimini salayabilmek. nce sayfalarmz oluturacak kodlarmz grelim. Login bilgilerinin girilecei login.html sayfamz. Kod 1409- login.html
<html> <head> <title>Login sayfas</title> </head> <body bgcolor="#ffffff"> <h2>Login Sayfas</h2> <br> <form method="post" action="sifre.jsp"> <table> <tr> <td>Kullanc ismi: </td> <td><input type="text" value=""></td> </tr> <tr> <td>ifre: </td> <td><input type="password" name="Sifre"></td> </tr> <tr> <td>&nbsp;</td> <td><input type="submit" value="Login"></td> </tr> </table> </form> <br> (Login iin ihtiyacnz olan ifre: <b>kamikaze</b>) <br> nemli bilgiler ieren sayfamza login yapmadan gidebilmeyi denemek iin <a href="onemlisayfa.jsp">buraya</a> tklayn. </body> </html>

Login prosedr ile ifrelenmi sayfalar


Uygulamalarnzda ifreli sayfalar sz konusu ise, ziyaretiniz iin

360 derecelik panoramik grnt veren bu appleti kumanda eden dmeler bizzat websayfas zerinde. Kullancnn dmelere basmas sonucu applete bilgi JavaScript yardmyla gidiyor.

146 CHIP Workshop > >

>>
Kod 1410- sifre.jsp
<html> <body bgcolor="#ffffff"> <%! String sifre; %> <%

Web Programcl

Form sayfamz gerekletirdikten sonra bu sayfada girilen ifre bilgisinin geerli olup olmadn kontrol edecek sunucu-tarafl uygulama sayfasn hazrlamamz gerekir. Uygulamamzda anahtar noktay tekil edecek sifre.jsp sayfamzn kodlar aadaki gibi olacak:
XXX</font></h2>");

HttpSession onemliSayfa = request.getSession(true); onemliSayfa.putValue("sifre","geersiz"); out.println("<h2><font color='#FF0000'>XXX

out.println("ifrenizi girmeyi unuttunuz!<br>"); } %> </body> </html>

<head><title></title></head>

sifre = request.getParameter("Sifre"); if ((sifre!=null)&&(sifre.length()>0)){ //Eger sifre girildiyse

ifre korumas altna almak istediiniz sayfalar birden fazla olabilecei iin bu sayfalar minimum efor sarf ederek ifreli hale getirebilmek nemlidir. Sradan bir sayfanz ifreli hale getirmek iin tm yapmanz gereken sayfanzn en bana birka satrdan oluan bir JSP ifadesi yerletirmek. Kod 1411- onemlisayfa.jsp

if (sifre.equals("kamikaze")){ //Eger sifre gecerliyse HttpSession onemliSayfa = request.getSession(true);

<% HttpSession onemliSayfa = request.getSession(); if (onemliSayfa.getValue("sifre")!="geerli"){ response.sendRedirect("red.html"); } onemliSayfa.putValue("sifre","geerli"); out.println("ifreniz geerli. Sitemizde %> <html> <head> <title>Gizli sayfa</title> out.println("Hatta <a </head> <body bgcolor="#ffffff"> Gizli bilgilerimizin bulunduu sayfalardan biri. </body> HttpSession onemliSayfa = </html>

dilediiniz sayfaya gidebilirsiniz<br>");

href='onemlisayfa.jsp'> nemli bilgiler ieren sayfamz</a> da dahil!"); } else { //Eger sifre gecersizse

request.getSession(true); onemliSayfa.putValue("sifre","geersiz"); out.println("<h2><font color='#FF0000'>XXX Geersiz ifre XXX</font></h2>"); out.println("Login bilgileriniz geerli degil!<br>"); out.println("Ltfen edip "); out.println("<a sayfasna</a> giderek tekrar deneyiniz."); } } else{ //Eger sifre girilmediyse href='login.html'>login bilgilerinizi kontrol <body bgcolor="#ffffff"> <h2><font color="#FF0000">XXX Malesef! XXX</font></h2> <br><br> <b>Umutsuz bir denemeydi dostum. Belki bir daha ki sefere.. </b>

Ve son olarak nemli bilgiler ieren sayfamza direkt url adresi yoluyla ulamak isteyen uyanklarn karlaacaklar ret sayfas.

Kod 1412- red.html


<html> <head> <title></title> </head>

< CHIP Workshop 147 <

Web Programcl

<<

nce bir uyanklk yapp nemli bilgiler ieren sayfaya dorudan ulamay bir deneyelim

Bu yolla olmad

Peki ya login sayfasnda bir ifre girmezsek..

Peki ya yanl bir ifre girersek..

Bir de doru ifreyi girelim bari. kamikaze***

Bu sefer oldu galiba! imdi korumal sayfamza bir gz atalm*** 148 CHIP Workshop > >

>>

Web Programcl

String kullaniciAdi="", sifre=""; %> <% Cookie[] cookieler = request.getCookies(); for (int i=0; i<cookieler.length; i++) { Cookie cookieAktif = cookieler[i]; String isimAktif = cookieAktif.getName(); String degerAktif = cookieAktif.getValue(); if ("KullaniciAdi".equals(isimAktif)&(degerAktif!=null)) { kullaniciAdi=degerAktif; } else if ("Sifre".equals(isimAktif)&(degerAktif!=null)) { sifre=degerAktif; }

Aslnda sayfada korunmaya deer bir ey de yokmu!


</body> </html> %>

<h2>Beni Hatrla!</h2> <br><br> <form method="post" action="hatirla.jsp"> <table> <tr> <td>Kullanc ismi:</td> <td><input type="text" name="KullaniciAdi" value="<%=kullaniciAdi%>" ></td>

imdi login sayfasn aalm ve uygulamamz bir test edelim. SelamlaJS.html Bu uygulamamzda ifade etmek istediim tek nokta, uygulamanzda yer alacak dier ifreli sayfalarnzn en bana aadaki scriptlet blokunu eklemenizin yeterli olacadr.

<% HttpSession onemliSayfa = request.getSession(); if (onemliSayfa.getValue("sifre")!="geerli"){ response.sendRedirect("red.html"); } %>

</tr> <tr> <td>ifre:</td> <td><input type="password" name="Sifre" value="<%=sifre%>" ></td> </tr> <tr> <td>Bir daha ki sefere beni hatrla</td>

Cookieler sayesinde Login bilgilerinin hatrlanmas


Farkl sayfalarn login bilgisini oturum baznda korumann yolunu grdk. imdi gelelim kullancnn ifresini hatrlama olayna. ki oturum arasnda (ki bu sre zarfnda uygulama ve hatta bilgisayar kapanm olabilir) bilgiyi korumann en kolay yollarndan biri erezlerden faydalanmaktr. Bu seferki uygulamamz ziyaretinin login bilgilerini cookielere kaydederek hatrlayacak. Uygulamamz dnml olarak birbirinden faydalanan iki sayfadan oluacak. Login bilgilerinin girilecei form sayfamz cookie_login.jsp girilen bilgileri hatrla.jsp sayfasna gnderecek.
</tr> <tr>

<td><input type="checkbox" name="Hatirlatma" value="secili" checked></td>

<td>&nbsp;</td> <td><input type="submit" value="Login"></td> </tr> </table> </form>

Kod 1404- cookie_login.jsp


<html> <head> <title>Beni hatrla</title> </head> <body bgcolor="#ffffff"> <%!

</body> </html>

imdilik JSP kodlarn nemsemenize gerek yok. Login bilgilerinin gnderilecei sayfamz da grecek olursak. Kod 1405- hatirla.jsp
<html>

< CHIP Workshop 149 <

Web Programcl

<<

<head> <title>Hatrla beni</title> </head> <body bgcolor="#ffffff"> <%! String kullaniciAdi, sifre, hatirlatma; %> <% kullaniciAdi = request.getParameter("KullaniciAdi"); sifre = request.getParameter("Sifre"); hatirlatma = request.getParameter("Hatirlatma"); if (hatirlatma!=null) { Cookie cookieKullaniciAdi = new Cookie("KullaniciAdi",kullaniciAdi); cookieKullaniciAdi.setMaxAge(900000); response.addCookie(cookieKullaniciAdi); Cookie cookieSifre = new Cookie("Sifre",sifre); cookieSifre.setMaxAge(900000); response.addCookie(cookieSifre); out.println("Bir daha ki sefere sizi hatrlayacam."); } else { Cookie cookieKullaniciAdi = new Cookie("KullaniciAdi",""); cookieKullaniciAdi.setMaxAge(900000); response.addCookie(cookieKullaniciAdi); Cookie cookieSifre = new Cookie("Sifre",""); cookieSifre.setMaxAge(900000); response.addCookie(cookieSifre); out.println("Bir daha ki sefere sanrm Login bilgilerinizi hatrlamayacam."); } %> <br><br> Buyrun <a href="cookie_login.jsp">dnp</a> bir bakalm. </body> </html>

ifre bilgilerinizi girdiniz ve bizi hatrlamas seeneini iaretlediniz. Login dmesine bastnz.

Uygulamamz bir dahaki loginde bizi hatrlayacann szn veriyor.

Uygulamamz altran kodlar incelemeden nce uygulamamzn nasl altn gzlemlemek yerinde olacaktr. Gelelim sistemin nasl ilediine: hatrla.jsp form bilgilerini alyor ve birer deikene kaydediyor.

Login sayfasna tekrardan gittiinizde (Dikkat: burada taraycnzn Geri / Back tuunu kullanmayn) gerekten de uygulama verdii sz tutuyor! 150 CHIP Workshop > >

>>

Web Programcl

Bu sefer login seeneini iptal ederek yeniden login yapn

Login sayfasna tekrar dndnzde karlaacanz durum

response.addCookie(cookieKullaniciAdi); Cookie cookieSifre = new Cookie("Sifre",sifre); cookieSifre.setMaxAge(900000); response.addCookie(cookieSifre); out.println("Bir daha ki sefere sizi hatrlayacam."); }

Hatrlatma deeri seili deil ise cookieye orijinal login deerleri yerine bo dize deerini () giriyor.aydediyor.

else { Cookie cookieKullaniciAdi = new Cookie("KullaniciAdi",""); cookieKullaniciAdi.setMaxAge(900000); response.addCookie(cookieKullaniciAdi); Cookie cookieSifre = new Cookie("Sifre",""); cookieSifre.setMaxAge(900000); kullaniciAdi = request.getParameter("KullaniciAdi"); sifre = request.getParameter("Sifre"); hatirlatma = request.getParameter("Hatirlatma"); hatirlatma deikeni seili ise if (hatirlatma!=null) out.println("Bir daha ki sefere sanirim Login bilgilerinizi hatrlamayacam."); } response.addCookie(cookieSifre);

Uygulamamz bir dahaki sefere login bilgilerimizi hatrlamayacan ve bu bilgileri tekrardan kendimiz girmemiz gerektiini belirtiyor.

NOT:
birer deikene kaydediyor. Bu ayki atlyemizde kullandmz rneklerin kaynak kodlarn CDdeki StudioWeb+ blmnde bulabilirsiniz. rnekleri online olarak deneyebilmek iin link adreslerini de yine bu blmde bulabilirsiniz. Numan Pekgz numanpekgoz@chip.com.tr

{ Cookie cookieKullaniciAdi = new Cookie("KullaniciAdi",kullaniciAdi); cookieKullaniciAdi.setMaxAge(900000);

< CHIP Workshop 151 <

Java Serisi

<<

JAVA ile Programlama Blm 7


Platform bamsz alabilmesi sayesinde iletim sistemi ve donanm ayrt etmeden tm bilgisayarlarda kullanlabilen yeni nesil programlama dili Javala ilgili eitim yazmz kald yerden devam ediyor. Bu ay, daha nce metot ve deikenlerini kullanmay rendiimiz snflarn tretilmesi zerinde duracaz

erhabalar. Bir Java dersinde daha tekrar birlikteyiz. Java derslerimizin 7. blmn oluturan bu derse kadar hangi noktada olduumuza bir bakalm: Artk kendi snflarmz yaratabilecek, daha nce yaratlm olan snflar ister kendi ilerinde, istersek de baka snflar ierisinde kullanabilecek ve yine daha nce yaratlm snflarn metot ve deikenlerini kullanabilecek durumda olduumuzu grmekteyiz. Derslerimizin bundan sonraki ksmnda artk snflara yeni bir ilevsellik kazandrmay reneceiz. Bu ilemi Snflarn Tretilmesi olarak adlandracaz.

Temel Snf
a degiskeni b degiskeni A metodu B metodu

tretme

tretme

Yazda Kullanlan Kaynaklara likin Not:


Bu yaz dizisi boyunca, Snflarn Tretilmesi, Snfn veri eleman, Metotlarn prototipleri, vb. gibi kullanmakta olduum birok teknik kavramn resmi olarak kabul edilmi bir Trke ifadesi yoktur. Bu nedenle sz geen teknik kavramlarn Trke ifadelerini, sevgili hocam Kaan Aslan'n kabul ettii ve kendi dokman ve yaynlarnda kulland ekilde kullanmaktaym. Bunun yan sra, bu dersler boyunca kul-

x degiskeni; y degiskeni; z degiskeni; X metodu

k degiskeni; K metodu L metodu M metodu

Tretilen Snf 1
Snflarda tretme ilikisi

Tretilen Snf 2

41 CHIP Workshop > >

>>

Java Serisi

Kisi.java Dosyas

lanlan rnek uygulamalarn bazlarnn, aratrma grevlisi olarak altm kurum olan stanbul Bilgi niversitesi Bilgisayar Bilimleri Blm'nde verilen programlama derslerinden alnt olduunu da beliririm.

ma sorusunun zm ve aklamasn http://cs.bilgi.edu.tr/~erman/index.html sayfasna ulaarak elde edebilirsiniz.

Bylece yaz boyunca daha fazla konu ileyerek, bu adresteki rneklerle birlikte oka rnei inceleme ansna sahip olacaz.

rnek Kodlara likin Uyar:


unu da vurgulamalym ki; bundan sonra derslerimizde rnek ve uygulamalar gittike daha fazla kod satr iereceinden, baz rnek kodlar artk yaz ierisinde deil yine ayn adresteki sayfalarda bulabileceksiniz.

Snflarn Tretilmesi
Snflarn tretilmesi kavramn yle bir rnekle aklamaya alalm: Diyelim ki ok byk bir programlama projesinin bir ksmnda grev aldnz. yle ki sizin yapmanz gereken ksm bir ekran zerine yerletirile-

Geen Derste Verilen Uygulama Sorusunun Cevab:


Yeni balklar renmeye balamadan nce geen derste vermi olduumuz uygula< CHIP Workshop 42 <

Java Serisi

<<

Ogrenci.java Dosyas

cek olan seenek dmelerinin tasarm olsun. Ancak bu ilemi yapabilmeniz iin elinizde her eyden nce bir ekran grntsnn olmas lazm. O halde ncelikle bir ekran grnts oluturan program paras, ya da artk yeni rendiimiz kavramlara dayanarak, temel ekran ilemlerini barndran snf olmas gerekmektedir. Ancak sizin asl iiniz olmadndan, ekran ilemlerine ilikin bir snf yazmanz ve daha sonra da

kendi dmelerinizi de bu snf ierisine eklemeniz gereksiz bir i olacaktr. Ayrca bu ekran ilemleri gibi temel nitelie sahip ve sizin dnzda dier kiilerin de baka ilemler iin ihtiya duyabilecei bir snf kendi bana ayr bir ekilde tasarlanmaldr. Eer bu snfn temel zelliklerini koruyarak, zerine herkesin ihtiya duyaca yeni zelliklerle birlikte yeni bir snf haline getirilecei bir mekanizma olursa, nceden

harcanan emek de yeni ilemler iin temel tekil edecek nitelikte olup, gereksiz i gc kayb engellenmi olacaktr. te Java'da bu mekanizmaya snflarn tretilmesi denir. ekilde tretme ilikisine ilikin bir rnek yer almaktadr. Buna gre ekildeki TemelSiniftan tretilen Sinif 1 ve Sinif 2 isimli snflarn ilevleri Temel Snfn ilevlerini de iermektedir. Buna gre Sinif 1; kendi ieri-

KisiDeneme.java Dosyas

43 CHIP Workshop > >

>>

Java Serisi

sinde yer alan x, y ve z deikenleri ile X metodunun yan sra, TemeSinif dan tredii iin a,b deikenleri ile A, B metotlarna da sahip olmaktadr. Benzer ekilde Sinif 2, kendisinde yer alan k deikeni ile K, L ve metotlar ve tretme ilikisi yznden a, b deikenleri ile A ve B metotlarna da sahip olmaktadr. ekilde bu tretme ilikisinin Sinif 1 ve Sinif 2 den TemelSinifa doru giden oklarla gsterilmesi bir yanllk deil, kasten yaplmaktadr. Nesne ynelimli programlamada tretme ilikisi genellikle bu ekilde, yani, tretilmi snftan tretilen snfa doru gsterilmektedir.

Baka bir snftan tretilmi olan snflarda, super ile temsil edilen metod, tretmenin yapld snfn balang metodunu temsil etmektedir. O halde bizim rneimizde Ogrenci.java dosyasnn 7. satrndaki
super(ad, cns, adr);

birtakm Ogrenci2 snf trnden nesneler hemen o anda parametre olarak yaratlarak listeye eklenmitir. Bu Ogrenci2 trnden nesneleri nce deiken olarak yaratp daha sonra ekle metoduna parametre olarak gnderebilirdik. rnein:
Ogrenci2 o2 = new Ogrenci2("Evren Banger", 'e',"Bilgisayar", 2, 100, 2.54) x.ekle(o2);

rnek Uygulama 1
JO halde kavramsal olarak incelediimiz tretme ilemini bir de uygulamal olarak grelim. Kisi.java, Ogrenci.java ve KisiDeneme.java dosyalarndan oluan klasik rnekte bir kii kaydn temsil eden bir snftan, bir renci kaydn temsil eden farkl bir snf tretilmektedir. rnek dosyalar yine her zamanki gibi http://cs.bilgi.edu.tr/~erman/index.html adresinde bulabilirsiniz. rnekte, tretme ilemine maruz kalan snfn Ogrenci isimli snf olduunu grmekteyiz. Bu nedenle Ogrenci isimli snf yaratlrken snf bildiriminin devamna extends anahtar szc ve daha sonra da bu snfn tretildii temel snf olan Kisi snfnn ad yazlmaktadr.

kullanm ile Ogrenci snfnn tredii Kisi snfnn uygun parametreli balang metodunun arldn syleyebiliriz. Bylece KisiDeneme.java dosyasnda kullanc Ogrenci nesnesini yaratrken, aslnda arka planda, bu Ogrenci nesnesinin ierisinde yer alan Kisi nesnesine ait ksmlar, Kisi nesnesinin balang metodu ile oluturulmakta ve daha sonra da Ogrenci nesnesinin kendisine ait olan ksmlar oluturulmaktadr. Fakat bu ilemlerin hepsi neticede Ogrenci nesnesinin balang metodu ierisinde yaplmaktadr. Ogrenci nesnesi Kisi nesnesinden tredii iin, bnyesinde Kisi nesnesine ait ksmlar da barndrmakta ve dolays ile super metodu yardmyla gerektiinde Kisi nesnesinin balang metotlarna ya da Ogrenci.java dosyasnn 29. satrnda olduu gibi Kisi nesnesini baka metot ve deikenlerine erime hakkna sahip olmaktadr.

Ancak bizim kullandmz yntem hem daha pratik hem de gereksiz deikenlerden arnm bir program yazmamz salamaktadr. Kayitlar.java snfnn ierisindeki
public Kayitlar(Ogrenci2 yeniEleman)

rnek Uygulama 2:
imdi rneimizi biraz daha genelletirelim ve bu sefer ierisinde renci2 snf trnden nesneleri tutan ve bu nesneler ile ilgili eitli ilemler yapan bir Kayitlar isimli bir snf tasarlayalm.

Ogrenci.java Dosyas:
Bylece Ogrenci snf artk ayn zamanda bir Kisi snf haline gelmi ve kendi deiken ve metotlarnn yan sra, Kisi snfnn deiken ve metotlarna da sahip olmutur. Bu nedenle Ogrenci snfn yazarken bir daha isim, cinsiyet ve adres deikenleri ve bu deikenler ile ilgilenen gerekli metotlar yazmaya gerek yoktur. KisiDeneme.java dosyasndaki main metodu ierisinde en son oluturduumuz Ogrenci snfn kullanarak bir nesne yaratmaktayz. Daha sonra da nceden rendiimiz toString metodu ilevinden yararlanarak (bkz. Blm 6) oluturduumuz bu Ogrenci trnden nesneyi ekrana basmaktayz.

Not:
Bu uygulamann dosyalarn http://cs.bilgi.edu.tr/~erman/index.html adresinde bulabilirsiniz. Bu snf daha nceki derslerimizde yazm olduumuz KayitListesi snfn andrmakla beraber, bu sefer snfn veri eleman bu kaytlar tutacak Ogrenci2 trnden bir dizi olacaktr. Bu arada , Ogrenci2 snf da bir nceki rnekte kullandmz Ogrenci snfna ok benzer olup sadece baz metodlar deitirilerek yeniden yazlmtr. zetle bu rnek Kisi2.java, Ogrenci2.java ve Kayitlar.java dosyalarndan olumakta ve en son olarak KayitlarDeneme.java dosyasnda altrlmaktadr.imdi de gelelim bu uygulamann detayl bir incelemesine: KayitlarDeneme.java dosyasndaki main metodu ierisinde Kayitlar snf trnden bir nesne yaratlm ve bu nesnenin ekle isimli metodu yardmyla

Snflarda super Metodu:


En son yazdmz Ogrenci snfnn balang metodu ierisinde super isimli ilgin bir metod kullanlmaktadr. Oysa Ogrenci isimli snfn byle bir metodu yoktur. O halde hi yazlmam olan bu metod nedir?
< CHIP Workshop 44 <

prototipli balang metodu daha nce hi kayt eklenmemi durum iin tek elemanl yeni bir Ogrenci2 dizisi yaratr ve yeniEleman isimli Ogrenci2 trnden parametreyi de bu diziye ekler. Yine Kayitlar snfnn metodlarndan birisi olan ekle isimli metod da durumu iki trl ele alr. Eer daha nce hi kayt eklenmemise nce tek elemanl bir Ogrenci2 dizisi alarak bu kayt diziye eklenir (satr 16-18). Ama zaten daha nceden eklenmi kaytlar varsa o zaman ilk olarak eski diziden 1 eleman fazla uzunlukta tmp adnda yeni bir geici dizi yaratlr (satr 22), daha sonra eski dizinin tm elemanlar bu diziye de kopylanr (satr 24-25) ve en son olarak da bu tmp dizisinin fazla olan sondaki bo eleman yerinde de metoda parametre olarak gnderilen eklenecekOgr isimli Ogrenci2 nesnesi yerletirilir (satr 27). Tm bu ilemlerin sonunda da artk kaytlarn son halini tutan tmp dizisi, snfn kendi dizisi olan dizi isimli Ogrenci2 dizisine atanr (satr 28). Buna benzer olarak; snfn ckart isimli metodu da karlacak olan elemannn dizideki indeks numarasn saptadktan sonra (satr 37-39) bu elemana kadar olan ve bu elemandan sonraki tm elemanlar tmp dizisine kopyalar (satr 41-42 ve 44-45) ve tmp dizisini yine snfn asl dizisi haline getirir (satr 47). Kayitlar snfnn public Ogrenci2 enBuyukOrtalamaliOgrenci() isimli metodu ise Ogrenci2 nesnelerinin ortalamarna bakarak en yksek ortalamal Ogrenci2 nesnesini geri dn deeri olarak gnderir. Geriye dnen bu deer KayitlarDeneme.java dosyasnda bir Ogrenci2 deikeninde tutularak (satr 16) ekrana baslr

Java Serisi

<<

protected veri elemanlarna eriim

(satr 17). Burada tekrar hatrlatmak isterim ki; sonuc adndaki Ogrenci2 snf deikeni 17. satrda olduu gibi ekrana baslmak istendiinde, aslnda sonuc deikeni araclyla ve Ogrenci2 snfna ait olan toString isimli metod otomatik olarak arlmaktadr ve bu metodun hazrlayp gnderdii String trnden ifade ekrana baslmaktadr. Tabi ki bu ifadeyi hazrlayan da snf yazan kiidir. Umuyorum ki detayl olarak hazrlayp anlatmaya altm bu rnek ile birlikte, snflarn tasarlanmas, baka snf ve metotlar ierisinde kullanlmas ve tretilmesine ilikin kavramlar daha rahat kavram olursunuz.

grntleyen metotlar ekleyiniz ve bu yeni snfn adn da Kayitlar2 olarak deitiriniz. pucu olarak; yazmanz gereken bu metotlarn prototiplerini aadaki ekilde verebiliriz:
public void notOrtalamasinaGoreListele() public void isimSirasinaGoreListele() public void bolumdekiOgrenciler(String bolumAdi) public void donemdekiOgrenciler(int donem)

Uygulama Sorusu
Yukarda verilen Kayitlar snf rneini biraz daha gelitirerek bu snfa rencileri not ortalamalarna gre, isim srlarna gre listeleyen ve sadece belirli blmlerdeki ya da belirli dnemlerdeki rencileri

unu da belirtmeliyim ki, Kayitlar snfna ekleyeceiniz bu metotlarn yan sra, eer gerekeceini dnyorsanz mevcut metotlarn ileyilerini ya da bu snfn ierisinde kullanlan Ogrenci2 snfnn da yine baz metotlarnn ileyiini deitirebilirsiniz. Sorumuzun cevabn bir sonraki dersimizde bulacaksnz.

snfnn dier metotlar tarafndan eriilebilir haldedir. Bununla beraber public snf elemanlar, hem bu snfn dier metotlar, hem de bu snf trnden yaratlm olan nesneler tarafndan, yani dardan eriilebilir haldedir. Eer bir snfn veri eleman sadece bu snfn kendi metotlar ya da bu snftan tretilmi snflarn metotlar ile eriilebilir, ancak dardan eriilemez olsun isteniyorsa, byle veri elemanlarnn protected veri eleman olarak bildirilmesi gerekir. Bu durumda protected veri elemanlarnn eriim bakmndan public ve private veri elemanlar arasnda bir seviyede olduunu syleyebiliriz. Bu dersimiz boyunca snflarn kullanm ve tretilmesine ilikin iki tane detayl rnek yaptk. Bir sonraki dersimizde Soyut Snflar ve Arayzleri inceleyeceiz. Daha sonra devam eden derlerimizde de artk Java ile grafik arayz tasarm gelitirmeye balayacaz. Bylece kendi masast uygulamalarmz iin artk grsel arayzler yazabilecek ve programlarmz daha kullanc etkileimli hale getirebileceiz. zellikle vurgulamak istiyorum ki burada verilen rnekleri mutlaka kendi banza bir kez daha yaznz. Ayrca vermi olduumuz uygulama sorularnn zmlerini de mutlaka yapmaya alnz. Bylece Java ile program yazma tekniklerinizin ok hzl bir ekilde gelieceinden emin olabilirsiniz. Bir sonraki derste grene dek esenlikle kaln. Sevgi ve sayglarmla.

R. Erman Ayka

Snflarn protected veri elemanlar:


Daha nceden biliyoruz ki snflarda private olan bir deiken ya da metot sadece kendi

stanbul Bilgi niversitesi Bilgisayar Bilimleri Blm ermanaykac@chip.com.tr

45 CHIP Workshop > >

Photoshop Serisi

Herkes iin Photoshop


Profesyonel klandrma
Gnlk hayatta ektiiniz fotoraflar profesyonel stdyo kalitesine getirmek iin nce fotorafnz an. Ardndan [Ctrl]+[J] tu kombinasyonu ile katmann bir kopyasn kartn ve Layer / Add Layer Mask / Reveal All mens yardmyla bu yeni katmana bir maske ekleyin. Bu yeni katman maskesi seili iken nc resimdeki ayarlarla Image / Apply Image seeneini uygulayn ve katmann blending modunu Screen olarak deitirin.

<<

Photoshopun farkl alanlardaki kullanm ekillerini daha iyi anlayabilmek iin bu sayfalarda yer alan Photoshop derslerinde her ay; fotoraf dzenleme, izim ve efektler eklinde 3 ayr blm altnda eitli rnekler yer alacak.

1 2

Karikatr grnm elde


Fotoraflarnzn karikatr grnmne brnmesini istiyor musunuz? Bunun iin ncelikle bir fotoraf an ve [Ctrl]+[J] ile bu katmann bir kopyasn kartn. Ardndan Filter / Stylize / Find Edges seeneini uygulayn. Bu yeni katmann blending modunu Overlay olarak deitirdiinizde artk fotorafnz biraz daha fazla elle izilmi gibi gzkecektir. Bu efekt kontrast yksek fotoraflarda daha fazla etkili olacaktr.

2 1

3 1 3 2

Islak yol
Fotoraflardaki herhangi bir yzeyin slakm gibi gzkmesini ister misiniz? Bunun iin nce fotorafnz an ve hemen [Ctrl]+[J] tular ile katmann bir kopyasn kartn. Yeni katmann blending modunu Soft Light olarak deitirin. En st katman seili iken [Ctrl]+[T] tularna basn ve katman yola yansyormu gibi deforme edin. lem bitince [Enter]a basn. Ardndan katmana Layer / Add Layer Mask / Reveal All komutuyla bir maske ekleyin. imdi katman maskesine Filter / Render / Clouds ile bulut efekti uygulayn. Katman maskesi hala seili iken bu sefer de Image / Apply Image seeneini ikinci resimdeki ayarlarla uygulayn. imdi [E] tuuna basarak silgi aracn sein ve katman maskesi iindeyken yol dnda kalan btn alanlar temizleyin. imdi en st katman sein (katman maskesini deil) ve maskeyle katmann balantsn kopartn. Bu ilemlerin ardndan Filter / Distort / Ocean Ripple seenei yardmyla dalga efektini o an iinde bulunduunuz katmana varsaylan ayarlarla uygulayn ve OKa tklayn. imdi Filter / Blur / Motion Blur filtresini Angle: 90 ve Distance da bulankln yksekliinde olacak ekilde uygulayn ve OKa tklayn. Efektin gcn artrmak iin en st katmann blending modunu Overlay olarak deitirip opacity deeri ile oynayabilirsiniz.

8
37 CHIP Workshop > >

>>

Photoshop Serisi

Kendinizi HULKa dnn


Herhangi bir arkadanz Hulka dnseydi acaba nasl grnrd? Cevab bulabilmek iin nce arkadanzn resmini Photoshop iinde an. Ardndan yz hatlar ile oynayp ona bir canavar grnts verebilmek iin Filter mens altndan Liquify aracn altrn. Her ey hayal gcnze kalm. Ancak bize kalrsa burnu ve eneyi bytmeyi, gzleri kltp, aln geniletmeyi deneyebilirsiniz.

1 3

lemi tamamladktan sonra Background katman zerine sa tu ile tklayp oaltn ve ara ubuundan Quick Mask tuuna tklayarak maske moduna gei yapn. imdi siyah ve beyaz fralar kullanarak seimimizi belirleyeceiz. Bu modda siyah fra ekran krmzya boyayacaktr. Orijinal modda ise krmzya boyal olmayan yerler seilecektir. Dolays ile burada yz hari her yeri krmz ile boyamamz gerekir.

Seimin sadece yz kapsadndan emin olun. Eer ters bir ilem yaptysanz Select / Inverse seenei ile seimi tersine evirebilirsiniz. Eer seiminizden memnunsanz artk ileme devam edebilirsiniz. imdi Edit / Copy ve Edit / Paste ile seimi kopyalayp tekrar yaptrn. Otomatik olarak yeni bir katman oluacaktr. Son olarak nc resimdeki ayarlar ile Image / Adjustments / Hue / Saturation seeneini uygulayn.

10
Katmann bir kopyasn karn ve blending modunu Overlay olarak deitirin. imdi Layer/Merge Down seeneini 3 kere kullanarak en st 3 katman birletirin. Ardndan Image/Adjustments/Levels seenei altndan orta kaydrma ubuunu resminizde kontrast deiimi grene kadar hafife saa doru ekin. Kontrast, Hulk karakterinize biraz daha derinlik ve gerekilik katacaktr.

12

11

Fotoraflar dzeltmek
nce fotoraf an. Ardndan Image /Adjustments / Shadow / Highlight seenei yardmyla glge deerini (Shadow Amount) %50 olarak deitirin ve (i)OK(i)a tklayn. imdi srasyla [Shift]+[Ctrl]+[L] ile fotorafn renk seviyelerinin, [Alt]+[Shift]+[Ctrl]+[L] ile kontrast deerlerinin ve [Shift]+[Ctrl]+[B] ile de renk deerlerinin otomatik olarak ayarlanmasn salayabilirsiniz. Artk elinizde hatlar daha belirgin bir fotoraf olacaktr.

< CHIP Workshop 38 <

You might also like