Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Ahmet Demirelli
Ahmet Demirelli
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
2 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: burada cellpadding=5 cellspacing=0 generic herhangi id=table3 koleksiyon main(string[] mainprogram nesneleri nesnesi public static yazarken yerine J#.NET / Java Ahmet Demirelli
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Orta
Kategori : J#.NET / Java
Yayınlanma Tarihi : 6.5.2006
Okunma Sayısı : 32656
Yorum Sayısı : 2     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 21.11.2024
Turhal Temizer
Mac OS/X Removing CUDA 21.11.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 21.11.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 21.11.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
Java 5.0 (Tiger) ile Gelen Dil Yenilikleri 1 : Generics
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Merhaba, Java 5 (Tiger ) beraberinde dil,kütüphane, arayüz,performans özellikleri ile ilgli pek çok yenilik getirdi. Ben bu makale serisinde Java 5.0 ile gelen yeni dil özelliklerinden sırasıyla bahsetmeye çalışacağım.
Öncelikle Java 5.0 ile gelen yeni dil özellikleri nelerdir onlara bir bakalım;

  • Generic yapılar
  • Autoboxing/Unboxing
  • Gelişmiş for döngüsü
  • Typesafe Enum (Güvenli sıralama yapıları)
  • Varargs (Değişken sayıda argüman)
  • Static Import
  • Metadata (Annotations)
İlk makalemizde Generic sınıflardan ve metotlardan bahsedeceğiz.
C# 2.0 ile çalışmışsanız veya halen çalışıyorsanız size generic kelimesi size yabancı gelmeyecektir. Java daki generic yapılar, C# taki yapılardan çok farklı değildir.

Generic Sınıflar

Generic sınıf demek içerisinde her türlü tipi (primitive veya referans) tutabilen , hangi tipi tutacağına sınıftan bir nesne yaratılırken karar verebileceğimiz.Nesne yaratılırken belirlediğimiz tip ne olursa olsun bütün tipler için aynı işlemleri yapabilmemizi sağlayan sınıftırtır.

Örneğin bir sınıf tanımlıyoruz ve içerisinde bir başka bir sınıf barındırması(composition) gerekiyor .Fakat içerisinde barındıracağı sınıfın ne olacağına bu sınıfı yazarken yazarken değil bu sınıfı kullanırken karar vermek istiyoruz. O zaman sınıfımızı aşağıdaki gibi generic tanımlamamız gerekir.

public class BizimGenericClass <E>
{
   private E genericDeger;
   public BizimGenericClass(E genericDeger)
          {
             this.genericDeger = genericDeger;
          }
   public void genericTipiYaz()
          {
             System.out.println(genericDeger.getClass().toString());
         }
   public void genericDegeriYaz()
         {
             System.out.println(genericDeger.toString());
          }
}

Sınıfımızı yukarıdaki gibi tanımlarsak artık içerisinde hangi tipten bir nesne tutacağımıza bu sınıftan nesne yaratırken karar verebiliriz.Yukarıdaki kodda yazdığımız <E> sınıf içinde tutacak olduğumuz değişkenin tipine karşılık geliyor.Yani BizimGenericClass sınıfından nesne yaratırken <E> yerine yazdığımız tipte bir değişken tutacağımız anlamına geliyor. <E> yerine herhangi bir değişken adı yazabiliriz (<T>,<Tip>... gibi) değişken isminin bir önemi oktur.<E> gösterimi sadece genel bir tipi temsil eder.

Generic sınıflardan nesne yaratmak normalden biraz farklıdır;

BizimGenericClass<String> bizimnesne = new BizimGenericClass<String>();
Burada sınıf tanımındaki <E> yerine <String> koyuyoruz bu bizimnesne adlı nesne içerisinde String tutacağımız anlamına gelir. Eğer <String> yerine herhangi bir tip yazmazsak bu sınıf içerisinde Object tipini saklayacağımız anlamına gelir.

Aşağıdaki kod bu generic sınıfı nasıl kullanacağımızı açıklamaktadır.

public class MainProgram
{
   public static void main(String[] args)
   {
          BizimGenericClass<String> s = new BizimGenericClass<String>("Ahmet"); //generic classın hangi nesneyi tutacağını burada belirtiyoruz
          s.genericTipiYaz();
          s.genericDegeriYaz();

          BizimGenericClass<Integer> t = new BizimGenericClass<Integer>(8);//generic classın hangi nesneyi tutacağını burada belirtiyoruz
          t.genericTipiYaz();
          t.genericDegeriYaz();
   }
}

Generic Metotlar

Generic metotlar ise yukarıda kullandığımız generic sınıftaki yapıcı (constructor) metot gibi yazılmaktadır.
Aşağıda generic metot tanımıyla ilgili kısa bir örnek yeralmaktadır;

public class YeniGenericClass<T>
{
   public void BizimGenericMethod(T genericDeger)
   {
           System.out.println(generi.getClass().toString());
           System.out.println(generi.toString());
   }
}

Generic metot yazarken dikkat edilmesi gereken tek şey 3. satırdaki (metot tanımındaki ) T genel tipinin metodu içeren YeniGenericClass sınıfın 1. satırında sınıf isminden sonra yazılan <T> ile aynı olmasıdır.
Kullanırken yine generic sınıf gibi kullanacağız.

public class MainProgram <T>
{
  public static void main(String[] args)
   {
           YeniGenericClass<String> y = new YeniGenericClass<String>();
           y.BizimGenericMethod("Hello Generic Method");
   }
}

Java 5.0 Generic Koleksiyon yapıları

Şimdi kendimiz generic sınıf ve metot yazmak yerine Java 5.0 ile gelen işlerimizi kolaylaştırmak için yazılmış generic koleksiyonları nasıl kullanacağımızı görelim.

Öncelikle eskiden Java da koleksiyon(Collection) yapılarını kullanırken eskiden (Java 5.0 dan önce) nasıl bir problemimiz olduğunu görelim.
Bir koleksiyon kullanmak için tanımını yapıp "new" anahtar kelimesiyle yani bir nesne yaratmamız gerekiyor. Daha sonra bu koleksiyon nesnesinin içerisine istediğimiz nesneleri "add()" methodunu kullanarak ekleyebiliyoruz. Aşağıdaki kodda yeni bir vektör nesnesi yaratılıp içerisine istediğimiz nesneleri ekliyoruz. (NOT: Unutmayın koleksiyon yapıları içerlerinde sadece nesne tuabilirler primitive tip tutamazlar)

import java.util.Vector; //Kullanacağımız koleksiyon classını import ediyoruz

public class MainProgram
{
public static void main(String[] args)
          {
             Vector v = new Vector(); //Yeni bir vektör nesnesi yaratıyoruz
             String isim = "AHMET";
             Integer no = new Integer(888);
             v.add(isim); //vektör koleksiyonumuza isim değişkenini ekliyoruz.
             v.add(no); //vektör koleksiyonumuza no nesnesini ekliyoruz ekliyoruz.
             String name = (String)v.elementAt(0); //Type Casting (5.0 dan önce tür dönüşümü işlemini mutlaka yapmamız gerekiyordu)
             Integer id = (Integer)v.elementAt(1); //Type Casting (5.0 dan önce tür dönüşümü işlemini mutlaka yapmamız gerekiyordu)
          }
}


Aslında yukarıdaki kodda şu ana kadar bir problem yok.Problemimiz koleksiyon nesnelerinin içerisine koyduğumuz nesneleri geri almaya çalıştığımızda olacak.Koleksiyon nesneleri içerisine aldıkları bütün nesneleri "Object" tipinde tuttukları için geri almaya kalktığımızda bize bir "Object" nesnesi geridöndürecek. Bu durumda bizim bir tür dönüşümü (type casting) işlemi yapmamız gerekiyor.Her geri alacağımız nesne için maalesef bu işlemi tekrar tekrar yapacağız.

Yukaridaki kodda 12. satırda "elementAt()" metodunu kullanarak koleksiyona koyduğumuz "AHMET" stringini geri almaya çalışıyoruz."elementAt()" metodu bize nesne geri döndürdüğü için mecburen bir tür dönüşümü işlemi yapmak zorunda kaldık. Tür dönüşümü işlemini yapmasaydık derleme sırasında hata alacaktık.Koleksiyonumuzun tüm elemanlarının anı tipte olsaydı bile yine tür dönüşümü yapmak zorundaydık. Aslında görüldüğü gibi tür dönüşümü yaptığımız sürece hiçbir problemimiz yok.İsterseniz Java 5.0 kullandığınız halde hala bu yöntemle uygulama geliştirmeye devam edebilirsiniz , bir problem çıkmaz.
Ama işlerimizi kolaylaştırmak istiyorsak (özellikle koleksiyonda aynı türden nesneler tutuyorsak) Generic koleksiyon yapılarını kullanmamız gerekecek.
Java 5.0 dan önce var olan kolaksiyon sınıfları Java 5.0 için generic sınıflar olarak tekrar yazılmıştır.Generic koleksiyon sınıfları sayesinde koleksiyonun içinde ne tür nesneler tutacağımızı önceden belirtip içerisine nesnelerimizi koyuyoruz. Geri alırken herhangi bir tür dönüşümü işlemi yapmamıza gerek kalmıyor.

Örnek ;

import java.util.Vector;
public class MainProgram
{
public static void main(String[] args)
             {
                Vector<String> v = new Vector<String>();
                String isim = "AHMET";
                String soyisim="DEMIRELLI";
                v.add(isim);
                v.add(no);

                 String name = v.elementAt(0); //String tutacağımızı önceden belirttiğimiz için tür dönüşümü yapmamıza gerek kalmıyor .
                 String lastname = v.elementAt(1);
           }
}

Fakat yukarıdaki örnektede görüldüğü gibi koleksiyonumuzun hangi tipi tutacağını koleksiyon nesnesini yaratırken söylüyoruz.Bu yüzden içerisine o tipten başka bir tip koyamıyoruz. Örneğin string vektörünün içerisine Integer koyamıyoruz.


Bu makale serisinin ikincisinde Autoboxing/Unboxing konusundan bahsedeceğim. Görüşmek üzere.
Bilgiyi paylaşalım....

Makale:
Java 5.0 (Tiger) ile Gelen Dil Yenilikleri 1 : Generics J# ve Java dili Ahmet Demirelli
  • Yazılan Yorumlar
  • Yorum Yaz
MAY
12
2006
Çok güzel bir makale. Tigerla ilgili Türkçe yazılmış en öğretici makalelerden biri diyebilirm. Devamını dört gözle bekliyorum.
MAY
6
2006
Merhabalar. C# 2.0 ve Java 5.0 arasında yer alan dilsel farkliliklari ve bunlarin birbirlerine olan ustunlukleriyle ilgili ana hatlara temas eden bir makale hazirlamaniz cok aydinlatici olacaktir kanaatimce.. Elinize saglik ,tesekkurler.
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor