Sobes.tech
Junior

რა არის ობიექტზე ორიენტირებული პროგრამირების პრინციპები?

sobes.tech AI

პასუხი AI-სგან

ობიექტზე მიმართული პრინციპები:

  • კაპსულაცია: მონაცემების (მახასიათებლების) და მათთან მუშაობის მეთოდების გაერთიანება ერთ ობიექტში და შიდა რეალიზაციის დამალვა გარე სამყაროსგან. მონაცემებზე წვდომა ხორციელდება გარკვეული საჯარო ინტერფეისების (მეთოდების) მეშვეობით.

    // ბალანსის თვისების შიდა რეალიზაციის დამალვა
    class Account {
        private var balance: Double = 0.0
    
        func deposit(amount: Double) {
            if amount > 0 {
                balance += amount
            }
        }
    
        func getBalance() -> Double {
            return balance
        }
    }
    
  • მემკვიდრეობა: მექანიზმი, რომელიც საშუალებას აძლევს შექმნას ახალი კლასი (შვილი) არსებული კლასის (მშობლის) საფუძველზე, მემკვიდრეობით მიიღოს მისი თვისებები და მეთოდები. ეს ხელს უწყობს კოდის განმეორებით გამოყენებას.

    // ცხოველების კლასები მემკვიდრეობით იღებენ თვისებებს და მეთოდებს
    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) მiau")
        }
    }
    
  • პოლიმორფიზმი: შესაძლებლობა, სხვადასხვა კლასის ობიექტებმა ერთსა და იმავე შეტყობინებას (მეთოდის გამოძახებას) უპასუხონ განსხვავებულად, მათი ტიპის მიხედვით:

    // სხვადასხვა რეალიზაცია makeSound() მეთოდში კლასებში Dog და Cat
    func playSound(of animal: Animal) {
        animal.makeSound() // პოლიმორფული გამოძახება
    }
    
    let myDog = Dog(name: "ბობიკ")
    let myCat = Cat(name: "მურკა")
    
    playSound(of: myDog) // გამოიტანს "ბობიკ ხახუნებს"
    playSound(of: myCat) // გამოიტანს "მურკა მiau"
    
  • აბსტრაქცია: მნიშვნელოვანი თვისებების გამოყოფა და არასაჭიროების გამოტოვება. ზოგადი წარმოდგენების შექმნა ობიექტებზე:

    // გეომეტრიული ფიგურის წარმოდგენა, კონკრეტული რეალიზაციის გარეშე
    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
        }
    }