Sobes.tech
Junior — Middle

Можете ли да обясните основната идея на принципа на отвореност и затвореност в обектно-ориентираното програмиране?

sobes.tech AI

Отговор от AI

Принципът на отвореност и затвореност в обектно-ориентираното програмиране означава, че софтуерните същности (класове, модули, функции) трябва да бъдат открити за разширяване, но затворени за модификация.

Това означава, че поведението на системата може да бъде разширено без да се променя съществуващият код. Този подход помага да се избегнат грешки, които могат да възникнат при промяна на проверения код, и улеснява поддръжката и развитието на програмата.

Например, ако трябва да добавите нова функционалност, е по-добре да създадете нов клас, който разширява съществуващия, отколкото да променяте директно оригиналния клас.

Пример на Swift:

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 }
}