Sobes.tech
Junior — Middle

Môžete vysvetliť hlavnú myšlienku princípu otvorenosti a zatvorenosti v objektovo orientovanom programovaní?

sobes.tech AI

Odpoveď od AI

Princíp otvorenosti/zatvorenosti v objektovo orientovanom programovaní znamená, že softvérové entity (triedy, moduly, funkcie) by mali byť otvorené na rozšírenie, ale zatvorené na zmenu.

To znamená, že správanie systému môže byť rozšírené bez zmeny existujúceho kódu. Tento prístup pomáha predísť chybám, ktoré môžu vzniknúť pri zmene overeného kódu, a uľahčuje údržbu a rozvoj programu.

Napríklad, ak je potrebné pridať novú funkcionalitu, je lepšie vytvoriť novú triedu, ktorá rozširuje existujúcu, než meniť priamo pôvodnú triedu.

Príklad v 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 }
}

// Na pridanie novej figúry, napríklad Trojuholník, nemeníme existujúce triedy, ale vytvárame novú:
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 }
}