Neler yeni

Yazılım Forum

Tüm özelliklerimize erişmek için şimdi bize katılın. Kayıt olduktan ve giriş yaptıktan sonra konu oluşturabilecek, mevcut konulara yanıt gönderebilecek, itibar kazanabilecek, özel mesajlaşmaya erişebilecek ve çok daha fazlasını yapabileceksiniz! Bu hizmetlerimiz ise tamamen ücretsiz ve kurallara uyulduğu sürece sınırsızdır, o zaman ne bekliyorsunuz? Hadi, sizde aramıza katılın!

VB.NET'te Nesne Tabanlı Sınıflar: Kapsamlı Bir Rehber

Giriş: Nesne Tabanlı Programlamanın Temelleri ve VB.NET Sınıfları

Nesne Tabanlı Programlama (OOP), modern yazılım geliştirmenin temel taşlarından biridir. Visual Basic .NET (VB.NET), bu paradigmayı tam olarak destekleyen güçlü bir dildir. OOP, gerçek dünyadaki varlıkları modelleyerek yazılımı daha anlaşılır, yönetilebilir ve yeniden kullanılabilir hale getirmeyi amaçlar. Temel olarak, her şeyin bir nesne olduğu ve bu nesnelerin belirli özelliklere (veri) ve davranışlara (metotlar) sahip olduğu bir yaklaşımdır.

"Nesneler, gerçek dünyadaki varlıkların veya soyut kavramların yazılımdaki soyut temsilidir. Her nesne, bir sınıfın bir örneğidir."

Bir sınıf, nesnelerin bir şablonu veya blueprint'idir. Bir araba fabrikasındaki araba kalıbı gibi düşünebilirsiniz; kalıp (sınıf) tektir, ancak ondan yüzlerce araba (nesne) üretilebilir. VB.NET'te sınıflar, karmaşık programları organize etmenin ve farklı bileşenler arasındaki etkileşimi tanımlamanın ana yoludur. Sınıflar sayesinde kod tekrarı azalır, bakım kolaylaşır ve büyük projeler daha sürdürülebilir hale gelir.

Peki neden sınıfları kullanmalıyız?
  • Kapsülleme (Encapsulation): Veriyi ve bu veri üzerinde çalışan metotları tek bir birimde bir araya getirerek dışarıdan doğrudan erişimi kısıtlar. Bu, verinin bütünlüğünü korur ve programın daha güvenli olmasını sağlar.
  • Kalıtım (Inheritance): Var olan bir sınıftan (temel sınıf) yeni sınıflar (türetilmiş sınıf) oluşturarak kod tekrarını önler ve yeni işlevsellik eklemeyi kolaylaştırır.
  • Çok Biçimlilik (Polymorphism): Farklı sınıflardaki nesnelerin aynı arayüz üzerinden farklı davranışlar sergileyebilmesini sağlar. Bu, kodun esnekliğini ve genişletilebilirliğini artırır.
  • Soyutlama (Abstraction): Yalnızca gerekli bilgileri gösterip, gereksiz ayrıntıları gizleyerek karmaşıklığı azaltır.

VB.NET Sınıf Tanımlama ve Temel Yapısı

VB.NET'te bir sınıf tanımlamak oldukça basittir. `Class` anahtar kelimesi ile başlar ve `End Class` ile biter.

Kod:
Public Class Calisan
    ' Sınıf Üyeleri (Alanlar, Özellikler, Metotlar) buraya gelir
End Class

Bu örnekte, `Calisan` adında boş bir sınıf tanımlanmıştır. Şimdi bu sınıfın içerisine üyeler ekleyelim.

Sınıf Üyeleri: Alanlar, Özellikler ve Metotlar

1. Alanlar (Fields): Bir sınıfın veri depolayan değişkenleridir. Genellikle `Private` olarak tanımlanır ve özellikler (properties) aracılığıyla dışarıya açılır.

Kod:
    Public Class Musteri
        Private _musteriAdi As String
        Private _musteriId As Integer
    End Class

2. Özellikler (Properties): Alanlara güvenli bir şekilde erişmek ve onları değiştirmek için kullanılan özel metotlardır. Get ve Set bloklarından oluşur.

Kod:
    Public Class Urun
        Private _fiyat As Decimal
        Public Property Fiyat As Decimal
            Get
                Return _fiyat
            End Get
            Set(value As Decimal)
                If value >= 0 Then
                    _fiyat = value
                Else
                    Throw New ArgumentException("Fiyat negatif olamaz.")
                End If
            End Set
        End Property

        Private _urunAdi As String
        ' Otomatik uygulanan özellik (auto-implemented property)
        Public Property UrunAdi As String
    End Class

