" Umut, hiç görmeyen birine gökkuşağını anlatmak kadar zor ve imkansız... "

Categories

-

Vb.Net Nesne Yönelimli Programlama 1-c

Bir öncekli yazimizda vb.net programlama dili kullanilarak Sinif (Class) ve Nesne (Object) tanimlamaktan bahsetmistik. Simdi ise Sinif Üyeleri, Yordamlar (Methods), Return Deyimi, Parametreler, Deger ve Referans Yoluyla Parametre Aktarmak konularina bir göz atacagiz.

1-c Sinif Üyeleri

Kullanici tanimli yeni nesil sinif veri türü olan sinif yapisi veri ve bu veriyi kullanacak islemlerden olusur. Sinifin bu amaç için kullanilan temel üyeleri sunlardir.

  1. Iç Siniflar (Nested Class)
  2. Alanlar / Degiskenler (Variables)
  3. Yordamlar ( Methods)
  4. Yapicilar ( Constructors)
  5. Yikicilar ( Destructors )
  6. Özellikler ( Properties )
  7. Indeksleyiciler ( indexers)
  8. Numaralandirmalar ( Enumerations )
  9. Öznitelikler ( Attributes )
  10. Arabirimler ( interfaces )
  11. Yapilar ( Structures )
  12. Temsilci ve Olaylar ( Delegates & Events )

Siniflar, her zaman bu ögelerin hepsini içermek zorunda degildir. Fakat en az bir yordam içermesi beklenir. Çünkü disaridan yordamlar üzerinden nesneyle iletisim kurulur. Nesnenin üyeleri nesne isminden sonra '.' konularak kullanilir.

Degiskenler siniflarin temel üyesini teskil eder. Bazi kaynaklarda alan (field) olarakta tanimlanan degiskenler sinif içersinde degisebilir veya degismez / sabit olarak tanimlayabiliriz.

Asagidaki örnekte içinde x ve y degiskenlerin oldugu islem adinda bir sinif tanimlanmis ve bu siniftan bir nesne üretilmistir.

Module nyp

    Public Class islem
        Public x As Byte
        Public y As Integer
    End Class

    Sub Main()
        Dim objislem As New islem
        objislem.x = 150
        objislem.y = 300
    End Sub

End Module

Sinif içinde sabitleri ayni sekilde tanimlayabiliriz. Sabitler, tanimlandiklari anda ilk degerlerini alan ve daha sonra degerleri degismeyen alanlardir. Burada ek olarak sunu söyleyecegiz; sabit olarak tanimlanmis alanlara nesne olusturmadan erisilir. Bu anlamda statik üyelere benzer.

Module nyp

    Public Class islem
        Public x As Integer = 2005
        Public Const pi As Double = 3.14
        Public ReadOnly numara As Integer = 2121234567
    End Class

    Sub Main()
        Dim objislem As New islem
        objislem.x = 100
        Console.WriteLine("Degisken X degiskeni : {0}", objislem.x)
        Console.WriteLine("Sabit Pi degiskeni : {0}", islem.pi)
        Console.WriteLine("Sabit Numara degiskeni : {0}", objislem.numara)
        Console.ReadLine()
    End Sub

    Sub islem1()

    End Sub

    Sub islem2(ByVal adsoyad As String)

    End Sub

    Sub islem3(ByVal adsoyad As String, ByVal ogrencino As Integer)

    End Sub

End Module

1-d YORDAMLAR ( METHODS)

Yordam bir sinifin en önemli üyelerinden birisidir; belirli islemleri gerçeklestiren kod parçaciklaridir. Yordamlar, parametreleri verilerek isimleriyle çagirilirlar.

Sub ()

' Yapacagi islemler

End Sub

Asagidaki örnekte üç tane yordam kullanilmistir. Islem1 herhangi bir parametre almamis, islem2 bir parametre almis, islem3 ise iki parametre almistir.

Module nyp

    Sub islem1()

    End Sub

    Sub islem2(ByVal adsoyad As String)

    End Sub

    Sub islem3(ByVal adsoyad As String, ByVal ogrencino As Integer)

    End Sub

End Module

Fonksiyonlar farkli bir yordam türü olup yaptiklari islemlerden sonra geriye deger döndürürler. Bu yüzden fonksiyon tanimlanirken ayrica ne tür deger döndürecegide tanimlanmalidir. VB.NET ‘de fonksiyonlar Function sözcügüyle tanimlanir.

Function () As

' Yapacagi islemler

End Function

Asagidaki örnekte iki tane fonksiyon tanimlanmistir. Fn1() tek parametre alip String deger döndürürken, Fn2() iki parametre alip geriye integer bir deger döndürür.

