11-bo‘lim

Sinflar va obyektlar

Class e'lon qilish, Property va uning to'liq shakli, konstruktor Sub New, Me kalit so'zi, Shared a'zolar va ToString ni qayta yozish.

🕑 11 daqiqa o‘qish 📄 503 so‘z 👁 0 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. Birinchi sinf
  2. Konstruktor
  3. Bir necha konstruktor
  4. Metodlar
  5. Xossaning to'liq shakli
  6. Faqat o'qiladigan xossa
  7. Shared a'zolar
  8. ToString ni qayta yozish
  9. Obyekt - havola turi
  10. Xulosa

Sinf - o'z ma'lumoti va xatti-harakatiga ega bo'lgan yangi tur. Obyekt esa - shu sinfdan yasalgan aniq nusxa.

Birinchi sinf #

VB
Public Class Talaba
    Public Property Ism As String
    Public Property Yosh As Integer
    Public Property Ball As Integer
End Class

Module Dastur
    Sub Main()
        Dim t As New Talaba()
        t.Ism = "Malika"
        t.Yosh = 22
        t.Ball = 88

        Console.WriteLine($"{t.Ism}, {t.Yosh} yosh, {t.Ball} ball")
    End Sub
End Module
Natija
Malika, 22 yosh, 88 ball

Public Property Ism As String - bu avtomatik xossa. VB o'zi yashirin maydon yaratadi va o'qish-yozishni ta'minlaydi.

Konstruktor #

Har safar uchta qatorni yozish zerikarli. Sub New buni hal qiladi:

VB
Public Class Talaba
    Public Property Ism As String
    Public Property Yosh As Integer

    Public Sub New(ism As String, yosh As Integer)
        Me.Ism = ism
        Me.Yosh = yosh
    End Sub
End Class

Module Dastur
    Sub Main()
        Dim a As New Talaba("Nodira", 21)
        Dim b As New Talaba("Husanboy", 25)

        Console.WriteLine($"{a.Ism} - {a.Yosh}")
        Console.WriteLine($"{b.Ism} - {b.Yosh}")
    End Sub
End Module
Natija
Nodira - 21
Husanboy - 25

Me - "shu obyektning o'zi" degani. Me.Ism = ism da chapdagi - xossa, o'ngdagi - parametr. Ularning nomi bir xil bo'lgani uchun Me ni yozish shart.

Bir necha konstruktor #

VB
Public Class Kitob
    Public Property Nom As String
    Public Property Muallif As String
    Public Property Yil As Integer

    Public Sub New(nom As String)
        Me.New(nom, "noma'lum", 0)
    End Sub

    Public Sub New(nom As String, muallif As String, yil As Integer)
        Me.Nom = nom
        Me.Muallif = muallif
        Me.Yil = yil
    End Sub
End Class

Module Dastur
    Sub Main()
        Dim k1 As New Kitob("O'tkan kunlar", "Abdulla Qodiriy", 1926)
        Dim k2 As New Kitob("Daftar")

        Console.WriteLine($"{k1.Nom} / {k1.Muallif} / {k1.Yil}")
        Console.WriteLine($"{k2.Nom} / {k2.Muallif} / {k2.Yil}")
    End Sub
End Module
Natija
O'tkan kunlar / Abdulla Qodiriy / 1926
Daftar / noma'lum / 0

Me.New(...) - bitta konstruktordan boshqasini chaqirish usuli. Kod takrorlanmaydi.

Metodlar #

VB
Public Class Hisob
    Public Property Egasi As String
    Private _qoldiq As Decimal

    Public Sub New(egasi As String, boshlangich As Decimal)
        Me.Egasi = egasi
        _qoldiq = boshlangich
    End Sub

    Public Sub Qoshish(summa As Decimal)
        If summa <= 0 Then
            Console.WriteLine("Summa musbat bo'lishi kerak")
            Exit Sub
        End If
        _qoldiq += summa
    End Sub

    Public Function Yechish(summa As Decimal) As Boolean
        If summa > _qoldiq Then
            Return False
        End If
        _qoldiq -= summa
        Return True
    End Function

    Public Function Qoldiq() As Decimal
        Return _qoldiq
    End Function
