Sobes.tech
Junior

SOLID nümunəsində 'O' hərfi nəyi ifadə edir?

sobes.tech Süni İntellekt

AI-dan cavab

'O' Açıq/Yapışqan Prinsipini (Open/Closed Principle) ifadə edir.

Modullar (siniflər, funksiyalar və s.) genişlənməyə açıq, lakin dəyişikliklərə qapalı olmalıdır. Bu, mövcud kodu dəyişdirmədən yeni funksionallıq əlavə edə biləcəyiniz anlamına gəlir.

Prinsipə zidd nümunə:

// shape paketində
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 paketində
type AreaCalculator struct{}

func (ac AreaCalculator) CalculateArea(shapes []Shape) float64 {
	totalArea := 0.0
	for _, shape := range shapes {
		switch shape.Type() { // Yeni forma əlavə ediləndə bu kodu dəyişdirmək lazımdır
		case "rectangle":
			// Düzbucaqlının sahəsinin hesablanması logikası
		case "circle":
			// Dairənin sahəsinin hesablanması logikası
		}
	}
	return totalArea
}

Yeni bir forma (məsələn, Üçbucaq) əlavə etdikdə, CalculateArea funksiyasını yeni tip üçün yeniləmək lazımdır.

Prinsipə riayət nümunəsi:

// shape paketində
type Shape interface {
	Area() float64 // Area() metodunu interfeysə əlavə edirik
}

type Rectangle struct {
	Width, Height float64
}

func (r Rectangle) Area() float64 {
	return r.Width * r.Height // Sahənin hesablanma logikası strukturda kapsüllənmişdir
}

type Circle struct {
	Radius float64
}

func (c Circle) Area() float64 {
	return 3.14 * c.Radius * c.Radius // Sahənin hesablanma logikası strukturda kapsüllənmişdir
}

// calculator paketində
type AreaCalculator struct{}

func (ac AreaCalculator) CalculateArea(shapes []Shape) float64 {
	totalArea := 0.0
	for _, shape := range shapes {
		totalArea += shape.Area() // Polimorfizm istifadə olunur, formanın konkret növünü bilmədən
	}
	return totalArea
}

Bu nümunədə, Shape interfeysini və Area() metodunu həyata keçirən yeni bir forma əlavə etmək, AreaCalculator kodunu dəyişdirməyi tələb etmir. AreaCalculator genişlənməyə açıqdır (yeni Shape tipləri əlavə edilə bilər), lakin dəyişikliklərə qapalıdır (yeni tiplər əlavə edilərkən kod dəyişmir).

Bu, polimorfizm və kapsülləşdirmə vasitəsilə hər forma növündə sahə hesablaması logikasını kapsülləşdirmək sayəsində mümkün olur. Bu prinsip, daha çevik, baxımı asan və genişləndirilə bilən kod yaratmağa kömək edir.