Module nyp

    Function Fn1(ByVal x As Integer) As Integer
        ' Yapacagi islemler
    End Function

    Function Fn2(ByVal x As Integer, ByVal y As Byte) As Integer
        ' Yapacagi islemler
    End Function

End Module

1-e Return Deyimi

Return deyimi tek basina kullanildiginda yordamlar sonlandirir; yani yordamlardan çikmak için return sözcügü kullanilir. Program return satirindan sonraki kodlari çalistirmaz. Bu kodlara erisilmeyen kod ( unreachable code) denilir.

Module nyp

    Sub Main()
        SelamVer("Okan Düzgün")
        Console.ReadLine()
    End Sub

    Sub SelamVer(ByVal AdSoyad As String)
        Console.WriteLine("Merhaba {0}", AdSoyad)
        Return
        Console.WriteLine("Nasilsin, iyi misin ?")
    End Sub

End Module

Görüldügü gibi program ekrana “Nasilsin iyi misin ?” satirini yazdirmadi. Çünkü return satirindan yordamin akisini kesip geriye dönmüstür.

Not : VB.NET tarafinda yordam ve fonksiyonlardan çikmak için Exit Sub ve Exit Funciton satirlari kullanilir.

Ayrica return sözcügü fonksiyonlardan deger döndürmek için de kullanilir. Fonksiyonlar çalistiktan sonra geriye return deyimi kullanilarak deger döndürür. Asagidaki örnekte sayilarin karesini döndüren bir fonksiyon yazilmistir. Program, fonksiyonu return satirina kadar isler ve karsilastigi ilk return ifadesinde disari çikar.

Module nyp

    Sub Main()
        Dim kare As Integer = KareAl(5)
        Console.WriteLine("5'in karesi {0} :", kare)
        Console.ReadLine()
    End Sub

    Function KareAl(ByVal KaresiAlinacakSayi As Byte) As Byte
        Return KaresiAlinacakSayi * KaresiAlinacakSayi
    End Function

End Module

VB.NET’te fonksiyon içinde fonksiyonun adi kullanilarak deger döndürülebilir. Bu yöntemin return’den farki, program return deyimi gördügü yerde fonksiyondan çikarken bu yöntemle fonksiyona kadar ilerler.

Module nyp

    Sub Main()
        Dim kare As Integer = KareAl(5)
        Console.WriteLine("5'in karesi {0} :", kare)
        Console.ReadLine()
    End Sub

    Function KareAl(ByVal KaresiAlinacakSayi As Byte) As Byte
        KareAl = KaresiAlinacakSayi * KaresiAlinacakSayi
        Console.WriteLine("Kare Al Fonksiyonu Çalisti !")
    End Function

End Module

Yordamlar, birer kapsama alani (spoce) ifade ettikleri için, alanlari içinde tanimlanmis bir degiskene disaridan erisilemez. Yordamlarin disinda tanimlanmis degiskenlere genel, yordamlarin içinde tanimlanmis degiskenlere yerel degiskenler denir. Asagidaki örnekte Fn1() içinde x ve y degiskenleri kullanilmistir. X genel bir degisken, y ise yerel degisken Fn1() yordami ait yerel bir degisken oldugu için baska yordam x’se erisebilirken y’ye erisimezler. Çünki y degiskenin geçerlilik alan Fn1() ile sinirlidir.

Module nyp

    Function Fn1(ByVal X As Byte) As Byte
        'Yapacagi islemler
    End Function

End Module

Yerel degiskenler bellegin yigin (stack) alani üzerinde depolanir. Ayrica çöp toplama (garbage collection) konusunda bahsedildigi gibi bir degisken kendi sahasindan çiktiktan sonra bellekten silinir. Yani yerel degiskenler içinde bulunduklari yordam islendikten sonra bellekten kaldirilir. Fn1() yordami sonlandiktan sonra y degiskeni silinmis olur.

1-f Parametreler

Yordamlarda kullanilmak üzere disardan aldiklari verilere parametre denilmisti. Veriler, yordamlara parametre araciligiyla aktarilir. Parametreler, önceki örneklerde oldugu gibi yordam isimlerinin yanina parantez içinde tanimlanir. Yordam çagrildigi zaman parametre sayisi kadar deger girilmelidir. Parametreler, birer degisken olduklari için parametrelerin türüne dikkat edilmelidir.

Bir yordamda virgülle ayrilarak birden fazla parametre tanimlanabilir. Parametrelere deger girmek zorunlu olmakla birlikte VB.NET’te seçmeli parametre birdirme imkanida vardir. Istege bagli parametreler optional sözcügüyle bildiririlir; bu parametrelere yordam tanimlanirken varsayilan (default) bir deger atanir. Kullanici bu parametreye isterse deger göndermeyebilir; bu durumda tanimlanmis varsayilan deger geçerli olur. Asagidaki örnekte Kod ve Ad isimlerinde iki tane parametresi olan Selam() yordami tanimlanmistir. Ad parametresi seçimlik bir parametredir. Main() yordaminda Selam() yordami iki sekilde kullanilmistir.

