BMH-303 Nesneye Yönelik Programlama

Benzer belgeler
BMH-303 Nesneye Yönelik Programlama

BİL-141 Bilgisayar Programlama I (Java)

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 )

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

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

public static int Toplam int x, int y

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.

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

MOBIL UYGULAMA GELIŞTIRME

Cybersoft Bilişim Teknolojileri Sunucu Tarafı Programlaması Kursu Final soruları. Tarih: 27 Kasım 2010 Saat: 13:30 Süre: 3 saat

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

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.

Nesne Yönelimli Programlama

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

Şablon Türler (Generics)

Spring Framework Eğitimi

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

WEB PROGRAMLAMA II. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

BİL-142 Bilgisayar Programlama II

11- FONKSİYONLAR (FUNCTIONS)

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

YZM 2105 Nesneye Yönelik Programlama

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

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

Ders 8 Konu Özeti ve Problemler

Bölüm 12. Nesne yönelimli programlama desteği

Nesne Yönelimli Programlama

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:

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

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

Nesneye Dayalı Programlama

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

Bölüm 24. Java Ağ Uygulamaları 24.1 Java Appletleri. Bir Applet in Yaşam Döngüsü:

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;

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

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

BMM3101 PROGRAMLAMA DİLLERİ

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

Java Class Yapısında Finalize Metotunun Kullanımı

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

C++ Dersi: Nesne Tabanlı Programlama

Java dili, aşağıdakiler de dahil olmak üzere çok çeşitli denetleyici türlerine sahiptir.

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

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

YZM 2105 Nesneye Yönelik Programlama

CharArrayReader. Kılgıladığı Arayüzler: Bildirimi: Değişkenleri (fields): java.io.reader Sınıfından Kalıtsal Gelen Değişken:

Nesneye Dayalı Programlama

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

BİL132 Bilgisayar Programlama II

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

Öğr. Gör. Musa AYDIN Fatih Sultan Mehmet Vakıf Üniversitesi

Nesneye Yönelik Programlama (OOP) 7.Hafta

Nesneye Dayalı Programlama

TEMPLATES. Binnur Kurt Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi. C++ ile Nesneye Dayalı Programlama 1

Lecture 11: Generics

Final Sınavı Örnek Soruları Bahar 2018

YZM 2116 Veri Yapıları

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

Veri Yapıları ve Algoritmalar dönem

Sunum İçeriği. Programlamaya Giriş

MAT214 BİLGİSAYAR PROGRAMLAMA II DERSİ Ders 8: Sınıf (Class) Yapılarına Giriş

İsimler ve Kapsam. 24 Şubat Programlama Dilleri - Pamukkale Üniversitesi 1

ECLIPSE PROGRAMININ ÇALIŞTIRILMASI

10/17/2007 Nesneye Yonelik Programlama 3.1

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

HSancak Nesne Tabanlı Programlama I Ders Notları

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

HSancak Nesne Tabanlı Programlama I Ders Notları

Programlama Dillerinde Kullanılan Veri Tipleri

Lambda İfadeleri (Lambda Expressions)

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 7

ByteArrayOutputStream

Java da Program Denetimi ve Operatörler. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 2 1

«BM364» Veritabanı Uygulamaları

Nesne Yönelimli Programlamaya Giriş - 2. Cem Ahmet MERCAN 16/04/2009

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

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

7. HAFTA. Erişim Belirleyiciler

Maltepe Üniversitesi Bilgisayar Mühendisliği Bölümü BİL 203 Veri Yapıları ve Algoritmalar I

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

Java String İşlemleri

Java Programlama Dilinde Veri Tipleri. Yrd. Doç. Dr. Aybars UĞUR

NESNEYE YÖNELİK PROGRAMLAMA

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

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

C++ Class larina baslangic. C++ Versus C Object-oriented Language C++ Structure dan Object Create etmek. Structure tanimlama.

Programlama Dilleri III 1

Nesne Yönelimli Programlama

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

Java Programlama Güz Dönemi CLASS YAPISI

DENİZ HARP OKULU BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜM BAŞKANLIĞI DERS TANITIM BİLGİLERİ

NESNE TABANLI PROGRAMLAMA

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

