Que signifie la lettre 'O' dans le motif SOLID?
sobes.tech IA
Réponse de l'IA
'O' signifie le principe Ouvert/Fermé (Open/Closed Principle).
Les modules (classes, fonctions, etc.) doivent être ouverts à l'extension, mais fermés à la modification. Cela signifie que l'on peut ajouter de nouvelles fonctionnalités sans modifier le code existant.
Exemple de violation du principe :
// Package 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"
}
// Package calculator
type AreaCalculator struct{}
func (ac AreaCalculator) CalculateArea(shapes []Shape) float64 {
totalArea := 0.0
for _, shape := range shapes {
switch shape.Type() { // Nécessite de modifier ce code lors de l'ajout d'une nouvelle forme
case "rectangle":
// Logique de calcul de l'aire du rectangle
case "circle":
// Logique de calcul de l'aire du cercle
}
}
return totalArea
}
Lors de l'ajout d'une nouvelle forme (par exemple, Triangle), il faudrait modifier la fonction CalculateArea dans AreaCalculator pour gérer le nouveau type.
Exemple de respect du principe :
// Package shape
type Shape interface {
Area() float64 // Ajout de la méthode Area() à l'interface
}
type Rectangle struct {
Width, Height float64
}
func (r Rectangle) Area() float64 {
return r.Width * r.Height // La logique de calcul de l'aire est encapsulée dans la structure
}
type Circle struct {
Radius float64
}
func (c Circle) Area() float64 {
return 3.14 * c.Radius * c.Radius // La logique de calcul de l'aire est encapsulée dans la structure
}
// Package calculator
type AreaCalculator struct{}
func (ac AreaCalculator) CalculateArea(shapes []Shape) float64 {
totalArea := 0.0
for _, shape := range shapes {
totalArea += shape.Area() // Utilisation du polymorphisme, sans connaître le type précis de la forme
}
return totalArea
}
Dans cet exemple, l'ajout d'une nouvelle forme implémentant l'interface Shape avec la méthode Area(), ne nécessite pas de modification du code dans AreaCalculator. AreaCalculator est ouvert à l'extension (ajout de nouveaux types Shape), mais fermé à la modification (pas besoin de changer le code lors de l'ajout de nouveaux types).
Cela est rendu possible grâce à l'utilisation du polymorphisme et de l'encapsulation de la logique de calcul de l'aire dans chaque type de forme. Ce principe favorise la création d'un code plus flexible, maintenable et extensible.