Junior
Принсипҳои барномасозии объектӣ-баҳоӣ чистанд?
sobes.tech AI
Ҷавоб аз AI
Принципҳои OOP:
-
Инкапсулятсия: Иҷрои ҳамгироии маълумот (хусусиятҳо) ва методҳо, ки бо ин маълумот кор мекунанд, дар як объект ва пинҳон кардани иҷрои дохилӣ аз олами беруна. Дастрасӣ ба маълумот тавассути интерфейсҳои умумӣ (методҳо).
// Пинҳон кардани иҷрои дохилии хусусияти balance class Account { private var balance: Double = 0.0 func deposit(amount: Double) { if amount > 0 { balance += amount } } func getBalance() -> Double { return balance } } -
Наследият: Механизми, ки имкон медиҳад, ки синфи нав (ҳомил) бар асоси синфи мавҷуда (падари) сохта шавад, бо мерос гирифтани хусусиятҳо ва методҳо. Ин кӯмак мекунад, ки коди такроршаванда истифода шавад.
// Синфҳои Dog ва Cat мерос мегиранд хусусиятҳо ва методҳои синфи Animal class Animal { let name: String init(name: String) { self.name = name } func makeSound() { print("\(name) садо медиҳад") } } class Dog: Animal { override func makeSound() { print("\(name) меояд") } } class Cat: Animal { override func makeSound() { print("\(name) мяука") } } -
Полиморфизм: Имконият, ки объектҳои класи гуногун метавонанд ба як паём (дархост кардани метод) ҷавобҳои гуногун диҳанд, вобаста ба навъи худ.
// Иҷрои гуногун дар методи makeSound() дар класи Dog ва Cat func playSound(of animal: Animal) { animal.makeSound() // Дақиқии полиморфӣ } let myDog = Dog(name: "Бобик") let myCat = Cat(name: "Мурка") playSound(of: myDog) // Натиҷа "Бобик меояд" playSound(of: myCat) // Натиҷа "Мурка мяука" -
Абстраксия: Ҷудо кардани хусусиятҳои муҳим ва номуайянро нодида гирифтан. Таҳия кардани тасаввуроти умумӣ дар бораи объектҳо.
// Тасаввурот дар бораи фигураи геометрӣ бе иҷрои мушаххас protocol Shape { func calculateArea() -> Double func calculatePerimeter() -> Double } // Иҷрои мушаххас барои давр ва чоркунҷа struct Circle: Shape { let radius: Double func calculateArea() -> Double { return Double.pi * radius * radius } func calculatePerimeter() -> Double { return 2 * Double.pi * radius } } struct Square: Shape { let side: Double func calculateArea() -> Double { return side * side } func calculatePerimeter() -> Double { return 4 * side } }