Ի՞նչ է նշանակում 'O' տառը SOLID ձևաչափում։
sobes.tech AI
Պատասխան AI-ից
'O' նշանակում է Open/Closed Principle (Ներածական բաց/փակ սկզբունք):
Մոդուլները (դասերը, ֆունկցիաները և այլն) պետք է բաց լինեն ընդլայնման համար, բայց փակ՝ փոփոխության համար: Սա նշանակում է, որ կարող եք ավելացնել նոր ֆունկցիոնալություն՝ չփոխելով առկա կոդը:
Նմուշ՝ սկզբունքի խախտում:
// 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 ինտերֆեյսը Area() մեթոդով, չի պահանջում փոփոխություն AreaCalculator կոդում: AreaCalculator բաց է ընդլայնման համար (նոր Shape տեսակներ ավելացնելիս), բայց փակ՝ փոփոխության համար (նոր տեսակներ ավելացնելիս):
Սա հասնում է պոլիմորֆիզմի և ինկապսուլյացիայի միջոցով, որտեղ յուրաքանչյուր ձևի հաշվարկի տրամաբանությունը թաքնված է:
Այս սկզբունքը նպաստում է ավելի ճկուն, պահպանվող և ընդլայնվող կոդ ստեղծելուն։