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

Slides:



Advertisements
Benzer bir sunumlar
Programlama-II (Java ile Bilgisayar Programlama)
Advertisements

Saatte V km hız ile giden bir aracın t zamanda aldığı yolu bulan metodu yazınız. Metodu kullanacak bir program yazınız. ( yol=hız*zaman, x=V*t) — Metot.
SCANNER SINIFI ve KLAVYEDEN VERİ OKUNMASI
Nesnelerin Özellikleri. - Üye nesneler - friend belirtesi - Nesnelerin operatörlere yüklenmesi - this yerel (lokal) değişkeni - inline tanımlı üye fonksiyonlar.
Göstericiler (Pointers)
SINIFLAR Yılmaz Kılıçaslan.
NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR
Yığın ve Kuyruk.
Ders İçeriği Bağlantılı Liste İki Yönlü Bağlantılı Liste
Programlama-II (Java ile Bilgisayar Programlama)
Nesneye Dayalı Programlama
String Diziler(Katarlar)
Bölüm 4 – Kontrol İfadeleri:1.kısım
EDUTIME Java Day 4 Serdar TÜRKEL.
P p 8. Ünitede yinelemeli programlamanın teknikleri anlatılmaktadır. p p Gördüğünüz gibi, yinelemeli programlama bir problemin içinde problemin küçük parçalarını.
BPR152 ALGORİTMA VE PROGRAMLAMA - II
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Diziler
Bölüm 10 Yapılar ve Birleşimler
Karar ifadeleri ve Döngüler
Üye ve Sınıf Bildirimleri. Aptal olmayın. Bir değişken sırf sınıf içerisindeki bir alan olarak tanımlandığı için üye değişken olacak diye bir şart yok.
Nesneye Yönelik Programlama Dr. Pelin GÖRGEL
SINIFLAR GİRİŞ Yılmaz Kılıçaslan.
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Diziler.
NESNEYE YÖNELİK PROGRAMLAMA
DİZİLER (Arrays) Yrd.Doç.dr. Cİhad demİrlİ
DİZİLER.
DELEGATE OOP-UYG.
Erişim Denetimi, Fonksiyon
METODLAR.
C# Metot Overloading (Aşırı yükleme)
JAVADA PROGRAM DENET İ M İ VE OPERATÖRLER. int a ; a=4 ; // do ğ ru bir atama 4=a ; // yanlış bir atama!
.Net teknolojisi ve C# Yasin Gedik Dokuz Eylül Üniversitesi (4. Sınıf) Microsoft Danışman Öğrenci
Görsel C# Programlama Güz 2009 (6. Hafta).
Java Sınıf ve Nesne Kavramı UML Gösterimi
BPR152 ALGORİTMA VE PROGRAMLAMA - II Öğr. Gör. Bayram AKGÜL
Ses Kontrol Metodlar ile ilgili son birkaç söz Tekrar: Programlama için başlıca 3 model.
Chapter 6: Using Arrays.
ÇOK BİÇİMLİLİK POLYMORPHISM
Önceki Dersi Hatırlama !!
Kalıtım.
Diziler Adres Kavramı Nesnelerin Adresleri sizeof Operatörü
JAVA’DA DÖNGÜLER.
Kalıtım , Sınıf Asli Ergün.
Polimorfizm.
Class KahveFincani { public KahveFincani() { System.out.println("KahveFincani..."); } } public class YapilandirciBasitOrnek { public static void main(String[]
Diziler (Arrays).
JAVA’DA DİZİLER Dr.Galip AYDIN.
Sınıflar ve Nesneler Sınıf: bir nesnenin şablonunu, kalıbını, şeklini, davranışını, kalıtımını değişkenleri, metodları ve ebeveynleri vasıtasıyla tanımlar.
Trees, Vectors, Iterators. ADT Abstract Data Type (ADT) vs implementation -Soyut Veri Türleri - Uygulamaları.
Ders İçeriği Liste Soyut veri yapısı (ADT)
Bölüm 5 Nesneler ve Metotlar
Bil 102 Bölüm 6 Diziler.
Bil 102 Bölüm 3 Java’da Program Akış Denetimi Bil 1021.
String class String karakterler dizisidir
Hata Ayıklama (Debugging), Arayüzler (Interfaces), Polimorfizm.
Outline 4.1 Giriş 4.2 Algoritmalar 4.3 Pseudocode 4.4 Kontrol İfadeleri 4.5 if tek-seçimli ifadeler 4.6 if else seçimli ifadeler 4.7 while döngü ifadeleri.
JAVA PROGRAMLAMA ORNEKLER
Görsel C# ile Windows Programlama
ODTU-SEM Copyright (c) 2011 Kalıtım(Inheritance) Subclass lar tüm method ve attributes larının superclass ından alırlar. Bu işlem için extends keyword.
SINIFLAR ve NESNELER. İlk sınıfımızı ekleyelim class KrediHesap { public ulong HesapNo; public double Limit; public string KartSahibi; }
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Diziler
İlk Değer Alma Sırası İlk Değer Alma Sırası Nesnelere ait global alanlara başlangıç değerleri hemen verilir; üstelik, yapılandırıcılardan (constructor)
BTP206– Görsel Programlama II
BİLGİSAYAR programlama II
İbrahim Olgaç PROGRAMLAMA DİLLERİ SUNUMU C#
JAVA’DA DİZİLER. Özet  Dizi: belirli sayıda ve aynı veri türünden de ğ işkenlere aynı adla erişilmesini sa ğ layan bir yapıdır.  Dizilerde döngü işlemleri.
Kurucular(Yapıcılar), Yıkıcılar
Nesneye Dayalı Programlama 1
NİŞANTAŞI ÜNİVERSİTESİ
Sunum transkripti:

Sorular? Öneriler?

Referanslar

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

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

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

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

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

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

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

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

Olması gereken: Box b; b = anotherBox;

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

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

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

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

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:

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

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

Ö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; }

Ö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

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 ??

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)); }

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

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

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

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Ş

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Ş

Çö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

Gölgeleme (Shadowing)

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

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! */

Zincirleme (Chaining)

Ö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

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)

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)

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)

Diziler

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.

Ö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

Ö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

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

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

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

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};

Ç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!

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)

Ö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

Sorular?