Orientação a Objetos em Java: Conceitos e Práticas

Programação Orinetada a Objetos (POO) é um paradigma que organiza o código em torno de objetos e classes. Em Java, esse paradigma é fundamental para criar software modular e reutilizável.

Conceitos Básicos

  • Classe: modelo que define atributos e comportamentos.
  • Objeto: instância cnocreta de uma classe.
  • Abstração: simplificação da realidade focando nos pontos essenciais.

Os pilares da POO são:

  • Encapsulamento: agrupar dados e métodos que operam sobre eles, controlando o acesso.
  • Herança: criar novas classes a partir de classes existentes.
  • Polimorfismo: permitir que um mesmo nome de método se comporte de diferentes formas.

Do ponto de vista conceitual, primeiro existem objetos concretos e depois abstraímos classes. Já na implementação, primeiro definimos a classe e depois criamos objetos a partir dela.

Métodos em Detalhe

Um método pode ser estático (asssociado à classe) ou de instância (associado ao objeto). A assinatura inclui modificador de acesso, tipo de retorno, nome e parâmetros.

Exemplo de definição e chamada de método:

// Exemplo01.java
public class Exemplo01 {
    public static void main(String[] args) {
        // Chamada de método não estático
        Exemplo01 obj = new Exemplo01();
        String saudacao = obj.dizerOla();
        System.out.println(saudacao);

        // Chamada de método estático
        int resultado = Exemplo01.somar(5, 3);
        System.out.println("Soma: " + resultado);
    }

    // Método de instância
    public String dizerOla() {
        return "Olá, mundo!";
    }

    // Método estático
    public static int somar(int a, int b) {
        return a + b;
    }
}

Diferença entre static e não static: métodos estáticos podem ser invocados sem criar uma instância, enquanto métodos de instância precisam de um objeto.

Exemplo de acesso a métodos estáticos e de instância:

// Aluno.java
public class Aluno {
    public static void falar() {
        System.out.println("O aluno está falando.");
    }

    public void andar() {
        System.out.println("O aluno está andando.");
    }
}

// TesteAluno.java
public class TesteAluno {
    public static void main(String[] args) {
        // Chamada estática direta
        Aluno.falar();

        // Chamada de instância
        Aluno aluno = new Aluno();
        aluno.andar();
    }
}

Passagem de Parâmetros

Em Java, a passagem de parâmetros é sempre por valor. Para tipos primitivos, o valor é copiado; para objetos, a referência é copiada (ainda assim, a referência aponta para o mesmo objeto).

Exemplo com tipo primitivo:

public class ExemploPassagem {
    public static void main(String[] args) {
        int numero = 10;
        System.out.println("Antes: " + numero);  // 10
        alterarPrimitivo(numero);
        System.out.println("Depois: " + numero); // ainda 10
    }

    public static void alterarPrimitivo(int valor) {
        valor = 20;
    }
}

Exemplo com objeto (tipo referência):

class Pessoa {
    String nome;
}

public class ExemploReferencia {
    public static void main(String[] args) {
        Pessoa pessoa = new Pessoa();
        System.out.println("Antes: " + pessoa.nome); // null

        alterarNome(pessoa);
        System.out.println("Depois: " + pessoa.nome); // "João"
    }

    public static void alterarNome(Pessoa p) {
        p.nome = "João";
    }
}

Ao passar um objeto, a variável de referência é copiada, mas ambas as referências apontam para o mesmo objeto na memória. Portanto, alterar o objeto através da referência local modifica o objeto original.

Tags: java Orientação a Objetos métodos estático instância

Publicado em 6-29 02:08