Herança
A herança é um princípio fundamental da programação orientada a objetos (OOP) que também está presente em Solidity. A herança permite que um contrato herde propriedades e comportamentos (variáveis de estado e funções) de um ou mais contratos "pais", promovendo assim a reutilização de código e a criação de relações hierárquicas entre contratos.
Características da Herança em Solidity
Reutilização de Código: A herança permite que contratos inteligentes reutilizem o código de outros contratos. Isso não apenas reduz a redundância, mas também promove a prática do princípio DRY (Don't Repeat Yourself - Não se Repita).
Hierarquia de Contratos: Solidity permite a criação de uma hierarquia de contratos, onde um contrato filho pode herdar de múltiplos contratos pais, seguindo um padrão de herança múltipla.
Sobrescrita de Funções: Os contratos filhos podem sobrescrever funções herdadas de seus contratos pais, permitindo personalizar ou estender a funcionalidade base. Para isso, utiliza-se o atributo
overridena função.Modificadores de Visibilidade: Solidity utiliza modificadores de visibilidade (
public,internal,privateeexternal) para controlar o acesso às funções e variáveis de estado. As regras de visibilidade também se aplicam a contratos herdados.
Exemplo Básico de Herança


Neste exemplo, Derived herda de Base. Isso significa que Derived tem acesso à variável data e pode usar ou sobrescrever a função setData. Na função setData sobrescrita, modificamos a implementação para somar 10 ao _data antes de armazená-lo.
Herança multinivel
A herança multinível é um conceito onde um contrato herda de outro contrato, que por sua vez herda de outro, criando assim uma hierarquia de herança "multinível". Esse padrão permite a construção de relações hierárquicas complexas e a reutilização de código através de vários níveis de contratos.

Aqui está um exemplo de herança multinível em Solidity, que ilustra como um contrato pode herdar propriedades e comportamentos de vários contratos pai situados em diferentes níveis da hierarquia:
Explicação do código:
Grandparent: Este é o contrato de nível base que define uma variávelgrandparentValuee uma funçãosetGrandparentValuepara modificá-la. Ele também possui um construtor que inicializagrandparentValue.Parent: Este contrato herda deGrandparent. Adiciona sua própria variávelparentValuee uma funçãosetParentValuepara modificá-la. Seu construtor chama o construtor deGrandparentpara inicializargrandparentValue, e também inicializaparentValue.Child: Este é o contrato de nível mais baixo que herda deParent(e, portanto, indiretamente deGrandparent). Ele adiciona uma variávelchildValuee uma funçãosetChildValue. Seu construtor inicializa as variáveis de todos os níveis da hierarquia chamando o construtor deParent, que por sua vez chama o construtor deGrandparent.
Este exemplo mostra como criar e utilizar relações hierárquicas em Solidity por meio da herança multinível, permitindo que os contratos filhos acessem e sobrescrevam propriedades e funções de seus ancestrais, promovendo a reutilização e modularidade do código.
Herança Hierárquica
A herança hierárquica em Solidity refere-se a um padrão onde múltiplos contratos filhos herdam de um único contrato pai, criando uma estrutura hierárquica em "forma de árvore" com um nó raiz comum. Esse padrão permite compartilhar lógica e propriedades comuns entre vários contratos derivados, mantendo ao mesmo tempo diferenças específicas em cada um deles.

Aquí te mostro un exemplo de herança hierárquica em Solidity:
Explicação do Código:
Vehicle: Este é o contrato base ou "pai" que define propriedades comuns (brandemodel) e uma função (getVehicleInfo) aplicável a qualquer tipo de veículo. Ele funciona como o nó raiz comum na herança hierárquica.Care**Truck**: Esses são contratos "filhos" que herdam do contratoVehicle. Cada um deles estende a funcionalidade base incluindo propriedades específicas (carMaxSpeedparaCaretruckLoadCapacityparaTruck) e funções adicionais para interagir com essas propriedades (getMaxSpeedegetLoadCapacity, respectivamente). Embora compartilhem algumas características comuns definidas emVehicle,CareTruckse especializam em diferentes aspectos dos veículos que representam.
Características da Herança Hierárquica:
Especialização: Permite que os contratos filhos se especializem adicionando ou modificando funcionalidades específicas.
Organização Clara: Facilita uma estrutura clara e lógica para os contratos, refletindo relações do mundo real e facilitando a compreensão e manutenção do código.
Esse padrão de herança é especialmente útil em situações onde diferentes entidades compartilham características comuns, mas também precisam de suas próprias implementações e características específicas.
Herança Múltipla
A herança múltipla permite que um contrato herde comportamentos e características de múltiplos contratos pais.

A herança múltipla pode ser muito poderosa, mas também pode introduzir complexidade e ambiguidades. É importante projetar cuidadosamente a arquitetura dos contratos para evitar problemas comuns, como colisão de nomes ou dependência circular entre contratos.
Exemplo:
Neste exemplo, o contrato C herda de ambos, A e B, e tem acesso às suas funções foo e bar, respectivamente. O contrato C introduz uma nova função fooBar que combina as saídas das funções herdadas.
Last updated