Java Course (c)2001 Haluk Bingol

Download Report

Transcript Java Course (c)2001 Haluk Bingol

Java Programlama Dili - 02
Class'larla Programlama
•BU-SWE 510
•Fall 2003
Dr. Haluk Bingöl
BÜ - CmpE
[email protected]
meraklisina.com
© 2000-2003 Haluk Bingöl v2.23
İçerik
• Derleme
• Field, metod
• Nesneye dayalı programlama
• Uygulama ve Applet
meraklisina.com
2
Java’da Nesneye Dayalı
Programlama
meraklisina.com
3
Tipleme
meraklisina.com
4
CRC Gösterimi
Class, Responsibility, Collaborators (CRC)
Bisiklet
• Hız
• vites değiştir
• vites
• hızlan
• pedal çevirme hızı
• yavaşla
• dur
meraklisina.com
5
Class
• Nesnenin tanımı Class olarak yapılır
– Class (Hesap)
• Nesneler Class’ı kopyalayarak elde edilir
– Instance (kasaHesabı)
Nesne
11
Nesne
instance 2
Class
instance 1
meraklisina.com
6
Class ...
Hesap
•bakiye
/**
* Muhasebe hesabi
*/
public class Hesap {
• Hesap class’ı
}
Class
meraklisina.com
7
Class ...
Hesap
•bakiye
/**
* Muhasebe hesabi
*/
public class Hesap {
private double bakiye;
• Hesap class’ı
• veri
}
Class
– dışardan
görünmez
meraklisina.com
8
Class ...
Hesap
•bakiye
/**
* Muhasebe hesabi
*/
public class Hesap {
private double bakiye;
public Hesap(double acilisBakiyesi) {
bakiye = acilisBakiyesi;
}
}
Class
• Hesap class’ı
• veri
– dışardan
görünmez
• constructor
– parametreli
meraklisina.com
9
Class ...
Hesap
•bakiye
/**
* Muhasebe hesabi
*/
public class Hesap {
private double bakiye;
/* default constructor */
public Hesap() {
this(0.0);
}
public Hesap(double acilisBakiyesi) {
bakiye = acilisBakiyesi;
}
}
Class
• Hesap class’ı
• veri
– dışardan
görünmez
• constructor
– parametreli
– default
meraklisina.com
10
Instance
// hesap ac
Hesap kasa;
Hesap
•bakiye
0.0
kasa = new Hesap();
kasa
• Değişken tanımı
• instance
yaratma
meraklisina.com
11
Instance ...
// hesap ac
Hesap kasa;
kasa = new Hesap();
Hesap
Hesap
•bakiye
0.0
•bakiye
9.0
// ikinci hesabi ac
Hesap banka = new Hesap(9.0);
kasa
banka
• beraber
meraklisina.com
12
Instance ...
// hesap ac
Hesap kasa;
kasa = new Hesap();
Hesap
Hesap
•bakiye
0.0
•bakiye
9.0
// ikinci hesabi ac
Hesap banka = new Hesap(9.0);
kasa
kullanilanHesap
// degisken kullan
Hesap kullanilanHesap;
kullanilanHesap = kasa;
banka
• Değişkene
atama
meraklisina.com
13
Instance ...
// hesap ac
Hesap kasa;
kasa = new Hesap();
System.out.println("bakiye = "
+ kasa.getBakiye());
Hesap
•bakiye
0.0
Hesap
•bakiye
9.0
// ikinci hesabi ac
Hesap banka = new Hesap(9.0);
System.out.println("bakiye = "
+ banka.getBakiye());
bakiye = 0.0
bakiye = 9.0
bakiye = 0.0
banka
// degisken kullan
Hesap kullanilanHesap;
kasa
kullanilanHesap
out
kullanilanHesap = kasa;
• Veri saklama
– getBakiye()
System.out.println("bakiye = " + kullanilanHesap.getBakiye());
• Çıktı
– System.out
meraklisina.com
14
Instance ...
// hesap ac
Hesap kasa;
kasa = new Hesap();
System.out.println("bakiye = "
+ kasa.getBakiye());
Hesap
Hesap
•bakiye
9.0
•bakiye
0.0
•id
1
// ikinci hesabi ac
Hesap banka = new Hesap(9.0);
System.out.println("bakiye = "
+ banka.getBakiye());
// degisken kullan
•id
kasa
kullanilanHesap
2
banka
Hesap kullanilanHesap;
kullanilanHesap = kasa;
System.out.println("bakiye = " + kullanilanHesap.getBakiye());
• Bütün
instance'larda
ortak veri
– Hesap numarası
meraklisina.com
15
Class
public class Hesap {
private double bakiye;
private static int id = 0;
Hesap
•bakiye
public Hesap() {
this(0.0);
}
•getBakiye()
•setBakiye()
•id
public Hesap(double acilisBakiyesi) {
id++;
bakiye = acilisBakiyesi;
}
/* bakiye al */
public double getBakiye() {
return (bakiye);
}
/* bakiye düzelt */
public void setBakiye(double yeniBakiye) {
bakiye = yeniBakiye;
}
}
• Veriye ulaşmak
– getBakiye()
• Veriyi değiştirme
– setBakiye(7.5)
meraklisina.com
16
Veri Saklama
Hesap
•bakiye
•getBakiye()
•setBakiye()
•id
• Veriye ulaşmak
getBakiye()
bakiye
id
– getBakiye()
• Veriyi değiştirmek
setBakiye()
– setBakiye(7.5)
meraklisina.com
17
Veri Saklama ...
Hesap
•bakiye
•getBakiye()
•setBakiye()
•id
• Dışarısı
getBakiye()
bakiye
id
– identity
– arayüz
kasa
• getBakiye()
setBakiye()
• İçerisi
– veriler
• bakiye
– algoritma
meraklisina.com
18
Veri Saklama ...
// hesap ac
Hesap kasa;
public class Hesap {
//private double bakiye;
public double bakiye;
private static int id = 0;
kasa = new Hesap();
kasa.bakiye = 20;
public Hesap() {
this(0.0);
}
public Hesap(double acilisBakiyesi) {
id++;
bakiye = acilisBakiyesi;
System.out.println("hesap açıldı");
}
/* bakiye al */
public double getBakiye() {
return (bakiye);
}
/* bakiye düzelt */
public double setBakiye(double yeniBakiye) {
bakiye = yeniBakiye;
System.out.println("Bakiye düzeltildi: " + yeniBakiye);
}
}
• public-private
• Veriye direkt
ulaşmak
meraklisina.com
19
Nesne Temizliği
• Garbage Collector
– senkron / asenkron
– mark-swap algoritması
• referansı kalmamış instance'ları topla
–
System.gc()
• finalize() metod
– garbage collection öncesi çağrılır
meraklisina.com
20
AltSınıf
meraklisina.com
21
Hiyerarşi
meraklisina.com
22
AltSınıf ...
Dörtgenler
• Dörtgen şekiller
• Ortak özellikler
– 4 köşe
– 4 kenar
– çevre
– alan
• Ortak olmayan
özellikler
– dik açılar
– kenar
paralelliği
– kenar eşitliği
meraklisina.com
23
AltSınıf ...
Yardımcı Nesneler
public class Point {
double x;
double y;
public Point(double x, double y) {
this.x = x;
this.y = y;
}
• Point
• Kenar
public double distance(Point pA) {
double xKare = (x - pA.x) * (x - pA.x);
double yKare = (y - pA.y) * (y - pA.y);
return(Math.sqrt(xKare + yKare));
}
}
public class Kenar {
Point pA;
Point pB;
public Kenar(Point pA, Point pB) {
this.pA = pA;
this.pB = pB;
}
public double length() {
return(pA.distance(pB));
}
}
meraklisina.com
24
AltSınıf ...
Dörtgen
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;
}
• Dörtgen
– 4 köşe ile belli
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);
}
}
C
D
A
B
meraklisina.com
25
AltSınıf ...
Özel Bir dörtgen: Dikdörtgen
public class Dörtgen {
Point pA, pB, pC, pD;
public
DikDörtgen
public class
Dörtgen(Point
pA,{ Point pB, Point pC, Point pD) {
Point
pA,
pC;
this.pA = pA;
this.pB = pB;
this.pC = pC;
public
DikDörtgen(Point
pA, Point pC) {
this.pD
= pD;
this.pA = pA;
}
this.pC = pC;
}
}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);
}
• Dörtgen
– 4 köşe ile belli
• Dikdörtgen
– 2 köşe ile belli
D
C
A
B
}
meraklisina.com
26
AltSınıf ...
Özel Bir dörtgen: Dikdörtgen
public class Dörtgen {
Point pA, pB, pC, pD;
public Dörtgen(Point pA, Point pB, Point pC, Point pD) {
this.pA
= pA;
public class
DikDörtgen
extends Dörtgen{
this.pB = pB;
this.pC
= pC;
public
DikDörtgen(Point
pA, Point pC) {
this.pD
super(= pD;
}
pA,
new Point(pC.x, pA.y),
pC,
public double getÇevre()
{
new Point(pA.x,
pC.y)
double
c = 0;
)
c += pA.distance(pB);
}
c += pB.distance(pC);
c += pC.distance(pD);
}
c += pD.distance(pA);
return (c);
}
• Dikdörtgen,
dörtgenin özel
bir durumudur.
D
C
A
B
}
meraklisina.com
27
AltSınıf ...
Özel Bir dörtgen: Dikdörtgen
public class Dörtgen {
Point pA, pB, pC, pD;
public Dörtgen(Point pA, Point pB, Point pC, Point pD) {
this.pA
= pA;
public class
DikDörtgen
extends Dörtgen{
this.pB = pB;
this.pC
= pC;
public
DikDörtgen(Point
pA, Point pC) {
this.pD
super(= pD;
}
pA,
new Point(pA.x, pC.y),
pC,
public double getÇevre()
{
new Point(pC.x,
pA.y)
double
c = 0;
)
c += pA.distance(pB);
}
c += pB.distance(pC);
c += pC.distance(pD);
c +=double
pD.distance(pA);
public
getÇevre() {
return
(c);
double
c = 0;
}
c += Math.abs(pA.x - pC.x);
}
• Metod
Override
– yeniden
tanımla
D
C
A
B
c += Math.abs(pA.y - pC.y);
return (2 * c);
}
}
meraklisina.com
28
AltSınıf ...
Kalıtım Ağacı
• extends sadece bir sınıf
özelleştirilir
– bir baba
– bir ağaç elde edilir.
• Gösterim:
üstSınıf
altSınıf
meraklisina.com
29
AltSınıf ...
Kalıtım Çeşitleri
• Tekli kalıtım
– bir baba
– ağaç ?
– "extends class"
• Çoklu kalıtım
– bir çok baba
– döngüsüz yönlü grafik
– "implements interface"
meraklisina.com
30
Interface
meraklisina.com
31
Interface
• Protokol
• Sınıf hiyerarşisi
• Farklı hiyerarşideki sınıflar için ortak
yönler
• Nesnenin programlama arayüz tanımı
meraklisina.com
32
Interface ...
Interface - Çoklu Kalıtım
• Tam olarak çoklu kalıtım değil
– değişkenler kalıtılmıyor
– metodlar implementasyonu kalıtılmıyor
– interface hiyerarşisi sınıf hiyerarşisinden farklı
meraklisina.com
33
Interface ...
• Değişkenler
• Metodlar
– public
– public
– static
– abstract
– final
public interface MouseListener extends EventListener {
public void mouseClicked(MouseEvent e);
public void mouseEntered(MouseEvent e);
public void mouseExited(MouseEvent e);
public void mousePressed(MouseEvent e);
public void mouseReleased(MouseEvent e);
}
meraklisina.com
34
Interface ...
public interface Sleeper {
public void wakeUp();
public long ONE_SECOND = 1000;
public long ONE_MINUTE = 60000;
// in milliseconds
// in milliseconds
}
// service provider
public synchronized boolean letMeSleepFor(Sleeper theSleeper,
long time) {
int index = findNextSlot();
if (index == NOROOM) {
return false;
} else {
sleepers[index] = theSleeper;
sleepFor[index] = time;
new AlarmThread(index).start();
return true;
}
}
class GUIClock extends Applet implements Sleeper {
. . .
public void wakeUp() {
repaint();
clock.letMeSleepFor(this, ONE_MINUTE);
}
}
meraklisina.com
35
Interface Örnekler
meraklisina.com
36
Interface …
java.lang.Comparable
• Sıralama
• Karşılaştırma
public interface Comparable {
public int compareTo(Object o);
}
meraklisina.com
37
Interface …
java.lang.Runnable
• Bağımsız çalışabilme
• Thread
public interface Runnable {
public abstract void run();
}
meraklisina.com
38
Interface …
java.io.Serializable
• Nesne byte stream haline gelebilme
• Tekrar nesne haline gelebilme
• Kullanım
– Bir JVM'den diğerine aktarılabilme
– Durumu ile beraber saklanabilme
public interface Serializable {
}
meraklisina.com
39
Interface …
java.lang.Cloneable
• Kopyalanabilme
public interface Cloneable {
}
meraklisina.com
40
Özet
• Nesne - Class
• Lab
• Instance
• Veri saklama
• Kalıtım - AltSınıf
• Interface
meraklisina.com
41
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
42