You are on page 1of 610

Java

ile

Nesneye Ynelik Programlama

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

Bu Dnem Hakknda
Servlet Corba RMI

Temel Ksm JSP XML


Altu B. Altnta 2003

EJB

JDBC
Java ve Yazlm Tasarm - Blm 1

Y
2

Java Nedir?
Java platformu , a(network) n nemi hesaba katlarak ve ayn yazlmn birok deiik bilgisayar ortamnda veya deiik tr makinalarda almas fikri ile gelitirilmi yeni bir teknolojidir.

Java teknolojisi kullanlarak ayn uygulamay deiik ortamlarda altrabiliriz rnein Pclerde , Macintosh bilgisayarlarda, hatta cep telefonlarnda.

Java dier programlama dilleri gibi bal bana bir rn deildir.

Java ve Javaya bal alt teknolojiler, Sun Microsystems tarafndan verilmi belirtimlerden (specifications) olumaktadr.Eer bu belirtimlere sadk kalnmaz ise hukuki olarak su ilenmi olur.

Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 1 3

Java le Neler Yaplabilir?


Java Programlama dili ile projelerimizi dier programlama dillerine gre daha kolay ve salkl bir ekilde yapmamz mmkndr . Ksaca gz atacak olursak , Java ile ;

GUI (graphical user interface , grafiksel kullanc ara yz) uygulamalar , Appletler. Distributed components (r . EJB, RMI, CORBA). Servlet, Jsp (web tabanl uygulamalar). Veri tabanlarna eriim ile alakal uygulamalar. Cep telefonlar, Smart kartlar iin uygulamalar . Ve daha niceleri iin uygulamalar yazmamz mmkndr.
Java ve Yazlm Tasarm - Blm 1 4

Altu B. Altnta 2003

Bir Kere Yaz Her Yerde altr


Java uygulamalar JVM (Java Virtual Machine) tarafndan yorumlanr( interpreted ). JVM , iletim sisteminin en tepesinde bulunur Java uygulamalar deiik iletim sistemlerinde , herhangi bir deiiklik yapmadan alabilir, Javann felsefesi olan bir kere yaz heryerde altr sz gerekletirilmitir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

alma Evreleri

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

alma Evreleri

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

Kategoriler

Java platformunun ana gruplar. Standart Java Enterprise Java Gml cihazlar iin Java (embedded devices) XML Teknolojileri Dier Teknolojiler

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

Standart Java

Java 2 SDK (J2SE) Java 2 Runtime Environment Java Plug-in Java Web Start Java HotSpot Server Virtual Machine Collections Framework Java Foundation Classes (JFC) Swing Components Pluggable Look & Feel Accessibility Drag and Drop Security Java IDL JDBC JavaBeans Remote Method Invocation (RMI) Java 2D
Java ve Yazlm Tasarm - Blm 1 9

Altu B. Altnta 2003

Enterprise Java

J2EE (Java 2 Enterprise Edition) CORBA Teknolojisi ECperf Teknolojisi Enterprise JavaBeans Teknolojisi Kontaynerler iin Java Yetkilendirme Kontrat (Java Authorization Contract for Containers) (Java ACC) Java IDL JavaMail API Java Mesajlama Servisi (Message Service) (JMS) API JavaServer Faces JavaServer Pages Java Servlets JDBC Teknolojisi J2EE Balayc Mimarisi (Connector Architecture) Hareketler (Transactions)
Java ve Yazlm Tasarm - Blm 1 10

Altu B. Altnta 2003

Gml Cihazlar in Java (Embedded Devices)

Java 2 Platform, Micro Edition (J2ME technology) Java 2 Platform, Micro Edition (J2ME Teknolojisi) Bal Aygt Konfigurasyonu (Connected Device Configuration) (CDC) Snrl Balanm Aygt Konfigurasyonu (Connected Limited Device Configuration) (CLDC) C Sanal Makinas (Virtual Machine) (CVM) K Sanal Makinas (Virtual Machine) (KVM) PersonalJava Java Card JavaPhone API Java TV API Jini Network Technology Mobil Bilgi Aygt Profili (Mobile Information Device Profile) (MIDP)

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

11

XML Teknolojileri

XML likilendirilmesi iin Java Mimarisi (Java Architecture for XML Binding) (JAXB) XML-Tabanl RPC iin JAVA API'si (Java API for XMLBased RPC) (JAX-RPC) XML Mesajlamas iin JAVA API'si (Java API for XML Messaging) (JAXM) XML lemleri iin JAVA API'si (Java API for XML Processing) (JAXP) XML Kaytlar iin JAVA API'si (Java API for XML Registries) (JAXR)
Java ve Yazlm Tasarm - Blm 1 12

Altu B. Altnta 2003

Dier Teknolojiler

Ara rnler
o o

MIF Doclet Sun ONE Stdyo (Studio) Sertifikal JAIN API rnleri (JAIN API Certified Products) Java Dynamic Management Kit Java Ynetim Uzants (Java Management Extensions) (JMX) Java MetaData Arabirimi (Java Metadata Interface) (JMI) Java Paylalan Veri Ara Takm Java Shared Data Toolkit Java Spaces Teknolojisi Servis Salyclar iin Java Teknolojisi (Java Technology for Service Providers) Jini A Teknolojisi (Network Technology) JXTA Projesi J2ME Platformu iin JXTA Projesi (Project JXTA for J2ME Platform) Sun Chili!Soft ASP
Java ve Yazlm Tasarm - Blm 1 13

A (NetWork) rnleri
o o o o o o o o o o o

Altu B. Altnta 2003

Javann Geliim Evreleri


1995 Java teknolojisinin ilk k yl ; ilk olarak Applet teknolojisinin dikkat ektii seneler.

1996

Java Development Kit (JDK) v1.0 kartld. Temel seviyeli ilevleri ieren bir versiyon (r. soket programlama, Girdi/kt (Input/Output), GUI (Graphical User Interface- Grafik Kullanc Arabirimi)

1997

JDK 1.1 kartld. Bu srmde Java GUI , veritaban eriimi iin JDBC , dank nesneler iin RMI ve daha birok yeni gelimeler eklendi .

1998

JDK 1.2 kartld . JFC/Swing yaynland- ayn sene iersinde http://java.sun.com internet adresinden 500,000+ adet indirme(download) gerekletirildi.

1999

Java teknolojisi J2SE, J2EE ve J2ME olarak 3e blnd . Java HotSpot (performans arttrc) yaynland . JavaServer Pages (JSP) teknolojisi yaynland. J2EE platformu yaynland . Linux zerinde J2SE platformu yaynland .

2000

JDK v1.3 kartld . Java APIs for XML teknolojisi yaynland .


2002 2003

JDK v1.4 versiyonu karld (Merlin projesi). Java API for XML binding yaynland.

2003 ylnn sonuna doru JDK v1.5 versiyonun karlmas planlanmaktadr (Tiger projesi).

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

14

Javann Baarl Olmasndaki Sebepler


Nitelikli bir programlama dili olmas

C++ da olduu gibi bellek problemlerinin olmamas . Nesneye ynelik (Object - Oriented) olmas C/C++/VB dillerinin aksine dinamik olmas . Gvenli olmas . Internet uygulamalar iin elverili (Applet, JSP, Servlet, EJB, Corba, RMI).

Platform bamsz olmas : bir kere yaz her yerde altr

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

15

p Toplayc (Garbage Collector)

Bir programn alma durumunda ortaya kan ve sonradan kullanlmayan (gereksiz) nesneleri bulur ve onlar yok eder (destroy). Bellek ynetiminin (memory management) yk, kodu yazan kiiden Javaya gemi olur Dier dillerde, rnein C++ da , oluturulan nesnelerin yok edilme sorumluluu kodu yazan kiiye aittir. p toplaycs(garbage collector) JVMin yazlna (implementation) gre deikenlikler gsterebilir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

16

Javada Yorum Satr


Java kaynak kodunun ierisine istediiniz yorumlar yazabilmeniz iin belli yol izleminiz gerekmektedir. Javada yorum satrlarn belirtme iki ekilde mmkn olur
1.

/* yorum */ , slash - yldzdan , dier yldz-slash


arasna kadar istediiniz yorumu yazabilirsiniz . Uzun satrl yorumlarda bu yntemi kullanabilirsiniz.

2.

// yorum , tek satrlk yorum yapmak iin idealdir.


Ksa yorumlarnz iin bu yntemi kullanabilirsiniz.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

17

Herey Nesne - 1

Javada hereye nesne olarak davranrz. Herseyin nesne olmasna ramen nesneleri ynetmek iin referanslar kullanlr .

rnek : Diyelim ki elimizde bir maket uak (nesne olarak dnn) ve bu maket uaa ait bir de kumanda (referans) olduunu dnelim. Bu maket ua havada saa sola dndrmek iin elimizdeki kumanda cihazn kullanmak zorundayzdr; benzer ekilde havalandrmak veya yere indirmek iin de kumanda cihazndan faydalanrz. Burada dikkat edilmesi gereken unsur kumanda cihazndan kan emirlerin maket ua tarafndan yerine getirilmesidir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

18

Herey Nesne - 2
- Elimizde uzaktan kumandann (referans) olmas, maket uamzn (nesne) olduu anlamna gelmez . - Uzaktan kumandamz (referans) da tek bana hayat srdrebilir.
String kumanda ;
// kumanda referans u an iin //String bir nesneye bal deil.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

19

Herey Nesne - 3

Bir referansa mesaj gndemek istiyorsak onu bir nesneye balamamz gerekir.
String kumanda= new String("Selamlar") ; String kumanda="Selamlar" ;

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

20

Snf Nedir?

Nesne Nedir?

Sabun s = new Sabun();


Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 1 21

Javada Depolanan Veriler Nerede Durur - 1

Stack : Bulunduu nokta RAMdr... Stack zerinde referanslarn kendileri bulunur. Heap : Buras genel amal bir havuzdur . Nesnelerin kendisi bu alanda durur. Statik Alan : Bu alan RAMde bulunur. Statik alanda yer alan veriler , programn almas sresince orada yaarlar. Nesnelerin kendileri bu alanda yer almazlar.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

22

Javada Depolanan Veriler Nerede Durur - 2


Non-RAM Bellek : Baz durumlarda uygulamalarn ierisinde oluturduumuz nesnelerin,uygulama sonlandktan sonra bile varlklarn srdrmelerini isteriz. 1. Akkan Nesneler (streamed objects) : Bu nesneler, genellikle a(network) zerindeki baka bir makineye gnderilmek zere bayt rmaklarna dntrlrler. 2. Kalc Nesneler (persistent objects) : Bu nesneler kendi durumlarn(state) saklarlar ve diskimizde saklanrlar. Kendi durumlarn saklamaktan kast ise zelliklerinin (attribute) deerlerinin korunmasdr.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

23

Temel (Primitive) Tipler


Temel tipler stack alannda saklanrlar.


Boyut Minimum

Temel tip

Maximum

Sarmalyc Snf Tipi Boolean Character Byte Short Integer Long Float Double
Void
24

boolean char byte short int long float double void

16- bit 8- bit 16- bit 32- bit 64- bit 32- bit 64- bit

Unicode 0 -128

Unicode 216- 1 +127 +2 +2 +2


151 311 631

-2 -2 -2

15 31 63

IEEE754 IEEE754

IEEE754 IEEE754

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

Sarmalayc (Wrapper) Snflar

Temel tiplerin birer adet sarmalyc (wrapper) snflar bulunur.

char c = 'x' ; // temel tip

Character C = new Character(c); // sarmalayc snf

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

25

Geerlilik Alan (Scope) - 1


{
int a = 177; /* sadece a mevcut*/

{
int b = 196; /* a ve b mevcut */

}
/* sadece a mevcut */ /* b geerlilik alannn dna kt */

}
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 1 26

Geerlilik Alan (Scope) - 2


C ve C++ doru ama Javada yanl olan bir ifade

{ // d alan
int a = 12;

{ // i alan
int a = 96; /* javada yanl ama C ve C++ doru */

} // i alann sonu } //d alann sonu


Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 1 27

Nesneler in Geerlilik Alan (Scope of Objects)


if (true){ String s = new String("Selamlar"); } /* geerlilik alannn sonu*/

Geerlilik alannn sonunda String nesnesi p Toplaycs (Garbage Collector) tarafndan bellekten silinececektir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

28

Yeni Snf Oluturma

public class YeniBirSinif .....

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

29

Alanlar - 1

Alanlar, temel bir tip veya snf tipinde olabilir.

public class YeniBirSinif public int i; public double d; public boolean b; }

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

30

Alanlar - 2
Temel (primitive) Tip boolean char byte short int long float double
Altu B. Altnta 2003

Mevcut deer (Default value) false \u0000 (null) (byte)0 (short)0 0 0L 0.0f 0.0d
Java ve Yazlm Tasarm - Blm 1 31

Alanlar - 3

public class YeniBirSinif { public int i = 5 ; public double d = 3.23; public boolean b = true ; }

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

32

Alanlar - 4

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

33

Alanlara Ulam

Nesnenin alanlarna ulamak iin . (nokta) kullanlr. Bu alanlarn eriim belirleyicileri public private protected friendly olabilir.
YeniBirSinif ybs.i ; ybs.d ; ybs.b ; ybs = new YeniBirSinif();

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

34

Alanlara Deer Atama

YeniBirSinif ybs = new YeniBirSinif(); ybs.i = 5; ybs.d = 5.3; ybs.b = false;

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

35

Snf Tipindeki Alanlar - 1

public class YeniBirSinif public public public public }

int i; double d; boolean b; String aciklama = new

String("aciklama");

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

36

Snf Tipindeki Alanlar - 2

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

37

Yordamlar (Methods) - 1

dnTipi YordamIsmi( /* parametre listesi */ ) { /* Yordamn gvdesi */ }

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

38

Yordamlar (Methods) - 2 dnTipi= Yordamlarn iki ans vardr:


Deer

dndrrler Temel (primitive) bir tipde deer (int, double, short vb..) Snf tipinde bir deer (String, Double, Short vb...) Deer dndrmezler = void

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

39

Yordamlar (Methods) - 3

else , import , class , return..vb) ve Trke karakterler haricinde istenilen isim kullanlabilir. Ancak, yordamlar bir eylem ierdikleri iin, yordam isimlerinin de bir eylemi belirtmesi tercih edilir.

