SlideShare a Scribd company logo
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Java Programlama Dili
Sınıflar
Tevfik AKTUĞLU
ta-java.blogspot.com
Mart 2016
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
İçerik
1 Sınıflar
Sınıf Tanımı
Yapıcılar
Özel Metotlar
2 Paketler
Sınıf Yolu
Java Arşiv Dosyaları
3 Sınama
Sınama Programı
Eniyileme
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Nesne Şablonu Olarak Sınıf Blog makalesi
public class SınıfAdı {
// Davranışsal öğeler
// Melez öğeler
// Veri öğeleri
} // SınıfAdı sınıfının sonu
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Problem Tanımı
Amaç
Sinyal işleme paketi gerçekleştiren yazılım grubunuzun karmaşık
sayı desteği ihtiyacının kullanmakta olduğunuz Java ortamına
eklenmesi.
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Problem Tanımı
Amaç
Sinyal işleme paketi gerçekleştiren yazılım grubunuzun karmaşık
sayı desteği ihtiyacının kullanmakta olduğunuz Java ortamına
eklenmesi.
0 Gerçel
Sanal |X
|=√
a2
+
b2
X = (a + bi)
|X| sinθ
|X| cosθ
a
b
θ
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Paket Tanımı Blog makalesi
package etk.matematik.kartezyen;
...
public class KarmaşıkSayı { ... }
Paket adı: etk.matematik.kartezyen
Sınıfın kısa adı: KarmaşıkSayı
Sınıfın uzun adı: etk.matematik.kartezyen.KarmaşıkSayı
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Davranışsal Öğeler: Metotlar
Yordamsal Programlamanın Tortuları-1
public class KS {
...
public static KS böl(KS sol, KS sağ) { ... }
public static KS çarp(KS sol, KS sağ) { ... }
public static KS çıkar(KS sol, KS sağ) { ... }
public static KS eşlenik(KS kSayı) { ... }
public static KS topla(KS sol, KS sağ) { ... }
...
} // KS sınıfının sonu
Yordamsal programlamanın etkisinde kalmış bu deneme, nesne
paradigmasındaki ileti gönderme işleminin ve bu işlem sırasında
özel bir görev üstlenen ileti alıcının varlığından habersiz.
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Davranışsal Öğeler: Metotlar
Yordamsal Programlamanın Tortuları-2
public class KS {
...
public KS böl(KS iletiAlıcı, KS sağ) { ... }
public KS çarp(KS iletiAlıcı, KS sağ) { ... }
public KS çıkar(KS iletiAlıcı, KS sağ) { ... }
public KS eşlenik(KS iletiAlıcı) { ... }
public KS topla(KS iletiAlıcı, KS sağ) { ... }
...
} // KS sınıfının sonu
Doğru yönde bir ilerleme fakat derleyicinin de ileti alıcının özel
konumunun ayırdında olduğu unutulmuş.
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Davranışsal Öğeler: Metotlar
Nesne Paradigmasına Hoşgeldiniz
public class KarmaşıkSayı {
...
public KarmaşıkSayı böl(KarmaşıkSayı sağ) { ... }
public KarmaşıkSayı çarp(KarmaşıkSayı sağ) { ... }
public KarmaşıkSayı çıkar(KarmaşıkSayı sağ) { ... }
public KarmaşıkSayı eşlenik() { ... }
public KarmaşıkSayı topla(KarmaşıkSayı sağ) { ... }
...
} // KarmaşıkSayı sınıfının sonu
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Davranışsal Öğeler: Metotlar
Nesne Paradigmasına Hoşgeldiniz
public class KarmaşıkSayı {
...
public KarmaşıkSayı böl(KarmaşıkSayı sağ) { ... }
public KarmaşıkSayı çarp(KarmaşıkSayı sağ) { ... }
public KarmaşıkSayı çıkar(KarmaşıkSayı sağ) { ... }
public KarmaşıkSayı eşlenik() { ... }
public KarmaşıkSayı topla(KarmaşıkSayı sağ) { ... }
...
} // KarmaşıkSayı sınıfının sonu
KarmaşıkSayı ks1 = new KarmaşıkSayı(...);
KarmaşıkSayı ks2 = new KarmaşıkSayı(...);
...
KarmaşıkSayı toplam = ks1.topla(ks2); // ks1: ileti alıcı
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Melez Öğeler: Öznitelikler
Gerçel Sanal Norm Açı
4 3 - - Norm =
√
42 + 32 , Açı =atan2(3, 4)
4 - - 37◦ Sanal =4tan37◦, Norm =4/cos37◦
- 3 - 37◦ Gerçel =3/tan37◦, Norm =3/sin37◦
- - 5 37◦ Gerçel =5cos37◦, Sanal =5sin37◦
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Melez Öğeler: Öznitelikler
Gerçel Sanal Norm Açı
4 3 - - Norm =
√
42 + 32 , Açı =atan2(3, 4)
4 - - 37◦ Sanal =4tan37◦, Norm =4/cos37◦
- 3 - 37◦ Gerçel =3/tan37◦, Norm =3/sin37◦
- - 5 37◦ Gerçel =5cos37◦, Sanal =5sin37◦
public class KarmaşıkSayı {
...
public double getAçı() { ... }
public double getGerçel() { ... }
public double getNorm() { ... }
public double getSanal() { ... }
...
} // KarmaşıkSayı sınıfının sonu
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Metot Gerçekleştirimi
Toplama
c + d = {x + iy | x = gerçel(c) + gerçel(d), y = sanal(c) + sanal(d)}
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Metot Gerçekleştirimi
Toplama
c + d = {x + iy | x = gerçel(c) + gerçel(d), y = sanal(c) + sanal(d)}
public KarmaşıkSayı topla(KarmaşıkSayı sağ) {
double x = this.getGerçel() + sağ.getGerçel();
double y = getSanal() + sağ.getSanal();
return(new KarmaşıkSayı(x, y));
} // KarmaşıkSayı topla(KarmaşıkSayı) sonu
this: İleti alıcının metot gövdesi içindeki öntanımlı adı
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Metot Çağrısının Çözümlenmesi
ks1.topla(ks2)
...
ks1
ks2
...
this
sağ
...
çağıran metot
KarmaşıkSayı.topla
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Metot Gerçekleştirimi
Çarpma
c ∗ d = {y∠x | x = açı(c) + açı(d), y = norm(c) ∗ norm(d)}
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Metot Gerçekleştirimi
Çarpma
c ∗ d = {y∠x | x = açı(c) + açı(d), y = norm(c) ∗ norm(d)}
public KarmaşıkSayı çarp(KarmaşıkSayı sağ) {
double x = getAçı() + sağ.getAçı();
double y = getNorm() * sağ.getNorm();
return(new KarmaşıkSayı(x, y, KUTUPSAL));
} // KarmaşıkSayı çarp(KarmaşıkSayı) sonu
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Veri Öğeleri: Altalanlar
Müsrif Bir Seçenek
public double getAçı() { return _açı; }
public double getGerçel() { return _gerçel; }
public double getNorm() { return _norm; }
public double getSanal() { return _sanal; }
...
private double _açı, _gerçel, _norm, _sanal;
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Veri Öğeleri: Altalanlar
Kartezyen Altalanlar
public double getAçı()
{ return Math.atan2(_sanal, _gerçel); }
public double getGerçel() { return _gerçel; }
public double getNorm()
{ return Math.hypot(_gerçel, _sanal); }
public double getSanal() { return _sanal; }
...
private double _gerçel, _sanal;
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Veri Öğeleri: Altalanlar
Kutupsal Altalanlar
public double getAçı() { return _açı; }
public double getGerçel()
{ return _norm * Math.cos(_açı); }
public double getNorm() { return _norm; }
public double getSanal()
{ return _norm * Math.sin(_açı); }
...
private double _açı, _norm;
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Altalanların Seçimi
Neden private?
Altalanların seçimi gerçekleştirim ayrıntısıdır. Dolayısıyla, çok iyi bir
sebep olmadıkça private tanımlanmalıdır.
? mt1
mt2
mt3
mt4
ileti
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Altalanların Seçimi
Neden private?
Altalanların seçimi gerçekleştirim ayrıntısıdır. Dolayısıyla, çok iyi bir
sebep olmadıkça private tanımlanmalıdır. Hesaba katılması
gereken durumlar şunlardır:
Altalanın sabit olması durumunda public tanımlanması
mantıklı olabilir.
Sınıftan kalıtlamanın olası görüldüğü durumlarda, altalan
protected tanımlanabilir.
? mt1
mt2
mt3
mt4
ileti
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Paylaşılan Öğeler
public class KarmaşıkSayı {
static {
_yazımBiçimi = KarmaşıkSayı.KARTEZYEN;
} // sınıf ilkleme bloğunun sonu
...
public static void setYazımBiçimi(int yeniBiçim) {
if (yeniBiçim == KARTEZYEN || yeniBiçim == KUTUPSAL)
_yazımBiçimi = yeniBiçim;
} // void setYazımBiçimi(int)
...
public static final int KARTEZYEN = 1;
public static final int KUTUPSAL = 2;
private static int _yazımBiçimi;
private double _gerçel, _sanal;
} // KarmaşıkSayı sınıfının sonu
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Sınıf İlkleme Bloğu Nesne İlkleme
Sınıf İlkleme Bloğu
Sınıf ilkleme bloğu, sınıfın program içinde ilk kullanıldığı noktada
çalıştırılır. Sınıfın kullanılması iki şekilde söz konusu olabilir:
Sınıfa ait bir nesnenin yaratılması
Sınıfın static öğelerinden birinin kullanılması
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Yapıcılar Nesne İlkleme
Sınıf ile aynı ada sahiptirler.
Dönüş türüne sahip değildirler.
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Yapıcılar Nesne İlkleme
Sınıf ile aynı ada sahiptirler.
Dönüş türüne sahip değildirler.
new işlecinin kullanımı sonrasında, yığın bellekten yer
ayrılmasını takiben, yaratılmakta olan nesnenin ilklenmesini
sağlarlar.
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Yapıcılar Nesne İlkleme
Sınıf ile aynı ada sahiptirler.
Dönüş türüne sahip değildirler.
new işlecinin kullanımı sonrasında, yığın bellekten yer
ayrılmasını takiben, yaratılmakta olan nesnenin ilklenmesini
sağlarlar.
İlklenmeyen altalanlar, ilişkin türün varsayılan değeriyle ilklenir.
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Yapıcılar Nesne İlkleme
Sınıf ile aynı ada sahiptirler.
Dönüş türüne sahip değildirler.
new işlecinin kullanımı sonrasında, yığın bellekten yer
ayrılmasını takiben, yaratılmakta olan nesnenin ilklenmesini
sağlarlar.
İlklenmeyen altalanlar, ilişkin türün varsayılan değeriyle ilklenir.
Programcı tarafından hiçbir yapıcı sağlanmaması durumunda,
Java derleyicisi altalanların tümünü varsayılan değerlerle
ilkleyen bir yapıcı sentezler.
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Yapıcılar
Açık Yapıcı Çağrısı
public KarmaşıkSayı(double grçl, double snl) {
_gerçel = grçl;
_sanal = snl;
} // yapıcı(double, double) sonu
public KarmaşıkSayı(double grçl) { this(grçl, 0); }
...
private double _gerçel, _sanal;
Açık yapıcı çağrısı metodun içindeki ilk komut olarak yapılmalıdır.
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Yapıcılar
Esnek Bir Yapıcı
public KarmaşıkSayı(double p1, double p2, int yöntem) {
if (yöntem == KUTUPSAL) {
_gerçel = p1 * Math.cos(p2);
_sanal = p1 * Math.sin(p2);
} else { _gerçel = p1; _sanal = p2; }
} // yapıcı(double, double, int) sonu
...
private double _gerçel, _sanal;
else kolunun this(p1, p2); olarak değiştirilmesi derleyici
hatasına neden olacaktır.
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Önemli Yapıcılar
Varsayılan yapıcı: Argümansız çağrılan yapıcı
public KarmaşıkSayı() { _gerçel = _sanal = 0; }
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Önemli Yapıcılar
Varsayılan yapıcı: Argümansız çağrılan yapıcı
public KarmaşıkSayı() { _gerçel = _sanal = 0; }
Kopyalayan yapıcı: Argümanındaki nesneyi kullanarak ilkleyen
yapıcı
public KarmaşıkSayı(KarmaşıkSayı varolan) {
_gerçel = varolan.getGerçel();
_sanal = varolan.getSanal();
} // yapıcı(KarmaşıkSayı) sonu
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Fabrika Metotları
Kartezyen Fabrika
public static final KarmaşıkSayı
BİR = new KarmaşıkSayı(1), SIFIR = new KarmaşıkSayı();
public static KarmaşıkSayı
kartezyenÖrnek(double grçl, double snl) {
return snl == 0 ? kartezyenÖrnek(grçl)
: new KarmaşıkSayı(grçl, snl);
} // KarmaşıkSayı kartezyenÖrnek(double, double)
public static KarmaşıkSayı kartezyenÖrnek(double grçl) {
if (grçl == 0) return SIFIR;
if (grçl == 1) return BİR;
return new KarmaşıkSayı(grçl, 0);
} // KarmaşıkSayı kartezyenÖrnek(double)
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Fabrika Metotları
Kutupsal Fabrika
public static KarmaşıkSayı
kutupsalÖrnek(double norm, double açı) {
double grçl = norm * Math.cos(açı);
double snl = norm * Math.sin(açı);
return new KarmaşıkSayı(grçl, snl);
} // KarmaşıkSayı kutupsalÖrnek(double, double)
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Fabrika Metotları
Küçük Bir Not
KarmaşıkSayı bir1 = new KarmaşıkSayı(1);
KarmaşıkSayı bir2 = KarmaşıkSayı.KartezyenÖrnek(1);
KarmaşıkSayı bir3 = KarmaşıkSayı.KutupsalÖrnek(1, 0);
KarmaşıkSayı bir4 = KarmaşıkSayı.BİR;
...
boolean aynıMı = bir2 == bir3; // aynıMı ← true
aynıMı = bir2 == bir4; // aynıMı ↞ true
aynıMı = bir1 == bir3; // aynıMı ↞ false!
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Fabrika Metotları
Küçük Bir Not
KarmaşıkSayı bir1 = new KarmaşıkSayı(1);
KarmaşıkSayı bir2 = KarmaşıkSayı.KartezyenÖrnek(1);
KarmaşıkSayı bir3 = KarmaşıkSayı.KutupsalÖrnek(1, 0);
KarmaşıkSayı bir4 = KarmaşıkSayı.BİR;
...
boolean aynıMı = bir2 == bir3; // aynıMı ← true
aynıMı = bir2 == bir4; // aynıMı ↞ true
aynıMı = bir1 == bir3; // aynıMı ↞ false!
Yukarıdaki gibi çelişkilerin ortaya çıkmaması için, fabrika
metotlarının varlığında yapıcılara erişimin kısıtlanması ve nesne
yaratmanın fabrika metotları yoluyla yapılması beklenir.
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Eşitlik Denetimi
public boolean equals(Object sağTaraf) {
KarmaşıkSayı sağKS = (KarmaşıkSayı) sağTaraf;
if (getGerçel() == sağKS.getGerçel() &&
getSanal() == sağKS.getSanal())
return true;
else return false;
} // boolean equals(Object) sonu
equals iletisi her türden nesneye gönderilebileceği için
imzasının tüm türleri kapsayacak şekilde tanımlanması gerekir.
Bundan dolayı, argümanın türü tüm türlerin ortak özelliklerini
barındıran Object olarak seçilmiştir.
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Eşitlik Denetimi
public boolean equals(Object sağTaraf) {
KarmaşıkSayı sağKS = (KarmaşıkSayı) sağTaraf;
if (getGerçel() == sağKS.getGerçel() &&
getSanal() == sağKS.getSanal())
return true;
else return false;
} // boolean equals(Object) sonu
equals iletisi her türden nesneye gönderilebileceği için
imzasının tüm türleri kapsayacak şekilde tanımlanması gerekir.
Bundan dolayı, argümanın türü tüm türlerin ortak özelliklerini
barındıran Object olarak seçilmiştir.
Denetlenen iki KarmaşıkSayı nesnesi olduğu için, geçirilen
argümanın ilk iş olarak biçimlendirilmesi gerekir.
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Karşılaştırma
Karmaşık sayıların öncelik/sonralık ilişkisine sahip olmaması
nedeniyle bu işlevi gerçekleştirmemiz gerekmiyor. Dikkat ederseniz,
karşılaştırma, eşitlik denetiminin aksine, tüm sınıflar tarafından
kullanılabilecek bir işlem değildir. Dolayısıyla, equals’ta olduğu
gibi Object sınıfının sağladığı varsayılan bir karşılaştırma
metodundan da bahsedilemez.
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Hoş Yazım
public String toString() {
if (_yazmaBiçimi == KARTEZYEN)
return kartezyenGösterim();
else return kutupsalGösterim();
} // String toString() sonu
...
private String kartezyenGösterim() {
if (getSanal() == 0) return("" + getGerçel());
if (getGerçel() == 0) return("" + getSanal() + "i");
String işaret = _sanal < 0 ? " - " : " + ";
return("(" + _gerçel + işaret + Math.abs(_sanal) + "i)");
} // String kartezyenGösterim() sonu
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Tanımı
Yapıcılar
Özel Metotlar
Hoş Yazım
public String toString() {
if (_yazmaBiçimi == KARTEZYEN)
return kartezyenGösterim();
else return kutupsalGösterim();
} // String toString() sonu
...
private String kutupsalGösterim() {
return("(" + getNorm() + " : " + getAçı() + ")");
} // String kutupsalGösterim() sonu
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Yolu
Java Arşiv Dosyaları
İçerik
1 Sınıflar
Sınıf Tanımı
Yapıcılar
Özel Metotlar
2 Paketler
Sınıf Yolu
Java Arşiv Dosyaları
3 Sınama
Sınama Programı
Eniyileme
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Yolu
Java Arşiv Dosyaları
Tür Adı Çakışması Blog makalesi
abc şirketi def şirketi
Tablo.java Derleyici Tablo.class Tablo.class Derleyici Tablo.java
müşteri
Tablo.class Tablo.class
Prog.java Derleyici Prog.class?
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Yolu
Java Arşiv Dosyaları
Tür Adı Çakışması Blog makalesi
abc şirketi def şirketi
Tablo.java Derleyici Tablo.class Tablo.class Derleyici Tablo.java
müşteri
Tablo.class Tablo.class
Prog.java Derleyici Prog.class?
Gerçekleştirimciler türlerini birbirlerine danışarak adlandırabilirler 
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Yolu
Java Arşiv Dosyaları
Tür Adı Çakışması Blog makalesi
abc şirketi def şirketi
Tablo.java Derleyici Tablo.class Tablo.class Derleyici Tablo.java
müşteri
Tablo.class Tablo.class
Prog.java Derleyici Prog.class?
Gerçekleştirimciler kaynak kodlarını müşterilerine sağlayabilirler 
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Yolu
Java Arşiv Dosyaları
Tür Adı Çakışması Blog makalesi
abc şirketi def şirketi
Tablo.java Derleyici Tablo.class Tablo.class Derleyici Tablo.java
müşteri
Tablo.class Tablo.class
Prog.java Derleyici Prog.class?
Tür adları kaynaklarını vurgulayacak şekilde nitelenmeli 
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Yolu
Java Arşiv Dosyaları
Tür Adı Çakışması
Çözüm
package tr.com.abc;
public class Tablo { ... }
package tr.com.def;
public class Tablo { ... }
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Yolu
Java Arşiv Dosyaları
Sınıf Dosyaların Olası Disk Konumları
1 Sınıfın uzun adı içinde geçen ’.’ imleri yol bileşeni ayırıcı
karakteri ile değiştirilir.
tr.com.def.vy paketindeki Tablo sınıfı
tr/com/def/vy/Tablo.class haline dönüştürülecektir.
Sınıfın bir pakete yerleştirilmemiş olması durumunda ise sınıfın
adı değiştirilmeden bırakılır.
Yol bileşeni ayırıcı karakteri, Unix temelli işletim dizgelerinde
‘/’, Microsoft işletim dizgelerinde ‘’ imidir.
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Yolu
Java Arşiv Dosyaları
Sınıf Dosyaların Olası Disk Konumları
1 Sınıfın uzun adı içinde geçen ’.’ imleri yol bileşeni ayırıcı
karakteri ile değiştirilir.
2 Birinci adımda elde edilen değer java.class.path adlı sistem
özelliğinin değeriyle ikisinin ortasına ‘/’ konularak birleştirilir.
Varsayılan değeri . (o anda içinde bulunulan dizin) olan bu
sistem özelliği, kullanıcıya özel CLASSPATH ortam değişkeninin
tanımlanmış olması durumunda bu ortam değişkeninin değerine
sahip olur.
CLASSPATH ortam değişkeninin komut satırında uygun bir
opsiyonla ezilmesi durumunda ise java.class.path bu
opsiyonda sağlanan değere sahip olacaktır.
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Yolu
Java Arşiv Dosyaları
Sınıf Dosyaların Olası Disk Konumları
1 Sınıfın uzun adı içinde geçen ’.’ imleri yol bileşeni ayırıcı
karakteri ile değiştirilir.
2 Birinci adımda elde edilen değer java.class.path adlı sistem
özelliğinin değeriyle ikisinin ortasına ‘/’ konularak birleştirilir.
3 Sınıf yolu birden çok değere sahip olabilir. Bu durumda, sınıf
yolunun ilk değerinden başlayarak tüm değerler sırayla denenir.
Dosyanın bulunması sonrasında, arama sonlandırılır ve geri
kalan sınıf yolu değerleri göz ardı edilir.
Ortam değişkenlerinin çoklu değere sahip olması durumunda,
bu değerler Unix temelli işletim dizgelerinde ’:’, Microsoft
işletim dizgelerinde ’;’ ile birbirinden ayrılır.
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Yolu
Java Arşiv Dosyaları
Sınıf Dosyaların Olası Disk Konumları
Örnek
CLASSPATH Sınıf adı Sınıfın paketi Sınıf dosyasının diskteki adı
Tanımsız Tablo tr.com.abc.sanat $PWD/tr/com/abc/sanat/Tablo.class
Varsayılan paket $PWD/Tablo.class
/ortak:/lib Tablo tr.com.def.vy /ortak/tr/com/def/vy/Tablo.class
/lib/tr/com/def/vy/Tablo.class
Varsayılan paket /ortak/Tablo.class
/lib/Tablo.class
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Yolu
Java Arşiv Dosyaları
Derleyici Opsiyonları
-d: Sınıf dosyalarının kaynak dosyadan farklı bir dizine
yerleştirilmesi için derleyicinin -d opsiyonu kullanılabilir.
Örneğin, aşağıdaki komutla tr.com.abc.sanat paketine
konulmuş Tablo sınıfı derlendikten sonra oluşturulacak dosya
/opt/Java Paketleri/tr/com/abc/sanat dizinine konulacaktır.
javac -d /opt/Java Paketleri Tablo.java
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Yolu
Java Arşiv Dosyaları
Derleyici Opsiyonları
-d: Sınıf dosyalarının kaynak dosyadan farklı bir dizine
yerleştirilmesi için derleyicinin -d opsiyonu kullanılabilir.
Örneğin, aşağıdaki komutla tr.com.abc.sanat paketine
konulmuş Tablo sınıfı derlendikten sonra oluşturulacak dosya
/opt/Java Paketleri/tr/com/abc/sanat dizinine konulacaktır.
javac -d /opt/Java Paketleri Tablo.java
-cp: O anki CLASSPATH ortam değişkeni yerine kullanılacak
değeri belirler.
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Yolu
Java Arşiv Dosyaları
Aynı Adlı İki Türün Kullanılması
import tr.com.def.vy.Tablo;
public class Prog {
public static void main(String[] ksa) {
tr.com.abc.sanat.Tablo
monaLisa = new tr.com.abc.sanat.Tablo(...);
Tablo sergidekiEserler = new Tablo(...);
sergidekiEserler.ekle(monaLisa);
...
} // void main(String[]) sonu
...
} // Prog sınıfının sonu
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Yolu
Java Arşiv Dosyaları
Standart Sınıf Dosyalarının Konumu
java -verbose SayıTahmini
[Opened /usr/lib/jvm/java-8-oracle/jre/lib/rt.jar]
[Loaded java.lang.Object from
/usr/lib/jvm/java-8-oracle/jre/lib/rt.jar]
[Loaded java.io.Serializable from
/usr/lib/jvm/.../rt.jar]
[Loaded java.lang.Comparable from
/usr/lib/jvm/.../rt.jar]
...
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Yolu
Java Arşiv Dosyaları
Java Arşiv Dosyaları Blog makalesi
a.java Derleyici *.class
b.java Derleyici *.class
...
...
... Arşivci .jar
...
...
...
z.java Derleyici *.class
jar cf ABCArşiv.jar a.class b.class ... z.class
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Yolu
Java Arşiv Dosyaları
Sınıf Yolu ve JAR Dosyaları
Arşiv dosyasının mutlak konumu sınıf yolu içinde bulunmalı.
Bir sınıf dosyasının aranması bağlamında, arşiv dosyasına sıra
geldiyse arşiv geçici olarak bulunduğu dizinin içine açılır.
Sınıf dosyasının aranması geçici olarak açılan dosya sıradüzeni
içinde sürer.
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Yolu
Java Arşiv Dosyaları
Bazı Sistem Özellikleri ve Ortam Değişkenleri
Özellik Anlamı
java.class.path Yararlanılan türlerin depolandığı dizinler.
java.home Java kurulumunun kökdizini.
java.version Kullanılmakta olan Java sürümü.
CLASSPATH Yararlanılan türlerin depolandığı dizinler.
JAVA_HOME Java kurulumunun kökdizini.
PATH Dışsal komutların bulunduğu dizinler.
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Yolu
Java Arşiv Dosyaları
Çalışma Ortamının Keşfi
import static java.lang.System.out;
public class PlatformKaşifi {
public static void main(String[] ksa) {
String tür = System.getProperty(sorguTürü);
if (tür == null || tür.equals(ortam))
out.println(ksa[0] + :  + System.getenv(ksa[0]));
else if (tür.equals(sistem))
out.println(ksa[0] + :  +
System.getProperty(ksa[0]));
else out.println(Bilinmeyen sorgu türü:  + tür);
} // void main(String[])
} // PlatformKaşifi sınıfının sonu
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınıf Yolu
Java Arşiv Dosyaları
Çalışma Ortamının Keşfi
Sınama
javac -encoding utf8 PlatformKaşifi.java
java PlatformKaşifi PATH
PATH: ...
java -DsorguTürü =sistem PlatformKaşifi
java.class.path
java.class.path: ...
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınama Programı
Eniyileme
İçerik
1 Sınıflar
Sınıf Tanımı
Yapıcılar
Özel Metotlar
2 Paketler
Sınıf Yolu
Java Arşiv Dosyaları
3 Sınama
Sınama Programı
Eniyileme
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınama Programı
Eniyileme
Sınama BeanShell İle Sınama
Sınama Programının Özellikleri
Sınıfın tüm metotları kapsanmalıdır. Bu, private metotları
da içerir.
Yazılımın çözümleme aşamasında belirlenmiş kullanım
biçimlerinde öngörülen tüm senaryolar sınanmalıdır.
Mümkünse, gerçekleştirimciden farklı kişi(ler) tarafından
geliştirilmelidir.
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınama Programı
Eniyileme
Sınama Programı
Genel Görünüş
import static java.lang.System.*;
import java.util.*;
import etk.matematik.kartezyen.KarmaşıkSayı;
public class SınaKarmaşıkSayı {
public static void main(String[] ksa) { ... }
...
} // SınaKarmaşıkSayı sınıfının sonu
class Deney {
{ out.println(Deney başlıyor...); yapıcılar(); }
...
VectorKarmaşıkSayı veri;
} // Deney sınıfının sonu
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınama Programı
Eniyileme
Nesne İlkleme Bloğu: Nesne yaratılması sürecinde yapıcı
çağrısı öncesinde işlenir. Blog makalesi
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınama Programı
Eniyileme
Nesne İlkleme Bloğu: Nesne yaratılması sürecinde yapıcı
çağrısı öncesinde işlenir. Blog makalesi
Paket dostu erişim: Deney sınıfı ve veri adlı altalan,
kendileriyle aynı pakette yer alan tüm türler tarafından
kullanılabilir.
sınıfa özel(private)
pakete özel
kamuya açık(public)
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınama Programı
Eniyileme
Sınama Programı
main metodu
public static void main(String[] ksa) {
Deney deney = new Deney();
int i = 0;
out.println(HOŞ YAZIM SINANIYOR...);
out.println(Kartezyen gösterim...);
for (KarmaşıkSayı sayı : deney.veri)
out.println(i++ + :  + sayı);
KarmaşıkSayı.setYazımBiçimi(KarmaşıkSayı.KUTUPSAL);
...
} // void main(String[]) sonu
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınama Programı
Eniyileme
Sınama Programı
main metodu-2
public static void main(String[] ksa) {
...
i = 0;
out.println(Kutupsal gösterim...);
for (KarmaşıkSayı sayı : deney.veri)
out.println(i++ + :  + sayı);
KarmaşıkSayı.setYazımBiçimi(KarmaşıkSayı.KARTEZYEN);
deney.eşitlik();
deney.işlemler();
} // void main(String[]) sonu
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınama Programı
Eniyileme
Sınama Programı
Deney
class Deney {
static { grd = new Scanner(System.in); }
{ out.println(Deney başlıyor...); yapıcılar(); }
public void eşitlik() { ... }
public void işlemler() { ... }
private void yapıcılar() { ... }
VectorKarmaşıkSayı veri;
private static Scanner grd;
} // Deney sınıfının sonu
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınama Programı
Eniyileme
Sınama Programı
Yapıcılar
private void yapıcılar() {
out.println(YAPICILAR SINANIYOR...);
veri = new VectorKarmaşıkSayı();
out.print(Varsayılan yapıcı kullanılıyor...);
veri.add(new KarmaşıkSayı());
out.println(Yaratılan sayı:  + veri.get(0));
out.print(Kopyalayan yapıcı kullanılıyor... );
veri.add(new KarmaşıkSayı(veri.get(0)));
out.println(Yaratılan sayı:  + veri.get(1));
do { ... } while (true);
} // void yapıcılar() sonu
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınama Programı
Eniyileme
Sınama Programı
Yapıcılar-2
do {
out.print(Sayının koordinat sistemi (Dd/Kk/Çç): );
String seçim = grd.nextLine().trim();
switch (seçim.charAt(0)) {
case 'D': case 'd': ... break;
case 'K': case 'k': ... break;
case 'Ç': case 'ç': return;
default:
err.println(Tanınmayan sistem!);
continue;
} // switch (seçim.charAt(0)) sonu
grd.skip(n);
out.println(Yaratılan sayı:  + veri.lastElement());
} while (true);
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınama Programı
Eniyileme
Sınama Programı
Yapıcılar-3
switch (seçim.charAt(0)) {
case 'D': case 'd':
out.print(Gerçel ve sanal kısımları giriniz: );
veri.add(new KarmaşıkSayı(grd.nextDouble(),
grd.nextDouble()));
break;
case 'K': case 'k':
out.print(Açı ve norm değerlerini giriniz: );
veri.add(new KarmaşıkSayı(grd.nextDouble(),
grd.nextDouble(),
KarmaşıkSayı.KUTUPSAL));
break;
...
} // switch (seçim.charAt(0)) sonu
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınama Programı
Eniyileme
Sınama Programı
Eşitlik Denetimi
public void eşitlik() {
out.println(DENKLİK İŞLEMİ SINANIYOR...);
if (!(veri.get(0).equals(veri.get(1))))
err.println(Kopyalayan yapıcı veya equals'da hata!);
if (veri.get(2).equals(veri.get(2).eşlenik()))
if (veri.get(1).getSanal() != 0)
err.println(Sanal bölümlü sayı eşleniğine eşit!);
} // void eşitlik()
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınama Programı
Eniyileme
Sınama Programı
İşlemler
public void işlemler() {
out.println(İŞLEMLER SINANIYOR...);
do {
out.print(İşlem türü (+, -, *, /, x): );
char işlem = grd.nextLine().trim().charAt(0);
if (işlem == 'x' || işlem == 'X') return;
out.print(Birinci karmaşık sayı: );
KarmaşıkSayı işlenen1 = veri.get(grd.nextInt());
out.print(İkinci karmaşık sayı: );
KarmaşıkSayı işlenen2 = veri.get(grd.nextInt());
KarmaşıkSayı sonuç = null;
...
} while (true);
} // void işlemler() sonu
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınama Programı
Eniyileme
Sınama Programı
İşlemler-2
public void işlemler() {
out.println(İŞLEMLER SINANIYOR...);
do {
...
switch (işlem) {
case '+': sonuç = işlenen1.topla(işlenen2); break;
case '-': sonuç = işlenen1.çıkar(işlenen2); break;
case '*': sonuç = işlenen1.çarp(işlenen2); break;
case '/': sonuç = işlenen1.böl(işlenen2); break;
default: out.println(Tanınmayan işlem!);
}
grd.skip(n); out.println(Sonuç:  + sonuç);
} while (true);
} // void işlemler() sonu
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınama Programı
Eniyileme
Sınama Programı
Derleme
javac -d /home/tevfik/Java Kursu/sınıflar
-encoding utf8 KarmaşıkSayı.java
javac -cp /home/tevfik/Java Kursu/sınıflar
-encoding utf8 SınaKarmaşıkSayı.java
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınama Programı
Eniyileme
Sınama Programı
Çalıştırma
java -cp .:/home/tevfik/Java Kursu/sınıflar
SınaKarmaşıkSayı  Girdiler.dat  Sonuçlar.dat
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınama Programı
Eniyileme
Sınama Programı
Çalıştırma
java -cp .:/home/tevfik/Java Kursu/sınıflar
SınaKarmaşıkSayı  Girdiler.dat  Sonuçlar.dat
ya da
import java.io.*;
...
public class SınaKarmaşıkSayı {
public static void main(String ksa) {
System.setIn(new FileInputStream(Girdiler.dat));
System.setOut(new FileOutputStream(Sonuçlar.dat));
java -cp .:/home/tevfik/Java Kursu/sınıflar
SınaKarmaşıkSayı
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınama Programı
Eniyileme
Eniyileme
Eniyileme: Ne Zaman ve Nasıl?
Sınama sonrasında kodumuzun doğruluğuna olan güvenimizin
artmasıyla eniyileme yapmayı düşünebiliriz.
Erişici/değiştirici metotlar yerine altalanlara doğrudan erişim.
Maliyetli gerçekleştirimlerin elden geçirilmesi.
Kolay gerçekleştirilebilir fakat maliyetli bir algoritma yerine
daha zor fakat verimli bir algoritmanın gerçekleştirilmesi.
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınama Programı
Eniyileme
Eniyileme
Örnek
public KarmaşıkSayı çarp(KarmaşıkSayı sağ) {
double x = getAçı() + sağ.getAçı();
double y = getNorm() * sağ.getNorm();
return(new KarmaşıkSayı(x, y, KUTUPSAL));
} // KarmaşıkSayı çarp(KarmaşıkSayı) sonu
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınama Programı
Eniyileme
Eniyileme
Örnek
public KarmaşıkSayı çarp(KarmaşıkSayı sağ) {
double x = getAçı() + sağ.getAçı();
double y = getNorm() * sağ.getNorm();
return(new KarmaşıkSayı(x, y, KUTUPSAL));
} // KarmaşıkSayı çarp(KarmaşıkSayı) sonu
Bu gerçekleştirim, erişicilerde kullanılan trigonometrik fonksiyonlar
nedeniyle oldukça maliyetli.
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınama Programı
Eniyileme
Eniyileme
Örnek
public KarmaşıkSayı çarp(KarmaşıkSayı sağTaraf) {
double a = _gerçel * sağTaraf._gerçel -
_sanal * sağTaraf._sanal;
double b = _gerçel * sağTaraf._sanal +
_sanal * sağTaraf._gerçel;
return new KarmaşıkSayı(a, b);
} // KarmaşıkSayı çarp(KarmaşıkSayı)
İyi ama özel durumlardan yararlanmıyoruz.
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınama Programı
Eniyileme
Eniyileme
Örnek
public KarmaşıkSayı çarp(KarmaşıkSayı sağTaraf) {
if (equals(new KarmaşıkSayı(1)))
return new KarmaşıkSayı(sağTaraf);
if (sağTaraf.equals(new KarmaşıkSayı(1)))
return new KarmaşıkSayı(this);
if (equals(new KarmaşıkSayı(0)) ||
sağTaraf.equals(new KarmaşıkSayı(0)))
return new KarmaşıkSayı(0);
... // Çarpım sonucunu hesaplayıp döndür
} // KarmaşıkSayı çarp(KarmaşıkSayı) sonu
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınama Programı
Eniyileme
Eniyileme
Örnek
public KarmaşıkSayı çarp(KarmaşıkSayı sağTaraf) {
if (equals(new KarmaşıkSayı(1)))
return new KarmaşıkSayı(sağTaraf);
if (sağTaraf.equals(new KarmaşıkSayı(1)))
return new KarmaşıkSayı(this);
if (equals(new KarmaşıkSayı(0)) ||
sağTaraf.equals(new KarmaşıkSayı(0)))
return new KarmaşıkSayı(0);
... // Çarpım sonucunu hesaplayıp döndür
} // KarmaşıkSayı çarp(KarmaşıkSayı) sonu
Özel durumlardan yararlanma çabamız, kazançtan çok kayba neden
oldu. == işlecine göre daha maliyetli olan equals iletilerinin
yanısıra new işlecinin cömertçe kullanımı işi daha da kötüleştiriyor.
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınama Programı
Eniyileme
Eniyileme
Örnek
public KarmaşıkSayı çarp(KarmaşıkSayı sağTaraf) {
if (equals(new KarmaşıkSayı(1))) return sağTaraf;
if (sağTaraf.equals(new KarmaşıkSayı(1)))
return this;
if (equals(new KarmaşıkSayı(0)) ||
sağTaraf.equals(new KarmaşıkSayı(0)))
return new KarmaşıkSayı(0);
... // Çarpım sonucunu hesaplayıp döndür
} // KarmaşıkSayı çarp(KarmaşıkSayı) sonu
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınama Programı
Eniyileme
Eniyileme
Örnek
public KarmaşıkSayı çarp(KarmaşıkSayı sağTaraf) {
if (equals(new KarmaşıkSayı(1))) return sağTaraf;
if (sağTaraf.equals(new KarmaşıkSayı(1)))
return this;
if (equals(new KarmaşıkSayı(0)) ||
sağTaraf.equals(new KarmaşıkSayı(0)))
return new KarmaşıkSayı(0);
... // Çarpım sonucunu hesaplayıp döndür
} // KarmaşıkSayı çarp(KarmaşıkSayı) sonu
Doğru yoldayız ama hala fazladan nesne yaratıyormuşuz gibi.
equals iletileri de cabası! Fabrika metotlarını anımsamamız gerekli.
Tevfik AKTUĞLU Java Programlama Dili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sınıflar
Paketler
Sınama
Sınama Programı
Eniyileme
Eniyileme
Örnek
public KarmaşıkSayı çarp(KarmaşıkSayı sağTaraf) {
if (this == BİR) return sağTaraf;
if (sağTaraf == BİR) return this;
if (this == SIFIR || this == SIFIR)
return SIFIR;
... // Çarpım sonucunu hesaplayıp döndür
} // KarmaşıkSayı çarp(KarmaşıkSayı) sonu
Daha iyi olmadı mı?
Tevfik AKTUĞLU Java Programlama Dili

More Related Content

Featured

How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
ThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
marketingartwork
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
Skeleton Technologies
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
SpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Lily Ray
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
Rajiv Jayarajah, MAppComm, ACC
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
Christy Abraham Joy
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
Vit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
MindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
GetSmarter
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
Alireza Esmikhani
 

Featured (20)

How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 

Sınıflar