Especialização em Sistemas com Java 21 LTS • Capítulo 09


🎯 Visão Geral dos Exemplos Práticos

Neste laboratório prático, implementaremos exemplos corporativos completos explorando:

  1. Hierarquia de Classes e Sobrescrita de Métodos (@Override): especialização de comportamentos através da palavra-chave super.
  2. Despacho Dinâmico de Métodos Polimórficos: processamento em lote de instâncias heterogêneas através de um tipo estático abstrato comum.
  3. Validação do Princípio de Substituição de Liskov (LSP): garantia de que qualquer subtipo atenda aos contratos da superclasse sem falhas ou coerções forçadas.

💻 Exemplo 01 — Sistema Corporativo de Remuneração e Bonificação

package com.empresa.heranca;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;

/**
 * Sistema de recursos humanos corporativo demonstrando polimorfismo dinâmico.
 */
public class GestorRemuneracaoPolimorfica {

    public static abstract class Funcionario {
        private final String matricula;
        private final String nome;
        private final BigDecimal salarioBase;

        public Funcionario(String matricula, String nome, BigDecimal salarioBase) {
            this.matricula = matricula;
            this.nome = nome;
            this.salarioBase = salarioBase;
        }

        // Método polimórfico abstrato
        public abstract BigDecimal calcularBonificacaoAnual();

        // Método concreto base reaproveitável
        public BigDecimal calcularRemuneracaoLiquida() {
            BigDecimal aliquotaInssIrrf = new BigDecimal("0.22"); // Média tributária 22%
            BigDecimal deducoes = salarioBase.multiply(aliquotaInssIrrf);
            return salarioBase.subtract(deducoes).setScale(2, RoundingMode.HALF_EVEN);
        }

        public String getMatricula() { return matricula; }
        public String getNome() { return nome; }
        public BigDecimal getSalarioBase() { return salarioBase; }
    }

    public static class EngenheiroDevOps extends Funcionario {
        private final int certificacoesCloud;

        public EngenheiroDevOps(String matricula, String nome, BigDecimal salarioBase, int certificacoesCloud) {
            super(matricula, nome, salarioBase);
            this.certificacoesCloud = certificacoesCloud;
        }

        @Override
        public BigDecimal calcularBonificacaoAnual() {
            // Bonificação: 1 salário base + R$ 1.500 por certificação ativa
            BigDecimal adicionalCert = new BigDecimal("1500.00").multiply(new BigDecimal(certificacoesCloud));
            return getSalarioBase().add(adicionalCert);
        }
    }

    public static class GerenteProjetos extends Funcionario {
        private final int projetosEntreguesNoPrazo;

        public GerenteProjetos(String matricula, String nome, BigDecimal salarioBase, int projetosEntreguesNoPrazo) {
            super(matricula, nome, salarioBase);
            this.projetosEntreguesNoPrazo = projetosEntreguesNoPrazo;
        }

        @Override
        public BigDecimal calcularBonificacaoAnual() {
            // Bonificação: 1.5 salários + 5% por projeto entregue no prazo
            BigDecimal fatorBase = getSalarioBase().multiply(new BigDecimal("1.50"));
            BigDecimal fatorProjetos = getSalarioBase().multiply(new BigDecimal("0.05"))
                    .multiply(new BigDecimal(projetosEntreguesNoPrazo));
            return fatorBase.add(fatorProjetos).setScale(2, RoundingMode.HALF_EVEN);
        }
    }

    public static class DiretorOperacoes extends Funcionario {
        private final BigDecimal percentualEbitda;

        public DiretorOperacoes(String matricula, String nome, BigDecimal salarioBase, BigDecimal percentualEbitda) {
            super(matricula, nome, salarioBase);
            this.percentualEbitda = percentualEbitda;
        }

        @Override
        public BigDecimal calcularBonificacaoAnual() {
            // Bonificação baseada em lucro corporativo (ex: R$ 5.000.000 de EBITDA)
            BigDecimal ebitdaCorporativo = new BigDecimal("5000000.00");
            return ebitdaCorporativo.multiply(percentualEbitda).setScale(2, RoundingMode.HALF_EVEN);
        }
    }

    public static void main(String[] args) {
        System.out.println("================================================================================");
        System.out.println("          PROCESSAMENTO POLIMÓRFICO DE BENEFÍCIOS CORPORATIVOS (JAVA 21)       ");
        System.out.println("================================================================================");

        List<Funcionario> colaboradores = List.of(
            new EngenheiroDevOps("ENG-401", "Guilherme Santos", new BigDecimal("11500.00"), 3),
            new GerenteProjetos("PM-202", "Juliana Martins", new BigDecimal("14200.00"), 4),
            new DiretorOperacoes("DIR-001", "Marcus Valério", new BigDecimal("32000.00"), new BigDecimal("0.015"))
        );

        System.out.printf("%-8s | %-20s | %-12s | %-12s | %-14s%n",
                "MATR.", "COLABORADOR", "SALÁRIO BASE", "LÍQUIDO MÊS", "BÔNUS ANUAL");
        System.out.println("---------+----------------------+--------------+--------------+---------------");

        BigDecimal totalFolhaBase = BigDecimal.ZERO;
        BigDecimal totalProvisaoBonus = BigDecimal.ZERO;

        for (Funcionario f : colaboradores) {
            // Invocação polimórfica: a JVM despacha para a implementação exata de cada subclasse
            BigDecimal bonus = f.calcularBonificacaoAnual();
            BigDecimal liquido = f.calcularRemuneracaoLiquida();

            totalFolhaBase = totalFolhaBase.add(f.getSalarioBase());
            totalProvisaoBonus = totalProvisaoBonus.add(bonus);

            System.out.printf("%-8s | %-20s | R$ %10.2f | R$ %10.2f | R$ %11.2f%n",
                    f.getMatricula(), f.getNome(), f.getSalarioBase(), liquido, bonus);
        }

        System.out.println("--------------------------------------------------------------------------------");
        System.out.printf("Custo Mensal Consolidado (Base) : R$ %,11.2f%n", totalFolhaBase);
        System.out.printf("Provisão Total de PLR & Bônus   : R$ %,11.2f%n", totalProvisaoBonus);
        System.out.println("================================================================================");
    }
}

📋 Resultado Esperado no Console

================================================================================
          PROCESSAMENTO POLIMÓRFICO DE BENEFÍCIOS CORPORATIVOS (JAVA 21)       
================================================================================
MATR.    | COLABORADOR          | SALÁRIO BASE | LÍQUIDO MÊS  | BÔNUS ANUAL   
---------+----------------------+--------------+--------------+---------------
ENG-401  | Guilherme Santos     | R$   11500.00 | R$    8970.00 | R$    16000.00
PM-202   | Juliana Martins      | R$   14200.00 | R$   11076.00 | R$    24140.00
DIR-001  | Marcus Valério       | R$   32000.00 | R$   24960.00 | R$    75000.00
--------------------------------------------------------------------------------
Custo Mensal Consolidado (Base) : R$   57.700,00
Provisão Total de PLR & Bônus   : R$  115.140,00
================================================================================