sınıflar ve nesneler

35
Sınıflar ve Nesneler

Upload: vincent-bernard

Post on 30-Dec-2015

63 views

Category:

Documents


3 download

DESCRIPTION

Sınıflar ve Nesneler. Anahtar fikir. 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. Nesne : - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Sınıflar ve Nesneler

Sınıflar ve Nesneler

Page 2: Sınıflar ve Nesneler

Sınıflar ve NesnelerSı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.

Nesne: sınıfın bir örnerği — static olmayan her değişkenin bir kopyasına sahiptir (üye değişkenleri için geçerlidir, sınıf değişkenleri için değil).

İsimlendirme kuralları:Sınıflar: Sınıf isminde her yeni başlayan kelime için büyük harf kullanılır. Örnek: class NeuralNetworkNesneler: İsim küçük harfle başlar, daha sonra gelen her kelime için büyük harfle başlanır. Örnek: thisObjectIdentifier

Sınıf ile nesne arasındaki ilişki, bir tür ile bu türe ait değişken arasındaki ilişkiye benzer. Anahtar fikir

Page 3: Sınıflar ve Nesneler

Sınıfın Tanımlanmasıclass Box { int iLength; int iWidth; int iHeight;

public void setLength (int iNewLength) { iLength = iNewLength; } // of setLength

public int getLength ( ) { return (iLength); } // of getLength public void setWidth (int iNewWidth) { iWidth = iNewWidth; } // of setWidth

public int getWidth ( ) { return (iWidth); } // of getWidth

public void setHeight (int iNewHeight) { iHeight = iNewHeight; } // of setHeight

public int getHeight ( ) { return (iHeight); } // of getHeight

public int getVolume ( ) { return ( getLength( ) * getWidth( ) * getHeight( ) ); } // of getVolume} // of class Box

Page 4: Sınıflar ve Nesneler

Kullanım şekli

Box sampleBox = new Box();

sampleBox.iLength = 10;

Kurallara uygun mu?

Tercih edilen:

sampleBox.setLength(10);

Neden?

Page 5: Sınıflar ve Nesneler

Yapıcılar (Contructors)

Page 6: Sınıflar ve Nesneler

Yapıcılar (Contructors)

• Aksi belirtilmedikçe varsayılan kullanılır

• Sınıf ile aynı ada sahip olmalıdır

• Geri dönüş değeri olmamalıdır

• Birden fazla Yapıcı için– Her biri farklı bir imzaya sahip olmalıdır

• Parametre sayısı, türü ve sırası

Page 7: Sınıflar ve Nesneler

Örnekclass Box {

int iLength;

int iWidth;

int iHeight;

public Box() {

} // Varsayılan Yapıcı

public Box(int iL, int iW, int iH) {

iLength = iL;

iWidth = iW;

iHeight = iH;

} // Box Yapıcısı

// SINIF TANIMLAMASI DEVAM EDİYOR...

Page 8: Sınıflar ve Nesneler

Örnek class Box {

int iLength; int iWidth; int iHeight;

public Box() {this(0, 0, 0);

} // Bu şekilde de kullanılabilir.

public Box(int iL, int iW, int iH) {iLength = iL;iWidth = iW;iHeight = iH;

} // Box Yapıcısı

// SINIF TANIMLAMASI DEVAM EDİYOR...

Page 9: Sınıflar ve Nesneler

Nesnelerin veya üyelerin oluşturulması

Page 10: Sınıflar ve Nesneler

10

Sınıf üyelerinin oluşturulmasıSınıf üyelerinin oluşturulmasıÜç şey içerir:

1. Referansın oluşturulması: Box thisBox ;

2. Nesnenin örneklenmesi: thisBox = new Box( );Veya ilk iki adımın aynı anda yapılması:

Box thisBox = new Box( );

3. İlk değerlerin oluşturulması için Yapıcıların kullanılması:

public Box (int iNewLength, int iNewWidth, int iNewHeight) {

setLength (iNewLength);setWidth (iNewWidth);setHeight (iNewHeight);

} // Yapıcı

Uygun Yapıcı da kullanılarak üç adım aynı anda yapılabilir:

Box thisBox = new Box (10, 5, 25);

Page 11: Sınıflar ve Nesneler

Eğer birşeyi iyi anladıysanız...

• ...referans kelimesiyle neyi kastettiğimizi.– Java ‘da oluşturulan her nesne yığın dediğimiz

dinamik bellek alanında oluşturulur. – Oluturma işlemi bize nesnenin bellekte

konumlandığı adresi geri döndürür. Bu, referans diye adlandırılır. C ‘deki gösterici (pointer) ile aynı mantıktır.

Box someBox; // Bu bir referans oluşturur.

someBox = new Box(10, 20, 30);

// Yeni bir Box oluşturduk ve referansını someBox ‘a iliştirdik.

Page 12: Sınıflar ve Nesneler

Nesneler ve referanslarNesneler ve referanslar

Temel değişkenler ve nesneler arasındaki farkı ayırt edin. Temel değerlerde atamalar:

Kod: Bellek:

int x; x

int y;

x = 5; 5

y = x;

yx

5 5

x

x

y

y

Page 13: Sınıflar ve Nesneler

Nesneler ve referanslarNesneler ve referanslar

Nesnelerde atamalar Kod: Bellek:

box1box2

Box box1;Box box2;

box2 = box1;// not: iki referans// fakat bir nesne

box1

box2

L=8, W=5, H=7

box1 = new Box(3, 9, 2); box1

box2 L=8, W=5, H=7

L=3, W=9, H=2

box1 = box2;// Eski referans kayboldu!

L=3, W=9, H=2box1

box2 L=8, W=5, H=7

box1

box2

box1 = new Box(8, 5, 7); L=8, W=5, H=7

Page 14: Sınıflar ve Nesneler

Sorular?

Page 15: Sınıflar ve Nesneler

Parametreler

Page 16: Sınıflar ve Nesneler

Önemli Konular• Java only has “in” parameters

public void swap(int a, int b){

int temp;temp = a;a = b;b = temp;

}• Fonksiyonlardan geriye değer

döndürebiliriz fakat bu yeterli olmayacaktır.

• Bir parametre bir nesneye referans ise– Nesnenin metdolarına ulaşabiliriz– Kalıcı değişiklikler yapabiliriz

Page 17: Sınıflar ve Nesneler

Kısa sınav!class Pop {

public static void swap(int x, int y) {

int t;

t = x;

x = y;

y = t;

} // swap

public static void main(String args[])

{

int a = 7;

int b = 99;

swap(a, b);

System.out.println("a = " + a + " b = " + b);

} // main

} // Pop

Page 18: Sınıflar ve Nesneler

Örnek

algorithm Compute_Grade// Calculates the course grade based// on the student’s assignments

prog_avg, quiz_avg, lab_avg, exam_score, grade_avg isoftype Num

Get_Data(prog_avg, quiz_avg, lab_avg, exam_score)

grade_avg <- Average(prog_avg, quiz_avg, lab_avg, exam_score)

Output_Grade(grade_avg) // Outputs letter grade

endalgorithm

Page 19: Sınıflar ve Nesneler

Get_Data

procedure Get_Data (prog, quiz, lab, exam isoftype out Num)

// Purpose: Prompts user for data & returns them// Pre-condition: none// Post-condition: passes values back to point of

call

print(“Enter your program average:”) read (prog)

print (“Enter your quiz average:”) read (quiz)

print (“Enter your lab average:”) read (lab)

print (“Enter your exam score:”) read (exam)

endprocedure //Get_Data

Page 20: Sınıflar ve Nesneler

Bunu Java ‘da nasıl ifade ederiz?

Bir adet Grade adında sınıf oluşturalım, bu sınıf bir adet grade adında bir değer içersin. Ayrıca bu değer ile ilgili işlemleri yapmak için metodlar oluşturalım.

Get_Data metodunu nasıl oluşturacağımızı canlandırın:

Grade nesnelerine referanslar oluşturma

Uygun değerleri kullanıcıdan alma

Grade nesne metotlarını değerleri işlemekte kullanma

Page 21: Sınıflar ve Nesneler

public class Grade {String name;double value;

public Grade(String newName) { name = newName;

} // Constructorpublic void setValue(double v) {

value = v;}public double getValue() {

return value;}public void setName(String n) {

name = n;}public String getName() {

return name;}

} // Grade

Grade sınıfı için Java koduGrade sınıfı için Java kodu

Page 22: Sınıflar ve Nesneler

Ana programın koduclass Compute_Grade {

<diğer ifadeler>

/** Girilen değerlere göre dersin notunun hesaplanması*/public static void main(String[] args){

double grade_avg;Grade prog = new Grade(“Program”);Grade quiz = new Grade(“Quiz”);Grade lab = new Grade(“Lab”);Grade exam = new Grade(“Exam”);

Grade.get_Data(prog, quiz, lab, exam);

grade_avg = average( prog, quiz, lab, exam );

output_Grade( grade_avg );}

} // Compute_Grade sınıfının sonu

Page 23: Sınıflar ve Nesneler

Get_Data metodu için kod// Still inside the class Compute_Grade

/*** Amaç: Kullanıcıdan veri girişi alır* İlk koşul: yok* Sonraki koşul: değerleri çağrıldığı yere geri döndürür. */public static void get_Data(Grade g1, Grade g2, Grade g3, Grade g4){ g1.setValue( IOGadget.readDouble("Enter “ + g1.getName() ); g2.setValue( IOGadget.readDouble("Enter “ + g2.getName() ); g3.setValue( IOGadget.readDouble("Enter “ + g3.getName() ); g4.setValue( IOGadget.readDouble("Enter “ + g4.getName() );

} //Get_Data

Page 24: Sınıflar ve Nesneler

Sorular?

Page 25: Sınıflar ve Nesneler

Jenerik Sınıflar

(Generic Classes)

Page 26: Sınıflar ve Nesneler

Bütün konteyner (Container) sınıfları Generic olmak zorundadır

• Generic sınıf oluşturmak hemen hemen gereksizdir– Bütün sınıflar Object sınıfından türetilir.– Herhangi bir türe ait bir nesne bu konteynerin içine

konulur. – Tip dönüşümü gerekir

hemen hemen:

• Temel veri türleri bu şekilde çalışmaz [int, char, double] – Her atomik veri türü kendisine ait bir konteyner içerir.

• Örneğin: Integer sınıfı, int veri türü için Nesne türünden bir konteynerdir.

Page 27: Sınıflar ve Nesneler

Object sınıfı bazı temel metodlar içerir

• clone() – Nesnenin bir klonunu oluştrurur.

– Derin bir kopyasını oluşturur.

• equals(Object) – İki nesnenin eşit olup olmadıklarını kontrol eder.

• getClass() – Nesnenin sınıfını geri döndürür.

• hashCode() – Nesneye ait bir hashcode geri döndürür.

– Diğer nesnelerle indekslemek için kullanılır.

• toString() – Nesnenin değerini String türünden ifade eden bir değer geri

döndürür.

– print() tarafından nesneyi stringleştirmek için dolaylı kullanılır

• Ve diğerleriyle muhtemelen daha sonra ilgileneceğiz.

Neden?

Page 28: Sınıflar ve Nesneler

Nesne metodlarını “aşırı yükleme/overload ”

• Bu metotların hepsi generic bir işlem yapar.• Ancak getClass() hariç diğerleri bir sizin

yazdığınız sınıflarda aşırı yüklenmelidir.– Bunları sanal metotlar olarak kabul edebilirsiniz

• Bu metotları alan sınıf bunların içini doldurmalıdır.

– Generic davranış genelde yapmak istediğiniz işlem değildir, ancak bütün nesnelerin aynı işlemleri yapmasını (aynı mesajlara kendilerine has şekilde cevap vermelerini) tercih ederiz.

Page 29: Sınıflar ve Nesneler

Bağlı liste örneği

Pseudocode:

LL_Node isoftype record

data isoftype <generic type>next isoftype Ptr toa LL_Node

endrecord // LL_Node

data

next

Page 30: Sınıflar ve Nesneler

İlk önce bir düğümpublic class Node {

private Object data;

public Node( Object d ) {setData( d );

} // Constructorpublic void setData( Object d ) { data = d; }public Object getData() { return data; }public String toString() {

return ( data.toString() );}public Object clone() {

return new Node( data );}public int hashCode() {

return data.hashCode();}

Tamam mı?

Page 31: Sınıflar ve Nesneler

Farkedilemeyen hata// public class Node (continued)

public static void main(String args[]){

Node n = new Node("Hello!");System.out.println("Should be Hello: " + n);n = new Node(null);System.out.println("Should be null: " + n);

} // main

}// Node

Should be Hello: Hello!Exception in thread "main" java.lang.NullPointerException: at Node.toString(Node.java:10) at java.lang.String.valueOf(String.java:1911) at java.lang.StringBuffer.append(StringBuffer.java:365) at Node.main(Node.java:25)

Page 32: Sınıflar ve Nesneler

İlk önce bir düğümpublic class Node {

private Object data;public Node( Object d ) {

setData( d );} // Constructorpublic void setData( Object d ) { data = d; }public Object getData() { return data; }public String toString() {

if(data == null)return "null";

elsereturn data.toString();

}public Object clone() {

return new Node( data );}public int hashCode() {

// need to deal with potential null here tooreturn data.hashCode();

}

Page 33: Sınıflar ve Nesneler

Now the Linked-List Node

class LLNode extends Node {private LLNode next;

public LLNode( Object d, LLNode n ) {super( d );set_next( n );

}public void setNext( LLNode n ) { next = n; };public LLNode getNext() { return next; };public String toString() {return ("{ data = " + super.toString()

+ "; next = " + next + " } " );}

} // LLNode

Page 34: Sınıflar ve Nesneler

Sorular?

Page 35: Sınıflar ve Nesneler