Java
Nesneler ve Sınıflar
Liang, Introduction to Java Programming, Tenth Edition, (c)
2015 Pearson Education, Inc. All rights reserved.
1
2
Motivasyon
Önceki bölümleri öğrendikten sonra seçimleri, döngüleri,
yöntemleri ve dizileri kullanarak birçok programlama
problemini çözebilecek duruma geleceksiniz. Ancak bu
Java özellikleri, grafiksel kullanıcı arayüzleri ve büyük
ölçekli yazılım sistemleri geliştirmek için yeterli değildir.
Aşağıda gösterildiği gibi bir grafik kullanıcı arayüzü
geliştirmek istediğinizi varsayalım. Nasıl programlarsınız?
3
Hedefler
 Nesneleri ve sınıfları tanımlamak ve nesneleri modellemek için sınıfları kullanmak
 Sınıfları ve nesneleri tanımlamak için UML grafik gösterimini kullanmak.
 Sınıfların nasıl tanımlanacağını ve nesnelerin nasıl oluşturulacağını göstermek.
 Yapıcıları kullanarak nesneler oluşturmak için.
 Nesne referans değişkenleri aracılığıyla nesnelere erişmek için.
 Bir referans tipi kullanarak bir referans değişkeni tanımlamak için.
 Nesne üye erişim operatörünü (.) kullanarak bir nesnenin verilerine ve yöntemlerine erişmek için
 Referans türlerinin veri alanlarını tanımlamak ve bir nesnenin veri alanları için varsayılan değerler
atamak.
 Nesne referans değişkenleri ile ilkel veri tipi değişkenleri arasında ayrım yapmak.
 Java kitaplığı sınıflarını kullanmak için Date, Random ve Point2D.
 Örnek ve statik değişkenler ve yöntemler arasında ayrım yapmak.
 Özel veri alanlarını uygun get ve set yöntemleriyle tanımlamak.
 Sınıfların bakımını kolaylaştırmak için veri alanlarını kapsüllemek.
 Nesne argümanları ile yöntemler geliştirmek ve ilkel tip argümanlar ile nesne tipi argümanlar arasında
ayrım yapmak.
 Dizilerdeki nesneleri depolamak ve işlemek için.
 Nesnelerin içeriğini korumak için değişmez sınıflardan değişmez nesneler oluşturmak.
 Bir sınıf bağlamında değişkenlerin kapsamını belirlemek.
 Çağıran nesnenin kendisine atıfta bulunmak için this anahtar sözcüğünü kullanmak.
Nesne Yönelimli Programlama
Kavramları
Nesne yönelimli programlama (OOP), nesneleri
kullanarak programlamayı içerir. Bir nesne, gerçek
dünyada açıkça tanımlanabilen bir varlığı temsil
eder. Örneğin, bir öğrenci, bir sıra, bir daire, bir
düğme ve hatta ödünç alınan bir eşyanın tümü nesne
olarak görülebilir. Bir nesnenin benzersiz bir kimliği,
durumu ve davranışları vardır. Bir nesnenin durumu,
mevcut değerleri ile bir dizi veri alanından
(özellikler olarak da bilinir) oluşur. Bir nesnenin
davranışı bir dizi yöntemle tanımlanır.
4
5
Nesneler
Bir nesnenin hem durumu hem de davranışı vardır.
Durum, nesneyi tanımlar ve davranış, nesnenin ne
yaptığını tanımlar.
Class Name: Circle
Data Fields:
radius is _______
Methods:
getArea
Circle Object 1
Data Fields:
radius is 10
Circle Object 2
Data Fields:
radius is 25
Circle Object 3
Data Fields:
radius is 125
A class template
Three objects of
the Circle class
6
Sınıflar
Sınıflar, aynı türdeki nesneleri tanımlayan
yapılardır. Bir Java sınıfı, veri alanlarını
tanımlamak için değişkenleri ve davranışları
tanımlamak için metotları kullanır. Ek olarak, bir
sınıf, yapıcılar olarak bilinen ve sınıftan nesneler
oluşturmak için çağrılan özel bir metot türü sağlar.
7
Sınıflar
class Circle {
/** The radius of this circle */
double radius = 1.0;
/** Construct a circle object */
Circle() {
}
/** Construct a circle object */
Circle(double newRadius) {
radius = newRadius;
}
/** Return the area of this circle */
double getArea() {
return radius * radius * 3.14159;
}
}
Data field
Method
Constructors
8
UML Sınıf Diyagramı
Circle
radius: double
Circle()
Circle(newRadius: double)
getArea(): double
getPerimeter(): double
setRadius(newRadius:
double): void
circle1: Circle
radius = 1.0
Class name
Data fields
Constructors and
methods
circle2: Circle
radius = 25
circle3: Circle
radius = 125
UML Class Diagram
UML notation
for objects
9
Örnek: Sınıf Tanımlama ve
Nesne Oluşturma
Amaç: Nesne oluşturmak, verilere erişmek ve
yöntemleri kullanmak.
TestSimpleCircle
Liang LiveExample by Y.
Daniel Liang
(pearsoncmg.com)
Liang LiveExample by Y. Daniel Liang
(pearsoncmg.com)
10
Örnek: Sınıf Tanımlama ve Nesne Oluşturma
TV
channel: int
volumeLevel: int
on: boolean
+TV()
+turnOn(): void
+turnOff(): void
+setChannel(newChannel: int): void
+setVolume(newVolumeLevel: int): void
+channelUp(): void
+channelDown(): void
+volumeUp(): void
+volumeDown(): void
The current channel (1 to 120) of this TV.
The current volume level (1 to 7) of this TV.
Indicates whether this TV is on/off.
Constructs a default TV object.
Turns on this TV.
Turns off this TV.
Sets a new channel for this TV.
Sets a new volume level for this TV.
Increases the channel number by 1.
Decreases the channel number by 1.
Increases the volume level by 1.
Decreases the volume level by 1.
The + sign indicates
a public modifier.
TV
Run
TestTV
11
Yapıcı Metotlar
Circle(){ }
Circle(double newRadius) {
radius = newRadius;
}
Yapıcı metotlar, nesneleri inşa etmek için çağrılan
özel bir metot türüdür.
12
Yapıcı Metotlar
Parametresi olmayan bir oluşturucu, argüman içermeyen bir
oluşturucu olarak anılır.
· Yapıcılar, sınıfın kendisiyle aynı ada sahip olmalıdır.
· Oluşturucuların bir dönüş türü yoktur; geçersiz bile değildir.
· Oluşturucular, bir nesne oluşturulduğunda new operatörü
kullanılarak çağrılır. Yapıcılar nesneleri başlatma rolünü oynarlar.
13
Yapıcı Metotları Kullanarak
Nesne Oluşturma
new ClassName();
Örnek:
new Circle();
new Circle(5.0);
14
Varsayılan Yapıcı Metot
Bir sınıf, yapıcı metotlar olmadan tanımlanabilir.
Bu durumda, argüman içermeyen ve boş bir
gövdeye sahip bir yapıcı metot ortaya çıkar ve
sınıfta dolaylı olarak tanımlanır.
Varsayılan yapıcı metot olarak adlandırılan bu
yapıcı metot, yalnızca sınıfta açıkça hiçbir yapıcı
metot tanımlanmadığında otomatik olarak
oluşturulur.
15
Nesne Referans Değişkenlerini
Tanımlama
Bir nesneye referans vermek için, nesneyi bir referans
değişkenine atayın.
Bir referans değişkeni bildirmek için aşağıdaki
sözdizimini kullanın:
ClassName objectRefVar;
Örnek:
Circle myCircle;
16
Tek Adımda Nesne
Tanımlama/Oluşturma
ClassName objectRefVar = new ClassName();
Örnek:
Circle myCircle = new Circle();
Create an object
Assign object reference
17
Nesnenin Üyelerine Erişim
 Nesnenin verilerine atıfta bulunmak için :
