Makale Özeti

Nesneye dayalı programlamada her şey; sınıflardan (class) ve sınıfları referans alarak oluşturulan nesnelerden (object) oluşur. Visual Basic.NET tam anlamıyla nesneye dayalı olduğundan sınıf yapısını destekler.

Makale

Class

İlk SInIfImIzI OluŞturalIm

Nesneye dayalı programlamada her şey; sınıflardan (class) ve sınıfları referans alarak oluşturulan nesnelerden (object) oluşur. Visual Basic.NET tam anlamıyla nesneye dayalı olduğundan sınıf yapısını destekler.

Yeni bir sınıf oluşturulurken önceden oluşturulmuş sınıflar, yeni sınıf için çekirdek olarak kullanılabilirler. Nesneye dayalı programlamada bu kavram “kalıtım” (inheritance) adıyla tanımlanır. Yeni sınıf çekirdek sınıfının özelliklerini ve kendine has yeni özellikleri taşır.

Vb.NET diğer nesneye dayalı (object oriented) dillerden farklı olarak yalnızca bir tek ebeveyn sınıftan kalıtıma izin verir. Tabi ki ebeveyn de farklı bir sınıfın kalıtsal özelliklerini taşıyabilir. C++ gibi nesneye dayalı programlama dilleri aynı anda birden fazla ebeveynden kalıtıma olanak tanır. Fakat çoklu kalıtım C++ ile geliştirilen programlarda ortaya çıkan çoğu hatanın sebebidir.

Sınıf yapısını oluşturacağımız örnek bir sınıfla kavramaya çalışalım;

(Bu sınıfla bir müşterinin adı, soyadı ve vb bilip bilmediği tutuluyor. Her oluşturulan yeni müşteri kaydında müşteri no otomatik olarak atanıyor.)

1. Yeni bir Visual Basic .NET projesi oluşturun. Proje tipini Visual Basic Projects olarak seçtikten sonra Templates kısmından Empty Project’i seçin. Projeye “Class Sample” ismini verin.

2. Solution Explorer’da projenin ismine sağ tıklayıp Add Class’ı seçin. İsim olarak “müsteri.vb” girin.

3. müsteri.vb’nin içeriğini aşağıdaki kodlarla değiştirin;

Namespace nspMüsteriHesaplari

Public
Class clsMüsteri
Private strAd As String = ""
Private strSoyad As String = ""
Private blnVb7biliyormu As Boolean = False
Private intNo As Integer = 0

Private Shared intToplamMüsteri As Integer = 0

Sub New()

MyBase.New()
intToplamMüsteri += 1
intNo = intToplamMüsteri

End Sub

Sub New(ByVal Ad As String, ByVal Soyad As String)

MyBase.New()
strAd = Ad
strSoyad = Soyad
intToplamMüsteri += 1
intNo = intToplamMüsteri

End Sub

Overridable Function KayıtGirildimi() As Boolean

If
((strAd <> "") And (strSoyad <> "")) Then
Return True
Else
Return False

End If

End Function

#Region "Müşteri Özellikleri"

Public ReadOnly Property MüsteriNo() As Integer

Get
Return intNo
End Get

End Property

Property MüsteriAd() As String

Get
MüsteriAd = strAd
End Get

Set
(ByVal Deger As String)
strAd = Deger
End Set

End Property

Property
MüsteriSoyad() As String

Get
MüsteriSoyad = strSoyad
End Get

Set(ByVal Deger As String)
strSoyad = Deger
End Set

End Property

Property VBNetBiliyormu() As Boolean

Get
VBNetBiliyormu = blnVb7biliyormu
End Get

Set(ByVal Value As Boolean)
blnVb7biliyormu = Value
End Set

End Property

#End Region

End Class

End Namespace

KODU YORUMLAYALIM

Public Class clsMüsteri

Public önekiyle oluşturduğumuz sınıfın; bu sınıfı kullanan programlardaki tüm sınıflardan, modüllerden ve prosedürlerden çağrılabilmesini sağladık.

Private strAd As String = ""
Private strSoyad As String = ""
Private blnVb7biliyormu As Boolean = False
Private
intNo As Integer = 0

