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();
}
}