Sobes.tech
Junior — Middle

შეგიძლიათ ახსნათ ობიექტზე ორიენტირებული პროგრამირების ღია და დახურული პრინციპის ძირითადი იდეა?

sobes.tech AI

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

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

ეს ნიშნავს, რომ სისტემის ქცევას შეიძლება გააფართოვოს არსებული კოდის შეცვლის გარეშე. ეს მიდგომა ეხმარება თავიდან აიცილოს შეცდომები, რომლებიც შეიძლება წარმოიშვას გამოცდილი კოდის შეცვლისას, და ამარტივებს პროგრამის შენარჩუნებას და განვითარებას.

მაგალითად, თუ საჭიროა ახალი ფუნქციონალის დამატება, უკეთესია შექმნათ ახალი კლასი, რომელიც გაფართოებს არსებულს, ვიდრე პირდაპირ შეცვალოთ თავდაპირველი კლასი.

სწრაფტში მაგალითი:

protocol Shape {
    func area() -> Double
}

class Circle: Shape {
    var radius: Double
    init(radius: Double) { self.radius = radius }
    func area() -> Double { return .pi * radius * radius }
}

class Rectangle: Shape {
    var width: Double, height: Double
    init(width: Double, height: Double) {
        self.width = width
        self.height = height
    }
    func area() -> Double { return width * height }
}

// ახალი ფიგურის დამატებისთვის, მაგალითად, სამკუთხედი, ჩვენ არ ვცვლით არსებულ კლასებს, არამედ ვქმნით ახალს:
class Triangle: Shape {
    var base: Double, height: Double
    init(base: Double, height: Double) {
        self.base = base
        self.height = height
    }
    func area() -> Double { return 0.5 * base * height }
}