Presentation is loading. Please wait.

Presentation is loading. Please wait.

Java Nesneler ve Sınıflar Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All rights reserved. 1.

Similar presentations


Presentation on theme: "Java Nesneler ve Sınıflar Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All rights reserved. 1."— Presentation transcript:

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 öğ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 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.

4 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 5 Nesneler Bir nesnenin hem durumu hem de davranışı vardır. Durum, nesneyi tanımlar ve davranış, nesnenin ne yaptığını tanımlar.

6 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 7 Sınıflar

8 8 UML Sınıf Diyagramı

9 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 10 Örnek: Sınıf Tanımlama ve Nesne Oluşturma TV Run TestTV

11 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 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 13 Yapıcı Metotları Kullanarak Nesne Oluşturma new ClassName(); Örnek: new Circle(); new Circle(5.0);

14 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 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 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 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 Circle myCircle = new Circle(5.0); Circle yourCircle = new Circle(); yourCircle.radius = 100; myCircle tanımla no value myCircle animation

19 19 Kodları Takip Edelim Circle myCircle = new Circle(5.0); Circle yourCircle = new Circle(); yourCircle.radius = 100; no value myCircle Bir circle nesnesi oluştur animation

20 20 Kodları Takip Edelim Circle myCircle = new Circle(5.0); Circle yourCircle = new Circle(); yourCircle.radius = 100; reference value myCircle myCircle'a nesne referansı atama animation

21 21 Kodları Takip Edelim Circle myCircle = new Circle(5.0); Circle yourCircle = new Circle(); yourCircle.radius = 100; reference value myCircle no value yourCircle yourCircle tanımla animation

22 22 Kodları Takip Edelim Circle myCircle = new Circle(5.0); Circle yourCircle = new Circle(); yourCircle.radius = 100; reference value myCircle no value yourCircle Yeni bir Circle nesnesi tanımlama animation

23 23 Kodları Takip Edelim Circle myCircle = new Circle(5.0); Circle yourCircle = new Circle(); yourCircle.radius = 100; reference value myCircle reference value yourCircle yourCircle'a nesne referansı atama animation

24 24 Kodları Takip Edelim Circle myCircle = new Circle(5.0); Circle yourCircle = new Circle(); yourCircle.radius = 100; reference value myCircle reference value yourCircle Radius’u yourCircle’da değiştirin animation

25 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 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 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 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 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ürleri ve Nesne Türlerinin Değişkenleri Arasındaki Farklar

31 31 İlkel Veri Türlerinin ve Nesne Türlerinin Değişkenlerini Kopyalama

32 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 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 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.

35 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 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.

37 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 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 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 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 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 42 Statik Değişkenler, Sabitler ve Metotlar

43 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 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 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 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 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 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 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 51 Nesneleri Metotlara Geçirmek,

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 53 Nesne Dizisi Circle[] circleArray = new Circle[10];

54 54 Nesne Dizisi Dairelerin alanlarını özetleme Run TotalArea

55 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 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? 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 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 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 60 Gizli Veri Alanlarına Başvurun

61 61 Aşırı Yüklenmiş Yapıcı Metodu Çağırma


Download ppt "Java Nesneler ve Sınıflar Liang, Introduction to Java Programming, Tenth Edition, (c) 2015 Pearson Education, Inc. All rights reserved. 1."

Similar presentations


Ads by Google