Alura > Cursos de Programação > Cursos de Java > Conteúdos de Java > Primeiras aulas do curso Praticando Java: Orientação a Objetos com classes, atributos e métodos

Praticando Java: Orientação a Objetos com classes, atributos e métodos

Java: classes, atributos e métodos - Apresentação

Olá, meu nome é Jaqueline Oliveira, sou engenheira de software e instrutora aqui na Alura.

Audiodescrição: Jaqueline se identifica como uma mulher de pele branca. Possui cabelos longos e reflexos louros. Veste uma blusa rosa. Ao fundo, há uma parede lisa iluminada em tons de azul, com uma estante cheia de objetos à direita.

O que aprenderemos?

Neste curso, vamos abordar alguns aspectos da orientação a objetos. Vamos compreender melhor:

Aguardamos você!

Java: classes, atributos e métodos - Classes, atributos e métodos

A Programação Orientada a Objetos, ou POO, é um paradigma de programação que organiza o código em torno de objetos. Esses objetos representam qualquer entidade do mundo real — por exemplo, um filme, uma conta bancária, uma pessoa ou um animal.

Todos os objetos possuem características e comportamentos, que na programação chamamos de atributos e métodos. A ideia central da POO é refletir exatamente o que cada objeto tem, o que ele é, o que ele faz e como interage com outros objetos.

Assim, pensaremos na própria entidade do mundo real. Teríamos uma classe Empresa para representar a empresa, uma classe de pessoa colaboradora, uma classe de departamento, e uma pessoa colaboradora pertence a um departamento. Vamos criar representações do mundo real e modelá-las em formato de software.

Conhecendo os pilares da programação orientada a objetos

A Programação Orientada a Objetos é baseada em quatro pilares:

Neste curso, nosso foco principal será na abstração, que consiste em transformar um elemento da vida real em código, descobrindo como atribuir valores, manipular esses valores e objetos, e entender mais sobre classes, objetos e instâncias. Em cursos posteriores, abordaremos os outros pilares.

Vantagens da Orientação a Objetos

Baseado no que foi discutido, as vantagens que perceberemos ao longo do tempo utilizando orientação a objetos são:

Conforme mergulharemos no assunto e utilizaremos cada vez mais a POO, tornaremos mais claros os motivos pelos quais ela promove todos esses benefícios.

Modelando situações da vida real

Para fazer isso de forma prática, vamos abrir o IntelliJ, acessar o arquivo Pricipal e modelar situações da vida real.

A estrutura base do arquivo Principal é a seguinte:

Principal.java:

package br.com.alura;

public class Principal {

    public static void main(String[] args) {
    
    }
    
}

Vamos pensar em um cenário para modelar na aplicação. Suponhamos que queiramos representar uma empresa, que tem várias pessoas colaboradoras. Queremos definir que cada pessoa tem um nome, um cargo e um salário. Vamos definir três características apenas.

Para modelar isso na nossa aplicação, se quiséssemos criar, por exemplo, duas pessoas colaboradoras, teríamos que criar seis variáveis: nome pessoa colaboradora 1, nome pessoa colaboradora 2, cargo pessoa colaboradora 1, cargo pessoa colaboradora 2. Isso não é uma boa prática.

Se temos um modelo comum para as duas situações, o ideal é criar uma classe. Independentemente do número de pessoas colaboradoras da empresa, todas terão um nome, um cargo e um salário. Vamos representar uma pessoa colaboradora na aplicação através de uma nova classe.

Criando a classe Funcionario

Vamos criar uma classe Funcionario e colocar essas características. Acessando o explorador de arquivos na lateral esquerda do IntelliJ, clicaremos no pacote "br.com.alura", apertaremos "Alt + Insert" para abrir o menu suspenso e selecionar "Java Class" para criar uma nova classe Java.

Na janela modal exibida, adicionaremos o nome da classe, que será Funcionario, e pressionaremos "Enter" para acessar automaticamente o arquivo dessa classe.

Funcionario.java:

package br.com.alura;

public class Funcionario {
    
}

Para definir as características dessa pessoa colaboradora, criaremos atributos nessa classe — ou seja, entre as chaves de representação public class Funcionario.

Nossos atributos serão:

