Agenda da Aula

OO UML SOLID TDD IA Agents

1) Dados x Comportamento

Na aula anterior o foco foi estado (tabelas, colunas, normalização). Nesta aula, o foco passa a ser comportamento (classes, métodos, contratos e invariantes).

struct Aluno { string nome; }
class Aluno { Matricular() { ... } }

Ideia central: objetos combinam dados + comportamento e protegem regras de negócio.

2) Encapsulamento Real (Tell, Don't Ask)

Encapsular não é expor tudo com getter/setter. É proteger invariantes e impedir manipulação indevida do estado.

// Errado (anêmico)
var conta = new Conta();
if (conta.Saldo >= 100) {
  conta.Saldo -= 100;
}

// Certo (comportamento)
var conta = new Conta();
try {
  conta.Sacar(100);
} catch (SaldoInsuficienteException e) { ... }

Lei de Demeter: evitar acoplamento profundo, como pedido.Cliente.Endereco.Cep.

3) Herança vs Composição

class PatoBorracha : Pato {
  override Voar() { throw new Error(); }
} // Quebrou contrato

class Pato {
  private IVoador _comportamentoVoo;
  public Pato(IVoador v) { _comportamentoVoo = v; }
}

Regra prática: favoreça composição sobre herança.

4) Polimorfismo e DIP

Dependências devem apontar para abstrações, não implementações concretas.

// Acoplado
class PagamentoService {
  private PayPal _paypal = new PayPal();
}

// Desacoplado
class PagamentoService {
  private IPagamento _gateway;
  public PagamentoService(IPagamento gateway) {
    _gateway = gateway;
  }
}

Esse desenho facilita manutenção, testes com mock e evolução do sistema.

5) UML para Comunicação Técnica

6) SOLID (SRP e OCP)

7) TDD na Prática

Ciclo: RED → GREEN → REFACTOR.

[Test]
public void Frete_DeveSerZero_ParaPedidosAcimaDe200() {
  var calc = new FreteCalculadora();
  var valor = calc.Calcular(pedidoTotal: 250);
  Assert.AreEqual(0, valor);
}

public class FreteCalculadora {
  public decimal Calcular(decimal pedidoTotal) {
    if (pedidoTotal > 200) return 0;
    return 20;
  }
}

Primeiro validar comportamento observável; depois refatorar com segurança.

8) Anti-patterns em TDD

9) IA + Engenharia: foco em output

Com agentes, o trabalho do engenheiro é cada vez mais governar outputs: ler, interpretar, validar comportamento e gerenciar falhas, sem abandonar leitura crítica de código.

// Pipeline orientado a output
RED: teste falha e representa risco real
GREEN: patch minimo para passar
REFACTOR: melhora design sem alterar comportamento
CHECK: cobertura, seguranca, desempenho e regressao

10) Analogia com Engenharia de Chips + ATAM

Na engenharia de semicondutores, ninguém gerencia transistor por transistor. O controle é feito por especificação, simulação, validação e análise de risco de comportamento.

Em software com IA, vale o mesmo princípio: foco em qualidade arquitetural e falhas observáveis.

Referências e Continuidade