Что такое принцип открытости/закрытости (Open-Closed Principle)

«Что такое принцип открытости/закрытости (Open-Closed Principle)» — вопрос из категории Архитектура, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Принцип 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.