Assim, definimos a classe Funcionario, criando um modelo para representar as pessoas colaboradoras, dizendo que todas terão nome, cargo e salário.

public class Funcionario {
    String nome;
    String cargo;
    double salario;
}

Criando Instâncias de Funcionários

Para criar novas pessoas colaboradoras a partir dessa estrutura, voltaremos para a classe Principal, que tem o método public static void main, o ponto de entrada.

Entre suas chaves, criaremos pessoas colaboradoras a partir dessa estrutura. Isso significa criar uma instância, um objeto específico para representar um elemento daquele modelo, com valores independentes. Cada nova pessoa colaboradora ocupará um espaço diferente na memória e guardará suas características.

Para criar uma nova pessoa colaboradora, diremos o tipo Funcionario, e chamamos esse elemento de funcionario1. Para criar uma nova instância a partir daquele modelo, colocaremos new Funcionario(). Isso significa que estamos criando um novo objeto chamado funcionario1, que terá nome, cargo e salário, seguindo o padrão da classe Funcionario.

public static void main(String[] args) {
    Funcionario funcionario1 = new Funcionario();
}

Atribuindo valores aos atributos

Para atribuir as informações de funcionario1, desceremos uma linha e colocaremos funcionario1.nome, o sinal de igual (representando o "recebe"), e entre aspas duplas o nome dessa pessoa colaboradora — por exemplo, "Ana".

funcionario1.nome = "Ana";

Para definir o cargo, faremos o mesmo: funcionario1.cargo recebe "Gerente de projetos". Por fim, funcionario1.salario recebe 9000.

funcionario1.cargo = "Gerente de projetos";
funcionario1.salario = 9000;

Assim, criamos uma instância de Funcionario, pegamos esse modelo e definimos que funcionario1 pertence a ele, com todas as características: nome, cargo e salário. Atribuiremos essas informações na classe principal.

Pulando uma linha, faremos o mesmo para um funcionario2. Criaremos funcionario2 que recebe new Funcionario(), e atribuiremos valores para ele também: funcionario2.nome será "João", funcionario2.cargo será "Desenvolvedor", e funcionario2.salario será 8500.

Funcionario funcionario2 = new Funcionario();
funcionario2.nome = "João";
funcionario2.cargo = "Desenvolvedor";
funcionario2.salario = 8500;

Assim, criamos dois objetos do mesmo modelo Funcionario, que terão ambos seus nomes, cargos e salários. Cada instância guardará suas propriedades específicas, e cada objeto terá seus valores diferenciados.

public class Principal {
    public static void main(String[] args) {
        Funcionario funcionario1 = new Funcionario();
        funcionario1.nome = "Ana";
        funcionario1.cargo = "Gerente de projetos";
        funcionario1.salario = 9000;

        Funcionario funcionario2 = new Funcionario();
        funcionario2.nome = "João";
        funcionario2.cargo = "Desenvolvedor";
        funcionario2.salario = 8500;
    }
}

Exibindo as informações

Suponhamos que desejássemos exibir as informações de uma pessoa colaboradora. Para evitar a necessidade de inserir manualmente os valores dentro da classe principal, podemos criar um método na classe Funcionario, chamado, por exemplo, exibirInformacoes(). Criaremos esse método abaixo dos atributos.

Assim, cada vez que chamarmos exibirInformacoes(), cada objeto exibirá suas próprias informações. Ao utilizar funcionario1.exibirInformacoes(), por exemplo, ele mostrará os dados de Ana, seu cargo e seu salário.

Vamos criar esse método na classe Funcionario para visualizar isso em ação. Na classe Funcionario.java, criaremos um método público, ou seja, public, do tipo void, pois não terá retorno, chamado exibirInformacoes().

public void exibirInformacoes() {
    
}

Entre as chaves, definiremos o que queremos exibir. Utilizaremos System.out.printf() para formatar a saída, incluindo entre aspas duplas Funcionário %s, Cargo %s, e Salário %.2f, para exibir o salário com duas casas decimais. Em seguida, passaremos os atributos que devem ser exibidos: nome, cargo e salario.

public void exibirInformacoes() {
    System.out.printf("Funcionario %s - Cargo: %s - Salário %.2f",
            nome, cargo, salario);
}

Testando o método de exibição

