Upload
others
View
6
Download
0
Embed Size (px)
Citation preview
Veri Yapıları – 2010Java Programlama Diline GirişJava Programlama Diline Giriş
Doç. Dr. Aybars UĞUR
Bölüm 1
GİRİŞGİRİŞ
Java
• Java, ilk olarak Sun Microsystems tarafındangeliştirilen nesne yönelimli programlama dilidir.
• 1995 yılında piyasaya sürülmüştür. JamesGosling, Haziran 1991’de “Oak” adıyla
VERİ YAPILARI 01 Java Temel Kavramlar
3
Gosling, Haziran 1991’de “Oak” adıylageliştirmiştir.
• Platform bağımsızlığı (programı bir kere yaz,derle ve her platformda çalıştır), tasarımamaçlarındandır. Birçok donanım, işletim sistemive platformda çalışabilmektedir.
Önemli Java Gerçekleştirimleri
Sürüm Ad Açıklama
JDK 1.1 (1995) Java 1.0 İlk sürüm
J2SE 1.2(1998) J2SE
Java 2
J2SE (Java 2 Platform, Standard Edition)J2EE (Java 2 Platform, Enterprise Edition) J2ME (Java 2 Platform, Micro Edition).
VERİ YAPILARI 01 Java Temel Kavramlar
4
Java 2 J2ME (Java 2 Platform, Micro Edition).
J2SE 5.0(2004) J2SETiger
Generic yapılar, Autoboxing/Unboxing
Gelişmiş for döngüsü, Varargs (Değişken sayıda argüman)
J2SE 6 (2006 sonu) : MustangJ2SE 7 (Ağustos 2006-2010) : Dolphin
Son gelişmeler için : http://en.wikipedia.org/wiki/Java_version_history
JVM ve Bytecode
• JVM (Java Virtual Machine) veya Java SanalMakinesi: Java’nın özgün sanal makine modelinigerçekleştiren bilgisayar programları ve
VERİ YAPILARI 01 Java Temel Kavramlar
5
gerçekleştiren bilgisayar programları veyapılarından oluşan bir bütündür.
• “Java Bytecode” adı verilen, bilgisayar ara dilinikabul eder. Bir programın bytecode’u, Java diliderleyicileri tarafından üretilir.
İlk Java Programı
Prog1 adlı java programı :
class Prog1
{
VERİ YAPILARI 01 Java Temel Kavramlar
6
ekrana merhaba yazdırmaktadır.
public static void main(String args[])
{
System.out.println("Merhaba");
}
}
Java Uygulaması
Java programlarında // Satırın geri kalan kısmının açıklama satırı olduğunu gösterir.
VERİ YAPILARI 01 Java Temel Kavramlar
7
Geleneksel /* Açıklama */ işaretleri de özellikle çok satıra yayılan açıklamalarda kullanılır.
Deyimler “;” ile sonlandırılmalıdır.
Her java programı en az bir sınıf tanımı içermelidir.
Java Programının Çalıştırılması
class Prog1
{
public static void main(String args[]) {
Kaynak Kod Prog1.java
.. .. .. ..
.. 80 1a ..
Byte KodProg1.class
DERLEMEjavac derleyicisi
JVM’i (Java Virtual Machine) açmak üzere Java komutukullanıldığında işletilen bilgisayar programına Javauygulaması (application) denilir.
VERİ YAPILARI 01 Java Temel Kavramlar
8
public static void main(String args[]) {
System.out.println("Merhaba");
}
}> javac Prog1.java
.. 80 1a ..
.. .. .. ..
.. .. .. ..
.. 80 1a ..
.. .. .. ..
Byte KodProg1.class ÇALIŞTIRMA
java yorumlayıcısı
> java Prog1> Merhaba
JVM tarafından yorumlanabilir.
Entegre Geliştirme Ortamları
• Programların IDE (Integrated DevelopmentEnvironment) kullanılarak yazılması, işletilmesi, testedilmesi ve hatalardan arındırılması kolay olduğuiçin, bu şekilde uygulama yazılması işlemine RAD(Rapid Application Development) adı verilmektedir.
VERİ YAPILARI 01 Java Temel Kavramlar
9
(Rapid Application Development) adı verilmektedir.
• Eclipse (http://www.eclipse.org/)• NetBeans (http://www.netbeans.org/products/platform/)• JDeveloper (from Oracle)• IntelliJ (JetBrains)• JCreator (http://www.jcreator.com/) …
Bölüm 2
JAVA’daJAVA’daVERİ TİPLERİ
Veri Tipleri
• Java’da iki tür veri tipi vardır:– Temel– Referans
• İki tür veri tipi arasındaki fark atama işlemi sırasında ortaya çıkar.
VERİ YAPILARI 01 Java Temel Kavramlar
11
• Temel tipteki bir değişkenin diğer bir değişkene ataması sırasında veri kopyalanır.
• Referans değişkeninin diğer bir değişkene ataması sırasında ise, her iki değişken de aynı veriyi gösterir. Referanslar, C/C++ işaretçilerine (pointer) benzerler.
• Diziler ve Nesnelerin tümü referans veri tipindedir.
Java’da Temel Veri Tipleri
Type Size in bits Values
boolean 1 true or false
byte 8 -128 to +127
char 16 Unicode
VERİ YAPILARI 01 Java Temel Kavramlar
12
char 16 Unicode
short 16 integer
int 32 integer
long 64 integer
float 32 float
double 64 double
Temel Veri Tiplerinin Sınırları
• Tamsayıların Sınırları
VERİ YAPILARI 01 Java Temel Kavramlar
13
• Ondalıklı Sayıların Sınırları
Java’nın 8 Temel Veri TipiType Size in bits Values Standard boolean 8 true or false
char 16 ’\u0000’ to ’\uFFFF’ (ISO Unicode character set)
byte 8 –128 to +127
short 16 –32,768 to +32,767
int 32 –2,147,483,648 to +2,147,483,647
long 64 –9,223,372,036,854,775,808 to
+9,223,372,036,854,775,807
float 32 –3.40292347E+38 to
+3.40292347E+38
(IEEE 754 floating point)
double 64 –1.79769313486231570E+308 to
+1.79769313486231570E+308
(IEEE 754 floating point)
VERİ YAPILARI 01 Java Temel Kavramlar
14
+1.79769313486231570E+308
• java.lang.Byte• java.lang.Short• java.lang.Integer• java.lang.Long
• java.lang.Float• java.lang.Double
• java.lang.Character• java.lang.Boolean
Sarmalayıcı (Wrapper) Sınıflar
ASCII ve UNICODE Karakter Setleri
• ASCII, 8 bit kodlama düzenindedir ve en yaygın karakter setidir. 256 karakterle sınırlıdır.
VERİ YAPILARI 01 Java Temel Kavramlar
15
• Unicode, 16 bitlik kodlama düzenindedir ve 65536 karakterlik sahası vardır.
• Java programlama dili Unicode’u kullanır.
İkiye Tümleyen (Two’s Complement)
İkiye tümleyen, negatif sayıları İkili sayılar içerisindegöstermek için kullanılan bir yöntemdir. İlave bir + ve −sembolüne ihtiyaç duyulmaz. İkili (binary) bir sayının ikiyetümleyeni (two’s complement), sayının ikinin üssündençıkartılması ile elde edilir (n bitlik ikinin tümleyeni için,2N’den çıkarılır).
VERİ YAPILARI 01 Java Temel Kavramlar
16
çıkartılması ile elde edilir (n bitlik ikinin tümleyeni için,2N’den çıkarılır).
Negatif sayıların ikili kodlanması esnasında ikiye tümlememetodu kullanılmadığı taktirde, sayının işareti için ayrı birbit harcanması gerekir. Birbirinden farklı işarete sahipbirden fazla 0 sayısının oluşmasına sebep olur. Bitlerindeğerlerini ve anlamlarını değerlendirecek bir yönetim-denetim mekanizması kullanılması gerekir.
8 Bitlik İkinin Tümleyeni Tamsayılar
A two's-complement system ortwo's-complement arithmetic isa system in which negativenumbers are represented by thetwo's complement of the absolutevalue.
Pozitif Sayılar doğal şekildedir:
VERİ YAPILARI 01 Java Temel Kavramlar
17
this system is the most commonmethod of representing signedintegers on computers. In such asystem, a number is negated(converted from positive tonegative or vice versa) bycomputing its two's complement.
Sınırları : [-2N-1 … 2N-1-1]
Java Byte Data Type
Decimal 8 bit Binary Invert add 1 for
Twos
Complement
Decimal
0 0000 0000 - - -
+1 0000 0001 1111 1110 1111 1111 -1
+2 0000 0010 1111 1101 1111 1110 -2
VERİ YAPILARI 01 Java Temel Kavramlar
18
+2 0000 0010 1111 1101 1111 1110 -2
+3 0000 0011 1111 1100 1111 1101 -3
+4 0000 0100 1111 1011 1111 1100 -4
+5 0000 0101 1111 1010 1111 1011 -5
¯ ¯
124 0111 1100 1000 0011 1000 0100 -124
125 0111 1101 1000 0010 1000 0011 -125
126 0111 1110 1000 0001 1000 0010 -126
127 0111 1111 1000 0000 1000 0001 -127
- - - 1000 0000 -128
IEEE 754 Standard for Floating-Point Arithmetic
• http://tr.wikipedia.org/wiki/IEEE_754
• http://en.wikipedia.org/wiki/IEEE_754-1985
• IEEE Kayan Nokta Aritmetiği Standardı, kayan noktalı
VERİ YAPILARI 01 Java Temel Kavramlar
19
• IEEE Kayan Nokta Aritmetiği Standardı, kayan noktalı sayıların gösteriminde en çok kullanılan standarttır.
• IEEE 754 standardına göre sayılar tek duyarlı (32 bit) ve çift duyarlı(64 bit) şekilde gösterilebilirler.
IEEE 754 : Tek Duyarlı Gösterim
Tek duyarlı gösterimde sayı 32 bitle ifade edilir. Bu bitlerden biri işaret, 8'i üs 23 tanesi ise anlamlı kısmın gösterimi için kullanılır. Tek duyarlı gösterimde üs için
kaydırma değeri 28-1-1 = 127 olarak hesaplanır.
VERİ YAPILARI 01 Java Temel Kavramlar
20
1 bit 8 bit 23 bit
İşaretsign
Üsexponent
Anlamlı Kısımfraction
IEEE 754 : Tek Duyarlı Gösterim
Tek duyarlı gösterimde 6,375 sayısını temsil etmek istersek :
6 → (110)2
0,375 × 2 = 0,75
0,75 × 2 = 1,5 0,375 = (0,011)2 → 6,375 = (110,011)2
VERİ YAPILARI 01 Java Temel Kavramlar
21
0,5 × 2 = 1,0
Sayıyı olağan duruma getirirsek : 110,011 = 1,10011x22
Sayı > 0 olduğundan işaret biti : 0Sayının üst değerinin saptırılmış hali : 2+127 = 129 → 12910 = 100000012
Anlamlı kısım : 10011000000000000000000Sayı son olarak : 0 10000001 10011000000000000000000 şeklinde ifade edilir.
IEEE Tek Duyarlı Gösterimdeki Bir Sayının Onluk Düzendeki Değerinin Bulunması
v = s × 2e × m where– s = +1 (positive numbers and +0) when the sign bit is 0 – s = −1 (negative numbers and −0) when the sign bit is 1 – e = exponent − 127 (in other words the exponent is stored with
127 added to it, also called "biased with 127")
VERİ YAPILARI 01 Java Temel Kavramlar
22
127 added to it, also called "biased with 127") – m = 1.fraction in binary (that is, the significand is the binary
number 1 followed by the radix point followed by the binary bits of the fraction). Therefore, 1 ≤ m < 2. (1+fraction)
0 10000001 10011000000000000000000v = +1 * 22 * (1,10011)2 = 6,375
1+ 0,5+ 0,0625+ 0,03125 = 1,59375
IEEE 754 : Çift Duyarlı Gösterim
Çift duyarlı gösterimde sayı 64 bitle ifade edilir. Bu bitlerden biri işaret, 11'i üs ve 52 tanesi de anlamlı kısmı ifade etmek için kullanılır. Bu gösterimde üs için sapma değeri 211-1-1 = 1023 olarak hesaplanır.
VERİ YAPILARI 01 Java Temel Kavramlar
23
1 bit 11 bit 52 bit
İşaretsign
Üsexponent
Anlamlı Kısımfraction
Değişkenler - I
Tip değişken ismi
int sayi1; // int veri tipidir.
/* sayi1 değişkeninin tamsayı tipinde olduğunu
VERİ YAPILARI 01 Java Temel Kavramlar
24
/* sayi1 değişkeninin tamsayı tipinde olduğunu
belirtir */
........
sayi1=5;
float sayi=5.7f;
Değişkenler - II
• Değişkenler, tanımlandıkları gibi değer alırlar:int a = -5; double b = 10.3;
• Aynı satırda birden çok değişken tanımı yapılabilir.• C++ programlama Dilinde olduğu gibi değişkenler,
herhangi bir yerde tanımlanabilir. Metodun en üstündetanımlanma zorunluluğu yoktur.
VERİ YAPILARI 01 Java Temel Kavramlar
25
herhangi bir yerde tanımlanabilir. Metodun en üstündetanımlanma zorunluluğu yoktur.
• Değişkenlerin, gerekli olduğu yerde tanımlanmasıuygundur.
• Java Dilinde değişkenlerin kullanılmadan önce değerleriolması gerekir.
• Değişkenler sadece tanımlandıkları bloktakullanılabilirler.
Veri Tipi Dönüştürme (Casting)
• Daha geniş bir tipi, daha dar bir veri tipine dönüştürürken “casting” yapmak gerekir.
double sayi1=5;
VERİ YAPILARI 01 Java Temel Kavramlar
26
double sayi1=5;
// float sayi2 = sayi1; // Yanlış
float sayi2 = (float)sayi1; // Doğru
double sayi3 = sayi2; /* Geniş tip olduğundan problem yok */
Yazdırma Komutu
• System.out.print ve System.out.println
System.out.print(“Merhaba”); System.out.println(“Java Dili”);
� Merhaba Java Dili
System.out.println(“\nOrtalama="+57);
System.out.println(5);
VERİ YAPILARI 01 Java Temel Kavramlar
27
int sayi = 5;
System.out.println("Sayi\tKaresi");
System.out.println(sayi+"\t"+(sayi*sayi));
• Sayi Karesi
• 5 25
• System.out.printf (J2SE 5.0’ın yeni özelliklerindendir)String str = "Java"; double versiyon = 5.0;
System.out.printf("Merhaba %s %f ", str, versiyon);
Java’da Klavyeden Okumaimport java.util.Scanner;
class Dene{
public static void main(String args[]){
Scanner str = new Scanner(System.in);
VERİ YAPILARI 01 Java Temel Kavramlar
28
Scanner str = new Scanner(System.in);int i = str.nextInt();
System.out.println(""+(i*i));}
}
Ayrıntılar için : http://java.sun.com/j2se/1.5.0/docs/api/java/util/Scanner.html
OPERATÖRLER - I
Hesaplamalarda kullanılan operatörler :
Aritmetik : +, -, *, /, % (Mod, kalan), ++, --
Mantıksal : &&, ||, !, &, |, .....
İlişkisel :
VERİ YAPILARI 01 Java Temel Kavramlar
29
İlişkisel :
== (eşittir)
!= (eşit değildir)
>, <, >=, <=
OPERATÖRLER - II
Atama Operatörü : değişken = deyim;
int x = 5;
double sayi = -3.5;
int a, b, c;
VERİ YAPILARI 01 Java Temel Kavramlar
30
int a, b, c;
a=b=c=100; // Atama zinciri
Bileşik Atamalar : +=, -=, *=, /=, .....
x-=10; // x = x - 10 ile eşdeğer
Operatörler ve Öncelik Sırası
Gruplama Operatorler
Postfix [] . (params) exp++ exp-- Unary ++exp --exp +exp -exp ~ ! Creation, cast new (type)exp Multiplicative * / % Additive + - Shift << >> >>>
VERİ YAPILARI 01 Java Temel Kavramlar
31
Shift << >> >>> Relational < > <= >= instanceof Equality == != Bitwise AND & Bitwise EXOR ^ Bitwise OR |
Logical AND && Logical OR || Conditional ?: Assignment = *= /= %= += -= >>= <<= >>>=
&= ^= |=
Bölüm 3
YAPISAL PROGRAMLAMA YAPISAL PROGRAMLAMA ve DENETİM YAPILARI
YAPISAL PROGRAMLAMA
Yapısal Programlamada üç tür denetim yeterlidir:
• Sıra (Sequence)
• Seçim (Selection)
• Tekrar (Repetition)
VERİ YAPILARI 01 Java Temel Kavramlar
33
• Tekrar (Repetition)
Sıralı işletim ?
PROGRAM DENETİM YAPILARI
• SEÇİM YAPILARI– if– if/else– switch
VERİ YAPILARI 01 Java Temel Kavramlar
34
• TEKRAR YAPILARI (Döngüler)– while– do/while– for
SEÇİM YAPILARI : IF
if (koşul) ifade
if(notu>=60) System.out.println("Geçti");
Koşul : boolean veri tipindedir. true veya false olabilir.
VERİ YAPILARI 01 Java Temel Kavramlar
35
Koşul : boolean veri tipindedir. true veya false olabilir.
int notu=65, sayac=0;
if(notu>=60) // İfade bloğu
{ System.out.println("Gecti"); sayac++; };
SEÇİM YAPILARI : IF/ELSE
if (koşul) ifade;
else ifade;
if(notu>=60)
VERİ YAPILARI 01 Java Temel Kavramlar
36
if(notu>=60)
System.out.println("Gecti");
else
System.out.println("Kaldı");
CONDITIONAL OPERATOR (?:)
System.out.println(notu>=60? "Geçti":"Kaldı");
Eşdeğer ifade :
VERİ YAPILARI 01 Java Temel Kavramlar
37
Eşdeğer ifade :
if (notu>=60)System.out.println("Geçti");
elseSystem.out.println("Kaldı");
IF-ELSE-IF MERDİVENİ(CASCADING IF)
if(koşul) ifade
else if (koşul) ifade
else if (koşul) ifade
...............
else ifade;
if (notu>=90)
str = “A”;
else if (notu>=80)
str = “B”;
else if (notu>=70)
VERİ YAPILARI 01 Java Temel Kavramlar
38
else ifade; else if (notu>=70)
str = “C”;
else if (notu>=60)
str = “D”;
else str = “E”;
System.out.println(str);
SEÇİM YAPILARI : SWITCHÇoklu Seçim
switch (deyim) {case sabit1:ifade1;break;
case sabit2:
int sayi = 4;
switch(sayi) {
case 0 :
System.out.println(" Sayı 0");
break;
VERİ YAPILARI 01 Java Temel Kavramlar
39
case sabit2:ifade2; break;
....default : ifade;break;
}
case 1 :
System.out.println(" Sayı 1");
break;
case 2 :
System.out.println(" Sayı 2");
break;
default : System.out.println("X");
break;
DÖNGÜLER : FOR
sayac : kontrol değişkeni olmak üzere,
for(int sayac=0; sayac<10; ++sayac)
ifade
VERİ YAPILARI 01 Java Temel Kavramlar
40
for(başlangıç; devam koşulu; kontrol değişkeni değişimi)
ifade
for(int sayac=0; sayac<10; ++sayac) {
ifadeler
}
DÖNGÜLER : WHILE ve DO-WHILE
while(koşul) ifade
do {
ifadeler
VERİ YAPILARI 01 Java Temel Kavramlar
41
ifadeler
} while (koşul);
int sayac=1, toplam=0;
while(sayac<10) { toplam+=sayac; sayac++; };
DÖNGÜDEN ÇIKMAK : BREAK
for(int x=1; x<10; ++x)
{
toplam+=x;
if (x==5) break;
VERİ YAPILARI 01 Java Temel Kavramlar
42
if (x==5) break;
}
System.out.println("1 ile 5 arasındaki sayıların toplamı = "+toplam);
break sadece en içteki döngüden çıkar.
DÖNGÜDE ERKEN TEKRAR : CONTINUE
1 ile 100 arasındaki tek sayıları yazan program :
for(int i=0; i<100; ++i)
{
VERİ YAPILARI 01 Java Temel Kavramlar
43
{
if ( (i%2)!=1) continue;
System.out.println(i);
}
Mantıksal Operatörler
• VE : Conditional AND &&• VEYA : Conditional OR ||if ( (yas>50) && (boy>170) ) …;
Conditional ve/veya, kısa devre hesaplaması yapabilir.
VERİ YAPILARI 01 Java Temel Kavramlar
44
Conditional ve/veya, kısa devre hesaplaması yapabilir.
• VE : Boolean Logical AND &• VEYA : Boolean Logical OR |if ( (yas>50) && (boy>170) ) …;
Boolean mantıksal ve/veya, tüm operand’ları hesaplar.
Bölüm 4
DİZİLERDİZİLER
DİZİLER - I
Dizi (array), aynı tipteki değişkenler topluluğudur.
int[] arr = new int[10];
int[] dizi = {5,7,12,2,9,8,14,21,-6,5};
VERİ YAPILARI 01 Java Temel Kavramlar
46
int[] dizi = {5,7,12,2,9,8,14,21,-6,5};
double[] sayilar; sayilar = new double[5];
5 7 12 2 9 8 14 21 -6 5
-3.4 12.5 27.0 1.1 25.33
0 1 2 3 4 5 6 7 8 9
Diziler - II
Diziler, temel veri tipi listesi veya referans listesi içerebilirler.
Diziler, köşeli parantezlerle ifade edilirler : []
Köşeli parantezler veri tipinden sonraya yerleştirildiğinde, tüm değişkenleri dizi olarak tanımlar:
VERİ YAPILARI 01 Java Temel Kavramlar
47
değişkenleri dizi olarak tanımlar:
int[] sayilar, numaralar;
Köşeli parantezlerin değişkenden sonraya yerleştirilmesi sadece o değişkeni dizi yapar:
int sayilar[], sayac;
Diziler - III
Diğer referans tipleri (nesneler) gibi diziler de, ya bazı verileri gösteriyordur veya hiçbir yere işaret etmiyordur.
Hiçbir yeri göstermiyorsa, int sayilar[] = null; şeklinde olduğu gibi tanımlanmalıdır.
Bellekten 15 tamsayılık yer ayırmak için : sayilar = new int[15];
VERİ YAPILARI 01 Java Temel Kavramlar
48
Bellekten 15 tamsayılık yer ayırmak için : sayilar = new int[15]; şeklinde kullanılabilir.
“new” operatöründen sonraki veri tipi, tanımlı değişkenin veri tipi ile aynı olmalıdır.
Java dizinin her elemanına default olarak 0 değerini atar.
DİZİ KULLANIM ÖRNEKLERİ
dizi[2]++;
dizi[3]=dizi[1]+dizi[2];
System.out.println(dizi[5]);
VERİ YAPILARI 01 Java Temel Kavramlar
49
Dizi elemanlarının toplamını bulduran programı yazınız : dizi.length kullanınız!
İKİ BOYUTLU DİZİLER (MATRİSLER)
• M x N • M satır, N sütun
61173
83321
9152
tablo
M=42
1
0
210
VERİ YAPILARI 01 Java Temel Kavramlar
50
• Oluşturulması : int[][] tablo = new int[4][3];• Kullanımı : tablo[0][2]
5389
N=3
3
ÇOK BOYUTLU DİZİLER
• Tip []…[] isim = new tip[büyüklük1]...[büyüklükN]
• Tip isim[]…[] = new tip[büyüklük1]...[büyüklükN]
Örnek :
VERİ YAPILARI 01 Java Temel Kavramlar
51
float cbDizi[][][][]; // 4 boyutlu dizi
cbDizi = new float[3][4][2][6];
STRING’LER ve KARAKTER DİZİLERİ
• Karakter dizisi : Karakterlerden oluşan dizidir.
char harfDizi[] = { ‘T', 'e', ‘s', ‘t' };for(int i=0; i<harfDizi.length;++i)System.out.println(harfDizi[i]);
VERİ YAPILARI 01 Java Temel Kavramlar
52
• String : Karakter dizisinden farklıdır. Çok sayıda metot içerir. Java’nın String sınıfı kullanılır.
String str = "Merhaba"; System.out.println(str);
str = new String(harfDizi); System.out.println(str);
Dizilerden Oluşan Diziler
int[][] list = new int[10][];
list[0] = new int[5];
list[1] = new int[10];
list[1][6] = 23;
VERİ YAPILARI 01 Java Temel Kavramlar
53
list[1][6] = 23;
list[0][6] = 23; /* Hata! Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6 at Ornek3.main(Ornek3.java:34) */
Bölüm 5
METOTLARMETOTLAR
BÖL ve ÇÖZ (Divide and Conquer)
• Yazılım Mühendisliği deneyimleri, büyük programlargeliştirmenin en iyi yolunun küçük program parçaları(modül) yazıp onları birleştirmek olduğunu göstermiştir.
• Böl ve Çöz olarak bilinen bu yöntem aynı zamanda,hatalardan arındırmayı, programı gelişen şartlara göre
VERİ YAPILARI 01 Java Temel Kavramlar
55
hatalardan arındırmayı, programı gelişen şartlara görebüyütmeyi, değişiklikler yapmayı kolaylaştırmak veanlaşılırlığı artırmak gibi birçok avantajı da beraberindegetirmektedir.
• Java’da temel modüller, sınıf (class) ve metotlardır(method). Metotlar yazılım içinde yeniden kullanılarakkodu ve yazılım geliştirme süresini kısaltmaktadır.
METOTLAR (METHOD)
• Bir işlemin yapılması için bir veya daha fazla ifadekullanmak gerekir. Verilen bir matrisi ekrana yazdırmakgibi. İlgili kodu “yazdir()” adını verdiğimiz bir metot içineyazarak istediğimiz zaman, ismi ile çağırabiliriz.
• Java, matematik hesaplamalarını, string, karakter,girdi/çıktı işlemlerini ve diğerlerini yapmak için hazırsınıflar ve metotlar içermektedir. Ayrıca değişik alanlarda
VERİ YAPILARI 01 Java Temel Kavramlar
56
girdi/çıktı işlemlerini ve diğerlerini yapmak için hazırsınıflar ve metotlar içermektedir. Ayrıca değişik alanlardahazırlanmış veya kendimizin daha önceden hazırladığımetotları da kullanmak mümkündür.
• Hazır veya kullanıcı tanımlı paketleri,import java.util.Random;import java.util.*;biçimlerinde görüldüğü gibi “import” kullanılarak yüklenirler.
Java Paketleri
• Hazır Java paketleri içerisinde, birçok sınıf mevcuttur.
java.applet Java.net
java.awt Java.text
java.awt.event Java.util
VERİ YAPILARI 01 Java Temel Kavramlar
57
• Java.lang paketi, Java’da çok kullanılan sınıfları içerir. Bu pakettekijava.lang.Math sınıfı içerisinde bulunan bazı sahalar ve metotlarsonraki slaytlarda gösterilmiştir. (Sadece “lang” paketine özgüolarak, kullanıcının getirme “import” zorunluluğu yoktur)
java.awt.event Java.util
java.io Java.swing
Java.lang Java.swing.event …
Field Summary
static double E
static double PI
Method Summary
static double abs(double a) Returns the absolute value of a double value.
static float abs(float a) Returns the absolute value of a float value.
static int abs(int a) Returns the absolute value of an int value.
static long abs(long a) Returns the absolute value of a long value.
static double acos(double a)
Returns the arc cosine of a value; the returned angle is in the range 0.0
through pi.
static double asin(double a)
Returns the arc sine of a value; the returned angle is in the range -pi/2
through pi/2.
VERİ YAPILARI 01 Java Temel Kavramlar
58
through pi/2.
static double atan(double a)
Returns the arc tangent of a value; the returned angle is in the range -
pi/2 through pi/2.
static double atan2(double y, double x)
Returns the angle theta from the conversion of rectangular coordinates
(x, y) to polar coordinates (r, theta).
static double ceil(double a)
Returns the smallest (closest to negative infinity) double value that is
greater than or equal to the argument and is equal to a mathematical integer.
static double cos(double a)
Returns the trigonometric cosine of an angle.
static double exp(double a)
Returns Euler's number e raised to the power of a double value.
static double floor(double a)
Returns the largest (closest to positive infinity) double value that is
less than or equal to the argument and is equal to a mathematical integer.
Hazır java.lang.Math sınıfının bazı metotları
static double log(double a)
Returns the natural logarithm (base e) of a double value.
static double log10(double a)
Returns the base 10 logarithm of a double value.
static double max(double a, double b)
Returns the greater of two double values.
static double min(double a, double b)
Returns the smaller of two double values.
static double pow(double a, double b)
Returns the value of the first argument raised to the power of the
VERİ YAPILARI 01 Java Temel Kavramlar
59
Returns the value of the first argument raised to the power of the
second argument.
static long round(double a) Returns the closest long to the argument.
static double sin(double a) Returns the trigonometric sine of an angle.
static double sqrt(double a) Returns the correctly rounded positive square root of a
double value.
static double tan(double a) Returns the trigonometric tangent of an angle.
static double toDegrees(double angrad)
Converts an angle measured in radians to an approximately equivalent
angle measured in degrees.
static double toRadians(double angdeg)
Converts an angle measured in degrees to an approximately
equivalent angle measured in radians.
http://java.sun.com/javase/6/docs/api/java/lang/Math.html
METOTLARIN GENEL BİÇİMİ
erişim dönüş_tipi isim(parametre listesi)
{
metodun gövdesi
}
VERİ YAPILARI 01 Java Temel Kavramlar
60
Erişim : public, private gibi
Dönüş_tipi : metodun döndürdüğü veri tipi. Değer döndürmüyorsa void.
Parametre listesi : “,” lerle ayrılmış tip ve parametre ismi.
Değer Döndürmeyen Metotlarvoid metotları
public void yazdir() {
System.out.println("Merhaba");
}
VERİ YAPILARI 01 Java Temel Kavramlar
61
}
Çağrılması :
yazdir();
Değer Döndüren Metotlar
public int topla(int a, int b) {return (a+b);
}
VERİ YAPILARI 01 Java Temel Kavramlar
62
Çağrılması :int y=topla(5,6);
Metodun iki de parametresi var.
Parametre, Argüman, Return
Argüman : Metoda aktarılan değer
Parametre : Argümanı kabul eden değişken
Return : Metottan çıkmak veya geri dönmek
VERİ YAPILARI 01 Java Temel Kavramlar
63
Return : Metottan çıkmak veya geri dönmek
Değişkenlerin Kapsama Alanı
{…int x = 5; if(sayi>5){int y = 12;… y değişkeninin tanımlı olduğu bölge
VERİ YAPILARI 01 Java Temel Kavramlar
64
… }// y tanımlı değil// x tanımlı}
for(int i=0; i<5; ++i)System.out.println(i);
i=10; // Hatalı!
y değişkeninin tanımlı olduğu bölge
Metotlar – Örnek 1int dizi[] = { 5,6,7,8 }; veya benzer şekilde verilen bir tamsayı dizisinin elemanlarının toplamını bulan metodu içeren java programını yazınız.
class DiziTopla{
public static void main(String args[]){
int dizi[] = { 5,6,7,8 };
VERİ YAPILARI 01 Java Temel Kavramlar
65
int dizi[] = { 5,6,7,8 };System.out.println(topla(dizi));
}public static int topla(int dizi[]){
int toplam = 0;for(int i=0; i<dizi.length; ++i)
toplam+=dizi[i];return toplam;
}}
Metotlar – Örnek 2class Ornek2{
public static void main(String args[]){
String str = "test";nyazdir(str,10);
VERİ YAPILARI 01 Java Temel Kavramlar
66
}
public static void nyazdir(String str, int n){
for(int i=0; i<n; ++i)System.out.println(str);
}}
Metotlar – Örnek 3Faktöriyel
class Ornek3{
public static String f(int n){
int carpim = 1;if (n<0) return "Invalid Input For Function";elsefor(int i=1; i<=n;++i)
VERİ YAPILARI 01 Java Temel Kavramlar
67
for(int i=1; i<=n;++i)carpim*=i;
return ""+carpim;}
public static void main(String args[]){
int sayi = 5;System.out.println(f(sayi));
}}
Sayı döndüren faktöriyel fonksiyonunu yazınız.
Geliştirilmiş for (enhanced for)
Java 5.0 ile gelen bir özelliktir.
For ( parameter : arrayName)Statement
VERİ YAPILARI 01 Java Temel Kavramlar
68
İki parçadan oluşur : • Type and identifier : “int sayi” gibi• arrayName : dolaşılacak (iterate) dizi
Ayrıca, diziler dışında koleksiyonların da dolaşılmasını sağlar.
Varargs
Varargs (Variable arguments), bir metodun değişken sayıda parametre alabilmesidir.
Java 5.0'ın sunduğu kolaylıklardan biridir.
class DegSayParametre {
public static void merhabalar(String... names) {for (String name : names) {System.out.println("Merhaba " + name);
}
VERİ YAPILARI 01 Java Temel Kavramlar
69
Aynı amaçla dizi de kullanılabilir ama elemanları diziye yerleştirmekten kurtarır. Değerler metot içine dizi olarak gelir.
Bir metotta sadece 1 varargs bulunabilir.
}}
public static void main(String[] args) {merhabalar("Ali", "Veli", "Ayse");
}
}
Merhaba AliMerhaba VeliMerhaba Ayse