O que significa a letra 'O' no padrão SOLID?
sobes.tech IA
Resposta da IA
O' significa Princípio Aberto/Fechado (Open/Closed Principle).
Os módulos (classes, funções, etc.) devem estar abertos para extensão, mas fechados para modificação. Isso significa que é possível adicionar nova funcionalidade sem alterar o código existente.
Exemplo de violação do princípio:
// Pacote 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"
}
// Pacote calculator
type AreaCalculator struct{}
func (ac AreaCalculator) CalculateArea(shapes []Shape) float64 {
totalArea := 0.0
for _, shape := range shapes {
switch shape.Type() { // É necessário modificar este código ao adicionar uma nova figura
case "rectangle":
// Lógica de cálculo da área do retângulo
case "circle":
// Lógica de cálculo da área do círculo
}
}
return totalArea
}
Ao adicionar uma nova figura (por exemplo, Triângulo), seria necessário modificar a função CalculateArea em AreaCalculator para lidar com o novo tipo.
Exemplo de cumprimento do princípio:
// Pacote shape
type Shape interface {
Area() float64 // Adicionamos o método Area() à interface
}
type Rectangle struct {
Width, Height float64
}
func (r Rectangle) Area() float64 {
return r.Width * r.Height // A lógica de cálculo da área está encapsulada na estrutura
}
type Circle struct {
Radius float64
}
func (c Circle) Area() float64 {
return 3.14 * c.Radius * c.Radius // A lógica de cálculo da área está encapsulada na estrutura
}
// Pacote calculator
type AreaCalculator struct{}
func (ac AreaCalculator) CalculateArea(shapes []Shape) float64 {
totalArea := 0.0
for _, shape := range shapes {
totalArea += shape.Area() // Usamos polimorfismo, sem conhecer o tipo específico da figura
}
return totalArea
}
Neste exemplo, adicionar uma nova figura que implemente a interface Shape com o método Area(), não requer alteração no código em AreaCalculator. AreaCalculator está aberto para extensão (adicionar novos tipos Shape), mas fechado para modificação (não requer mudanças ao adicionar novos tipos).
Isso é possível graças ao uso de polimorfismo e encapsulamento da lógica de cálculo da área dentro de cada tipo de figura. Este princípio promove a criação de um código mais flexível, de fácil manutenção e extensível.