Retornaremos à classe Principal para testar esse método. Entre suas chaves, adicionaremos uma linha abaixo do restante do código para exibir os dados do funcionario1 com funcionario1.exibirInformacoes().

Principal.java:

funcionario1.exibirInformacoes();

Ao executar a aplicação, o console mostrará:

Funcionário Ana - Cargo: Gerente de Projetos - Salário: 9000,00

Em seguida, substituiremos funcionario1 por funcionario2 para exibir os dados desse outro objeto.

funcionario2.exibirInformacoes();

Apesar de ambos derivarem da mesma estrutura Funcionario, cada um representará seus próprios dados. Assim, será exibido:

Funcionário João - Cargo: Desenvolvedor - Salário: 8500,00

Reajustando salários

Para aprimorar nosso conhecimento, criaremos outro método para reajustar o salário da pessoa colaboradora. Na classe Funcionario, abaixo do método exibirInformacoes() criaremos um novo método público, public void reajustarSalario(), que receberá um parâmetro double percentual.

Funcionario.java:

public void reajustarSalario(double percentual) {
    
}

O objetivo é reajustar o salário com base nesse percentual. O novo salário será calculado como o salario atual mais o salario multiplicado pelo percentual dividido por 100. Em seguida, exibiremos o novo salário utilizando System.out.printf(), formatando a saída como "Novo salário de %s é %.2f", passando o nome e o novo salario.

public void reajustarSalario(double percentual) {
    salario += salario * (percentual / 100);
    System.out.printf("\nNovo salario de %s é %.2f ", nome, salario);
}

Testando o reajuste de salário

Vamos testar o reajuste de salário. Na classe Principal, após exibir as informações de João com funcionario2.exibirInformacoes(), reajustaremos o seu salário, definindo o percentual em 5%, com o comando funcionario2.reajustarSalario(5). Em seguida, exibiremos as informações de Ana.

Principal.java:

funcionario2.reajustarSalario(5);
funcionario1.exibirInformacoes();

Ao executar a aplicação, serão exibidos os dados iniciais. Após o reajuste, o novo salário de João será 8925. As informações de Ana serão impressas na mesma linha do ajuste, pois não incluímos uma quebra de linha no printf().

Funcionário João - Cargo: Desenvolvedor - Salário: 8500,00 Novo salario de João é 8925,00 Funcionário Ana - Cargo: Gerente de projetos - Salário: 9000,00

Observamos que o reajuste de salário ocorreu especificamente para funcionario2, que representa João. Cada objeto é independente e representa uma pessoa colaboradora distinta, mesmo que derivado da mesma estrutura. O reajuste aplicado a João não afetou as informações de Ana.

Conclusão e Próximos Passos

Trabalhamos com classes e objetos criando um modelo através da classe e instâncias através dos objetos, personalizando cada pessoa colaboradora, como ocorre na vida real. Sabemos quais informações são necessárias para uma pessoa colaboradora na empresa, mas João é um, Ana é outra, e cada uma é única.

A orientação a objetos lida com a aproximação ao mundo real, usando a abstração para modelar no software. Vimos como definir atributos e criar a classe Funcionario, indicando atributos como nome, cargo e salário, e como criar métodos que representam comportamentos ou ações para cada pessoa colaboradora.

Podemos exibir informações ou reajustar salários, centralizando essas ações na classe. Na classe principal, atribuímos valores aos atributos e chamamos métodos para cada instância de pessoa colaboradora.

Próximos passos

No curso de encapsulamento, exploraremos melhorias na forma de atribuir e buscar valores das pessoas colaboradoras, protegendo alguns dados. Para este primeiro pilar de abstração, transformamos elementos da vida real em classes e objetos no Java.

Esperamos que o conteúdo tenha sido útil. Não deixe de avaliar o curso para que possamos melhorar continuamente. Em caso de dúvidas, estamos disponíveis no Discord ou no fórum. Até o próximo curso!

Sobre o curso Praticando Java: Orientação a Objetos com classes, atributos e métodos

O curso Praticando Java: Orientação a Objetos com classes, atributos e métodos possui 19 minutos de vídeos, em um total de 16 atividades. Gostou? Conheça nossos outros cursos de Java em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Java acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas