Makale Özeti

Interface prosedürlerin, property’lerin ve event’ ların yapısını (bunların isimlerini, parametrelerinin nasıl aktarılacağı ve geri döndürülecek değerleri) belirler.

Makale

Interface KullanImI

Tekrar merhaba; bu yazıda interface kavramını irdeleyeceğiz.

Interface prosedürlerin, property’lerin ve event’ ların yapısını (bunların isimlerini, parametrelerinin nasıl aktarılacağı ve geri döndürülecek değerleri) belirler. (Terimlerin İngilizce karşılıklarını kullanmak benim de çok hoşuma gitmiyor ama anlam açıklığı için bu şekilde kullanacağım.) Interface’ler nesnenin sağlayıcısı ile onu kullanacak istemci arasındaki bir anlaşmadır aslında. Bu sayede sunucu, istemcinin belli şartları sağlamasını mecbur tutabilir. Bu sayede özellikle versiyon farklılıklarında doğacak sorunların giderilmesinde kullanılabilirler. Başka bir açıdan interface’ler şöyle yorumlanabilir. Nesnenin kullanıcıya açılan penceresidir interface. Kullanıcıya açılan pencere? Yani kullanıcıyı nesneyle etkileşime geçiren yapı. Teoriyi pratikte düşünürsek nesnenin public birimleri bir interface oluşturur. Çünkü public birimler doğrudan kullanıcıya açıktır. Bu temel interface’e native ya da primary interface adı verilir. Aynı mantıkla private birimler interface’in bir parçası değildir. Fakat altının çizilmesi gereken bir nokta; interface’ler nesnenin sunucusu ile istemcisi arasında iletişimi sağlar. Örneğin bir fonksiyonun alacağı parametre şartlarını belirler ama fonksiyonu barındırmaz. Yani interface’lerden bahsederken bizim için önemli olan birimlerimizin (sub,function,evetent..) tanımlamalarıdır.

Interface Tanımlama
Genel kabul olarak interface’lerin önüne I belirteci eklenir.

Public Interface IOrnekInterface
Event OrnEvent()
Sub OrnMethod()
Function OrnFunction(ByVal Param1 As Integer) As Integer
Property OrnProperty() As String
End Interface

Dikkat ederseniz fonksiyon ve yordamın sadece yapısı belirtiliyor.
Event’ların da interface içinde tanımladığına dikkat edin.
Bu interface’i kullanmak isteyen tüm class’lar interface’de tanımlanan birimleri karşılamak zorundadır.

Overloading
Interface içinde overloading de kullanılabilir. Örneğin;

Public Interface IOrnekInterface
Overloads Sub OrnMethod()
Overloads Sub OrnMethod(Data As String)
Overloads Function OrnFunction(ByVal Param1 As Integer) As Integer
Overloads Function OrnFunction(ByVal Param1 As Single) As Integer
End Interface


Interface’i Dahil Etme (implemantation)
Interface’i dahil etme için Implements deyimi kullanılır.

Public Class TheClass
Implements IOrnInterface
End Class

Vb’daki interface kullanımındaki bulanıklıklar Vb.NET ile giderilmiş durumda. Herhangi bir metodu bir interface’in belli bir metodunu karşılayacağını aşağıdaki şekilde belirtiyoruz.

Public Sub OrnMethod() Implements IOrnInterface.OrnMethod

Yukardaki örnekteki interface’i (IOrnekInterface’i) kullanmak istersek, interface’in şart koştuğu yapıyı desteklemek zorundayız. Örneğin;

Public Class TheClass
Implements IOrnInterface
Public Event OrnEvent() Implements IOrnInterface.OrnEvent

Public Function OrnFunction(ByVal Param1 As Integer) _
As System.Integer Implements ornek.IOrnInterface.OrnFunction

End Function

Public Sub OrnMethod() Implements ornek.IOrnInterface.OrnMethod

End Sub

Public Property OrnProperty() As String _
Implements ornek.IOrnInterface.OrnProperty
Get

End Get
Set

End Set
End Property
End Class

Interface’in şart koştuğu tüm birimlerin karşılandığına dikkat edin.

Şu aşamadan sonra nesnenin native interface’ini değil de IOrnInterface’ini kullanabiliriz. Bu işlemi yapacak istemci için örnek;

Dim obj As IOrnInterface

obj = New Implementer()
obj.OrnMethod

VB.NET ile interface’i karşılayacak metodun ismi ve etki alanı (scope) , interface’in karşılanacak olan metodundan bağımsız hale gelmiştir.

Çoklu Interface kullanımı (multiple interface)
Bir sınıf birden fazla implements deyimi kullanarak birden fazla interface dahil edebilir. Aşağıdaki gibi interface’lerimizin olduğunu düşünelim;

Public Interface IBirinciInterface
Sub Islem1()
End Interface

Public Interface IIkinciInterface
Sub Islem2()
End Interface

Bu iki interface’i de kendi içine dahil eden bir sınıf oluşturabiliriz;

Public Class TheClass
Implements IBirinciInterface
Implements IIkinciInterface

End Class

Şu halde iki seçenek karşımıza çıkıyor. Birincisi Islem1 ve Islem2’i karşılayacak iki farklı yordam oluşurmak.

Private Sub IsimOnemsiz1() Implements IBirinciInterface.Islem1
‘ Gerekli kodlar
End Sub

Private Overloads Sub IsimOnemsiz2 () Implements IIkinciInterface.Islem2
‘ Gerekli kodlar
End Sub

İkincisi eğer aynı Islem1 ve Islem2 aynı işi gerçekleştiriyorsa ikisini tek seferde karşılamak;

Private Sub Islem() _
Implements IBirinciInterface.Islem1, IkinciInterface.Islem2
‘ Gerekli kodlar
End Sub

Gördüğünüz gibi virgül (,) ile karşılanacak metotları belirtmek yeterli.

Böylelikle interface’leri genel bir çerçeveden incelemiş olduk. Yazı hakkında yorumlarınızı bekliyorum. Kolay gelsin.

Kâsım GÜLCAN
SQLNedir?com