objectRefVar.data
ör, myCircle.radius
 Nesnenin metodunu çağırmak:
objectRefVar.methodName(arguments)
ör, myCircle.getArea()
18
Kodları Takip Edelim
Circle myCircle = new Circle(5.0);
Circle yourCircle = new Circle();
yourCircle.radius = 100;
myCircle tanımla
no value
myCircle
animation
19
Kodları Takip Edelim
Circle myCircle = new Circle(5.0);
Circle yourCircle = new Circle();
yourCircle.radius = 100; : Circle
radius: 5.0
no value
myCircle
Bir circle
nesnesi oluştur
animation
20
Kodları Takip Edelim
Circle myCircle = new Circle(5.0);
Circle yourCircle = new Circle();
yourCircle.radius = 100; : Circle
radius: 5.0
reference value
myCircle
myCircle'a nesne
referansı atama
animation
21
Kodları Takip Edelim
Circle myCircle = new Circle(5.0);
Circle yourCircle = new Circle();
yourCircle.radius = 100; : Circle
radius: 5.0
reference value
myCircle
no value
yourCircle
yourCircle tanımla
animation
22
Kodları Takip Edelim
Circle myCircle = new Circle(5.0);
Circle yourCircle = new Circle();
yourCircle.radius = 100; : Circle
radius: 5.0
reference value
myCircle
no value
yourCircle
: Circle
radius: 1.0
Yeni bir Circle
nesnesi tanımlama
animation
23
Kodları Takip Edelim
Circle myCircle = new Circle(5.0);
Circle yourCircle = new Circle();
yourCircle.radius = 100; : Circle
radius: 5.0
reference value
myCircle
reference value
yourCircle
: Circle
radius: 1.0
yourCircle'a nesne
referansı atama
animation
24
Kodları Takip Edelim
Circle myCircle = new Circle(5.0);
Circle yourCircle = new Circle();
yourCircle.radius = 100; : Circle
radius: 5.0
reference value
myCircle
reference value
yourCircle
: Circle
radius: 100.0
Radius’u
yourCircle’da
değiştirin
animation
25
Dikkat
Hatırlayın daha önce kullanıldı
Math.methodName(arguments) (ör, Math.pow(3, 2.5))
Math sınıfında bir yöntemi çağırmak için.
SimpleCircle.getArea() kullanarak getArea()'yı çağırabilir misiniz?
Cevap hayır.
Bu bölümden önce kullanılan tüm yöntemler statik anahtar sözcük
kullanılarak tanımlanan statik yöntemlerdi. Ancak, getArea() statik
değildir. Aşağıdaki kodlar kullanılarak bir nesneden çağrılmalıdır.
objectRefVar.methodName(arguments) (ör., myCircle.getArea()).
26
Referans Veri Alanları
Veri alanları referans tiplerinde olabilir. Örneğin,
aşağıdaki Student sınıfı, String türünde bir veri alanı adı
içerir.
public class Student {
String name; // name has default value null
int age; // age has default value 0
boolean isScienceMajor; // isScienceMajor has default value false
char gender; // c has default value 'u0000'
}
27
Boş Değer
Referans tipindeki bir veri alanı herhangi bir
nesneye referans vermiyorsa, veri alanı özel
bir hazır bilgi değeri içerir, null.
28
Veri Alanı için Varsayılan Değer
Bir veri alanının varsayılan değeri, referans türü
için null, sayısal tür için 0, boolean türü için false
ve karakter türü için 'u0000' şeklindedir. Ancak
Java, bir yöntemin içindeki yerel bir değişkene
varsayılan bir değer atamaz.
public class Test {
public static void main(String[] args) {
Student student = new Student();
System.out.println("name? " + student.name);
System.out.println("age? " + student.age);
System.out.println("isScienceMajor? " + student.isScienceMajor);
System.out.println("gender? " + student.gender);
}
}
29
Örnek
public class Test {
public static void main(String[] args) {
int x; // x has no default value
String y; // y has no default value
System.out.println("x is " + x);
System.out.println("y is " + y);
}
}
Compile error: variable not
initialized
Java, bir metot içindeki yerel bir değişkene
varsayılan değer atamaz.
30
İlkel Veri Türleri ve Nesne Türlerinin
Değişkenleri Arasındaki Farklar
1
İlkel Tip int i = 1 i
Nesne Tipi Circle c c reference
new Circle() kullanılarak
oluşturuldu
c: Circle
radius = 1
31
İlkel Veri Türlerinin ve Nesne
Türlerinin Değişkenlerini
Kopyalama
i
Ilkel tip değişken atama i = j
önce:
1
j 2
i
sonra:
2
j 2
c1
Nesne tipi atama c1 = c2
Before:
c2
c1
After:
c2
c1: Circle
radius = 5
c2: Circle
radius = 9
c1: Circle
radius = 5
c2: Circle
radius = 9
32
Çöp toplama
Önceki şekilde gösterildiği gibi, c1 = c2
atama ifadesinden sonra c1, c2 tarafından
referans verilen aynı nesneyi gösterir. Daha
önce c1 tarafından başvurulan nesneye artık
başvurulmuyor. Bu nesne çöp olarak bilinir.
Çöp, JVM tarafından otomatik olarak
toplanır.
33
Çöp toplama
İPUCU: Bir nesneye artık gerek olmadığını
biliyorsanız, nesne için bir referans değişkenine
açık bir şekilde null atayabilirsiniz. Nesneye
herhangi bir değişken tarafından başvurulmuyorsa,
JVM alanı otomatik olarak toplayacaktır.
34
Tarih Sınıfı
Java, java.util.Date sınıfında sistemden bağımsız bir tarih ve
saat kapsüllemesi sağlar. Geçerli tarih ve saat için bir örnek
oluşturmak üzere Date sınıfını kullanabilir ve tarih ve saati
bir dize olarak döndürmek için toString yöntemini
kullanabilirsiniz.
java.util.Date
+Date()
+Date(elapseTime: long)
+toString(): String
+getTime(): long
+setTime(elapseTime: long): void
Constructs a Date object for the current time.
Constructs a Date object for a given time in
milliseconds elapsed since January 1, 1970, GMT.
Returns a string representing the date and time.
Returns the number of milliseconds since January 1,
1970, GMT.
Sets a new elapse time in the object.
The + sign indicates
public modifer
35
Tarih Sınıfı Örneği
Örnek Kod
java.util.Date date = new java.util.Date();
System.out.println(date.toString());
19 Aralık Pazartesi 13:50:19 EST 2023 gibi bir dizi
görüntüler.
36
Rastgele Sınıfı
0,0 ile 1,0 arasında (1,0 hariç) rastgele bir çift değer elde
etmek için Math.random()'u kullandınız. Java.util.Random
sınıfında daha kullanışlı bir rasgele sayı üreteci
sağlanmaktadır.
java.util.Random
+Random()
+Random(seed: long)
+nextInt(): int
+nextInt(n: int): int
+nextLong(): long
+nextDouble(): double
+nextFloat(): float
+nextBoolean(): boolean
Constructs a Random object with the current time as its seed.
Constructs a Random object with a specified seed.
Returns a random int value.
Returns a random int value between 0 and n (exclusive).
Returns a random long value.
Returns a random double value between 0.0 and 1.0 (exclusive).
Returns a random float value between 0.0F and 1.0F (exclusive).
Returns a random boolean value.
37
Rastgele Sınıf Örneği
İki Random nesnesi aynı tohuma sahipse, aynı sayı dizilerini
üreteceklerdir. Örneğin, aşağıdaki kod, aynı seed 3'e sahip iki
Random nesnesi oluşturur.
Random random1 = new Random(3);
System.out.print("From random1: ");
for (int i = 0; i < 10; i++)
System.out.print(random1.nextInt(1000) + " ");
Random random2 = new Random(3);
System.out.print("nFrom random2: ");
for (int i = 0; i < 10; i++)
System.out.print(random2.nextInt(1000) + " ");
From random1: 734 660 210 581 128 202 549 564 459 961
From random2: 734 660 210 581 128 202 549 564 459 961
38
Point2D Sınıfı
Java API, iki boyutlu bir düzlemde bir noktayı temsil etmek
için javafx.geometry paketinde kullanışlı bir Point2D
sınıfına sahiptir.
Run
TestPoint2D
39
Örnek Değişkenler ve Metotlar
Örnek değişkenleri belirli bir örneğe aittir.
Örnek metotlar, sınıfın bir örneği tarafından
çağrılır.
Örnek değişkenler ve metotlar, static anahtar
sözcüğü atlanarak belirtilir.
40
Statik Değişkenler, Sabitler ve
Metotlar
Statik değişkenler, sınıfın tüm örnekleri tarafından
paylaşılır. Statik metotlar belirli bir nesneye bağlı
değildir.
Statik sabitler, sınıfın tüm örnekleri tarafından
paylaşılan nihai değişkenlerdir.
41
Statik Değişkenler, Sabitler ve
Metotlar
Statik değişkenleri, sabitleri ve metotları bildirmek
için statik değiştiriciyi kullanın.
42
Statik Değişkenler, Sabitler ve
Metotlar
43
Örnek ve Sınıf Değişkenlerini ve
Metotları Kullanma Örneği
Amaç: Örnek ve sınıf değişkenlerinin
rollerini ve kullanımlarını gösterin. Bu
örnek, oluşturulan Circle nesnelerinin
sayısını izlemek için bir sınıf değişkeni
olan numberOfObjects ekler.
Run
CircleWithStaticMembers
TestCircleWithStaticMembers
44
Görünürlük Değiştiriciler ve
Erişimci/Değiştirici Metotlar
Varsayılan olarak, sınıfa, değişkene veya metota aynı
paketteki herhangi bir sınıf tarafından erişilebilir.
 public
