Eu fiz um exemplo em Flutter e gostaria de saber se ele estaria cumprindo esse princípio da forma correta.
class Funcionario {
void salario(){}
}
class FuncionarioComissionado extends Funcionario {
@override
void salario() {
// TODO: implement salario
super.salario();
}
void comissao(){}
}
class Gerente extends FuncionarioComissionado {
@override
void salario() {
// TODO: implement salario
super.salario();
}
@override
void comissao() {
// TODO: implement comissao
super.comissao();
}
}
class Vendedor extends FuncionarioComissionado {
@override
void salario() {
// TODO: implement salario
super.salario();
}
@override
void comissao() {
// TODO: implement comissao
super.comissao();
}
}
class Recepcionista extends Funcionario {
@override
void salario() {
// TODO: implement salario
super.salario();
}
}
Como podem ver no exemplo a classe principal Funcionario, inicialmente teria os métodos salario() e comissao() que seria extendida para Recepcionista e Vendedor. Mas caso fosse extendida para a classe Recepcionista, não estaria cumprindo a LSP, pois não faria sentido ter o método de comissão para a classe Recepcionista. Seguindo o princípio LSP, o método comissao() iria para a classe Vendedor, dessa forma mantendo a classe vendedor executando os métodos necessários para ela e a classe Recepcionista executando apenas o que se refere há ela na classe Funcionario com o método salario().
Eu pensei "e se alguém quiser incluir a classe Gerente" como que fica?
Criei então a classe FuncionarioComissionado que extend de Funcionario, recebendo então o método salario() e agregando o método comissao() para essa classe. Assim extendi a classe FuncionarioComissionado para as classes Gerente e Vendedor para que possasm executar os métodos salario() e comissao() e extendi a classe Funcionario para a classe Recepcionista, mantendo o princípio de Liskov.
Minha duvida é... Está correto o que eu fiz ou errei em alguma parte? Esse é o caminho?