C# VE JAVA NESNE YÖNELİMLİ PROGRAMLAMA DİLLERİNDE COLLECTION FRAMEWORK'LERİN KARŞILAŞTIRMALI PERFORMANS ANALİZLERİ.

Ebat: px
Şu sayfadan göstermeyi başlat:

Download "C# VE JAVA NESNE YÖNELİMLİ PROGRAMLAMA DİLLERİNDE COLLECTION FRAMEWORK'LERİN KARŞILAŞTIRMALI PERFORMANS ANALİZLERİ."

Transkript

1 C# VE JAVA NESNE YÖNELİMLİ PROGRAMLAMA DİLLERİNDE COLLECTION FRAMEWORK'LERİN KARŞILAŞTIRMALI PERFORMANS ANALİZLERİ Şükran EBREN KARA YÜKSEK LİSANS TEZİ ELEKTRONİK BİLGİSAYAR EĞİTİMİ GAZİ ÜNİVERSİTESİ BİLİŞİM ENSTİTÜSÜ OCAK 2014 ANKARA

2

3 C# VE JAVA NESNE YÖNELİMLİ PROGRAMLAMA DİLLERİNDE COLLECTION FRAMEWORK'LERİN KARŞILAŞTIRMALI PERFORMANS ANALİZLERİ Şükran EBREN KARA YÜKSEK LİSANS TEZİ ELEKTRONİK BİLGİSAYAR EĞİTİMİ GAZİ ÜNİVERSİTESİ BİLİŞİM ENSTİTÜSÜ OCAK 2014 ANKARA

4

5

6 iv C# VE JAVA NESNE YÖNELİMLİ PROGRAMLAMA DİLLERİNDE COLLECTION FRAMEWORK'LERİN KARŞILAŞTIRMALI PERFORMANS ANALİZLERİ (Yüksek Lisans Tezi) Şükran EBREN KARA GAZİ ÜNİVERSİTESİ BİLİŞİM ENSTİTÜSÜ Ocak 2014 ÖZET Bu çalışmada, java Collections Framework'teki ve C# taki koleksiyonlar karşılaştırılarak, belli başlı performans testlerine tabi tutuldu. Aralarındaki benzerlikler ve farklılıklar ortaya konularak kullanım alanları belirlendi. Bu belirleme, hazırlanan uygulama programları sayesinde gerçekleştirildi. Uygulama programlarında dışarıdan alınan büyük boyutlu veriler arama, sıralama, yerleştirme, silme gibi işlemlere tabi tutularak koleksiyonlar arasındaki performans ve bellek tüketimleri karşılaştırılacak testler yapıldı. Koleksiyonlar için yapılan testlerle elde edilen bilgiler analiz edilerek yorumlandı. Böylece her iki programlama dil yapısı için sağlanan Collections Frameworkler karşılaştırılmış oldu. Bu karşılaştırma sonucunda Java koleksiyonlarının performans açısından C# koleksiyonlarından daha iyi iken kullanılan bellek açısından C# koleksiyonlarının daha az maliyetli olduğu belirlendi. Bilim Kodu : Anahtar Kelimeler : Java, C#, koleksiyon, performans, analiz, framework Sayfa Adedi : 105 Tez Yöneticisi : Yrd. Doç. Dr. Nursal ARICI

7 v COMPARATIVE PERFORMANS ANALYSIS OF THE COLLECTIONS FRAMEWORK IN C# AND JAVA PROGRAMMING LANGUAGES (M.S. Thesis) Şükran EBREN KARA GAZI UNIVERSITY INFORMATICS INSTITUTE January 2014 ABSTRACT In this study, the collections in Java Collections Framework and C# are compared, and they are subjected to some definite performance tests. Their fields of usage are defined by giving their similarities and differences. This defining has been done thanks to the application programs. Large scale data that is taken outside in application programs are subjected to some processes like searching, ordering, removing and some tests were done to compare the performance between collections and memory consuming. The tests and the data collected from these tests are analyzed. Thus, Collection Frameworks that are provided for programing two languages are compared. As a result of this study it can be said that Java Collections are better than C# collections in terms of performance, and C# Collections are more budget friendly in terms of the used memory. ScienceCode : Key Words : java, C#, collection, performance, analice, framework Page Number : 105 Adviser : Ass. Prof. Dr. Nursal ARICI

8 vi TEŞEKKÜR Çalışmalarım boyunca değerli yardım ve katkılarıyla beni yönlendiren Hocam Yrd. Doç. Dr. Nursal ARICI' ya, destek ve yönlendirmeleri ile beni her zaman cesaretlendiren Prof. Dr. Ömer Faruk BAY Hocam'a bana her konuda destek veren iş arkadaşlarım Dr. Ayşe OĞUZHAN' a, Arş. Gör. Bayram KÜÇÜK' e, Arş. Gör. Eda AKMAN' a, ailemizin bir parçası olan Vet. Hek. Mahsun KARA'ya ve manevi desteği ile her zaman yanımda olan eşim Dr. Ferhat KARA' ya teşekkürü bir borç bilirim.

9 vii İÇİNDEKİLER Sayfa ÖZET... iv ABSTRACT... v TEŞEKKÜR... vi İÇİNDEKİLER... vii ÇİZELGELER LİSTESİ... ix ŞEKİLLERİN LİSTESİ... x RESİMLERİN LİSTESİ... xi KISALTMALAR... xii 1. GİRİŞ JAVA COLLECTIONS FRAMEWORK VE.NET FRAMEWORK ÜN GÖZDEN GEÇİRİLMESİ VE MİMARİSİ Java Collections Framework Net Framework Net framework nedir NET framework teki C# koleksiyonları Koleksiyonlar Java Collections Framework Mimarisi Collection framework Net Framework Mimarisi NET'in bileşenleri Java Virtual Machine Mimarisi Java sanal makinesi Bir sanal makinenin yaşam süresi Ortak Dil Çalışma Platformu (CLR-Common Language Runtime) Mimarisi Ortak dil çalışma platformu JAVA COLLECTIONS FRAMEWORK VE.NET FRAMEWORK KARŞILAŞTIRILMASI Veri Yapıları Açısından C# ve Java'nın Benzerlikleri ve Farklılıkları... 43

10 viii Sayfa 4. JAVA KOLEKSİYONLARI VE C# KOLEKSİYONLARI PERFORMANSINI KARŞILAŞTIRMA UYGULAMA PROGRAMI Programlama Dilleri ve Konseptleri Java ile Java Collections Framework Performans Uygulama Programı C# ile.net Collections Framework Performans Uygulama Programı Performans Karşılaştırması Koleksiyonlarda eleman ekleme performans karşılaştırması Koleksiyonlarda sıralama performans karşılaştırması Koleksiyonlarda arama performans karşılaştırması Koleksiyonlarda silme performans karşılaştırması SONUÇ KAYNAKLAR EKLER EK EK EK EK EK EK EK EK EK ÖZGEÇMİŞ

11 ix ÇİZELGELERİN LİSTESİ Çizelge Sayfa Çizelge 2.1. Arabirimler tanımlama kodu... 9 Çizelge 2.2. Arabirimler uygulama kodu... 9 Çizelge 2.3. Arabirimler Çizelge 2.4. Abstract sınıf tanımlamak Çizelge 2.5. Abstract sınıf uygulamak Çizelge 2.6. Koleksiyon sınıfları Çizelge 2.7. C#'ta jenerik ve jenerik olmayan koleksiyonlar Çizelge 2.8. Kendi komut satırını yazdıran uygulama Çizelge 3.1. C# ve java kodu Çizelge 3.2. Genişletilemeyen sınıf örneği Çizelge 4.1. Programlama dillerinin karakteristik görünümü Çizelge 4.2. Kullanılan koleksiyon metotlarının zaman karmaşıklığı Çizelge 4.3. Kullanılan metotların koleksiyonlarda bulunma durumları Çizelge 4.4. Java programında koleksiyonlara eleman eklenince geçe süre Çizelge 4.5. C# programlama dili için geçen süre Çizelge 4.6. Java programlama dili için kullanılan bellek Çizelge 4.7. C# programlama dili için kullanılan bellek Çizelge 4.8. Java ve C# koleksiyonların sıralama performansları Çizelge 4.9. Java ve C# koleksiyonların arama performansları Çizelge Java ve C# koleksiyonların silme performansları Çizelge Java ve C# koleksiyonlarının süre bazında karşılaştırılması... 75

12 x ŞEKİLLERİN LİSTESİ Şekil Sayfa Şekil 2.1. Collections framework... 5 Şekil 2.2. Hizmet sınıfları... 6 Şekil 2.3. JCF ara yüzleri... 8 Şekil 2.4. JCF abstract sınıflar Şekil 2.5. Java collections framework çatısı Şekil 2.6. C# koleksiyonu Şekil 2.7. NET mimarisi Şekil 2.8..NET programlarının derlenip çalıştırılması Şekil 2.9. Kaynak kodun derlenmesi Şekil Net platformunda yazılıp derlenen bir programın çalışma süreci Şekil 4.1. Java koleksiyonlarına eleman eklenince geçen ortalama süre Şekil 4.2. C# koleksiyonlarına eleman eklenince geçen ortalama süre Şekil 4.3. Java ve C# koleksiyonlarına eleman ekleyince geçen süre karşılaştırması Şekil 4.4. Java koleksiyonlarına eleman eklenince kullanılan bellek Şekil 4.5. C# koleksiyonlarına eleman eklenince kullanılan bellek Şekil 4.6. Java ve C# koleksiyonlarına eleman eklenince kullanılan belle karşılaştırması Şekil 4.7. Java C# ve java programlama dillerinin kullandığı süre ve bellek kullanımları ilişkisini gösteren regresyon eğrisi Şekil 4.8. Java ve C# koleksiyonlarının sıralama performansları Şekil 4.9. J ava ve C# koleksiyonlarının arama performansları Şekil 4.10 Java ve C# koleksiyonlarının silme performansları... 74

13 xi RESİMLERİN LİSTESİ Resim Sayfa Resim 2.1. JVM inin çalışma prensibi Resim 2.2. Java sanal makinesinin mimarisi Resim 4.1. Java'da hazırlanan uygulama programı ara yüzü Resim 4.2. Java uygulama programı 1.kısım Resim 4.3. Java uygulama programı 2.kısım Resim 4.4. Java uygulama programı 3.kısım Resim 4.5. C#'ta hazırlanan uygulama programı ara yüzü Resim 4.6. C# uygulama programı 1.kısım Resim 4.7. C# uygulama programı 2.kısım Resim 4.8. C# uygulama programı 3.kısım... 55

14 xii SİMGELER VE KISALTMALAR Kısaltmalar Açıklama CF CIL CL CLI CLR CLS CPU CTS DLL ELF Collectins Framework ( Koleksiyon Çatısı) Common Intermediate Language (Ortak Ara Dil).NET Framework Class Library (.NET Sınıf Kütüphanesi) Common Language Infrastructure (Ortak Dil Altyapısı) Common Language Runtime (Ortak Dil Çalışma Zamanı) Common Language Specification (Ortak Dil Tanımları) Central Processing Unit (Merkezi İşlem Birimi) Common Type System (Ortak Tip Sistemi) Dynamic-link library (Dinamik Bağlantı Kitapları) Executable and Linkable Format (Çalıştırılabilir ve Bağlanabilir Biçim) GC IL ILC Garbage Collector (Çöp Toplayıcısı) Intermadieate Language (Ara Dil) Intermadieate Language Code (Ara Dil Kodu) J2SDK Java 2 Software Development Kit (Java 2 Yazılım Geliştirme bbbbbbbbbbbbbbbbbbb Kiti) J2SE Java 2 Platform, Standard Edition (Java 2 Ortamı, Standart bbbbbbbbbbbbbbbbbbbbsürümü)

