Sobes.tech
Junior

Ի՞նչ է նշանակում '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 տեսակներ ավելացնելիս), բայց փակ՝ փոփոխության համար (նոր տեսակներ ավելացնելիս):

Սա հասնում է պոլիմորֆիզմի և ինկապսուլյացիայի միջոցով, որտեղ յուրաքանչյուր ձևի հաշվարկի տրամաբանությունը թաքնված է:

Այս սկզբունքը նպաստում է ավելի ճկուն, պահպանվող և ընդլայնվող կոդ ստեղծելուն։