Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

Sorular? Öneriler?. Referanslar Referanslar (Tekrar) Eğer aşağıdaki gibi yazarsak ne olur: int x; double y; char c; ???

Benzer bir sunumlar


... konulu sunumlar: "Sorular? Öneriler?. Referanslar Referanslar (Tekrar) Eğer aşağıdaki gibi yazarsak ne olur: int x; double y; char c; ???"— Sunum transkripti:

1 Sorular? Öneriler?

2 Referanslar

3 Referanslar (Tekrar) Eğer aşağıdaki gibi yazarsak ne olur: int x; double y; char c; ???

4 Değişkenleri oluştururuz xycxyc Değişken: Sembol + değer

5 Farzedelim ki aşağıdaki gibi sınıflarımız olsun class Box class LLNode Bunun gibi hazırda var olan sınıflar da vardır: class String, vb..

6 Eğer aşağıdaki gibi yazarsak ne olur: Box b; LLNode head; String s;

7 Değişkenleri oluştururuz b head s Referans değişkenleri, nesnelerin bellekteki yerlerini tutar. Eğer bir nesnenin yerini göstermiyorsa o zaman değeri ne olur? Java, referansın ne tip bir nesnenin yerini gösterdiğinin izini tutar. Box LLNode String

8 Genel hatalar! Box b = new Box(1, 2, 3);. Box b = new Box(4, 5, 6);.

9 Olması gereken: Box b = new Box(1, 2, 3);. b = new Box(4, 5, 6);.

10 Genel hatalar! Box b = new Box(1, 2, 3); b = anotherBox;

11 Olması gereken: Box b; b = anotherBox;