Private Shared intToplamMüsteri As Integer = 0

Kodlarıyla sınıf içinde kullanacağımız değişkenleri tanımlıyoruz. Private önekiyle tanımlanan değişkenler sınıfın dışından erişilemezler. Shared olarak belirtilenler ise global değişkenler gibi düşünülebilir.

Oluşturduğumuz bu sınıftan nesne türetildiğinde ilk çağrılacak kısım;

1)
Sub
New()

MyBase.New()
intToplamMüsteri += 1

intNo = intToplamMüsteri

End Sub

2)
Sub New(ByVal Ad As String, ByVal Soyad As String)

MyBase
.New()
strAd = Ad
strSoyad = Soyad

intToplamMüsteri += 1
intNo = intToplamMüsteri

End Sub

‘dır. Burada iki New() yordamı olduğuna dikkat edin. Bizim örneğimizde; nesne oluşturmak için iki altarnatif var. Bunlardan biri hiçbir değer atamadan, sadece nesne oluşturmak, diğeri Ad ve Soyad özelliklerine iki parametre göndererek nesne oluşturmak. Derleyici girilen parametreye göre uygun olan kısmı çağıracaktır.

Her yeni nesne oluşumu anında toplam kaydı sayan intToplamMüsteri değeri 1 arttırılacaktır.

Overridable Function KayıtGirildimi() As Boolean

If
((strAd <> "") And (strSoyad <> "")) Then
Return True
Else
Return False
End If

End Function

Fonksiyonu kayıt için gerekli olan Ad ve Soyad bilgilerinin girilip girilmediğini kontrol ediyor.

Property ......() As ......

Get
......
End Get

Set
(ByVal .... As ....)
......
End Set

End Property

İfadeleri ise sınıfımıza yeni özellikler ekliyor. Sınıftan oluşturulacak nesnenin bir özelliği okunacaksa Get bölümündekiler, nesnenin özelliğine bir atama yapılacak Set bölümündekiler çağrılır.

Public ReadOnly Property MüsteriNo() As Integer

Get
Return intNo
End Get

End Property

Oluşurulacak nesnenin MüsteriNo özelliği tanımlanıyor. Müşteri numarası otomatik olarak atandığından ReadOnly olarak tanımlandık. Bu yüzden özelliğin Set bölümü olmadığına dikkat edin.

Property MüsteriAd() As String

Get
MüsteriAd = strAd
End Get

Set(ByVal Deger As String)
strAd = Deger
End Set

End Property

MüsteriAd özelliği ise müşterilerin adını tutan bir özellik. Bu kısımda hem Set hem Get bölümleri var. Eğer sınıftan oluşturulacak nesnenin MüsteriAd özelliğine değer atanmaya çalışılırsa Set kısmı, okunmaya çalışılırsa Get kısmı çağrılacaktır. Diğer özellikler aynı mantıkla oluşturulmuştur.

Sınıfımız artık kullanılmaya hazır. Herhangi bir projeden referans gösterip sınıfımızı kullanabiliriz. Sınıfımıza referans gösterdikten sonra, sınıfımızdan yeni bir nesne oluşturmalıyız. Örneğin;


Dim YeniMüsteri As New nspMüsteriHesaplari.clsMüsteri()

Kodları YeniMüsteri isminde bir nesneyi clsMüsteri sınıfını baz alarak oluşturur.

YeniMüsteri.MüsteriAd = "Kâsım"
YeniMüsteri.MüsteriSoyad = "Gülcan"

Kodları ise MüsteriAd ve MüsteriSoyad özelliklerine belirtilen ifadeleri atar.

Şekilde de görüldüğü gibi YeniMüsteri yazıp nokta koyduğumuzda intellisense sınıfımızda tanımladığımız fonksiyonlar ve özellikleri listeliyor. Sınıfımızda tanımlamadığımız GetType fonksiyonuna dikkat edin. Sınıfımız da aslında Object sınıfından türediğinden, sınıfımız Object sınıfının fonksiyonlarını da içeriyor. GetType, Object sınıfından bizim sınıfımıza kalıtımsal olarak aktarılan bir fonksiyondur.

Kâsım GÜLCAN
SQLNedir?com