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 дар AreaCalculator барои коркарди навъи нав тағир дода шавад.

Масалан, риояи принсип:

// Бастаи 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), аммо банд барои тағир додан (тағйир додани коди при илова кардани навъҳои нав).

Ин тавассути истифодаи полиморфизм ва инкапсулятсияи логикаи ҳисобкунии майдон дар ҳар як навъи шакл ба даст оварда мешавад. Принсип кӯмак мекунад, ки коди бештар флексибл, нигоҳдошаванда ва васеъшаванда созем.