Sobes.tech
Junior — Middle
96

Können Sie ein Beispiel für eine Situation geben, in der das Prinzip der Offenheit/Schließung verletzt wird?

Antwort von AI

sobes.tech KI

Принцип открытости/закрытости (Open/Closed Principle) гласит, что программные сущности должны быть открыты для расширения, но закрыты для модификации. Нарушение этого принципа происходит, когда для добавления новой функциональности приходится изменять уже существующий код.

Пример нарушения:

Допустим, есть класс, который вычисляет стоимость доставки для разных типов товаров, и для добавления нового типа товара приходится менять метод с условными операторами:

class DeliveryCalculator {
    public double calculatePrice(String productType) {
        if (productType.equals("Book")) {
            return 5.0;
        } else if (productType.equals("Electronics")) {
            return 10.0;
        }
        // Для добавления нового типа товара нужно менять этот метод
        else if (productType.equals("Furniture")) {
            return 20.0;
        }
        return 0;
    }
}

Здесь при добавлении нового типа товара приходится модифицировать метод calculatePrice, что нарушает принцип открытости/закрытости. Правильнее было бы использовать полиморфизм, например, создать интерфейс Product с методом getDeliveryPrice(), и для каждого типа товара реализовать этот интерфейс.