12 Genel hatalar! class Whatever { Box b; // Constructor public Whatever() { Box b = new Box(1, 2, 3);

13 Olması gereken: class Whatever { Box b; // Constructor public Whatever() { b = new Box(1, 2, 3);

14 Referansları anlamak Kavrayabilmek için anahtar: –Nesne dizileri –Nesnelerin eşitliğini test etme –Nesneleri metodlara yollama –Atama vs. Klonlama –Vb... Örneğin

15 Şimdi neden böyle olduğuna bakalım... Eşitliği anlama Eşitliği kavrayabilmek için anahtar, Java ‘nın referanslar ve temel türleri nasıl ele aldığını iyice bilmektir. Kural şu: Temel türlerin eşitliğini karşılaştırmak için == kullanılır: if ( iCount == iMaximum ) // gibi... Nesnelerin eşitliğini karşılaştırmak için.equals() kullanılır: if ( box1.equals(box2) ) // gibi...

16 int x; int y; x = 11; y = 3; System.out.println(x == 11); // ekrana true(doğru) basar System.out.println(y = = 3); // ekrana true (doğru) basar System.out.println(x = = y); // ekrana false(yanlış)basar x = y; System.out.println(x = = 3);//ekrana true(doğru) basar System.out.println(y = = 3);//ekrana true(doğru) basar System.out.println(x == y);// ekrana true(doğru) basar System.out.println(x > y);// ekrana false(yanlış)basar Temel türlerin eşitliğini kontrol etme 11 x: 3 y: 3 x: 3 y:

17 1. Referanslar eşit mi? == ile kontrol et Diğer bir deyişle, her iki referans da aynı nesneye mi işaret ediyor? Nesnelerin eşitliğini kontrol etme

18 2. Nesnelerin kendisi eşit mi? Cevap, sizin eşitliği nasıl tanımladığınıza bağlıdır! equals() adında bir metod oluşturalım. Bu metod, nesnenin iç özelliklerini kendisine parametre olarak gönderilen başka bir nesneninki ile karşılaştırsın. Bu metodu, nesnelerini karşılaştırmak istediğiniz her sınıf için yazmak zorunda kalırsınız. Nesnelerin eşitliğini kontrol etme

19 Örnek class Rectangle { int len, wid; String name; // Yapılandırıcı(Constructor) ve temel basit // get/set metodları burada gösterilmedi public boolean equals(Object o) { boolean retVal = false; if(o instanceOf Rectangle) { Rectangle r = (Rectangle)o; if(r.getLen() == len && r.getWid() == wid) retVal = true; } return retVal; }

20 Örnek public static void main(String args[]) { Rectangle r1 = new Rectangle(3,4,"Bob"); Rectangle r2 = new Rectangle(3,4,"Ted"); Rectangle r3 = new Rectangle(8,7,"Bob"); Rectangle r4 = r1; String s = "Goofy"; System.out.println(r1.equals(r2)); System.out.println(r1.equals(r3)); System.out.println(r1.equals(r4)); System.out.println(r1.equals(s)); } } // Rectangle

21 LLNode ‘u tekrar çağıralım public boolean equals(Object o) { boolean retVal = false; if(o instanceOf LLNode) { retVal=getData().equals(((LLNode)o).getData()); } return retval; } İmdattttttttttttttt!!!! data next data next ??

22 LLNode public static void main(String args[]) { LLNode n4 = new LLNode("delta", null); LLNode n3 = new LLNode("gamma", n4); LLNode n2 = new LLNode("beta", n3); LLNode n1 = new LLNode("alpha", n2); LLNode tester = new Node("beta", null); System.out.println(n1.equals(tester)); System.out.println(n2.equals(tester)); System.out.println(n3.equals(tester)); System.out.println(n4.equals(tester)); }

23 Not!.equals() metodu, nesneler için == ile aynı anlama gelir.

24 Scope(Görünürlük)

25 Yerel değişkenler (metodun bir parçası olarak tanımlanır): Sadece ait olduğu metod tarafından görülebilir. Ait olduğu metodun dışında tanımsızdır. Üye ve Sınıf değişkenleri (sınıfın bir parçası olarak tanımlanırlar fakat herhangi bir metodun içinde değil) : Üyenin içinde herhangi bir yerden görünebilirler. Bu demek oluyor k, sınıfın içindeki metodlar tarafından görülebilirler; bu metodlara parameter olarak gönderilmeseler bile. Bunun haricindeki yerlerde görünebilirler de görünmeyebilirler de (yakında...). Bir metodun içinde: yerel değişken, üye değişkenine göre öncelik sahibidir

26 Yapmak istediğimiz: class Person { String strName;... public void setName (String strName) { strName = strName; } // of setName Metodun içinde, String strName ifadesi metod imzası içindeki String ‘e işaret eder. Burada bir problem var: hangi strName ne? Değişken karışıklığını önleme YANLIŞ

27 Elde ettiğimiz: class Person { String strName;... public void setName (String strName) { strName = strName; } // of setName Metodun içinde, String strName ifadesi metod imzası içindeki String ‘e işaret eder. Burada bir problem var: hangi strName ne? Değişken karışıklığını önleme YANLIŞ

28 Çözümler: Parametrenin ismini değiştirin: public void setName (String strNewStringName) { strName = strNewStringName; } // of setName Ya da nesneye işaret etmek için this anahtar kelimesini kullanın public void setName (String strName) { this.strName = strName; } // of setName Değişken karışıklığını önleme Javadoc için tercih edilir

29 Gölgeleme (Shadowing)

30 Halihazırda mevcut olan birşeyi saklamaktır Basit olanlar bugün anlatılacak Bu konuya, kalıtım (inheritance) konusunu işlerken geri döneceğiz

31 Gölgeleme (Shadowing) class Widget { name public String name; public void someMethod(int i) { name String name; /* Üye değişkenini gölgeler */ name name = "Bob"; this.name this.name = "Wally"; /* Gölgelenen değişkene erişiliyor! */

32 Zincirleme (Chaining)

33 Örnek yapılandırıcılar (Constructor) class Rectangle { private int length, width; private String name; public Rectangle () { setLength(0); setWidth(0); setName("Unnamed"); } // constructor public Rectangle (int l, int w) { setLength(l); setWidth(w); setName("Unnamed"); } // constructor public Rectangle (int l, int w, String n){ setLength(l); setWidth(w); setname(n); } // constructor

34 Yapılandırıcı Zincirlemesi (“Chaining“) class Rectangle { private int length, width; private String name; public Rectangle () { this(0,0,"Unnamed"); } // yapılandırıcı // (constructor) public Rectangle (int l, int w) { this(l, w,"Unnamed"); } // yapılandırıcı // (constructor) public Rectangle (int l, int w, String n){ setLength(l); setWidth(w); setname(n); } // yapılandırıcı // (constructor)

35 count değişkeni ekleyelim count değişkeni ekleyelim class Rectangle { private int length, width; private String name; private static count = 0; public Rectangle () { setLength(0); setWidth(0); setName("Unnamed"); count++; } // yapılandırıcı // (constructor) public Rectangle (int l, int w) { setLength(l); setWidth(w); setName("Unnamed"); count++; } // yapılandırıcı // (constructor) public Rectangle (int l, int w, String n){ setLength(l); setWidth(w); setname(n); count++; } // yapılandırıcı // (constructor)

36 count değişkeni ekleyelim ("Chaining“ / Zincirleme ile daha basit) class Rectangle { private int length, width; private String name; private static int count = 0; public Rectangle () { this(0,0,"Unnamed"); } // yapılandırıcı // (constructor) public Rectangle (int l, int w) { this(l, w,"Unnamed"); } // yapılandırıcı // (constructor) public Rectangle (int l, int w, String n){ setLength(l); setWidth(w); setname(n); count++; } // yapılandırıcı // (constructor)

37 Diziler

38 Diziler Bir dizi, aşağıdaki türlerden tanımlanabilir: – temel türlere ait bir dizi, ya da – nesneler dizisi (aslında referanlar dizisi !!!). Dizi kendisi bir nesnedir aslında, içinde temel türlerden elemanlar içerse bile. –(Dizi adı aslında bir nesneyi işaret eder). Eğer dizimiz bir nesneler dizisi ise, o zaman : – Dizi adı gene bir dizi nesnesini işaret eder – dizinin her elemanı bir nesneye işaret eder. Dizi nesnesini ilk yapılandırmak, dizinin tuttuğu nesneleri yapılandırmak anlamına gelmez. Dizinin içerdiği eleman nesneler, ayrıca açıkça yapılandırılmalıdır.

39 Örnek: Bir Flatware(çatal-bıçak-kaşık seti) sınıfı oluşturalım. Bu sınıfın içinde knives, forks ve spoons üye değişkenleri mevcut olsun. class Flatware { int knives = 0; int forks = 0; int spoons = 0; public Flatware(int knives, int forks, int spoons) { setKnives(knives); setForks(forks); setSpoons(spoons); } // yapılandırıcı tanım sonu /* Üye değişkenlere ulaşmaya ve içeriğini değiştirmeye yarayan (accessors, modifiers) getKnives(),setKnives(),vb.. metodlarını burada tanımladığımızı farzedelim... */ } // Flatware sınıfı tanım sonu Diziler

40 Öyleyse, aşağıdaki kod parçası: Flatware fw1 = new Flatware(10, 20, 30); Flatware fw2; Şu şekilde bir sonuç oluşturur: knives = 10 forks = 20 spoons = 30 fw1 fw2 Diziler

41 Ve aşağıdaki kod parçası: Flatware[ ] flatwareArray = new Flatware[5]; Şu şekilde bir sonuç oluşturur : Oluşan dizi aşağıdaki gibi yapılandırılır : int i; for ( i = 0; i < flatwareArray.length; i++) { flatwareArray[i] = new Flatware(10, 20, 30); } // yapılandırmayı yapan döngü sonu flatwareArray Diziler

42 Elde edilen: flatwareArray knives = 10 forks = 20 spoons = 30 fw1 fw2 Toplamda 7 nesne 6 Flatware nesnesi Diziler knives = 10 forks = 20 spoons = 30 knives = 10 forks = 20 spoons = 30 knives = 10 forks = 20 spoons = 30 knives = 10 forks = 20 spoons = 30 knives = 10 forks = 20 spoons = 30

43 Ancak aşağıdaki kod parçasının : int i; for ( i = 0; i < flatwareArray.length; i++) { flatwareArray[i] = fw1; } Sonucunda elde edilen: flatwareArray fw1 1 Flatware nesnesi... toplamda 2 nesne Diziler knives = 10 forks = 20 spoons = 30

44 Tekrar : Dizi oluşturulması Bildirim: int myInts[]; int[] myInts; Yapılandırma: myInts = new int[10]; Bildirim ve yapılandırma: int[] myInts = new int[10]; Dizinin herhangi bir elemanına erişim myInts[3] = 9; x = myInts[4]; Static yapılandırma int[] myInts = {1,2,5,6,7,4};

45 Çok boyutlu diziler int[][] myTwoDimArray; myTwoDimArray = new int[10][5]; Kendinizi sınayın! Doğru mu? String[][] s; s = new String[10][]; Doğru mu? s = new String[][10]; // EVET! // HAYIR!

46 String s[][] = {{"Static", "multidimensional", "initialization", "of"}, {"arrays", "requires", "the", "use"}, {"of", "nested", "curlies"} }; Elde edilen: Çok boyutlu bir diziyi Static olarak yapılandırma: Static arrays of multidimensional requires nested Initialization the curlies of use (null)

47 Özet Diziler Bütün diziler birer nesnedir. Bildirimini ve yapılandırmasını yapmak zorundasınız. Diziler ya temel (primitive) türden elemanlara sahip bir dizidir ya da nesneler içeren bir dizidir. Dizi uzunlukları sabit olarak belirtilir. Bildirim yapıldıktan sonra bir daha değiştiremezsiniz; diziler kendi uzunluklarını bilirler –For döngülerinde Array.length özelliğini kullanarak -/+ 1 hatalarından kurtulun –2D dizi: dizilerin dizisi anlamına gelir

48 Sorular?

49


"Sorular? Öneriler?. Referanslar Referanslar (Tekrar) Eğer aşağıdaki gibi yazarsak ne olur: int x; double y; char c; ???" indir ppt

Benzer bir sunumlar


Google Reklamları