Published on

Swiftda Class va Obyekt

Authors

Swift ham obyektga yo'naltirilgan dasturlash tilidir. Boshqa OOP tillari kabi, u ham obyektlar va classlar tushunchalarini qo'llab-quvvatlaydi.

Obyekt β€” bu ma'lumotlar (o'zgaruvchilar) va metodlar (funksiyalar) to'plami.
Class esa β€” obyekt uchun chizma (shablon) hisoblanadi.

Obyektlarni o'rganishdan oldin, swiftdagi classlar bilan tanishamiz.

Classes

Class β€” obyektlarning chizmasi hisoblanadi. Uni uy chizmasiga o'xshatish mumkin: unda pol, eshik, derazalar haqida ma'lumot bo'ladi. Shu chizma asosida uy quriladi β€” uy obyekt bo'ladi.

Bitta chizmadan juda ko'p uy qurish mumkin. Xuddi shu kabi, classdan ko'plab obyektlar yaratish mumkin.

Class e'lon qilish

Swiftda class yaratish uchun class kalit so'zi ishlatiladi:

class ClassName {
  // class ta'rifi
}

Misol:

class Bike {

  var name = ""
  var gear = 0
}

Bu yerda:

  • Bike β€” class nomi
  • name/gear β€” class ichidagi o'zgaruvchilar, mos ravishda "" va 0 bilan boshlanadi

Class ichidagi o'zgaruvchi va konstantalar property deb ataladi.

Objects

Obyekt β€” classning namunasi (instance).

Agar Bike β€” class bo'lsa, undan bike1, bike2 kabi obyektlar yaratish mumkin.

Sintaksis:

var objectName = ClassName()

Misol:

// class yaratish
class Bike {

  var name = ""
  var gears = 0
}

// classdan obyekt yaratish
var bike1 = Bike()

bike1 β€” bu classning obyekti. Endi biz bu obyekt orqali class property'lariga murojaat qilishimiz mumkin.

Obyekt orqali class Property'larini olish

Property'larni olish/o'zgartirish uchun . (nuqta) ishlatiladi:

// name property'sini o'zgartirish
bike1.name = "Mountain Bike"

// gears property'sini olish
bike1.gears

Misol:

Swift
Property'larga murojaat
// class e'lon qilish class Bicycle { // ikkita property e'lon qilish var name = "" var gears = 0 } // classdan obyekt yaratish var bike1 = Bicycle() // property'larni o'zgartirish bike1.gears = 11 bike1.name = "Mountain Bike" print("Name: \(bike1.name), Gears: \(bike1.gears)")

Bu yerda:

  • Bicycle classi yaratildi
  • bike1 obyekt yaratildi
  • Property'lar . notation orqali o'zgartirildi

Classdan bir necha obyekt yaratish

Classdan xohlagancha ko'p obyekt yaratish mumkin:

Swift
Bir necha obyekt yaratish
// class yaratish class Employee { // property e'loni var employeeID = 0 } // ikkita obyekt yaratish var employee1 = Employee() var employee2 = Employee() // employee1 orqali property'ga murojaat qilish employee1.employeeID = 1001 print("Employee ID: \(employee1.employeeID)") // employee2 orqali property'ga murojaat qilish employee2.employeeID = 1002 print("Employee ID: \(employee2.employeeID)")

Class ichida funksiya (method)

Class ichida funksiya yozish ham mumkin. Class ichidagi funksiyalar method deb ataladi.

Misol:

Swift
Class ichida Method
// class yaratish class Room { var length = 0.0 var breadth = 0.0 // maydon (area) hisoblash metodi func calculateArea() { print("Xona maydoni =", length * breadth) } } // obyekt yaratish var studyRoom = Room() // property'larga qiymat berish studyRoom.length = 42.5 studyRoom.breadth = 30.8 // metodni chaqirish studyRoom.calculateArea()

Bu yerda:

  • length va breadth β€” property'lar
  • calculateArea() β€” metod
  • studyRoom β€” obyekt
  • .calculateArea() β€” metod chaqirilishi

Initializer

Oldin property'ga default qiymat berilgan edi:

class Bike {
  var name = ""
}

var bike = Bike()

Initializerni ishlatib, property'ga qiymatlarni obyekt yaratilayotganda berish mumkin:

class Bike {
  
  var name: String

  init(name: String){
    self.name = name
  }
}

Bu yerda:

  • init() β€” initializer
  • self.name β€” obyektning o'z property'si

Obyekt yaratish:

var bike1 = Bike(name: "Mountain Bike")

Misol:

Swift
Initializer ishlatish
class Bike { // default qiymatsiz property'lar var name: String var gear: Int // initializer orqali qiymat berish init(name: String, gear: Int){ self.name = name self.gear = gear } } // obyekt yaratish var bike1 = Bike(name: "BMX Bike", gear: 2) print("Name: \(bike1.name) and Gear: \(bike1.gear)")

Struct va Class

Har ikkisi o'xshash bo'lsa-da, orasida farqlar bor.

1. Inheritance (Meros olish)

  • Class β€” obyektga yo'naltirilgan tushuncha bo'lgani uchun meros olish (inheritance) imkoniyatini beradi.
  • Struct β€” meros olishni qo'llab-quvvatlamaydi.

2. Reference type va Value type

Class β†’ reference type

Bitta obyektga o'zgartirish kiritsangiz, boshqa nusxalarda ham o'zgaradi.

Swift
Class - Reference Type
class Bike { var color: String init(color: String) { self.color = color } } var bike1 = Bike(color: "Blue") var bike2 = bike1 bike1.color = "Red" print(bike2.color) // Red chiqaradi

bike2 ham o'zgardi, chunki ikkalasi bir obyektni ko'rsatadi.

Struct β†’ value type

Har bir obyekt o'zining mustaqil nusxasiga ega.

Swift
Struct - Value Type
struct Bike { var color: String init(color: String) { self.color = color } } var bike1 = Bike(color: "Blue") var bike2 = bike1 bike1.color = "Red" print(bike2.color) // Blue chiqaradi

Bu holatda bike2 o'zgarmadi.


Birinchi masalaning yechimi

Keling, birinchi masala "Oddiy class yaratish" ni birga yechib ko'ramiz:

1-qadam: Masalani tushunish

Book classini yarating:

  • title va author property'lari
  • Initializer orqali qiymat bering
  • getInfo() methodi String qaytarsin

2-qadam: Yechim algoritmi

  1. Initializer yozamiz - property'larga qiymat beramiz
  2. getInfo() methodini yozamiz - String qaytaradi

3-qadam: Kodni yozamiz

Swift
Book class yechimi
class Book { var title: String var author: String init(title: String, author: String) { self.title = title self.author = author } func getInfo() -> String { return "Kitob: \(title), Muallif: \(author)" } } // Test let book1 = Book(title: "Swift dasturlash", author: "Ali") print(book1.getInfo()) let book2 = Book(title: "Python", author: "Vali") print(book2.getInfo())

Natija: Book classini yaratdik, initializer va getInfo() methodini to'g'ri yozdik!

Buy mea coffee