- Published on
Swiftda Class va Obyekt
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
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
. notationorqali 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()— initializerself.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.