yordamIsmi = Javann kendisine ait olan szckler (if ,

rnein:
sayiSirala() enBuyukSayiBul() sqlCalistir()

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

40

Yordamlar (Methods) - 4

parametre listesi= Yordam ierisinde ilemler


yapabilmek iin gerekli olan parametreler. Bu parametreler temel tipte veya snf tipinde olabilirler.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

41

Yordamlar (Methods) - 5

Yordam gvdesi = Bu ksm kodu yazan kiinin


yaratclna bal olarak deiir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

42

Yordam (Method) rnei - 1

int boyutDondur(String kelime) { return kelime.length() ; } // yordamn sonu

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

43

Yordam (Method) rnei - 2

String elmaHesapla(int elmasayisi) { return new String("elma sayisi = " + elmasayisi*2); } // yordamn sonu

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

44

Yordam indeki Yerel Deikenlerin lk Deerlerini Almas

void hesapla(String kelime , int kdv ) { int sondeger = 0; int kelimeboyut = 0 ; int toplamboyut ; // Hatal !! toplamboyut++ ; // Hatal !! kelimeboyut = kelime.length(); sondeger = kelimeboyut + kdv ; }

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

45

lk Java Program - 1

public class Selam { public static void main(String args[]) { System.out.println("Selamlar !"); } }

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

46

lk Java Program - 2

public class Selam : Bu ksm da yeni bir snf


oluturuyor...

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

47

lk Java Program - 3

public static void main(String args[])


Javada

bir snfn tek bana almas isteniyorsa (standalone) bu yordam yazlmak zorundadr . Bu yordam snflar iin bir balag noktasdr.

static yordamlar nesneye baml olmayan yordamlardr.

Bu yordam kullanmak iin, ilgili snfa ait bir nesne oluturma zorunluluu yoktur.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

48

Diziler (Arrays)

main() yordam parametre olarak String snf tipinde dizi alr, bu String snf tipindeki dizinin ierisinde, konsoldan Java uygulamasna gnderilen parametreler bulunur .
args[0]

: konsoldan girilen 1. parametre deerini tar args[1] : konsoldan girilen 2. parametre deerini tar args[n-1] : konsoldan girilen n. parametre deerini tar

Javada diziler sfrdan balarlar. Diziler ilerleyen blmlerde youn bir ekilde incelenecektir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

49

lk Java Program - 4

System.out.println("Selamlar !")
Bu

komut satr, bilgileri konsola (ekrana) basmamz salar. Javann dokmanlarna bakarsak; System snf altnda static bir alan olan out alannn mevcut olduunu gryoruz. Bu yzden System snfn oluturmak zorunda deiliz (new System() ).
out

alan bize PrintStream nesnesi oluturur ve PrintStream nesnesinin println() methodu ile bilgileri konsola(ekrana) bastrrz.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

50

Kurulum

Kurulumlar dkmanlardan incelenebilir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

51

Dizin Yaps

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

52

Nedir bu args[]?

Ne e Yarar?

public class ParametreUygulamasi { public static void main(String[] args) { System.out.println("Girilen Parametre = "+args[0]); } }

bash#

javac ParametreUygulamasi.java ParametreUygulamasi test

bash# java

Girilen Parametre = test

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

53

Hata Durumu
public class ParametreUygulamasi { public static void main(String[] args) { System.out.println("Girilen Parametre = "+args[0]); } } bash# javac ParametreUygulamasi.java ParametreUygulamasi

bash# java

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException at ParametreUygulamasi2.main(ParametreUygulamasi.java:3)

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

54

Javadoc Yorum le Dkmantasyon Oluturmak

Dkmantasyon oluturma ykn ortadan kaldrr. Oluturulan dkmanlar HTML formatnda olur.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

55

/** Ilk Java Kodumuzun Dokumantasyonu Ekrana Selamlar diyen bir uygulama * @author Altug B. Altintas (altuga@kodcu.com) * @version 1.0 * @since 09.01.2002 */ public class SelamDoc { /**sayiyi artirmak icin , *degiskenler icin bir ornek */ public int sayac = 0 ; /** siniflarda & uygulumalarda giris * noktasi olan yordam * @param args disaradan girilen * parameterler dizisi * @return donen deger yok * @exception Hic istisna firlatilmiyor */ public static void main(String[] args) { System.out.println("Selamlar !"); } }
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 1 56

Sorular ...

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 1

57

Javada Program Denetimi ve Operatrler

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

Atamalar

int a ; a=4 ; // doru bir atama 4=a ; // yanl bir atama!

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

Temel (Primitive) Tiplerde Atama

int a=4 b=5 a=b

a, b ; ; ; ;

Sonu : a=5, b=5

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

Nesneler ve Atamalar

NesnelerdeAtama.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

Sonu

1: s1.i: 9, s2.i: 47 2: s1.i: 47, s2.i: 47 3: s1.i: 27, s2.i: 27

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

ekil

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

Dosya simleri

Fiziksel dosya ismi ile public snfn ismi ayn olmal.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

Yordam (Method) armlar

Yordamlar parametre alrlar. Alnan bu paremetreler ile yordam ierisinde ilemler gerekleir. Peki yordamlara parametre olarak ne gitmektedir ? Nesnenin kendisi mi ? Yoksa nesneye bal referans m ?

IlkelPas.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 2

Pas.java
8

java Operatrleri
Operatrler programlama dillerinin en temel ilem yapma yeteneine sahip simgesel isimlerdir. Aritmetik Operatr likisel Operatr Mantksal Operatrler Bit dzeyinde (bitwise) Operatrler

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

java Operatrleri
Operatrler bir veya daha fazla deiken zerinden ilemler gercekletirirler. lem gerekletirmek iin tek bir deikene ihtiya duyan operatrlere tekli operatr (unary operator) lem gerekletirmek iin iki deikene ihtiya duyan operatrlere ikili operatr (binary operator) lem gerekletirmek iin adet deikene ihtiya duyan operatrlere ise l operatr (ternary operator) denir (bir adet var).
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 2 10

Aritmetik Operatrler
Operatr Kullanl
deiken1 + deiken2 deiken1 deiken1 * deiken1 / deiken1 % deiken2 deiken2 deiken2 deiken2

Aklama
deiken1 ile deiken2 yi toplar deiken1 ile deiken2 yi karr deiken1 ile deiken2 yi arpar deiken1 ,deiken2 tarafndan blnr deiken1 in deiken2 tarafndan blmnden kalan hesaplanr.

+ * / %

AritmetikOrnek.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 2 11

+ ve Operatrleri
Operat r Kullanl ekli

Aklama Eer deiken char, sekizli (byte) veya short tipinde ise int tipine dntrr. Deikenin deerini negatif yapar (-1 ile arpar).

+ deiken

- deiken

OperatorTest.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 2 12

Dntrme (Casting) lemi

Bir temel (primitive) tip, dier bir temel tipe dntrlebilir, fakat oluacak deer kayplarndan kodu yazan kii sorumludur .

IlkelDonusum.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

13

String (+) Operatr

+ operatr String tiplerde birletirme grevi grr. Eer bir ifade String ile balarsa , onu takip eden tiplerde otomatik olarak String nesnesine dntrlr.

OtomatikCevirim.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

14

Uygulamann kts
Sonuc = 012 String bir ifadeden sonra gelen tamsaylar grld zere toplanmad. Direk String nesnesine evrilip ekrana kt olarak gnderildiler.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

15

Bir Arttrma ve Azaltma

Java dilinde C dilinde olduu gibi birok ksaltmalar vardr. Bu ksaltmalar hayat bazen daha gzel bazen ise ekilmez klabilir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

16

Bir Arttrma ve Azaltma Tablosu


Kullanl ekli deiken++ ++deiken deiken---deiken

Operatr ++ ++ ---

Aklama nce deikenin deerini hesaplar sonra deikenin deerini bir arttrr. nce deikenin deerini arttrr sonra deikenin deerini hesaplar. nce deikenin deerini hesaplar sonra deikenin deerini bir azaltr. nce deikenin deerini azaltr sonra deikenin deerini hesaplar.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

17

Uygulama

OtomatikArtveAz.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

18

Uygulamann kts

i ++i i++ i --i i-i


Altu B. Altnta 2003

: : : : : : :

1 2 2 3 2 2 1
19

Java ve Yazlm Tasarm - Blm 2

likisel Operatrler

likisel operatrler iki deeri karlatrarak bu deerler arasndaki mantksal ilikiyi hesaplarlar. rnein iki deer birbirine eit deilse 5==8

Bu iliki erevesinde hesaplanan deer false olacaktr.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

20

likisel Operatrler Tablosu


Operatr
> >= < <= == !=
Altu B. Altnta 2003

Kullanl
deiken1 > deiken2 deiken1 >= deiken2 deiken1 < deiken2 deiken1 <= deiken2 deiken1 == deiken2 deiken1 != deiken2
Java ve Yazlm Tasarm - Blm 2

true deeri dner eer ki...


deiken1 , deiken2'den bykse deiken1 , deiken2'den bykse veya eitse deiken1 , deiken2'den kkse deiken1 , deiken2'den kkse veya eitse deiken1 , deiken2'ye eitse deiken1 , deiken2'ye eit deilse
21

Uygulama

IliskiselDeneme.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

22

Nesnelerin Karlatrlmas

Nesnelerin eit olup olmad (= =) veya (! =) operatrleri ile test edilebilir mi ?

Denklik.java (*)

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

23

Uygulamann kts

false true

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

24

Uygulama

Peki bir nceki rnei Integer nesneleri yerine temel tip olan int tipini kullansaydk sonu nasl olurdu?

IntIcinDenklik.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

25

Mantksal Operatrler

Mantksal operatrler birden ok karlatrma ileminin birletirip tek bir koul ifadesi haline getirilmesi iin kullanlr.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

26

Mantksal Operatrler Tablosu


Operatr
&&

Kullanl ekli
deiken1 && deiken2

true deeri dner eer ki........


Eer hem deiken1 hemde deiken2 true ise ; (deiken2'yi duruma gre hesaplar*) deiken1'in veya deiken2'in true olmas ;( deiken2'yi duruma gre hesaplar*) Eer deiken false ise Eer hem deiken1 hemde deiken2 true ise ; deiken1'in veya deiken2'in true olmas ;
Eer deiken1 ve deiken2 birbirlerinden farkl ise; r: deiken1 true ,deiken2 false ise*
27

||

deiken1 || deiken2

! & | ^

! deiken deiken1 & deiken2 deiken1 | deiken2 deiken1 ^ deiken2

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

Uygulama

KosulOp.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

28

Uygulamann kts

(a < (a < ! (a (a < (a < (a <

b) && (c < d) --> false b) || (c < d) --> true < b) --> false b) & (c < d) --> false b) | (c < d) --> true b) ^ (c < d) --> true

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

29

Ksa Yollar

i = i + 1 ; yerine. i += 1 ; kullanlabilir. i = i * 1 ; yerine i *= 1 ; kullanlabilir. ......


Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 2 30

Kontrol fadeleri

Kontrol ifadeleri bir uygulamann hangi durumlarda ne yapmas gerektiini belirtir. Java programlama dilinde toplam 4 adet kontrol ifade eidi bulunur.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

31

Kontrol fadeleri Tablosu

fade Tipi
Dng Karar verme Dallandrma stisna yakalama

Anahtar Kelime
while, do-while , for if-else, switch-case break, continue, label, return try-catch-finally, throw
Java ve Yazlm Tasarm - Blm 2 32

Altu B. Altnta 2003

Dng - while
while ifadesi, almas istenen kod blounu, durum true ifadesini bulana kadar devaml olarak altrr.

while (koul) { ... almas istenen kod blou }

Dngye Giri

lem N
koul

lem 1
Dngden k

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

33

Uygulama

WhileOrnek.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

34

Uygulamann kts

i = 0 i = 1 i = 2 i = 3 i = 4 i = 5 i = 6 i = 7 i = 8 i = 9 Sayma islemi tamamlandi.


Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 2 35

Dngleme do while
do-while ifadesi, koulu en yukarda deil de en aada hesaplar. Bylece do-while ifadesinde durum false olsa bile almas istenen kod blouna en az bir kere girilir.
D ngye G ir i

le m

WhileDoOrnek.java

le m N

koul

D ngden k

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

36

while

Dngs Kullanrken Dikkat Edilmesi Gereken Hususlar

1. 2. 3.

Dng kontrol deikenine uygun bir ekilde deer atandna dikkat edilmeli. Dng durumunun true ile balamsna dikkat edilmeli. Dng kontrol deikeninin uygun bir ekilde gncellendiinden emin olunmas gerekir (sonsuz dngye girmemesi iin) .

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

37

Dngleme for ifadesi


Dngnn ne zaman balayaca ve ne zaman bitecei en bata belirtilmitir.
Dngye Giri

for (balang; koul; art) { almas istenen kod blou }

balang

artm

lem N
koul

lem 1

Dngden k

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

38

Uygulama

ForOrnek.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

39

for le Sonsuz Dng

for ( ; ; ) { ... }

// sonsuz dng

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

40

Uygulamann kts

i i i i i i i i i i

= = = = = = = = = =

0 1 2 3 4 5 6 7 8 9

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

41

for - oklu Deiken


public class ForOrnekVersiyon2 { public static void main(String args[]) { for ( int i = 0 , j = 0 ; i < 20 ; i++ , j++ ) { i *= j ; System.out.println("i = " + i + " j = " + j); } } }

i i i i i
Altu B. Altnta 2003

= = = = =

0 1 4 15 64

j j j j j

= = = = =

0 1 2 3 4
42

Java ve Yazlm Tasarm - Blm 2

Karar Verme - if

if (koul) { durum true olduunda almas istenen kod blou } else { durum false olduunda almas istenen kod blou }

Hayr

koul ?

Evet

lem 1

lem 2

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

43

Uygulama

IfElseTest.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

44

l if-else

boolean-ifade ? deger0 : deger1


Eer boolean ifade true ise deer0 hesaplanr , eer boolean ifade false ise deger1 hesaplanr.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

45

Ksa Devre
if ifadesinde eer VE(&&) ilemi kullanlm ise ve ilk deerden false dnm ise ikinci deer kesinlikle hesaplanmaz nk bu iki deerin sonucunun VE(And) ilemine gre true dnmesi imkanszdr. Ksa devre zellii sayesinde uygulamalar gereksiz hesaplamalardan kurtulmu olur.

KisaDevre.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

46

Karar Verme - switch

switch(tamsay) { case uygun-tamsay-deger1 : almas istenen case uygun-tamsay-deger2 : almas istenen case uygun-tamsay-deger3 : almas istenen case uygun-tamsay-deger4 : almas istenen case uygun-tamsay-deger5 : almas istenen // ... default: almas istenen kod blou ; }

kod kod kod kod kod

blou; blou; blou; blou; blou;

break; break; break; break; break;

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

47

Uygulama 1
public class AylarSwitchTest { public static void main(String[] args) { int ay = 8; switch (ay) { case 1: System.out.println("Ocak"); break; case 2: System.out.println("Subat"); break; case 3: System.out.println("Mart"); break; case 4: System.out.println("Nisan"); break; case 5: System.out.println("Mayis"); break; case 6: System.out.println("Haziran"); break; case 7: System.out.println("Temmuz"); break; case 8: System.out.println("Agustos"); break; case 9: System.out.println("Eylul"); break; case 10: System.out.println("Ekim"); break; case 11: System.out.println("Kasim"); break; case 12: System.out.println("Aralik"); break; } } }
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 2 48

Uygulama 2
public class AylarSwitchTestNoBreak { public static void main(String[] args) { int ay = 8; switch (ay) case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: } } }
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 2 49

{ System.out.println("Ocak"); System.out.println("Subat"); System.out.println("Mart"); System.out.println("Nisan"); System.out.println("Mayis"); System.out.println("Haziran"); System.out.println("Temmuz"); System.out.println("Agustos"); System.out.println("Eylul"); System.out.println("Ekim"); System.out.println("Kasim"); System.out.println("Aralik");

Uygulama 2 - Ekran kts

Agustos Eylul Ekim Kasim Aralik

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

50

Uygulama 3
public class AylarSwitchDefaultTest { public static void main(String[] args) { int ay = 25; switch (ay) { case 1: System.out.println("Ocak"); break; case 2: System.out.println("Subat"); break; case 3: System.out.println("Mart"); break; case 4: System.out.println("Nisan"); break; case 5: System.out.println("Mayis"); break; case 6: System.out.println("Haziran"); break; case 7: System.out.println("Temmuz"); break; case 8: System.out.println("Agustos"); break; case 9: System.out.println("Eylul"); break; case 10: System.out.println("Ekim"); break; case 11: System.out.println("Kasim"); break; case 12: System.out.println("Aralik"); break; default: System.out.println("Heyoo,Aranilan Kosul" + "Bulunamadi!!"); } } }
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 2 51

Dallandrma fadeleri

Java programlama dilinde dallandrma ifadeleri toplam 3 adettir.

break ifadesi continue ifadesi return ifadesi

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

52

break fadesi - Etiketsiz

BreakTest.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

53

Uygulama kts
i i i i i i i i i =0 =1 =2 =3 =4 =5 =6 =7 =8 Donguden cikti

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

54

break fadesi - Etiketli

BreakTestEtiketli.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

55

Uygulama kts i i i i i i i i i =0 =1 =2 =3 =4 =5 =6 =7 =8

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

56

continue fadesi - Etiketsiz

ContinueTest.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

57

Uygulama kts
i i i i i i i i i i i i i i i i i i i i i i i i i i i i i =0 =1 =2 =3 =4 =5 =6 =7 =8 9 yok =10 =11 =12 =13 =14 =15 =16 =17 =18 =19 =20 =21 =22 =23 =24 =25 =26 =27 =28 =29 Donguden cikti

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

58

continue fadesi - Etiketli

ContinueTestEtiketli.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

59

Uygulama kts
i i i i i i i i i i i i i i i i i i
Altu B. Altnta 2003

=0 =1 =2 =0 =1 =2 =0 =1 =2 =0 =1 =2 =0 =1 =2 =0 =1 =2
60

Java ve Yazlm Tasarm - Blm 2

return fadesi - Etiketli

Sadece return anahtar kelimesi kullanarak yordamlarn ierisini tavizsiz bir ekilde terk edelebilir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

61

Sorular ...

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 2

62

Balang Durumuna Getirme ve Temizlik

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

Hatalarn sebepleri...

Nesnelerin yanl biimde balang durumlarna getirilmesi


Uygulamay yazan kii bilmedii ktphaneye ait nesneleri yanl ekilde balang durumuna getirmesi nedeniyle hatalarla karlaabilir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

Hatalarn sebepleri

Temizlik ileminin doru bir ekilde yaplmamas


Oluturulmu ve kullanlmayan nesnelerin, sistem kaynaklarnda gereksiz yere var olmas ile bellek problemleri ortaya kabilir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

Balang durumuna getirme ilemi ve yaplandrclar

Bir nesnenin balang durumuna getirilme ilemi (initialization), bir sanatnn sahneye kmadan evvelki yapt son hazrlk gibi dnlebilir.

Oluturulacak olan nesne kullanma sunulmadan evvel baz bilgilere ihtiya duyabilir veya baz ilemleri gerekletirmesi gerekebilir (JDBC, konfigurasyon dosyas yklenmesi gibi).

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

Yaplandrclar (Constructor)

Yaplandrclar ierisinde nesne oluturulmadan nceki son hazrlklar yaplr. Yaplandrclar normal yordamlardan (method) farkldrlar. Yaplandrclar, Java tarafndan otomatik olarak arlrlar. Karmza kan iki problem Java Yaplandrcnn ismini nasl bilecektir ? Yaplandrcnn ismi baka yordamlarn isimleriyle akmamaldr.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

Problemin zm

Bu problemlere ilk zm C++ dilinde bulunmutur. Yaplandrcnn ismi ile snf ismi bire bir ayn olmaldr. Bylece Java, yaplandrcnn ismini nceden tahmin edebilecektir. sim karkl minimuma indirgenmi olur.

YapilandirciBasitOrnek.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 3 6

Yaplandrclar (Constructor) - 2

Yaplandrclara parametreler aktarlabilir. Yaplandrc ierisinden herhangi bir ekilde return ifadesi ile deer dndrlemez. (return 5, return true gibi) Yaplandrclardan kmak istiyorsak sadece return yazlmas yeterlidir...

YapilandirciBasitOrnekVersiyon2.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 3 7

Ada Yordamlar (Overloaded Methods)

yi bir uygulama yazmak her zaman iyi bir takm almas gerektirir. Uygulamalardaki yordam (method) isimlerinin, yordam ierisinde yaplan i ile uyum gstermesi nemlidir. Bu sayade bir baka kii sadece yordam ismine bakarak, ierisinde oluan olaylar anlayabilme ansna sahiptir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

rnek - 1

Elimizde bulunan muzik resim text formatndaki dosyalar amak iin yordamlar yazmak istersek, bu yordamlarn isimlerinin ne olmas gerekir ?

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

rnek - 1 (devam)

Yordam isimleri olarak muzik dosyas iin muzikDosyasiAc() resim dosyas iin resimDosyasAc() text dosyas iin textDosyasAc()

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

10

rnek - 1 (devam)

Sonuta ilem sadece dosya amaktr, dosyann tr sadece bir ayrntdr.

MetodOverloadingDemo1.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

11

Ada yordamlar nasl ayrt edilir ?

Java ayn isimde olan yordamlar (overloaded methods) nasl ayrt edebilmektedir ? Her yordamn kendisine zel/tek parametresi veya parametre listesi olmak zorundadr.

MetodOverloadingDemo2.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

12

Ada yordamlar dn deerlerine gre ayrt edilebilir mi ?

Akllara yle bir soru gelebilir : "Ada yordamlar dn tiplerine gre ayrt edilebilir mi ? " void toplamaYap(); double toplamaYap(); double y = toplamayap() ; toplamayap() ;
Altu B. Altnta 2003

// sorun var
Java ve Yazlm Tasarm - Blm 3 13

Varsaylan yaplandrclar (Default constructors)

Eer uygulamamza herhangi bir yaplandrc koymazsak Java bu ilemi kendi otomatik olarak yapmaktadr.

Varsaylan yaplandrclar (parametresiz yaplandrclar, default constructor veya "no-args" constructor) ii bo bir yordam olarak dnlebilir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

14

rnek - 2

class Kedi { int i; } public class VarsayilanYapilandirici { public static void main(String[] args) { //Varsaylan yaplandrc arld Kedi kd = new Kedi(); } }

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

15

rnek - 2 (devam)
class Kedi { int i; /* varsaylan yplandrc. Bu yaplandrcy eer biz koymasaydk Java bizim yerimize zaten koyard */ public Kedi() {} } public class VarsayilanYapilandirici { public static void main(String[] args) { // varsaylan yplandrc Kedi kd = new Kedi(); } }

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

16

Bynn Bozulmas

Eer kendimiz yaplandrc yazarsak, Java bizden varsylan yaplandrc desteini ekecektir. Kendimize ait zel yaplandrclar tanmlarsak Javaya "Ben ne yaptm biliyorum, ltfen karma" demi oluruz.

VarsayilanYapilandiriciVersiyon2.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

17

this anahtar kelimesi

this anahtar kelimesi, iinde bulunulan nesneye ait bir referans dner. Bu referans sayesinde nesnelere ait global alanlara erime frsat buluruz.

TarihHesaplama.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

18

Yordam carmlarnda this kullanm - 2

Yumurta.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

19

Bir yaplandrcdan dierini armak

Yaplandrc ierisinden dier bir yaplandrcy arrken this ifadesi her zaman ilk satrda yazlmaldr. Her zaman yaplandrclar ierisinden this ifadesi ile baka bir yaplandrc arlr. Yaplandrclar iersinde birden fazla this ifadesi ile baka yaplandrc arlamaz.

Tost.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 3 20

Ekran kts

Tost(int sayi ,String malzeme) Tost(int sayi) parametresiz yapilandirici Tost sayisi =5 malzeme =Sucuklu

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

21

Statik Alanlar (Snf Alanlar)

Sadece global olan alanlara statik zelliini verebiliriz. Yerel deikenlerin statik olma zellikleri yoktur. Statik alanlar, bir snfa ait olan tm nesneler iin ayn bellek alannda bulunurlar.

StatikDegisken.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 3 22

Ku bak grnt

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

23

Statik Yordamlar (methods) Statik yordamlar (snf yordamlar), nesnelerden bamsz yordamlardr. Statik bir yordam armak iin herhangi bir snfa ait nesne oluturma zorunluluu yoktur. Statik olmayan yordamlardan (nesneye ait yordamlar), statik yordamlar rahatlkla arlabilmesine karn statik yordamlardan nesne yordamlarn dorudan aramayz.

StatikTest.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 3 24

Bir yordamn statik mi yoksa nesne yordam m olacana neye gre karar vereceiz?

Nesnelerin durumlar (state), uygulamann gidiine gre deiebilir.

MutluAdam.java (*)

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

25

Statik yordamlar

Statik yordamlarlar atomik iler iin kullanlrlar. Uygulamalarnzda ok fazla statik yordam kullanyorsanz, tasarmnz batan bir kez daha gzden geirmeniz tavsiye olunur.

Toplama.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

26

Temizlik lemleri: finalize() ve p toplayc (Garbage Collector) Java dilinde, C++ dilinde olduu gibi oluturulan nesnelerimizi ileri bitince yok etme zgrl kodu yazan kiinin elinde deildir. ildir Bir nesnenin gerekten p olup olmadna karar veren mekanizma p toplaycsdr (garbage collector).

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

27

finalize() yordam Akllarda tutulmas gereken dier bir konu ise eer uygulamanz ok fazla sayda p nesnesi (kullanlmayan nesne) retmiyorsa, p toplaycs (garbage collector) devreye girmeyebilir. Bir baka nemli nokta; System.gc() ile p toplaycsn tetiklemezsek , p toplaycsnn ne zaman devreye girip p haline dnm olan nesneleri bellekten temizlenecei bilinemez.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

28

System.gc()

Temizle.java Temizle2.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

29

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

30

p toplaycs (Garbage Collector) nasl alr?

p toplaycsnn temel grevi, kullanlmayan nesneleri bularak bunlar bellekten silmektir. Sun Microsystems tarafndan tantlan Java HotSpot VM (Virtual Machine) sayesinde heap blgesindeki nesneler nesillerine gre ayrlmaktadr. Eski Nesil Yeni Nesil

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

31

p toplaycs (Garbage Collector) nasl alr?

Nesnelerin bellekten silinmesi grevi kodu yazan kiiye ait deildir. Bu grev p toplaycsna aittir. Java 1.3.1 ve daha sonraki Java versiyonlar iki noktay garanti eder;
Kullanlmayan nesnelerin kesinlikle bellekten silinmesi. Nesne bellek alannn paralanmasn engellemek ve bellein sktrlmas.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

32

p toplama teknikleri

Eski yntem
Referans Sayma Yntemi

Yeni Yntemler
Kopyalama yntemi (Copy) aretle ve spr yntemi (Mark and Sweep) Artan (sra) yntem (Incremental)

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

33

Heap Blgesine Bak

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

34

Heap blgesinin boyutlar nasl kontrol edilir.

Heap blgesine minimum veya maksimum deerleri vermek iin -Xms veya -Xmx parametlerini kullanrz.

java -Xms32mb Temizle

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

35

Kopyalama ynteminin gsterimi

Birazdan gsterilecek olan eklimizde, canl nesneler krmz renk ile ifade edilmitir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

36

Aama 1

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

37

Aama 2

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

38

Aama 3

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

39

aretle ve spr ynteminin gsterimi

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

40

Kopyala yntemin ve iaretle ve spr yntemi

HeapGosterim.java

java -verbosegc HeapGosterim

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

41

Uygulamann kts

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

42

Alanlara ilk deerleri atama

Java uygulamalarnda tr deiken eiti bulunur: Yerel (local) deikenler. Nesneye ait global alanlar. Snfa ait global alanlar (statik alanlar).

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

43

rnek - 3

DegiskenGosterim.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

44

Yerel Deikenler

public int hesapla () { // yerel deikenlere ilk deerleri her zaman


//verilmelidir.

int i ; i++; // ! Hata ! ilk deger verilmeden zerinde ilem yaplamaz return i ;
}

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

45

Nesneye ait global alanlar ilkel tipler

IlkelTipler.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

46

Nesneye ait global alanlar - snf tipleri

NesneTipleri.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

47

Snflara ait global deikenler - ilkel tipler

nemli Nokta: Statik olan alanlara sadece bir kere deer atanr.

IlkelTiplerStatik.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

48

Snflara ait global deikenler snf tipleri

StatikNesneTipleri.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

49

lk deerleri atarken yordam kullanm

KarisikTipler.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

50

lk deer verme sralamas

Nesneye ait global alanlara ilk deer hemen verilir, hatta yaplandrcdan bile nce... Alanlarn konumu hangi srada ise ilk deer verme sralamas da ayn srada olur.

Defter.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

51

Statik ve statik olmayan alanlarn deer alma sralamas

Statik alanlar snflara ait olan alanlardr ve statik olmayan (nesneye ait alanlar) alanlara gre ilk deerlerini daha nce alrlar.

Kahvalti.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

52

Statik alanlara toplu deer atama

Statik alanlarmza toplu olarak deer atama.

StatikTopluDegerAtama.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

53

Statik olmayan alanlara toplu deer atama

NonStatikTopluDegerAtama.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

54

Diziler (Arrays)

Diziler nesnedir. Dizi nesnesi, iinde belli sayda eleman bulundurur. Dizi ierisindeki ilk elemann konumu 0 'dan balar, son elemann yeri ise n-1 'dir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

55

Dizi tipindeki deikenler

double[] dd double dd[] float [] fd Object[] ao

; ; ; ;

// // // //

double tipindeki dizi double tipindeki dizi float tipindeki dizi Object tipindeki dizi

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

56

Dizileri oluturmak

double[] d double dd[] float [] fd Object[] ao String[] s

= new double[20] ; = new double[20]; = new float [14]; = new Object[17]; = new String[25] ;

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

57

Dizilerin tekrardan boyutlandrlmas

int liste[] = new int[5] ;


// yeni bir dizi nesnesine baland

liste = new int[15] ;

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

58

Dizi ierisindeki elemalara ulam

DiziElemanlariGosterimBir.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

59

Diziler ierisinde elemanlarn sralanmas

DiziSiralama.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

60

Dizilerin dizilere kopyalanmas

DizilerinKopyalanmasi.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

61

ok Boyutlu Diziler

Dizi ierisinde dizi tanmlanabilir.

int[][] t1 = { { 1, 2, 3, }, { 4, 5, 6, }, };

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

62

ok boyutlu dizileri oluturmann dier bir yolu

int [][] t1 = new int [3][4] ; int [][] t1 = new int [][4] ; //!Hata!

CokBoyutluDizilerOrnekBir.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

63

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

64

Deiik boyuta sahip diziler

CokBoyutluDiziler.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

65

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

66

Sorular ...

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 3

67

Paket Eriimleri

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 4

Eriim

Eriim konusunda iki taraf vardr:


Ktphaneyi kullanan kiiler (client) Ktphaneyi yazan kiiler

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 4

Paket (package)

Paketler ktphaneyi oluturan elemanlardr.


PaketKullanim.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 4

Varsaylan Paket (Default Package)

Test1.java Test3.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 4

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 4

Paket Oluturma

Alan Ad Sistemi (Domain Name System)


tr/edu/kou/util/Test1.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 4

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 4

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 4

CLASSPATH Ayarlar

C:\kodlar\bolum4\tr\edu\kou\math\

import tr.edu.kou.math.*; CLASSPATH="C:\kodlar\bolum4\;."


Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 4 9

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 4

10

rnek

tr/edu/kou/math/DortIslem.java

Aadaki rnek iletim sisteminin herhangi bir yerine yerletirilebilir.


Hesaplama.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 4

11

nemli nokta

Varsaylan paketlerin birbirini grmesi iin:

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 4

12

akma

tr/edu/kou/util/ArrayList.java
Cakisma.java

akmay nlemek iin


Cakisma2.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 4 13

Paket ierisindeki uygulamalar altrmak

tr/edu/kou/math/Hesaplama.java

altrma lemleri
java Hesaplama java tr.edu.kou.math.Hesaplama

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 4

14

JAR Dosyalar (The JavaTM Archive File)

Gvenlik Sktrma ndirme (download) zamann azaltmas Paket mhrleme(versiyon 1.2)


Versiyon uyumluluu asndan

Paket versiyonlanma (versiyon1.2)


Versiyon bilgilerinin gsterimi

Tanabilirlik
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 4 15

Aklama
JAR dosyas oluturmak iin JAR dosyasnn ieriini bakmak iin JAR dosyasnn ieliini toptan dar kartmak iin

Komut
jar -cf jar-dosya-ismi ieriyeatlacak-dosya(lar) jar -tf jar-dosya-ismi jar -xf jar-dosya-ismi

Belli bir dosyay JAR dosyasndan dar kartmak iin

jar -xf jar-dosya-ismi arivlenmi dosya(lar) jre -cp jar-dosya-ismi MainClass


16

JAR olarak paketlenmi uygulay altrmak iin


Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 4

jar -cf kou.jar tr/

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 4

17

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 4

18

CLASSPATH AYARLARI

CLASSPATH="C:\kodlar\bolum4\;."
Yukardaki ifade yerine artk aadaki ifadeyi kullanabiliriz.

CLASSPATH="C:\muzik\kou.jar;."

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 4

19

Eriim Belirleyiciler

friendly public protected private

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 4

20

Eriim Belirleyiciler

Eriim belirleyiciler tm global alanlar ve yordamlar iin kullanlabilir. Global Alanlar


Statik veya deil

Yordamlar (methods)
Statik veya deil
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 4 21

Friendly

Ayn paket ierisinde eriilebilmeyi salar.


Snflar Global alanlar Yordamlar (methods)

friendly eriim belirleyicisine sahip olabilirler.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 4

22

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 4

23

rnek

tr/edu/kou/gerekli/Robot.java tr/edu/kou/gerekli/Profesor.java

Baka bir paket


tr/edu/kou/util/Asistan.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 4 24

Varsaylan Paketlerde (Default Package ) Eriim

class AltKomsu { public static void main(String[] args) { UstKomsu uk = new UstKomsu(); uk.merhaba(); } } class UstKomsu { void merhaba() { System.out.println("Merhaba"); } }
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 4 25

public

Heryerden eriilebilmeyi salar.


Snflar Global alanlar Yordamlar (methods)

public eriim belirleyicisine sahip olabilirler tr/edu/kou/util/Makine.java


Makine snfn kullanan UstaBasi.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 4

26

private (zel)

private eriim belirleyicisine sahip olan


Global deikenler Yordamlar (methods)

dardan eriilemezler.

Snflar private olamazlar...

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 4

27

private -2

Ayn paket iersindeki iki snf tr/edu/kou/gerekli/Kahve.java tr/edu/kou/gerekli/Musteri.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 4

28

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 4

29

protected

protected eriim belirleyicisine sahip olan


Global alanlar Yordamlar (methods)

Eriim ancak bu snftan treyen snflar ve ayn paket ierisindeki snflar tarafndan eriilebilir.

Snflar protected olamaz.


Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 4 30

Kaltm (Inheritance)

class Kedi extends Hayvan { ...... .... }

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 4

31

rnek

tr/edu/kou/util/Hayvan.java tr/edu/kou/gerekli/Kedi.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 4

32

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 4

33

Sorular ...

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 4

34

Snflarn Tekrardan Kullanlmas

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

ki Yntem

Komposizyon (Composition) Kaltm (Inheritance)

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

Komposizyon(Composition)

class Meyva { //... }


class Elma { private Meyva m = new Meyva(); //... }

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

Komposizyon - UML

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

rnek

Motor.java AileArabasi.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

ekil

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

Ku Bak

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

rnek

Voltran.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

Kaltm (Inheritance)

class Kedi { //.. } class Kaplan extends Kedi { //.. }

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

10

Kaltm - UML

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

11

rnek

KediKaplan.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

12

Gizli Kaltm

YeniBirSinif.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

13

Gizli Nokta

public class YeniBirSinif extends Object {

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

14

Nesne yordamlar (methods)


clone() : Bu nesnenin aynsn klonlar. equals(Object obj) : obj nesnesi , bu nesneye eit mi kontrol yapar. finalize() : lgili nesne bellekten silinmeden hemen nce arlan yordam. getClass() : Bu nesnenin alma annda snf bilgilerini geri dner . hashCode() : Bu nesnenin hash kodunu geri dner . notify() : Bu nesnenin bekleme havuzunda olan tek i paracn (thread) uyandrr. (ilerleyen blmlerde inceleyeceiz) notifyAll() : Bu nesnenin bekleme havuzundaki tm i paracklarn uyandrr. (ilerleyen blmlerde inceliyeceiz) toString() : Bu nesnenin String tipinden ifadesini geri dner . wait() : O andaki i paracnn (thread) beklemesini salar; bu bekleme notify() veya notifyAll() yordamlar sayesinde sona erer. wait (long timeout) : O andaki i paracnn belirtilen sre kadar beklemesini salar; bu bekleme notify()veya notifyAll() yordamlar sayesinde de sona erebilir. wait (long timeout , int nanos) : O andaki i paracnn belirtilen gerek sre kadar beklemesini salar ; bu bekleme notify() veya notifyAll() yordamlar sayesinde de sona erebilir.
Java ve Yazlm Tasarm - Blm 5 15

Altu B. Altnta 2003

Kaltm-UML

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

16

Kaltm ve ilk deer alma sras

IlkDegerVermeSirasi.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

17

Kaltm-UML

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

18

Paremetre alan yaplandrclar ve kaltm

IlkDegerVermeSirasiParametreli.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

19

IlkDegerVermeSirasiParametreli.java-hatal
class Insan { public Insan(int par) { System.out.println("Insan Yapilandiricisi " + par); } } class ZekiInsan extends Insan { public ZekiInsan(int par) { System.out.println("ZekiInsan Yapilandiricisi " + par); super(par+1); // ! hatal ! } } class Hacker extends ZekiInsan{ public Hacker(int par) { System.out.println("Hacker Yapilandiricisi " + par); super(par+1); // ! hatal ! } public static void main(String args[]) { Hacker hck = new Hacker(5); } }
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 5 20

Kompozisyon mu ? Kaltm m ?

Hangi yntemi ne zaman tercih etmeliyiz ?


Kompozisyon(Composition) Kaltm (Inheritance)

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

21

Komposizyon

Araba.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

22

Kaltm

Snflar arasnda bir ilikisi olmaldr.


UanYarasa bir Yarasadr. Yarasa bir Hayvandr . O zaman UanYarasa da bir Hayvandr. Hayvan da bir Nesnedir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

23

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

24

ptal etmek (Overriding)

Tremi snflarn, ana snflar ierisindeki yordamlar (methods) iptal edilebilir.


KitapEvi.java (dz) KitapEvi2.java (iptal eden)

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

25

Eriim Belirleyiciler ve ptal etme (Override)

public protected friendly private


Telefonlar.java (Yanl) Hesap.java (Doru)

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

26

ptal etmek(Overriding) ve ada yordamlarn(Overload) birbirlerine kartrlmas

Bu iki kavram birbirlerine kolaylkla kartrlabilir. CalisanMudur.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

27

Yukar evirim (Upcasting)

Spor.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

28

Yukar evirim (Upcasting)-UML

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

29

Final Kavram

Final kelimesinin szlk anlam "son" demektir . Java programlama dilinde final anahtar kelimesi deitirilemezlii simgeler.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

30

Global Alanlar ve Final Kavram

Derleme annda deerlerini bilebildiimiz final global alanlar. alma annda deerlerini bilebildiimiz final global alanlar.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

31

rnek

FinalOrnek.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

32

Final parametreler

FinalParametre.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

33

Bo (Blank) Final

BosFinal.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

34

Final Yordamlar

final yordamlar tretilmi snflar tarafndan iptal edilemezler (override).


FinalMetod.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

35

private ve final

final ve private eriim belirleyicisine sahip olan bir yordam, baka bir yordam tarafndan iptal ediliyormu gibi gzkebilir.
SivilPolis.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

36

Final Snflar

final snflardan tretilme yaplamaz!


Tv.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

37

Kaltm (Inheritance ) ve ilk deer alma sras

Bocekcik.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

38

Sorular ...

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 5

39

Polimorfizm

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

Polimorfizm

Polimorfizm, nesneye ynelik programlamann (OOP) nemli zelliklerinden biridir. Eski Yunanca bir szck olup "bir ok ekil" anlamna gelmektedir . Polimorfizm ile kaltm konusu i iedir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

rnek

PolimorfizmOrnekBir.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

Asker

Er

Yuzbasi

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

Polimorfizm

Asker a = new Asker() ; Asker a = new Er(); Asker a = new Yuzbasi();

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

Ge balama (late binding) - I

Polimorfizm olmadan ge balama zelliinden bahsedilemez.


PolimorfizmOrnekIki.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

java

PolimorfizmIki

Kartal avYakala Hayvan avYakala Kartal avYakala java PolimorfizmIki

Timsah avYakala Timsah avYakala Hayvan avYakala java PolimorfizmIki

Timsah avYakala Hayvan avYakala Kartal avYakala


Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 6 8

Ge balama (late binding) - II

Derleme annda (compile-time) hangi nesneye ait yordamn arlacan bilinemiyorsa buna ge balama denir. Ge balamann dier isimleri
Dinamik balama (Dynamic binding) alma annda balama (Run-time binding)

Bunun tam tersi ise erken balamadr (early binding).

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

final ve Ge balama

final zelliinin kullanlmasnn iki sebebi olabilir.


tasarm . verimlilik .

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

10

Cevap

Uygulama ierisinde herhangi bir nesneye ait normal bir yordam (final olmayan) arldnda : Java, acaba doru nesnenin uygun yordam m arlyor diye bir kontrol yapar. Daha dorusu ge balamaya (late-binding) ihtiya var m kontrol yaplr.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

11

rnek

KediKaplan.java (on) KediKaplan2.java (off)

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

12

Neden Polimorfizm ?

Polimorfizm olmasayd neler olurdu ?


IsYeriNon.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

13

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

14

Neden Polimorfizm ?

IsYeriNon.java rneimizi nesneye ynelik programlama erevesinde tekrar yazarsak :

IsYeri.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

15

Nesnelerden oluan bir dizi

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

16

Geniletilebilirlik (Extensibility)

Geniletilebilirlik, mevcut kaltmsal hiyerariyi geniletmektir. Polimorfizm zellii sayesinde geniletebilirlik ok basite indirgenmi bulunmaktadr .

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

17

Snf hiyerarisi IsYeri.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

18

Snf hiyerarisi BuyukIsYeri.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

19

Geniletilebilirlik (Extensibility)-2

Polimorfizm sayesinde, mevcut hiyerarik yap ne kadar geniletilirse geniletilsin, yordam (method) arma yaps hep ayn kalr.

BuyukIsyeri.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

20

Soyut snflar ve Yordamlarlar


(Abstract Classes and Methods )

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

21

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

22

rnek

BuyukIsyeri.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

23

class Calisan { public String pozisyon = "Calisan"; public void calis() {} }

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

24

Soyut Snflar (Abstract classes)

Soyut snflarn ierisinde en az bir tane gvdesiz (soyut) yordam bulunur. Soyut snflar direk new() anahtar kelimesi ile oluturamayz.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

25

abstract void calis(); // gvdesi olmayan soyut yordam

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

26

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

27

rnek

AbIsYeri.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

28

Niye soyut snf ve yordamlara ihtiya duyarz ?

Eer bir ilem deiik verilere ihtiya duyup ayn ii yapyorsa, bu ilem soyut (abstract) snflarn ierisinde tanmlanmaldr.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

29

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

30

rnek

CizimProgrami.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

31

Yaplandrclar ierisindeki ilgin durumlar...

Spor.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

32

Ekran kts

calis() cagrilmadan evvel Futbolcu calis() 0 dikkat calis() cagrildiktan sonra Futbolcu yapilandirici Futbolcu calis() 4

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

33

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

34

rnek

Televizyon.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

35

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

36

Aaya evirim (Downcasting)

Aaya evirim tehlikelidir.


Daha genel bir tipden daha zellikli bir tipe doru evirim vardr. Yanl bir evirim yapldnda, alma anndan (run-time) istisna (exception) frlatlr.

Televizyon2.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

37

Snf tiplerinin alma anndan tanmlanmas (RTTI : Run Time Type Identification)

Televizyon3.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

38

Sorular ...

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 6

39

Arayz
(Interface)

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

Arayz (Interface)

Arayzler, soyut snflarn bir st modeli gibi dnlebilir. Arayzler tamamen birletirici bir rol oynamalar iin tasarlanmlardr.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

Arayz (Interface)

Arayzlerin ierisindeki gvdesiz (soyut) yordamlar (methods) otomatik olarak public eriim belirleyicisine sahip olurlar.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

rnek

BuyukIsYeri.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

class Mudur implements Calisan { public void calis() { // iptal etti (override) System.out.println("Mudur Calisiyor"); } }

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

Arayz(Interface) ve Soyut snflar(Abstract classes) interface Hayvan { public void avlan() ; } abstract class Kedi implements Hayvan { }

Bu rnek derlenir mi ?
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 7 7

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

rnek

Karisim2.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

Arayz(Interface) ile oklu kaltm(Multiple inheritance)

Java Programlama dili oklu kaltm (multiple inheritance) desteklemez.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

10

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

11

rnek - Hatal

Spor.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

12

Sebep

Sporcu s = new SportmenMehmet(); // yukari cevirim s.calis(); // ??

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

13

Arayz (Interface) ile oklu kaltma destek

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

14

rnek

SportmenMehmet belki hem BuzPatenci hem de Basketbolcu olamayabilir ama bunlara ait zellikleri alabilir.
Spor2.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

15

Arayzlerin kaltm (inheritance) yoluyla geniletilmesi

Bir arayz baka bir arayznden tretilebilir. Bylece arayzler kaltm yoluyla geniletilmi olur.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

16

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

17

Yakndan baklrs

interface Avlanabilme extends DahaHizliKosabilme,Kosabilme { //.. }

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

18

rnek

Jaguar.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

19

akmalar

Arayzlerin ierisinde dn tipleri haricinde hereyleri ayn olan gvdesiz (soyut) yordamlar varsa bu durum beklenmedik sorunlara yol aabilir.
Cakisma.java (derlemeye allrsa...)

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

20

public void hesapla(); // A1 arayzne ait public int hesapla(); // A3 arayzne ait

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

21

Arayzn(Interface) ierisinde alan tanmlama

Arayzlerin ierisinde gvdesiz (soyut) yordamlarn dnda alanlar da bulunabilir. Bu alanlar, dier uygulamalarda sabit olarak kullanlabilir. Arayzn ierisinde tanmlanan bir alan (ilkel tipte veya snf tipinde olsun) otomatik olarak hem public eriim belirleyicisine hem de final ve static zelliine sahip olur.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

22

rnek

AyBul.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

23

Arayzn ierisinde tanmlanm alanlara ilk deerlerinin verilmesi

Arayzlerin ierisinde tanmlanm alanlarn ilk deerleri, alma annda (runtime) da verilebilir.
Test.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

24

Genel Bak

Arayzler (interface) ve soyut (abstract) snflarn bizlere salamak istedigi fayda nedir ?

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

25

Genel Bak

Aslnda ulalmak istenen ama oklu yukar evirimdir (upcasting).


GenelBakis.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

26

Yakndan bakarsak

class A extends Soyut1 implements Arayuz1, Arayuz2 {

//...... }

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

27

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

28

Soyut1 Arayuz1 Arayuz2

soyut_1 arayuz_1 arayuz_2

= = =

new A(); (Arayuz1) soyut_1; // tip degisimi (Arayuz2) soyut_1; // tip degisimi

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

29

Veya

Soyut1 soyut_1 = new A(); Arayuz1 arayuz_1 = new A(); Arayuz2 arayuz_2 = new A();

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

30

Dahili Snflar (Inner Classes)

Dahili ye snflar Yerel snflar (Local classes) simsiz snflar (Anonymous classes)

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

31

Dahili ye Snflar

class CevreliyiciSinif { class DahiliSinif { //.... } //... }

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

32

rnek

Hesaplama.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

33

Dahili ye Snflar ve Eriim

Dahili ye snflara
public friendly protected private eriim belirleyicileri atanabilir.

Hesaplama1.java Hesaplama2Kullan.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 7 34

Tretilebilen Dahili ye Snflar

Dahili ye snflar, ayn normal snflar gibi baka snflardan tretilebilirler. Bylece oklu kaltm desteinin bir benzerini (gvenli), Java programlama dilinde de bulabiliriz.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

35

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

36

rnek

YarisArabasi.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

37

Yerel Snflar (Local Classes)

Yerel snflar
Yaplandrclarn (constructor) Snf yordamlarnn (statik yordam) Nesne yordamlarnn Statik alanlara toplu deer vermek iin kullandmz statik bloun Statik olmayan alanlara toplu deer vermek iin kullandmz bloun ierisinde tanmlanabilir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

38

Yerel Snflar

public class Sinif { public void yordam() { public class YerelSinif { //... } } }

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

39

Yerel snflara ait ilk zellikler

Yerel snflar tanmlandklar yordamn veya bloun dndan eriilemezler. Yerel snflar baka snflardan tretilebilir veya arayzlere (interface) eriebilir. Yerel snflarn yaplandrclar olabilir.

Hesaplama6.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

40

Yerel Snflara Ait lk zellikler - Devam

Yerel snflar, iinde bulunduklar yordamn sadece final olan deikenlerine ulaabilirler. Yerel snflar, statik veya statik olmayan yordamlarn ierisinde tanmlanabilirler. Yerel snflar, private, protected ve public eriim belirleyicisine sahip olamazlar sadece friendly eriim belirleyicisine sahip olabilirler. Yerel snflar, statik olarak tanmlanamaz.

Hesaplama7.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 7 41

simsiz Snflar (Anonymous Classes)

Dier dahili snf eitlerinde olduu gibi, isimsiz snflar direk extends ve implements anahtar kelimelerini kullanarak dier snflardan tretilemez ve arayzlere eriemez. simsiz snflarn herhangi bir ismi olmad iin yaplandrcs da (constructor) olamaz.

Hesaplama8.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 7 42

Yakndan bir bak

return new Toplayici() { public int hesaplamaYap() { // final olan yerel degiskenlere ulasabilir. return a + b ; } }; // noktali virgl sart

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

43

Neden Dahili snflar?

Arayzler ile oklu kaltm (multiple inheritance) desteini ksmen bulabiliyorduk ama bu tam deildi. Dahili snflarn var olmasndaki neden oklu kaltma tam destei salamaktr.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

44

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

45

rnek

TuretilmisSinif.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

46

Sorular ...

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 7

47

stisnalar (Exceptions)

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

stisna deyince aklnza ne geliyor ?

Dierlerinin yazd programda hata olabilir ama benim yazdm programda hata olmaz... - Anonim

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

Tam bir uygulama yazmak nasl olur ?

Bir uygulamann, zerine den ileri yapmas onu tam bir uygulama yapar m ?

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

Tam bir uygulama

Doruluk Salamlk

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

Doruluk- ilk art

ki sayy blmeye yarayan bir uygulama gelitirmeniz istendi. A / B = Sonu ok kolay

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

Salamlk-unutulan art

Dardan istenmeyen veriler girildii zaman uygulamanz nasl bir davran sergiliyecektir ?
5 / 0 = ? 10 / elma = ? armut / erik = ?

Uygulamanz aniden kapanacak m ? Yoksa bunlar blmeye mi kalkacak ?

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

Java ve salamlk artt

Java Programlama dili oluabilecek olan istisnalara kar nlem alnmasn ister.
Almak istenen dosya yerinde olmayabilir. A (network) balants kopmu olabilir. Okunmak istenen dosyann ii bo olabilir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

stisna nasl oluabilir ?

DiziErisim.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

stisna yakalama mekanizmas

try { // istisnaya sebebiyet verebilecek olan kod } catch(Exception1 e1) { //Eer Exception1 tipinde istisna firlatlrsa buraya } catch(Exception2 e2) { //Eer Exception2 tipinde istisna firlatlrsa buraya }

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

rnekler

DiziErisim2.java DiziErisim3.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

10

stisna fadeleri

Bir yordamn iki seenei vardr


Oluan istisnay yakalayabilir (hata yakalama mekanizmas kullanarak) Oluan istisnay bir st ksma frlatabilir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

11

rnek-1

IstisnaOrnek1.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

12

rnek-2

IstisnaOrnek2.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

13

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

14

rnek-3

IstisnaOrnek3.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

15

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

16

rnek-4

IstisnaOrnek4.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

17

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

18

rnek-5

IstisnaOrnek5.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

19

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

20

stisna tip hiyerarisi

Nasl olur da java.io.IOException istisna tipi, java.io.FileNotFoundException istisna tipini kapsayabilir ?

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

21

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

22

ana tip

Error RuntimeException Ve dier Exception tipleri (nceden tedbir alnmalar gerekir)

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

23

Error

Error istisna tipi lmcl bir hatay iarettir ve telafisi ok zordur; neredeyse imkanszdr. rnein OutOfMemoryError istisna tipi, bellekten dolay bir istisna meydana gelmi ise uygulamann buna mdahale edip dzeltmesi imkanszdr.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

24

RuntimeException

RuntimeException istisna tipleri, eer uygulama normal seyrinde giderse ortaya kmamas gereken istisna tipleridir. ArrayIndexOutOfBoundsException istisna tipi, bir dizinin olmayan elemanna eritiimiz zaman ortaya kan bir istisnadr. RuntimeException istisna tipleri, yanl kodlamadan dolay ortaya kan bir istisnadr.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

25

Ve dier Exception tipleri

Bu istisna tipleri evresel koullardan dolay meydana gelebilir. rnein eriilmeye allan dosyann yerinde olmamas (FileNotFoundException) veya a (network) balantsnn kopmas sonucu ortaya kabilecek olan istisnalardr. Bu istisnalar iin nceden tedbir alnmas arttr.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

26

Tm dier Exception istisna tiplerini yakalamak

catch (Exception ex) { // ...... }

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

27

RuntimeException istisna tipleri

DiziErisim.java uygulama rneimiz ierisinde istisna oluma riski olmasna ramen nasl oldu da Java buna kzmayarak derledi ? Peki ama IstisnaOrnek1.java uygulamasn niye derlemedi ?

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

28

RuntimeException istisna tipleri

Java Programlama Dili, RuntimeException istisna tiplerini yakalamak iin bir bask yapmaz.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

29

RuntimeException istisna tipleri nelerdir ?

AritmeticException NullPointerException NegativeArraySizeException ArrayIndexOutOfBoundsException SecurityException

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

30

AritmeticException

Bir saynn sfra blnmesiyle ortaya kabilecek olan RuntimeException istisna tipi.
int i = 16 / 0 ; // AritmeticException ! hata !

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

31

NullPointerException

Bir snf tipindeki referans, o snfa ait bir nesneye balamadan kullanmaya kalknca alnabilecek bir istisna tipi.
String ad ; System.out.println("Ad = " + ad.trim() ); // ! hata !

Bu hatay almamak iin ;


String ad = " Java Kitap Projesi "; // balama ilemi System.out.println("Ad = " + ad.trim() ); //dogru
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 8 32

NegativeArraySizeException

Bir diziyi negatif bir say vererek oluturmaya alrsak bu istisna tipi ile karlarz.
int dizi[] = new dizi[ -100 ]; //! hata !

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

33

ArrayIndexOutOfBoundsException

Bir dizinin olmayan elemanna ulamak istendii zaman karlalan istisna tipi Daha detayl bilgi iin DiziErisim.java uygulama rneini incelenebilir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

34

SecurityException

Genellikle tarayc (browser) tarafndan frlatlan bir istisna tipidir. Bu istisnaya neden olabilecek olan sebepler aadaki gibidir ;
Applet ierisinden, yerel bir dosyaya erimek istedendii zaman. Appletin indirildii sunucuya deil de deiik bir sunucuya a (network) balants kurulmaya alld zaman. Appletin kendi ierisinde baka bir uygulama balatmaya alt zaman.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

35

stisna Mesajlar

Bir istisna nesnesinden bir ok veri elde edilebilir. rnein istisna oluumunun yol haritas izlenebilir veya istisna oluana kadar hangi yordamlar arlm gibi deerli bilgiler grlebilir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

36

stisna Mesajlar

String getMessage() : Oluan istisnaya ait bilgileri String tipinde geri dner. String getLocalizedMessage(): Bu yordam, Exception snfndan tretilmi alt snflar tarafndan iptal edilebilir (override). String toString(): Oluan istisna hakknda ksa bir aklamay String tipinde geri dner.
Oluan istisna nesnesinin tipini ekrana basar ": " iki nokta st ste koyar ve bir boluk brakr. Son olarak getMassege() yordam arlr ve buradan - eer bilgi varsa ekrana baslr.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

37

rnek-1

IstisnaMetodlari.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

38

stisna Mesajlar - Java 1.4

Throwable getCause(): Bu yordamn


ie yaramas iin istisna snfna ait yaplandrcnn ierisine bu istisnaya sebebiyet vermi olan istisna tipini yerletirmek gerekmektedir.

IstisnaMetodlari2.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

39

stisna Mesajlar - Java 1.4

Throwable initCause( Throwable cause) :

ki yar istisna tipini birletirmeye yarar. Eer bir istisna Throwable(Throwable) veya Throwable(String, Throwable) ile oluturulmu ise initCause() yordam arlamaz.

IstisnaMetodlari3.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

40

stisna Mesajlar
printStackTrace() : Throwable snfnn bu yordam

sayesinde oluan bir istisnann yol haritasn grebiliriz. printStackTrace( PrintStream s ) : PrintStream snfna ait nesne kullanlarak oluan istisnann yol haritasn konsol yerine baka bir yere bastrmanz mmkndr. printStackTrace( PrintWriter s ) : PrintWriter snfna ait nesne kullanlarak, oluan istisnann yol haritasn konsol yerine baka bir yere bastrmanz mmkndr. JSP ve Servlet lerde kullanlabilir.

IstisnaMetodlari4.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 8 41

Kendi stisnalarmz Nasl Oluturabiliriz?

Javann kendi ierisinde tanmlanm istisna tiplerinin dnda bizler de kendimize zg istisna tiplerini oluturup kullanabiliriz. Sonuta istisnalar da birer nesnedir ve kendilerine has durumlar olabilir. BenimHatam.java SeninHatan.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

42

rnek

Kobay.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

43

Ekran kts ---------------------Hata Olustu-1:sonuc eksi ! onemli hata ! 2 ---------------------Hata Olustu-2:SeninHatan: b parametresi sifir geldi ---------------------Hata Olustu-2:SeninHatan

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

44

finally Blou

Bir ilemin her koulda ( istisna olsun ya da olmasn ) kesin olarak yaplmasn istiyorsak finally blou kullanmalyz. FinallyOrnek1.java FinallyOrnek2.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

45

return ve finally Blou

finally blou her zaman altrlr. rnein bir yordam hibir ey dndrmyorsa (void) ama bu yordamn ierisinde return ifadesi kullanlm ise, finally blou, bu return ifadesi devreye girmeden hemen nce altrlr. ReturnOrnek.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

46

Dikkat System.exit();

Eer System snfnn statik bir yordam olan exit() arlrsa finally blouna hi girilmez. SystemExitOrnek.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

47

stisnann Tekrardan Frlatlmas

Oluan bir istisnay catch blounda yakaladktan sonra tekrardan bir st ksma frlatmanz mmkndr.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

48

Gsterim

try { // riskli kod } catch (Exception ex){ System.out.println("istisna yakalandi: " + ex); throw ex; // dikkat }

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

49

rnek

TekrarFirlatimOrnek1.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

50

lgin Gelime

Oluan bir istisna her zaman frlatlamayabilir. FirlatimOrnek1.java FirlatimOrnek2.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

51

zm

FirlatimOrnek3.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

52

ptal Etme (Overrride) ve stisnalar

ptal etme artlar


ptal eden yordamn, iptal edilen yordam ile ayn parametrelere, Ayn isme, st snfa ait yordamn eriim belirleyicisinden daha eriilebilir veya ayn eriim belirleyicisine sahip olmas gerekir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

53

rnek

AB.java CD.java EF.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

54

stisnalarn Sralanmas

Bir istisna catch blounda veya catch bloklarnda yakalanrken, istisnalarn hiyarerik yaplarna dikkat edilmelidir. IstisnaSiralamasi.java IstisnaSiralamasi2.java IstisnaSiralamasi3.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 8 55

Sorular ...

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 8

56

JAVADA GR/IKI LEMLER

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

G/ ilemleriyle uygulamalara neler yaptrabiliriz...

Dosya ilemleri
Dosyadan okuma Dosyaya yazma

Verilerin Aktarlmas
A (network) zerinden

Nesnelerin kalc ortama yazlmas (Serialization) Rasgele eriimli dosyalar (Random access file)
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 9 2

Irmak (Stream)

Uygulama ile kaynak arasndaki yol/balant


Sekizli (byte) rmaklar Karakter rmaklar

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

Gelen sekizli(byte) rmaklar

Gelen: Kaynaktan uygulamaya doru bir ak belirtir. Sekizli (byte): Kurulan balant ierisinden sekizli(byte) tipinde verilerin akacan belirtir. Irmak:Kaynak ile uygulama arasnda kurulan balant.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

Sekizli Irmaklar (Byte Streams)

Sekizli(byte) rmaklar zerinde i yapabilmek iin tasarlanm snflar Java 1.0'dan itibaren mevcuttur.
java.io.InputStream (Gelen sekizli rmaklar) java.io.OutputStream (Giden sekizli rmaklar)

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

nemli bir nokta

java.io paketinin altndaki bir snfn ismi eer InputStream veya OutputStream ile bitiyorsa o zaman;
Bu snf, sekizli rmaklar (byte streams) zerinde ilem yapmas iin tasarlanmtr sonucu kartlabilir. FileInputStream snf BufferedOutputStream snf gibi...
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 9 6

InputStream soyut snf ve bu soyut snfdan tremi alt snflar

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

InputStream soyut snfna ait yordamlar (methods) - I


Gelen sekizli (bayt) rma ierisindeki okunabilecek olan verilerin saysn belirtir. Bu yordam alt snflar tarafndan iptal edilmelidir. Kaynak ile uygulama arasnda kurulmu olan balanty kapatr. sel dizi kullanlarak tamponlanm olan veriler ierisinde istenilen pozisyona iaret koyar. Gelen sekizli rma iin mark() ve reset() yordamlarnn alabilirliini test eden yordamdr. Eer bu yordamlar, okunan sekizli(byte) rma zerinde alabilir ise true, deilse false dner.
Java ve Yazlm Tasarm - Blm 9 8

available() close() mark( int okumalimiti )

markSupported()

Altu B. Altnta 2003

InputStream soyut snfna ait yordamlar (methods) II


Gelen sekizli rma ierisinden tek bir veriyi okuyan yordam. Bu yordamn tremi alt snflar tarafndan iptal edilmesi (override) gerekir. Gelen sekizli rma ierisinden, parametre olarak gnderilen dizi uzunluu kadar veriyi okur ve bunu ilgili dizinin sfrnc indeksinden itibaren yine o diziye yerletirir. Gelen sekizli rma ierisinden, parametre olarak gnderilen dizi uzunluu kadar veriyi okur ve bunu ilgili diziye verilen llerde (off, len) yerletirir. mark() ile aretlenen dndren yordam. pozisyona geri

read()

read( byte[] )

read( byte[] b, int off, int len ) reset() skip( int n )


Altu B. Altnta 2003

Gelen sekizli rma ierisinden n uzunluunda atlama yapar.


Java ve Yazlm Tasarm - Blm 9 9

read() yordam

InputStream snf soyut bir snftr ve bu sebepten dolay read() yordamnn kullanln grmek iin InputStream soyut snfndan tremi olan FileInputStream snf kullanlacaktr.

DosyaOkumaBir.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

10

read() yordam

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

11

read(byte[] b) ve read(byte[] b, int off, int len)


Irmak ierisindeki gelen verileri tek tek okumak yerine, bloklar (tamponlamabuffering) halinde okuyabiliriz...

DosyaOkumaIki.java DosyaOkumaUc.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

12

FilterInputStream Snf

FilterInputStream snf InputStream soyut snfndan tremitir. FilterInputStream snfnn ve bu snftan (FilterInputStream) tremi dier alt snflarn amac, kaynaktan gelen sekizli (byte) rmana ekstra zellikler katmaktr. rnein gelen rman tamponlanarak performansn artrlmas gibi.
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 9 13

BufferedInputStream Snf- I

BufferedInputStream snf, FilterInputStream snfndan tremitir. BufferedInputStream nesnesinin ierisinde isel bir dizi bulunur. sel bir diziden kast edilen, fiziksel dosya veya soket gibi bir kaynaktan okunan sekizli verileri ilk olarak bu isel dizinin ierisine yerletirilmesidir.
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 9 14

BufferedInputStream Snf - II

BufferedOrnekBir.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

15

PushbackInputStream Snf

PushbackInputStream snf, FilterInputStream snfndan tremitir. Bu snf kullanarak sekizli (byte) rma ierisinde okunmu olan bir sekizliyi (byte) tekrardan okumak mmkndr. PushbackOrnekBir.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

16

Standart Okuma

Kullanc ile uygulama arasnda etkileimi nasl salanabilir? Etkilesim.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

17

OutputStream Soyut (Abstract) Snf

u ana kadar bir kaynaktan uygulamamza verilerin nasl alnp ilendiini inceledik imdi sra uygulamadan kaynaa doru (r: dosya) veri yazdrma ilemlerinde...

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

18

OutputStream soyut (Abstract) snf ve bu soyut snfdan tremi alt snflar

Balant kurup yazma ilemleri iin tasarlanm snflar Giden sekizli (byte) rmaklarna zellik katmak iin tasarlanm snflar.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

19

OutputStream snfna ait yordamlar


close() flush() write(byte[] b)
Kaynak ile uygulama arasnda kurulmu olan balanty kapatr. Tamponlanm (buffered) olan verileri giden sekizli (byte) rmana yazdran yordam. Giden sekizli (bayt) rma ierisine belirtilen sekizli (byte) tipindeki diziyi aktarr. Giden sekizli (bayt) rma ierisine belirtilen parametrelere gre yazma yapan yordam. byte[] b: Yazlacak olan veri dizisi. int off: Yazlacak olan veri dizisinin kanc elemanndan balanmas gerektiini belirten parametre. int len: Veri dizisinden ka elemann giden sekizli rmana yazlacan belirten parametre. Belirtilen veriyi giden bayt rmana yazan yordam. Bu yordamn tremi alt snflar tarafndan iptal edilmesi gerekir.
Java ve Yazlm Tasarm - Blm 9 20

write(byte[] b, int off, int len)

write(int b)
Altu B. Altnta 2003

write(int b) yordam

Sekizli (byte) rmann yn uygulamadan kaynaa dorudur.

DosyaYazmaBir.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 9 21

write(byte[] b) ve write(byte[] b, int off, int len)

DosyaYazmaIki.java DosyaYazmaUc.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

22

FilterOutputStream snf
FilterOutputStream ve bu snftan tremi alt snflarn grevi, giden sekizli (bayt) rma yazlacak olan sekizli (byte) verilerine yeni zellikler katmaktr.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

23

BufferedOutputStream snf - I

Bu snf kullanarak, giden sekizli (bayt) rmana yazlacak olan bytelar nceden tamponlayabiliriz. BufferYazmaBir.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

24

BufferedOutputStream snf - II

Sekizli(byte) bilgileri ne zaman giden sekizli rmana yazlrlar ?

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

25

nemli Noktalar

JDK 1.1 'den nce sadece 8-bit'lik sekizli (bayt) rmaklar destekleniyordu. 16 bit'lik Unicode sistemi JDK 1.1 ile birlikte gelmitir. Oysa; sekizli (bayt) rmaklar sadece ISO88591 karakter kmesini (charset) destekler. Karakter rmaklar Unicode sistemini destekler ve Unicode sayesinde uluslararaslatrma (i18n = internationalization ) daha kolay salanr.
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 9 26

Karakter Irmaklar (Character Streams)

Karakter rmaklar zerinde ilem yapabilen snflarn en tepesinde iki soyut snf (abstract class) bulunur.
Reader Writer

java.io paketinin altnda eer bir snfn ismi Reader ile veya Writer ile bitiyorsa bu snf karakter rmaklar zerinde ilem yapmas iin tasarlanm.
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 9 27

Reader soyut snf

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

28

Gelen karakter rma

Gelen karakter rmann almn bir kez daha yaparsak:


Gelen ifadesi, kaynaktan (dosya, soket... gibi) uygulamaya doru bir hareket olduunu belirtir. Karakter ifadesi, uygulama ile kaynak arasnda kurulmu olan balantnn ierisinde temel (primitive) char tipinde verilerin akacana iarettir. Irmak ise uygulama ile kaynak arasnda kurulan balanty ifade eder.
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 9 29

Reader soyut snfna ait yordamlar.


close() mark(int okumalimiti) markSupported() read() read(char[] cbuf) read(char[] cbuf, int off, int len) ready() reset() skip(int n)
Altu B. Altnta 2003

Uygulama ile kaynak arasnda kurulmu olan balanty kapatr. sel dizi kullanlarak tamponlanm (buffered) olan veriler ierisinde istenilen pozisyona iaret koyar. Gelen karakter rma iin mark() ve reset() yordamlarnn alabilirliini test eden yordam. Gelen karakter rma ierisinden tek bir karakter (char) okuyan yordam. Gelen karakter rma ierisinden belirtilen karakter (char) dizisi kadar okuma yapan yordam. Gelen karakter rma ierisinden parametrelere gre okuma yapan yordam. belirtilen

Gelen karakter rmann okunabilecek durumda olup olmadn belirten yordam. aretlenen pozisyona geri dndren yordam. Gelen karakter rma ierisinden n baytlk veriyi atlar
Java ve Yazlm Tasarm - Blm 9 30

InputStreamReader Snf (Kpr)

Bu snfn rol kpr grevi grmektir. Bu snf, gelen sekizli (bayt) rmaklar ile gelen karakter rmaklar arasnda kpr vazifesi grr.
import java.io.*; public class ISROrnek { public static void main(String args[]) throws IOException { InputStream in = System.in; InputStreamReader unicode = new InputStreamReader( in ); //... } }

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

31

FileReader snf

FileReader snf InputStreamReader snfndan tremitir. Bu snfn rol dosyadaki verileri karakter rma eklinde uygulamaya tamaktr.

FileReaderOrnekBir.java

yazi3.txt
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 9 32

Ekran kts

-- Tek tek okuma i$lemi -encoding:Cp1254 == ISO8859-9 toplamSatirSonu:10 -- Bloklar halinde okuma i$lemi encoding:Cp1254 == ISO8859-9 toplamSatirSonu:10 -- Blok halinde belirtilen cercevede okuma i$lemi encoding:Cp1254 == ISO8859-9 toplamSatirSonu:10
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 9 33

BufferedReader Snf

BufferedReader snfn kullanmak performans ciddi bir ekilde artrmaktadr.

BufferedReaderOrnekBir.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 9 34

Writer soyut snfndan tremi dier alt snflara ait ema

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

35

Writer soyut snfna ait yordamlar


close() flush() write(char cbuf[])
Kaynak ile uygulama arasnda kurulmu olan balanty kapatr. Kapama ileminin hemen ncesinde veriler giden karakter rmana yazlr. Tamponlanm (buffered) olan verileri giden karakter rmana yazdran yordam. Giden karakter rma ierisine belirtilen karakter (char) dizisini yazar Giden karakter rma ierisine belirtilen parametrelere gre yazma yapan yordam. char[] cbuf: Yazlacak olan veri dizisi. int off: Yazlacak olan veri dizisinin kanc elemanndan balanmas gerektiini belirten parametre. int len: Veri dizisinden ka elemann giden karakter rmana yazlacan belirten parametre. Belirtilen karakteri giden karakter rman yazan yordam. String nesnesini giden karakter rmana yazan yordam. String nesnesinin belirtilen ksmlarn giden karakter rmana yazan yordam.
Java ve Yazlm Tasarm - Blm 9 36

write(char cbuf[], int off, int len)

write(int c) write(String str) write(String str, int off, int len)


Altu B. Altnta 2003

OutputStreamWriter ve FileWriter Snf

FileWriter snf, blgesel ayarlar kullanarak dosyaya yazmaktadr. FileWriterOrnek.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

37

nemli Nokta

UnicodeBulucu.java; bir String nesnesinin veya tek tek karakterlerin Unicode karlklarn bulmas iin tasarlanmtr. Unicode nedir ? UnicodeBulucu.java
Karakter Javadaki Unicode karl

\u0041 \u011F

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

38

PrintWriter Snf

Bu snf kullanarak verileri giden karakter rmana aktarmamz mmkndr. Bu snfn ierisinde sekizli (byte) tipindeki verileri giden karakter rmana aktaran bir yordam(method) yoktur. PrintWriterOrnek.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

39

BufferedWriter Snf

Bu snfn rol, karakter verilerini giden karakter rmana aktarlmalarndan evvel tamponlayarak performansn artrlmasn salamaktr. FileWriter ve BufferedWriter nesnelerini beraber kullanmak performans asndan daha iyi bir sonu verecektir.

BufferedWriterOrnek.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 9 40

Performans - I Performans blmnde 4 adet rnek uygulama incelenecektir. Bu uygulamalarn yaptklar iler hep ayn olacak, dosyalar kopyalamak... Kopyalanmas iin seilen dosya ise 361K boyutundaki bir GIF dosyas olsun...

Test1.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

41

Performans - II
Kopyalanmas iin seilen dosya yine 361K boyutundaki bir GIF dosyas olsun...

Bu yeni yaklammzda BufferedInputStream ve BufferedOutputStream snflar kullanlacaktr; bu yaklam acaba performans nasl etkileyecek?

Test2.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

42

Performans - III

Her zaman BufferedInputStream ve BufferedOutputStream snflarn kullanmak zorunda deiliz. Bunun yerine kendi oluturduumuz dizileri, tampon vazifesi grmesi iin kullanabiliriz.

Test3.java Test4.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 9 43

Performans Sonular
Test1.java uygulamasn kullanrsak, toplam boyutu 361K olan bir GIF dosyann kopyalanmas iin gereken sre 13088 ms Test2.java uygulamasn kullanrsak, toplam boyutu 361K olan bir GIF dosyann kopyalanmas iin gereken sre 121 ms Test3.java uygulamasn kullanrsak, toplam boyutu 361K olan bir GIF dosyann kopyalanmas iin gereken sre 30 ms Test4.java uygulamasn kullanrsak, toplam boyutu 361K olan bir GIF dosyann kopyalanmas iin gereken sre 20 ms

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

44

Unicode

Unicode, platformu ve programlama dili ne olursa olsun dnya zerindeki herbir karaktere ayr ayr tekil numaralar atanarak gelitirilmi bir standarttr. Java programlama dilinde kullanlan String nesnelerinin ierisindeki veriler Unicode sistemine uygun olarak tutulur.
Uluslararaslatrma = Internationalization (i18n)

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

45

ISO8859-9 Tablosu

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

46

Detayl Bak

ISO8859-9 tablosundaki "" karakteri yakndan incelenirse;

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

47

ISO8859-1 Tablosu

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

48

ISO8859-4 Tablosu

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

49

rnek

UnicodeTest.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

50

File Snf

File snf fiziksel dosyalar temsil ederler.


FileTestBir.java
import java.io.*; public class FileTestBir { public static void main(String[] args) throws IOException { File dosya = new File("Test1.txt"); } }

Soru : Bu uygulama altrlrsa Test1.txt dosyas oluur mu ?


Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 9 51

Dnm (Serialization)

Dnm bir nesnenin durum bilgisini saklanabilecek ve tanabilecek ekle dntrme ilemidir.
Dnm ilemini kullanarak nesneleri a zerinden baka bir makinaya gnderilebilir Sabit diske kayt edilebilir.

Dnm sayesinde nesnelerin mrleri, uygulamann mrne bal olmaktan kar.

DonusumTest1.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 9 52

Blmleyiciler (Tokenizer)

Blmleyiciler, kendilerine gelen karakterleri blerek paralara ayrr. Bu paralarn tipi say veya harf olabilir. StreamTokenizer snf StringTokenizer snf

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

53

StreamTokenizer snf

Bolumleyici.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

54

StringTokenizer snf

Bu snf, java.util paketinin ierisinde bulunmaktadr. Bu snfn StreamTokenizer snfndan fark ise, blmledii paralar String tipinde geri dndrmesidir. StringTokenOrnekBir.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

55

Sorular ...

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 9

56

Yeni G/ (new I/O)

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 10

YEN G/ (NEW I/O)

Yeni G/ (nio) paketi ierisindeki snflar kullanarak dosya ilemleri (okuma/yazma) ve a zerinden okuma/yazma ilemleri gerekletirebilir. Buradaki fark, dosya ilemlerinin her zaman engellemeli (blocking) ama a ilemlerinin ise opsiyonel olmasdr. Yani a ilemleri istee bal olarak engellemeli ve engellemesiz (non-blocking) olabilir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 10

Tamponlar (Buffers)

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 10

ByteBuffer Snf

Tamponun kapasitesi : Kapasite parametresinin deeri bir kere ve en bata belirtilir ve bir daha deitirilemez. Bu parametre, tamponun ka adet eleman alacan belirler. Tamponun limiti : Tampon ierisindeki okunamayacak veya yazlamayacak olan elemann indeksini belirtir. Limit, negatif veya tamponun kapasitesinden byk olamaz. Tamponun pozisyonu : Tampon ierisindeki okunabilecek veya yazlabilecek olan elemann indeksini belirtir. Pozisyon, negatif veya limit deerinden byk olamaz.
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 10

NIOTestBir.java
4

Yeni oluturulan ByteBuffer nesnesi

Kapasite = 10 Limit = 10 Pozisyon =10

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 10

ersine veri atlm ByteBuffer nesnesi

Kapasite = 10 Limit = 10 Pozisyon =7

Pozisyon deerinin 7 olmasndaki sebep, okunabilecek ve yazlabilecek olan hcrenin indeksinin 7 olmasndan kaynaklanr.

NIOTestIki.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 10 6

hasRemaining(), flip(), get() Yordamlar

hasRemaining() yordam, mevcut pozisyon ile limit arasndaki eleman saysn bildirir. flip() yordam arldnda, ByteBuffer nesnesinde tanml olan pozisyonun deeri sfra eitlenir. Limit deeri okunamayacak veya yazlamayacak olan son elemann zerine getirilir ve biraz ileride greceimiz mark() yordamnn kullanlmasyla iaretlenmi olan yer silinir. get() yordam, belirtilen eleman okur.

NIOTestUc.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 10 7

ByteBuffer nesnesinin, flip() yordam arldktan sonraki hali

Limit deeri neden 7 oldu?

Daha dorusu limit diye bir deer niye var?


Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 10 8

Relatif ve Mutlak Operasyonlar (Relative and absolute operations)

Verileri ieri yerletirme veya ierideki verileri ekme ilemleri Buffer soyut snfndan tremi her alt snf iin 2 kategori bulunur.
Relatif Operasyonlar Mutlak Operasyonlar

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 10

Relatif Operasyonlar

Relatif operasyon kullanlarak ieri atlan her veri iin mevcut pozisyon deeri bir artar. Atlan verileri ekmek iin kullanlan get() yordamn armadan evvel, pozisyon deerinin sfrlanacan dnrsek (flip() yordamn kullanarak), ieriden ekilen her eleman iin pozisyonun deeri bir artacaktr. put() yordamn kullanrken limit am oluursa BufferOverflowException istisnas oluur. get() yordamn kullanrken bir limit am oluursa da BufferUnderflowException istisnas oluur.

RelatifOrnek.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 10 10

Mutlak Operasyonlar

Mutlak operasyon kullanlarak ieri atlan verilerde veya mevcut verileri eki ilemlerinde belirli bir indeks numaras kullanlr. Mutlak operasyonlarda mevcut pozisyonun deerinde bir art olmaz.

MutlakOrnek.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 10 11

Sarmalama

lkel tipte olan bir dizi, java.nio paketi ierisindeki tampon snflarn kullanarak sarmalanabilir. Bu ilem iin wrap() yordamn kullanmamz yeterli olacaktr.

Sarmaliyici.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 10 12

Dorusal ve Dorusal Olmayan Tamponlar (Direct and non-direct buffers)

Dorusal ve dorusal olmayan tamponlar sadece ByteBuffer snfna ait olan zelliklerdir.
Dorusal ByteBuffer nesnesi oluturmak iin allocateDirect() yordamn armak yeterlidir. Dorusal olmayan ByteBuffer nesnesi oluturmak iin allocate() yordamn armak yeterlidir.

DogrusalOrnekBir.java DogrusalOlmayanOrnekBir.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 10 13

ByteOrder Snf

Bir verinin tipi sekizli (byte) tipinden bykse, bu verinin blnp sekizli tipindeki verilere dntrlerek saklanmas gerekir. rnein ilkel int tipindeki bir veri, 4 sekizlik (32 bit) verilere blnerek saklanr veya ilkel short tipindeki bir veri 2 sekizlik (16 bit) verilere dntrlerek saklanr. Verilerin bu saklanma ilemi CPU mimarilerinin gemiten gelen farkllklarndan dolay deiiklik gsterebilir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 10

14

evirim

Bir tipteki tampon nesnesini baka bir tipteki tampon nesnesine evirebiliriz. rnein ByteBuffer nesnesini, DoubleBuffer nesnesine kolaylkla evirebiliriz. CeviriciOrnek.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 10

15

Tampon Nesneler ve Diziler

Tampon nesnelerin, arka planda bildiimiz dizileri kullanmas iin dorusal olmayan (nondirect) bir ekilde oluturulmu olmalar gerekir.

DiziOrnek.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 10

16

aretleme lemleri

java.nio paketinin altndaki tampon snflarn kullanarak yaplan iaretleme ve iaretlenen yere geri dnme ilemleri gayet kolaydr.

IsaretlemeOrnek.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 10

17

Kanallar

Kanal zelliini kullanarak, uygun bir cihaz, bir dosya, a zerinden bir soket veya uygun bir uygulama ile balant kurabilirler. Java programlama diline versiyon 1.4'de katlm olan bu zellik, geen blmde incelediimiz InputStream ve OutputStream soyut snflarnn (bunlardan tremi olan alt snflarn) saladklar zelliklerin pabularn biraz da olsa dama atmaktadr. Bu blmmzde sadece FileChannel snfn inceleyeceiz.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 10

18

FileChannel Snf

Bu snf sayesinde mevcut fiziksel bir dosya ile balant kurup okuma, yazma, eleme (mapping) ve dosya ynetim ilemlerini gerekletirebiliriz.

ChannelOrnekBir.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 10 19

Sorular ...

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 10

20

Paracklar (Threads)
Bir elin nesi var iki elin sesi var -Atasz-

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 11

PARACIKLARI (THREADS)

Geen blmlerde yaplan uygulama rnekleri hep sralyd. Program balar, belli bir yolu izleyerek ilemler yapar ve biterdi.

Selam.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 11

oklu Paracklarna ne zaman ihtiya duyulur ?

Bu durumlara en iyi rnek tarayclardr (browser).


stenilen sayfann indirilmesi iin bir i parac ndirilmi olan GIF dosyalarn oynatmak iin bir i parac

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 11

Sohbet I

imdi yle bir uygulama dnelim ki:


Bu uygulama bir dosyadan okuma yapsn, Okuduu veri zerinde hesaplama yapp, Hesaplamann sonucunu baka bir dosyaya yazsn.

Burada ka ilemden bahsediyoruz?


1. 2. 3. Dosyadan okuma yapma (G/) Okunan veri zerinde hesaplama yapma (CPU alyor) Hesaplama sonucunu baka bir dosyaya yazma (G/)

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 11

Sohbet II (Tek bir i paracndan olumu uygulamann aamalar )

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 11

Sohbet III ( 1. Tasarm) Bu uygulamann gerekletirmesi gereken 3 ana ilem (okuma-hesaplama-yazma) olduunu biliyoruz. Bu ilemi tek bir i paracnda yapmaktansa, ayr i parac ierisinde yaparsak sonu nasl deiir?

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 11

Sohbet IV (2. Tasarm)

paracklar ile aadaki gibi bir tasarm da yaplabilir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 11

Paracklarnn Balatlmas

Tek bana alabilen (standalone) uygulamalarn balang yeri statik main() yordam (methods) olduunu daha evvelden belirtmitik. Uygulama almaya baladnda, ana i parac oluturulup olaylarn ak balatlr. Java programlama dili ile yazdmz uygulamalarn ierisinde oklu i paracklarn kullanmak iin java.lang.Thread snfn veya java.lang.Runnable arayzn kullanmamz gerekir. OrnekBir.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 11 8

rnekBir.java uygulamasnn almas

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 11

Haller

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 11

10

ncelik Sras

Ayn ncelik srasna sahip olan i paracklar ayn hazr durum havuzunda bulunurlar. Thread.MIN_PRIORITY Thread.NORM_PRIORITY Thread.MAX_PRIORITY = = = 1 5 10

OrnekIki.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 11

11

Paracklarnn Sonlandrlmas

Bir i paracnn sonlanmas onun lmesi anlamna gelir. Peki bir i parac nasl ldrebiliriz?
Birinci yol ilgili i paacnn stop() yordamn ararak gerekletirilebilir ama bu tavsiye edilmiyen bir yoldur. kinci yol nasl olabilir ?

OrnekUc.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 11 12

Paracklarnn Kontrol

sleep() : alan i paracnn belirli bir sre uyumasn


salar. Bu statik bir yordamdr; yani bu sleep() yordamn armak iin java.lang.Thread snfndan tremi alt bir snfn new() anahtar kelimesi ile oluturulmas gerekmez.

UykuTest.java interrupt() : Uyuyan bir i paracn uyandrmann


yolu onu rahatsz etmektir. Bu rahatszlk verme olayn interrupt() yordamn ararak baarabiliriz.

UyanmaVakti.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 11 13

sleep() yordam

Elimizde 3 adet i parac olduunu ve bu i paracnn da ayn anda balatldklarn hayal edelim...

UyurGezer.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 11

14

UyurGezer.java uygulamasnn ekran kts

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 11

15

yield() Yordam

Bir i parac altrlyor halinde iken, bu i parac ile ayn ncelik srasna sahip baka bir i paracna altrlma frsat vermek istiyorsak yield() yordamn kullanmamz gereklidir.
Normal bir ekilde altralm...

YieldOrnek.java
imdi 9. satrndaki yorum satrn aalm, derleyelim ve altralm...

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 11

16

join() Yordam

join() yordam, bir i paracnn dier bir i paracn beklemesi iin kullanlr. join() yordamnn ada yordam (overloaded) bulunur.
join() join(long milisaniye) join(long milisaniye, int nanosaniye)
Belirtilen i parac bitene (l haline gelene kadar) kadar bekletir. Belirtilen i paracn, verilen milisaniye kadar bekletir. Belirtilen i paracn, verilen milisaniye + nano saniye kadar bekletir.

JoinTest.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 11 17

Tasarm - Thread Snfndan Kaltm

Bir snfa ait nesneyi i paracna dntrmek iin iki tasarm modeli bulunmaktadr. Bunlardan ilki, u ana kadar yaptmz gibi ilgili snf java.lang.Thread snfndan tretmektir.
public class OrnekSinif extends Thread {

public void run() { // ... } }


Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 11 18

Tasarm - Thread Snfndan Kaltmn Avantajlar

Bu tasarmn avantaj daha kolay kodlama denilebilir. rnein run() yordamnn ierisinde getName() yordamn direk arabiliriz.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 11

19

Tasarm - Thread Snfndan Kaltmn Dezavantajlar

Java programlama dilinde bir snf ancak ve ancak tek bir dier snftan tretilebildii iin (single inheritance) bu model kullanlarak tasarlanan i paracklarnda belirli kstlamalar gndeme gelebilir.

Tasarm bozmak gerekli !!

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 11

20

Tasarm - Runnable Arayz Runnable arayz sayesinde bir snf i paracna dntrmek mmkndr. Runnable arayzn kullanmann dezavantajlar olarak daha uzun kodlama denilebilir.

ArayuzTest1.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 11

21

Nesnenin Kilidi

Her nesnesin kendisine ait bir kilidi bulunur. Bir snfa ait bir nesne oluturulunca bu kilit otomatik olarak oluur. Bu kilidi eline geiren i parac, kritik alan zerinde ilem yapmaya hak kazanr. Kritik alan, birden fazla i paracnn ayn anda zerinde ilem yapmamas gereken blgedir.
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 11 22

Kritik Alan

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 11

23

synchronized Anahtar Kelimesi - I


Bir yordam veya yordamn ierisindeki kritik bir blge synchronized anahtar kelimesi ile korunma altna alnabilir. Korunma altna alnmaktan kast, ayn anda iki veya daha fazla i paracnn bu kritik blgeye veya yordamn komple kendisine erimesini engellemektir.
public synchronized void veriKoy(int gelenVeri) { // tum yordam koruma altinda // ayni anda bir tek is parcacigi erisebilir }

public void veriKoy(int gelenVeri) { synchronized(this) { // sadece belirli bir kisim koruma altinda } }

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 11

24

synchronized Anahtar Kelimesi - II

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 11

25

synchronized Anahtar Kelimesi - III

FotokopiMakinasi.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 11

26

wait(), notify() ve notifyAll() Yordamlar

Her nesnenin bir kilidi olduu gibi bir de bekleme havuzu (object's monitor) bulunur. Bu bekleme havuzuna i paracklar atlr -wait()veya bu havuzdan dar kartlr notify()/notifyAll() Bu be yordam (wait() yordamnn iki de ada yordam bulunur), java.lang.Object nesnesinin ierisinde bulunur.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 11

27

Semafor (Semaphore)

Kaynan az olduu durumlarda bir ok i parac arasnda bir dzen salamak gereklidir.
Semaphore.java SemaphoreTest.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 11

28

Kilitlenme (Deadlock) - I

Kilitlenme, ilgili i paracklarnn sonsuza kadar beklemesi anlamna gelir. Bunun sebeplerinden biri, iki i paracnn karlkl nesne kilitlerini beklemesinden kaynaklanr.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 11

29

Kilitlenme (Deadlock) - II

Kilitlenme.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 11

30

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 11

31

Sorular ...

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 11

32

Nesneler iin torbalar


(Collections)

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 12

NESNELER N TORBALAR

Torbalar birden ok nesneyi ayn at altnda toplamak iin kullanlr. Bunun faydas torba ierisinde bulunan nesnelerin daha kolay tanmasdr. En basit torba dizilerdir.
DiziOrnekBir.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 12

Torba Sistemleri Bir uygulama yazarken ou zaman ne kadarlk bir verinin dizi ierisine konaca kestirilemez. Bu probleme zm olarak java.util paketinin altndaki arayzler ve snflar kullanlabilir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 12

Collection Arayz

Collection arayzne erien snflarn bir ksm kendisine gelen tm nesneleri (ayn olsalar dahi) kabul ederken, kimisi tamamen ayr nesneler kabul etmektedir. Yine bu arayze erien baz snflar, ierisindeki elemanlar sral ekilde tutarken kimisi srasz bir ekilde tutmaktadr. CollectionTest.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 12 4

Detayl ema

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 12

Collection arayzne erien dier arayzler ve snflar Detaysz ema (Soyut snflar kartlm)

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 12

List Arayzne Erien Snflar ArrayList Snf

Genel olarak List arayzne erien snflara ait nesnelerin kullanm basittir. List arayzne erien snflar, ayn diziler gibi sfrnc indeksten balarlar. ArrayList nesnesinin ierisine eleman atmak iin add(), ierideki bir eleman almak iin ise get() yordam kullanlr.
yeniBoyut=(eskiBoyut*3) / 2 +1
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 12 7

ArrayList Snf ve Iterator Arayz

ArrayList snf denince akla hemen Iterator arayzne erimi nesneler gelir. Iterator arayz tipindeki nesneler gerekten ok basit ve kullanldr.
Yordam smi boolean hasNext() Object next() void remove() Aklama eride hala eleman var ise true cevabn geri dner. Bir sonraki eleman arr. next() yordam ile arlm olan eleman siler. Bu yordam next() yordamndan sonra arlmaldr.

NufusCalismasi.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 12 8

Acaba Torbaya Ne Koymutum?

ArrayList nesnesinin ierisine atlan nesneleri almak iin get() yordam kullanlr. Bu yordam, ierideki nesneleri Object snf tipinde bizlere geri dner. Gerek tipi Object snf tipinde olmayan bu nesnelerimizi daha sonradan aaya evirim (downcasting) ile gerek tiplerine evirmemiz gereklidir.
SuperMarket.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 12 9

Garantili Torbalar

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 12

10

LinkedList Snf

List arayzne erien bir baka snf ise LinkedList snfdr. Bu snf da ayn ArrayList snf gibi nesnelerin toplu olarak tanmasnda grev alr. LinkedList snfnn ArrayList snfna gre baz gelimi zellikleri bulunur.
LinkedListTestBir.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 12

11

LinkedList Snf Kullanarak Yn Yaps Oluturmak LinkedList snf tipindeki nesneye ait olan addFirst() ve removeFirst() yordamlar kullanlarak veri yaplarndaki yn yapsn tasarlamak mmkndr. (LIFO- Last in first out).

Yigin.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 12 12

LinkedList Snf ile Kuyruk Yaps Oluturmak Kuyruk yaplarndaki kural, ierisine atlan ilk elemann yine ilk olarak kmasdr (FIFO-First in first out).

Kuyruk.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 12 13

Collections Snf

Collections snfnn Collection arayz ile kaltmsal herhangi bir ba yoktur. Collections snfnn ierisinde bir ok faydal statik yordam bulunur. Bu yordamlar sayesinde Collection veya Map arayzne erimi snflara ait nesnelerin ierinde bulunan elemanlar sralama, arama, en byk eleman ve en kk eleman bulma, v.b. ilemleri gerekletirmemiz mmkn olur.
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 12 14

Collections.sort

Bir torba (r : ArrayList nesnesi) ierisindeki elemanlar kkten bye doru sralamak (veya tam ters srada) iin Collections snfna ait statik sort() yordamn kullanabiliriz.
SiralamaBir.java TerstenSiralama.java NesneSiralama.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 12 15

Soru ?

Peki String veya Integer snf tipindeki nesnelere referanslar ArrayList nesnesinin ierisine atmasak da bunun yerine kendi oluturduumuz ayr bir snfa ait nesnenin referanslarn ArrayList nesnesinin ierisine atsak ve Collections.sort() yordam ile sralatmaya alrsak ne olur? NesneSiralama.java
Altu B. Altnta 2003

Kitap.java OzgunSiralama.java

Java ve Yazlm Tasarm - Blm 12

16

java.lang.Comparable

compareTo() yordamnn dndrmesi gereken sonular.


Durum O anki nesne (this), parametre olarak gelen nesneden kkse O anki nesne (this), parametre olarak gelen nesneye eitse O anki nesne (this), parametre olarak gelen nesneden bykse Dndrlen sonu O anki nesne (this), parametre olarak gelen nesneden kkse sfr pozitif tamsay

Kitap2.java
Altu B. Altnta 2003

OzgunSiralama2.java
Java ve Yazlm Tasarm - Blm 12 17

Collections.min() ve Collections.max()

Torba (r:ArrayList) ierisindeki elemanlarn en byn ve en kn bulan Collections snfnn statik olan max() ve min() statik yordamlardr.
MinMaxBulma.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 12

18

Collections.binarySearch()

Collections snf ierisinde bulunan statik binarySearch() yordam ile arama ilemleri kolaylkla yaplabilir. binarySearch() yordam iki adet parametre alr.
1. Birincisi arama yaplacak olan torba (r: ArrayList)nesnesine ait referans. 2. kincisi ise aratlan nesneye ait referans.

AramaTestBir.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 12 19

Hangisi Daha Hzl ArrayList Snf m, LinkedList Snf m?

u ana kadar olan rneklerimizin bazlarnda ArrayList snf bazlarnda ise LinkedList snf kullanlmtr. Bu iki snfn amac dier nesnelerin toplanmas iin torba grevi grmektir.
HizTesti1.java HizTesti2.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 12

20

Sonu

Arama ilemlerinde ArrayList snf en iyi performas verir. ArrayList snf, RandomAccess arayzne eriir ama LinkedList erimez ve bu yzden Collections.binarySearch() yordam ArrayList zerinde en iyi performas verir. LinkedList snfnnda iyi olduu yerler vardr. rnein ters evirme ilemi -ki bu ilem iin Collections.reverse() yordam kullanlr; Ayrca elemanlar arasnda batan sona veya sondan baa doru sralama (iteration) ilemlerinde de
Eleman ekleme kartma ilemlerinde LinkedList snf kullanlr

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 12

21

Set Arayz

Set arayz Collection arayznden tretilmi. Set arayzne erien snflara ait nesnelerin ierisine ayn eleman iki kere atamayz. Birbirine eit iki nesneye ait referans, Set arayzne erien bir nesnenin ierisine atamayz.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 12

22

Collection arayzne erien dier arayzler ve snflar Detaysz ema

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 12

23

HashSet Snf

HashSet snf Set arayzne erimitir. Bunun doal sonucu olarak da Set arayz ierisindeki gvdesiz yordamlara gvde yazmtr.
HashSetTestBir.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 12

24

TreeSet Snf

TreeSet snf SortedSet arayzne erimitir. TreeSet snfna ait bir nesnenin zellii, ierisindeki elemanlar sral (artan srada) bir ekilde tutmasdr. TreeSet snfna ait nesnenin ierisine atlacak olan referanslara bal nesnelere ait snflarn kesin olarak Comparator arayzne erimi ve bu arayzn ierisindeki gvdesiz yordamlar iptal etmeleri gerekmektedir. TreeSetTestBir.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 12 25

Map Arayz

Uygulama yazarken ihtiya duyulan en byk ihtiyalardan biri de anahtar-deer (key-value) ilikisidir. Bu anahtar-deer ilikisini ufak bir veritaban gibi dnebilirsiniz.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 12

26

Map arayzne erien arayz, soyut snflar ve snflar

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 12

27

HashMap Snf

HashMap snf Map arayzne erien snflarmzdan bir tanesidir. Bu snfn rol, kodu yazan kiiye anahtardeer ilikisi oluturabilecei bir ortam sunmaktr.
HashMapTestBir.java HashMapTestIki.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 12 28

HashMap snfna ait bir nesneyi bir ok i iin kullanabiliriz.

Bu tablodan Mteri1, Mteri2 ve Mteri3'n yaptklar demelerin toplamn kolayca nasl bulabiliriz ?

Musteri.java Kasa.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 12

29

Hangisi Daha Hzl ArrayList Snf m, HashMap Snf m?

ArrayList ve HashMap her ne kadar farkl yapda olsalar da biri dierinin yerine kullanlabilir.
HizTesti3.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 12

30

TreeMap Snf

TreeMap snf SortedMap arayzne eriir. TreeMap snfna ait bir nesne kullanlarak ayn HashMap snfna ait nesnelerde olduu gibi anahtar-deer ilikilerini saklamak mmkndr. TreeMap snfna ait bir nesne kullanmann avantaj anahtar-deer ilikisindeki anahtarn sral bir biimde tutulmasdr.
TreeMapTestBir.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 12 31

Hangisi Daha Hzl: HashMap Snf m, TreeMap Snf m?

Bu sorunun cevab u ekilde olabilir: "anahtar-deer ilikisindeki anahtarn sral olmasn istiyorsam TreeMap, aksi takdirde HashMap snfn kullanrm." Olaylara bu iki snfa ait nesnelerin ierisindeki anahtarn aratlma hzlar asndan bakarsak, acaba olaylar nasl deiir?
HizTesti4.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 12 32

Iterator Arayz ve Dikkat Edilmesi Gereken Hususlar

Bu arayz tipinde bir nesne elde etmek iin Collection arayzne erien snflara ait nesnelerin iterator() yordamn armak yeterlidir. Iterator arayzne erien bir nesnenin kullanlmasnn sebebi kolaylktr. Iterator arayzne ait nesneler ilgili torbann elemanlarn belli bir andaki fotorafn ekip daha sonradan bu elemanlar baka bir yere kopyalayp, onlarn zerinde mi ilem yapyor?

IterationOrnek.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 12 33

Senkronize Torbalar

u ana kadar incelediimiz snflara ait nesnelerin hi biri senkronize deildi. Bunun anlam bu nesnelere (ArrayList, LinkedList, HashSet, HashMap...) ayn anda iki veya daha fazla saydaki i paracnn(threads) eriip istedikleri eklemeyi veya silme ilemini yapabileceidir. SenkronizeListTestBir.java SenkronizeListTestIki.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 12 34

Sorular ...

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 12

35

A programlama (Network programming)

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 13

Giri

A programlama, uygulamalarn a ortam zerinden iletiimde bulunarak veri al-verii yaplmasna olanak verir; bu nedenle a programlama uygulamalarda nemli bir yer tutar. A zerinde uygulama gelitiren tasarmc, a sisteminin yapsn bilmesi gerekir; bu yzden, Java programlama diliyle a programlama nasl yaplr sorusu sorulmadan nce a sistemine bir bakmak yararl olacaktr.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 13

Kullanc/Sunucu (Client/Server) Nedir? - I

Kullanc, adndan da anlalaca gibi bir yerlerden veri almak isteyen uygulamalara/sistemlere verilen isimdir. rnein, a taraycs en ok bilinen kullanc uygulamasdr. Kullanc uygulamalarnn kar tarafnda bulunan ve ayn bir garson gibi hizmet veren uygulamalara sunucu denir. Sunucu uygulamasna rnek olarak, yllarn efsanevi a sunucu uygulamas olan Apache verilebilir (http://www.apache.org).
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 13 3

Kullanc/Sunucu (Client/Server) Nedir? - II

A sunucusu (Web server) FTP (File Transfer Protocol) sunucusu Telnet sunucusu

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 13

IP Adresi ve Port Kavramlar - I

nternete bal her sistemin kendisine ait zel bir numaras vardr -ki bu numaraya IP adresi denilmektedir. rnein http://www.kodcu.com sitesini barndran sunucu sistemin IP adresi 212.115.21.14tr. nsan bellei saysal IP adresleri anmsamakta zorluk eker; dolaysyla, ayrca alan ad sistemi mevcuttur (Domain Name System). Alan adlarna rnek olarak www.kodcu.com veya www.riskturk.com isimleri verilebilir. Bir IP adresine birden ok alan ad balanabilmektedir.
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 13 5

IP Adresi ve Port Kavramlar - II

Birok sunucu uygulamalarnn ayn sistem zerinde almalar, onlarn ayn IP adresinden hizmet verdiklerini gsterir; ancak, bu sunucu uygulamalarnn birbirinden fark herbirinin farkl port numaralarndan hizmet vermeleridir...
= 80 = 23 = 21

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 13

A sunucusu 8080. port numarasndan hizmet verebilir mi ?

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 13

Soket Nedir?

Soket, IP adresi ve port numarasnn birleiminden oluan ve uygulama yazlrken a ierisindeki altdzeydeki ayrntlardan kurtulup, iki sistemin birbirine kolayca balanmasn salayan bir tanmlama/kavramdr.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 13

Sihirli Numara 127.0.0.1 (Local Loopback)

A zerinde alan uygulama gelitirilebilmesi iin gelitirme aamasnda belirli bir IP adresine sahip sistem zerinde altrlmas gerekir. Peki a zerinde alacak bir uygulama yazlmas iin her seferinde nternete/aa bal olunmas m gerekiyor? IPTest.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 13

IPv4 ve IPv6 Uyarlamalar - I

imdilerde ortada IP adres yetmezlii gndeme gelmitir. Eski sistem yani aslnda u an iin kullandmz IP adres sistemine IPv4 denilmektedir. Bu sistemde IP adresleri ondalk 32-bit iaretsiz saylardan olumaktadr, IPv4 sisteminin iskeleti aaa.bbb.ccc.ddd eklinde olumaktadr. Biraz nce incelenen rnekte bahsi geen IP adresi IPv4 sistemindeydi, 195.155.246.159 gibi...
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 13 10

IPv4 ve IPv6 Uyarlamalar - II

IPv6 sistemi ynlendirme (routing), otomatik adres konfigrasyonu, dorulama (authentication), gizlilik (privacy) ve tanr IP (IP mobility) gibi bir ok yenilii de beraberinde getirmektedir. IPv6 sistemi ise onaltlk (hexadecimal) 128bit iaretsiz saylardan olumaktadr.
r:
3ffe:1700:4242:7:500:f8cf:fe21:67cf
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 13 11

Adres Gsterimi

Java Programlama dilinde IP adresini ifade etmek iin InetAddress snf kullanlr. Bu snf J2SE 1.4te (Java 2 Standart Edition) bir ok deiiklie uramtr. in asl, Java programlama dilini kullanarak uygulama yazan bir kii iin IP adresinin IPv4 veya IPv6 sistemine gre olmasnn fazla bir nemi yoktur nk InetAddress snf arka planda tm ileri bizim yerimize halleder.
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 13 12

IPv4 veya IPv6 sistemleri - I


InetAddress ipAdresi =InetAddress.getByName("www.obje7.com"); Socket s = new Socket(ipAdresi, 80 );

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 13

13

IPv4 veya IPv6 sistemleri - II

Bu ifademiz ise bir sunucu uygulamaya aittir. Bu uygulamamz 8080. port numarasndan devaml olarak dinleme yapp gelen istekleri karlamak iin tasarlanmtr.
ServerSocket sunucu = new ServerSocket(8080); for(;;) { Socket istemci = sunucu.accept; // kimin baglandigini ogrenelim ...... InetAddress istemcininAdresi = istemci.getInetAddress; }

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 13

14

Sunucu/stemci Uygulamalar - I

Java programlama dilini kullanarak yapacamz ilk a uygulamalar, basit bir sunucu ve istemci zerine olacaktr.
SunucuOrnekBir.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 13

15

Sra

Uygulamann ad

Dinledii port numaras

almas

Aklama

Original Hata (Eer olumu ise)

1.

SunucuOrnekBir.java

8080

java SunucuOrnekBir

Sorun yok, 8080. port numarasndan dinlemeye balar. Exception in thread "main" java.net.Bin dException: Address already in use: JVM_Bind
Exception in thread "main" java.net.BindEx ception: Address already in use: JVM_Bind 16

2.

SunucuOrnekBir.java

8080

java SunucuOrnekBir

Sorun var, nk 8080. port numaras dolu.

3.

Tomcat Servlet/JSP container


Altu B. Altnta 2003

8080

startup.sh (Linux/Unix iin), startup.bat (windows iin)

Sorun var, nk 8080. port numaras dolu.

Java ve Yazlm Tasarm - Blm 13

Sunucu/stemci Uygulamalar II

Java programla dilini kullanarak basit bir istemci uygulamas yazmak iin sadece java.net paketinin altndaki Socket snfn kullanmak yeterli olacaktr.

IstemciOrnekBir.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 13

17

Detaylar

baglanti kabul edildi: Socket[addr=/127.0.0.1,port=1267,localport=8080] soket = Socket[addr=localhost/127.0.0.1,port=8080,localport=1267]

Aadaki drtlnn bir tekillik (uniqie) oluturmas gerekir. stemcinin IP adresi stemcinin port numaras Sunucunun IP adresi Sunucunun port numaras

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 13

18

SunucuOrnekBir.java ve IstemciOrnekBir.java uygulamalar arasndaki iliki

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 13

19

Bloke Balantlar - I

Bloke balantlar, G/ (Girdi/kt-I/O-Input/Output) ilemi gerekletii anda uygulamay havada asl brakan balantlardr; bir baka deyile uygulamay bekleten balantlardr. SunucuOrnekBir.java ve IstemciOrnekBir.java arasndaki ilikinin ynlendiricisi istemci uygulamayd nk istemci uygulama verileri 300ms yerine 1 saatte gnderirse sunucu uygulama byle bir hareketin karnda boyun emek zorundadr.

SunucuOrnekIki.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 13 20

Bloke Balantlar - II

SunucuOrnekIki.java uygulamamzn eksiklii ise kendisine gelen tm istemcilere teker teker hizmet vermesidir. rnein iki istemci uygulama bu sunucuya balanmak isterlerse, bu istemci uygulamalardan nce biri, daha sonra ise teki kabul edilecektir. imdi IstemciOrnekBir.java ierisindeki Thread.sleep yordamna 300 yerine 10000 yazp bu istemci uygulamamz batan derleyip altrrsak, istemci uygulamalarmz verileri 10000ms bekleterek sunucuya gnderecektir.
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 13 21

Paracklar (threads) Banda

Sunucu uygulamalarnn ayn anda birok istee cevap verebilmesi iin iin ierisine i paracklarnn da dahil edilmesi gerekir.
SunucuOrnekUc.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 13

22

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 13

23

Havuz Her istemci istei iin ayr bir i paracnn oluturulmas ok lkse kaar.

IstemciOrnekIki.java
Altu B. Altnta 2003

SunucuOrnekDort.java
24

Java ve Yazlm Tasarm - Blm 13

URL ve URLConnection Snflar

URL snfnn yapt balca grevlerden biri ayn tarayc(browse) gibi almasdr.
1. mini kurs notlarn bu adresten okuyabilirsiniz : http://www.firmaninadresi/minikurs/ders1250.html

2. mini kurs notlarn bu adresten okuyabilirsiniz : http://www.firmaninadresi/minikurs/ders559.html

SayfaBulucu.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 13 25

Veritaban sunucularna balant

Veritaban sunucularna hangi organizasyonlarn ihtiyac olabilir ?


Bankalar Hastaneler niversiteler Devlet Daireleri Bankalar, mteri bilgileri Hastaneler, hasta kaytlarn niversiteler, renci bilgilerini Devlet Daireleri, planlama bilgileri, vatanda bilgileri..gibi
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 13 26

SQL

SQL (Standart Query Language- Standart Sorgulama Dili), veritabanlarn oluturmak, kontrol etmek ve ynetmek iin kullanlan ve 1992 ylnda standart hale getirilmi olan bir dildir.
Veritaban, kalc verileri tablo eklinde saklayan sistem Tablo, satrlardan oluan yap Satr, kolonlardan oluan yap Kolon, isim, tip ve deere sahip olan tek bir veri yaps.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 13

27

JDBC (Java DataBase Connectivity-Java Veritaban Balanlabilirlii)

Her veritaban sunucusunun belli bir reticisi vardr. u an iin kullanlan en yaygn veritaban sunucularndan bir ka aadaki gibidir. 1. MySQL : 3306 port numarasndan hizmet verir.

2. Oracle : 1521 port numarasndan hizmet verir. 3. MSSQL : 1433 port numarasndan hizmet verir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 13

28

Genel Bak

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 13

29

MySQL iin gerekli olanlar...

MySQL ak kaynakl bir projedir. Bu veritaban sunucusu GPL (GNU General Public License) lisans altnda bedava kullanlabilecei gibi, belirli bir cret karlnda ticari lisans altnda da kullanlabilir. Sadece MySQL deil tm veritaban sunucularna ait srcleri (driver) bulabilmek iin http://www.java.sun.com/products/jdbc/ adresi ziyaret edilebilir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 13

30

CLASSPATH ayarlar

Java uygulamalarnn MySQL veritabanna sunucusuna balanabilmesi iin sistemimizde iki eyin olmas gerekir. MySQL veritaban MySQL srcs
Linux

$ setenv CLASSPATH /kurulum/dizini/mm.mysql.jdbc-[versiyon]:$CLASSPATH


Windows

C:\> set CLASSPATH=\kurulum\dizini\mm.mysql.jdbc-[versiyon];%CLASSPATH%

VeritabaniBaglantiTestBir.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 13 31

Srcnn(Driver) yaps

> jar -xvf mm.mysql-2.0.10-bin.jar

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 13

32

Balant

VeritabaniBaglantiTestIki.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 13 33

MUSTERI tablosuna yeni bir kaytn eklenmesi

executeUpdate() ve executeQuery() yordamlarnn arasndaki farklar nelerdir ? VeritabaniBaglantiTestUc.java


#> java VeritabaniBaglantiTestUc ONUR AY "BUYU K SITE B BLOK KAT 5 NO 18" "0 262 11112222" "6606645" "ONUR@ONUR.COM" "IZMIT" " KURUCESME"

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 13

34

MUSTERI tablosundaki mevcut kaytlarn deitirilmesi ve silinmesi

VeritabaniBaglantiTestDort.java VeritabaniBaglantiTestBes.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 13

35

Sorular ...

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 13

36

Hata Ayklamann tesi... (Assertion)

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 14

Assertion

Assertion kelimesinin Trke karl iddia, bireylerin doruluunu ispat etmek anlamlarna gelir. Assertion zellii, J2SE 1.4 versiyonu ile birlikte gelen yeni bir zelliktir. Bu yeni gelen zellik sayesinde hata ayklama (debugging) ve yazlan kodlarn doruluunu ispat etme sreleri ok daha basite indirgenmektedir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 14

Hata Ayklama (Dubugging) - I

Hata ayklamak (debugging) ne demek ? Hata ayklama ilemi, hatann alglanmasndan sonra gelen bir sretir ve sreci uygulamak iin bir ok yntem bulunur. En bilindik yntemlerden biri hatal olduuna inanlan kod ynlarnn arasna System.out.println() komutlar serpitirilerek uygulamann ak takip edilmeye allr.
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 14 3

Hata Ayklama (Dubugging) - II

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 14

Hata Ayklama (Dubugging) - III

Dier yntem ise "Java Platform Debugger Architecture" mimarisini kendi ierisine entegre etmi bir editr ile almaktr.
Eclipse VisualSlickEdit JBuilder CodeGuide gibi...
Java ve Yazlm Tasarm - Blm 14 5

Altu B. Altnta 2003

Assertion zelliini kullanmak

Assertion zelliini yazlan kodlarn ierisine yerletirmek ok kolaydr. Assertion, koullar gereklemedii zaman hata frlatan bir mekanizmadr. Assertion zelliini kullanmann iki yolu vardr.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 14

Assertion zelliini kullanmak Birinci Yol

Birinci yol sadece basit bir ifadeden oluur.


assert ifade ;

Yukarda belirtilen ifade true ise sorun kmaz ama ayet bu ifade false ise sorun var demektir ve hata (AssertionError) frlatlr.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 14

rnek - Birinci Yol

Yukardaki assert ifadesinin kullanlmasndaki ama, Asinifi snf tipindeki a referasnn acaba Asinifi snfna ait bir nesneye mi balandn kontrol etmekdir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 14

Assertion zelliini kullanmak kinci Yol

assert ifade_1 : ifade_2;

Yukardaki ifadenin anlam udur: Eer ifade_1 false deeri geri dnerse, ifade_2 deki deeri hata olarak frlat.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 14

rnek - kinci Yol

Bu gsterimimizde a referans eer Asinifi tipinde bir nesneye balanmam ise yeni bir AssertionError tipinde bir hata frlatlacaktr. Yanlz buradaki fark, bu AssertionError snfnn yaplandrcsna bizim baz bilgiler gnderiyor olmamzdr.
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 14 10

Assertion ve derleme (compile) - I

Assertion zellii Java programlama diline yeni bir anahtar kelime kazandrmtr. Java programlama dili daha evvelden yazlm dier uygulamalar iin bir tehlike oluturabilir. Bu tehlike geriye doru uyumluluun kalkmas (backwards compatibility) ynndedir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 14

11

Assertion ve derleme (compile) - II

Yukardaki rneimiz henz assertion zellii ortalarda yokken yazlm olsun. Bu uygulamamzda, kullancdan gelen ilk deeri String tipinde olan ve assert isimli bir referansa balanmaktadr. Yazlan Java kodlarnn ierisinde assert anahtar kelimesi referans ad olarak geiyorsa ve assertion zelliini kullanmak istemiyorsanz, ksacas ben eski usl almak istiyorum diyorsanz baz ayrntlara dikkat etmeniz gerekir.
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 14 12

Assertion ve derleme (compile) - III

Assertion zelliini kullanmamak iin...


> javac -source 1.3

Assertion zelliini kullanmak iin...


> javac -source 1.4
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 14 13

Assertion zelliini nasl kontrol ederim ? - I

Assertion zelliinin kymetli klan en nemli faktr, bu zelliin alma esnasnda kapatlp alabiliyor olmasdr. rnein bir uygulamann gelitirilmesi esnasnda assertion zellii ak tutulabilir. Tahmin edilebilecei zere assertion zelliin ak tutulmas belli bir performans kaybna sebebiyet verecektir. Fakat uygulamann geliimi tamamland zaman assertion zellii alma annda kaptlarak (biraz sonra gsterilecek) bu performans kayb engellenmi olur.
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 14 14

Assertion zelliini nasl kontrol ederim ? - II

AssertTestBir.java uygulamasn javac -source 1.4 komutu ile derledikten sonra aadaki gibi altrlrsa...
> java > java
Altu B. Altnta 2003

AssertTestBir -ea AssertTestBir


Java ve Yazlm Tasarm - Blm 14 15

Assertion zelliini nasl kontrol ederim ? - III

nce derleme (compile) aamas > javac -source 1.4 AssertTestIki.java Sonra altrma (run) aamas > javac -ea AssertTestIki 5
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 14 16

Paket kontrolleri

imdi aadaki gibi bir yapmz olsun.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 14

17

Tm paketler iin assertion zellii ak

AssertPaketTest snfnn ierisindeki tm paket ve bunlar ierisindeki snflar iin assertion zelliinin ak (etkin) olmas isteniyorsa aadaki komutun yazlmas yeterli olacaktr.
> java -ea AssertPaketTest

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 14

18

Toplama ilemlerinde bir hata var sanki....

Assertion zelliinin sadece com.kodcu.math.Toplama snf iin almak istenirse.

> java -ea:com.kodcu.math.Toplama AssertPaketTest


Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 14 19

Sadece com.kodcu.math.* altndaki tm snflar iin assertion zellii amak istersek....

> java -ea:com.kodcu.math AssertPaketTest > java -ea:com.kodcu.math... AssertPaketTest


Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 14 20

Assertion zellii ak m ? Kapal m ?

Yukardaki snfmzn yaplandrcsndaki assert anahtar kelimesinin olduu satra yakndan bakacak olursak, burada bir karlatrma deil bir atama olduunu grrz.
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 14 21

AssertionError istisnalarn yakalamak

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 14

22

Kural : Komut satrndan girilmi olan verilerin kontrol iin assertion zellii kullanlmamaldr.

Assertion zellii, uygulamann kendi ierisinde tutarlln salamak iin kullanlmaldr; kullancnn uygulama ile olan tutarlln salamak iin deil.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 14

23

Kural : Assertion zellii, if ( koul )..... yerine kullanlmamaldr.

Kritik nokta, alma annda assertion zelliinin kapatlmas ile gz ard edilir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 14

24

Kural : public eriim belirliyicisine sahip olan yordamlara gnderilen parametreleri dz ekilde kontrol etmek amacyla assertion zellii kullanlmamaldr.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 14

25

Kural : Kullancdan gelen verilerin mantk ercevesinde olup olmad assertion zellii ile kontrol edilmemelidir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 14

26

Kural : Uygulamann genel aknda assertion zelliinin bir rol olmamaldr.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 14

27

Kural : private eriim belirliyicisine sahip olan yordamlara gnderilen parametrelerin kontrolnde assertion zellii kullanlabilir.

private eriim belirleyicisine sahip olan yordamlar dardan ulalamaz. Bu tip yordamlar ilerin esas yapld ve yanl parametre gelmesinin affedilemeyecei yerlerdir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 14

28

Kural : Olmaz ise olmaz durumlarn yakalamak iin assertion zellii kullanlabilir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 14

29

Sorular ...

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 14

30

You might also like