Yazarlar Sözlük Makaleler Yardım Masası Gözlük Forum İstatistik

Tüm Başlıklar XML

1.  Encapsulation kapsamına giren bir OOP terimi. OOP dünyasında sözleşmeler tanımlayıp, kimi classların bu sözleşmelere uymasını sağlamak için kullanılır.

Interface; birbiriyle ilgisi olmayan classların (aynı classdan inherited olması gerekmeyen classların) aynı özellikleri ve methodları tek bir, eee, interfaceden sunabilmesini sağlar. [Olmadı bu tanim ama sabirlı olup okumaya devam etmek lazım.] Bunun için herbir classın belirtilen Interface ile uyumlu olması gerekir.

interface IComparable { // bir interface (sözleşme) tanımlıyoruz.
   int CompareTo(object obj); // IComparable'ı implement eden classlar bu metoda sahip olmak zorunda.
}

class Kisi : IComparable { // " : IComparable" ifadesi bu classın IComparable
                           // sözleşmesine uyacağını belirtir.
   public string Ad;
   public Kisi(string ad){
      this.Ad = ad;
   }
   public int CompareTo(object obj){ // bu metodu yazmakla sözleşmeye uyduk.
      Kisi k = (Kisi) obj;
      return this.Ad.CompareTo(k.Ad);
   }
}

Örneğin yukarıdaki kodda Kisi class'ı IComparable interfaceini implement ediyor. Bu yüzden CompareTo metodunu tanımlamak zorunda kalmış. Böylece "Kisiler compare edilebilir" diyebiliriz.

Biraz daha açalım bu mevzuyu yoksa çıkamıycaz işin içinden:

Mesela .Net Framework'ün System.Collections namespace'inde ArrayList adında bir class vardır. Bu class türü ne olursa olsun nesneleri dizi şeklinde depolamak için kullanılır. Ayrıca bu classın Sort() adında bir methodu vardır ki, eklediğiniz nesnelerin sıralanmasını sağlar. Kullanımı şöyledir:

ArrayList al = new ArrayList();
al.Add(5);
al.Add(1);
al.Add(49);
foreach(int sayi in al) Console.Write(sayi+","); // Çıktı: 5,1,49,
al.Sort();
foreach(int sayi in al) Console.Write(sayi+","); // Çıktı: 1,5,49,

Burada ArrayList'in içine sayılar ekledik. O yüzden sayıları küçükten büyüğe sıralayabildi. Peki ArrayList'in içine Kisi'nin instancelarını ekleseydik, neye göre sıralayacaktı? Aşağıdaki koda bakalım:
public class Kisi{
   public string Ad;
   public Kisi(string ad){
      this.Ad = ad;
   }
}

System.Collections.ArrayList al = new System.Collections.ArrayList();
al.Add(new Kisi("Bülent"));
al.Add(new Kisi("Ahmet"));
al.Add(new Kisi("Osman"));
foreach(Kisi kisi in al) Console.Write(kisi.Ad+",");
al.Sort();
foreach(Kisi kisi in al) Console.Write(kisi.Ad+",");

al.Sort(); satırına geldiğinde IComparable interface'inin Kisi tarafından implement edilmesi gerektiğini söyleyen bir exception ile yukarıdaki kod çakılır. Haklıdır da.. Kisi nedir ki, ne bilsin datnet, neye göre sıralasın? Aslında ArrayList içine eklenen bu nesneleri sıralaması gerektiğinde onları IComparable nesneleriymiş gibi görmeye çalışır. Böylece eklenmiş olan nesnelerin türleri ne olursa olsun, eğer IComparable sözleşmesine uyuyorsa sıralayabilir.
Eğer Kisi classı IComparable interface'ini -yukarıdaki gibi- implement etmiş olsaydı, sort edilebilecekti.
fizikci
24 Ocak 2005 07:00 ~ 28 Ekim 2006 04:33
2.  interface bir sablondur diyebiliriz. icinde sadece isimleri ve cisimleri (tipleri) tanimlanmis fonksiyonlar, property'ler bulunur. fakat kod yoktur. interface'i bir class implement eder. class icinde implement edilen her interface'in icindeki fonksiyonlar class tarafinda tanimlanmak zorundadir. ne ise yarar ki, Base Class kullanir, hatta bazi temel islemleri tekrar kod yazmadan Base class icinde hallederim diceksiniz. yok efenim, oyle diil. Ornek:

