Você está na página 1de 8

PRINCÍPIO DA SUBSTITUIÇÃO DE

LISKOV
DEFINIÇÃO

• Princípio da substituição de Liskov — Uma classe derivada deve ser


substituível por sua classe base.
• Se S é um subtipo de T, então objetos do tipo T em um programa
devem poder ser substituídos por objetos do tipo S sem alterar
nenhuma das propriedades desejáveis desse programa.
• Esse princípio visa reforçar a consistência para que a Classe pai ou sua
Classe filha possam ser usadas da mesma maneira sem erros.
DEFINIÇÃO

• Se voce possui uma classe e cria uma outra classe à partir desta, esta
classe criada se torna uma classe-filho da classe de origem. Esta
classe-filho deve ser capaz de realizar todas as tarefas que classe pai
executa, retornando sempre objetos do mesmo tipo.

• Se a classe filho não conseguir realizar as mesmas tarefas como a


classe pai ou não retornar dados do mesmo tipo, signfica que esta
classe mudou completamente, violando o princípio de Liskov.
Clique noAícone
class { para adicionar uma imag
public getNome() {
return "Meu nome é A";
}
}

class B extends A {
public getNome() {
return "Meu nome é B";
EXEMPLO }
}

const objeto1 = new A();


const objeto2 = new B();

function imprimeNome(objeto: A) {
return objeto.getNome();
}

imprimeNome(objeto1); // Meu nome é A


imprimeNome(objeto2); // Meu nome é B
R E P R E S E N TA
ÇÃO UML
Clique no ícone para adicionar uma imag
import { AxiosInstance } from "axios";

export class BaseController<T, K> {


protected endpoint!: string;

constructor(private api: AxiosInstance) {}

async listAll(): Promise<T[]> {


const response = await this.api.get(this.endpoint);

return response.data as T[];


}

async getById(id: string): Promise<T> {


IMPLEMENTAÇÃO const response = await this.api.get(`${this.endpoint}/$
{id}`);

return response.data as T;
}

async create(body: K): Promise<T> {


const response = await this.api.post(this.endpoint, body);

return response.data as T;
}

async update(id: string, body: K): Promise<T> {


const response = await this.api.put(`${this.endpoint}/${id}`,
body);

return response.data as T;
}

async delete(id: string): Promise<void> {


await this.api.delete(`${this.endpoint}/${id}`);
}
}
Clique no ícone para adicionar uma imag

import { BaseController } from


"./BaseController";
import { ENDPOINTS } from
"../constants/endpoints";
import { IEmployee, IEmployeeDTO } from
"../interfaces";
CLASSE QUE IMPLEMENTA
export class EmployeeController extends
BaseController<
IEmployee,
IEmployeeDTO
> {
protected endpoint = ENDPOINTS.employees;
}

Você também pode gostar