Ответ
Принцип Open/Closed (OCP) гласит, что сущности должны быть открыты для расширения, но закрыты для модификации. Это означает, что поведение кода можно изменять, добавляя новый код, а не изменяя существующий.
Пример на Go с интерфейсами:
type Shape interface {
Area() float64
}
type Rectangle struct {
Width, Height float64
}
func (r Rectangle) Area() float64 {
return r.Width * r.Height
}
type Circle struct {
Radius float64
}
func (c Circle) Area() float64 {
return math.Pi * c.Radius * c.Radius
}
func TotalArea(shapes []Shape) float64 {
var total float64
for _, s := range shapes {
total += s.Area()
}
return total
}
Теперь можно добавлять новые фигуры, не изменяя функцию TotalArea.