AULA 05
MÓDULO 1
métodos java
⏱ 50 min
Métodos e Responsabilidade
Tell, Don't Ask: o objeto executa, não expõe. Métodos de instância vs estáticos. Scanner para entrada. Boas práticas de nomenclatura.
Tell Don't AskstaticinstânciaScannerMathString.format
Tell, Don't Ask
Princípio fundamental: diga ao objeto O QUE FAZER, não pergunte seus dados para decidir por ele. Objetos são responsáveis pelo próprio comportamento.
errado — Ask
if (conta.getSaldo() > valor) { conta.setSaldo(conta.getSaldo() - valor); }Código externo lê o saldo, decide, e modifica. Lógica de negócio vazou para fora da classe.
certo — Tell
conta.sacar(valor);A conta decide se pode sacar, executa a operação e lança exceção se não puder. Toda a lógica fica encapsulada na classe.
Tipos de métodos
Métodos de instância operam sobre o estado do objeto. Métodos estáticos são utilitários — não dependem de estado de instância.
| Tipo | Acessa this? | Quando usar | Exemplo |
|---|---|---|---|
| Instância | ✓ sim | Comportamento que usa/modifica estado | conta.depositar(100) |
| Estático | ✗ não | Utilitário independente do estado | Math.sqrt(4) |
| Estático factory | ✗ não | Criação de objetos com nome semântico | Pedido.urgente(cliente) |
métodos com bom nome
Nome = verbo + complemento. calcularArea(), validarEmail(), gerarCodigo(). Nunca: metodo1(), processa(), faz(). O nome é documentação.Scanner — entrada do usuário
Scanner lê dados do teclado ou de arquivos. Sempre feche com scanner.close() ou use try-with-resources.
nextLine() após nextInt()
Após scanner.nextInt(), há um '\n' residual no buffer. Chame scanner.nextLine() vazio antes do próximo nextLine() para consumir o resíduo. Erro clássico de iniciante em Java.
java
// Métodos — Tell Don't Ask em ação public class Triangulo { private final double a, b, c; public Triangulo(double a, double b, double c) { if (!validar(a, b, c)) throw new IllegalArgumentException("Lados inválidos para triângulo"); this.a = a; this.b = b; this.c = c; } // Método estático — utilitário independente de estado public static boolean validar(double a, double b, double c) { return a > 0 && b > 0 && c > 0 && a+b > c && a+c > b && b+c > a; } // Método de instância — usa estado do objeto public double calcularPerimetro() { return a + b + c; } // Fórmula de Heron — área sem saber a altura public double calcularArea() { double s = calcularPerimetro() / 2; return Math.sqrt(s * (s-a) * (s-b) * (s-c)); } public String toString() { return String.format("Triângulo(%.1f,%.1f,%.1f) área=%.2f", a, b, c, calcularArea()); } } // Scanner com try-with-resources try (Scanner sc = new Scanner(System.in)) { System.out.print("Lado a: "); double a = sc.nextDouble(); System.out.print("Lado b: "); double b = sc.nextDouble(); System.out.print("Lado c: "); double c = sc.nextDouble(); System.out.println(new Triangulo(a, b, c)); }
quiz · aula 05
Teste seus conhecimentos em Java
0/3 respondidas
QUESTÃO 01
O que viola o princípio Tell, Don't Ask?
QUESTÃO 02
Quando usar método static?
QUESTÃO 03
Qual problema ocorre com Scanner ao usar nextInt() seguido de nextLine()?
0/3