Article image
Vitor Ribeiro
Vitor Ribeiro17/09/2022 10:20
Compartilhe

Conceitos de Programação Orientada a Objetos (Java)

  • #Java

Conceitos de Programação Orientada a Objetos (Java)

Bom dia pessoal! O tema de hoje é POO!

Informo desde já que a fonte usada para escrever o artigo é o próprio site da Oracle (linguagem Java).

Para mais informações, vocês podem consultar a documentação da linguagem no site https://docs.oracle.com/javase/tutorial/java/TOC.html

 

O que é um objeto?

Os objetos são a chave para entender a orientação a objetos. No mundo real, os objetos possuem estado (características, informações, estado físico) e comportamento (ações em geral). Como exemplo citado pelo site da Oracle, uma lâmpada pode ter dois estados (ligado e desligado) e dois comportamentos (ligar e desligar). Tranquilo aqui? Pois em software, os objetos são conceitualmente semelhantes, armazenando seu estado em variáveis (atributos ou campos) e mostrando seus comportamentos por meio de métodos (ou funções).

Ao atribuir o estado (as variáveis ou atributos) e fornecer métodos (ou funções) – ou seja, ao atribuir “informações” e “o que esse objeto faz”, você cria um controle de como esse objeto irá funcionar. Por exemplo, se um carro possui 5 marchas, um método pode rejeitar qualquer valor menor que 1 ou maior que 5.

 

Tudo bem, mas podem existir vários carros, correto? Eu consigo estipular um carro genérico (apenas carro) e criar objetos (carros específicos, como por exemplo um modelo) com base nesse meu carro genérico? Sim! E aí chegamos no ponto:

 

O que é uma classe?

Como citado acima, podem existir inúmeros carros, correto? Em orientação a objetos, dizemos que o carro é uma instância da classe de objetos conhecido como carros. Uma classe é o modelo (o genérico) a partir do qual os objetos individuais são criados.

Imagine que você tenha uma loja e precise controlar o estoque de produtos. Para isso, podemos criar uma classe Produtos (ou seja, o modelo padrão), e que cada produto terá 3 informações: um nome, um preço, e a quantidade desse produto no estoque. Vamos lá?

 

classe Produto {

String nome;              -> String por receber um texto

double preco;             -> double por receber um valor que pode ser “quebrado”, como 2,50

int quantidade;           -> int por ser apenas valores inteiros, você não possui meio produto

image

Observação: não se preocupem aqui com o código, mas com o conceito. Não vou entrar no detalhe da linguagem, então relevem algum “erro” de código.

 

Criamos nossa classe Produto! Vamos então criar um método para calcular o valor total em estoque de um objeto? Vitor, mas sem criar um objeto específico ainda? Sim! Vamos implementar no nosso “genérico”, daí todos os objetos criados a partir do genérico poderão utilizar desse método que foi criado ( e criamos apenas uma vez)! Imagine você criar copiar uma fórmula todas as vezes que desejar saber o valor em estoque de um produto? Pra isso implementamos métodos na nossa classe para facilitar esse acesso.

Double totalEmEstoque {                    

Return preco * quantidade;

}

}

image

Nosso método será um double por poder receber e retornar valores quebrados. O nome do método é totalEmEstoque e ele vai retornar o produto do preço vezes a quantidade em estoque.

Pronto! Qualquer produto novo (objeto) que criarmos com base no nosso produto genérico (classe Produto) poderá receber 3 dados (nome, preço e quantidade em estoque) e retornar o total do valor desse produto no estoque (método totalEmEstoque).

 

E como criamos agora um produto específico?

Na nossa classe principal, ao invés de criar uma variável int ou double por exemplo, criamos uma variável do tipo Produto! Louco né?

Então, em Java, ficaria assim:

 

Produto produto1 = new Produto();

image

Importante citar que para que isso funcione, precisamos importar a classe Produto na nossa classe principal.

image

 

Criamos nosso produto produto1! Não passamos nenhum argumento, por isso o () vazio.

Como atribuímos valores às nossas 3 características do produto(nome, preço e quantidade)? Com a entrada de dados!

produto1.name = sc.nextLine();

produto1.preco = sc.nextDouble();

produto1.quantidade = sc.nextInt();

image

Ou seja, ao criarmos nosso produto vazio, ele já entendeu que devem existir 3 espaços em branco para atribuirmos valores (nome, preço e quantidade). Ao digitarmos produto1.nome, informamos que os dados que iremos digitar serão atribuídos ao espaço “nome” do produto (e assim com o preço e com a quantidade). Se tivéssemos digitado (TV, 1000, 5) ficaria:

 

Antes da atribuição:                                   Depois:

Produto1                                                     Produto1

Nome: "vazio";                                             Nome: TV (exemplo)

Preço: "vazio";                                             Preço: 1000,00 (exemplo)

Quantidade: "vazio";                                    Quantidade: 5 (exemplo)

 

Agora sim, nosso objeto (produto1) está criado e com as devidas atribuições realizadas. E como saber agora o total em valor que temos no estoque desse produto1 em específico? Chamando o método totalEmEstoque! Como?

 

System.out.println(produto1.totalEmEstoque());

image

 

Quando nosso objeto (produto1) foi criado com base na classe Produto, além de reconhecer que ele deveria existir com 3 informações (nome, preço e quantidade), ele também recebeu a informação de que existe um cálculo que ele pode realizar (o método totalEmEstoque). Ao digitarmos produto1.totalEmEstoque(), acionamos esse cálculo dentro do nosso produto1. Qual conta esse método realiza (e irá retornar)? O preço multiplicado pela quantidade, lembra? Quando digitamos(atribuímos) que nossa TV tem o preço de 1000 e temos 5 em estoque, o que o nosso System.out.println irá mostrar na tela? 5000!

Imagine agora como isso simplifica para você criar 100, 200, 1000 produtos diferentes?

image

Segue imagem de como ficaria completo na IDE Eclipse:

classe Produto (no pacote entities):

image

classe Principal (Main):

image

 

É isso pessoal iniciante! Espero que tenha clareado um pouco as coisas sobre como funciona a orientação a objetos. De novo, o intuito não foi ensinar a linguagem, mas sim o conceito da POO sobre instâncias de classes e objetos(Também sou iniciante, e escrever me ajuda a entender melhor sobre o que estou estudando). Num próximo artigo, pretendo dar seguimento nesses conceitos tão importantes!

Continuem seus estudos, e aqui na DIO existem cursos excelentes sobre o tema!

Qualquer sugestão, correção ou crítica, comentem abaixo!

Compartilhe
Comentários (4)
Roberto Moreira
Roberto Moreira - 25/09/2022 06:27

Bom dia Vitor ,


Muito bom, ajudou a clarear os conceitos de POO!

Carlos Dario
Carlos Dario - 17/09/2022 12:24

Muito didático, parabéns!

Diogo Dantas
Diogo Dantas - 17/09/2022 11:38

Muito show, obrigado por compartilhar!!

Tiago Hilario
Tiago Hilario - 17/09/2022 11:06

Muito bom !