Sobes.tech
Junior
214

Ҳарфи 'O' дар принсипҳои SOLID чӣ маъно дорад?

Ҷавоб аз AI

sobes.tech AI

SOLID принципларида 'O' ҳарфи Очиқ/Ёпиқ Принципни англатади (Open/Closed Principle).

У шундай формулалаштирилади: дастурий объектлар (синфлар, модуллар, функциялар ва бошқалар) кенгайтиришга очиқ, аммо ўзгартиришга ёпиқ бўлиши керак.

Бу шундай маънони англатади:

  • Янги хулосани мавжуд синфларни кенгайтириш орқали қўшиш мумкин, масалан, мерос ёки композиция орқали.
  • Мавжуд кодни янги хулосани қўшиш учун ўзгартириш керак эмас. Мавжуд кодни ўзгартириш тизимнинг аллақачон ишлаётган қисмларида хато киритиш хавфини оширади.

Масалан:

OCPга риоя қилмай:

class Shape {
    String type;

    public Shape(String type) {
        this.type = type;
    }
}

class AreaCalculator {
    public double calculateArea(Shape shape) {
        if (shape.type.equals("circle")) {
            // доира ҳажмини ҳисоблаш
            return 0; // ўрнини босади
        } else if (shape.type.equals("rectangle")) {
            // тўғри бўйича ҳажмини ҳисоблаш
            return 0; // ўрнини босади
        }
        // Янги фигура тури қўшиш бу усулни ўзгартиришни талаб қилади
        return 0;
    }
}

OCPга риоя қилганда:

interface Shape {
    double calculateArea();
}

class Circle implements Shape {
    // майдон ва конструктор
    @Override
    public double calculateArea() {
        // доира ҳажмини ҳисоблаш
        return 0; // ўрнини босади
    }
}

class Rectangle implements Shape {
    // майдон ва конструктор
    @Override
    public double calculateArea() {
        // тўғри бўйича ҳажмини ҳисоблаш
        return 0; // ўрнини босади
    }
}

class AreaCalculator {
    public double calculateArea(Shape shape) {
        // Метод ўзгартиришларга ёпиқ.
        // Янги фигура тури (Shapeни амалга оширадиган) қўшиш бу усулни ўзгартиришни талаб қилмайди.
        return shape.calculateArea();
    }
}