Module nyp

    Sub Main()
        Selam(255)
        Selam(255, "Okan Düzgün")
        Console.ReadLine()
    End Sub

    Sub Selam(ByVal Kod As Byte, Optional ByVal isim As String = "Deger girilmedi !")
        Console.WriteLine("Merhaba {0} ---- Kodunuz : {1}", isim, Kod)
    End Sub

End Module

Fonksiyonlar için de ayni sekilde kullanabilecegimiz bu seçmeli parametre yapisinda, dikkat edilmesi gereken nokta, seçmeli olacak parametlerin, listenin sonuna deklare edilmesi gereklidir. Yani seçmeli bir parametrenin arkasinada yine seçmeli bir paremetre olmak zorundadir. 

Sub Selam(ByVal Kod As Byte, Optional ByVal isim As String = "Deger girilmedi !", Optional ByVal isim As String = "Deger girilmedi !")

End Sub

1-g Deger ve Referans yoluyla parametre aktarmak

Bir argümani, parametre olarak bir yordama gönderdigimiz de o parametrenin deger tipinden mi yoksa referans tipinden mi oldugunu gönderilen argüman açisindan önemli rol oynar. Su ana kadar isledigimiz örneklerde parametreleri deger tipi olarak tanimladik. Ön deger olarak bu sekilde olan parametrelere Byval sözcügüyle deklara edilir. Bu türde tanimlanmis parametreler üzerinde yapilan degisklikler, gönderilen argümani etkilemez. Çünkü yordama, degiskenin kendisi degil kopyasi olusturulup gönderilir.

Verecegimiz örnekte degeri 3 olan x argümani islem() yordamina parametre olarak gönderilmis. Bu yordam parametrenin degerini 10 artirarak parametrenin degerini degistirmektedir. X argümani yordama gönderildikten sonra degeri yeniden okundugunda degerinin degismedigini görmekteyiz.

Module nyp

    Sub Main()
        Dim x As Byte = 3
        Console.WriteLine("X'in yordam öncesi degeri : {0}", x)
        islem(x)
        Console.WriteLine("X'in yordam sonrasi degeri : {0}", x)
        Console.ReadLine()
    End Sub

    Sub islem(ByVal y As Byte)
        y += 10
    End Sub

End Module

Görüldügü gibi islem() yordaminin y üzerindeki degikligi x argümanini degistirmemistir. Çünki islem() yordamina x’ adresi degil o adresteki degeri gönderilir. Bazi durumlarda bunun tersine ihtiyacimiz olur. Yani islem() içindeki degisikligin gönderilen argümani etkilemesini isteriz. Bunun için x argümanini deger türü olarak degil, referans türü olarak yordama göndermemiz gerekmektedir. Yani yordama x’sin degerini degil x’sin adresini gönderecegiz. Bu durumda yordam içerisinde degisken üzerinde yapilacak bir degisiklik, degiskenin aslini etkileyecektir. Bu amaçla ByRef sözcügü kullanilir. Parametreler bu sözcükle bildirilir ve argümanlar bilinen sekilde yordamlara gönderilir. Yukaridaki örnegi x degiskenini referens türü olarak gönderdigimizde yordam çikisinda degerinin degistigini görürüz.

Module nyp

    Sub Main()
        Dim x As Byte = 3
        Console.WriteLine("X'in yordam öncesi degeri : {0}", x)
        islem(x)
        Console.WriteLine("X'in yordam sonrasi degeri : {0}", x)
        Console.ReadLine()
    End Sub

    Sub islem(ByRef y As Byte)
        y += 10
    End Sub

End Module

Argümanlar, deger türü olarak parametrelere atandigi zaman kendilerinde bir kopya olusturulur ve yordamlara öyle gönderilir. Fakat referans türü olarak gönderilirse argümanin degeri kopyalanmaz dogrudan bellekteki adresi üzerinde degisiklik yapilir.

Yordamlara gönderilen parametreler de yordamin yerel degiskenleri sayildigi için hafizanin yigin birimi üzerinde toplanir. Fakat bu parametreler, ByRef deyimiyle nitelendirilmisse yordamdaki yerel degiskenlerle ayni bölümde degil, yordamin çagrildigi alandaki degiskenlerle ayni bölümde saklanir.

  • 0
  • 1118
  • 0

- BUNLARIDA GÖZDEN GEÇİREBİLİRSİNİZ -

HENÜZ YORUM YAPILMAMIŞ !

Yorum yazın

HAKKIMDA

KONULARI TAKİP EDİN

SOSYAL AĞLAR

  • Mesajınızı Gonderin