რა არის ობიექტზე ორიენტირებული პროგრამირების პრინციპები?
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 } }