End Class

Module Dastur
    Sub Main()
        Dim h As New Hisob("Husanboy", 500000D)

        h.Qoshish(250000D)
        Console.WriteLine(h.Qoldiq())

        Console.WriteLine(h.Yechish(100000D))
        Console.WriteLine(h.Yechish(9000000D))
        Console.WriteLine(h.Qoldiq())

        h.Qoshish(-5)
    End Sub
End Module
Natija
750000
True
False
650000
Summa musbat bo'lishi kerak

_qoldiq maydoni Private - unga tashqaridan tegib bo'lmaydi. Pulni faqat Qoshish va Yechish orqali o'zgartirish mumkin va ular qoidalarni tekshiradi.

Maydonni yashiring, xossani oching

Bu inkapsulyatsiya deb ataladi va obyektga yo'naltirilgan dasturlashning asosiy g'oyasi.

Agar _qoldiq Public bo'lganda, har kim h._qoldiq = -999999 deb yozib, hisobni buzib qo'yishi mumkin edi. Yashirilgan maydon esa faqat siz yozgan qoidalar orqali o'zgaradi.

VB da yashirin maydon nomini _ bilan boshlash odat tusiga kirgan.

Xossaning to'liq shakli #

Qiymatni tekshirish kerak bo'lsa, avtomatik xossa o'rniga to'liq shakli yoziladi:

VB
Public Class Mahsulot
    Private _narx As Decimal

    Public Property Narx As Decimal
        Get
            Return _narx
        End Get
        Set(qiymat As Decimal)
            If qiymat < 0 Then
                _narx = 0
            Else
                _narx = qiymat
            End If
        End Set
    End Property
End Class

Module Dastur
    Sub Main()
        Dim m As New Mahsulot()

        m.Narx = 15000D
        Console.WriteLine(m.Narx)

        m.Narx = -500D
        Console.WriteLine(m.Narx)
    End Sub
End Module
Natija
15000
0

Manfiy narx berilganda xossa uni 0 ga aylantirdi. Tashqaridan qaraganda bu oddiy o'zgaruvchidek ko'rinadi, aslida esa ichida tekshiruv bor.

Faqat o'qiladigan xossa #

VB
Public Class Odam
    Public Property Ism As String
    Public Property Familiya As String

    Public ReadOnly Property ToliqIsm As String
        Get
            Return $"{Familiya} {Ism}"
        End Get
    End Property
End Class

Module Dastur
    Sub Main()
        Dim o As New Odam With {.Ism = "Dilnoza", .Familiya = "Yusupova"}
        Console.WriteLine(o.ToliqIsm)
    End Sub
End Module
Natija
Yusupova Dilnoza

ReadOnly Property - har chaqirilganda hisoblanadi, saqlanmaydi. With {.Ism = ..., ...} - obyekt yaratishda bir nechta xossani birdaniga to'ldirish shakli.

Shared a'zolar #

VB
Public Class Hisoblagich
    Public Shared Soni As Integer = 0
    Public Property Nom As String

    Public Sub New(nom As String)
        Me.Nom = nom
        Soni += 1
    End Sub

    Public Shared Function Tavsif() As String
        Return $"Jami yaratilgan: {Soni}"
    End Function
End Class

Module Dastur
    Sub Main()
        Dim a As New Hisoblagich("birinchi")
        Dim b As New Hisoblagich("ikkinchi")
        Dim c As New Hisoblagich("uchinchi")

        Console.WriteLine(Hisoblagich.Soni)
        Console.WriteLine(Hisoblagich.Tavsif())
        Console.WriteLine(c.Nom)
    End Sub
