SOLID Liskov substitute

Este é o terceiro post sobre SOLID o liskov substitute principle.

Este principio é mais um complemento para boas práticas de desenvolvimento de software.

Quero ressaltar que: estes princípios você pode adaptar para qualquer linguagem de programação, onde você implemente o paradigma de orientação a objetos.

A definição deste princípio é a seguinte: Objetos em um programa devem ser substituídos por instâncias de seus subtipos sem alterar a funcionalidade do programa.

Em outras palavras, as classes estendidas não devem tornar mais restritas as regras da classe de onde ela estendeu os comportamentos.

Vamos a um exemplo clássico onde veremos a quebra deste princípio.

Pela matemática temos que o quadrado é um tipo de retângulo. Onde tem a característica de ter os 4 lados iguais.

Vejamos a implementação da classe quadrado estendendo o comportamento da classe retângulo.

class Retangulo {
    

    private $altura;
    private $largura;

    public function getAltura() {
        return $this->altura;
    }    

    public function getLargura() {
        return $this->largura;
    }

    public function setAltura($valor) {
        $this->altura = $valor;

    }

   public function setLargura($valor) {
        $this->largura = $valor;
    }   

    public function calcularArea() {
           return "A area é ". $this->getAltura() * $this->getLargura();
    }

}

class Quadrado extends Retangulo {
    

    public function getAltura() {
        return $this->altura;
    }    

    public function getLargura() {
        return $this->largura;
    }    

    public function setAltura($valor) {
        $this->altura = $valor;
        $this->largura = $valor;
    }    

    public function setLargura($valor) {
        $this->largura = $valor;
        $this->altura = $valor;
    }

    public function calcularArea() {
        return parent::calcularArea();        
    }    

}

Com está implementação de quadrado estendendo da classe retângulo temos a quebra do principio de liskov.

Siga e compartilhe:
error

Deixe um comentário

Enter Captcha Here : *

Reload Image