DATA STRUCTURES. Part III. Sınıflar, Nesneler ve İlgili Programlama Örnekleri

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

Nesne Tabanlı Programlama

Transkript:

BMH-303 Nesneye Yönelik Programlama this anahtar kelimesi ve kalıtım Dr. Musa ATAŞ Siirt Üniversitesi Bilgisayar Mühendisliği

this kelimesinin kullanım yerleri Aktif sınıfın örneğine referans vermek için Aktif sınıfın kurucusunu çağırmak için Aktif sınıftaki metodu çağırmada Metod çağrısında parametre olarak Kurucu metod çağrısında parametre olarak Aktif sınıfın örneğini geri döndürmede

Aktif sınıfın örneğine referans vermek için Bir metodun formal parametresi ile sınıf değişkenleri aynı isme sahipse atamalarda karışıklığı gidermek için kullanılır. Farklı isimler kullanılacaksa this kelimesini sınıf değişkenlerinin başına eklemek gereksizdir çünkü derleyici bunu sizin yerinize otomatik olarak zaten yapmaktadır.

class Student10{ int id; String name; Student10(int id,string name){ id = id; name = name; void display(){system.out.println(id+" "+name); public static void main(string args[]){ Student10 s1 = new Student10(111,"Karan"); Student10 s2 = new Student10(321,"Aryan"); s1.display(); s2.display(); Test it Now Output:0 null 0 null //example of this keyword class Student11{ int id; String name; Student11(int id,string name){ this.id = id; this.name = name; void display(){system.out.println(id+" "+name); public static void main(string args[]){ Student11 s1 = new Student11(111,"Karan"); Student11 s2 = new Student11(222,"Aryan"); s1.display(); s2.display(); Test it Now Output111 Karan 222 Aryan

Aktif constructor u çağırmada this() kullanımı Bir sınıfta constructor overloading yapılmışsa yani birden fazla farklı formal parametrelere sahip kurucu metod tanımlanmışsa ve eğer bu kurucu metodlar kendi içlerinde zincirleme bir birlerini çağırıyorlarsa kullanımı geliştiriciye bir pratik sağlayabilir. (method reuse)

//Program of this() constructor call (constructor chaining) class Student13{ int id; String name; Student13(){System.out.println("default constructor is invoked"); Student13(int id,string name){ this ();//it is used to invoked current class constructor. this.id = id; this.name = name; void display(){system.out.println(id+" "+name); public static void main(string args[]){ Student13 e1 = new Student13(111,"karan"); Student13 e2 = new Student13(222,"Aryan"); e1.display(); e2.display(); Test it Now Output: default constructor is invoked default constructor is invoked 111 Karan 222 Aryan

class Student14{ int id; String name; String city; Student14(int id,string name){ this.id = id; this.name = name; Student14(int id,string name,string city){ this(id,name);//now no need to initialize id and name this.city=city; void display(){system.out.println(id+" "+name+" "+city); public static void main(string args[]){ Student14 e1 = new Student14(111,"karan"); Student14 e2 = new Student14(222,"Aryan","delhi"); e1.display(); e2.display(); Test it Now Output:111 Karan null 222 Aryan delhi Kural:this() çağrımı constructor da ilk satırda yer almalıdır

this kelimesi derleyici tarafından kaynak koda otomatik eklenir.

this kelimesinin metoda formal parametre olarak gönderilmesi Genellikle olay yönetiminde (event handling) kullanılan bir yaklaşımdır. class S2{ void m(s2 obj){ System.out.println("method is invoked"); void p(){ m(this); public static void main(string args[]){ S2 s1 = new S2(); s1.p();

Kurucu metoda parametre olarak gönderilmesi Herhangi bir metoda gönderilebildiği gibi kurucu metoda da parametre olarak gönderilebilir. Bu özellik daha çok tek bir nesnenin birçok sınıf tarafından kullanılacağı durumlarda işimize yarar. class B{ A4 obj; B(A4 obj){ this.obj=obj; void display(){ System.out.println(obj.data);//using data mem ber of A4 class class A4{ int data=10; A4(){ B b=new B(this); b.display(); public static void main(string args[]){ A4 a=new A4();

Metodun aktif sınıf örneğini geri döndürmesinde Burada dikkat edilmesi gereken nokta metod primitive tür yerine kendi sınıfının türünde bir nesneyi geri döndüreceğidir. O yüzden metod tasarlanırken geri dönüş türü kendi sınıfı olarak belirtilmelidir. this kelimesinin bu tarz kullanımı daha çok fluent interface ve method chaining tasarım kalıplarında sıklıkla kullanılır. Open Cezeri Library (OCL) DSL kütüphanesindeki CMatrix sınıfı bu yaklaşımla geliştirilmiştir. https://github.com/hakmesyo/open-cezerilibrary

Method Chaining When to use it Method Chaining can add a great deal to the readability of an internal DSL and as a result has become almost a synonum for internal DSLs in some minds. Method Chaining is best, however, when it's used in conjunction with other function combinations. Method Chaining is particularly effective with grammars like parent::= (this that)*. The use of different methods provides readable way of seeing which argument is coming next. Similarly optional arguments can be easily skipped over with Method Chaining. A list of mandatory clauses, such as parent::= first second doesn't work so well with the basic form, although it can be supported well by using progressive interfaces. Most of the time I'd prefer Nested Function for that case. The biggest problem for Method Chaining is the finishing problem. While there are workarounds, usually if you run into this you're better off using a Nested Function. Nested Function is also a better choice if you are getting into a mess with Context Variables.

class A{ A geta(){ return this; void msg(){ System.out.println("Hello java"); class Test1{ public static void main(string args[]){ new A().getA().msg();

Kalıtım Bir sınıfın ata sınıfta tanımlı bütün özellik (states) ve davranışları (methods) devralmasıdır. Kalıtım OOP de is-a yani bu-dur ilişkisidir. Türetilen yeni sınıf ata sınıftan miras yolu ile aldığı özellik ve metodlara ek olarak yeni özellikler (sınıf değişkenleri) ve metodlar ekleyebilir veya varolan metodları yeniden tanımlayarak içeriğini değiştirerek kendisine has yaklaşımlar geliştirebilir. Kalıtım kod tekrar kullanılabilirliğini (code reuse) ve çalışma zamanı çok biçimliliğini sağladığı için kullanılmaktadır.

Syntax of Java Inheritance class Subclass-name extends Superclass-name { //methods and fields The extends keyword indicates that you are making a new class that derives from an existing class. In the terminology of Java, a class that is inherited is called a super class. The new class is called a subclass.

class Employee{ float salary=40000; class Programmer extends Employee{ int bonus=10000; public static void main(string args[]){ Programmer p=new Programmer(); System.out.println("Programmer salary is:"+p.salary); System.out.println("Bonus of Programmer is:"+p.bonus); Test it Now Programmer salary is:40000.0 Bonus of programmer is:10000 In the above example, Programmer object can access the field of own class as well as of Employee class i.e. code reusability.

Java da Kalıtım Çeşitleri Tekli (single) Çoklu (Multilevel) Hiyerarşik (Hierarchical) Not: Java da çoklu ve hibrid kalıtım sadece interface üzerinden yapılabilmektedir. İlerleyen derslerde ele alınacaktır.

Çoklu kalıtım Java da desteklenmemektedir

Çoklu kalıtım Java da neden desteklenmiyor? Dili basitleştirmek ve karmaşıklığı düşürmek için Belirsizliği gidermek için Mesela: A, B ve C isimli üç sınıfımız olduğunu farzedelim. C sınıfı A ve B sınıfından çoklu kalıtım ile türesin. A ve B sınıfında aynı metod imzasına sahip metodlar olduğunu düşünelim. OOP kalıtım prnesibinde göre C sınıfı ebeveyn sınıftan metodları devralır. Bu durumda C sınıfının bir örneği (nesnesi) isimleri aynı olan metodları çağırmada sorun yaşayacaktır. Yani hangi ata sınıfın metodunun çağrılacağı belirsizdir. Her zaman compile-time error (derlem zamanı hatası), run-time error a göre daha iyi olduğundan Java da çoklu kalıtım yazıldığında hata derleme hatası üretecektir.

Java da diamond problemi https://www.linkedin.com/pulse/dealing-diamond-problem-javasaral-saxena

Araştırma Soruları Java da diamond problemi nasıl çözülür? C++ da diamond problemi nasıl çözülür?