'O' означает Open/Closed Principle (Принцип открытости/закрытости).
Модули (классы, функции и т.д.) должны быть открыты для расширения, но закрыты для модификации. Это означает, что можно добавлять новую функциональность, не изменяя существующий код.
Пример нарушения принципа:
go
При добавлении новой фигуры (например, Triangle), потребуется модифицировать функцию CalculateArea в AreaCalculator для обработки нового типа.
Пример соблюдения принципа:
go
В этом примере добавление новой фигуры, реализующей интерфейс Shape с методом Area(), не требует изменения кода в AreaCalculator. AreaCalculator открыт для расширения (добавления новых типов Shape), но закрыт для модификации (не требует изменения кода при добавлении новых типов).
Это достигается за счет использования полиморфизма и инкапсуляции логики расчета площади внутри каждого типа фигуры. Принцип способствует созданию более гибкого, поддерживаемого и расширяемого кода.