Lecture 11: Generics

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

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

BİL-142 Bilgisayar Programlama II

4. Bölüm Programlamaya Giriş

HSancak Nesne Tabanlı Programlama I Ders Notları

Sunum İçeriği. Programlamaya Giriş

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.

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

Temel Kavramlar BBS-515 Nesneye Yönelik Programlama

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

Java 2 Standart Edition SDK Kurulum ve Java ya Giriş

Görsel Programlama DERS 01. Görsel Programlama - Ders01/ 1

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

Balon & Banka Teslim tarihi: 17 Kasım 2008

Programlama Dilleri 1. Ders 12: Belirleyiciler ve Niteleyiciler

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

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

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

C# nedir,.net Framework nedir?

BİL132 Bilgisayar Programlama II

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

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

C#(Sharp) Programlama Dili

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

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

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

YZM 2116 Veri Yapıları

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 1. Bölüm C# Programlamaya Giriş

19 Şubat 2016 Cuma

Nesne Tabanlı Programlama Dersi Edirne Kız Teknik ve Meslek Lisesi

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

Java Temel Özellikleri

public static int Toplam int x, int y

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

NESNEYE YÖNELİK PROGRAMLAMA

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

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

İÇERİK 2 Java Kodlaması için Gerekli Programlar JRE, JDK kurulması ve Başlangıç Ayarları Java Kodlamayı Kolaylaştıran IDE ler Java Kod Yapısı İlk Java

Mantıksal İşlemler. 7.1 true, false, nil

Nesne Yönelimli Programlama

YZM 2105 Nesneye Yönelik Programlama

Ruby Nedir? 1.1 Amaçlar. 1.2 Ruby nin Yapısal Sıradüzeni

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

Facade (Cephe) Tasarım Şablonu KurumsalJava.com

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler

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

NESNE TABANLI PROGRAMLAMA

Ders 4: Diziler (Arrays( Arrays) barisgokce.com

Nesne Yönelimli Programlama

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

Üst Düzey Programlama

Bir dizinin boyutları sabittir ve kullanılmadan önce belirlenmelidir. Dizi boyutunu belirlemek için başka bir değişkende kullanabilirsiniz.

PROGRAMLAMAYA GİRİŞ DERS 2

Klavyeden Basit Giriş/Çıkış İşlemleri

Nesneye Yönelik Programlama (OOP) 7.Hafta

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

Android Ders Notları

Genel Programlama II

Analiz Raporu. Projenin amacının, konusunun, işlevinin ne olacağı, hangi yazılımlar kullanılacak gibi parametrelerin belirlenmesi.

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

«BM364» Veritabanı Uygulamaları

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:

Programlama Dilleri III 1

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

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;

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2

Programlama Dillerinde Kullanılan Veri Tipleri

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

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

Programlama Dilleri II. Bilgisayar ve Öğretim Teknolojileri Öğretmenliği

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

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay.

Bilgisayarda Programlama. Temel Kavramlar

GÜZ YY. - MKT103 - GÖRSEL PROGRAMLAMA DERSİ - ARA SINAVI

TEMEL BİLGİ TEKNOLOJİLERİ KULLANIMI

Nesneye Dayalı Programlama

Nesneye Dayalı Programlama

C++ Dersi: Nesne Tabanlı Programlama

Dizi ( Array ) ve Dizgi ( String )

Sınav tarihi : Süre : 60 dak. a) ABCDE b) BCDE c) ABCD d) kod hatalı e) BCD

C# ile NJ Simulatöre Bağlanmak

Dizi türündeki referanslar, dizi nesnelerine bağlanmaktadır. Dizi referansları tanımlamak bu dizinin hemen kullanılacağı anlamına gelmez...

BİL-141 Bilgisayar Programlama I (Java)

OMNET Ağ Benzetim Yazılımı (Network Simulation Framework) BİL 372 Bilgisayar Ağları. GYTE - Bilgisayar Mühendisliği Bölümü

Üst Düzey Programlama

Teori/Saat Uygulama/Saat Laboratuar/Saat AKTS BLM Dersin Amacı

BM-209 Nesne Yönelimli Programlama. Yrd. Doç. Dr. İbrahim Alper Doğru Gazi Üniversitesi Teknoloji Fakültesi Bilgisayar Mühendisliği Bölümü

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

