SOLID deseneminde 'O' harfi ne anlama geliyor?
sobes.tech yapay zeka
AI'dan gelen yanıt
'O' Açık/Kapalı Prensibi (Open/Closed Principle) anlamına gelir.
Modüller (sınıflar, fonksiyonlar vb.) genişletmeye açık, fakat değişikliğe kapalı olmalıdır. Bu, mevcut kodu değiştirmeden yeni işlevsellikler ekleyebileceğiniz anlamına gelir.
Prensibe aykırılık örneği:
// shape paketi
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 paketi
type AreaCalculator struct{}
func (ac AreaCalculator) CalculateArea(shapes []Shape) float64 {
totalArea := 0.0
for _, shape := range shapes {
switch shape.Type() { // Yeni şekil eklendiğinde bu kodu değiştirmek gerekiyor
case "rectangle":
// Dikdörtgen alan hesaplama mantığı
case "circle":
// Daire alan hesaplama mantığı
}
}
return totalArea
}
Yeni bir şekil (örneğin, Üçgen) eklendiğinde, CalculateArea fonksiyonunu yeni tipe göre güncellemek gerekir.
Prensibe uygun örnek:
// shape paketi
type Shape interface {
Area() float64 // Interface'e Area() metodu eklendi
}
type Rectangle struct {
Width, Height float64
}
func (r Rectangle) Area() float64 {
return r.Width * r.Height // Alan hesaplama mantığı yapı içinde kapsüllenmiş
}
type Circle struct {
Radius float64
}
func (c Circle) Area() float64 {
return 3.14 * c.Radius * c.Radius // Alan hesaplama mantığı yapı içinde kapsüllenmiş
}
// calculator paketi
type AreaCalculator struct{}
func (ac AreaCalculator) CalculateArea(shapes []Shape) float64 {
totalArea := 0.0
for _, shape := range shapes {
totalArea += shape.Area() // Polimorfizm kullanılıyor, şeklin türünü bilmiyoruz
}
return totalArea
}
Bu örnekte, Shape arayüzünü ve Area() metodunu uygulayan yeni bir şekil eklemek, AreaCalculator kodunu değiştirmeyi gerektirmez. AreaCalculator genişlemeye açıktır (yeni Shape türleri eklenebilir), ama değişikliğe kapalıdır (yeni türler eklenirken kod değiştirilmez).
Bu, polimorfizm ve kapsülleme kullanılarak sağlanır ve her şekil tipi içinde alan hesaplama mantığının kapsüllenmesiyle mümkün olur. Bu prensip, daha esnek, bakımı kolay ve genişletilebilir kod yazmayı teşvik eder.