End Module
Natija
3
Jami yaratilgan: 3
uchinchi

Shared a'zo obyektga emas, sinfning o'ziga tegishli. Shuning uchun u Hisoblagich.Soni deb chaqiriladi, a.Soni deb emas.

ToString ni qayta yozish #

VB
Public Class Nuqta
    Public Property X As Integer
    Public Property Y As Integer

    Public Sub New(x As Integer, y As Integer)
        Me.X = x
        Me.Y = y
    End Sub

    Public Overrides Function ToString() As String
        Return $"({X}, {Y})"
    End Function
End Class

Module Dastur
    Sub Main()
        Dim n As New Nuqta(3, 7)
        Console.WriteLine(n)
        Console.WriteLine($"Nuqta: {n}")

        Dim royxat As New List(Of Nuqta) From {
            New Nuqta(1, 1), New Nuqta(2, 4)
        }
        Console.WriteLine(String.Join(" ", royxat))
    End Sub
End Module
Natija
(3, 7)
Nuqta: (3, 7)
(1, 1) (2, 4)

ToString ni qayta yozmasangiz, Console.WriteLine(n) sinf nomini chiqaradi - bu foydasiz. Har bir ma'lumot saqlaydigan sinf uchun uni yozish yaxshi odat.

Obyekt - havola turi #

VB
Public Class Quti
    Public Property Ichi As String
End Class

Module Dastur
    Sub Main()
        Dim a As New Quti With {.Ichi = "olma"}
        Dim b As Quti = a

        b.Ichi = "anor"

        Console.WriteLine(a.Ichi)
        Console.WriteLine(b.Ichi)
        Console.WriteLine(a Is b)
    End Sub
End Module
Natija
anor
anor
True
Obyektni nusxalash uchun = yetarli emas

Dim b = a yangi obyekt yaratmaydi - ikkala nom ham bitta obyektga ishora qiladi. Massivlardagi vaziyatning aynan o'zi.

Haqiqiy nusxa kerak bo'lsa, uni o'zingiz yasashingiz kerak: yangi obyekt yaratib, xossalarni ko'chirish.

a Is b - ikkalasi ayni bir obyektmi degan savolga javob beradi.

Amaliy topshiriq
  1. Kitob sinfini yarating: nom, muallif, yil xossalari bilan.
  2. Unga konstruktor qo'shing.
  3. Ikkita konstruktor yozib, birini Me.New bilan chaqiring.
  4. Talaba sinfiga Ball xossasini 0-100 oralig'ida cheklang.
  5. ReadOnly Property bilan to'liq ismni qaytaring.
  6. With {...} shakli bilan obyekt yarating.
  7. Yaratilgan obyektlar sonini Shared maydon bilan sanang.
  8. ToString ni qayta yozib, Console.WriteLine(obyekt) ni sinang.
  9. Ikkita o'zgaruvchi bitta obyektga ishora qilishini isbotlang.
  10. Obyektning haqiqiy nusxasini yasaydigan metod yozing.

Xulosa #

  • Sinf Public Class ... End Class bilan e'lon qilinadi.
  • Public Property Ism As String - avtomatik xossa, eng qisqa yo'l.
  • Konstruktor - Sub New; Me.New(...) bilan boshqasini chaqirish mumkin.
  • Me - joriy obyekt; parametr va xossa nomi bir xil bo'lganda shart.
  • Maydonni Private qiling, kirishni xossa orqali bering - inkapsulyatsiya.
  • Xossaning to'liq shakli Get/Set bilan tekshiruv qo'shish imkonini beradi.
  • Shared a'zo sinfga tegishli, obyektga emas.
  • ToString ni qayta yozing - WriteLine va Join shuni ishlatadi.
  • Obyekt - havola turi: b = a nusxa yaratmaydi.

Keyingi bo'limda vorislik va interfeyslarni ko'ramiz.

Xatolik topdingizmi?

Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.