Sınıf, veri veya metot, herhangi bir paketteki herhangi bir
sınıf tarafından görülebilir.
private
Verilere veya metotlara yalnızca tanımlanan sınıf tarafından
erişilebilir.
Özel (private) özellikleri okumak ve değiştirmek için get ve set
metotları kullanılır.
45
private değiştirici, bir sınıf içindeki erişimi kısıtlar, varsayılan
değiştirici, bir paket içindeki erişimi kısıtlar ve genel değiştirici,
sınırsız erişimi etkinleştirir.
46
Bir sınıftaki varsayılan değiştirici, bir paket içindeki erişimi kısıtlar
ve genel değiştirici, sınırsız erişimi etkinleştirir.
47
NOT
Bir nesne, (b)'de gösterildiği gibi özel üyelerine erişemez.
Ancak, nesnenin (a)'da gösterildiği gibi kendi sınıfında
tanımlanması sorun değil.
48
Veri Alanları Neden Özel
Olmalıdır?
Verileri korumak için.
Kodun bakımını kolaylaştırmak için.
49
Veri Alanı Kapsülleme Örneği
Circle
-radius: double
-numberOfObjects: int
+Circle()
+Circle(radius: double)
+getRadius(): double
+setRadius(radius: double): void
+getNumberOfObjects(): int
+getArea(): double
The radius of this circle (default: 1.0).
The number of circle objects created.
Constructs a default circle object.
Constructs a circle object with the specified radius.
Returns the radius of this circle.
Sets a new radius for this circle.
Returns the number of circle objects created.
Returns the area of this circle.
The - sign indicates
private modifier
Run
CircleWithPrivateDataFields
TestCircleWithPrivateDataFields
50
Nesneleri Metotlara Geçirmek
 İlkel tip değeri için değere göre geçirme