bir cizim uygulamasi gelistiriyoruz diyelim ve cizilen sekillerin ortak ozelliklerini bir interface'de toplayalim.

public interface IShape{
    void Draw(Graphics g);
}


IShape interface'imizin sadece Draw(Graphics) fonksiyonu var ve butun cizim yapacak class'lar bu interface'i implemente edecek.

public class Rectangle : IShape{

    private int X, Y, Width, Height;

    public Rectangle(){
        X = 5;
        Y = 5;
        Width = 50;
        Height = 75;
    }
    public void Draw(Graphics g){ // IShape interface'inden dolayi tanimlamak zorundayiz
         g.DrawRectange(X, Y, Width, Height); //dikdortgen cizdik, bu islemin boyle oldugunu var sayalim.
    }
}


public class Circle : IShape{

    private int X, Y, Radius;

    public Circle(){
        X = 5;
        Y = 5;
        Radius = 50;
    }
    public void Draw(Graphics g){ // IShape interface'inden dolayi tanimlamak zorundayiz
         g.DrawCircle(X, Y, Radius); //Daire cizdik, bu islemin boyle oldugunu var sayalim.
    }
}


yukarıdaki kodlarda Rectangle ve Circle siniflarimizi tanimladik ve IShape interface'ini implemente ettik. cizimi gosterecegimiz formda DrawShape isimli bir fonksiyonumuz olsun ve IShape interface'ini parametre olarak alsin. Interface'lerin onemi burada ortaya cikiyor. DrawShape fonksiyonumuz IShape interface'ini parametre olarak aliyor ama aslinda IShape'i implemente etmis butun class'lari da parametre olarak alabiliyor. kodumuz asagida


//bu kod formun icinde
public void DrawShape(IShape shp, Graphics g){
    shp.Draw(g);
}



Rectangle rct = new Rectangle();
Circle crc = new Circle();

DrawShape(rct); // Kare cizer
DrawShape(crc); // daire cizer


interface'lerin cok kullanildigi alanlardan biri de plugin destekli uygulamalardir. Bir uygulama belirli interface'leri implemente etmis class'larin instance'larini yukler ve programa cesit cesit ozellikler katilir. Ornek interface:

public interface IPlugin{
    // Plug-in bilgileri
    string Author{get;set;}
    string Description{get;set;}
    string Version{get;set;}
    string Copyright{get;set;}

    //gerekli bilgiler
    void ShowAbout();

    void Configure();
    //ihtiyaclara gore arttirilabilir.
}

bateristt
23 Mayıs 2005 18:27 ~ 01 Ağustos 2005 21:44
3.  .Net'te tanımlı temel interfaceler şunlar:

- Tüm nesnelerle ilgili olanlar (System namespace'inde)
IComparable
IComparer
ICloneable

- Sadece liste yapılarıyla ilgili olanlar (System.Collections'da)
IEnumerable
IEnumerator
ICollection
IList
IDictionary
fizikci
21 Kasım 2005 12:13 ~ 21 Kasım 2005 17:06
4.  Bir de ethernet kartı gibi aygıtlara da "interface" denir. Bu anlamdaki "interface"e Türkçe'de arabirim denmektedir.
sertw
07 Aralık 2005 22:36
5.  Sakıncaları nedeniyle multiple inheritance'i desteklemeyen programlama dillerinde multiple inheritance yapmanın tek yolu.
çoklu kalıtım
Java
C#
bilader
01 Şubat 2006 00:13
Bu konuda bildiklerinizi bizlerle paylaşabilirsiniz
Tabi bunun için yazarsanız giriş yapmalı, yazar değilseniz yazar olmalısınız.


Bu başlığa bkz veren girişlerin başlıkları nedir?
» OOP


Bu başlığa bkz veren girişler başka hangi başlıklara bkz verdiler?
© 2005, Bilişim Kulübü. (1125 ms)
Ne yapabilirsin: SubtitleClick ile İngilizceni Geliştir, Çınar Framework ile kod yaz, Eglencelik.org'ta biraz eğlen