AULA 02 MÓDULO 1 fundamentos java ⏱ 60 min

Classe, Objeto e UML

A anatomia de uma classe: nome, atributos e métodos. Como ler um diagrama de classes UML, a diferença entre molde e instância, sua primeira classe do zero e o que acontece na memória quando um objeto nasce.

anatomia da classeUMLmolde vs instâncianewstack & heapreferências

Anatomia de uma classe

Na Aula 01 vimos que um objeto tem atributos e ações. A classe é onde declaramos isso. Toda classe precisa, inicialmente, de três coisas: um nome, seus atributos e seus métodos.

Cachorro tamanho : int raça : String latir() : void correr() : void Tipo a Classe (o nome) Atributos variáveis · o estado Métodos ações · o comportamento
As três partes de toda classe: o nome (tipo), os atributos (estado) e os métodos (comportamento).

A sintaxe mínima de uma classe em Java é só uma "casca" com nome e um corpo entre chaves:

java
class nome_da_classe {
    // corpo da classe: atributos e métodos vêm aqui
}
📄
regra do arquivo
A definição de uma classe pública deve ser guardada em um arquivo com o mesmo nome da classe e a extensão .java. A classe Cachorro → arquivo Cachorro.java.

Diagrama de Classes UML

Antes de escrever código, a UML deixa modelar o sistema visualmente. O Diagrama de Classes é o mapa da estrutura: usa exatamente as três partes que você acabou de ver — nome, atributos e métodos —, só que com uma notação padrão.

Conta - titular : String - saldo : double - numero : int + creditar(valor : double) + debitar(valor : double) : double Classe Atributos Métodos + público - interno (Aula 03)
Diagrama de classes da Conta: três compartimentos — Classe · Atributos · Métodos. Os sinais + e são visibilidade (vamos usar de verdade na Aula 03).
📐
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.

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, cada um com seus próprios valores.

1
A classe é escrita uma vez — ela só descreve como o objeto é
2
O objeto nasce com new — cada new reserva memória e cria uma instância independente
3
Cada objeto tem seu estado — mudar um cachorro não muda os outros

Seu primeiro código: a classe Cachorro

Vamos do jeito mais simples possível. Aqui os atributos ficam abertos (acessíveis direto) — sem private, sem getters. Isso é de propósito: proteger os dados é o tema da próxima aula. Por enquanto, só queremos criar e usar um objeto.

Cachorro.java
public class Cachorro {
    // atributos (campos) — o estado do objeto
    int tamanho;
    String raça;

    // método (ação) — o comportamento do objeto
    void latir() {
        System.out.println("Au, Au, Au!!");
    }
}

Em outro arquivo, a classe Main cria um objeto Cachorro, preenche seus atributos e chama sua ação:

Main.java
public class Main {
    public static void main(String[] args) {
        // new cria o objeto; pitbull guarda a referência a ele
        Cachorro pitbull = new Cachorro();

        pitbull.raça = "Pit Bull";   // acessa o atributo direto
        pitbull.tamanho = 40;

        pitbull.latir();              // chama a ação → Au, Au, Au!!
    }
}
▶️
rodando
No terminal da pasta do projeto: javac *.java (compila os dois arquivos) e depois java Main. Saída: Au, Au, Au!!

O que acontece na memória

Quando você escreve new Cachorro(), duas coisas acontecem na memória RAM. O objeto (com seus dados) é criado no heap. A variável pitbull fica na stack e guarda apenas o endereço (a referência) desse objeto — não o objeto em si.

Cachorro pitbull = new Cachorro(); STACK · pilha variáveis locais do método main() { pitbull → ref (0x7A3F) } aponta para HEAP · monte onde os objetos vivem : Cachorro @0x7A3F tamanho = 40 raça = "Pit Bull"
A variável na stack guarda o endereço; o objeto com os dados vive no heap. new cria no heap e devolve a referência.
🔑
por que isso importa
Como a variável guarda o endereço, fazer Cachorro c2 = pitbull; não copia o objeto — copia o endereço. Os dois nomes apontam para o MESMO cachorro no heap. Mudar c2.tamanho muda pitbull.tamanho também.
1
Cachorro c2 = pitbull; — c2 recebe a mesma referência; não há objeto novo
2
c2.tamanho = 50; — altera o objeto no heap... que pitbull também vê
3
Para um objeto novo, use new de novo — cada new é um endereço diferente no heap

Evoluindo a classe: métodos com lógica

O Cachorro tinha um método simples. Agora a Conta do diagrama UML: os métodos recebem parâmetros e fazem contas. Note que os atributos continuam abertos — vamos manter assim até a Aula 03.

Conta.java
public class Conta {
    String titular;   // atributos abertos (por enquanto)
    double saldo;
    int numero;

    void creditar(double valor) {
        saldo = saldo + valor;          // soma ao saldo
    }

    double debitar(double valor) {
        saldo = saldo - valor;          // subtrai do saldo
        return saldo;                   // devolve o novo saldo
    }
}
Main.java
Conta c = new Conta();
c.titular = "Ana";
c.creditar(100.0);
c.debitar(30.0);
System.out.println(c.saldo);   // 70.0

// PROBLEMA: nada impede isto 👇
c.saldo = -9999;            // saldo inválido, e ninguém barra!
➡️
gancho para a Aula 03
Viu o problema? Com os atributos abertos, qualquer parte do código pode colocar saldo = -9999. A solução — esconder os atributos com private e controlar o acesso por métodos — é o encapsulamento, o assunto da próxima aula.

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!
quiz · aula 02
Teste seus conhecimentos em Java
0/4 respondidas
QUESTÃO 01
Quais são as três partes que toda classe precisa, inicialmente?
QUESTÃO 02
Qual é a diferença entre classe e objeto em Java?
QUESTÃO 03
O que acontece ao executar: Cachorro c2 = pitbull; c2.tamanho = 50;
QUESTÃO 04
Por que Integer e não int para usar em ArrayList<Integer>?
0/4