15 xiii Kısaltmalar Açıklama Java API bbbbbbbbbbbbbbbbbbb Programı Arayüzü) Java Application Programming Interface (Java Uygulama JCF JDK JIT JRE JVM MSIL MS PE Java Collection Framework (Java Kolleksiyon Çatısı) Java Development Kits (Java Geliştirme Kiti) Just In Time (Anında Derleme) Java Runtime Environment (Java Çalışma Zamanı Ortamı) Java Virtual Machine (Java Sanal Makinesi) Microsoft Intermediate Language (Mikrosoft Ara Dil) Mili Second (Mili Saniye) Portable Executable (Taşınabilir Çalıştırılabilir)

16 1 1. GİRİŞ Java geniş çevrelerce kabul görmüş, işletim sisteminden bağımsız, taşınabilir programlar yazmak için geliştirilmiş, nesneye yönelik bir programlama dilidir [1]. Microsoft Java'ya cevap olarak,.net ile tam uyumlu ve.net'in en gözde dili olan C#'ı geliştirdi. C#, C/C++ ve Java'nın güzel yönlerini alıp, nesne yönelimli, bir dil olarak programcıların karşısına çıkmaktadır [2]. Her iki dil de yorumlanarak çalıştırılmaktadır. Yorumlanmadan önce program kodları, Java'da byte koda C#'ta MSIL adı verilen bir ara dile derlenmektedir. Bugün büyük yazılım projelerinin çoğu Java ya da C# programlama dilleri kullanılarak hazırlanmaktadır. Bu yazılım projelerinde kullanılan programlama dili ve kullanılan veri yapıları performansı ve belleği göz ardı etmeyecek derecede etkilemektedir. Projenin esnek, kullanışlı ve performansının yüksek olması kullanıcıların isteği, yazılımcıların da hedefidir. Bunun sağlanabilmesi için değişik performans testleri yapılmaktadır. Koleksiyon tabanlı sınıflar aynı türden yada farklı türden birden fazla nesneyi bir arada tutup, bu nesnelere farklı yollardan erişilmeyi sağlayan veri kaplarıdır. Bu veri kapları güçlü bir uyumluluk ve esneklik sunmaktadır. Java ve C# programlama dillerinin kullandığı koleksiyonların performansları tespit edildiğinde, yazılım projelerinde uygun koleksiyonlar kullanılmakta bu da projelerin esnekliğini ve performansını artırmakta, kullanıcılara zaman ve bellek açısından tasarruf sağlamaktadır. Bu çalışmada, C# ve java programlama dillerinde kullanılan koleksiyonların performansları ve bellek maliyetleri araştırılmıştır. Bu çalışmanın bulguları doğrultusunda, uygulama projesinde kullanılacak koleksiyonların seçimi rahatlıkla yapılabilir. Daha önce de buna benzer çalışmalar yapılmıştır. Literatür taraması yolu ile ulaşılan bazı çalışmalar şu şekilde özetlenebilir yılında Mustafa Şahin tarafından, üç farklı dilin (java, python, ruby) çeşitli test uygulamalarındaki çalışma süreleri, bellek tüketimleri ve kod uzunlukları konularında karşılaştırma deneyleri yapılmıştır [3]. Çalışma sonucunda, Java'nın

17 2 Pyton'a ve Ruby'e göre daha hızlı çalışırken kod uzunlukları açısından daha çok maliyete sahip olduğu gözlemlenmiştir. Belek tüketimi açısından bakıldığında Ruby en az Pyhton en çok belek tüketimine sahiptir. Sean Wentworth ve arkadaşları, C++ standart şablon kütüphanesine karşı Java Collections Framework ün deneysel bir analizini gerçekleştirmiştir. Analizler, C++'ın performans açısından daha iyi olduğunu gösterir diğer taraftan Java'nın platformdan bağımsız oluşu, esnekliği, güvenli oluşu onu programcılar arasında daha cazip kılmıştır [4] yılında Lutz Prechel tarafından yapılan, yedi dili (C, C++, java, Perl, phthon,rexx, Tcl) çeşitli yönleriyle karşılaştıran bir çalışma mevcuttur. Yazar, çalışmasında 74 farklı yazardan aynı programın 80 versiyonunu, çalışma zamanı performansını, bellek kullanımını, kod uzunluğunu, programlama başarısını ve güvenirliliğini tespit etmek için yazdırmıştır [5]. Cesarini ve arkadaşları IMAP istemci kütüphanelerinin uygulamalarını beş farklı dilde (Erlang, C#, Java, Python, Ruby) karşılaştırmıştır. Kütüphaneler fonksiyonel olarak farklılık gösterdiğinden bu karşılaştırma; Kod satırlarının metris olarak ilkel fonksiyonelliğini, bellek kullanımını ve uygulama zamanlarını içermiştir [6] yılında 16 takım arasında farklı programlama dilleri (Java, Perl, Php, Ruby, JavaScript) kullanılarak bir web uygulaması istenmiştir. Ruby gurubu yüksek verimlilik gösterirken Java ve Php gurubu daha az bir verimlilik göstermiştir [7]. Bu çalışma 5 bölümden meydana gelmektedir. Çalışmanın 2. bölümünde Java Collections Framework ve.net Framework ün yapısı ve mimarileri incelenmiştir. Java programlama dili Sun firmasının açık kaynak kodlu nesne yönelimli programlama dilidir. Kullanıcılar ücretsiz olarak ulaşabilirler. Bu programlama dili, java sanal makinesi, çöp toplayıcısı gibi mimarilere sahiptir. C# programlama dili Microsoft firmasının ücretli nesne yönelimli programlama dilidir. Bir çok mimarisini Java'dan almıştır. İkisinde de collection framework mevcuttur. 3. bölümünde Java Collections Framework ve.net Framework'ün karşılaştırılması yapılmıştır. Java ve C# programları arasında benzerlikler ve farklılıklar mevcuttur. 3.

18 3 bölümde yapılan araştırmalar sonucunda bu iki dilin benzer yönleri ve farklılıkları incelenmiştir. Çalışma kapsamında hazırlanan bütün yazılım 4. bölümde verilmektedir. Bu kısımda uygulamaların çalışma mantığı, uygulamaları çalıştırmak için gerekli programlar, test platformu, elde edilen veriler ve analizleri sunulmaktadır. Performans analizi, ArrayList, LinkedList, Stack, HashSet koleksiyonları üzerinde yapılmıştır. Bu koleksiyonların seçilmesinin nedeni bunların hem java, hem de C#'ta kullanılan koleksiyonlar olmasıdır. Bu şekilde daha sağlıklı bir karşılaştırma yapma imkanı doğmaktadır. İki dilin koleksiyonları arasında karşılaştırma yapılırken bunun yanında bir dildeki kendi koleksiyonları arasında da karşılaştırma yapılmıştır. Hatta bir dildeki bir koleksiyonuna farklı değişken tipleri üzerinde işlem yapıldığında çıkan sonuçlar gözlemlenmiştir. 5. bölümde Java ve C#'ta bulunan koleksiyonların hem kendi aralarında karşılaştırmaları yapıldığında elde edilen sonuçlar verilmiş hem de programlama dilleri açısından karşılaştırılması yapıldığında elde edilen sonuçlar verilmiştir.

19 4 2. JAVA COLLECTIONS FRAMEWORK VE.NET FRAMEWORK ÜN bbgözden GEÇİRİLMESİ VE MİMARİSİ 2.1. Java Collections Framework Java.util paketi Java Collections Framework, java.util paketinde birbiriyle bağlantılı olan ara yüzler (interfaceler ) ve sınıfların (class) bir karışımıdır [8]. Java.util paketi çok önemli sınıflar barındırır. Özellikle nesne grupları ile çalışmayı sağlayan sınıf koleksiyonları (collections classes) [9]. Java.util paketi iki kısımda incelenebilir; Birinci kısım: Collections Framework ün bulunduğu kısım. İkinci kısım: hizmet sınıflarının bulunduğu kısım. Bu çalışmada Collections Framework kısmına değinilmiştir. Collections Framework, nesne guruplarını yönetmek için bir teknoloji sunan arabirimler ve sınıflardan oluşan karmaşık bir hiyerarşidir [10].

20 Şekil 2.1. Collections framework [9] 5

21 Şekil 2.2. Hizmet sınıfları [9] 6

22 Collections framework Java nın orijinal sürümünde Collections Frameworkler yoktu. Java, nesne guruplarını yönetmek ve depolamak için Dictionary, Vector, Stack ve Properties gibi duruma uygun sınıfları kullanırdı. Java ya J2SE 1.2 ile Collection, Map, Set, List, SortedMap, ve SortedSet interface lerini ve bunları implement eden sınıflarını barındıran Collections Framework eklendi. Collections Framework ün diğer önemli sınıfları ve ara yüzleri; Comparator, Collections, Arrays, Iterator, ve ListIterator dür [9] [10]. Java Collections Framework (JCF), verileri saklamayı, aramayı, silmeyi kısaca verileri kullanırken kolaylık sağlayan bir ambardır. En tepesinde java.util paketi bulunur. Bütün ara yüzler ve sınıflar bu paketin içinde yer alır. JCF de ikisi sıralama için geliştirilmiş temelde 6 tane ara yüz (arabirim, interface) mevcuttur. Bunlar: Collection List Set Map SortedSet SortedMap [8]

23 Şekil 2.3. JCF ara yüzleri 8

24 Arabirim (Ara yüz, Interface) interface anahtar sözcüğü kullanılarak, bir sınıfın arabirimi onun uygulamasından tamamen özetlenebilir. Yani, interface kullanarak bir sınıfın nasıl yapılacağını değil, ne yapılması gerektiği belirtilebilir. Arabirimler sözdizimi olarak sınıflara benzer, ancak arabirimlerin örnek değişkenleri yoktur ve metotları gövdesiz olarak declare edilir. Bir arabirimin uygulanması için, sınıfın arabirim tarafından tanımlanan metotlarının tümünün uygulaması gerekir. Ancak her sınıf, kendi uygulamasının ayrıntılarının kararını kendisi verir [10]. Arabirim Tanımlamak Çizelge 2.1. Arabirim tanımlama kodu interface BeniCagir { void cagir(int param); } Çizelge 2.2. Arabirim uygulama kodu Class ArabirimKullan implements BeniCagir { // BeniCagir arabirimini uygula public void cagir( int p ) { System.out.println( cagir + p+ parametresi ile cağrıldı. ); }}

25 10 Çizelge 2.3. Arabirimler [8] Interface Tipi Set SortedSet List Queue Map SortedMap Implement eden Sınıflar HashSet, LinkedHashSet, EnumSet TreeSet Vector, Stack, ArrayList, LinkedList PriorityQueue, LinkedList Hashtable, HashMap, LinkedHashMap, WeakHashMap, IdentityHashMap TreeMap Abstract class (Özet, Soyut Sınıflar) Alt sınıflar tarafından paylaşılan ve içeriği onlar tarafından doldurulan genel form yapısındaki üst sınıflar Abstract Class olarak oluşturulabilirler. Böyle bir sınıf alt sınıfların gerçekleştirmek zorunda olduğu metotları belirler. Abstract sınıfların nesneleri oluşturulamaz. Abstract metodlar içerdikleri gibi somut metotlar da içerebilirler. Abstract metodlarını alt sınıfı kendi ihtiyacına göre doldurur [10]. Çizelge 2.4. Abstract sınıf tanımlamak abstract class A { abstract void benicagir( ); // Özet sınıflarda somut metodlara da izin verilir void benidecagir() { System.out.println( Bu somut bir metod. ); } }

26 11 Çizelge 2.5. Abstract sınıf uygulamak class B extends A { void benicagir() { System.out.println( B benicagir metodunu implement etti. ); } } class AbstractDemo { public static void main( String args[]) { B b = new B(); b.benicagir(); b.benidecagir(); } } Soyut AbstractCollection, AbstractSet, AbstractList, AbstractMap ve AbstractSequentialList sınıfları, başka somut sınıfları tanımlamak için kullanılan çekirdek yapılardır. Bu sınıflar doğrudan doğruya veri tipi oluşturmak için kullanılmazlar; gereksemeye uyacak biçimde genişletilmeleri gerekir [11]. Collections Framework teki Abstract Sınıflar Şekil 2.4. JCF abstract sınıflar

27 Koleksiyon sınıfları Collections sınıfı: static metotlar içerir. CF'deki bütün sınıflar bu metotları nesne yaratmadan kullanabilir. Çizelge 2.6. Koleksiyon sınıfları LinkedList TreeSet TreeMap Vector ArrayList HashSet HashMap Stack LinkedHashSet LinkedHashMap PriorityQueue HashTable Şekil 2.5. Java collections framework çatısı

28 13 Collections Class Collections sınıfı, koleksiyonlar ve map için çalıştırılabilecek kullanışlı static metotlar ve sabitler tanımlar [9]. Koleksiyon terimi, bir java nesneleri topluluğu anlamında kullanılır. Örneğin, ArrayList ambarındaki nesneler topluluğu bir koleksiyondur. Bütün koleksiyon ailesini ifade etmek için koleksiyonlar terimi kullanılır. Collections sınıfı, kendi başına bir veri tipi oluşturmaz. Ama, başka java koleksiyonları üzerinde işlem yapan static metotlara sahiptir. Bu metotlar, sıralama, arama, kopyalama vb. gibi her tipten koleksiyona uygulanan genel işlemleri yaparlar. Collections sınıfının hepsi static olan kırk kadar metodu vardır. Static olmaları nedeniyle, bu metotlar farklı java koleksiyonlarına, nesne yaratmaya gerek kalmadan doğrudan uygulanabilirler [11]. En çok kullanılan metotlardan biri sıralama yapan sort( ) metodudur. Sort( ) metodunun versiyonlarından bir tanesi sıralama yapmak için Comparator kullanır, diğeri doğal sıralamaya dayalı olarak listeleri sıralar [9]. Belirtilen bir liste içinde belirli bir nesne aramak için Binary Search algoritması kullanılır. Listenin sıralı olması gerek aksi taktirde doğru sonuca ulaşılmaz. İlgili metod BinarySearch( ) metodudur. Bir listeye eleman ekleme yapmak için add( ), silmek için remove( ), değiştirmek için set( ), ulaşmak için get( ), elemanları ters çevirmek için reverse( ), elemanları rastgele karıştırmak için shuffle( ), elemanların yerlerini değiştirmek için swap( ), eleman yerleştirmek için put( ) metotları kullanılır. Collections Sınıfının diğer önemli metodları EK-1'de verilmiştir.

29 14 Interfaceler ve implement eden Sınıflar List Interface Implement eden sınıflar Vector, Stack, ArrayList, LinkedList Set Interface Implement eden sınıflar HashSet, LinkedHashSet, EnumSet SortedSet Interface Implement eden sınıflar TreeSet Map Interface Implement eden sınıflar Hashtable, HashMap, LinkedHashMap, WeakHashMap, IdentityHashMap SortedMap Interface Implement eden sınıflar TreeMap

30 NET Framework.Net Framework 2002 yılında yayınlandı..net Framework,.NET Framework'ü hedefleyen uygulamaları yöneten bir çalışma zamanı yürütme ortamıdır. Bellek yönetimi ve diğer sistem hizmetlerini sağlayan ortak dil çalışma zamanından ve programcıların uygulama geliştirmenin bütün önemli alanları için sağlam, güvenilir koddan yararlanmalarına imkan tanıyan kapsamlı bir sınıf kitaplığından oluşur.

31 NET framework nedir?.net Framework, çalışan uygulamalarına çeşitli hizmetler sağlayan, yönetilen bir yürütme ortamıdır. İki önemli bileşenden oluşur ortak dil çalışma zamanı (CLR), yani çalışan uygulamaları işleyen yürütme motoru; ve.net Framework sınıf kütüphanesi, yani geliştiricilerin kendi uygulamalarından çağırabilecekleri sınanmış, yeniden kullanılabilir kod sağlayan bir kitaplık..net Framework'ün çalışan uygulamalar için sağladığı hizmetler şunları içerir: Bellek yönetimi. Birçok programlama dilinde, programcılar belleği tahsis etme ve serbest bırakmadan ve nesne kullanım ömrü işlemesinden sorumludur..net Framework uygulamalarında CLR, uygulama adına bu hizmetleri sağlar. Ortak tür sistemi. Geleneksel programlama dillerinde, temel türler diller arası çalışabilirliği karmaşıklaştıran bir derleyici tarafından tanımlanır..net Framework'de, temel türler.net Framework tür sistemi tarafından tanımlanır ve.net Framework'ü hedefleyen tüm diller için ortaktır. Kapsamlı bir sınıf kitaplığı. Düşük düzeydeki programlama işlemlerini kullanmak için çok büyük miktarda kod yazmak yerine programcılar.net Framework Sınıf Kitaplığı'ndan alınan tür ve üyelerin erişilebilir kitaplığını kullanabilirler. Geliştirme çerçeveleri ve teknolojileri..net Framework; web uygulamaları için ASP.NET, veri erişimi için ADO.NET ve hizmet odaklı uygulamalar için Windows Communication Foundation gibi uygulama geliştirmenin belirli alanlarına ilişkin kitaplıklar içerir. Diller arası çalışabilirlik..net Framework'ü hedefleyen dil derleyicileri, ortak dil çalışma zamanı tarafından çalışma zamanında derlenmiş Ortak Ara Dil (CIL) adında bir ara kod üretir. Bu özellik ile, tek bir dilde yazılan yordamlar diğer diller için erişilebilir ve programcılar tercih ettikleri dil veya dillerde uygulamalar oluşturmaya odaklanabilirler. Sürüm uyumluluğu. Nadir istisnalar ile, belirli bir.net Framework sürümü kullanılarak geliştirilen uygulamalar, sonraki bir sürümü üzerinde hiçbir değişikliğe gerek olmadan çalıştırabilinir.

32 17 Yan yana yürütme..net Framework, ortak dil çalışma zamanının birden çok sürümünün aynı bilgisayarda bulunmasına izin vererek sürüm çakışmalarının çözümlenmesine yardımcı olur. Bu da, uygulamaların birden çok sürümünün birlikte var olabileceği ve bir uygulamanın, oluşturulduğu.net Framework sürümünde çalıştırılabileceği anlamına gelir. Çoklu Sürüm Desteği..NET Framework Taşınabilir Sınıf Kitaplığı'nı hedefleyerek geliştiriciler, Windows 7, Windows 8, Windows Phone ve Xbox 360 gibi çoklu.net Framework platformunda çalışan derlemeler oluşturabilir [12].

33 NET framework teki C# koleksiyonları.net framework veri depolama ve alma için özel sınıfları sağlar. C#'ta iki ayrı koleksiyon türü vardır. Bunlar System.Collections isim alanında bulunan standart koleksiyonlar ve System.Collections.Generic isim alanı altında bulunan jenerik koleksiyonlardır. Koleksiyon, içine nesne alabilen konteynırlardır. Bu konteynırlar güçlü bir uyumluluk ve esneklik sunarlar..net te bütün tiplerin temelinde nesne sınıfı vardır. Koleksiyonlarda saklanan veriler her zaman bir nesne olarak saklanırlar. Yani bir veri koleksiyonda saklandığında bir nesne olarak saklanır geri çekildiğinde tekrar eski tipine dönerek çekilirler. Buna baxing (kutulama) ve unboxing (kutudan çıkarma) denilir [13]. Şekil 2.6. C# koleksiyonu [14].NET te bütün tiplerin temelinde nesne sınıfı vardır. Bütün koleksiyonlar, ICollection arayüzünü extend eden IEnumberable arayüzünü ımplement eder. şekil 2.6'da görüldüğü gibi ICollectiondan türeyen IDictionary ve IList, koleksiyonlar için birer arayüzdür.

34 19 System.Object Nesne sınıfı, bütün tiplerin temel sınıfıdır. Diğer bütün tipler dolaylı yada direkt olarak nesne sınıfından türerler. Nesne sınıfının metotları, özellikleri ve örnek uygulamaları EK-2'de verilmiştir. System.Collections.IEnumerable IEnumerable, kullanıcı tanımlı sınıflar gibi koleksiyon sağlayan bir numaralandırıcı ortaya koyar. Bütün koleksiyonlar, ICollection tarafından genişletilmiş IEnumerable arayüzünü implement (uygular) eder. IEnumerable arayüzünün metotları, özellikleri ve örnek uygulamaları EK-3'de verilmiştir. System.Collections.ICollection Icollection arayüzü jenerik olmayan kolleksiyonların eleman sayılarına ulaşmak ve onları yönetmek için metodlara sahiptir. System.Collections isim alanındaki sınıflar için temel bir arayüzdür. ICollection arayüzünün metotları, özellikleri ve örnek uygulamaları EK-4'de verilmiştir. ICollectiondan türeyen iki interface mevcuttur: IList ve IDictionary ICollectiondan türeyen diğer koleksiyonlar System.Collections.BitArray System.Collections.Stack System.Collections.Queue System.Collections.Specialized.NameValueCollection System.Collections.IList IList, ICollection interface'inden türer. Add, Clear, Contains, IndexOf, Insert, Remove, RemoveAt gibi en çok kullanılan koleksiyon metotlarını barındırır. Ayrıca

35 20 indeksleyici içerir. IList arayüzünün metotları, özellikleri ve örnek uygulamaları EK-5'te verilmiştir. IList arayüzünü uygulayan koleksiyonlar System.Array System.Collections.ArrayList System.Collections.Specialized.StringCollection System.Collections.IDictionary ICollection interface'inden türer. Koleksiyonları anahtar değer ikilisi olarak sunar [14]. IDictionary arayüzünün metodları, özellikleri ve örnek uygulamaları EK-6'da verilmiştir IDictionary arayüzünü uygulayan koleksiyonlar System.Collections.Hashtable System.Collections.Specialized.ListDictionary System.Collections.SortedList System.Collections.Specialized.HybridDictionary

36 Koleksiyonlar Koleksiyon tabanlı sınıflar aynı türden yada farklı türden birden fazla nesneyi bir arada tutup bu nesnelere farklı yollardan erişilmeyi sağlarlar. Bütün koleksiyon sınıfları System.Collections isim alanında bulunurlar. Bir koleksiyon nesnesi içinde bulunan elemanlara foreach döngüsü ile erişilmesi mümkündür. Bu erişim, koleksiyon tabanlı sınıfların IEnumarable arayüzünü uygulamış olmasının bir sonucudur [2] [14]. System.Collections isim alanındaki koleksiyonlar Array, ArrayList,BitArray, HashTable, SortedList,Queue, Stack, IEnumerable, ICollection, IList, IDictionary, CollectionBase, ReadOnlyCollectionBase, DictionaryBase System.Collections.Generic isim alanı altında bulunan jenerik koleksiyonlar, daha esnek ve veriler ile çalışıldığında daha çok tercih edilenlerdir. Jenerik koleksiyonlar diğer bir adıyla Jenerikler.NET Framework 2.0 ile tanıtıldı. Jenerikler tip güvenliğini, performansı ve genelliliği bir arada sunar..net Framework, System.Collections.Generic isim alanı içerisinde bir dizi jenerik nesne içerir [13]. Bunlar; System.Collections.Generic isim alanı içerisindeki jenerik koleksiyonlar List<T>, LinkedList<T>, Dictionary<TKey, TValue>, SortedList<TKey, TValue> SortedDictionary<TKey, TValue>, Queue<T>, Stack<T>, IEnumerable<T>, ICollection<T>, IList<T>, IDictionary<TKey, TValue>, Collection<T>, ReadOnlyCollection<T>

37 22 Çizelge 2.7. C#'ta jenerik ve jenerik olmayan koleksiyonlar System.Collections Non Generic Array ArrayList BitArray - HashTable SortedList - Queue Stack IEnumerable ICollection IList IDictionary System.Collections.Generic Generic Karşılığı List<T> - LinkedList<T> Dictionary<TKey,TValue> SortedList<TKey,TValue> SortedDictionary<TKey,TValue> Queue<T> Stack<T> IEnumerable<T> ICollection<T> IList<T> IDictionary<TKey,TValue> CollectionBase ReadOnlyCollectionBase DictionaryBase - Collection<T> ReadOnlyCollection<T> - HashSet<T>

38 Java Collections Framework Mimarisi Collections framework Java nın orijinal sürümünde Collections Frameworkler yoktu. Java, nesne guruplarını yönetmek ve depolamak için Dictionary, Vector, Stack ve Properties gibi duruma uygun sınıfları kullanırdı. Java ya J2SE 1.2 ile Collection, Map, Set, List, SortedMap, ve SortedSet interface lerini ve bunları implement eden sınıflarını barındıran Collections Framework eklendi. Collections Framework ün diğer önemli sınıfları ve ara yüzleri; Comparator, Collections, Arrays, Iterator, ve ListIterator dür [9] [10]. Java Collections Framework (JCF), verileri saklamayı, aramayı, silmeyi kısaca verileri kullanırken bize kolaylık sağlayan bir ambardır. En tepesinde java.util paketi bulunur. Bütün ara yüzler ve sınıflar bu paketin içinde yer alır. JCF de ikisi sıralama için geliştirilmiş temelde 6 tane ara yüz (arabirim, interface) mevcuttur. Bunlar: Collection List Set Map SortedSet SortedMap [8] Java Collection Framework mimarisi içerisinde en tepede tanımlanmış bir interface olan Collection arabirimi, mimarinin tüm arabirimlerini oluşturmaktadır. Yani Collection Framework' un temelini Collection tutmaktadır. Collection, bir takım nesneleri depolamak ve kullanmak için kendini uygulayan bir çok sınıfa esnek metotlar sağlar [15].

39 24 interface Collection <E> Framework' ün tüm arabirimleri jenerik olduğu için Collection arabirimi de <E> jenerik tipi ile depolanacak nesnelerin tipini belirtir. Java Collection Framework mimarisinin temelini oluşturan bu arabirimin metotları ise aşağıda verilmektedir [16]. boolean add(e e), bir koleksiyon'a E tipli nesne ekler. Eğer ekleme başarılı ise true döner. boolean addall(collection c), bir koleksiyon'a elemanları E tipinden türemiş başka bir c collection' nın tüm elemanlarını ekler. İşlem başarılı ise true döner. void clear(), koleksiyon'nun tüm elemanlarını kaldırır ve koleksiyon'u sıfırlar. boolean contains(object o), koleksiyon içerisinde o nesnesinin varlığını araştırır. Şayet bulursa true döner. boolean containsall(collection c), koleksiyon içerisinde, c koleksiyon'un tüm elemanlarının varlığını denetler. Şayet tüm elemanlar koleksiyon içerisinde var ise true döner. boolean isempty(),koleksiyon da hiç bir eleman yok ise true döner. Iterator iterator(), koleksiyon'nun elemanlarına erişen bir iteratör döndürür. boolean remove(object o), koleksiyon'dan ilgili o nesnesini kaldırır. boolean removeall(collection c), koleksiyon'dan c koleksiyon'un elemanlarına eş değer tüm elemanları kaldırır. boolean retainall(collection c), c koleksiyon'un elemanlarına eş değer elemanların haricindeki tüm nesneleri kaldırır. int size(), koleksiyon eleman sayısını döndürür. Object[] toarray(), koleksiyon elemanlarını bir nesne dizisinde döndürür. T[] toarray(t[] a), a dizisinin tipiyle eşleşen koleksiyon elemanlarını jenerik tipte bir dizi ile döndürür.

40 Net Framework Mimarisi.NET Framework, yeni nesil uygulamaların ve XML web hizmetlerinin yapılandırılmasını ve çalışmasını destekleyen bir teknolojidir. Bu teknoloji çok katmanlı ve dağıtık uygulama geliştirme modellerini benimsemiştir. C# C++ Jscript VB. NET J# Temel Dil Tanımları (Common Language Specification CLS) ASP. NET Windows Formları Web Formları + Web Servisleri ADO.NET ve XML Temel Sınıflar ve Kütüphaneler Ortak Dil Çalışma Platformu (Common Language Runtime CLR) İşletim Sistemleri (Operation Sistem OS) Şekil 2.7..NET mimarisi [2] [17].NET in en önemli yapıtaşı, Framework olarak belirtilebilir. Bu yapı, kendini 2 önemli alt bileşene ayırır. Bunlar; CLR(Common Language Runtime - Ortak Dil Çalışma Platformu) ve CL (.NET Framework Class Library). CL içinde uygulama geliştirilirken kullanılan kütüphaneler bulunmaktadır. Formlar, nesneler ve kontroller hep bu yapı içinde yer alır [18]..NET in çalışma mantığı Java nınkine oldukça benzer..net, kodu önce IL ye (Aradil) derler ve bu IL kodu çalıştırılmak istendiği zaman.net CLR, JIT derleyicilerini kullanarak makine diline çevirir. CLR makine diline çevrilmiş

41 MSIL Assembly CLR 26 program kodunu önbellekte tutar. Bu büyük performans artışına sebep olurken sistemin hafızasında küçümsenmeyecek miktarda yer kaplar [2] NET in bileşenleri.net bileşenleri şu şekilde sıralanabilir CLR (Common Language Runtime - Ortak Dil Çalışma Platformu) CTS (Common Type System - Ortak Tip Sistemi) CLS (Common Language Specification - Ortak Dil Tanımları) IL (Intermadieate Language - Ara Dil) JIT (Just In Time - Anında Derleme) CL(.NET Framework Class Library -.NET Sınıf Kütüphanesi ) CLR (Ortak dil çalışma platformu) CLR, programlama dillerinin entegrasyonu (language integration), güvenlik (security), bellek (memory), süreç (process) ve iş parçacığı (thread) yönetimi gibi çalışma zamanı servislerinden sorumludur..net alt yapısında programların çalışmasını kontrol eden ve işletim sistemi ile programlar arasında yer alan arabirim görevini üstlenir. CLR bunun yanı sıra geliştirme zamanında tip güvenliğinin sağlanması gibi bazı rollere sahiptir. Diğer dll ve COM bileşenleri C# Program Kodu Çalıştırılabilir makine kodu.net temel sınıf kütüphanesi Şekil 2.8..NET programlarının derlenip çalıştırılması [2]

42 27.NET programlarının derlenip çalıştırılması C# kodları, C++ veya Visual Basic gibi direkt makine koduna derlenmezler. Önce IL (Microsoft Intermediate Language - Microsoft ara dili) denilen bir ara koda derlenir ve uzantısı exe'dir. Bu dosya çalıştırılmak istendiğinde ise.net Framework'teki CLR devreye girer ve IL kodu makine koduna dönüştürür, böylelikle artık kodu bilgisayar anlayabilir. Burada oluşturulan assembly herhangi bir sistemde (Linux veya MAC OS) CLR tarafından çalıştırılır..net Framework'teki CLR, oluşturduğu makine kodlarını geçici bir süreliğine belleğe koyar, eğer aynı kodlar tekrar çalıştırılmak istenirse tekrar IL koddan makine koduna dönüşüm yapmak yerine bu belleğe kaydettiği makine kodlarını kullanır. Bu yüzden oluşturulan programlar ilk çalıştırıldığında program biraz yavaş çalışabilir, ancak daha sonraki çalışmalarda oldukça hızlanır. C#'ta kodun direkt makine kodu yerine, önce IL koda çevrilmesi platformdan bağımsızlığı sağladığı için avantajdır. Çünkü makine kodu taşınabilir değildir. Programları direkt makine koduna derlediğimiz zaman ilgili programın belirli bir işletim sistemine göre derlenmesi gerekir. Halbuki IL kod taşınabilirdir, ortak bir koddur, işletim sistemlerindeki çeşitli programlar vasıtasıyla makine koduna dönüştürülebilir. Örneğin Windows'ta bu işi.net Framework yaparken, Linux'ta Mono yapabilir. CTS (Common Type System - Ortak Tip Sistemi) CLR içerisine inşa edilmiş güçlü ve zengin bir tip sistemidir. Çoğu programlama dilinde bulunan tipleri ve bu dillerin operasyonlarını desteklemektedir. Birçok programlama dilinde bulunan tiplerin CTS (Ortak tip sistetemi) içerisinde gerçekleştirimi yapılmış durumdadır. CTS'de, veri tipleri iki ana kısma ayrılır. Bunlar: değer (value) ve referans (reference) tipleridir. CTS aşağıdaki fonksiyonları bize sunar;

43 28.NET mimarisinde tip güvenli, yüksek performanslı ve kullandığımız programlama dilinin/dillerinin diğer.net uyumlu diller ile entegre bir şekilde çalışmasını sağlar. Birçok programlama dilinin.net mimarisinde tam nesne yönelimli olarak.net için program yazma aracı olmasına imkan verir. Herhangi bir.net uyumlu dilde geliştirilen nesnenin diğer dillerden de sorunsuz olarak çağrılabilmesini garantiler [2]. CLS (Common Language Specification - Ortak Dil Tanımları) CLS, bünyesinde barındırdığı birtakım yapıları ve kısıtları ile kütüphane(library) ve derleyici(compiler) yazabilmek için rehberlik yapmaktadır. CLS, CTS'nin bir altkümesidir. CLS uygulama geliştiriciler için büyük önem arz etmektedir. Öyle ki bir uygulama geliştirici yazdığı kodun diğer kod geliştiriciler tarafından da kullanılabilir olmasını göz önünde bulundurmalıdır. CLS'nin kriterleri ve kuralları göz önünde bulundurularak yazılan bir API(Application Program Interface), diğer programlama dilleri içerisinden kullanılabilmekte, Common Language Runtime tarafından da işletilebilmektedir. IL (Intermediate Language Aradil) IL işlemciden bağımsız komut setinden oluşmaktadır. Bu komut seti içerisinde nesnelerin yüklenmesi, depolanması ve initialize edilmesini sağlayan komutların yanı sıra aynı zamanda nesneler üzerinde metod çağrımını sağlayan komutlar da yer almaktadır..net Framework ile yazılmış bir kaynak kodun derlenmesi sonucu IL kodu oluşmaktadır. IL, Metadata ve CTS sayesinde.net dilleri arasında bir bütünleşme sağlanmaktadır. Metadata, programda kullanılan verilerin tiplerinin yanında oluşturulan sınıfların metotlarını ve bunların özelliklerini ve diğer bilgileri içerir. Metadata nın içeriği çalışma zamanında JIT derleyicileri tarafından kullanılır [2]. IL kodun çalıştırılmasından önce var olan IL kodu doğal makine koduna (native code) dönüştürülmektedir.

44 29 JIT derleyicileri JIT, CLR içinde bulunan bir derleyicidir. MSIL kodu CLR içindeki JIT ile derlenip makine koduna dönüşmektedir. JIT, MSIL i derledikten sonra dönüşen makine kodunu, hafızaya yükler. Yazılım çalışmaya başlar. Bir defa bu noktaya gelen kod, sonraki çağırımlarda buradan kullanılır. Bu yüzden, uygulamaların ilk defa çalıştırılması her zaman yavaş olmakta, sonraki çağırımlar ise daha hızlı gerçekleşmektedir. Microsoft.NET'te üç tip JIT derleyicisi mevcuttur. Pre-JIT derleyici: pre-jit derleyicisi tüm program kodunu makine koduna çevirdikten sonra çalıştırır. Bu şekilde programların çalışması daha hızlı olmaktadır. Bu derleme türü büyük sistemlerin verimliliğini artırırken beraberinde daha fazla bellek gerektirir. Normal-JIT derleyici: Varsayılan olarak kullanılan bu derleme çeşidi, program kodunu derledikten sonra derlenen kodu ön bellekte depolar. Eğer program kodunun bir kısmı çalışma anında çağrılırsa ön bellekte depolanan derlenmiş kod yürütme için kullanılır. Eco-JIT derleyici: Az miktarda hafızaları ve ön bellekleri olan sistemler için uygun olan bir derleme çeşididir. Program kodu çalışma anında çağrıldığında derlenirler. Fakat kullanılabilir hafıza belli bir oranın altına düştüğünde, daha önceden derlenmiş ve çalıştırılmış kısımlar silinir. Bu sayede sistemde bellek sorunlarının yaşanması engellenmiş olur. Silinen derlenmiş kısımlar tekrar çağrıldığında ise aynı kodlar tekrar derlenmek zorunda kalınır. Bu da programın daha yavaş çalışmasına neden olur.

45 30 CL(.NET Framework Class Library -.NET Sınıf Kütüphanesi ) Temel sınıflar; giriş/çıkış, string işlemleri, güvenlik yönetimi, ağ iletişimi, thread yönetimi, metin işleme ve kullanıcı ara yüz tasarımı gibi standart fonksiyonları kapsamaktadır. ASP.NET sınıfları web tabanlı uygulamalar ve web servisleri geliştirebilmek için destek sağlamaktadır. Windows Forms sınıfları ise masaüstü uygulamaları geliştirebilmeyi sağlamaktadır. Sınıf kütüphaneleri,.net Framework dilleri arasında ortak, tutarlı bir geliştirme ara yüzü sağlamaktadır..net Framework koleksiyon sınıfları kendi koleksiyon sınıflarınızı geliştirmek için kullanabileceğiniz bir arabirim kümesi uygular. Koleksiyon sınıfları.net Framework sınıfları ile sorunsuz olarak birleşir..net Framework, aşağıdaki türde uygulamalar ve hizmetler geliştirmek için kullanılabilir: Konsol uygulamaları Windows GUI uygulamaları (Windows Forms) Windows Presentation Foundation (WPF) uygulamaları. ASP.NET uygulamaları. Windows hizmetleri. Windows Communication Foundation (WCF) kullanan hizmet odaklı uygulamalar. Windows Workflow Foundation (WF) kullanılarak iş akışı etkin uygulamalar. Assembly kavramı.net platformu için yazılan bütün kodların sonucunda oluşan exe ve dll uzantılı dosyalara genel olarak assembly denmektedir. Projeye ait derlenmiş kodlar ve metadata diye adlandırılan öz niteleyici kodlar Assembly içerisinde bulunurlar. Assembly lerin özellikleri kısaca aşağıdaki gibi sıralanabilir. Assembly lerin içerisinde yer alan metadata olarak adlandırılan veriler Assembly deki tür bilgilerini ve başka kaynaklarla olan bağlantıları saklarlar.

46 31 Assembly de (dll yada exe) versiyon bilgisi tutulur. Klasik dll ve exe tipi dosyalarda versiyon bilgisi saklanmadığı için çeşitli uyumsuzluklar yaşanabilmekteydi. Mesela farklı iki firmanın hazırladığı dll ler aynı isimli olduğunda sonradan register edilen dll, halihazırda bulunan dll in üzerine yazıldığı için sistemde bulunan bazı uygulamalarda sorun çıkarırdı. Dll ler bu tür sorunlara yol açtığı için DLL Hel (Dll Cehennemi) kavramı ortaya çıkardı. Aslında COM dll leri ile bu sorun bir nebze ortadan kalkmışsa da asıl çözüm Assembly ler ile gelmiştir. Assembly lerde versiyon bilgisi saklandığı için bir uygulama içerisinde farklı versiyonlara sahip Assembly ler kullanıbilinir. Program kurma işlemi, Assembly ye ilişkin dosyayı direkt kopyalayarak yapılabilir (Eski sistemde DLL lerin kayıt (register) edilmesi gerekiyordu) [2].

47 Java Sanal Makine (JVM-Java Virtual Machine ) Mimarisi Java Sanal Makinesinin daha iyi anlaşılması için bazı önemli terimler aşağıda açıklanmıştır. Java development kit (JDK) Bu bütün temel java framework paketlerini içermekte, Java derleyicisini, JRE, JVM, debugger, Java Interpreter'ı, Java api kütüphanelerini, geliştirici tool ları kısacası java programını geliştiren, hatalarını bulan, derleyen ve çalıştıran her şeyi içerir [19]. Java runtime environment (JRE) Her hangi bir Java uygulamasını çalıştırmak için gerekli minimum gereçleri içerisinde barındıran bir yapıya sahiptir. Bir Java uygulaması çalıştırılmak istendiğinde, öncelikle sahip olunması gereken platform JRE dir. JRE her işletim sisteminde farklılık gösterir. Ayrıca JRE içerisinde JVM de bulunur [19] [20]. Just in time (JIT) Anında derleme denilen JIT, bytecode u sanal makinenin kurulu olduğu gerçek sistemin diline anında derleme yaparak dönüştürür. Bu sayede verimde ciddi artışlar sağlanır. Fakat 2000 yılından sonra geliştirilen sanal makinelerde (HotSpot gibi) JIT in işlevi sanal makinelerde yer almaya başladı. Java API Java API, Java yazılımlarında kullanılan yazılım kütüphanelerine genel olarak verilen isimdir. Java API ile disk, grafik, ağ, veri tabanı, güvenlik gibi yüzlerce konuda kullanıcılara erişim imkânı sunulur. Java API J2SDK'nın bir parçasıdır [20]. Atık veri toplayıcı (Garbage Collection) Atık veri toplama teknolojisi Java'dan önce de var olan ama Java ile adını duyurmuş ve yaygın olarak kullanılmaya başlanmış bir kavramdır. C++, C gibi dillerin en büyük engellerinden birisi dinamik bellek yönetimidir. Yazılımda gösterici (işaretçi - pointer) kullanılarak dinamik olarak bellek ayrıldıktan sonra o bellek ile işlem

48 33 bittiğinde mutlaka ayrılan belleği bellek yöneticiye özel altyordamlar yardımıyla (delete, free vs.) iade edilmesi gerekir. Yoksa bellek sızıntısı (memory Leak) oluşur ve bu bir süre sonra yazılımın ve işletim sisteminin beklenenden farklı davranmasına yol açabilir. Sızıntıların saptanması oldukça güçtür ve bulunması zor hatalara yol açar. Bu nedenle bugünün tüm büyük C ve C++ yazılımları az da olsa bellek sızıntısı içerir (işletim sistemleri dahil). Atık veri toplayıcı sayesinde Java'da bir nesne oluşturulduktan sonra o nesne ile işlem bittiğinde hiçbir şeyin yapılması gerekmez: Sanal makine akıllı bir biçimde kullanılmayan bellek bölümlerini belirli aralıklarla ya da uyarlamalı yöntemlerle otomatik olarak temizler ve sisteme iade eder. Bu işleme çöp toplama (garbage collection) adı verilir. Çöp toplama sistemlerinin yapısı oldukça karmaşıktır ve geçen yıllar içinde büyük gelişmeler kaydedilmiştir. Çöp toplayıcının varlığı Java'da bellek sızıntısı olmayacağı anlamına gelmez, ama bellek sızıntılarına daha ender olarak ve farklı şekillerde karşılaşılır. Genellikle tedavi edilmesi daha kolaydır [19].

49 Java sanal makinesi JVM (Java Virtual Machine Java Sanal İşlemcisi) C++ dilinde yazılmış bir programdır. Bir Java programı javac.exe ile derlendikten sonra byte code ismi verilen bir ara sürüm oluşur. Byte code, ana işlem biriminin (CPU Cental Processing Unit) anlayacağı cinsten komutlar ihtiva etmez, yani klasik Assembler değildir. Java byte code sadece JVM bünyesinde çalışır. JVM, derlenen Java programı için ana işlemci birimi olma görevini üstlenir. Bu özelliğinden dolayı Java programlarını değişik platformlar üzerinde çalıştırmak mümkündür [20]. Her platformun kendine özgü bir sanal makinesi yani JVM si vardır. JVM'ler her platform için farklı olsa bile aynı Java kodunu çalıştırırlar. Bundan dolayıdır ki; programcının yazdığı bir java kodu, platforma bağlı olmadan JVM sayesinde her ortamda çalışır [19]. Bu sebepten dolayı Java write once, run anywhere bir kere yaz, her yerde koştur. unvanına sahiptir. Resim 2.1. JVM inin çalışma prensibi [19] Şekil yorumlanacak olursa; java program kodu yazılır. ( MyProgram.java ) Bu kaynak kod " javac compiler (derleyici) " ile dernelerek ikili koda ( byte kod'a ) çevrilir ve.class uzantılı dosyalar oluşturulur. ( MyProgram.class ) JVM, oluşturulan bu byte kodları yorumlar ve işlemcinin anlayacağı makine diline ( ) çevirir [19]. JVM nin Java platformunun nesne modüllü (object module) formatı olan class uzantılı sınıf dosyalarının belleğe yüklenip çalıştırılması için gereken hizmetleri sunan bir sistem programı olduğu ve temel görevinin sınıf dosyalarını yorumlamak olduğu yukarıda söylendi. Ancak, JVM yi salt bir yorumlayıcı değildir. Zira, yorumlama ile birlikte JVM'nin şu görevleri de vardır.

50 35 Belleğe yükleme ve çalıştırma sırasında güvenlik denetimlerinin yapılması Sınıf dosyalarının çalıştırılması esnasında yığın bellekte oluşabilecek çöplerin toplanması Yorumlamanın getirdiği çalışma hızındaki düşüşü azaltmak amacıyla kodun anında derleme kullanılarak daha hızlı çalıştırılması JVM nin diğer bir özelliği, programcıların daha hızlı kod geliştirmelerine olanak tanıyan çöp toplama birimidir. JVM'nin bir parçası olarak gerçekleştirilen çöp toplayıcı, yığın bellekte kullanılmaz hale gelen bölgelerin geriye döndürülmesini sağlar [21]. Bu da programcılara zaman kazandırır. Resim 2.2. Java sanal makinesinin mimarisi [21]

51 Bir sanal makinesinin yaşam süresi Java uygulaması başladığı zaman, bir çalışma zamanı örneği doğar. Uygulama tamamlandığında, örnek ölür. Eğer üç java uygulaması aynı anda, aynı bilgisayarda ve aynı somut uygulamada başlatılırsa, o zaman üç java sanal makinesi de çalışmaya başlar. Her java uygulaması kendi java sanal makinesi içinde çalışır. Bir java sanal makinesi örneği ilk sınıfın main() metotunu çağırarak çalışmaya başlar. Bu main() metot ; statik, public, void olmak zorunda ve bir string dizisini parametre olarak döndürmek zorundadır. Böyle bir main() metot java uygulaması için başlangıç noktası olarak kullanılır [22]. Çizelge 2.8. Kendi komut satırını yazdıran uygulama class Echo { public static void main(string[] args) {int len = args.length; for (int i = 0; i < len; ++i) { System.out.print(args[i] + " "); } System.out.println(); } }

52 Ortak Dil Çalışma Platformu (CLR-Common Language Runtime) Mimarisi Ortak Dil Çalışma Platformunun daha iyi anlaşılması için bazı önemli terimler aşağıda açıklanmıştır. Assembly Derlemiş IL koduna assembly denir. Com interop services VB 6.0, C++ gibi uygulamaların çağrılmasını sağlayan servistir. Maneged code (yönetilen kod).net framework tarafından yönetilen ve makine koduna dönüştürülmeden önce ara bir dile çeviren kod bloğudur. C#.net, J#.net, VB.net, C++.net ile yazılan kodlar MANAGEDbCODE dur. Unmanaged code (Yönetilemeyen Kod) CPU tarafında direk çalıştırılan ve bir framework(virtual machine) tarafından yönetilmeyen kod blogudur. VB 6.0, C++, C ile yazılan kodlar UNMANAGED CODE dur. Microsoft intermediate language (MSIL) Visual Studio.Net içerisindeki tüm dillerde yazılmış kodların derleme sonucunda dönüştürüldüğü ortak çıktının oluşturulduğu dildir. Metadata Programda kullanılan veri tiplerinin yanında oluşturulan sınıfların metotlarını ve bunların özelliklerini ve diğer bilgilerini içeren bir birimdir. Metadata'nın içeriği çalışma zamanında JIT derleyicileri tarafından kullanılır.

53 38 Portable executable (PE).NET, Mono ve Rotor gibi CLI (Common Language Infrastructure) standartlarına uygun ortamlardaki assembly dosyaları PE (Portable Executable) dosya formatını kullanmaktadır. PE dosya formatı Microsoft un 32 ve 64 bit Windows sistemlerinde kullandığı genel amaçlı çalıştırılabilir (executable) bir formattır. Bu format tıpkı UNIX/Linux sistemlerinde kullanılan ELF (Executable and Linkable Format) gibi bölümlerden (sections) oluşur. Bölümlerin içerisinde programın yüklenmesi ve çalıştırılabilmesi için gerekli bilgiler vardır. Source code Bilgisayar 0 lar ve 1 lerden anlayan bir makinedir. Bir arayüz kullanarak yazılan kodlara kaynak(soruce) kod adı verilir. Native code Kaynak kodların derlenerek makinenin anlayacağı şekle dönüşmüş haline native code adı verilir. Compile Kaynak kodların, makinenin anlayacağı dile veya bir ara dile dönüştürülmesi işlemine compile(derleme), bu işlemi gerçekleştiren araca da compiler(derleyici) adı verilir. Şekil 2.9. Kaynak kodun derlenmesi [25]

54 39 Compile time Yazılmış olan uygulamanın CIL(Common Intermediate Language) çevrildiği zaman sürecidir. Her hangi bir dil de yazılmış.net uygulaması, her dile ait derleyiciler ile ortak bir dile CIL(Bytecode) çevrilir. Run time Uygulamanın çalıştığı süreçtir, Compile Time da oluşturulan ByteCode lar CLR(Common Language Runtime) ile satır satır yorumlanarak (Interpreter) makine diline çevrilir ve uygulamanın çalışması sağlanır [23] Ortak dil çalışma platformu (CLR) CLR, C# ile üretilmiş kodların sistem üzerinde çalıştırılmasını sağlayan mekanizmadır. Bir C# kodu yazılıp derlendiğinde bu kod Microsoft Intermediate Language (MSIL) 'a dönüştürülür. MSIL kodları Portable Executable denilen bir dosyada saklanır. Bu derleme sonucunda program her platformda çalıştırılabilinir yapıya kavuşur. MSIL'in temelini Assembly oluşturur. Assembly, MSIL içindeki paylaşılan ve tekrar kullanılabilen temel bir birimdir. Assembly'ler, ASP.NET sayfası, PE dosyası, image dosyası, VB.NET kaynak dosyası gibi tek bir dosya olabileceği gibi bunların bir veya daha fazlasını da barındıran bir yapıda olabilir. MSIL ile derleme yapıldığında assembly'le birlikte, programa ait bir takım açıklayıcı bilgiler oluşturulur. Buna Metadata denir. Bu bilgiler programa yönelik ve dışarıya verilecek her türlü bilgiyi kapsar [19]. MSIL çalıştırılabilir bir kod değildir. Bu kod " sözde kod " (pseudocode ) içeren bir dosyadır. Bu kod anca bulunduğu sistemde bir ara program ile çalıştırılır. Bu program MSIL'i, sistem üzerinde çalıştırır. İşte C#'ta bu CLR 'dir. Yani CLR 'nin olduğu her ortamda (işletim sistemi ve işlemci fark etmeksizin) C# da derlenmiş kodlar daha doğrusu MSIL çalışacaktır. Program çalışacağı zaman C# ile derlenen kodlar yani MSIL kodlar; bir JIT (Just-In- Time - Tam zamanında) derleyici tarafından kullanılarak çalıştırılabilir koda dönüştürülürler. C# (veya.net) kodları çalıştırıldığı zaman CLR, bu JIT derleyiciyi

55 40 çalıştırır. JIT derleyici programın ihtiyaçıına göre MSIL 'i yerel dile çevirir. Yani MSIL olarak üretilen her kod CLR'nin olduğu her ortamda o sisteme uygun bir dile çevrilir ve yürütülür. Bu kodun içinde yer alan metadata olarak tanımlanan çıktı bulunur. Bu çıktı sayesinde programın diğer kodlarla etkileşimi sağlanır. CLR, programları değişik şekilde derleyebilir. Varsayılan derleme türü JIT(Just IN TIME- çalışam anında derleme) 'dır. Program çalışırken daha önce derlenmemiş bir parçasına gelince hemen o kısmı da derler ve bunu hafızda chach'e koyar. Tekrar aynı program parçasını çalıştırmak gerekirse burayı hafızadan çalıştırır. Eğer RAM yeteri kadar büyükse, programın tamamı derlenmiş ve hafızada depolanmış durumda olabilir. Bu durumda program daha hızlı çalışır. Hafızanın yeteri kadar büyük olmadığı durumlarda EconoJIT (Ekonomik JIT) derleyicisi kullanılabilir. Bu derleyici ile programın derlenmiş kısımları hafızada depolanmaz ve her seferinde aynı program parçası derlenir. Tabi ki bu derleyici normal JIT'e göre programları daha yavaş çalıştırır. Ama RAM 'i çok daha az kullanır. CLR ile gelen üçüncü derleyici PreJIT(ön JIT derleyicisi) ise derleme işini program çalışmadan önce yapar ve tüm makine kodlarını bir yerde saklar. Çalışma anında çok hızlı olan program diğer JIT derleyicileriyle derlenmiş olanlara nazaran çok hızlı çalışır. Kısaca C# kodu iki defa derleme aşamasından geçer program kodu MSIL'e, MSIL ise makine koduna çevrilir [24].

56 41 Şekil Net platformunda yazılıp derlenen bir programın çalışma süreci [23] Çalışma zamanı, aşağıdaki avantajları sağlar Performans iyileştirmeleri. Diğer dillerde geliştirilen bileşenleri kolayca kullanma yeteneği. Sınıf kitaplığı tarafından sağlanan genişletilebilir türler. Devralma, arabirimler ve nesne tabanlı programlama için aşırı yükleme gibi dil özellikleri. Çok iş parçacıklı ve ölçeklenebilir uygulamaların oluşturulmasını sağlayan açık ve serbest iş parçacığı oluşturma desteği. Yapılandırılmış özel durum işleme desteği. Özel öznitelikler için destek. Çöp toplama. Artan tür güvenliği ve emniyeti için işlev işaretçileri yerine delegeler kullanma [26]. Debugging Yazılan programların sıfır hata ile yazılması imkansızdır. Boyutu değişken olmakla birlikte mutlaka hatalarla karşılaşılır. Zaten bu sebepten dolayı projelerin en önemli aşamalarından biri de bakım aşamasıdır. İşte yazılımlar içerisinde ortaya çıkan bu hatalara bug adı verilir. Debug kelimesi de hata ayıklamak olarak düşünülebilinir. Çalışan bir programın çalışmasının adım adım izlenilebilinmesi ve bu esnada

57 42 istenilen sonuçların elde edilip edilmediğinin görünmesini sağlayan bir özelliktir. Debugging işlemi ancak managed platformlar üzerinde gerçekleştirilebilinir. Managed plaformu şu şekilde tanımlana bilir; yazılan kaynak kodların direkt olarak native koda değil de ortak bir ara dile çevrildiği, ve o ara dilin, başka bir araç tarafından yorumlanarak native koda çevrildiği platformlardır..net içerisinde debug kelimesi duyulduğunda akla ilk gelmesi gereken kavram, oluşan IL kodları işletim sistemi için yorumlayan CLR olmalıdır. Çünkü programa debug yeteneğini kazandıran araç CLR dır. CLR ın 4 temel işlevi vardır. CIL kodları Native Code a çevirmek. Bellek yönetimini sağlamak. Thread yönetimini sağlamak. Debugging [25]

58 43 3. JAVA COLLECTONS FRAMEWORK VE.NET FRAMEWORK bbkarşilaştirilmasi 3.1. Veri Yapıları Açısından Microsoft C# Programlama Dili ile Sun Micro bbbbsistem Java Programlama Dilinin Karşılaştırılması Her şey objedir (nesnedir) C# ta bütün sınıflar System.Object ın alt sınıfıdır. Aynı şekilde javada da bütün sınıflar java.lang.object ın alt sınıfıdır. Her iki dilde de bazı Object sınıflar benzerdir. ( ör. System.Object s ToString(), Java.lang.Object s tostring() ) Sanal makine ve çalışma zamanı dili Java kodları, java byte codelarına derlenirler. Byte code lar java sanal Makinesinde (JVM) çalıştırılırlar. C# kodları Intermediate Language(IL) de derlenir. Daha sonra Common Language Runtime (CLR) da çalıştırılır. Her iki platformda Tam Zamanlı derleyiciler aracılığı ile yerel derlemeyi ( compilation) destekler. Heap tabanlı sınıflar ve garbage collection javada nesneler new anahtar kelimesinin kullanılmasıyla heapte oluşturulur. C# taki sınıfların çoğu new anahtar kelimesinin kullanımı ile heapte yaratılırlar. JVM imha edilecek nesneleri yönetir. Aynı şekilde CLR'de garbage collection algoritması üzerinden imha edilecek nesneleri yönetir. Diziler pürüzlü, dişli (Jagged) Olabilir

59 44 C ve C++ gibi dillerde, çok boyutlu bir dizinin her dizeni aynı boyutlu olmalıdır. Java ve C# ta diziler aynı olmak zorunda değildir. Çünkü jagged diziler, dizilerin tek boyutlu dizileri olarak yaratılabilir. Bir jagged dizide, diziler bir başka dizinin referansı olabiliyor. İnt [][] myarray = new int[2][]; myarray[0] = new int[3]; myarray[1] = new int[9]; yukarıdaki kodlar hem java hem de C# için geçerlidir. Global metot yok C++ ta olmayan sadece java'daki gibi C#'taki metotlar; üye yada static metot olarak bir sınıfın parçası olmak zorunda. Arayüzlere (İnterfacelere) evet, çoklu kalıtıma, hayır C#, java gibi saf bir soyut sınıfa benzeyen interface kavramını destekler. Benzer şekilde C# ve java ikisi de sadece bir sınıftan kalıtım olabilirler. Fakat ara yüzlerden çoklu kalıtım ya da kılgılanmayı (implementation) alabilirler. Stringler değişmez Bir string nesnesi oluşturulduktan sonra o nesnenin değeri bir daha değişmez. C# System.String sınıfına sahiptir. java da java.lang.string sınıfına sahiptir. Her iki sınıftan da nesneler oluşturulduktan sonra değerleri değişmezler. String metotları kullanıldıklarında var olan string değişmez yeni bir string oluşturulup veri gönderilir.

60 45 Çizelge 3.1. C# ve java kodu String cssstring = Gazi Univ. ; csstring.tolower(); String jsstring = Bilişim ; Jsstring.toLowerCase(); Stringlerde değer değiştirilmez yeni bir kopyası oluşturulur. C# ta bir stringi object olarak yaratmak için System.Text.StringBuilder classını kullanmak uygun olur. Aynı şekilde java'da da Java.lang.StringBuffer sınıfı kullanılır. Genişletilemeyen (unextendable) sınıflar Hem java da hem de C# ta genişletilemeyen sınıflar mevcuttur. Bunlar base class olamazlar. Bir kalıtım hiyerarşisinde son olacak bir sınıf olmalıdır. Java bu sınıfı başına final getirerek C# ta başına sealed getirerek oluşturuyor. Çizelge 3.2. Genişletilemeyen sınıf örneği C# Kodu Sealed class Ogrenci{ string Ad; string Soyad; int ID; Void attend class(){ } Java Kodu Final class Ogrenci{ String Ad; String Soyad; int ID; Void attend Class(){ } İstisna fırlatma ve yakalama (Throwing ve catching exceptions) İstisnalar C# ve Java'da çoğu benzerliği paylaşırlar. Her ikisi de tyr-catch ve finally bloklarını kullanırlar. Her iki dilde de bir kalıtım hiyerarşisi mevcuttur. Bu da bütün istisnalar Exception classından türetilirler. İstisnalar her iki dilde de yakalanabilir yada fırlatılabilirler her hangi bir hata oluşumu

61 46 durumunda her iki dilde de kendi istisna sınıflarını oluşturulabilir. İstisna yakalama yada fırlatma temel sınıftan (base classtan) yapılabilir. EK-7'de hem C# hem de Java kod örneği mevcuttur. Tanımlanmış ve static kurucularda üye başlatılması (Member initialization at definition and static constructors) İnstance ve static değişkenler tanımlandıkları C# ve Java'da başlatılabilirler. Eğer değişkenler bir instance değişken ise, o zaman constructor çağırılmadan önce başlanma oluşur. Static üyeler, üyeler ilk kullanımından önce ve instance classın ilk oluşumundan önce başlatılabilirler. Bu da static ve instance üyeleri içeren classlar başlatılmadan önce bir kod bloğunun çalıştırılmasını mümkün kıllar. Bu kod bloklar C#'ta static constructors olarak ve Java'da static initialization bloks olarak adlandırılırlar. Static constructorlar ilk defa yaratılan bir instance klasından önce ve classtaki static metotun çağırılmasından önce çağrılırlar. EK-8'de Tanımlanmış ve static kurucularda üye başlatılması örnek uygulaması mevcuttur. Kutulama (boxing) C# ve java'da değer tiplerini objecte, object tiplerini değer tiplerine çevirmek mümkündür. Buna kutulama (boxing) ve kutudan çıkarma (unboxing) denir. EK-9'de örnek uygulama kodları mevcuttur. Collections Popüler olan dillerin bir çoğu collections framework içermektedir. Collections frameworklerin birinci avantajı ; veri yapıları koleksiyonları üzerinde sıralama yada arama yapmak gerektiğinde gerçek uygulama geliştiricilerini gereksiz kod yazmaktan ve algoritma üretmekten

62 47 kurtarmasıdır. İkinci bir yararı yeni geliştiricilerin fazla kod yazmadan iki projeyi karşılaştırma olanaklarının olmasıdır. C#, Collections framework sınıflarını System.Collections ve System.Collections.Generic namespace inde tutar. System.Collections namespace i interface, abstract sınıfları barındırır. Bunlar abstract veri tiplerini sunarlar; IList, IEnumerable, IDictionary, ICollection ve CollectionBase System.Collections namespace ayrıca ArrayList, Stack, Queue, HashTable ve SortedList gibi bazı somut uygulamalar içermektedir. Somut veri yapılarının tümü tip belirtmedikçe verileri object tipinde barındırırlar. System.Collections.Generic namespace generic(genel) uygulamaya sahip veri yapılarının anahtar kelimesine sahiptir..bu sınıflar List<T>, Stack<T>, Queue<T>, Dictionary<K,T> ve SortedDictionary<K,T> sınıflarıdır. Java collections framework, java util paketinde çok sayıda sınıf ve interface mevcuttur. Genericler için ayrı bir namespace sahip olmak yerine java.util paketi genericleri de desteklemektedir. JCF te sets ve jenerik olmayan linkedlist gibi C# ta bulunmayan veri yapıları bulunmaktadır. Ayrıca java collections Frameworkte veri yapılarına ulaşmak için bir den çok metot mevcuttur. Sonuç olarak JCF, veri yapıları arasında en büyüğünü, en küçüğünü bulmak, bir listeyi ters çevirmek, karıştırmak ve sırlamak için çok sayıda algoritmaya sahip. Şuan için, JCF,.NET üzerinden kullanılan C# tan daha gelişmiştir [27]. Anahtar kelime karmaşıklığı Java ve C# arasında büyük bir syntax benzerliği mevcuttur.

63 48 4. JAVA KOLEKSİYONLARI VE C# KOLEKSİYONLARI bbbbbperformansini KARŞILAŞTIRMA UYGULAMA PROGRAMI 4.1. Programlama Dilleri ve Konseptleri C# ve Java programlama dilleri yorumlanarak çalışan nesne yönelimli programlama dilleridir. Yorumlanmadan önce program kodları, byte kod ve MSIL adı verilen bir ara dile derlenirler. java, oracle'ın bir ürünü olan JVM (java virtiul machine) denilen java sanal makinesi ile çalışır ve onun kütüphanelerini kullanır. C# ise Microsoftun ürünü olan CLR (Common Language Runtime) ile çalışır ve onun kütüphanelerini kullanır. Programlama dillerinde değişik sistem tipleri mevcuttur. C# ve java sistem tipi olarak static tipi kullanır. Ancak 4.0 versiyonundan sonra C# dinamik tip kullanmaya başlamıştır. Bunu da değişkenler üzerinde statik bypass kontrolleri yaparak başarır [7]. Çizelge 4.1. yukarıdaki karakterizasyonları özetliyor. Çizelge 4.1. Programlama dillerinin karakteristik görünümü [7] Uygulama Stratejleri Java JITcompiled C# JITcompiled Sistem Tipi Ana Paradigma Jenerikler static OOP Type - erasure static OOP runtime Testler Bu çalışmada performans analizi testleri, koleksiyonlara eleman ekleme işlemi ArrayList, LinkedList, Stack, Hashtable ve HashSet koleksiyonları üzerinde yapılmıştır. Eleman arama, sıralama ve silme işlemi ArrayList, LinkedList, Stack ve HashSet koleksiyonları üzerinden yapılmıştır. Bu koleksiyonların seçilmesinin nedeni bunların hem java, hem de C#'ta kullanılan koleksiyonlar olmasıdır.

64 49 Testler ekleme işlemi için 100 kez, arama, silme ve sıralama için onar kez gerçekleştirilmiştir. İlk üç sonuçlar dahil edilmemiştir. Sonuç için ortalama değerler kullanılmıştır. Yapılan testlerle her iki programlama dilinin çalışma süreleri, bellek tüketimleri ve yazılan kod uzunlukları incelenmiştir. Test Platformu Aşağıdaki bilgisayar, testler için kullanılmıştır. Windows 8 Single Language Samsung Elektronics Notebook 700 GB Hardisk 8 GB RAM Intel(R) Core(TM) i7-3630qm 2,4GHz 64bit Sistem Türü Java 7.3.1, Microsoft Visual Studio 2010

65 Java ile Java Collections Framework Performans Uygulama Programı Uygulama programı Oracle firmasının Java programı ve NetBeans IDE ile hazırlanmıştır. Ara yüz programında koleksiyon seçimini sağlayan bir Jlist mevcuttur. İşlem yapılabilmesi için ilk önce koleksiyon seçiminin yapılması gerekmektedir. Birinci kısımda üzerinde işlem yapılması istenen koleksiyonun tür seçimi sağlanmıştır. JCombobox'tan koleksiyona eklenecek eleman sayısı belirlenerek, kullanıcının metin, negatif sayı yada buna benzer hatalı girişleri engellenmiştir. Bunun için Jcombobox listesine 10 'dan 'na kadar elemanlar eklenmiştir. Eklenecek elemanların tipinin belirlenmesi için, aynı şekilde Jcombobox listesine int, string, char, double ve nesne tipi elemanlar eklenmiştir. Koleksiyonu oluştur butonuna tıklanarak koleksiyon oluşturulmuştur. Oluşturma esnasında geçen süre mili saniye kullanılan bellek mega bayt cinsinden hesaplanıp label üzerinde kullanıcıyı bilgilendirmiştir. KAYDET butonuna basıldığında veriler JTable üzerine eklenerek gösterilmiştir. Yeni İşlem butonu her şeyi sıfırlamak ve yeni bir koleksiyon oluşturmak için tasarlanmıştır. Tablodaki verilerin Grafikte Göster butanuna tıklanarak grafiği oluşturulması sağlanmıştır. Resim 4.1. Java'da hazırlanan uygulama programı ara yüzü

66 51 Java uygulama programının birinci kısmında oluşturulacak olan koleksiyonun, koleksiyon çeşidi, eleman sayısı ve eleman tipi seçimi sağlanmıştır. Oluştur butonuna tıklandığında koleksiyonun oluşma süresi ve belek tüketimi hesaplanmıştır. Program, kullanıcı isterse kaydet butonuna tıklayarak koleksiyon çeşidini, eleman sayısını, eleman tipini, oluşma süresini ve bellek tüketimini tabloya kayıt edebilecek, yeni işlem butonu tıklayarak her şeyi sıfırlayabilecek şekilde tasarlanmıştır. Resim 4.2. Java uygulama programı 1.kısım Java uygulama programının ikinci kısmında oluşturulan koleksiyonun oluşma süresini ve bellek tüketimi gösteren label'lar mevcuttur. Elemanları göster butonu, oluşturulan koleksiyonun elemanlarını bir tabloda gösterecek şekilde tasarlanmıştır. Resim 4.3. Java uygulama programı 2. kısım Java uygulama programının üçüncü kısmında oluşturulan koleksiyonun üzerinde işlem yapılmasını sağlayan kontroller vardır. Koleksiyonlar üzerinde eleman ekleme, eleman silme, eleman arama, ve sıralama işlemleri yapılabilmektedir. Hesapla

67 52 butonuna tıklandığında belirlenen işleme göre geçen süre mili saniye cinsinden hesaplanır, İstendiğinde koleksiyona ait bilgiler tabloya kayıt edilebilmektedir. Resim 4.4. Java uygulama programı 3. kısım

68 C# ile.net Collections Framework Koleksiyonları Performans Uygulama bbbbprogramı Uygulama programı Microsoft Visual Studio.NET 2010, visual C# programı ile hazırlanmıştır. Resim 4.5. C#'ta hazırlanan uygulama programı ara yüzü Uygulamanın ara yüz programında Koleksiyon seçimini sağlayan bir listbox mevcuttur. İşlem yapılabilmesi için ilk önce koleksiyon seçiminin yapılması gerekmektedir. Birinci kısımda üzerinde işlem yapılması istenen koleksiyonun tür seçimi sağlanmıştır. Combobox'tan koleksiyona eklenecek eleman sayısı belirlenerek, kullanıcının metin, negatif sayı yada buna benzer hatalı girişleri engellenmiştir. Bunun için combobox listesine 10, 100, 1000, 10000, 10000, , seçenekleri barındırılmıştır.. Eklenecek elemanların tipinin belirlenmesi için, aynı şekilde combobox listesine int, string, char, double ve nesne elemanlar eklenmiştir Koleksiyonu oluştur butonuna tıklanarak koleksiyon oluşturulması sağlanmıştır. Oluşturma esnasında geçen süre mili saniye kullanılan bellek mega bayt cinsinden hesaplanıp label üzerinde kullanıcıyı bilgilendirmiştir. KAYDET butonuna basıldığında veriler DataGridView üzerine eklenerek gösterilmiştir. Yeni işlem butonu her şeyi sıfırlamak ve yeni bir koleksiyon

69 54 oluşturmak için tasarlanmıştır. Tablodaki veriler Grafikte Göster butanuna tıklanarak grafiği oluşturulması sağlanmıştır. Resim 4.6. C# uygulama programı 1. kısım C# uygulama programının ikinci kısmında oluşturulan koleksiyonun oluşma süresini ve bellek tüketimi gösteren label'lar vardır. Elemanları göster butonu oluşturulan koleksiyonun elemanlarını bir tabloda göstermektedir. Resim 4.7. C# uygulama programı 2. kısım Üçüncü kısımda oluşturulan koleksiyonun üzerinde nasıl bir işlem yapılacağı belirlenmektedir. Combobox listesinde eleman ekleme, eleman silme, eleman arama ve elemanları sırala işlemlerini gerçekleştirecek seçenekler bulunmaktadır. Yapılması istenen işlem belirlendikten sonra HESAPLA butonuna tıklanılarak, seçilen işleme göre geçen süre hesaplanmaktadır. İstendiğinde bu veriler kayıt edilebilmekte, bu çalışmada bulunan sonuçlar üzerinden performans karşılaştırmaları analizler ve grafikler oluşturulabilmektedir.

70 55 Resim 4.8. C# uygulama programı 3. kısım Java uygulama programı ile C# uygulama programın performans karşılaştırmalarının sağlıklı sonuçlar verebilmesi için, uygulama ara yüzleri, kullanılan metotlar, kod satırları, bloglar sabit tutulmaya çalışılmıştır.

71 Performans Karşılaştırması Programın çalışma hızı, belirlenen bir problemin çözümü için tasarlanan program kodunun görevini yerine getirmesi için gerekli zaman bilgisini veren bir ifadedir; bu bir sayı olabileceği gibi bir matematiksel ifade de olabilmektedir. Bellek gereksinimi ise, programın yürütülmesi sırasında program kodu ve kodun yürütülmesi esnasında kullanılan verilerin işgal ettiği / gereksinim duyduğu toplam bellek alanıdır [29]. Aşağıda Java koleksiyonlarının ve C# koleksiyonlarının eleman ekleme çalışma hızları ve bellek gereksinimleri karşılaştırılmıştır. Bunun yanında koleksiyonlarda eleman sıralama, arama, silme performansları karşılaştırılmıştır. Program kod satırları sabit tutularak performansı etkilemeleri engellenmiştir. Çizelge 4.2. Kullanılan koleksiyon metotlarının zaman karmaşıklığı ArrayList LinkedList Stack HashSet Peek()/get() O(1) O(n) O(1) Add() O(1) O(1) O(1) O(1) Pop()/remove() O(n) O(n) O(1) O(1) Search()/Conrains() O(n) O(n) O(n) O(1) Çizelge 4.3. Kullanılan metotların koleksiyonlarda bulunma durumları Java için ArrayList LinkedList Stack HashSet Sort() Var collection.sort() Var collection.sort() Var collection.sort() Var SortedSet Contains() var var var var Remove() var var var var C# için Sort() var yok yok yok Contains() var var var var Remove() var var yok var

72 Koleksiyonlarda eleman ekleme performans karşılaştırması Çalışma süreleri hesaplanırken şöyle bir yol izlenmiştir: Java ve C# programlarında her koleksiyon için ( Arraylist, LinkedList, Stack, HashTable ve HashSet) integer, string, char, double ve nesne tiplerinde elemanlar eklenmiştir. Her değişken tipinden ve eleman eklenmiştir. Eklenecek elemanlar 0 ile arasından rastgele sayılar olarak seçilmiştir. Eleman ekleme işlemleri 100'er defa tekrarlanıp ortalamaları alınmıştır. Random nesnesi ile double ve int üretmek mümkündür. Char, string, yada nesne üretilmesi mümkün değildir. Bunun için rastgele üretilen integer değerler koleksiyonlara eklenmesi için string ve char'a dönüştürülmüştür. add( (char)uretilensayi) add(integer.tostring(uretilensayi)) HashTable ve HashSet koleksiyonlarına aynı eleman tekrar eklenemediğinden "for" döngüsü ile bu koleksiyonlara eleman eklenmiştir. Performansı etkilememesi için rondom metodu çalıştırılmıştır. Koleksiyonlara eleman eklemek için kullanılan metotlar: UretilenSayi = rnd.nextint( ); Rastgele sayı üretmek için yukarıdaki kod satırı yazılmıştır. Bu kod satırı performansı neredeyse iki kat düşürmüştür. ArrayList koleksiyonuna eleman eklemek için add() metodu kullanılmıştır. Add() metodu hem Java hem de C#'ta koleksiyonun sonuna eleman ekleyerek çalışmaktadır. arraylist.add(uretilensayi); // integer eleman eklemiştir. arraylist.add(integer.tostring(uretilensayi)); // String'e çevirip eklemiştir. arraylist.add((char) UretilenSayi); // Char'a çevirip eklemiştir. arraylist.add((double) UretilenSayi); // Double'a çevirip eklemiştir.

73 58 arraylist.add(newkisi(integer.tostring (UretilenSayi), Integer.toString (UretilenSayi))) nesne tipine çevirip eklemiştir. Tip çevirme işlemi performans kaybına neden olmuştur. Fakat bu işlem bütün koleksiyonlar ve her iki programlama dili için gerçekleştirildiğinden performans analizi açısından bir problem teşkil etmemiştir. LinkedList koleksiyonunda eleman ekleme işlemi hem Java hem de C#'ta en başa yapılarak gerçekleştirilmiştir. linkedlistint.addfirst(uretilensayi); Kod satırı koleksiyonun başına integer tipinde eleman ekleyecek şekilde çalıştırılmıştır. String, char, double ve nesne tipindeki elemanların eklenmesi yukarıdaki ArrayList koleksiyonunda olduğu gibi gerçekleştirilmiştir. Sadece add() metodu yerine addfirt() metodu kullanılmıştır. Stack koleksiyonunda eleman ekleme işlemi hem Java hem de C#'ta en başa yapılarak gerçekleştirilmiştir. stackint.push(uretilensayi); Kod satırı koleksiyonun başına integer tipinde eleman ekleyecek şekilde çalıştırılmıştır. String, char, double ve nesne tipindeki elemanların eklenmesi yukarıdaki ArrayList koleksiyonunda olduğu gibi gerçekleştirilmiştir. Sadece add() metodu yerine push() metodu kullanılmıştır. HashTable koleksiyonuna eleman ekleme işlemi diğer koleksiyonlardan farklılık göstermiştir. HashTable sınıfı elemanları anahtar ve değer olarak almıştır. Bu sınıf anahtarları değerlere göndererek bir Hashtable ambarı yaratmıştır. Null olmayan her nesne anahtar yada değer olarak kullanılmıştır [11]. Koleksiyona eleman ekleme Hash fonksiyonuna göre gerçekleştirilmiştir. Hash fonksiyonu, bir anahtar (key) kullanarak tablo üzerinden bir pozisyon (index) üretmiştir. Verilerin tablodaki yerlerini hash fonksiyonu belirlemiştir. Hash kodun üretilmesi performans kaybına neden olmuştur.

74 59 for (int j = 0; j < elemansayisi; j++) { hashtable.put(j, j); // Java da integer tipinde eleman ekleme kod satırı hashtable.add(j, j); // C#'ta integer tipinde eleman ekleme kod satırı String, char, double ve nesne tipindeki elemanların eklenmesi yukarıdaki ArrayList koleksiyonunda olduğu gibi gerçekleştirilmiştir. Sadece Java'da add() metodu yerine put() metodu kullanılmıştır. HashSet koleksiyonuna eleman ekleme işlemi hem Java hem de C#'ta en sona yapılarak gerçekleştirilmiştir. for (int j = 0; j < elemansayisi; j++) { hashsetint.add(j); Kod satırı koleksiyonun sonuna integer tipinde eleman ekleyecek şekilde çalıştırılmıştır. String, char, double ve nesne tipindeki elemanların eklenmesi yukarıdaki ArrayList koleksiyonunda olduğu gibi gerçekleştirilmiştir.

75 Çalışma süreleri açısından karşılaştırma Java programlama dilinde koleksiyonlara eleman eklenince geçen süreyi hesaplatabilmek için System.currentTimeMillis(); metodu kullanılmıştır [28]. Bu metot, koleksiyona eleman eklenmeden hemen önce ve eklendikten hemen sonra çalıştırılmıştır. Bulunan değerler değişkenlere atanmıştır. Zamanlar arasındaki fark geçen süreyi vermiştir. Bu şekilde geçen süre mili saniye cinsinden hesaplanmıştır. Koleksiyonlara nesne eklemek için, aşağıda kodu verilmiş bir Kisi sınıfı oluşturulmuştur. public class Kisi { String a,b; Kisi(String ad,string soyad){ a=ad;b=soyad; }} Çizelge 4.4. Java programında koleksiyonlara eleman eklenince geçe süre (ms) Eleman sayısı Eleman tipi Arraylist Linkedlist Stack HashTable HashSet integer 1,55 2,32 4,45 5,47 5,02 string 5,14 5,21 5,84 10,02 6,15 char 1,65 1,84 3,52 3,67 2,43 double 1,85 2,29 4,14 4,23 3,89 nesne 9,17 9,08 9,77 24,94 14, integer 15,67 18,14 33,29 41,65 24,3 string 49,24 52,71 63,54 117,21 74,23 char 13,36 17,26 32, ,68 double 13,12 18,03 36,84 35,53 32,83 nesne 87,01 96,11 104,95 591,09 161

76 integer string char double nesne integer string char double nesne Geçen Süre mili saniye Java Koleksiyonları Geçen Süre Arraylist Linkedlist Stack HashTable HashSet Şekil 4.1. Java koleksiyonlarına eleman eklenince geçen ortalama süre Şekil 4.1. incelendiğinde: belirlenmiştir. nesne tipinde eleman eklemek en maliyetlisi olarak Koleksiyonlar kendi aralarında incelendiğinde Arraylist koleksiyonu en performanslısı olarak belirlenmiştir. Arkasından Stack, Linkedlist, HashSet ve HashTable gelmiştir. Bunu belirleyen koleksiyonların eleman ekleme algoritmaları ve zaman karmaşıklığıdır. ArrayList koleksiyona eleman ekleme işlemini index numarasına göre dizi mantığı ile gerçekleştirmiştir. Bu da onun performansını olumlu yönde etkilemiştir. Stack ve LinkedList, koleksiyona eleman ekleme işlemini en başa yaparak gerçekleştirmiştir. HashSet koleksiyonu eleman ekleme işlemini ekleme sırasına göre gerçekleştirmemiştir. HashTable koleksiyonu ise elemanları ekleyebilmek için bir hash kod üretmiştir. Hash fonksiyonu ile oluşturulan bu kod elemanın yerini belirlemiştir. Buda performans kaybına neden olmuştur. C# programlama dilinde, ArrayList koleksiyonuna eleman eklenince geçen süreyi hesaplamak için DateTime.Now() metodu ve TimeSpan sınıfının bir nesnesi kullanılmıştır.

77 62 Koleksiyonlara nesne eklemek için, aşağıda kodu verilmiş bir Kisi sınıfı oluşturulmuştur. class Kisi { string isim { get; set; } string soyisim { get; set; } public Kisi(string ad, string soyad) { isim = ad; soyisim = soyad;}} C# koleksiyonlarına eleman eklenince Çizelge 4.5.'teki sonuçlar elde edilmiştir. Çizelge 4.5. C# Programlama Dili için geçen süre Eleman sayısı Eleman tipi Arraylist Linkedlist Stack HashTable HashSet integer 2,88 3,65 2,98 5,4 3,18 string 15,06 16,95 15,85 32,74 15,59 char 3 3,47 2,94 3,92 double 4,83 5,65 4,95 10,32 6,2 nesne 35, ,55 115,27 37, integer 73,58 120,09 75,07 168,95 30,72 string 222,53 358,01 235,19 797,27 254,4 char 52,85 141,77 60,97 35,81 double 74,85 162,57 86,56 346,94 59,17 nesne 545, ,4 1966,74 673,95

78 integer string char double nesne integer string char double nesne Geçen süre mili saniye C# Koleksiyonları Geçen Süre Arraylist Linkedlist Stack HashTable HashSet Şekil 4.2. C# koleksiyonlarına eleman eklenince geçen ortalama süre Yukarıdaki grafik şekli incelendiğinde; C# koleksiyonlarında en iyi performansı ArrayList koleksiyonu oluşturmuştur. En kötü performansı HashTable koleksiyonu göstermiştir. Java programlama dilinde olduğu gibi nesne tipinde eleman eklendiğinde en kötü performans sergilenmiştir. HashTable koleksiyonuna aynı veri tekrar eklendiğinde hata ile karşılaştırılmıştır. Hashtable koleksiyonuna char tipinde veri eklenmemiştir. HashSet'te aynı veriyi eklememiştir fakat hata da vermemiştir.

79 integer string char double nesne integer string char double nesne integer string char double nesne integer string char double nesne Arraylist Linkedlist Stack HashTable HashSet java c# Şekil 4.3. Java ve C# koleksiyonlarına eleman ekleyince geçen süre karşılaştırması Şekil 4.3. incelendiğinde Java'daki koleksiyonların C#'taki koleksiyonlara göre eleman ekleme işlemini daha kısa bir sürede gerçekleştirdiği görülmüştür. Performansı etkileyen yapıların başında JVM ve CLR sanal makineleri olmuştur. Diğer etkenler koleksiyonların yapıları, yazılan kod satırları ve metotlar olmuştur.

80 Kullanılan bellek açısından karşılaştırma Kullanılan bellek hesaplanırken, çalışma süreleri hesaplanmasındaki yol izlenmiştir: ArrayList, LinkedList, Stack, HashSet ve HashTable koleksiyonlarına integer, string, char, double nesne tiplerinde ve sayılarında elemanlar eklenmiştir. Program kodları 100'er defa çalıştırılıp ortalamaları alınmıştır.bu şekilde kullanılan bellek değeri hesaplanmıştır. Java programında Koleksiyonlara eleman eklenince kullanılan belleği hesaplatmak için Runtime sınıfından bir runtime nesnesi yaratılmıştır [28]. Koleksiyona eleman eklemeye başlamadan önce runtime.gc() metodu çağrılarak garbage collector çalıştırılmıştır ve sayılarında elemanlar eklendikten sonra long memory = runtime.totalmemory() - runtime.freememory(); kod satırlarıyla toplam bellekten kalan bellek çıkarılmıştır. Bu şekilde kullanılan bellek hesaplanmıştır. Bulunan sonuç byte türündendir. Bu sonucu Mbyte'a çevirmek için aşağıdaki kod satırları yazılmıştır; private static final long MEGABYTE = 1024L * 1024L public static long bytestomegabytes(long bytes) { return bytes / MEGABYTE } Aynı kod satırları diğer koleksiyonlar için ve diğer değişken tipleri için tekrarlanmıştır. Bulunan sonuçlar Çizelge 4.6.'da gösterilmiştir.

81 integer string char double nesne integer string char double nesne Bellek Mb 66 Çizelge 4.6. Java programlama dili için kullanılan bellek Eleman sayısı Eleman tipi Arraylist Linkedlist Stack HashTable HashSet integer ,02 5 string 6 8,08 5, char 2 5, double nesne 13, integer ,91 46 string , char double 24,09 46, nesne , Java Koleksiyonları Kullanılan Bellek Arraylist Linkedlist Stack HashTable HashSet Şekil 4.4. Java koleksiyonlarına eleman eklenince kullanılan bellek Şekil 4.4. Java koleksiyonlarına eleman eklenince kullanılan bellek karşılaştırmasını vermiştir. Koleksiyonlara nesne tipinde elemanlar eklendiğinde çok büyük bir farkla bellek tüketilmiştir. En az bellek tüketimi integer ve char tipi eleman eklendiğinde görülmüştür. Koleksiyonlara baktığımızda; En az bellek tüketimini ArrayList ve Stack koleksiyonu gerçekleştirirken, en çok bellek tüketimini HashTable koleksiyonu gerçekleştirmiştir.

82 integer string char double nesne integer string char double nesne Bellek Mb 67 C# programında kullanılan belleği hesaplatmak için GC.GetTotalMemory(false) metodu çalıştırılmıştır. Bu metodu çalıştırmadan önce GC.Collect() metodu çalıştırılarak çöp toplayıcısının devreye girmesi sağlanmıştır. Bu sayede boş yere kullanılan bellek serbest bırakılmıştır. Kullanılan kod satırları diğer koleksiyonlar için ve diğer değişken tipleri için tekrarlanmıştır. Bulunan sonuçlar Çizelge 4.7.'de gösterilmiştir. Çizelge 4.7. C# programlama dili için kullanılan bellek Eleman sayısı Eleman tipi Arraylist Linkedlist Stack HashTable HashSet integer ,04 string char ,02 double ,08 nesne integer 11, ,03 0,32 string char ,04 double 15 28, ,66 nesne 75, ,1 136,31 73,26 C# Koleksiyonları Kullanılan Bellek Arraylist Linkedlist Stack HashTable HashSet Şekil 4.5. C# koleksiyonlarına eleman eklenince kullanılan bellek

83 integer string char double nesne integer string char double nesne integer string char double nesne integer string char double nesne Mega Byte 68 Çizelge 4.5. incelendiğinde bellek tüketimi açısından en maliyetlisi HashTable koleksiyonu ve koleksiyonlara nesne tipinde eleman eklenince gerçekleşmiştir. HashSet koleksiyonuna char tipinde eleman eklenince istenilen sayıda eleman eklenememiştir fakat program hata da vermemiştir. Bu yüzden char tipinde eleman ekleme işleminde az bellek tüketimi gerçekleşmiştir. String tipinde eleman ekleme işleminin diğer değer tiplerine göre daha maliyetli olmasının bir nedeni tip çevirme işleminin gerçekleştirilmiş olmasıdır. Koleksiyonlar değerlendirildiğinde en az bellek tüketimi HashSet koleksiyonunda gerçekleşmiştir Arraylist Linkedlist Stack HashTable HashSet Java C# Şekil 4.6. Java ve C# koleksiyonlarına eleman eklenince kullanılan bellek karşılaştırması Yukarıdaki 4.6. grafik şekli incelendiğinde Koleksiyonlara eleman eklenince geçen süre bazında java daha performanslı iken kullanılan bellek açısından C# çok daha hesaplıdır. Eklenen eleman sayısı artırıldığında Java daha az bellek tüketiyormuş gibi görünse de grafiğe bir bütün olarak bakıldığında C#'ın daha az bellek tükettiği fark edilmektedir.

84 69 Şekil 4.7. C# ve java programlama dillerinin kullandığı süre ve bellek kullanımları bbbbbbbbbilişkisini gösteren regresyon eğrisi Şekilde görüldüğü gibi süreyle birlikte belli bir bellek kullanımı söz konusu. Yalnız eklenen eleman sayısı sabit tutulduğunda, ekleme süresi artsa bile kullanılan bellek sabit kalma eğilimi göstermektedir. Jeremy Singer 2003 yılında JVM'nin CLR'ye karşı yaptığı performans araştırmasında iki sanal makinenin performans açısından çok fazla bir farklılığın olmadığı sonucuna varmıştır [30] yılında Pratibha Singh ve arkadaşları JVM ve CLR üzerinde yaptığı araştırmalar sonucunda JVM'nin CLR'ye göre daha çok bellek tükettiği sonucuna varmıştır [31].

85 Koleksiyonlarda sıralama performans karşılaştırması Karşılaştırma integer elemanlı ArrayList, LinkedList, Stack ve HashSet koleksiyonları arasında gerçekleştirilmiştir. Koleksiyonları oluşturan elemanlar random nesnesi ile üretilen 0 ile sayı arasından eklenmiştir. Sıralama işleminin ilk üç denemesi sayılmayıp 10'ar defa tekrarlanmıştır. Bulunan sonuçların ortalamaları alınmıştır. Java'da List arayüzünü uygulayan AraryList, LinkedList ve Stack koleksiyonlarının sıralanması için Collections sınıfının static sort() metodu kullanılmıştır. Collections.sort(arraylist); Collections.sort(linkedlist); Collections.sort(stack); HashSet koleksiyonu Set ara yüzünü uygular. HashSet koleksiyonunun elemanlarının sıralanması için ; Set sortedset = new TreeSet(hashset); kod satırları yazılmıştır. C#'ta LinkedList, Stack ve HashSet koleksiyonlarında Sort() metodu bulunmadığından bu koleksiyonları sıralamak için koleksiyon elemanları bir diziye aktarılmıştır. Kod satırları aşağıda verilmiştir. Array arr = new stack.toarray(); Array.Sort(arr); Elemanların sıralanması için arr dizisi sıralanmıştır. Aslında burada sıralanan LinkedList, Stack ve HashSet koleksiyonları değil arr dizisi olmuştur. Performans karşılaştırması açısından sağlıklı bir sonuç vermeyeceğinden bu koleksiyonlar için elde edilen veriler grafiğe eklenmemiştir.

86 Geçen Süre Ms 71 Çizelge 4.8. Java ve C# koleksiyonların sıralama performansları Program Eleman sayısı İşlem Arraylist Linkedlist Stack HashSet java Sıralama c# Sıralama int Elemanlı Koleksiyonların Sıralanması Sıralama Sıralama Arraylist Linkedlist Stack HashSet java c# Şekil 4.8. Java ve C# koleksiyonlarının sıralama performansları Java koleksiyonlarında en iyi performansı ArrayList koleksiyonu göstermiştir. ArrayList koleksiyonu elemanlarını dizi mantığı ile tutar. En kötü performansı HashSet koleksiyonu göstermiştir. HashSet koleksiyonu elemanları ekleme sırasına göre değil oluşturduğu bir hash koda göre tutar.

87 Koleksiyonlarda arama performans karşılaştırması Arama işlemi integer elemanlı ArrayList, LinkedList, Stack ve HashSet koleksiyonları arasında gerçekleştirilmiştir. Arama işlemi için Contains() metodu kullanılmıştır. Koleksiyonları oluşturan elemanlar random nesnesi ile üretilen 0 ile sayı arasından eklenmiştir. Arama işleminin ilk üç denemesi sayılmayıp uygulama 10 defa tekrarlandıktan sonra bulunan sonuçların ortalamaları alınmıştır. Arama işleminde iki durum söz konusu olmuştur. İlki eleman bulununca diğeri eleman bulunmayınca. Her iki durum için de karşılaştırmalar yapılmıştır. LinkedList koleksiyonunda aranan eleman en başta olunca eleman 0 ms'de bulunmuştur. HashSet koleksiyonunda eleman bulunsa da bulunmasa da geçen süre 0 ms olarak hesaplanmıştır. HashSet koleksiyonu elemanlarına oluşturduğu hash kodu ile direk ulaştığından elemanlarına ulaşması sabit sürede olup zaman karmaşıklı O(1) olarak bulunmuştur. C#'ın Stack koleksiyonunda eleman araması sonucunda eleman mevcut ise geçen süre 0 ms olarak hesaplanmıştır. Eleman koleksiyon içersinde mevcut değilse geçen süre çizelge 4.9'da verilmiştir. Çizelge 4.9. Java ve C# koleksiyonların arama performansları Program Eleman saysı İşlem Arraylist Linkedlist Stack HashSet java Arama bulundu 56 43,5 17,7 0 Arama bulunamadı 63,3 97,4 18,1 0 c# Arama bulundu 76,5 43,8 0 0 Arama bulunamadı 76,5 43,8 160,5 0

88 Geçen Süre ms Arama bulundu int Elemanlı Koleksiyonların Aranması Arama bulunamadı Arama bulundu java c# Arama bulunamadı Arraylist Linkedlist Stack HashSet Şekil 4.9. Java ve C# koleksiyonlarının arama performansları Şekil 4.9. incelendiğinde programlama dillerinde elemanın bulunup bulunmaması performansta pek bir değişiklik göstermemiştir. Aranan eleman bütün uygulamalarda en son eleman için gerçekleştirilmiştir. En baştaki eleman için işlem yapıldığında neredeyse 0 ms'de işlem yapılmıştır. En büyük performans farkı C# programında Stack koleksiyonunda gözlemlenmiştir. Var olan eleman 0 ms'de bulunurken olmayan eleman yaklaşık 160 ms'de bulunmuştur.

89 Geçen Süre ms Koleksiyonlarda silme performans karşılaştırması Silme işlemi integer elemanlı ArrayList, LinkedList, Stack ve HashSet koleksiyonları arasında gerçekleştirilmiştir. Silme işlemi için Remove() metodu kullanılmıştır. Koleksiyonları oluşturan elemanlar random nesnesi ile üretilen 0 ile sayı arasından eklenmiştir. Arama işleminin ilk üç denemesi sayılmayıp uygulama 10 defa tekrarlandıktan sonra bulunan sonuçların ortalamaları alınmıştır. C# koleksiyonları arasından Stack koleksiyonunda Remove() metodu olmadığından silme işlemi için Pop() metodu kullanılmıştır. Sağlıklı sonuçların elde edilebilmesi için Stack koleksiyonunda silme işlemi için geçen süre karşılaştırmaya dahil edilmemiştir. Çizelge Java ve C# koleksiyonların silme performansları Program Eleman sayısı İşlem Arraylist Linkedlist Stack HashSet java Silme 23,5 107, c# Silme 59,1 31, int Elemanlı Koleksiyonların Silinmesi Arraylist 40 Linkedlist 20 Stack 0 Silme Silme HashSet java c# Şekil Java ve C# koleksiyonlarının silme performansları

90 75 Silme ve arama işlemlerinde aranan yada silinen elemanın en sonda olmasına dikkat edilmiştir. Bu saye de oluşacak en kötü ihtimal bulunmuştur. HashSet koleksiyonu her iki programlama dili için de en iyi performansı göstermiştir. Aranan yada silinen elemanın konumuna bakılmaksızın işlemi 0 ms'de gerçekleştirmiştir. Java programlama dilinde LinkedList koleksiyonu en kötü performansı göstermiştir. C#'ta ise en kötü performansı ArrayList koleksiyonu göstermiştir. Çizelge Java ve C# koleksiyonlarının süre bazında karşılaştırılması Program Eleman Sayısı İşlem Arraylist Linkedlist Stack HashSet java Sıralama Eleman ekleme 15,67 18,14 33,29 24, Arama bulundu 56 43,5 17,7 0 Arama bulunamadı 63,3 97,4 18, Silme 23,5 107, c# Sıralama 618 yok yok Yok Eleman ekleme 73,58 120,09 75,07 30, Arama bulundu 76,5 43,8 0 0 Arama bulunamadı 76,5 43,8 160, Silme 59,1 31,2 yok 0 Çizelge Java ve C# koleksiyonlarında integer tipinde elemanlar üzerinde yapılan eleman arama, sıralama, ekleme ve silme işlemlerini göstermiştir.

91 76 5. SONUÇ Java koleksiyonları (Arraylist, LinkedList, Stack, HashSet) kendi aralarında karşılaştırıldığında, çalışma süresi açısından en maliyetlisinin LinkedList koleksiyonu olduğu görünmüştür. HashSet koleksiyonu sıralama algoritmasında kötü bir performans göstermiş olsa da genel olarak bakıldığında hem tükettiği bellek açısından hem de geçen süre bakımından iyi bir performans sergilemiştir. C# koleksiyonları (Arraylist, LinkedList, Stack, HashTable) kendi aralarında karşılaştırıldığında, yine en iyi performansı HashSet koleksiyonu sergilemiştir. Koleksiyona eleman eklerken ArrayList iyi bir performans sergilerken arama ve silme uygulamalarında HashSet'ten sonra LinkedList koleksiyonu iyi bir performans sergilemiştir. C# koleksiyonlarına bir bütün olarak bakıldığında geçen süre açısından ArrayList en kötü performansı göstermiştir. Kullanılan bellek açısından bakıldığında en maliyetlisinin LinkedList koleksiyonu olduğu görülmüştür. Java ve C# koleksiyonları karşılaştırıldığında, koleksiyonlara eleman eklerken geçen ortalama süre C#'ta daha fazla olduğu görülmüştür. C#'taki Arraylist koleksiyonu Java'daki Arraylist koleksiyonundan yaklaşık olarak 5 kat daha uzun bir sürede ekleme işlemi yaparken, LinkedList koleksiyonunda bu 6 kat, Stack koleksiyonunda 2 kat daha uzun bir sürede gerçekleştirdiği görülmüştür. Koleksiyonlara eleman eklenirken kullanılan bellek açısından koleksiyonlar incelendiğinde durum tersine dönmüştür. C# koleksiyonlarına eleman eklenirken kullanılan belleğin Java'daki koleksiyonlardan daha az bellek tükettiği görülmüştür. C# koleksiyonları java koleksiyonlarından bellek tüketimi açısından daha avantajlı olduğu sonucuna varılmıştır. Her iki programlama dilinin koleksiyonlarına bakıldığında arama, silme ve ekleme işlemlerinde en uygun koleksiyon seçiminin HashSet olduğu görülmüştür.

92 77 Java ve C# programlama dillerine baktığımızda yaptığımız deneyler bize şu sonucu göstermektedir; C# koleksiyonlara eleman eklerken daha uzun sürede yapsa bile kullandığı bellek daha azdır. Geçen ortalama süre Java'da daha iyi iken kullanılan bellek açısından C# daha iyidir. C# ve java programlama dillerinin kullandığı süre ve bellek kullanımları ilişkisini gösteren regresyon eğrisine baktığımızda, süreyle birlikte belli bir bellek kullanımı söz konusudur. Yalnız eklenen eleman sayısı sabit tutulduğunda, ekleme süresi artsa bile kullanılan bellek sabit kalma eğilimi göstermektedir.

93 78 KAYNAKLAR 1. İnternet: Sun Microsystems "Java Programming Language World Wide Web Site" (2013). 2. Algan, S., "Her Yönüyle C# 4.0", Pusula, İstanbul, (2011). 3. Şahin, M., "Java, python ve ruby dillerinin performans karşılaştırması", Akademik Bilişim, 1-5 (2007). 4. Wentworth, S., Langan, D., Hain, T. F., "An empirical analysis of the java collections framework versus the c++ standard template library," 1st Annual ACM Southeast Conference Savannah, Georgia, March 7 8 ( 2003). 5. Prechelt L., An empirical comparison of seven programming languages, Computer, 33, 10, 23 29, ISSN , doi: / (2000). 6. Cesarini F., Pappalardo, V. and Santoro, C., "A comparative evaluation of imperative and functional implementations of the imap protocol", 7th ACMSIGPLAN workshop on ERLANG 08, ACM, New York, NY, USA, ISBN , 29 40, doi: / (2008). 7. Geyer-Schulz, A., Stein, M., "A comparison of five programming languages in a graph clustering scenario", Journal of Universal Computer Science, vol. 19, no. 3 (2013) 8. Collins, W. J., "Data Structures And The Java Collections Framework", McGrawHill, USA (2005). 9. Flanagan, D., "Java collection framework, in java in a nutshell." O'Relly, Avustralya, p. chapter 23 (1999). 10. Schildt, H., "Java SE 6", 1st ed., Selçuk Tüzel, Ed. İstanbul, Turkey: Alfa (2007). 11. Karaçay, T., "Java Veri Yapıları (Collection Framework)", Pusula, İstanbul (2011). 12. İnternet: MSDN ".Net Framework 4.5" hh425099(v=vs.110).aspx (2013). 13. Internet: ".Net Framework: Collections And Generics" (2011).

94 Internet: " Basics of.net Collections in C# " (2008) 15. İnternet: Oracle "Java Tutorial," (2013) 16. İnternet: Oracle, Uses of Interface java.util.collection (2013). 17. Algan, S., " C# İle Asp.net ", Pusula, İstanbul, 1-13 (2011). 18. İnternet: ".Net Mimarisine Genel Bakış" (2013). 19. İnternet: "Java - Jre, Jvm, Jdk Nedir?" (2012). 20. İnternet: "JVM (Java Virtual Machine) Nedir? " http// (2012). 21. İnternet: Vikipedi, "Java Sanal Makinesi" (2013). 22. İnternet:bbbbb The Java Virtual Machine (2011). 23. İnternet: ".Net Mimarisi ve Çalışma Yapısı" (2011). 24. İnternet: ".Net Mimarisi ne Gene Bir Bakış" (2012). 25. İnternet: Blog "C# Clr, Cls, Msıl Nedir?" (2010). 26. İnternet: Microsoft Common Language Runtime Clr" ( 2013). 27. İnternet: Blog, "A Comparison Of Microsoft's C# Programming Language To Sun Microsystems' Java Programming Language" ( 2013).

95 Çölkesen, R., "Veri Yapıları ve Algoritmalar", Papatya, İstanbul (2007). 29. İnternet: Blog "Java Performance - Memory And Runtime Analysis - Tutorial" (2013). 30. Singer, J., " JVM versus CLR: A Comparative Study", University of Cambridge Computer Laboratory, Cambridge, CB3 0FD, UK, 1-3, (2003). 31. Singh, P., Sharma, D., Agrawal, S., "By Performance Metrics Analysis of CLR & JVM A Survey ", International Journal of Computer Trends and Technology, 1-4, July to Aug Issue (2011).

96 EKLER 81

97 82 EKLER EK-1. Java collections sınıfının önemli metotları public class Collections { // No Constructor // Public Constants public static final java.util.list EMPTY_LIST ; public static final Map EMPTY_MAP ; public static final Set EMPTY_SET ; // Public Class Methods public static int binarysearch (java.util.list list, Object key); public static int binarysearch (java.util.list list, Object key, Comparator c); public static void copy (java.util.list dest, java.util.list src); public static Enumeration enumeration (Collection c); public static void fill (java.util.list list, Object o); public static Object max (Collection coll); public static Object max (Collection coll, Comparator comp); public static Object min (Collection coll); public static Object min (Collection coll, Comparator comp); public static java.util.list ncopies (int n, Object o); public static void reverse (java.util.list l); public static Comparator reverseorder (); public static void shuffle (java.util.list list); public static void shuffle (java.util.list list, Random rnd); public static Set singleton (Object o); public static java.util.list singletonlist (Object o); public static Map singletonmap (Object key, Object value); public static void sort (java.util.list list);

98 83 EK-1 (Devam) Java collections sınıfının önemli metotları public static void sort (java.util.list list, Comparator c); public static Collection synchronizedcollection (Collection c); public static java.util.list synchronizedlist (java.util.list list); public static Map synchronizedmap (Map m); public static Set synchronizedset (Set s); public static SortedMap synchronizedsortedmap (SortedMap m); public static SortedSet synchronizedsortedset (SortedSet s); public static Collection unmodifiablecollection (Collection c); public static java.util.list unmodifiablelist (java.util.list list); public static Map unmodifiablemap (Map m); public static Set unmodifiableset (Set s); public static SortedMap unmodifiablesortedmap (SortedMap m); public static SortedSet unmodifiablesortedset (SortedSet s); } [2]

99 84 EK-2. System.Object sınıfının metotları, özellikleri ve örnek uygulamaları Statik Metod object.equals(object obja, object objb) Bu metot true yada false döndürür. Eğer obja ile objb nin referansları aynı yada null değerleri varsa true döndürür. Aksi taktirde false döndürür. Örnek 1. int n1 = 2; int n2 = 3; bool result1 = object.equals(n1, n2); // false döndürür. çünkü n1 & n2 değer tipi // ve bir değer tipiyle karşılatırılmalı. string s1 = "test"; string s2 = "test"; bool result2 = object.equals(s1, s2); //true döndürür. s1 & s2 //referans tipidir. Fakat Equals(object obj)metodu string sınıfından türeyen bir nesne sınıfının metodudur. Peki neden true döndürüyor Çünkü s1 ve s2 değerleri ile karşılatırılıyorlar. object obj1 = new Person(1, "Test1"); object obj2 = new Person(1, "Test1"); bool result3 = object.equals(obj1, obj2); // false döndürür. obj1 ve obj2 reference tipidir. Metot Equals(object obj) İki string değeri karşılaştırır. Örnek 2. string s1 = "Test"; string s2 = "Test"; bool result1 = s1.equals(s2); // true döndürür. Çünkü s1 & s2 aynı değere sahip.

100 85 EK-2 (Devam) System.Object sınıfının metotları, özellikleri ve örnek uygulamaları object obj1 = new Person(1, "Test1"); object obj2 = new Person(1, "Test1"); object obj3 = obj1; bool result2 = obj1.equals(obj2); // false döndürür. // Çünkü obj1 & obj2 farklı nesneler. bool result3 = obj1.equals(obj3); // true döndürür. Çünkü obj1 & obj3 aynı nesneler. GetHashCode() Geçerli nesnenin HashCode nu verir. Türeyen sınıf tarafından overide edilir. Örnek 3. object obj1 = 4; object obj2 = "Test"; object obj3 = new Person(1, "Test1"); int result1 = obj1.gethashcode(); // 4 döndürür. int result2 = obj2.gethashcode(); // döndürür. int result3 = obj3.gethashcode(); // döndürür. GetType() Geçerli değerin tipini verir. Örnek 4. object obj1 = 4; object obj2 = "Test"; object obj3 = new Person(1, "Test1"); string type1 = obj1.gettype().tostring(); // System.Int32 döndürür string type2 = obj2.gettype().tostring(); // System.String döndürür. string type3 = obj3.gettype().tostring(); // DotNetCollections döndürür. // CollectionExp.Person.

101 86 EK-2 (Devam) System.Object sınıfının metotları, özellikleri ve örnek uygulamaları ToString() Değerleri string tipine çevirir. Örnek 5. object obj1 = 4; object obj2 = "Test"; object obj3 = new Person(1, "Test1"); string s1 = obj1.tostring(); // 4 döndürür. string s2 = obj2.tostring(); // Test döndürür. string s3 = obj3.tostring(); // DotNetCollections döndürür

102 87 EK-3. System.Collections.IEnumerable arayüzünün metotları, özellikleri ve örnek bbbbbbuygulamaları [4]. Methods GetEnumerator() Örnek 6. Array array = new int[] { 12, 24, 26, 35, 40, 59 }; IEnumerator ienum = array.getenumerator(); string msg = ""; while (ienum.movenext()) { int n = (int)ienum.current; msg += n.tostring() + "\n"; } MessageBox.Show(msg);

103 88 EK-4. System.Collections.ICollection arayüzünün metotları, özellikleri ve örnek bbbbbbuygulamaları [4]. Özellikler Count Eleman sayısını döndürür. Örnek 7. // Array List ArrayList sourcelist = new ArrayList(); sourcelist.add(10); sourcelist.add(20); sourcelist.add(30); int count = sourcelist.count; // count = 3. IsSynchronized Erişilen ICollection senkronize edilmişse true döndürür. SyncRoot Bir nesne döndürür. Örnek 8. ArrayList sourcelist = new ArrayList(); sourcelist.add(10); sourcelist.add(20); sourcelist.add(30); lock (sourcelist.syncroot) { string list = string.empty; foreach (object value in sourcelist) { if (list.length > 0)

104 89 EK-4 (Devam) System.Collections.ICollection arayüzünün metotları, özellikleri ve bbbbbörnek uygulamaları [4]. list += ", "; list += value.tostring(); } MessageBox.Show(list); } Methods CopyTo(Array array, int index) Örnek 9. // int tipindeki diziyi başka bir int tipindeki diziye kopyalar int[] sourceids = new int[] { 1, 2, 3, 4, 5 }; int[] destinationids = new int[sourceids.length]; sourceids.copyto(destinationids, 0); // destinationids = 1, 2, 3, 4, 5 ArrayList sourcelist = new ArrayList(); sourcelist.add(10); sourcelist.add(20); sourcelist.add(30); int[] destinationlist = new int[5]; destinationlist[0] = 1; destinationlist[1] = 5; sourcelist.copyto(destinationlist, 2); // 2. Indexten balayıp kopyalar.

105 90 EK-5. System.Collections.IList arayüzünün metotları, özellikleri ve örnek bbbbbbbuygulamaları [4] Özellikler IsFixedSize Eğer sabit bir boyuta sahipse true döndürür. Örnek 10. ArrayList arraylist = new ArrayList(); bool isfixedsize = arraylist.isfixedsize; // false, Çünkü ArrayList // sabit boyutlu değil IsReadOnly Sadece okunabilirse true döndürür. Örnek 11. ArrayList arraylist = new ArrayList(); arraylist.add(1); arraylist.add(2); arraylist.add(3); bool readonly = arraylist.isreadonly; // false, çünkü default array // list sadece okunabilir değil // var olan listeden sadece okunailir bir liste oluşturuluyor. ArrayList readonlylist = ArrayList.ReadOnly(arrayList); bool isnewlistreadonly = readonlylist.isreadonly; // true kullanıcı bunu // değiştiremez. Methods Add(object value) Iliste eleman ekler Örnek 12. ArrayList arraylist = new ArrayList(); arraylist.add(1); // 1. Elemanı ekler.

106 91 EK-5 (Devam) System.Collections.IList arayüzünün metotları, özellikleri ve örnek bbbbbbuygulamaları [4] arraylist.add(2); // 2. Elemanı ekler. arraylist.add(3); // 3. Elemanı ekler. Clear() Ilisten bütün elemanları siler. Örnek 13. ArrayList arraylist = new ArrayList(); arraylist.add(1); arraylist.add(2); arraylist.add(3); int itemscount = arraylist.count; // 3 arraylist.clear(); itemscount = arraylist.count; // 0 Contains(object value) Ilistin herhangi bir elemana sahip olup olmadığını bulur sahipse true değilse false döndürür. Örnek 14. ArrayList arraylist = new ArrayList(); arraylist.add(new Person(1,"test")); Person person1 = new Person(1, "test"); Person person2 = new Person(2, "test2"); bool result1 = arraylist.contains(person1); // true bool result2 = arraylist.contains(person2); // false IndexOf(object value) Ilist teki elemanın index numarasını verir. Bu metot ayrıca Equals ve CompareTo metotlarını kullanır. Örnek 15. ArrayList arraylist = new ArrayList();

107 92 EK-5 (Devam) System.Collections.IList arayüzünün metotları, özellikleri ve örnek bbbbbuygulamaları [4] arraylist.add(new Person(1, "test1")); arraylist.add(new Person(2, "test2")); arraylist.add(new Person(3, "test3")); // yeni nesne yarat Person person3 = new Person(3, "test3"); Person person4 = new Person(4, "test4"); int result1 = arraylist.indexof(person3); // 2, int result2 = arraylist.indexof(person4); // -1. Çünkü listede yok Insert(int index, object value) Iliste belirli index numarası ile eleman ekleyen metottur. Ilist boş ise yada eleman sayısından büyük bir index numarası ile araya eleman eklemek istenirse ArgumentOutOfRangeException hatayı fırlatır. Aynı şekilde sadece okunabilir yada sabit boyutlu bir Iliste eleman eklendiğinde NotSupportedException hatası fırlatılır. Örnek 16. ArrayList arraylist = new ArrayList(); arraylist.add(new Person(1, "test1")); arraylist.add(new Person(2, "test2")); arraylist.add(new Person(3, "test3")); // yeni bir nesne yaratılıyor Person person =new Person(4, "test4"); // elemanı 2. Indexe sıkıtır arraylist.insert(2, person); Remove(object value) Ilisten eleman silmeye yarayan metottur. Örnek 17. ArrayList arraylist = new ArrayList(); arraylist.add(new Person(1, "test1"));

108 93 EK-6. System.Collections.IDictionary arayüzünün metotları, özellikleri ve örnek uygulamaları [4]. arraylist.add(new Person(2, "test2")); arraylist.add(new Person(3, "test3")); arraylist.removeat(1); IDictionary koleksiyonları anahtar değer ikilisi olarak sunar. Özellikler IsFixedSize Eğer IDictionary nesnesi sabit boyutlu ise true döndürür. Örnek 18. Hashtable hashlist = new Hashtable(); hashlist.add(1, "item#1"); hashlist.add(2, "item#2"); hashlist.add(3, "item#3"); bool result = hashlist.isfixedsize; // false IsReadOnly Eğer IDictionary nesnesi salt okunur ise true döndürür. Örnek 19. Hashtable hashlist = new Hashtable(); hashlist.add(1, "item#1"); hashlist.add(2, "item#2"); hashlist.add(3, "item#3"); bool result = hashlist.isreadonly; Keys IDictionary nesne anahtarları içeren ıcollection nesnesini döndürür. Örnek 20.

109 94 EK-6 (Devam) System.Collections.IDictionary arayüzünün metotları, özellikleri ve örnek uygulamaları [4]. Hashtable hashlist = new Hashtable(); hashlist.add(1, "item#1"); hashlist.add(2, "item#2"); hashlist.add(3, "item#3"); ICollection keys = hashlist.keys; string[] strkeys = new string[keys.count]; int index =0; foreach (int key in keys) { strkeys[index++] = key.tostring(); } string keyslist = string.join(", ",strkeys); // 3, 2, 1 Values IDictionary nesne değerini içeren ıcollection nesnesini döndürür. Örnek 21. Hashtable hashlist = new Hashtable(); hashlist.add(1, "item#1"); hashlist.add(2, "item#2"); hashlist.add(3, "item#3"); ICollection values = hashlist.values; string[] strvalues = new string[values.count]; int index = 0; foreach (string value in values) { strvalues[index++] = value; } string valuelist = string.join(", ", strvalues); //item#1, item#2, item#3 Methods

110 95 EK-6 (Devam) System.Collections.IDictionary arayüzünün metotları, özellikleri ve örnek uygulamaları [4]. Add(object key, object value) I Dictionary belirli bir değer ve anahtara sahip eleman ekler. Örnek 22. Hashtable hashlist = new Hashtable(); hashlist.add(1, "item#1"); hashlist.add(2, "item#2"); hashlist.add(3, "item#3"); Clear() IDictionary nesnesinden bütün elemanları siler. Örnek 23. Hashtable hashlist = new Hashtable(); hashlist.add(1, "item#1"); hashlist.add(2, "item#2"); hashlist.add(3, "item#3"); hashlist.clear(); // it removes all item from the list. Contains(object key) Eğer IDictionary nesnesinde belirli anahtardaki bir eleman varsa true döndürür. Örnek 24. Hashtable hashlist = new Hashtable(); hashlist.add(1, "item#1"); hashlist.add(2, "item#2"); hashlist.add(3, "item#3"); bool result = hashlist.contains(1); // true GetEnumerator()

111 96 EK-6 (Devam) System.Collections.IDictionary arayüzünün metotları, özellikleri ve bbbbbörnek uygulamaları [4]. IDictionary nesnesi için bir IDictionaryEnumerator nesnesi üretir. Örnek 25. Hashtable hashlist = new Hashtable(); hashlist.add(1, "item#1"); hashlist.add(2, "item#2"); hashlist.add(3, "item#3"); IDictionaryEnumerator dicenum = hashlist.getenumerator(); string items = string.empty; while (dicenum.movenext()) { items += string.format("{0} : {1}\n", dicenum.key, dicenum.value); } MessageBox.Show(items); Remove(object key) IDictionary nesnesinden belirli anahtara sahip nesneyi siler. Örnek 26. Hashtable hashlist = new Hashtable(); hashlist.add(1, "item#1"); hashlist.add(2, "item#2"); hashlist.add(3, "item#3"); hashlist.remove(2); // anahtar numarası 2 olan nesneyi siler[4].

112 97 EK-7. C# ve java programlama dillerinde uygulama kodları throw exception C# codu using System; using System.IO; class MyException: Exception{ public MyException(string message): base(message){ } public MyException(string message, Exception innerexception): base(message, innerexception){ } } public class ExceptionTest { static void DoStuff(){ throw new FileNotFoundException(); } public static void Main(string[] args){ try{ try{ DoStuff(); return; //won't get to execute }catch(ioexception ioe){ /* parent of FileNotFoundException */ throw new MyException("MyException occured", ioe); /* rethrow new exception with inner exception specified */ } }finally{ Console.WriteLine("***Finally block executes even though MyException not caught***"); } }//Main(string[]) } // ExceptionTest

113 98 EK-7 (Devam) C# ve java programlama dillerinde uygulama kodları throw exception Java kodu class MyException extends Exception{ public MyException(String message){ super(message); } public MyException(String message, Exception innerexception){ super(message, innerexception); } } public class ExceptionTest { static void dostuff(){ throw new ArithmeticException(); } public static void main(string[] args) throws Exception{ try{ try{ dostuff(); return; //won't get to execute }catch(runtimeexception re){ /* parent of ArithmeticException */ throw new MyException("MyException occured", re); /* rethrow new exception with cause specified */ } }finally{ System.out.println("***Finally block executes even though MyException not caught***"); } }//main(string[]) } // ExceptionTest

114 99 EK-8. Tanımlanmış ve static kurucularda üye başlatılması C# ve Java kodu using System; class StaticInitTest{ string instmember = InitInstance(); string stamember = InitStatic(); StaticInitTest(){ Console.WriteLine("In instance constructor"); } static StaticInitTest(){ Console.WriteLine("In static constructor"); } static String InitInstance(){ Console.WriteLine("Initializing instance variable"); return "instance"; } static String InitStatic(){ Console.WriteLine("Initializing static variable"); return "static"; } static void DoStuff(){ Console.WriteLine("Invoking static DoStuff() method"); } public static void Main(string[] args){ Console.WriteLine("Beginning main()"); StaticInitTest.DoStuff(); StaticInitTest sti = new StaticInitTest(); Console.WriteLine("Completed main()"); } }

115 100 EK-8 (Devam) Tanımlanmış ve static kurucularda üye başlatılması C# ve Java kodu Tanımlanmış ve static kurucularda üye başlatılması Java kodu class StaticInitTest{ String instmember = initinstance(); String stamember = initstatic(); StaticInitTest(){ System.out.println("In instance constructor"); } static{ System.out.println("In static constructor"); } static String initinstance(){ System.out.println("Initializing instance variable"); return "instance"; } static String initstatic(){ System.out.println("Initializing static variable"); return "static"; } static void dostuff(){ System.out.println("Invoking static DoStuff() method"); } public static void main(string[] args){ System.out.println("Beginning main()"); StaticInitTest.doStuff(); StaticInitTest sti = new StaticInitTest(); System.out.println("Completed main()"); }} Her iki örneğin Çıktısı: In static constructor

116 101 EK-8 (Devam) Tanımlanmış ve static kurucularda üye başlatılması C# ve Java kodu Beginning main() Invoking static DoStuff() method Initializing instance variable Initializing static variable In instance constructor 999pleted main()

117 102 EK-9. Boxing ve Unboxing boxing ve unboxing C# kodu using System; using System.Collections; //stack allocated structs also need to be boxed to be treated as objects struct Point{ //member fields private int x; private int y; public Point (int x, int y){ this.x = x; this.y = y; } public override string ToString(){ return String.Format("({0}, {1})", x, y); } }//Point class Test{ public static void PrintString(object o){ Console.WriteLine(o); } public static void Main(string[] args){ Point p = new Point(10, 15); ArrayList list = new ArrayList(); int z = 100; PrintString(p); //p boxed to object when passed to PrintString PrintString(z); //z boxed to object when passed to PrintString // integers and float boxed when stored in collection // therefore no need for Java-like wrapper classes list.add(1);

118 103 EK- 9 (Devam) Boxing ve Unboxing list.add(13.12); list.add(z); for(int i =0; i < list.count; i++) PrintString(list[i]); } } boxing ve unboxing Java kodu import java.util.*; class Test{ public static void PrintString(Object o){ System.out.println(o); } public static void PrintInt(int i){ System.out.println(i); } public static void main(string[] args){ Vector list = new Vector(); int z = 100; Integer x = new Integer(300); EK-2 (Devam) C# ve java programlama dillerinde uygulama kodları PrintString(z); //z boxed to object when passed to PrintString PrintInt(x); //x unboxed to int when passed to PrintInt // integers and float boxed when stored in collection // therefore no need for Java wrapper classes list.add(1); list.add(13.12);

119 104 list.add(z); for(int i =0; i < list.size(); i++) PrintString(list.elementAt(i)); }

120 105 Kişisel Bilgiler Soyadı, adı Uyruğu Doğum tarihi ve yeri Medeni hali ÖZGEÇMİŞ : EBREN KARA, Şükran : T.C. : Cizre : Evli : [email protected] Eğitim Derece Birimi Mezuniyet Tarihi Lisans Mersin Üniversitesi 2007 Lise Şırnak Anadolu Lisesi 2002 İş Deneyimi Yıl Yer Görev Milli Eğitim Bakanlığı Bilgisayar Öğretmenliği Şırnak Üniversitesi Öğretim Görevlisi Hakkari Üniversitesi Öğretim Görevlisi Yabancı Dil İngilizce Hobiler Kitap Okumak, Ailem ile zaman geçirmek, müzik dinlemek

C# nedir,.net Framework nedir?

C# nedir,.net Framework nedir? 1 C# nedir,.net Framework nedir? C# nedir? C#, C/C++ ve Java dillerinde türetilmiş,bu dillerin dezavantajlarının elenip iyi yönlerinin alındığı, güçlü basit, esnek, tip-güvenli(typesafe,tür dönüşümlerindeki

Detaylı

I Java Veri Yapıları 1

I Java Veri Yapıları 1 İçindekiler Önsöz xix I Java Veri Yapıları 1 1 Giriş 3 1.1 Veri Nedir?............................... 3 1.2 Algoritma Nedir?............................ 4 1.3 Veri Yapıları..............................

Detaylı

2007-2008 Bahar. BM 211 Programlama Dilleri 3 1

2007-2008 Bahar. BM 211 Programlama Dilleri 3 1 Programlama Dilleri III 2007-2008 Bahar BM 211 Programlama Dilleri 3 1 Ders Hakkında Ders Sorumlusu Öğr.Gör. Bora UĞURLU Ders Slaytları İçin http://members.comu.edu.tr/boraugurlu/ Dersle İlgili İletişim

Detaylı

GÖRSEL PROGRAMLAMA - I 2013-2014

GÖRSEL PROGRAMLAMA - I 2013-2014 GÖRSEL PROGRAMLAMA - I 2013-2014 Ders Hakkında Ders Sorumlusu Öğr.Gör. Ekrem Eşref KILINÇ Dersle İlgili İletişim İçin [email protected] Neler Öğreneceğiz? Nesneye yönelik programla nedir? (Metot

Detaylı

BİLGİSAYAR PROGRAMLAMA (C#) DERS NOTU 1

BİLGİSAYAR PROGRAMLAMA (C#) DERS NOTU 1 BİLGİSAYAR PROGRAMLAMA (C#) DERS NOTU 1 Kaynaklar: Sefer Algan, Her Yönüyle C#, 6. Baskı, Pusula Yayıncılık. www.sharpnedir.com 1. DÜZEYLERİNE GÖRE BİLGİSAYAR DİLLERİ Script Dilleri Yüksek Düzeyli Diller

Detaylı

Windows Programlama Güz Dönemi

Windows Programlama Güz Dönemi Windows Programlama 2016-2017 Güz Dönemi C#, yeni bir programlama dili olup, iki açıdan önemlidir: Microsoft.NET Framework ü kullanabilmek üzere tasarlanıp geliştirilmiştir. Modern object-oriented metodolojileri

Detaylı

Java Temel Özellikleri

Java Temel Özellikleri Java Temel Özellikleri Java Programlama Dili Java programlama dili şu anda dünyadaki en popüler programlama dillerinden biri haline gelmiştir. Java SUN bilgisayar şirketince elektrikli ev aletlerinin birbiriyle

Detaylı

C# Eğitimi-1 (Giriş) Melih Hilmi Uludağ www.melihhilmiuludag.com

C# Eğitimi-1 (Giriş) Melih Hilmi Uludağ www.melihhilmiuludag.com C# Eğitimi-1 (Giriş) Melih Hilmi Uludağ www.melihhilmiuludag.com Nesne Yönelimli Programlama Nesne Yönelimli Programlama, 1990 lı yıllarda başlayan ve günümüzde de yoğun olarak kullanılan bir programlama

Detaylı

C # www.bilisimogretmeni.com

C # www.bilisimogretmeni.com C # 1 Neler Öğreneceğiz Nesneye yönelik programla nedir? (Metot nedir?, sınıf nedir?, nesne nedir?, nesneler nasıl tü retilir?...) Nesneye yönelik programlamanın üstünlükleri?.net teknolojisi nedir? Neleri

Detaylı

4. Bölüm Programlamaya Giriş

4. Bölüm Programlamaya Giriş 4. Bölüm Programlamaya Giriş Algoritma ve Programlamaya Giriş Dr. Serkan DİŞLİTAŞ 4.1. C# ile Program Geliştirme Net Framework, Microsoft firması tarafından açık internet protokolleri ve standartları

Detaylı

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

Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA PROGRAMLAMA DİLİ Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java Programlama Diline Giriş Java Platform Çeşitleri Java nın Kodlama ve Çalışma Adımları Java Derleyicisi, Java Yorumlayıcısı Java Çöp Toplayıcısı

Detaylı

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

Programlama Dilleri II. Bilgisayar ve Öğretim Teknolojileri Öğretmenliği Programlama Dilleri II Bilgisayar ve Öğretim Teknolojileri Öğretmenliği Ders Hakkında.NET, Ye n i Je n era syo n Inter n et in geliştirilmesi için gerekli ürün ve teknoloji platformudur. Bugün sayısal

Detaylı

HSancak Nesne Tabanlı Programlama I Ders Notları

HSancak Nesne Tabanlı Programlama I Ders Notları NESNE TABANLI PROGRAMLAMA Nesne Tabanlı Programlama Nedir? Nesne tabanlı programlamada esas olan, gerçek hayatta var olan olguların programlamaya aktarılmasındaki yeni yaklaşımdır. Klasik prosedürel programlamada

Detaylı

Görsel Programlama DERS 04. Görsel Programlama - Ders04/ 1

Görsel Programlama DERS 04. Görsel Programlama - Ders04/ 1 Görsel Programlama DERS 04 Görsel Programlama - Ders04/ 1 Diziler ve Kolleksiyonlar(Collections) Diziler aynı tipli değişkenleri tutmak için kullanılan veri yapılarıdır. Diziler sabit uzunlukludur. Birkez

Detaylı

1 C#.NET GELİŞTİRME ORTAMI 1 Visual Studio 2015 Arayüzü 4 Menu Window 6 Solution Explorer 7 Properties Window 8 Server Explorer 8 Toolbox 9

1 C#.NET GELİŞTİRME ORTAMI 1 Visual Studio 2015 Arayüzü 4 Menu Window 6 Solution Explorer 7 Properties Window 8 Server Explorer 8 Toolbox 9 VII 1 C#.NET GELİŞTİRME ORTAMI 1 Visual Studio 2015 Arayüzü 4 Menu Window 6 Solution Explorer 7 Properties Window 8 Server Explorer 8 Toolbox 9 2 KOD YAZMAYA BAŞLANGIÇ 11.Net Framework 11 Yeni Proje Oluşturmak

Detaylı

Android e Giriş. Öğr.Gör. Utku SOBUTAY

Android e Giriş. Öğr.Gör. Utku SOBUTAY Android e Giriş Öğr.Gör. Utku SOBUTAY Android İşletim Sistemi Hakkında 2 Google tarafından geliştirilmiştir. Dünyada en çok kullanılan mobil işletim sistemidir. 2018 itibariyle Dünyada Android; %78.65,

Detaylı

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

Görsel Programlama DERS 01. Görsel Programlama - Ders01/ 1 Görsel Programlama DERS 01 Görsel Programlama - Ders01/ 1 Takdim Planı Nesneye Dayalı Programlama Kavramı Nesne, Sınıf Kavramı Java Programlama Dili Java Programlama Dili Temel Özellikleri Java Sürümleri

Detaylı

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

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 1. Bölüm C# Programlamaya Giriş Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 1. Bölüm C# Programlamaya Giriş C Programlama Dr. Serkan DİŞLİTAŞ 1.1. C# ile Program Geliştirme.Net Framework, Microsoft firması tarafından

Detaylı

BBS515 Nesneye Yönelik Programlama. Ders 1 Zümra Kavafoğlu

BBS515 Nesneye Yönelik Programlama. Ders 1 Zümra Kavafoğlu BBS515 Nesneye Yönelik Programlama Ders 1 Zümra Kavafoğlu Dersin Amacı Nesneye Yönelik Programlama Kavramını Java Dili Üzerinden Öğrenmek Nesneye yönelik programlama ile ilgili nesne, sınıf, kalıtım, çok

Detaylı

Yazılım Mühendisliğine Giriş 4. Hafta 2016 GÜZ

Yazılım Mühendisliğine Giriş 4. Hafta 2016 GÜZ Yazılım Mühendisliğine Giriş 4. Hafta 2016 GÜZ 1 İkinci Kuşak Bilgisayarlar 1956-1963: Transistor Transistor 1947 yılında keşfedilmiştir. 50 li yılların sonuna kadar bilgisayarlarda yaygın kullanımı görülmez.

Detaylı

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ü

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ü 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ü Java Programlama Dili Java bayt kodları Java Sanal Makineleri üzerinde

Detaylı

Java Koleksiyonları (Java Collections)

Java Koleksiyonları (Java Collections) Java Koleksiyonları (Java Collections) Giriş Bu bölümde, java standart kütüphanesinde yer alan Collections topluluğunu ele alacağız. Amaçlar Bu dersin sonunda öğrenci şunları biliyor olacaktır: Java Collctions

Detaylı

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

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş Yard. Doç. Dr. Alper Kürşat Uysal Bilgisayar Mühendisliği Bölümü [email protected] Ders Web Sayfası: http://ceng.anadolu.edu.tr/ders.aspx?dersid=101

Detaylı

ASP.NET TEMELLERİ. Öğr. Gör. Emine TUNÇEL Kırklareli Üniversitesi Pınarhisar Meslek Yüksekokulu

ASP.NET TEMELLERİ. Öğr. Gör. Emine TUNÇEL Kırklareli Üniversitesi Pınarhisar Meslek Yüksekokulu ASP.NET TEMELLERİ Öğr. Gör. Emine TUNÇEL Kırklareli Üniversitesi Pınarhisar Meslek Yüksekokulu İnternet Nasıl Çalışır? Sunucu istemci modeline göre çalışır. Fiziksel olarak bu sistem genelde isteği yapan

Detaylı

Programlama Dillerinde Kullanılan Veri Tipleri

Programlama Dillerinde Kullanılan Veri Tipleri Programlama Dillerinde Kullanılan Veri Tipleri Taban/Biçim Basic Paskal C/C++/C#/Java 10 (Decimal ) - - - 16 (Hexadecimal) &hsayı veya &Hsayı $sayı 0xsayı veya 0Xsayı Üstel eüs veya Eüs eüs veya Eüs eüs

Detaylı

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

Eclipse, Nesneler ve Java 2 Java Nereden Çıktı? 2 1 Eclipse, Nesneler ve Java 2 Java Nereden Çıktı? 2 Eclipse Mimarisi 4 Java Teknolojisine Genel Bir Bakış 6 Taşınabilirlik 6 Java Derleyicisi ve Bytecode 6 Java Sanal Makinası (Java Virtual Machine - JVM)

Detaylı

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

Dizi türündeki referanslar, dizi nesnelerine bağlanmaktadır. Dizi referansları tanımlamak bu dizinin hemen kullanılacağı anlamına gelmez... Javada Diziler Java da diziler nesnedir; içerisinde belirli sayıda eleman bulunur. Eğer bu sayı sıfır ise, dizi boş demektir. Dizinin içerisindeki elemanlara eksi olmayan bir tam sayı ile ifade edilen

Detaylı

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN Yrd. Doç. Dr. Caner ÖZCAN Diziler ile Pointer Arası İlişki Bir dizi adı sabit bir pointer gibi düşünülebilir. Diziler ile pointer lar yakından ilişkilidir. Pointer lar değişkenleri gösterdikleri gibi,

Detaylı

Nesneler için torbalar (Collections) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 12 1

Nesneler için torbalar (Collections) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 12 1 Nesneler için torbalar (Collections) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 12 1 NESNELER İÇİN TORBALAR Torbalar birden çok nesneyi aynı çatı altında toplamak için kullanılır. Bunun faydası

Detaylı

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

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

Detaylı

Program Nedir? Program, bir problemin çözümü için herhangi bir programlama dilinin kuralları ile oluşturulmuş komut kümesidir.

Program Nedir? Program, bir problemin çözümü için herhangi bir programlama dilinin kuralları ile oluşturulmuş komut kümesidir. PROGRAMLAMAYA GİRİŞ Program Nedir? Program, bir problemin çözümü için herhangi bir programlama dilinin kuralları ile oluşturulmuş komut kümesidir. C de yazılan bir programın çalışması için çoğunlukla aşağıdaki

Detaylı

Bölüm1. İlk Bilgiler ISBN 0-321-49362-1

Bölüm1. İlk Bilgiler ISBN 0-321-49362-1 Bölüm1 İlk Bilgiler ISBN 0-321-49362-1 Bölüm 1 Konuları Niye Programlama Dilleri prensiplerini öğreniyoruz? Programlama alanları Dil değerlendirme kriterleri Dit tasarımına etkiler Dil kategorileri Dil

Detaylı

Java 2 Standart Edition SDK Kurulum ve Java ya Giriş

Java 2 Standart Edition SDK Kurulum ve Java ya Giriş Kurulum için ilk önce Sun Microsystems in sitesinden uygun J2SE sürümünü indirin. Ben J2SE v1. 4. 2_16 Windows Installer paketini kullandım J2SE SDK Kurulumu aşağıdaki gibi başlayacaktır. 1 Kurulum tamamlandıktan

Detaylı

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 10. LINUX OS (Programlama) BİLGİ & İLETİŞİM TEKNOLOJİLERİ GENEL BAKIŞ

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 10. LINUX OS (Programlama) BİLGİ & İLETİŞİM TEKNOLOJİLERİ GENEL BAKIŞ Ders 10 LINUX OS (Programlama) BİLGİ & İLETİŞİM TEKNOLOJİLERİ GENEL BAKIŞ LINUX de Programlama LINUX işletim sistemi zengin bir programlama ortamı sağlar. Kullanıcılara sistemi geliştirme olanağı sağlar.

Detaylı

Sunum İçeriği. Programlamaya Giriş 22.03.2011

Sunum İçeriği. Programlamaya Giriş 22.03.2011 Programlamaya Giriş Nesne Tabanlı Programlamaya Giriş ve FONKSİYONLAR Sunum İçeriği Nesne Tabanlı Programlama Kavramı Fonksiyon tanımlama ve kullanma Formal Parametre nedir? Gerçel Parametre nedir? Fonksiyon

Detaylı

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ Java programlama dili, Java SUN bilgisayar şirketi tarafından 1991 yılında geliştiril Program bloklar halinde yazılır ve bloklar { } ile oluşturulur. Komutlar aynı satıra

Detaylı

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

Ders 4: Diziler (Arrays( Arrays) barisgokce.com Ders 4: Diziler (Arrays( Arrays) Hazırlayan : Öğr. Grv.. Barış GÖKÇE Đletişim im : www.barisgokce barisgokce.com Diziler Aynı tipteki bir veri gurubunun bir değişken içinde saklanmasıdır. Veriler Hafızada

Detaylı

BİL 458 Web Programlama dersi. Yrd. Doç. Dr. Murat YEŞİLYURT

BİL 458 Web Programlama dersi. Yrd. Doç. Dr. Murat YEŞİLYURT BİL 458 Web Programlama dersi Yrd. Doç. Dr. Murat YEŞİLYURT [email protected] ANA KAYNAK : ASP.NET Web Developer's GuideLee, Wei Meng Ortiz, Jonothon Garrett, Chris Syngress Publishing, ISBN:9781928994510

Detaylı

Akıllı telefonlar, avuçiçi bilgisayarlar ile taşınabilir (cep) telefonların özelliklerini birleştiren cihazlardır. Akıllı telefonlar kullanıcıların

Akıllı telefonlar, avuçiçi bilgisayarlar ile taşınabilir (cep) telefonların özelliklerini birleştiren cihazlardır. Akıllı telefonlar kullanıcıların Akıllı telefonlar, avuçiçi bilgisayarlar ile taşınabilir (cep) telefonların özelliklerini birleştiren cihazlardır. Akıllı telefonlar kullanıcıların bilgilerini saklamalarına, program yüklemelerine izin

Detaylı

1.1. Yazılım Geliştirme Süreci

1.1. Yazılım Geliştirme Süreci Kazanımlar Bu bolümde; Yazılım geliştirme sureci konusunda bilgi sahibi olacak, Yazılım geliştirme surecinde gerekli olan araçları tanıyacak, Python dilinde program geliştirme ortamlarını inceleyebileceksiniz.

Detaylı

Kılgılayan Sınıflar: AbstractMap, Attributes, HashMap, Hashtable, IdentityHashMap, RenderingHints, TreeMap, WeakHashMap

Kılgılayan Sınıflar: AbstractMap, Attributes, HashMap, Hashtable, IdentityHashMap, RenderingHints, TreeMap, WeakHashMap Map Arayu zu java.util Interface Map Altarayüzleri: SortedMap Kılgılayan Sınıflar: AbstractMap, Attributes, HashMap, Hashtable, IdentityHashMap, RenderingHints, TreeMap, WeakHashMap Map, Java Collections

Detaylı

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

Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java da Fonksiyon Tanımlamak Java da Döngüler Java da Şart İfadeleri Uygulamalar Java da Fonksiyon Tanımlamak JAVA DA FONKSİYON TANIMLAMAK 4 Fonksiyonlar;

Detaylı

Programlama Dilleri 3

Programlama Dilleri 3 Diziler (Arrays) 1 Dizi Kavramı Bellekte ard arda yer alan aynı türden nesneler kümesine dizi (array) denilir. Bir dizi içerisindeki bütün elemanlara aynı isimle ulaşılır. Yani dizideki bütün elemanların

Detaylı

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-3 İşaretçiler (Pointer) (Kısım-2)

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-3 İşaretçiler (Pointer) (Kısım-2) BLM-112 PROGRAMLAMA DİLLERİ II Ders-3 İşaretçiler (Pointer) (Kısım-2) Yrd. Doç. Dr. Ümit ATİLA [email protected] http://web.karabuk.edu.tr/umitatilla/ Dinamik Bellek Yönetimi Bir program çalıştırıldığında

Detaylı

Bilgisayarda Programlama. Temel Kavramlar

Bilgisayarda Programlama. Temel Kavramlar Bilgisayarda Programlama Temel Kavramlar KAVRAMLAR Programlama, yaşadığımız gerçek dünyadaki problemlere ilişkin çözümlerin bilgisayarın anlayabileceği bir biçime dönüştürülmesi / ifade edilmesidir. Bunu

Detaylı

Program Nedir?(1) Programlamaya Giriş

Program Nedir?(1) Programlamaya Giriş Programlamaya Giriş Arş. Gör. Muhammet BAYKARA Program Nedir?(1) Bir program bilgisayara ne yapması gerektiğini söyleyen bir dizi komuttur. Bilgisayarlar işlemlerin kendi anlayacağı dilde (makine dili)

Detaylı

HSancak Nesne Tabanlı Programlama I Ders Notları

HSancak Nesne Tabanlı Programlama I Ders Notları DİZİLER Bellekte ard arda yer alan aynı türden nesneler kümesine dizi (array) denilir. Bir dizi içerisindeki bütün elemanlara aynı isimle ulaşılır. Yani dizideki bütün elemanların isimleri ortaktır. Elemanlar

Detaylı

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.

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. 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. [10 puan] int param = 30; int result = 300; if (param > 45) result

Detaylı

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN Yrd. Doç. Dr. Caner ÖZCAN Fonksiyonu Referans ile Çağırma (Call by Reference) Bir fonksiyona gönderilen parametrenin normalde değeri değişmez. Fonksiyon içinde yapılan işlemlerin hiçbiri argüman değişkeni

Detaylı

Binary Search. (Yarılama) Bölüm Dizide Bir Öğe Arama

Binary Search. (Yarılama) Bölüm Dizide Bir Öğe Arama Bölüm 39 Binary Search (Yarılama) 39.1 Dizide Bir Öğe Arama İkil aramayı (yarılama yöntemi) sıralı veri kümelerinde sık sık kullanırız. Örneğin, sözlükte bir sözcüğü ararken, sözlüğün bütün sayfalarını

Detaylı

Koleksiyonlar (Collections)

Koleksiyonlar (Collections) Koleksiyonlar (Collections) Bazı Başlıklar Koleksiyon arayüzleri ve türler Listeler (List) Kuyruklar (Queues) Yığınlar (Stacks) Bağlı Listeler (Linked Lists) Sıralı Listeler (Sorted Lists) Sözlükler (Dictionaries)

Detaylı

Kepware Veritabanı Ürünleri. Teknolojiye Genel Bir Bakış

Kepware Veritabanı Ürünleri. Teknolojiye Genel Bir Bakış Kepware Veritabanı Ürünleri Teknolojiye Genel Bir Bakış Gündem Veritabanı Client API teknolojisinin gözden geçirilmesi ODBC istemci sürücüsü- bir KEPServerEX Plug-In Haberleşme Sürücüsüdür. DataLogger-

Detaylı

BİLGİSAYAR PROGRAMLAMAYA GİRİŞ

BİLGİSAYAR PROGRAMLAMAYA GİRİŞ BİLGİSAYAR PROGRAMLAMAYA GİRİŞ Yrd.Doç.Dr.Caner KOÇ Ankara Üniversitesi Ziraat Fakültesi Tarım Makinaları ve Teknolojileri Mühendisliği Bölümü [email protected] DERS KAYNAKLARI 1. A. Kadir GÜNEYTEPE:

Detaylı

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

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism ) Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism ) BBS-515 Nesneye Yönelik Programlama Ders #9 (16 Aralık 2009) Geçen ders: Java Applet lerde bileşen yerleştirme türleri ( applet layouts

Detaylı

Şablon Türler (Generics)

Şablon Türler (Generics) Şablon Türler (Generics) CLR 1.0 da çalışma zamanında belli olmayan sınıfları kullanan esnek sınıf ve metotlar, Object sınıfı temel alınarak oluşturulması gerekmekteydi. CLR 2.0 dan itibaren Generic lerin

Detaylı

PROGRAMLAMA TEMELLERİ

PROGRAMLAMA TEMELLERİ PROGRAMLAMA TEMELLERİ 2.HAFTA Yazılım Yazılım, elektronik aygıtların belirli bir işi yapmasını sağlayan programların tümüne verilen isimdir. Bir başka deyişle var olan bir problemi çözmek amacıyla bilgisayar

Detaylı

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 7. LINUX OS (Sistem Yapısı) BİLGİ & İLETİŞİM TEKNOLOJİLERİ. LINUX Yapısı

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 7. LINUX OS (Sistem Yapısı) BİLGİ & İLETİŞİM TEKNOLOJİLERİ. LINUX Yapısı Ders 7 LINUX OS (Sistem Yapısı) BİLGİ & İLETİŞİM TEKNOLOJİLERİ 1 LINUX Yapısı LINUX işletim sisteminin diğer işletim sistemleri gibi kendine özgü bir yapısı vardır. LINUX yapısı ve bileşenleri aşağıdaki

Detaylı

Lambda İfadeleri (Lambda Expressions)

Lambda İfadeleri (Lambda Expressions) Lambda İfadeleri (Lambda Expressions) Lambda İfadeleri, değişkenlere değer atamak için kullanılan sadeleştirilmiş anonim (isimsiz) fonksiyonlardır. Bu fonksiyonlar matematikteki ve bilgisayar bilimlerindeki

Detaylı

İÇ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

İÇ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 JAVA KODLAMAYA GİRİŞ Öğr. Gör. Utku SOBUTAY İÇ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 Programı

Detaylı

Dr. Fatih AY Tel: 0 388 225 22 55 [email protected] www.fatihay.net

Dr. Fatih AY Tel: 0 388 225 22 55 fatihay@fatihay.net www.fatihay.net Bilgisayar Programlama Ders 1 Dr. Fatih AY Tel: 0 388 225 22 55 [email protected] www.fatihay.net Bilgisayar Programlamaya C ile Programlamaya Yazılım: Bilgisayarın işlemler yapması ve karar vermesi

Detaylı

YZM 2116 Veri Yapıları

YZM 2116 Veri Yapıları YZM 2116 Veri Yapıları Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği BAŞLAMADAN ÖNCE Bu dersi alan öğrencilerin aşağıdaki konuları bildiği

Detaylı

Google Web Toolkit ile Öğretim Elemanı Otomasyon Sistemi

Google Web Toolkit ile Öğretim Elemanı Otomasyon Sistemi Google Web Toolkit ile Öğretim Elemanı Otomasyon Sistemi Mehmet Karakoç Akdeniz Üniversitesi Bilgisayar Bilimleri Araştırma ve Uygulama Merkezi 28.11.2014 inet-tr'14 : GWT AUFaculty Project 1 İçerik Giriş

Detaylı

Veritabanı İşlemleri

Veritabanı İşlemleri Veritabanı İşlemleri Bu bölümde; Veritabanı bağlantısı Komutların Yürütülmesi ADO.NET Nesne Modeli kavramları incelenecektir. ADO.NET (ActiveX Data Objects) ADO.NET, var olan Windows API lerinden çok daha

Detaylı

FONKSİYONLAR. Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır.

FONKSİYONLAR. Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır. C PROGRAMLAMA FONKSİYONLAR Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır. Daha büyük programlar yazmanın en kolay yolu onları küçük parçalar halinde yazıp sonra

Detaylı

Lecture 11: Generics

Lecture 11: Generics 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

Detaylı

Yazılım Mühendisliği 1

Yazılım Mühendisliği 1 Yazılım Mühendisliği 1 HEDEFLER Yazılım, program ve algoritma kavramları anlar. Yazılım ve donanım maliyetlerinin zamansal değişimlerini ve nedenleri hakkında yorum yapar. Yazılım mühendisliği ile Bilgisayar

Detaylı

Start : Bu method init methodundan hemen sonra çalışır ve applet dosyası yürütülmeye başladığında çalışmaya başlar.

Start : Bu method init methodundan hemen sonra çalışır ve applet dosyası yürütülmeye başladığında çalışmaya başlar. Java Applet Nedir? Java applet nedir?apllet Örnekleri,applet ve japplet farkı Applet Nedir? Applet Web Sayfaları üzerinde yayınlabilen class dosyalarıdır. Bir applet mutlaka Apllet sınıfının alt sınıfı

Detaylı

Bölüm 11. Soyut veri tipleri ve kapsülleme kavramları ISBN 0-321-49362-1

Bölüm 11. Soyut veri tipleri ve kapsülleme kavramları ISBN 0-321-49362-1 Bölüm 11 Soyut veri tipleri ve kapsülleme kavramları ISBN 0-321-49362-1 11. Bölüm konuları Soyutlama kavramı Veri soyutlamasına giriş Soyut veri tipleri için tasarım konuları Dil örnekleri Parametreli

Detaylı

BİL-142 Bilgisayar Programlama II

BİL-142 Bilgisayar Programlama II BİL-142 Bilgisayar Programlama II (C/C++) Hazırlayan: M.Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü Konular Giriş Sınıflar, Nesneler, Fonksiyon ve Veri Üyeleri Sınıf ve Fonksiyon Üyeleri

Detaylı

NESNEYE YÖNELİK PROGRAMLAMA

NESNEYE YÖNELİK PROGRAMLAMA NESNEYE YÖNELİK PROGRAMLAMA Metotlar Şu ana kadar yaptığımız örneklerde hep önceden hazırlanmış ReadLine(), WriteLine() vb. gibi metotları kullandık. Artık kendi metotlarımızı yapmanın zamanı geldi. Bilmem

Detaylı

Hata Ayıklamanın Ötesi... (Assertion) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 1

Hata Ayıklamanın Ötesi... (Assertion) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 1 Hata Ayıklamanın Ötesi... (Assertion) Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 14 1 Assertion Assertion kelimesinin Türkçe karşılığı iddia, birşeylerin doğruluğunu ispat etmek anlamlarına

Detaylı

BİL 542 Paralel Hesaplama. Dersi Projesi. MPJ Express Java Paralel Programlama

BİL 542 Paralel Hesaplama. Dersi Projesi. MPJ Express Java Paralel Programlama BİL 542 Paralel Hesaplama Dersi Projesi MPJ Express Java Paralel Programlama Recep Ali YILMAZ 131419106 Fen Bilimleri Enstitüsü Bilgisayar Mühendisliği Bölümü Bilgisayar Mühendisliği Yüksek Lisans Programı

Detaylı

Programlama Yazılımı ile Web Sitesi Oluşturma

Programlama Yazılımı ile Web Sitesi Oluşturma Hafta- 2 Programlama Yazılımı ile Web Sitesi Oluşturma Programlama yazılımı, bir web projesi oluşturmak için alternatif birkaç yol sunar. Buyollardan bir tanesi ihtiyaca uygun olarak seçilebilir. Programlama

Detaylı

Başlangıç 2. Generic İfadeler 3. Arayüzler (Interfaces) 5. LINQ ile Sık Kullanılan Arayüzler 7. Koleksiyon Sınıfları 14

Başlangıç 2. Generic İfadeler 3. Arayüzler (Interfaces) 5. LINQ ile Sık Kullanılan Arayüzler 7. Koleksiyon Sınıfları 14 ix Başlangıç 2 Seçime Bağlı (Optional) ve Adlandırılmış Parametreler 2 Generic İfadeler 3 Arayüzler (Interfaces) 5 Tanımlanması 5 Örnek 6 LINQ ile Sık Kullanılan Arayüzler 7 IEnumerator (Numaralandırıcı,

Detaylı

«BM364» Veritabanı Uygulamaları

«BM364» Veritabanı Uygulamaları HAFTA 8 DB içerisinde CLR Bileşenleri" Yaşar GÖZÜDELİ [email protected] http://blog.verivizyon.com/ygozudeli «BM364» Veritabanı Uygulamaları Konu Akışı SQL Server ve.net CLR SQL Server içerisinde

Detaylı

Konular. Hafta 5 Veri Tipleri (Devam) BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

Konular. Hafta 5 Veri Tipleri (Devam) BLG339 PROGRAMLAMA DİLLERİ KAVRAMI BLG339 PROGRAMLAMA DİLLERİ KAVRAMI Hafta 5 Veri Tipleri (Devam) Yrd. Doç. Dr. Melike Şah Direkoğlu Konular Dizi Tipleri Kayıt Tipleri Birleşik Tipler Küme Tipleri İşaretçi ve Referans Tipleri Alındığı

Detaylı

Veritabanı. Ders 2 VERİTABANI

Veritabanı. Ders 2 VERİTABANI Veritabanı Veritabanı Nedir? Birbiri ile ilişkili verilerin bir arada uzun süreli bulundurulmasıdır. Veritabanı bazen Veritabanı Yönetim sistemi veya Veritabanı Sistemi yerine de kullanılır. Gerçek dünyanın

Detaylı

BİT in Temel Bileşenleri (Yazılım-1)

BİT in Temel Bileşenleri (Yazılım-1) Ders 4 BİT in Temel Bileşenleri (Yazılım-1) BİLGİ & İLETİŞİM TEKNOLOJİLERİ 1 Yazılım, değişik ve çeşitli görevler yapma amaçlı tasarlanmış elektronik araçların, birbirleriyle haberleşebilmesini ve uyumunu

Detaylı

Class LinkedHashMap. Class LinkedHashMap java.lang.object java.util.abstractmap java.util.hashmap java.util.linkedhashmap. Kılgıladığı arayüzler:

Class LinkedHashMap. Class LinkedHashMap java.lang.object java.util.abstractmap java.util.hashmap java.util.linkedhashmap. Kılgıladığı arayüzler: Class LinkedHashMap java.util Class LinkedHashMap java.lang.object java.util.abstractmap java.util.hashmap java.util.linkedhashmap Kılgıladığı arayüzler: Cloneable, Map, Serializable Bildirimi: public

Detaylı

Asp.Net Veritabanı İşlemleri

Asp.Net Veritabanı İşlemleri Asp.Net Veritabanı İşlemleri Asp.Net Veritabanı İşlemleri Birçok uygulamada bilgiler geçici olarak tutulur ve oturum sonlandırıldığında bu bilgiler bellekten silinir. Ancak etkileşimli web sitelerinde

Detaylı

Nesneye Dayalı Programlama

Nesneye Dayalı Programlama SAKARYA ÜNİVERSİTESİ Nesneye Dayalı Programlama Hafta 12 Prof. Dr. Ümit KOCABIÇAK Öğr. Gör. Özgür ÇİFTÇİ Bu ders içeriğinin basım, yayım ve satış hakları Sakarya Üniversitesi ne aittir. "Uzaktan Öğretim"

Detaylı

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

OMNET++ 4.2.2. Ağ Benzetim Yazılımı (Network Simulation Framework) BİL 372 Bilgisayar Ağları. GYTE - Bilgisayar Mühendisliği Bölümü Bilgisayar Mühendisliği Bölümü OMNET++ 4.2.2 Ağ Benzetim Yazılımı (Network Simulation Framework) BİL 372 Bilgisayar Ağları OMNET++ OMNET++ (Objective Modular Network Testbed in C++), nesneye yönelik (objectoriented)

Detaylı

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

Java Class Yapısında Finalize Metotunun Kullanımı Java'da finalize() Metodu: Java dili kullanılmayan nesneleri silmek için arka planda çalışan bir sisteme sahiptir. Bu yüzden C++ gibi dillerde dinamik nesne tanımlarında mutlaka yer alması gereken nesneyi

Detaylı

Doğu Akdeniz Üniversitesi Bilgisayar Mühendisliği Bölümü. BLGM 318 Ara Sınavı 2012 2013 Đlkbahar Dönemi 13 Nisan 2013. Ad, Soyad Öğrenci No.

Doğu Akdeniz Üniversitesi Bilgisayar Mühendisliği Bölümü. BLGM 318 Ara Sınavı 2012 2013 Đlkbahar Dönemi 13 Nisan 2013. Ad, Soyad Öğrenci No. Doğu Akdeniz Üniversitesi Bilgisayar Mühendisliği Bölümü BLGM 318 Ara Sınavı 2012 2013 Đlkbahar Dönemi 13 Nisan 2013 Ad, Soyad Öğrenci No. : : Öğretim Üyesi: Doç. Dr. Zeki BAYRAM Süre: 100 dakika Talimatlar:

Detaylı

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

Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java Kodlarına Yorum Satırı Eklemek Java Paket Kavramı Java Kütüphane Kavramı Konsoldan Veri Çıkışı ve JOPtionPane Kütüphanesi JOptionPane Kütüphanesi Kullanarak

Detaylı

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

Interface Comparator. Kılgılayan sınıf: Collator. Bildirimi: public interface Comparator Interface Comparator java.util Interface Comparator Kılgılayan sınıf: Collator Bildirimi: public interface Comparator Comparator arayüzü Java Collections Framework un bir üyesidir. Bir nesneler koleksiyonu

Detaylı

BLM 112- Programlama Dilleri II. Hafta 5 İşaretçiler (Pointers)

BLM 112- Programlama Dilleri II. Hafta 5 İşaretçiler (Pointers) 1 BLM 112- Programlama Dilleri II Hafta 5 İşaretçiler (Pointers) Dr. Öğr. Üyesi Caner Özcan Hiç hata yapmayan insan, hiçbir şey yapmayan insandır. Ve hayatta en büyük hata, kendini hatasız sanmaktır. ~Y.

Detaylı

public static int Toplam int x, int y

public static int Toplam int x, int y static Kavramı 1 İçinde bulunduğu sınıftan nesne oluşturulmadan veya hiç bir nesneye referans olmadan kullanılabilen üyeler static olarak nitelendirilir. Metotlar ve alanlar static olarak tanımlanabilir.

Detaylı

Bilgisayar Mühendisliğine Giriş. Yrd.Doç.Dr.Hacer KARACAN

Bilgisayar Mühendisliğine Giriş. Yrd.Doç.Dr.Hacer KARACAN Bilgisayar Mühendisliğine Giriş Yrd.Doç.Dr.Hacer KARACAN PROGRAMLAMA DİLLERİ Programlama Dilleri ni neden öğrenmeliyiz? Programlama alanları Dil değerlendirme kriterleri Dil tasarımı üstündeki etkiler

Detaylı

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

Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır. Nesne tabanlı programlama nesneleri kullanan programlamayı içerir. Bir nesne farklı olarak tanımlanabilen gerçek dünyadaki bir varlıktır. Örneğin; bir öğrenci, sıra, çember, bir buton birer nesnedir. Bir

Detaylı

Java Dersi. Altuğ Bilgin Altıntaş

Java Dersi. Altuğ Bilgin Altıntaş Java Dersi Altuğ Bilgin Altıntaş Bu Dönem Hakkında Corba Servlet RMI Temel Kısım EJB JSP XML 2 JDBC JNI Çalışma Evreleri 6 Çalışma Evreleri 7 Java dosyasının hali 7 İlk Java uygulaması 7 Ciddi bir uygulama

Detaylı

PROGRAMLAMA DERSİ 1. İNTERNET

PROGRAMLAMA DERSİ 1. İNTERNET PROGRAMLAMA DERSİ 1. İNTERNET İnternet sunucu-istemci modeline göre çalışır. Fiziksel olarak bu sistem genelde isteği yapan bir bilgisayar (kullanıcı-client) ve bu isteği karşılayan özel bir bilgisayar

Detaylı

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

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1 Görsel Programlama DERS 03 Görsel Programlama - Ders03/ 1 Java Dili, Veri Tipleri ve Operatörleri İlkel(primitive) Veri Tipleri İLKEL TİP boolean byte short int long float double char void BOYUTU 1 bit

Detaylı

Göstericiler (Pointers)

Göstericiler (Pointers) C PROGRAMLAMA Göstericiler (Pointers) C programlama dilinin en güçlü özelliklerinden biridir. Göstericiler, işaretçiler yada pointer adı da verilmektedir. Gösterici (pointer); içerisinde bellek adresi

Detaylı

İşletim Sistemi. BTEP205 - İşletim Sistemleri

İşletim Sistemi. BTEP205 - İşletim Sistemleri İşletim Sistemi 2 İşletim sistemi (Operating System-OS), bilgisayar kullanıcısı ile bilgisayarı oluşturan donanım arasındaki iletişimi sağlayan ve uygulama programlarını çalıştırmaktan sorumlu olan sistem

Detaylı

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

Class PriorityQueue. Class PriorityQueue<E> java.lang.object java.util.abstractcollection<e> java.util.abstractqueue<e> java.util. Class PriorityQueue java.util Class PriorityQueue java.lang.object java.util.abstractcollection java.util.abstractqueue java.util.priorityqueue Parametre tipleri: E - the type of elements held

Detaylı

Arş.Gör.Muhammet Çağrı Gencer Bilgisayar Mühendisliği KTO Karatay Üniversitesi 2015

Arş.Gör.Muhammet Çağrı Gencer Bilgisayar Mühendisliği KTO Karatay Üniversitesi 2015 Arş.Gör.Muhammet Çağrı Gencer Bilgisayar Mühendisliği KTO Karatay Üniversitesi 2015 KONU BAŞLIKLARI 1. Yazılım Mimarisi nedir? 2. Yazılımda Karmaşıklık 3. Üç Katmanlı Mimari nedir? 4. Üç Katmanlı Mimari

Detaylı

ALGORİTMA VE PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA I ALGORİTMA VE PROGRAMLAMA I YZM 1101 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi 2. BÖLÜM 2 PROGRAMLAMAYA GİRİŞ Programlama Terimleri ve Programlama Ortamı 3 Program Programlama IDE

Detaylı

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

Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java da Diziler Dizi Tanımlama ve İlk Değer Atama Dizi Elemanlarının Kullanılması Dizi İşlemleri Java da Diziler JAVA DA DİZİLER 4 Dizi; tek bir veri tipinde,

Detaylı

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

İ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İ İ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İ AD SOYAD: TESLİM TARİHİ: OKUL NO: TESLİM SÜRESİ: 2 hafta ÖDEV NO: 5 1- BANKA

Detaylı