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.
Neste curso, vamos abordar alguns aspectos da orientação a objetos. Vamos compreender melhor:
Aguardamos você!
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.
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.
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.
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.
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:
String nome
para representar o nome da pessoa colaboradora;String cargo
para representar o cargo edouble salario
para representar o salário.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;
}
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();
}
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;
}
}
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);
}
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
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);
}
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.
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.
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!
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:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.