EMT2226 Nesne Yönelimli Programlamaya Giriş

Öğr. Gör. Serkan AKSU 1

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

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

BMS-302 İleri Web Programlama. İş Parçacığı (Thread) ve Soket (Socket) Programlama

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN

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

HSancak Nesne Tabanlı Programlama I Ders Notları

4- Turbo Pascal Bilgisayar Programlamada Kullanılan Şart Yapıları

Linux Assembly Programlamaya Giriş

Nesneye Dayalı Programlama

// hataları işaret eden referans

Transkript:

BLM202E Data Structures Lecture 11: Generics Bilgisayar Mühendisliği Bölümü Öğr. Gör. Musa AYDIN 2014 2015 (Bahar) BLM202E Data Structures - 2015 Spring

Java programlama dilinin güçlü özelliklerinden biri de Jenerikler (generics) konusudur; C++ dilindeki Template (Şablon) kavramı ile hemen hemen aynı işlevlere sahip java da jenerikler ( generics), ön tanımlı (built in) dil özelliği (language feature) olarak gelmektedir ve jenerikleri kullanarak çok daha güvenilir ve sağlam uygulamalar geliştirebilirsiniz. 9.5.2015 BLM202E Data Structures - 2015 Spring 2

Yazılım geliştirme süreçlerinde en önemli sorunlardan biri hatalarla (bug) uğraşmak ve bunları olabildiğince engellemeye çalışmaktır. Ne kadar sağlam ve özenle uygulama geliştirdiğinizi düşünürseniz düşünün, muhakkak uygulamalarınızda bir süre sonra hatalar meydana gelecektir. Java, Jenerik (Generic) özelliği ile uygulamalarınızda ki hataları minimuma indirmeyi amaçlar. Dahası uygulamalarınızda kullandığınız kodların çok daha etkili bir şekilde tasarlanmasına yardımcı olur. 9.5.2015 BLM202E Data Structures - 2015 Spring 3

Öte yandan jenerikler, Java nın sunduğu Java Collection Framework kütüphanesi tarafından kullanıldığından öğrenilmesi ve uygulamaya konması son derece önemli. 9.5.2015 BLM202E Data Structures - 2015 Spring 4

Aşağıda jenerik kullanılmadan oluşturulmuş basit bir sınıf var. Bu sınıf Object tipinde tüm nesneleri sınıf değişkenine atayabiliyor. Primitive tipler dışında herhangi bir Java nesnesini sınıfın add metoduna geçirebilirsiniz. 9.5.2015 BLM202E Data Structures - 2015 Spring 5

Buraya kadar her şey çok güzel. Fakat, bu sınıfa özel olarak belirlediğiniz herhangi bir sınıfı geçirmek istediğinizde (mesela Integer nesnesi) ve bu nesne tipi üzerinde işlem yapmak istediğinizde, tahmin edebileceğiniz gibi Java derleyicisinin bu durumdan en ufak bir fikri yok. 9.5.2015 BLM202E Data Structures - 2015 Spring 6

Aşağıdaki program bir Box nesnesi oluşturur ve nesneye add metodu aracılığı ile bir Integer nesnesi geçirir. Daha sonra başka bir Integer nesnesine Box sınıfımıza geçirdiğimiz Integer nesnesini atayarak bu nesneyi ekrana bastırır. 9.5.2015 BLM202E Data Structures - 2015 Spring 7

Box nesnesinden dönen değeri Integer nesnemize atayıp programımızı sorunsuz bir şekilde çalıştırabiliyoruz. 9.5.2015 BLM202E Data Structures - 2015 Spring 8

Box nesnesinden dönen değerin Integer olduğunu garanti eden herhangi bir mekanizma var mı????????????? Hatırlayın derleyicinin olan bitenden haberi yok, herhangi bir uyarı ya da hata vermeden kodu derleyecektir. 9.5.2015 BLM202E Data Structures - 2015 Spring 9

Aşağıdaki programda ise, Box nesnesine 10 stringini geçirdik ve daha sonra Integer nesnemize Box nesnesine geçirdiğimiz String nesnemizi Integer tipine cast ederek atamaya çalıştık. 9.5.2015 BLM202E Data Structures - 2015 Spring 10

Kod sorunsuz bir şekilde derlenerek bytecode a çevirildi. Java derleyicisi herhangi bir uyarı vermeden kodumuzu derledi. Hatırlayın, Java derleyicisinin olan bitenden herhangi bir haberi yok. 9.5.2015 BLM202E Data Structures - 2015 Spring 11

Derleyiciye göre herşey normal bu durumda. Fakat bu kodu çalıştırdığımız zaman karşımıza Exception in thread main java.lang.classcastexception: java.lang.string cannot be cast to java.lang.integer at BoxDemo2.main(BoxDemo2.java:28) (Dongggggg ) exceptionı gelecektir. Ancak çalışma zamanında (runtime) herhangi bir hata olup olmadığını anlayabildik. 9.5.2015 BLM202E Data Structures - 2015 Spring 12

Tamam Jenerikleri Kullanmam Gerek Ama Nasıl? Şimdi Box sınıfımızı jenerikler kullanarak tekrar tasarlayalım. Kodu güncellerken yapmamız gereken ekleme public class Box sözdizimini public class Box< T > şekline getirmek., 9.5.2015 BLM202E Data Structures - 2015 Spring 13

Tamam Jenerikleri Kullanmam Gerek Ama Nasıl? Burada yaptığımız işlem bir tip değişkeni belirlemek. Artık T adında bir tip değişkenimiz var ve bu tip değişkenini sınıfımızın içerisinde istediğimiz yerde kullanabiliriz. Sınıflar yanında bu tekniği Interfacelerde de kullanabiliriz. 9.5.2015 BLM202E Data Structures - 2015 Spring 14

Tamam Jenerikleri Kullanmam Gerek Ama Nasıl? Burada vurgulanması gereken tek şey, oluşturduğumuz T tip değişkeni, sınıfımızın bir örneğini (instance) oluştururken, sınıfa geçirdiğimiz belirli bir nesne tipini simgelemesi. Aslında tamamen değişkenler ile yapılan işlemlerin aynısı. Box sınıfımızı oluştururken Box box = new Box(); şeklinde değil de Box< Integer > box = new Box< Integer >(); şeklinde oluşturuyoruz. Bu sebeple T değişkenimiz artık Integer tipini simgeliyor ve sınıfımızda T tipini kullanarak yaptığımız tüm işlemler otomatik olarak Integer tipinde yapılıyor. 9.5.2015 BLM202E Data Structures - 2015 Spring 15

Tamam Jenerikleri Kullanmam Gerek Ama Nasıl? Şimdi sınıfımız çok daha güvenli ve hatalara karşı çok daha dirençli. Herhangi bir yanlış atama karşısında hataları çok daha kolay bir şekilde yakalayabilecek durumdayız. Şimdi test sınıfımızı da tekrar yazarak aradaki farklara bakalım. 9.5.2015 BLM202E Data Structures - 2015 Spring 16

Tamam Jenerikleri Kullanmam Gerek Ama Nasıl? Artık Box nesnemizden dönen değeri hem biz hem de Java derleyicisi biliyor. Dönen değer Integer tipinde. Box nesnesinden dönen herhangi bir değeri farklı bir nesne tipine atama yapmaya çalışıldığında, Java derleyicisi buna izin vermeyecektir. Java, programcıların yaptıkları hataları en aza indirmek ve sağlam ve stabil uygulamalar hazırlamak için geliştirilmiş bir dildir. 9.5.2015 BLM202E Data Structures - 2015 Spring 17

Tamam Jenerikleri Kullanmam Gerek Ama Nasıl? Ayrıca jenerik tipler tanımlanırken birden fazla tip değişkeni atanabilir. Örneğin < T, U > şeklinde bir tanımlama yapmak tamamı ile geçerlidir. Sınıf nesneleri oluşturulurken ilk verilen değer T ye, ikincisi U tipi ile değiştirilir. Yalnız, burada dikkat edilmesi gereken tek şey, aynı isme sahip tip değişkenleri bir arada kullanılamaz. Box< T, T > şeklinde bir atama yaptığınızda hata alırsınız. 9.5.2015 BLM202E Data Structures - 2015 Spring 18

??? 9.5.2015 BLM202E Data Structures - 2015 Spring 19

Kaynaklar [1] Data Structures and Algorithm Analysis in Java Mark A. Weiss 9.5.2015 BLM202E Data Structures - 2015 Spring 20