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.

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.
SINIFLAR Yılmaz Kılıçaslan.
Ders İçeriği Bağlantılı Liste İki Yönlü Bağlantılı Liste
Nesneye Yönelik Programlama
Programlama-II (Java ile Bilgisayar Programlama)
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 6: Sınıflar
Ü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.
P AKET E RIŞIMLERI SıNıFLARıN YENIDEN KULLANıMı. P AKET ( P ACKAGE ) Paketler kütüphaneleri oluşturan elemanlardır. import java.io.BufferedReader; BufferedReader.
KOPYA YAPICI FONKSİYON, STATİK ELEMANLAR, ARKADAŞ SINIF VE FONKSİYONLAR, NESNE DİZİLERİ Yılmaz Kılıçaslan.
Nesne Tabanlı Programlama
Nesneye Yönelik Programlama Dr. Pelin GÖRGEL
NESNEYE YÖNELİK PROGRAMLAMA
P 2. Ünitede Nesneye Dayalı Programlama anlatılıyor. p Nesneye dayalı programlama yeni veri tiplerinin ve bu tipleri işletmek için gereken işlemleri oluşturmayı.
DELEGATE OOP-UYG.
Erişim Denetimi, Fonksiyon
NESNE TABANLI PROGRAMLAMA -METOTLAR-
Önemli noktalar Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar
C# Metot Overloading (Aşırı yükleme)
Sorular? Öneriler?. Referanslar Referanslar (Tekrar) Eğer aşağıdaki gibi yazarsak ne olur: int x; double y; char c; ???
JAVADA PROGRAM DENET İ M İ VE OPERATÖRLER. int a ; a=4 ; // do ğ ru bir atama 4=a ; // yanlış bir atama!
METODLAR Canan Işıl. 1 İçindekiler Açıklamalar, Örnekler, Sorularınız? Kaynakça, Teşekkürler..
NESNEYE DAYALI PROGRAMLAMA
Chapter 7: Using Methods. Metotları ve Kodlamayı Gizlemeyi Anlama Metot – Kapsüllenmiş ifadeler serisini gerçekleştiren bir görev – Kullanılan metodun.
SINIFLAR VE DİNAMİK BELLEK YÖNETİMİ
LINQ (Language Integrated Query)
Görsel C# Programlama Güz 2009 (6. Hafta).
Java Sınıf ve Nesne Kavramı UML Gösterimi
Sınıflar ve Fonksiyonlar
Ses Kontrol Metodlar ile ilgili son birkaç söz Tekrar: Programlama için başlıca 3 model.
SABİT NESNE VE ELEMAN FONKSİYONLAR VE ELEMAN NESNELER
JAVA İLE PROGRAMLAMAYA GİRİŞ
ÇOK BİÇİMLİLİK POLYMORPHISM
Önceki Dersi Hatırlama !!
Kalıtım.
JAVA’DA DÖNGÜLER.
EDUTIME Java Day 8 Serdar TÜRKEL.
Numaralandırmalar(Enumaration)
Kalıtım , Sınıf Asli Ergün.
JAVA’DA DİZİLER Dr.Galip AYDIN.
SINIFLAR VE DİNAMİK BELLEK YÖNETİMİ VE SINIFLARIN DİĞER ÖZELLİKLERİ Yılmaz Kılıçaslan.
Trees, Vectors, Iterators. ADT Abstract Data Type (ADT) vs implementation -Soyut Veri Türleri - Uygulamaları.
Ders İçeriği Liste Soyut veri yapısı (ADT)
C PROGRAMLAMA FONKSİYONLAR Adres ile Fonksiyon Çağırma Pointer (İşaretçiler) ile Fonksiyon Çağırma Rekürsif Fonksiyonlar.
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.
Bilgisayar programlarının en büyük avantajı, kullanıcının işini kolaylaştırmalarıdır. Her bilgisayar programı bunu değişik metotlar kullanarak sağlar.
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; }
BİLGİSAYAR programlama II
Hafta2 Rekürsif Algoritmalar
KALITIM(INHERITANCE) Öğr.Gör. Murat ASLANYÜREK. KALITIM KAVRAMINA GİRİŞ  Kalıtım, sınıflardan yeni sınıflar türetmeyi sağlar.  Türetilen yeni sınıflar,
Sakarya Üniversitesi Bilgisayar ve Bilişim Bilimleri Fakültesi Bilgisayar Mühendisliği Prof. Dr. Ümit Kocabıçak Prof. Dr. Cemil Öz Doç. Dr. Ahmet Turan.
İbrahim Olgaç PROGRAMLAMA DİLLERİ SUNUMU C#
Nesneye Dayalı Programlama
C Programlama Yrd.Doç.Dr. Ziynet PAMUK BMM211-H11
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
Nesneye Dayalı Programlama 1
Nesneye Dayalı Programlama 1
NİŞANTAŞI ÜNİVERSİTESİ
Sunum transkripti:

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: 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 NeuralNetwork Nesneler: İ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

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

Kullanım şekli Box sampleBox = new Box(); sampleBox.iLength = 10; Kurallara uygun mu? Tercih edilen: sampleBox.setLength(10); Neden?

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ı

Örnek class 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...

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

Nesnelerin veya üyelerin oluşturulması

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

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.

Nesneler 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 55 x x y y

Nesneler ve referanslar Nesnelerde atamalar Kod: Bellek: box1 box2 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=2 box1 box2 L=8, W=5, H=7 box1 box2 box1 = new Box(8, 5, 7); L=8, W=5, H=7

Sorular?

Parametreler

Ö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

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

Ö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

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

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

public class Grade { String name; double value; public Grade(String newName) { name = newName; } // Constructor public 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 kodu

Ana programın kodu class Compute_Grade { /** 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

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

Sorular?

Jenerik Sınıflar (Generic Classes)

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.

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?

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.

Bağlı liste örneği Pseudocode: LL_Node isoftype record data isoftype next isoftype Ptr toa LL_Node endrecord // LL_Node data next

İlk önce bir düğüm public class Node { private Object data; public Node( Object d ) { setData( d ); } // Constructor public 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ı?

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)

İlk önce bir düğüm public class Node { private Object data; public Node( Object d ) { setData( d ); } // Constructor public void setData( Object d ) { data = d; } public Object getData() { return data; } public String toString() { if(data == null) return "null"; else return data.toString(); } public Object clone() { return new Node( data ); } public int hashCode() { // need to deal with potential null here too return data.hashCode(); }

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

Sorular?