SOLID үлгүсүндөгү 'O' хаты эмне мааниге ээ?
sobes.tech AI
AIден жооп
'O' деген Open/Closed Prinsipine (Ачык/жабык принципи) дегенди билдирет.
Модулдар (кластар, функциялар жана башка) кеңейтүүгө ачык, бирок өзгөртүүгө жабык болушу керек. Бул жаңы функционалдуулукту кошуу үчүн бар кодду өзгөртүүнү талап кылбайт дегенди билдирет.
Принципти бузуу мисалы:
// shape пакет
type Shape interface {
Type() string
}
type Rectangle struct{}
func (r Rectangle) Type() string {
return "rectangle"
}
type Circle struct{}
func (c Circle) Type() string {
return "circle"
}
// calculator пакет
type AreaCalculator struct{}
func (ac AreaCalculator) CalculateArea(shapes []Shape) float64 {
totalArea := 0.0
for _, shape := range shapes {
switch shape.Type() { // Бул кодду өзгөртүү керек жаңы фигура кошулганда
case "rectangle":
// Тескери эсептөө логикасы
case "circle":
// Тескери эсептөө логикасы
}
}
return totalArea
}
Жаңы фигура (мисалы, Triangle) кошулганда, CalculateArea функциясын өзгөртүү керек.
Принципке ылайык мисал:
// shape пакет
type Shape interface {
Area() float64 // Area() методун кошуу
}
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 3.14 * c.Radius * c.Radius // Аянтын эсептөө логикасы структурада капталган
}
// calculator пакет
type AreaCalculator struct{}
func (ac AreaCalculator) CalculateArea(shapes []Shape) float64 {
totalArea := 0.0
for _, shape := range shapes {
totalArea += shape.Area() // Полиморфизмди колдонуп, конкреттүү фигураны билбестен
}
return totalArea
}
Бул мисалда, Shape интерфейсин ишке ашыган жаңы фигураны кошуу AreaCalculator кодун өзгөртүүнү талап кылбайт. AreaCalculator кеңейтүүгө ачык (жаңы Shape түрлөрүн кошуу), бирок өзгөртүүгө жабык (жаңы түрлөрдү кошуу үчүн кодду өзгөртүүнү талап кылбайт).
Бул полиморфизм жана инкапсуляция аркылуу ар бир фигуранын аянтты эсептөө логикасы жашырылгандыгына жетишилет.
Бул принцип ийкемдүү, оңдолмочу жана кеңейтүлүүчү код түзүүгө жардам берет.