SOLID shablonida 'O' harfi nima anglatadi?
sobes.tech AI
AIdan javob
'O' Open/Closed Principle (Ochiq/Yopiq Prinsipi) nişonini anglatadi.
Modullar (sinflar, funksiyalar va boshqalar) kengaytirishga ochiq, lekin o'zgartirishga yopiq bo'lishi kerak. Bu mavjud kodni o'zgartirmasdan yangi funksionalliklarni qo'shish mumkinligini anglatadi.
Qoidaga zid misol:
// shape paket
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 paket
type AreaCalculator struct{}
func (ac AreaCalculator) CalculateArea(shapes []Shape) float64 {
totalArea := 0.0
for _, shape := range shapes {
switch shape.Type() { // Yangi shakl qo'shilganda bu kodni o'zgartirish kerak
case "rectangle":
// To'rtburchakning maydonini hisoblash logikasi
case "circle":
// Doira maydonini hisoblash logikasi
}
}
return totalArea
}
Yangi shakl (masalan, Uchburchak) qo'shilganda, CalculateArea funksiyasini yangi tur uchun yangilash kerak bo'ladi.
Qoidaga muvofiq misol:
// shape paket
type Shape interface {
Area() float64 // Interface'ga Area() metodini qo'shamiz
}
type Rectangle struct {
Width, Height float64
}
func (r Rectangle) Area() float64 {
return r.Width * r.Height // Maydon hisoblash logikasi strukturaga kapsüllangan
}
type Circle struct {
Radius float64
}
func (c Circle) Area() float64 {
return 3.14 * c.Radius * c.Radius // Maydon hisoblash logikasi strukturaga kapsüllangan
}
// calculator paket
type AreaCalculator struct{}
func (ac AreaCalculator) CalculateArea(shapes []Shape) float64 {
totalArea := 0.0
for _, shape := range shapes {
totalArea += shape.Area() // Polimorfizmni ishlatamiz, shaklning aniq turini bilmasdan
}
return totalArea
}
Bu misolda, Shape interfeysini va Area() metodini amalga oshirgan yangi shakl qo'shish, AreaCalculator kodini o'zgartirishni talab qilmaydi. AreaCalculator kengayishga ochiq (yangi Shape turlarini qo'shish mumkin), lekin o'zgartirishga yopiq (yangi turlar qo'shilganda kod o'zgarmaydi).
Bu polimorfizm va kapsüllash yordamida har bir shakl turida maydon hisoblash logikasini kapsüllash orqali amalga oshiriladi. Bu prinsip, kodni yanada moslashuvchan, oson saqlanadigan va kengaytiriladigan qilishga yordam beradi.