AULA 02 MÓDULO 1 fundamentos java ⏱ 50 min

Classe, Objeto e UML

Modele antes de codificar. Diagrama de Classes UML. Classe vs objeto. Referências em Java. Tipos primitivos e Wrappers.

UMLdiagrama de classesreferênciaswrapperprimitivosinstanciação

Diagrama de Classes UML

Antes de escrever uma linha de código, o UML nos deixa modelar o sistema visualmente. O Diagrama de Classes é o mapa da estrutura do software — mostra classes, atributos, métodos e relacionamentos.

📐
conexão com Banco de Dados
Você já viu isso: Entidade → Classe, Atributo → campo, Instância → linha na tabela. O modelo OO e o modelo ER são representações diferentes do mesmo mundo.
┌──────────────────────┐ │ Livro │ ← nome da classe ├──────────────────────┤ │ - titulo: String │ ← atributos (- = private) │ - ano: int │ │ - autor: Autor │ ← relação com outra classe ├──────────────────────┤ │ + getTitulo(): String│ ← métodos (+ = public) │ + toString(): String │ └──────────────────────┘

Classe vs Objeto — molde vs instância

Classe é o molde — define estrutura e comportamento. Objeto é a instância — ocupa memória, tem estado próprio. Uma classe pode gerar milhares de objetos distintos.

🔑
referências em Java
Em Java, variável de objeto guarda uma REFERÊNCIA (endereço de memória), não o valor. Aluno a1 = a2 → os dois apontam para o mesmo objeto! Isso explica por que a1.setNota(9) afeta quem usa a2.
1
Livro livro1 = new Livro(...) — new aloca memória, construtor inicializa, livro1 guarda o endereço
2
Livro livro2 = livro1 — livro2 aponta para o MESMO objeto — não é uma cópia!
3
livro2.setAno(2025) — livro1.getAno() também retorna 2025 — mesmo objeto em memória
4
Para clonar: implement Cloneable — ou construtor cópia — Java não copia automaticamente

Tipos primitivos vs Wrapper

Java tem 8 tipos primitivos (int, double, boolean...) que NÃO são objetos. Para usar em coleções genéricas, use os Wrappers correspondentes.

PrimitivoWrapperUso típico
intIntegervariável, cálculo (mais rápido)
doubleDoubleponto flutuante
booleanBooleanflag
charCharactercaractere
longLongvalores grandes
📦
autoboxing
Java converte automaticamente: int → Integer (boxing) e Integer → int (unboxing). Cuidado: Integer a = null; int b = a; → NullPointerException em runtime!
java
// Classe Autor e Livro com relacionamento 1:1

public class Autor {
    private String nome;
    private String pais;

    public Autor(String nome, String pais) {
        this.nome = nome;
        this.pais = pais;
    }

    public String getNome() { return nome; }

    public String toString() {
        return nome + " (" + pais + ")";
    }
}

public class Livro {
    private String titulo;
    private int ano;
    private Autor autor; // relação: Livro TEM UM Autor

    public Livro(String titulo, int ano, Autor autor) {
        this.titulo = titulo;
        this.ano = ano;
        this.autor = autor;
    }

    public String toString() {
        return titulo + " (" + ano + ") por " + autor;
    }
}

public class Main {
    public static void main(String[] args) {
        Autor a = new Autor("Joshua Bloch", "EUA");
        Livro l = new Livro("Effective Java", 2018, a);
        System.out.println(l);
        // → Effective Java (2018) por Joshua Bloch (EUA)

        // Demonstrar referências: dois nomes, um objeto
        Livro outro = l;
        outro.toString(); // mesmo objeto que l
    }
}
quiz · aula 02
Teste seus conhecimentos em Java
0/3 respondidas
QUESTÃO 01
Qual é a diferença entre classe e objeto em Java?
QUESTÃO 02
O que acontece ao executar: Aluno a2 = a1; a2.setNota(10);
QUESTÃO 03
Por que Integer e não int para usar em ArrayList?
0/3