Java Programlama Dili - 04 Class, Field, Metod BU-SWE 510 Fall 2003 Dr. Haluk Bingöl BÜ - CmpE bingol@boun.edu.tr meraklisina.com © 2000-2003 Haluk Bingöl v2.23 Class meraklisina.com 3 Class • public – başka paketlerden kullanabilir • final public class ClassAdı { ... } final class ClassAdı { ... } abstract class ClassAdı { ... } – extend edilemez • abstract – şablon public final abstract class ClassAdı { } meraklisina.com 4 Class ... public Class • Herkes kullanabilir public class ClassAdı { ... } final class ClassAdı { ... } abstract class ClassAdı { ... } public final abstract class ClassAdı { } meraklisina.com 5 Class ... abstract Class • Soyut kavramlar için abstract class GeometrikŞekil { int x, y; • altSınıf implement edecek • instantiate edilmemeli abstract double getAlan(); abstract double getÇevre(); void moveTo(int yeniX, int yeniY){ } ... } meraklisina.com 6 Class ... final Class • altSınıf yapılamaz • kullanım final class Kare { ... } – güvenlik – tasarım • Örnek – java.lang.String meraklisina.com 7 Class ... Kullanım • Tanımlama – yeni nesne yaratmaz – değişkenin tipini belirtir Kare abcd; // declaration abcd = new Kare(pA, pB); // instantiation • instantiation – new constructor – constructor çağırır • initialization – constructor nesneyi yaratır meraklisina.com 8 Class ... Örnek meraklisina.com 9 Class ... Syntax meraklisina.com 10 Field, Metod, Constructor meraklisina.com 11 Field • Değişken – tip – ad – ilk değer • default değerler Tip boolean char byte, short, int, long float double object referans package com.meraklisina.muhasebe.ana; import com.meraklisina.muhasebe.fis.*; public class Hesap { static final int MAX = 100; static int a = 7; int b = 8; ... private Mahsup[] hMahsup = new Mahsup[MAX]; ... public static double kurus2TL(int kurus) { return (kurus/100); } ... } Değer false '\u0000' 0 +0.0f +0.0 null meraklisina.com 12 Field … Static • Class değişkeni – static field • Instance değişkeni • Blok değişkenleri package com.meraklisina.muhasebe.ana; import com.meraklisina.muhasebe.fis.*; public class Hesap { static final int MAX = 100; static int a = 7; int b = 8; ... private Mahsup[] hMahsup = new Mahsup[MAX]; ... public static double kurus2TL(int kurus) { package com.meraklisina.muhasebe.ana; return (kurus/100); ... } class ABC { ... ... } d = Hesap.MAX; d = Hesap.a; d = Hesap.b; // Hata ... Hesap hKasa = new Hesap(); d = hKasa.b; ... for (int i = 0; i < Hesap.MAX; i++) { ... } } ... meraklisina.com 13 Field … Static class AnIntegerNamedX { int x; public int x() { return x; } public void setX(int newX) { x = newX; } } . . . AnIntegerNamedX myX = new AnIntegerNamedX(); AnIntegerNamedX anotherX = new AnIntegerNamedX(); myX.setX(1); anotherX.x = 2; System.out.println("myX.x = " + myX.x()); System.out.println("anotherX.x = " + anotherX.x()); . . . meraklisina.com 14 Field … Static class AnIntegerNamedX { int x; public int x() { return x; } public void setX(int newX) { x = newX; } } class AnIntegerNamedX { static int x; public int x() { return x; } public void setX(int newX) { x = newX; } } . . . AnIntegerNamedX myX = new AnIntegerNamedX(); AnIntegerNamedX anotherX = new AnIntegerNamedX(); myX.setX(1); anotherX.x = 2; System.out.println("myX.x = " + myX.x()); System.out.println("anotherX.x = " + anotherX.x()); . . . meraklisina.com 15 Field … final • final field package com.meraklisina.muhasebe.ana; import com.meraklisina.muhasebe.fis.*; public class Hesap { static final int MAX = 100; static int a = 7; int b = 8; ... private Mahsup[] hMahsup = new Mahsup[MAX]; ... public static double kurus2TL(int kurus) { package com.meraklisina.muhasebe.ana; return (kurus/100); ... } class ABC { ... ... } Hesap.MAX = 3; // Hata Hesap.a = 3; Hesap.b = 3; // Hata ... Hesap hKasa = new Hesap(); hKasa.b = 3; ... } ... meraklisina.com 16 Field … Perdeleme • Içeride tanımlanan, dışarıdakini perdeler class Test { static int x = 1; public static void main(String[] args) { int x = 0; System.out.print("x=" + x); System.out.println(", Test.x=" + Test.x); System.out.println(", this.x=" + this.x); } } x=0, Test.x=1 meraklisina.com 17 Field ... Syntax meraklisina.com 18 Metod • static – class için • final – değişmez • abstract – subclass için şablon package com.meraklisina.muhasebe.ana; import com.meraklisina.muhasebe.fis.*; public class Hesap { static final int MAX = 100; ... private Mahsup[] hMahsup = new Mahsup[MAX]; ... public static double kurus2TL(int kurus) { return (kurus/100); } ... } • synchronized – thread • native – java dışı diller • erişilirlik – – – – public protected private package (default) meraklisina.com 19 Metod ... Syntax meraklisina.com 20 Metod Overload public class Hesap { /* ? */ public double setBakiye(double yeniBakiye) { ... } • Aynı adlı metodlar • imza /* ? */ public int setBakiye(double yeniBakiye, String kim) { ... } /* ? */ public double setBakiye(double yeniBakiye, String kim) { ... } /* ? */ public String setBakiye(double yeniBakiye, String kim) { ... } } meraklisina.com 21 Metod Overload ... • Aynı adlı metodlar – Aynı tip geri dönüş – farklı imzalar • İmza – metodAdı+parametreTipleri setBakiye, double setBakiye, double, String setBakiye, String, double meraklisina.com 22 Metod Overload … Doğru Metodu Bulma /* * Algoritma için: * Java Programming Language, 3e * Arnold, Gosling, Holmes * p174 */ // tanımlamalar void moorge(Dessert d, Scone s) void moorge(Cake c, Dessert d) void moorge(ChocolateCake cc, Scone s) Dessert // form 1 // form 2 // form 3 // çağrılar moorge(dessertRef, sconeRef); moorge(chocolateCakeRef, dessertRef); moorge(chocolateCakeRef, butteredSconeRef); // 1 // 2 // 3 moorge(cakeRef, sconeRef); // 1 ve 2 Cake Scone Chocolate Cake Buttered Scone meraklisina.com 23 Metod Override public class Dörtgen { Point pA, pB, pC, pD; • Aynı imza public Dörtgen(Point pA, Point pB, Point pC, Point pD) { this.pA = pA; this.pB = pB; this.pC = pC; this.pD = pD; } public double getÇevre() { double c = 0; c += pA.distance(pB); c += pB.distance(pC); c += pC.distance(pD); c += pD.distance(pA); return (c); } } meraklisina.com 24 Metod Override ... • Aynı imza public class Dörtgen { Point pA, pB, pC, pD; public Dörtgen(Point pA, Point pB, Point pC, Point pD) { this.pA = pA; this.pB = pB; this.pC = pC; this.pD = pD; public class DikDörtgen extends Dörtgen{ } public DikDörtgen(Point pA, Point pC) { super( pA, new Point(pA.x, pC.y), pC, new Point(pC.x, pA.y) ) } public double getÇevre() { double c = 0; c += pA.distance(pB); c += pB.distance(pC); c += pC.distance(pD); c += pD.distance(pA); return (c); } } public double getÇevre() { double c = 0; c += Math.abs(pA.x - pC.x); c += Math.abs(pA.y - pC.y); return (2 * c); } } meraklisina.com 25 Metod Override ... • abstract metod – override edilmeli • final metod – override edilemez meraklisina.com 26 Constructor • Metod gibi ama tipi yok package java.awt; ... public class Rectangle { • int x, y, width, height; • Rectangle() { • this(0,0,0,0); • } • Rectangle(int width, int height) { • this(0,0,width,height); • } • Rectangle(int x, int y, int width, int height) { • this.x = x; • this.y = y; • this.width = width; • this.height = height; • } • ... } meraklisina.com 27 Parametre Geçişi meraklisina.com 28 Parametre Geçişi ... ParamPass paramPassA = new ParamPass(); ... int renk; ... renk = 1; paramPassA.value(renk); System.out.println("renk: " + renk); ... class ParamPass{ • Tipler – primitive public value(int a) { a = 7; System.out.println("a: " + a); } } meraklisina.com 29 Parametre Geçişi ... ... ParamPass paramPassA = new ParamPass(); ... Renk renk = new Renk(); ... renk.deger = 6; paramPassA.value(renk); System.out.println("renk: " + renk.deger); ... class ParamPass{ class Renk { public int deger; } • Tipler – primitive – reference public value(Renk a) { a.deger = 7; System.out.println("a.deger: " + a.deger); } } meraklisina.com 30 this, super public class Renk { int red, blue, green; • this public Renk(int red, int blue, int green) { this.red = red; this.blue = blue; this.green = green; } – nesnenin kendisi • super – nesnenin "babası" } public class MaviTonları extends Renk { public MaviTonları (int blue) { super(0, blue, 0); } } meraklisina.com 31 Object Sınıfı meraklisina.com 32 Object Sınıfı • Object bütün sınıfların super'idir • metodları – equals(Object o) • AltSınıflar override etmeli • eşit eğer işlevsel olarak eşit – getClass() – toString() – clone() meraklisina.com 33 Java’nın Derleme Yapısı meraklisina.com 34 Derleme Sistemi public class Hesap { ... } • .java file – bir public class – 0 veya daha çok public olmayan class class HesapAdi { ... } class HesapFaizle { ... } • File adı Hesap.java – publicClassAdı.java javac HesapFaizle .class HesapAdi .class Hesap .class – classAdı.class meraklisina.com 35 Package Yapısı • Dizin com/meraklisina/muhasebe/fis/Mahsup.cl ass com/meraklisina/muhasebe/fis/Kasa.clas s com/meraklisina/muhasebe/ana/Hesap.cla ss • package – Her class bir paket içindedir package com.meraklisina.muhasebe.fis; public class Mahsup { ... } package com.meraklisina.muhasebe.fis; public class Kasa { ... } package com.meraklisina.muhasebe.ana; class HesapAdi { ... import com.meraklisina.muhasebe.fis.*; } public class Hesap { class HesapFaizle { Mahsup[] hMahsup = new Mahsup[100]; ... ... } } javac • adlı paket com.meraklisina.muhasebe.fis.Mahsup ana Hesap .class • import Mahsup .class • adsız paket (default) Kasa .class fis Mahsup meraklisina.com 36 Erişilirlik meraklisina.com 37 Erişilirlik ve package • public • protected – subclass • private package com.meraklisina.muhasebe.ana; import com.meraklisina.muhasebe.fis.*; public class Hesap { static final int MAX = 100; ... private Mahsup[] hMahsup = new Mahsup[MAX]; ... public static double kurus2TL(int kurus) { return (kurus/100); } ... } – sadece tanımlayan class • package (default) ana Hesap .class Mahsup .class – paket içinde Kasa .class fis meraklisina.com 38 Erişilirlik ... Erişilirlik private protected public package class subClass package world ? meraklisina.com 39 Konvansiyon • package – internet adresi tersten – ilk harf küçük • class – ilk harf büyük • field package com.meraklisina.muhasebe.ana; import com.meraklisina.muhasebe.fis.*; public class Hesap { ... private Mahsup[] hMahsup = new Mahsup[100]; ... public static double kurus2TL(int kurus) { return (kurus/100); } ... } – ilk harf küçük • metod – ilk harf küçük meraklisina.com 40 Kaynaklar • The Java Programming Language, 3e Arnold, Gosling, Holmes Addison-Wesley, 2000 • The Java Tutorial Object-Oriented Programming for the Internet Campione, Walrath Addison-Wesley, 1996 • Java How to Program, 3e Dietel & Dietel Prentice Hall, 1999 meraklisina.com 41 Özet • Class • this, super • Field • Object • Metod • Derleme sistemi – Overload – Override • Constructor • Parametre geçişi • Erişilirik • Lab meraklisina.com 42