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:

// 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) ")

Natija:

Name: Mountain Bike, Gears: 11

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:

// 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)")

Natija:

Employee ID: 1001
Employee ID: 1002

Class ichida funksiya (method)

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

Misol:

// 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()

Natija:

Xona maydoni = 1309.0

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:

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)")

Natija:

Name: BMX Bike and Gear: 2

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.

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.

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.