Junior — Middle
Czy możesz wyjaśnić główną ideę zasady otwartości i zamknięcia w programowaniu obiektowym?
sobes.tech AI
Odpowiedź od AI
Zasada otwartości/zamknięcia w programowaniu obiektowym oznacza, że istoty programowe (klasy, moduły, funkcje) powinny być otwarte na rozszerzenie, ale zamknięte na modyfikację.
Oznacza to, że zachowanie systemu można rozszerzać bez zmiany istniejącego kodu. Takie podejście pomaga unikać błędów, które mogą wystąpić przy modyfikacji sprawdzonego kodu, i ułatwia utrzymanie oraz rozwój programu.
Na przykład, jeśli trzeba dodać nową funkcjonalność, lepiej utworzyć nową klasę, która rozszerza istniejącą, niż modyfikować bezpośrednio klasę źródłową.
Przykład w 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 }
}
// Aby dodać nową figurę, np. Trójkąt, nie zmieniamy istniejących klas, tylko tworzymy nową:
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 }
}