Yukarıdaki `Fiyat` özelliği, değer atanırken bir kontrol yapmaktadır, bu da kapsüllemeye bir örnektir. `UrunAdi` ise daha modern ve kısa bir tanımlama olan otomatik uygulanan özelliktir.

3. Metotlar (Methods): Bir sınıfın davranışlarını tanımlayan işlevlerdir. `Sub` (değer döndürmeyen) veya `Function` (değer döndüren) olarak tanımlanır.

Kod:
    Public Class Hesap
        Private _bakiye As Decimal = 0

        Public Sub ParaYatir(miktar As Decimal)
            If miktar > 0 Then
                _bakiye += miktar
                Console.WriteLine($"Hesabınıza {miktar} TL yatırıldı. Yeni bakiye: {_bakiye} TL")
            End If
        End Sub

        Public Function ParaCek(miktar As Decimal) As Boolean
            If miktar > 0 AndAlso _bakiye >= miktar Then
                _bakiye -= miktar
                Console.WriteLine($"Hesabınızdan {miktar} TL çekildi. Yeni bakiye: {_bakiye} TL")
                Return True
            Else
                Console.WriteLine("Yetersiz bakiye veya geçersiz miktar.")
                Return False
            End If
        End Function

        Public Function BakiyeGoster() As Decimal
            Return _bakiye
        End Function
    End Class

Yapıcı Metotlar (Constructors): `Sub New`

Bir sınıfın yeni bir örneği (nesnesi) oluşturulduğunda otomatik olarak çalışan özel metotlardır. Sınıfın başlangıç durumunu ayarlamak için kullanılırlar. VB.NET'te `Sub New` olarak tanımlanır. Birden fazla yapıcı metot (aşırı yüklenmiş - overloaded) tanımlanabilir.

Kod:
Public Class Ogrenci
    Public Property Ad As String
    Public Property Soyad As String
    Public Property OgrenciNo As Integer

    ' Parametresiz yapıcı metot
    Public Sub New()
        Console.WriteLine("Yeni bir öğrenci nesnesi oluşturuldu (parametresiz).")
        Me.Ad = "Bilinmiyor"
        Me.Soyad = "Bilinmiyor"
        Me.OgrenciNo = 0
    End Sub

    ' Parametreli yapıcı metot
    Public Sub New(ad As String, soyad As String, ogrenciNo As Integer)
        Console.WriteLine($"Yeni bir öğrenci nesnesi oluşturuldu ({ad}).")
        Me.Ad = ad
        Me.Soyad = soyad
        Me.OgrenciNo = ogrenciNo
    End Sub

    Public Sub BilgileriGoster()
        Console.WriteLine($"Öğrenci: {Me.Ad} {Me.Soyad}, No: {Me.OgrenciNo}")
    End Sub
End Class

Kullanımı:
Kod:
Dim ogrenci1 As New Ogrenci() ' Parametresiz yapıcı çağrılır
ogrenci1.BilgileriGoster()

Dim ogrenci2 As New Ogrenci("Ayşe", "Yılmaz", 123) ' Parametreli yapıcı çağrılır
ogrenci2.BilgileriGoster()

Yıkıcı Metotlar (Destructors): `Finalize`

