Sınıf üyeleri: değişkenler (fields) and metotlar (methods) Değişkenler: nesne içerisindeki değişkenlerdir Temel veri tipi veya sınıf tipi

Benzer belgeler
Sınıf üyeleri: değişkenler (fields) and metotlar (methods) Değişkenler: nesne içerisindeki değişkenlerdir Temel veri tipi veya sınıf tipi

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

BİL-141 Bilgisayar Programlama I (Java)

ANA SINIF TÜRETİLEN BİRİNCİ SINIF TÜRETİLEN İKİNCİ SINIF

Görsel Programlama DERS 02. Görsel Programlama - Ders02/ 1

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

Java Programlama Dili

Nesne Yönelimli Programlama

Arayüz (Interface) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 7 1

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

BMÜ-112 ALGORİTMA VE PROGRAMLAMA-II LABORATUARI DENEY-2 FÖYÜ

C++ Dersi: Nesne Tabanlı Programlama

Arayüz soyut metotların oluşturduğu bir koleksyondur. Bir sınıf arayüzü çalıştırırken arayüzün sahip olduğu soyut metotları da miras alır.

public static int Toplam int x, int y

HSancak Nesne Tabanlı Programlama I Ders Notları

NESNE TABANLI PROGRAMLAMA-1 DERS UYGULAMALARI (22 EYLÜL - 14 KASIM

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır.

Kalıtım (Inheritance)

Java Dersi. Altuğ Bilgin Altıntaş

Sınıflar ve Yapılar Arasındaki Farklılıklar. Değer ve Referans Türde Olan Aktarımlar

Java ile Nesneye Yönelik Programlama (Object Oriented Programming)

Eclipse, Nesneler ve Java 2 Java Nereden Çıktı? 2

abstract Sınıflar 1 Sınıf sınıf1 new class Ama aşağıdaki şekilde referans alınabilir;

5. Bölüm Alt Sınıflar (Nested Classes) Java ile Nesne Merkezli ve Fonksiyonel Programlama Akın Kaldıroğlu

C++ Dersi: Nesne Tabanlı Programlama

BMM3101 PROGRAMLAMA DİLLERİ

Ders 8 Konu Özeti ve Problemler

BMH-303 Nesneye Yönelik Programlama

BMH-303 Nesneye Yönelik Programlama

3. Bölüm Soyut Sınıflar (Abstract Classes) Java ile Nesne Merkezli ve Fonksiyonel Programlama Akın Kaldıroğlu

NESNEYE DAYALI PROGRAMLAMA 9. HAFTA UYGULAMA DERSİ

JavaFX Temelleri (1)

YZM 2105 Nesneye Yönelik Programlama

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

YZM 2105 Nesneye Yönelik Programlama

5.HAFTA. Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Yazılım Kodlama ve İ simlendirme Standartları v1.0

C++ Dersi: Nesne Tabanlı Programlama

İçerik. Kapsülleme ( Encapsulation ) Java da Kalıtım: Örnek 2.1. Kalıtım ( Inheritance ) Tekrar Ziyaret. Java da Kalıtım: Örnek 2.2.

Nesne Yönelimli Programlama ve Kalıtım

Lab7 DOĞU AKDENİZ ÜNİVERSİTESİ BİLGİSAYAR VE TEKNOLOJİ YÜKSEKOKULU BİLGİSAYAR PROGRAMCILIĞI. BTEP212 Java. Uygulama1: package javaapplication58;

Görsel Programlama. Temel Veri Tipleri, Değişkenler, Operatörler, Akış Kontrolü, Sınıflar, Metotlar, Paketler ve JavaDoc

BİL-142 Bilgisayar Programlama II

Interface Comparator. Kılgılayan sınıf: Collator. Bildirimi: public interface Comparator

Önemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance

İki Yöntem. Komposizyon (Composition) Kalıtım (Inheritance)

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 4. Yrd.Doç.Dr.Hacer Karacan

Sınıfların Tekrardan Kullanılması. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 5 1

Kapsülleme ( Encapsulation ) BBS-515 Nesneye Yönelik Programlama

11- FONKSİYONLAR (FUNCTIONS)

MOBIL UYGULAMA GELIŞTIRME

Operator Aşırı Yükleme (Operator OverLoading)

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 9

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 7

Lambda İfadeleri (Lambda Expressions)

Nesne Yönelimli Programlama

Nesneye Dayalı Programlama

C# Metotlar ve Metot Tanımlama

YZM 2105 Nesneye Yönelik Programlama

Ders 8: Metotlar. barisgokce.com

PAKET ERİŞİMLERİ SINIFLARIN YENİDEN KULLANIMI. BMU-112 Algoritma ve Programlama-II Yrd. Doç.Dr. İlhan AYDIN

BTEP243 Ders 3. class Yazım Kuralı:

Nesne Tabanlı Programlama

Sunum İçeriği. Programlamaya Giriş

Java C.Thomas Wu 2004b kitabından Türkçeleştirilerek ve örneklendirilerek hazırlanmıştır.

7. HAFTA. Erişim Belirleyiciler

Paket Erişimleri. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 4 1

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Nesne Yönelimli Programlama

JAVADA DİZİ İŞLEMLERİ

Erişim konusunda iki taraf vardır:

YZM 2108 Yazılım Mimarisi ve Tasarımı

BMÜ-111 ALGORİTMA VE PROGRAMLAMA AKIŞ KONTROLÜ YRD. DOÇ. DR. İLHAN AYDIN

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

Chain of Responsibility Tasarım Şablonu KurumsalJava.com

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 6

Kılgıladığı arayüzler: Serializable, Cloneable, Map<K,V>, NavigableMap<K,V>, SortedMap<K,V>

JAVADA METOTLAR. BMÜ-111 Algoritma ve Programlama. Yrd. Doç. Dr. İlhan AYDIN

İçerik. Temel Kavramlar. Nesne Nedir? 1. Nesne : Örnek. Nesne Nedir? 2. Geçen hafta: Bu hafta: BBS-515 Nesneye Yönelik Programlama

İlgili Konular: Object.equals(java.lang.Object), Object.hashCode(), rehash(), Collection, Map, HashMap, TreeMap, Serialized Form

Temel Kavramlar BBS-515 Nesneye Yönelik Programlama

C de Detaylı Üs Alma Programı. C# Dilinde Metot Tanımlama ve Yazdırma

Bire-bir Sahiplik İlişkisi ile İlgili Sorular:

Class PriorityQueue. Class PriorityQueue<E> java.lang.object java.util.abstractcollection<e> java.util.abstractqueue<e> java.util.

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

Java da, tüm değişkenlerin kullanılmadan önce tanımlanması edilmesi gerekir. Bir değişken tanımlamanın temel gösterimi bu şekildedir:

MAT214 BİLGİSAYAR PROGRAMLAMA II DERSİ Ders 12: Grafik Kullanıcı Arayüzü (Graphical User Interface-GUI)

Decorator Tasarım Şablonu

Programlama Dillerinde Kullanılan Veri Tipleri

Cahit GÜNGÖR Hacettepe Üniversitesi Bilişim Enstitüsü. Sorumluluk Zinciri. Kod Üretme (Code Generation)

Öğr. Gör. Serkan AKSU 1

1 JAVASCRIPT NEDİR? 1

NESNEYE YÖNELİK PROGRAMLAMA

Dizi ( Array ) ve Dizgi ( String )

Şablon Türler (Generics)

Java Programlama Güz Dönemi CLASS YAPISI

Java Programlama. Jenerikler

Nesneye yönelik: Javada herşey bir nesnedir. Java nesne yönelimli olduğu için kolayca geliştirilebilir.

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

Transkript:

Görsel Programlama Metot Yeniden Tanımlama, Metot Aşırı Yükleme, Dinamik Metot Yükleme, Soyut Sınıflar, Soyut Metotlar, Arayüzler, Çoklu Kalıtım, Anonim Sınıflar ve java.lang.object

Sınıflar Programcı tarafından tanımlanan veri tipleridir Nesne: sınıfın bir örneğidir Sınıf tanımı, sınıfın adında bir Java dosyası içerisinde yapılır: <SınıfAdı>.java Sınıf adları geleneksel olarak büyük harfle başlar Sınıf üyeleri: değişkenler (fields) and metotlar (methods) Değişkenler: nesne içerisindeki değişkenlerdir Temel veri tipi veya sınıf tipi Metotlar: Java komutlarını içeren prosedürlerdir (functions?)

Örnek: MyClass.java class MyClass { int myvariable; int getvariable() { return myvariable; void setvariable(int value) { myvariable = value;

Sınıf Üyelerine Erişim Sınıfın içerisinden: Değişkenin yada metotun adı kullanılarak erişilir. Örnekler: myvariable = 0; setvariable(0); Opsiyonel olarak, this anahtar kelimesi kullanılabilir, e.g. this.myvariable Yerel değişkenler alanı gölgelediği durumda gereklidir Dışarıdaki bir sınıftan: Nesne değişkeni +. + alanın yada metotun adı Örnekler: myobject.myvariable = 0; myobject.setvariable(0);

Alt Sınıflar (Subclasses) Başka bir sınıftan türetilen sınıflardır Türetildikleri sınıfa süper sınıf ya da temel sınıf (superclass or base class) denir Alt sınıf, temel sınıfın özelliklerini genişletir Temel sınıfın değişkenlerini ve metotlarını miras alır Ek değişkenler veya metotlar tanımlayabilir Kodların yeniden kullanımını kolaylaştırır Bir alt sınıf, diğer bir sınıf tarafından temel sınıf olarak kullanılabilir. Direk veya dolaylı temel sınıf alt sınıf ilişkisi Kalıtım hiyerarşisi

Temel Sınıf: MyClass.java class MyClass { int myvariable; int getvariable() { return myvariable; void setvariable(int value) { myvariable = value;

Alt Sınıf: MySubClass.java class MySubClass extends MyClass { int subclassvariable; int getvariablesum() { return myvariable + subclassvariable; void setvariables(int value) { subclassvariable = value; setvariable(value);

Metot Yeniden Tanımlama (Method Override) (1/2) Alt sınıflar, temel sınıfın metotlarını miras alırlar Ancak bir alt sınıf isterse bir temel sınıf metotunu yeniden tanımlayabilir Alt sınıftaki metota, yeniden tanımlanmış metot (overridden method) denir Örnek: class SuperClass { void method() { void overriddenmethod() {

Metot Yeniden Tanımlama (Method Override) (2/2) Örnek (devamı): class SubClass extends SuperClass { void overriddenmethod() { subclassobj.method(); // Temel sınıf metotu subclassobj.overriddenmethod(); // Alt sınıf metotu Yeniden tanımlanmış metotun temel sınıftaki versiyonu «super» anahtar kelimesi kullanılarak alt sınıftan çağırılabilir Örnek: super.overriddenmethod();

Örnek: Metot Yeniden Tanımlama (1/3) class A { int i, j; A(int a, int b) { i = a; j = b; void show() { System.out.println("i and j: " + i + " " + j);

Örnek: Metot Yeniden Tanımlama (2/3) class B extends A { int k; B(int a, int b, int c) { super(a, b); k = c; void show() { System.out.println("k: " + k);

Örnek: Metot Yeniden Tanımlama (3/3) class Override { public static void main(string args[]) { B subob = new B(1, 2, 3); subob.show(); // this calls show() in B

Metot Aşırı Yükleme (Method Overloading) İki metot aynı ismi taşıyorsa, ancak tip imzaları (type signatures) farklı ise metot aşırı yüklenmiş olur Metotun yeniden tanımlanması için tip imzalarının da uyuşması gerekir Aşırı Yükleme Örneği: void show() void show(string msg)

Dinamik Metot Yükleme Yeniden tanımlanmış bir metotun hangi versiyonunun çağırılacağı çalışma zamanında belirlenir Java da çalışma zamanı çok şekillilik (polymorphism) bu şekilde sağlanır Hangi metotun çağırılacağı aşağıdaki prensiplere göre belirlenir: Referans değişkenin tipinin ne olduğu önemli değildir Referans gösterilen nesnenin tipi ne ise, o tipe ait sınıfın metotu çağırılır

Örnek: Dinamik Metot Yükleme (1/2) class A { void callme() { System.out.println("Inside A's callme method"); class B extends A { void callme() { System.out.println("Inside B's callme method");

Örnek: Dinamik Metot Yükleme (2/2) A a = new A(); // object of type A B b = new B(); // object of type B A r; // obtain a reference of type A r = a; // r refers to an A object r.callme(); // calls A's version of callme r = b; // r refers to a B object r.callme(); // calls B's version of callme

Problem: Şekiller ve Dinamik Metot Yükleme Bir sonraki slaytta verilen Figure sınıfından türetilen Rectangle ve Triangle sınıflarını oluşturun Bu sınıflardaki area() metodunu bu sınıflara uygun şekilde yeniden tanımlayın Başka bir sınıf tanımlayarak, bu sınıfın main metodu içerisinde bu sınıfları kullanın.

Çözüm: Şekiller ve Dinamik Metot Yükleme (1) class Figure { double dim1, dim2; Figure(double a, double b) { dim1 = a; dim2 = b; double area() { System.out.println("Area for Figure is undefined."); return 0;

Çözüm: Şekiller ve Dinamik Metot Yükleme (2) class Rectangle extends Figure { Rectangle(double a, double b) { super(a, b); // override area for rectangle double area() { System.out.println("Inside Area for Rectangle."); return dim1 * dim2;

Çözüm: Şekiller ve Dinamik Metot Yükleme (3) class Triangle extends Figure { Triangle(double a, double b) { super(a, b); // override area for right triangle double area() { System.out.println("Inside Area for Triangle."); return dim1 * dim2 / 2;

Çözüm: Şekiller ve Dinamik Metot Yükleme (4) Figure f = new Figure(10, 10); Rectangle r = new Rectangle(9, 5); Triangle t = new Triangle(10, 8); Figure figref; figref = r; System.out.println("Area is " + figref.area()); figref = t; System.out.println("Area is " + figref.area()); figref = f; System.out.println("Area is " + figref.area());

Çözüm: Şekiller ve Dinamik Metot Yükleme (5) Inside Area for Rectangle Area is 45 Inside Area for Triangle Area is 40 Area for Figure is undefined Area is 0

Soyut Sınıflar (Abstract Classes) Bazen temel sınıflar gerçekleştirime uygun olmayabilir (Örn: Figure) Soyut sınıflardan direk olarak nesne oluşturulamaz Sadece alt sınıflarından nesne oluşturulabilir Örnek: abstract class MyClass { class SubClass extends MyClass { MyClass myobject = new MyClass(); // Hata! MyClass myobject = new SubClass(); // Hata yok

Örnek: Soyut Sınıflar (1/3) abstract class A { abstract void callme(); // concrete methods are still allowed in abstract classes void callmetoo() { System.out.println("This is a concrete method.");

Örnek: Soyut Sınıflar (2/3) class B extends A { void callme() { System.out.println("B's implementation of callme.");

Örnek: Soyut Sınıflar (3/3) class AbstractDemo { public static void main(string args[]) { B b = new B(); b.callme(); b.callmetoo();

Soyut Metotlar (Abstract Methods) Gerçekleştirimi olmayan metotlardır Örnek: abstract void abstractmethod(); Soyut metotu bulunan sınıflar, soyut sınıf olarak tanımlanmalıdır Soyut bir sınıfın alt sınıfı: Ya miras ile alınan soyut metotları gerçekleştirir Ya da soyut bir sınıf olabilir

Soyut Metotu Olan Bir Sınıftan Alt Sınıf Oluşturmak Örnek: abstract class AbstractClass { abstract void abstractmethod(); class SubClass extends AbstractClass { void abstractmethod { // Miras ile alınan soyut metotun gerçekleştirimi

Arayüzler (Interfaces) (1/2) Java da türetilen sınıfların sadece tek bir temel sınıfı olabilir Çoklu kalıtım (multiple inheritence) arayüzler aracılığıyla sağlanır Soyut sınıflar gibi, hangi fonksiyonları içerdiği belli ama gerçekleştirimi olmayan yapılardır Tüm değişkenler public, static ve final tanımlıdır.

Arayüzler (Interfaces) (2/2) Tanımlanan tüm metotlar public tanımlıdır. Yapıcı içeremezler. Örnek: interface MyInterface { int field = 0; void interfacemethod();

Arayüz Gerçekleştirimi Bir sınıf, arayüzdeki tanımlı metotları gerçekleştirerek, bir arayüzü gerçekleştirebilir Örnek: class MyClass implements MyInterface { void interfacemethod() { // arayüz metotunun gerçekleştirimi

Arayüzler ve Soyut Sınıflar Eğer arayüzü gerçekleştiren sınıf soyut bir sınıfsa, arayüz metotlarını gerçekleştirmeyebilir. Bu durumda, arayüz metotları, soyut sınıfın alt sınıfları tarafından gerçekleştirilmelidir

Çoklu Kalıtım (1/2) Bir sınıf birden fazla arayüzü gerçekleştirebilir (çoklu kalıtım!) Örnek: class MyClass implements FirstInterface, SecondInterface { void firstinterfacemethod() { // FirstInterface arayüzündeki metotun gerçekleştirimi void secondinterfacemethod() { // SecondInterface arayüzündeki metotun gerçekleştirimi

Çoklu Kalıtım (2/2) Sınıf, birden fazla arayüzü gerçekleştirirken aynı zamanda bir temel sınıftan türeyebilir Örnek: class MyClass extends MyBaseClass implements FirstInterface, SecondInterface { void firstinterfacemethod() { // FirstInterface arayüzündeki metotun gerçekleştirimi void secondinterfacemethod() { // SecondInterface arayüzündeki metotun gerçekleştirimi

Örnek: Arayüz Referanslarının Kullanımı (1/5) interface Callback { void callback(int param); class Client implements Callback { // Implement Callback's interface public void callback(int p) { System.out.println("callback called with " + p);

Örnek: Arayüz Referanslarının Kullanımı (2/5) class Client implements Callback { // Implement Callback's interface public void callback(int p) { System.out.println("callback called with " + p); void nonifacemeth() { System.out.println("Classes that implement interfaces " + "may also define other members, too.");

Örnek: Arayüz Referanslarının Kullanımı (3/5) class TestIface { public static void main(string args[]) { Callback c = new Client(); c.callback(42);

Örnek: Arayüz Referanslarının Kullanımı (4/5) // Another implementation of Callback. class AnotherClient implements Callback { // Implement Callback's interface public void callback(int p) { System.out.println("Another version of callback"); System.out.println("p squared is " + (p * p));

Örnek: Arayüz Referanslarının Kullanımı (5/5) class TestIface2 { public static void main(string args[]) { Callback c = new Client(); AnotherClient ob = new AnotherClient(); c.callback(42); c = ob; // c now refers to AnotherClient object c.callback(42);

Anonim Sınıflar (Anonymous Classes) İsimsiz sınıflardır Aynı anda, hem bir sınıfı tanımlamayı ve hem de bu sınıftan yeni nesne oluşturmayı sağlar Var olan bir sınıftan türetilmeli ya da var olan bir arayüz gerçekleştirilmelidir Diğer nesneye yönelik programlama dillerinde içsel sınıf (inner class) olarak adlandırılırlar

Anonim Sınıf Kullanımı Sırasıyla: new operatörü Yeni sınıf türetilecek sınıfın ya da gerçekleştirilecek arayüzün adı Yapıcı parametrelerini içeren parantezler Arayüz imlementasyonu ise, içi boş parantezler Anonim sınıfın içeriği Temel sınıf ya da arayüz metotlarının (yeniden) gerçekleştirimi

Anonim Sınıf Örneği (Arayüz Kullanarak) MyInterface anonymous = new MyInterface() { public void interfacemethod() { // arayüz metotunun gerçekleştirimi ; anonymous.interfacemethod();

Gerçekçi Örnek - JavaFX public void start(stage primarystage) { primarystage.settitle("hello World!"); Button btn = new Button(); btn.settext("say 'Hello World'"); btn.setonaction(new EventHandler<ActionEvent>() { ); @Override public void handle(actionevent event) { System.out.println("Hello World!");

java.lang.object Tüm sınıfların temel sınıfıdır Tüm sınıflar Object sınıfının üyelerini miras alır (extends anahtar kelimesi?) boolean equals(object obj) Nesnenin obj nesnesi ile aynı olup olmadığını kontrol eder.

java.lang.object tostring() metodu Nesnenin String olarak açıklamasını döndürür Bir nesne + operatörü kullanılarak bir string ile birleştirildiğinde otomatik olarak çağırılır Alt sınıflar tarafından yeniden tanımlanabilir Örnek: // aşağıdaki iki kullanım aynı sonucu üretir objstring = "Nesne: " + myobject; objstring = "Nesne: " + myobject.tostring();