(değer parametreye iletilir)
 Referans türü değeri için değere göre
geçirme (değer, nesneye referanstır)
Run
TestPassObject
51
Nesneleri Metotlara Geçirmek,
52
Nesne Dizisi
Circle[] circleArray = new Circle[10];
Bir nesne dizisi aslında bir referans
değişkenleri dizisidir. Bu nedenle,
circleArray[1].getArea() öğesini
çağırmak, sonraki şekilde gösterildiği gibi
iki düzeyde başvuru içerir. tüm diziye
CircleArray başvuruları. circleArray[1],
bir Circle nesnesine başvurur.
53
Nesne Dizisi
Circle[] circleArray = new Circle[10];
54
Nesne Dizisi
Dairelerin alanlarını özetleme
Run
TotalArea
55
Değişmez Nesneler ve Sınıflar
Bir nesnenin içeriği, nesne oluşturulduktan sonra
değiştirilemiyorsa, nesneye değişmez nesne ve sınıfına
değişmez sınıf denir. Liste 8.10'daki Circle sınıfındaki set
yöntemini silerseniz, yarıçap özel olduğundan ve bir set
yöntemi olmadan değiştirilemeyeceğinden sınıf değişmez
olacaktır.
Tüm özel veri alanlarına sahip ve mutator içermeyen bir sınıf
mutlaka değişmez değildir. Örneğin, aşağıdaki Student sınıfı
tüm özel veri alanlarına sahiptir ve mutator içermez, ancak
değişkendir.
56
Örnek
public class Student {
private int id;
private BirthDate birthDate;
public Student(int ssn,
int year, int month, int day) {
id = ssn;
birthDate = new BirthDate(year, month, day);
}
public int getId() {
return id;
}
public BirthDate getBirthDate() {
return birthDate;
}
}
public class BirthDate {
private int year;
private int month;
private int day;
public BirthDate(int newYear,
int newMonth, int newDay) {
year = newYear;
month = newMonth;
day = newDay;
}
public void setYear(int newYear) {
year = newYear;
}
}
public class Test {
public static void main(String[] args) {
Student student = new Student(111223333, 1970, 5, 3);
BirthDate date = student.getBirthDate();
date.setYear(2010); // Now the student birth year is changed!
}
}
57
Hangi Sınıf Değişmez?
Bir sınıfın değişmez olması için, tüm veri alanlarını özel
olarak işaretlemesi ve değiştirilebilir bir veri alanı nesnesine
referans döndürecek hiçbir mutator yöntemi ve hiçbir erişimci
yöntemi sağlamaması gerekir.
58
Değişkenlerin Kapsamı
 Örnek ve statik değişkenlerin kapsamı sınıfın
tamamıdır. Bir sınıf içinde herhangi bir yerde
bildirilebilirler.
 Yerel bir değişkenin kapsamı, bildiriminden başlar
ve değişkeni içeren bloğun sonuna kadar devam
eder. Bir yerel değişken, kullanılmadan önce
açıkça başlatılmalıdır.
59
Anahtar Kelime
 this anahtar sözcüğü, bir nesnenin kendisini
ifade eden bir başvurunun adıdır. this anahtar
sözcüğünün yaygın bir kullanımı, bir sınıfın gizli
veri alanlarına atıfta bulunmaktır.
 this anahtar sözcüğünün bir oluşturucunun aynı
sınıftan başka bir oluşturucuyu çağırmasını
sağlamak için başka bir yaygın kullanımı.
60
Gizli Veri Alanlarına Başvurun
public class F {
private int i = 5;
private static double k = 0;
void setI(int i) {
this.i = i;
}
static void setK(double k) {
F.k = k;
}
}
Suppose that f1 and f2 are two objects of F.
F f1 = new F(); F f2 = new F();
Invoking f1.setI(10) is to execute
this.i = 10, where this refers f1
Invoking f2.setI(45) is to execute
this.i = 45, where this refers f2
61
Aşırı Yüklenmiş Yapıcı Metodu Çağırma
public class Circle {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
public Circle() {
this(1.0);
}
public double getArea() {
return this.radius * this.radius * Math.PI;
}
} Her örnek değişkeni, bununla temsil edilen ve normalde atlanan bir
örneğe aittir.
bu, inşa edilmekte olan nesnenin veri alanı
yarıçapına atıfta bulunmak için açıkça
kullanılmalıdır.
bu, başka bir yapıcı metodu çağırmak için kullanılır