.NET ortamında, bellek yönetimi otomatik olarak Çöp Toplayıcı (Garbage Collector - GC) tarafından yapılır. Bu nedenle, yıkıcı metotlara (Visual Basic'te `Finalize` olarak bilinen) genellikle ihtiyaç duyulmaz. Ancak, yönetilmeyen kaynakları (dosya tanıtıcıları, veritabanı bağlantıları vb.) serbest bırakmak gerektiğinde kullanılabilirler. `IDisposable` arayüzü ve `Using` ifadesi genellikle daha iyi bir yaklaşımdır.

Kod:
Protected Overrides Sub Finalize()
    Try
        ' Kaynakları serbest bırakma kodları buraya gelir
        Console.WriteLine("Nesne sonlandırılıyor...")
    Finally
        MyBase.Finalize()
    End Try
End Sub

Kalıtım (Inheritance) ile Kod Tekrarını Azaltma

Kalıtım, var olan bir sınıftan özelliklerini ve davranışlarını miras alarak yeni bir sınıf oluşturma mekanizmasıdır. `Inherits` anahtar kelimesi kullanılır.

Kod:
Public Class Kisi
    Public Property Ad As String
    Public Property Soyad As String

    Public Sub New(ad As String, soyad As String)
        Me.Ad = ad
        Me.Soyad = soyad
    End Sub

    Public Overridable Sub Selamla()
        Console.WriteLine($"Merhaba, ben {Ad} {Soyad}.")
    End Sub
End Class

Public Class Ogretmen
    Inherits Kisi ' Kisi sınıfından miras alır
    Public Property Brans As String

    Public Sub New(ad As String, soyad As String, brans As String)
        MyBase.New(ad, soyad) ' Temel sınıfın yapıcısını çağırır
        Me.Brans = brans
    End Sub

    Public Overrides Sub Selamla()
        Console.WriteLine($"Merhaba, ben {Ad} {Soyad}, branşım {Brans}.")
    End Sub
End Class

Kullanım örneği:
Kod:
Dim kisi1 As New Kisi("Ali", "Can")
kisi1.Selamla()

Dim ogretmen1 As New Ogretmen("Ayşe", "Demir", "Matematik")
ogretmen1.Selamla() ' Türetilmiş sınıftaki overridden metot çağrılır

Burada `Ogretmen` sınıfı, `Kisi` sınıfının `Ad` ve `Soyad` özelliklerini ve `Selamla` metodunu otomatik olarak alır. Ayrıca kendi `Brans` özelliğini ekler. `Overrides` anahtar kelimesi ile temel sınıftaki `Selamla` metodunu kendine özgü bir şekilde değiştirebiliriz.

Çok Biçimlilik (Polymorphism) ve Arayüzler (Interfaces)

Çok biçimlilik, farklı sınıflardaki nesnelerin aynı metoda çağrılarak farklı davranışlar sergilemesidir. Bu, kalıtım ve arayüzler aracılığıyla sağlanabilir.

Metot Aşırı Yükleme (Method Overloading): Aynı isimde, ancak farklı parametre listelerine sahip metotlar tanımlamaktır.

Kod:
Public Class Hesaplayici
    Public Function Topla(a As Integer, b As Integer) As Integer
        Return a + b
    End Function

    Public Function Topla(a As Decimal, b As Decimal) As Decimal
        Return a + b
    End Function

    Public Function Topla(sayilar() As Integer) As Integer
        Dim toplam As Integer = 0
        For Each sayi In sayilar
            toplam += sayi
        Next
        Return toplam
    End Function
End Class

Metot Geçersiz Kılma (Method Overriding): Temel sınıftaki `Overridable` bir metodu türetilmiş sınıfta `Overrides` ile yeniden tanımlamaktır (yukarıdaki `Selamla` örneği).

Soyut Sınıflar (`MustInherit`) ve Soyut Metotlar (`MustOverride`)

Bazen bir sınıfın doğrudan örneklendirilmesini istemeyiz, sadece başka sınıflar için bir temel görevi görmesini isteriz. Bu durumda soyut sınıflar kullanılır. Bir soyut sınıf, en az bir soyut metot içerebilir ve bu metotların gövdeleri olmaz; türetilmiş sınıflar bu metotları zorunlu olarak uygulamak zorundadır.

Kod:
Public MustInherit Class Sekil
    Public Property Adi As String

    Public Sub New(adi As String)
        Me.Adi = adi
    End Sub

    ' Soyut metot - türetilmiş sınıflar bunu uygulamak zorunda
    Public MustOverride Function AlanHesapla() As Double

    Public Overridable Sub BilgiVer()
        Console.WriteLine($"Bu bir {Adi} şeklidir.")
    End Sub
End Class

Public Class Kare
    Inherits Sekil
    Public Property KenarUzunlugu As Double

    Public Sub New(kenar As Double)
        MyBase.New("Kare")
        Me.KenarUzunlugu = kenar
    End Sub

    Public Overrides Function AlanHesapla() As Double
        Return KenarUzunlugu * KenarUzunlugu
    End Function
End Class

Kullanım:
Kod:
Dim kare1 As New Kare(5)
Console.WriteLine($"Kare alanı: {kare1.AlanHesapla()}")
kare1.BilgiVer()
' Dim sekil As New Sekil() ' Bu satır hata verir çünkü Sekil soyuttur.

Arayüzler (Interfaces): `Interface`

Arayüzler, bir sınıfın sahip olması gereken davranışları (metotlar, özellikler, olaylar) tanımlayan sözleşmelerdir. Bir sınıf bir arayüzü uyguladığında (`Implements`), o arayüzdeki tüm üyeleri sağlamak zorundadır. Tek kalıtım kısıtlamasını aşmanın bir yoludur; bir sınıf birden fazla arayüzü uygulayabilir.

Kod:
Public Interface IHareketEdebilir
    Sub HareketEt()
    Property Hiz As Integer
End Interface

Public Class Araba
    Implements IHareketEdebilir

    Private _hiz As Integer
    Public Property Hiz As Integer Implements IHareketEdebilir.Hiz
        Get
            Return _hiz
        End Get
        Set(value As Integer)
            _hiz = value
        End Set
    End Property

    Public Sub HareketEt() Implements IHareketEdebilir.HareketEt
        Console.WriteLine($"Araba {Hiz} km/s hızla hareket ediyor.")
    End Sub
End Class

Public Class Kus
    Implements IHareketEdebilir

    Private _hiz As Integer
    Public Property Hiz As Integer Implements IHareketEdebilir.Hiz
        Get
            Return _hiz
        End Get
        Set(value As Integer)
            _hiz = value
        End Set
    End Property

    Public Sub HareketEt() Implements IHareketEdebilir.HareketEt
        Console.WriteLine($"Kuş {Hiz} km/s hızla uçuyor.")
    End Sub
End Class

Kullanım:
Kod:
Dim nesneler As New List(Of IHareketEdebilir)
nesneler.Add(New Araba With {.Hiz = 100})
nesneler.Add(New Kus With {.Hiz = 50})

For Each nesne In nesneler
    nesne.HareketEt()
Next

Ortak (Shared) Üyeler

`Shared` anahtar kelimesiyle tanımlanan üyeler, sınıfın kendisiyle ilişkilidir, nesneleriyle değil. Yani, o sınıftan kaç tane nesne oluşturursanız oluşturun, `Shared` üyelerden yalnızca bir kopya bulunur ve tüm nesneler bu tek kopyayı paylaşır. Genellikle yardımcı metotlar veya sabitler için kullanılır.

Kod:
Public Class MatematikselIslemler
    Public Shared ReadOnly PI As Double = 3.14159
    Public Shared Sayac As Integer = 0

    Public Shared Function Topla(a As Integer, b As Integer) As Integer
        Sayac += 1
        Return a + b
    End Function

    Public Shared Sub GosterSayac()
        Console.WriteLine($"Topla metodu {Sayac} kez çağrıldı.")
    End Sub
End Class

Kullanım:
Kod:
Console.WriteLine($"Pi sayısı: {MatematikselIslemler.PI}")
Dim toplam As Integer = MatematikselIslemler.Topla(10, 20)
Console.WriteLine($"Toplam: {toplam}")
MatematikselIslemler.Topla(5, 7)
MatematikselIslemler.GosterSayac()

Sonuç ve Faydaları

VB.NET'te nesne tabanlı sınıflar, yazılım geliştirmede düzeni, modülerliği ve yeniden kullanılabilirliği artıran vazgeçilmez bir araçtır. Kapsülleme, kalıtım, çok biçimlilik ve soyutlama gibi prensipleri uygulayarak daha sağlam, esnek ve bakımı kolay uygulamalar geliştirebilirsiniz. Büyük ve karmaşık projelerde, iyi tasarlanmış sınıflar, geliştirme sürecini hızlandırır ve hataları azaltır. Bu güçlü yapıları anlamak ve doğru bir şekilde uygulamak, her VB.NET geliştiricisinin temel yetkinliklerinden biridir. Daha fazla bilgi ve örnek için Microsoft Visual Basic Belgeleri'ni ziyaret edebilirsiniz.
 
shape1
shape2
shape3
shape4
shape5
shape6
Üst

Bu web sitenin performansı Hazal Host tarafından sağlanmaktadır.

YazilimForum.com.tr internet sitesi, 5651 sayılı Kanun’un 2. maddesinin 1. fıkrasının (m) bendi ve aynı Kanun’un 5. maddesi kapsamında Yer Sağlayıcı konumundadır. Sitede yer alan içerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır.

YazilimForum.com.tr, kullanıcılar tarafından paylaşılan içeriklerin doğruluğunu, güncelliğini veya hukuka uygunluğunu garanti etmez ve içeriklerin kontrolü veya araştırılması ile yükümlü değildir. Kullanıcılar, paylaştıkları içeriklerden tamamen kendileri sorumludur.

Hukuka aykırı içerikleri fark ettiğinizde lütfen bize bildirin: lydexcoding@gmail.com

Sitemiz, kullanıcıların paylaştığı içerik ve bilgileri 6698 sayılı KVKK kapsamında işlemektedir. Kullanıcılar, kişisel verileriyle ilgili haklarını KVKK Politikası sayfasından inceleyebilir.

Sitede yer alan reklamlar veya üçüncü taraf bağlantılar için YazilimForum.com.tr herhangi bir sorumluluk kabul etmez.

Sitemizi kullanarak Forum Kuralları’nı kabul etmiş sayılırsınız.

DMCA.com Protection Status Copyrighted.com Registered & Protected