Java Course (c)2001 Haluk Bingol

advertisement
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
Download