Java Classes.pptx

  • 1.
    Java Nesneler ve Sınıflar Liang,Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All rights reserved. 1
  • 2.
    2 Motivasyon Önceki bölümleri öğrendiktensonra seçimleri, döngüleri, yöntemleri ve dizileri kullanarak birçok programlama problemini çözebilecek duruma geleceksiniz. Ancak bu Java özellikleri, grafiksel kullanıcı arayüzleri ve büyük ölçekli yazılım sistemleri geliştirmek için yeterli değildir. Aşağıda gösterildiği gibi bir grafik kullanıcı arayüzü geliştirmek istediğinizi varsayalım. Nasıl programlarsınız?
  • 3.
    3 Hedefler  Nesneleri vesınıfları tanımlamak ve nesneleri modellemek için sınıfları kullanmak  Sınıfları ve nesneleri tanımlamak için UML grafik gösterimini kullanmak.  Sınıfların nasıl tanımlanacağını ve nesnelerin nasıl oluşturulacağını göstermek.  Yapıcıları kullanarak nesneler oluşturmak için.  Nesne referans değişkenleri aracılığıyla nesnelere erişmek için.  Bir referans tipi kullanarak bir referans değişkeni tanımlamak için.  Nesne üye erişim operatörünü (.) kullanarak bir nesnenin verilerine ve yöntemlerine erişmek için  Referans türlerinin veri alanlarını tanımlamak ve bir nesnenin veri alanları için varsayılan değerler atamak.  Nesne referans değişkenleri ile ilkel veri tipi değişkenleri arasında ayrım yapmak.  Java kitaplığı sınıflarını kullanmak için Date, Random ve Point2D.  Örnek ve statik değişkenler ve yöntemler arasında ayrım yapmak.  Özel veri alanlarını uygun get ve set yöntemleriyle tanımlamak.  Sınıfların bakımını kolaylaştırmak için veri alanlarını kapsüllemek.  Nesne argümanları ile yöntemler geliştirmek ve ilkel tip argümanlar ile nesne tipi argümanlar arasında ayrım yapmak.  Dizilerdeki nesneleri depolamak ve işlemek için.  Nesnelerin içeriğini korumak için değişmez sınıflardan değişmez nesneler oluşturmak.  Bir sınıf bağlamında değişkenlerin kapsamını belirlemek.  Çağıran nesnenin kendisine atıfta bulunmak için this anahtar sözcüğünü kullanmak.
  • 4.
    Nesne Yönelimli Programlama Kavramları Nesneyönelimli programlama (OOP), nesneleri kullanarak programlamayı içerir. Bir nesne, gerçek dünyada açıkça tanımlanabilen bir varlığı temsil eder. Örneğin, bir öğrenci, bir sıra, bir daire, bir düğme ve hatta ödünç alınan bir eşyanın tümü nesne olarak görülebilir. Bir nesnenin benzersiz bir kimliği, durumu ve davranışları vardır. Bir nesnenin durumu, mevcut değerleri ile bir dizi veri alanından (özellikler olarak da bilinir) oluşur. Bir nesnenin davranışı bir dizi yöntemle tanımlanır. 4
  • 5.
    5 Nesneler Bir nesnenin hemdurumu hem de davranışı vardır. Durum, nesneyi tanımlar ve davranış, nesnenin ne yaptığını tanımlar. Class Name: Circle Data Fields: radius is _______ Methods: getArea Circle Object 1 Data Fields: radius is 10 Circle Object 2 Data Fields: radius is 25 Circle Object 3 Data Fields: radius is 125 A class template Three objects of the Circle class
  • 6.
    6 Sınıflar Sınıflar, aynı türdekinesneleri tanımlayan yapılardır. Bir Java sınıfı, veri alanlarını tanımlamak için değişkenleri ve davranışları tanımlamak için metotları kullanır. Ek olarak, bir sınıf, yapıcılar olarak bilinen ve sınıftan nesneler oluşturmak için çağrılan özel bir metot türü sağlar.
  • 7.
    7 Sınıflar class Circle { /**The radius of this circle */ double radius = 1.0; /** Construct a circle object */ Circle() { } /** Construct a circle object */ Circle(double newRadius) { radius = newRadius; } /** Return the area of this circle */ double getArea() { return radius * radius * 3.14159; } } Data field Method Constructors
  • 8.
    8 UML Sınıf Diyagramı Circle radius:double Circle() Circle(newRadius: double) getArea(): double getPerimeter(): double setRadius(newRadius: double): void circle1: Circle radius = 1.0 Class name Data fields Constructors and methods circle2: Circle radius = 25 circle3: Circle radius = 125 UML Class Diagram UML notation for objects
  • 9.
    9 Örnek: Sınıf Tanımlamave Nesne Oluşturma Amaç: Nesne oluşturmak, verilere erişmek ve yöntemleri kullanmak. TestSimpleCircle Liang LiveExample by Y. Daniel Liang (pearsoncmg.com) Liang LiveExample by Y. Daniel Liang (pearsoncmg.com)
  • 10.
    10 Örnek: Sınıf Tanımlamave Nesne Oluşturma TV channel: int volumeLevel: int on: boolean +TV() +turnOn(): void +turnOff(): void +setChannel(newChannel: int): void +setVolume(newVolumeLevel: int): void +channelUp(): void +channelDown(): void +volumeUp(): void +volumeDown(): void The current channel (1 to 120) of this TV. The current volume level (1 to 7) of this TV. Indicates whether this TV is on/off. Constructs a default TV object. Turns on this TV. Turns off this TV. Sets a new channel for this TV. Sets a new volume level for this TV. Increases the channel number by 1. Decreases the channel number by 1. Increases the volume level by 1. Decreases the volume level by 1. The + sign indicates a public modifier. TV Run TestTV
  • 11.
    11 Yapıcı Metotlar Circle(){ } Circle(doublenewRadius) { radius = newRadius; } Yapıcı metotlar, nesneleri inşa etmek için çağrılan özel bir metot türüdür.
  • 12.
    12 Yapıcı Metotlar Parametresi olmayanbir oluşturucu, argüman içermeyen bir oluşturucu olarak anılır. · Yapıcılar, sınıfın kendisiyle aynı ada sahip olmalıdır. · Oluşturucuların bir dönüş türü yoktur; geçersiz bile değildir. · Oluşturucular, bir nesne oluşturulduğunda new operatörü kullanılarak çağrılır. Yapıcılar nesneleri başlatma rolünü oynarlar.
  • 13.
    13 Yapıcı Metotları Kullanarak NesneOluşturma new ClassName(); Örnek: new Circle(); new Circle(5.0);
  • 14.
    14 Varsayılan Yapıcı Metot Birsınıf, yapıcı metotlar olmadan tanımlanabilir. Bu durumda, argüman içermeyen ve boş bir gövdeye sahip bir yapıcı metot ortaya çıkar ve sınıfta dolaylı olarak tanımlanır. Varsayılan yapıcı metot olarak adlandırılan bu yapıcı metot, yalnızca sınıfta açıkça hiçbir yapıcı metot tanımlanmadığında otomatik olarak oluşturulur.
  • 15.
    15 Nesne Referans Değişkenlerini Tanımlama Birnesneye referans vermek için, nesneyi bir referans değişkenine atayın. Bir referans değişkeni bildirmek için aşağıdaki sözdizimini kullanın: ClassName objectRefVar; Örnek: Circle myCircle;
  • 16.
    16 Tek Adımda Nesne Tanımlama/Oluşturma ClassNameobjectRefVar = new ClassName(); Örnek: Circle myCircle = new Circle(); Create an object Assign object reference
  • 17.
    17 Nesnenin Üyelerine Erişim Nesnenin verilerine atıfta bulunmak için : objectRefVar.data ör, myCircle.radius  Nesnenin metodunu çağırmak: objectRefVar.methodName(arguments) ör, myCircle.getArea()
  • 18.
    18 Kodları Takip Edelim CirclemyCircle = new Circle(5.0); Circle yourCircle = new Circle(); yourCircle.radius = 100; myCircle tanımla no value myCircle animation
  • 19.
    19 Kodları Takip Edelim CirclemyCircle = new Circle(5.0); Circle yourCircle = new Circle(); yourCircle.radius = 100; : Circle radius: 5.0 no value myCircle Bir circle nesnesi oluştur animation
  • 20.
    20 Kodları Takip Edelim CirclemyCircle = new Circle(5.0); Circle yourCircle = new Circle(); yourCircle.radius = 100; : Circle radius: 5.0 reference value myCircle myCircle'a nesne referansı atama animation
  • 21.
    21 Kodları Takip Edelim CirclemyCircle = new Circle(5.0); Circle yourCircle = new Circle(); yourCircle.radius = 100; : Circle radius: 5.0 reference value myCircle no value yourCircle yourCircle tanımla animation
  • 22.
    22 Kodları Takip Edelim CirclemyCircle = new Circle(5.0); Circle yourCircle = new Circle(); yourCircle.radius = 100; : Circle radius: 5.0 reference value myCircle no value yourCircle : Circle radius: 1.0 Yeni bir Circle nesnesi tanımlama animation
  • 23.
    23 Kodları Takip Edelim CirclemyCircle = new Circle(5.0); Circle yourCircle = new Circle(); yourCircle.radius = 100; : Circle radius: 5.0 reference value myCircle reference value yourCircle : Circle radius: 1.0 yourCircle'a nesne referansı atama animation
  • 24.
    24 Kodları Takip Edelim CirclemyCircle = new Circle(5.0); Circle yourCircle = new Circle(); yourCircle.radius = 100; : Circle radius: 5.0 reference value myCircle reference value yourCircle : Circle radius: 100.0 Radius’u yourCircle’da değiştirin animation
  • 25.
    25 Dikkat Hatırlayın daha öncekullanıldı Math.methodName(arguments) (ör, Math.pow(3, 2.5)) Math sınıfında bir yöntemi çağırmak için. SimpleCircle.getArea() kullanarak getArea()'yı çağırabilir misiniz? Cevap hayır. Bu bölümden önce kullanılan tüm yöntemler statik anahtar sözcük kullanılarak tanımlanan statik yöntemlerdi. Ancak, getArea() statik değildir. Aşağıdaki kodlar kullanılarak bir nesneden çağrılmalıdır. objectRefVar.methodName(arguments) (ör., myCircle.getArea()).
  • 26.
    26 Referans Veri Alanları Verialanları referans tiplerinde olabilir. Örneğin, aşağıdaki Student sınıfı, String türünde bir veri alanı adı içerir. public class Student { String name; // name has default value null int age; // age has default value 0 boolean isScienceMajor; // isScienceMajor has default value false char gender; // c has default value 'u0000' }
  • 27.
    27 Boş Değer Referans tipindekibir veri alanı herhangi bir nesneye referans vermiyorsa, veri alanı özel bir hazır bilgi değeri içerir, null.
  • 28.
    28 Veri Alanı içinVarsayılan Değer Bir veri alanının varsayılan değeri, referans türü için null, sayısal tür için 0, boolean türü için false ve karakter türü için 'u0000' şeklindedir. Ancak Java, bir yöntemin içindeki yerel bir değişkene varsayılan bir değer atamaz. public class Test { public static void main(String[] args) { Student student = new Student(); System.out.println("name? " + student.name); System.out.println("age? " + student.age); System.out.println("isScienceMajor? " + student.isScienceMajor); System.out.println("gender? " + student.gender); } }
  • 29.
    29 Örnek public class Test{ public static void main(String[] args) { int x; // x has no default value String y; // y has no default value System.out.println("x is " + x); System.out.println("y is " + y); } } Compile error: variable not initialized Java, bir metot içindeki yerel bir değişkene varsayılan değer atamaz.
  • 30.
    30 İlkel Veri Türlerive Nesne Türlerinin Değişkenleri Arasındaki Farklar 1 İlkel Tip int i = 1 i Nesne Tipi Circle c c reference new Circle() kullanılarak oluşturuldu c: Circle radius = 1
  • 31.
    31 İlkel Veri Türlerininve Nesne Türlerinin Değişkenlerini Kopyalama i Ilkel tip değişken atama i = j önce: 1 j 2 i sonra: 2 j 2 c1 Nesne tipi atama c1 = c2 Before: c2 c1 After: c2 c1: Circle radius = 5 c2: Circle radius = 9 c1: Circle radius = 5 c2: Circle radius = 9
  • 32.
    32 Çöp toplama Önceki şekildegösterildiği gibi, c1 = c2 atama ifadesinden sonra c1, c2 tarafından referans verilen aynı nesneyi gösterir. Daha önce c1 tarafından başvurulan nesneye artık başvurulmuyor. Bu nesne çöp olarak bilinir. Çöp, JVM tarafından otomatik olarak toplanır.
  • 33.
    33 Çöp toplama İPUCU: Birnesneye artık gerek olmadığını biliyorsanız, nesne için bir referans değişkenine açık bir şekilde null atayabilirsiniz. Nesneye herhangi bir değişken tarafından başvurulmuyorsa, JVM alanı otomatik olarak toplayacaktır.
  • 34.
    34 Tarih Sınıfı Java, java.util.Datesınıfında sistemden bağımsız bir tarih ve saat kapsüllemesi sağlar. Geçerli tarih ve saat için bir örnek oluşturmak üzere Date sınıfını kullanabilir ve tarih ve saati bir dize olarak döndürmek için toString yöntemini kullanabilirsiniz. java.util.Date +Date() +Date(elapseTime: long) +toString(): String +getTime(): long +setTime(elapseTime: long): void Constructs a Date object for the current time. Constructs a Date object for a given time in milliseconds elapsed since January 1, 1970, GMT. Returns a string representing the date and time. Returns the number of milliseconds since January 1, 1970, GMT. Sets a new elapse time in the object. The + sign indicates public modifer
  • 35.
    35 Tarih Sınıfı Örneği ÖrnekKod java.util.Date date = new java.util.Date(); System.out.println(date.toString()); 19 Aralık Pazartesi 13:50:19 EST 2023 gibi bir dizi görüntüler.
  • 36.
    36 Rastgele Sınıfı 0,0 ile1,0 arasında (1,0 hariç) rastgele bir çift değer elde etmek için Math.random()'u kullandınız. Java.util.Random sınıfında daha kullanışlı bir rasgele sayı üreteci sağlanmaktadır. java.util.Random +Random() +Random(seed: long) +nextInt(): int +nextInt(n: int): int +nextLong(): long +nextDouble(): double +nextFloat(): float +nextBoolean(): boolean Constructs a Random object with the current time as its seed. Constructs a Random object with a specified seed. Returns a random int value. Returns a random int value between 0 and n (exclusive). Returns a random long value. Returns a random double value between 0.0 and 1.0 (exclusive). Returns a random float value between 0.0F and 1.0F (exclusive). Returns a random boolean value.
  • 37.
    37 Rastgele Sınıf Örneği İkiRandom nesnesi aynı tohuma sahipse, aynı sayı dizilerini üreteceklerdir. Örneğin, aşağıdaki kod, aynı seed 3'e sahip iki Random nesnesi oluşturur. Random random1 = new Random(3); System.out.print("From random1: "); for (int i = 0; i < 10; i++) System.out.print(random1.nextInt(1000) + " "); Random random2 = new Random(3); System.out.print("nFrom random2: "); for (int i = 0; i < 10; i++) System.out.print(random2.nextInt(1000) + " "); From random1: 734 660 210 581 128 202 549 564 459 961 From random2: 734 660 210 581 128 202 549 564 459 961
  • 38.
    38 Point2D Sınıfı Java API,iki boyutlu bir düzlemde bir noktayı temsil etmek için javafx.geometry paketinde kullanışlı bir Point2D sınıfına sahiptir. Run TestPoint2D
  • 39.
    39 Örnek Değişkenler veMetotlar Örnek değişkenleri belirli bir örneğe aittir. Örnek metotlar, sınıfın bir örneği tarafından çağrılır. Örnek değişkenler ve metotlar, static anahtar sözcüğü atlanarak belirtilir.
  • 40.
    40 Statik Değişkenler, Sabitlerve Metotlar Statik değişkenler, sınıfın tüm örnekleri tarafından paylaşılır. Statik metotlar belirli bir nesneye bağlı değildir. Statik sabitler, sınıfın tüm örnekleri tarafından paylaşılan nihai değişkenlerdir.
  • 41.
    41 Statik Değişkenler, Sabitlerve Metotlar Statik değişkenleri, sabitleri ve metotları bildirmek için statik değiştiriciyi kullanın.
  • 42.
  • 43.
    43 Örnek ve SınıfDeğişkenlerini ve Metotları Kullanma Örneği Amaç: Örnek ve sınıf değişkenlerinin rollerini ve kullanımlarını gösterin. Bu örnek, oluşturulan Circle nesnelerinin sayısını izlemek için bir sınıf değişkeni olan numberOfObjects ekler. Run CircleWithStaticMembers TestCircleWithStaticMembers
  • 44.
    44 Görünürlük Değiştiriciler ve Erişimci/DeğiştiriciMetotlar Varsayılan olarak, sınıfa, değişkene veya metota aynı paketteki herhangi bir sınıf tarafından erişilebilir.  public Sınıf, veri veya metot, herhangi bir paketteki herhangi bir sınıf tarafından görülebilir. private Verilere veya metotlara yalnızca tanımlanan sınıf tarafından erişilebilir. Özel (private) özellikleri okumak ve değiştirmek için get ve set metotları kullanılır.
  • 45.
    45 private değiştirici, birsınıf içindeki erişimi kısıtlar, varsayılan değiştirici, bir paket içindeki erişimi kısıtlar ve genel değiştirici, sınırsız erişimi etkinleştirir.
  • 46.
    46 Bir sınıftaki varsayılandeğiştirici, bir paket içindeki erişimi kısıtlar ve genel değiştirici, sınırsız erişimi etkinleştirir.
  • 47.
    47 NOT Bir nesne, (b)'degösterildiği gibi özel üyelerine erişemez. Ancak, nesnenin (a)'da gösterildiği gibi kendi sınıfında tanımlanması sorun değil.
  • 48.
    48 Veri Alanları NedenÖzel Olmalıdır? Verileri korumak için. Kodun bakımını kolaylaştırmak için.
  • 49.
    49 Veri Alanı KapsüllemeÖrneği Circle -radius: double -numberOfObjects: int +Circle() +Circle(radius: double) +getRadius(): double +setRadius(radius: double): void +getNumberOfObjects(): int +getArea(): double The radius of this circle (default: 1.0). The number of circle objects created. Constructs a default circle object. Constructs a circle object with the specified radius. Returns the radius of this circle. Sets a new radius for this circle. Returns the number of circle objects created. Returns the area of this circle. The - sign indicates private modifier Run CircleWithPrivateDataFields TestCircleWithPrivateDataFields
  • 50.
    50 Nesneleri Metotlara Geçirmek İlkel tip değeri için değere göre geçirme (değer parametreye iletilir)  Referans türü değeri için değere göre geçirme (değer, nesneye referanstır) Run TestPassObject
  • 51.
  • 52.
    52 Nesne Dizisi Circle[] circleArray= new Circle[10]; Bir nesne dizisi aslında bir referans değişkenleri dizisidir. Bu nedenle, circleArray[1].getArea() öğesini çağırmak, sonraki şekilde gösterildiği gibi iki düzeyde başvuru içerir. tüm diziye CircleArray başvuruları. circleArray[1], bir Circle nesnesine başvurur.
  • 53.
  • 54.
  • 55.
    55 Değişmez Nesneler veSınıflar Bir nesnenin içeriği, nesne oluşturulduktan sonra değiştirilemiyorsa, nesneye değişmez nesne ve sınıfına değişmez sınıf denir. Liste 8.10'daki Circle sınıfındaki set yöntemini silerseniz, yarıçap özel olduğundan ve bir set yöntemi olmadan değiştirilemeyeceğinden sınıf değişmez olacaktır. Tüm özel veri alanlarına sahip ve mutator içermeyen bir sınıf mutlaka değişmez değildir. Örneğin, aşağıdaki Student sınıfı tüm özel veri alanlarına sahiptir ve mutator içermez, ancak değişkendir.
  • 56.
    56 Örnek public class Student{ private int id; private BirthDate birthDate; public Student(int ssn, int year, int month, int day) { id = ssn; birthDate = new BirthDate(year, month, day); } public int getId() { return id; } public BirthDate getBirthDate() { return birthDate; } } public class BirthDate { private int year; private int month; private int day; public BirthDate(int newYear, int newMonth, int newDay) { year = newYear; month = newMonth; day = newDay; } public void setYear(int newYear) { year = newYear; } } public class Test { public static void main(String[] args) { Student student = new Student(111223333, 1970, 5, 3); BirthDate date = student.getBirthDate(); date.setYear(2010); // Now the student birth year is changed! } }
  • 57.
    57 Hangi Sınıf Değişmez? Birsınıfın değişmez olması için, tüm veri alanlarını özel olarak işaretlemesi ve değiştirilebilir bir veri alanı nesnesine referans döndürecek hiçbir mutator yöntemi ve hiçbir erişimci yöntemi sağlamaması gerekir.
  • 58.
    58 Değişkenlerin Kapsamı  Örnekve statik değişkenlerin kapsamı sınıfın tamamıdır. Bir sınıf içinde herhangi bir yerde bildirilebilirler.  Yerel bir değişkenin kapsamı, bildiriminden başlar ve değişkeni içeren bloğun sonuna kadar devam eder. Bir yerel değişken, kullanılmadan önce açıkça başlatılmalıdır.
  • 59.
    59 Anahtar Kelime  thisanahtar sözcüğü, bir nesnenin kendisini ifade eden bir başvurunun adıdır. this anahtar sözcüğünün yaygın bir kullanımı, bir sınıfın gizli veri alanlarına atıfta bulunmaktır.  this anahtar sözcüğünün bir oluşturucunun aynı sınıftan başka bir oluşturucuyu çağırmasını sağlamak için başka bir yaygın kullanımı.
  • 60.
    60 Gizli Veri AlanlarınaBaşvurun public class F { private int i = 5; private static double k = 0; void setI(int i) { this.i = i; } static void setK(double k) { F.k = k; } } Suppose that f1 and f2 are two objects of F. F f1 = new F(); F f2 = new F(); Invoking f1.setI(10) is to execute this.i = 10, where this refers f1 Invoking f2.setI(45) is to execute this.i = 45, where this refers f2
  • 61.
    61 Aşırı Yüklenmiş YapıcıMetodu Çağırma public class Circle { private double radius; public Circle(double radius) { this.radius = radius; } public Circle() { this(1.0); } public double getArea() { return this.radius * this.radius * Math.PI; } } Her örnek değişkeni, bununla temsil edilen ve normalde atlanan bir örneğe aittir. bu, inşa edilmekte olan nesnenin veri alanı yarıçapına atıfta bulunmak için açıkça kullanılmalıdır. bu, başka bir yapıcı metodu çağırmak için kullanılır