Abstract
O conceito de contratos abstratos é utilizado para criar contratos que servem como modelos base para outros contratos, mas que não têm a intenção de serem implantados por si próprios. Um contrato é considerado abstrato se pelo menos uma de suas funções não possuir implementação completa dentro do contrato. Essa falta de implementação indica que o contrato está destinado a ser estendido por outros contratos que completarão essas implementações. Os contratos abstratos são uma ferramenta fundamental em Solidity, permitindo que os desenvolvedores definam interfaces e comportamentos comuns que podem ser compartilhados e estendidos por múltiplos contratos.
CaracterÃsticas dos Contratos Abstratos
Funções sem implementar: A principal caracterÃstica de um contrato abstrato é que ele contém pelo menos uma função sem uma implementação completa. Isso é indicado pela ausência do corpo da função (as chaves
{}) e finalizando a declaração da função com um ponto e vÃrgula (;).Herança: Os contratos abstratos são projetados para serem herdados por outros contratos. Um contrato que herda de um contrato abstrato deve implementar todas as funções não implementadas, a menos que o contrato também seja declarado como abstrato.
Palavra-chave
**abstract**: É usada para declarar explicitamente um contrato como abstrato. A introdução dessa palavra-chave permite que os desenvolvedores comuniquem suas intenções de forma mais clara e evitem a implantação acidental de contratos incompletos.Uso de
**virtual**e**override**: No contexto de contratos abstratos, as funções não implementadas podem ser marcadas comovirtual, e os contratos que herdam essas funções devem usar a palavra-chaveoverrideao fornecer uma implementação, seguindo o sistema de herança e polimorfismo de Solidity.
Vejamos um exemplo abaixo:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
abstract contract Animal {
function makeSound() public virtual returns (string memory);
}
contract Dog is Animal {
function makeSound() public pure override returns (string memory) {
return "Woof";
}
}
contract Cat is Animal {
function makeSound() public pure override returns (string memory) {
return "Meow";
}
}Neste exemplo, Animal é um contrato abstrato porque possui uma função, makeSound, sem implementação. A palavra-chave virtual indica que essa função está destinada a ser sobrescrita pelos contratos herdeiros. Os contratos Dog e Cat herdam de Animal e fornecem suas próprias implementações da função makeSound, utilizando a palavra-chave override para indicar que estão sobrescrevendo a função abstrata.
Last updated