Introdução À Programação OO em Java - Tema - 02
Introdução À Programação OO em Java - Tema - 02
Introdução à programação
OO em Java
Prof. Sérgio Assunção Monteiro
Apresentação Ao longo deste material, você vai aprender sobre os conceitos e os elementos fundamentais para
desenvolver aplicações com uma das principais linguagens de programação orientada a objetos
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 1/155
18/02/2024, 16:45 Introdução à programação OO em Java
(POO): Java. Essa linguagem tem uma importância gigantesca em diversas aplicações práticas.
Propósito
Preparação É importante instalar o Java JDK adequado para a versão do seu sistema operacional no site
oficial da Oracle, na sua máquina de trabalho e utilizar uma IDE. No nosso caso, vamos utilizar o
Eclipse.
Objetivos
Módulo 1 Módulo 2
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 2/155
18/02/2024, 16:45 Introdução à programação OO em Java
Módulo 3 Módulo 4
meeting_room Introdução
A programação orientada a objetos (POO) é um paradigma que surgiu em
resposta à crise do software. A POO buscou resolver diversos problemas
existentes no paradigma de programação estruturada, como a manutenibilidade e
o reaproveitamento de código. Essas deficiências tiveram papel central na crise,
pois causavam o encarecimento do desenvolvimento e tornavam a evolução do
software um desafio.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 3/155
18/02/2024, 16:45 Introdução à programação OO em Java
Neste estudo, começaremos pela forma como Java trata e manipula classes e
objetos. Com isso, também traremos conceitos de orientação a objetos que são
essenciais para compreender o funcionamento de um software em Java. O nosso
objetivo é obtermos os conhecimentos necessários para nos destacarmos nesse
mercado que possui uma grande demanda de profissionais tecnicamente
capacitados e com habilidades para resolver problemas demandados pelo
mercado.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 4/155
18/02/2024, 16:45 Introdução à programação OO em Java
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 5/155
18/02/2024, 16:45 Introdução à programação OO em Java
1 - Classes e objetos
Ao final deste módulo, você será capaz de descrever a definição, a manipulação e as nuances de
classes e objetos em Java.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 6/155
18/02/2024, 16:45 Introdução à programação OO em Java
keyboard_arrow_down Dados
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 7/155
18/02/2024, 16:45 Introdução à programação OO em Java
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 8/155
18/02/2024, 16:45 Introdução à programação OO em Java
Em Java, cada classe pública deve estar em um arquivo com o mesmo nome da
classe e extensão “java”. Logo, a classe do código superior deve ser salva em um
arquivo de nome “Aluno.java”.
Dica
O site jdoodle possui um compilador java online, onde você pode copiar e executar os códigos.
looks_one looks_two
Normal Enum
A partir disso, vamos nos deter apenas à forma normal.
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 9/155
18/02/2024, 16:45 Introdução à programação OO em Java
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 10/155
18/02/2024, 16:45 Introdução à programação OO em Java
JAVA
content_copy
Considerando que:
Annotation expand_more
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 11/155
18/02/2024, 16:45 Introdução à programação OO em Java
Static expand_more
Strictfp expand_more
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 12/155
18/02/2024, 16:45 Introdução à programação OO em Java
Composição de modificadores
Podemos combinar alguns desses modificadores com outros. Por exemplo, podemos
definir uma classe da seguinte forma:
JAVA
content_copy
Outro elemento opcional são os "TipoParâmetros". Vale ressaltar que esses elementos
estão relacionados à implementação de programação genérica em Java, e estão além
do escopo abordado neste contexto.
Veja a seguir um exemplo mais complexo que utiliza mais recursos de declaração de
classe em Java:
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 14/155
18/02/2024, 16:45 Introdução à programação OO em Java
Esse exemplo código é apenas conceitual. A ideia é nos acostumarmos com o Java e
obtermos o melhor do potencial que ele pode nos oferecer.
Atividade 1
B Class Aluno{}
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 15/155
18/02/2024, 16:45 Introdução à programação OO em Java
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 16/155
18/02/2024, 16:45 Introdução à programação OO em Java
Instanciação de classes
As classes são modelos. Para realmente realizarmos atividades em um programa,
precisamos instanciá-las. Chamamos essas instâncias de objetos. Para
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 17/155
18/02/2024, 16:45 Introdução à programação OO em Java
looks_one looks_two
Declaramos um objeto como sendo do Na sequência, instanciamos o objeto e
tipo de uma classe. passamos a utilizá-lo.
JAVA content_copy
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 18/155
18/02/2024, 16:45 Introdução à programação OO em Java
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 19/155
18/02/2024, 16:45 Introdução à programação OO em Java
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 20/155
18/02/2024, 16:45 Introdução à programação OO em Java
Devemos notar que o método construtor e classe possuem o mesmo nome. Além
disso, passamos dois parâmetros para o construtor para estabelecer o
comportamento inicial do objeto que vai instanciá-la. Outro ponto que precisamos
observar é o escopo das variáveis dentro de uma classe. Por exemplo, vamos supor
que tirássemos o trecho do seguinte código.
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 21/155
18/02/2024, 16:45 Introdução à programação OO em Java
JAVA
content_copy
Estados de um objeto
O estado de um objeto é definido pelos seus atributos, enquanto seu comportamento
é determinado pelos seus métodos. Por exemplo, vamos considerar a seguinte
instanciação a partir da classe do código anterior:
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 22/155
18/02/2024, 16:45 Introdução à programação OO em Java
JAVA
content_copy
Por fim, chegamos à última etapa do ciclo de vida de um objeto: a sua destruição. Na
linguagem Java, não é possível ao programador destruir manualmente um objeto. Em
vez disso, o Java implementa o conceito de coletor de lixo no qual a JVM varre o
programa verificando objetos que não estejam mais sendo referenciados. Ao
encontrar tais objetos, a JVM os destrói e libera a memória. O programador não possui
qualquer controle sobre isso.
Atenção!
O programador tem a possibilidade de solicitar à JVM a realização da coleta de lixo, através da invocação do
método "gc()" da biblioteca System. Mas isso é apenas uma solicitação, ou seja, não é uma ordem de
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 23/155
18/02/2024, 16:45 Introdução à programação OO em Java
execução. Na prática, isso significa que a JVM tentará executar a coleta de lixo tão logo quanto possível, mas
não necessariamente quando o método foi invocado.
Atividade 2
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 24/155
18/02/2024, 16:45 Introdução à programação OO em Java
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 25/155
18/02/2024, 16:45 Introdução à programação OO em Java
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 26/155
18/02/2024, 16:45 Introdução à programação OO em Java
Roteiro de prática
Passo 1
No caso do Java, o encapsulamento é um mecanismo que permite o agrupamento de
dados e métodos em uma única unidade chamada classe que atende a dois
propósitos principais. Vamos conferí-los!
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 27/155
18/02/2024, 16:45 Introdução à programação OO em Java
Abstração expand_more
Passo 2
Agora, implemente o exemplo de código em Java que usa o encapsulamento:
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 28/155
18/02/2024, 16:45 Introdução à programação OO em Java
Passo 3
Execute o programa e observe o resultado:
Pessoa 1: Teste A
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 29/155
18/02/2024, 16:45 Introdução à programação OO em Java
looks_one looks_two
O modificador “private” usado no método O modificador “public” usado nos
“setNome”, o qual indica que ele só pode métodos “getNome” e
ser usado por métodos dentro da própria “getCodigoIdentificador”, os quais
classe. indicam que podem ser chamados por
objetos que instanciam a classe.
É interessante executar esse exemplo para que você comece a ganhar mais segurança
sobre a sintaxe da linguagem Java e, além disso, perceba as vantagens de proteger os
dados da classe e garantir um comportamento previsível.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 30/155
18/02/2024, 16:45 Introdução à programação OO em Java
Chave de respostaexpand_more
JAVA content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 31/155
18/02/2024, 16:45 Introdução à programação OO em Java
Associação
É semanticamente a relação mais fraca e se refere a objetos que consomem – usam – serviços ou
funcionalidades de outros. Ela pode ocorrer mesmo quando nenhuma classe possui a outra e cada
objeto instanciado tem sua existência independente do outro. Essa relação pode ocorrer com
cardinalidade “um para um”, “um para vários”, “vários para um” e “vários para vários”.
Agregação
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 32/155
18/02/2024, 16:45 Introdução à programação OO em Java
Ocorre entre dois ou mais objetos, com cada um tendo seu próprio ciclo de vida, mas com um objeto
(pai) contendo os demais (filhos). Precisamos compreender que, nesse caso, os objetos filhos podem
sobreviver à destruição do objeto pai. Um exemplo de agregação se dá entre as classes “Escola” e
“Aluno”, pois se uma escola deixar de existir, não significa que os alunos simplesmente deixarão de
existir.
Composição
Difere sutilmente da agregação, pois ocorre quando há uma relação de dependência entre o(s) filho(s)
e o objeto pai. Caso o pai deixe de existir, necessariamente o filho será destruído. Por exemplo, no
caso da relação entre uma classe “Escola” e as classes “Departamentos”, certamente, que a extinção
da escola implica a extinção dos departamentos.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 33/155
18/02/2024, 16:45 Introdução à programação OO em Java
Neste vídeo, você terá a oportunidade de identificar as diferentes relações que podem
ser implementadas no Java, além de assistir a um exemplo prático que demonstrará
como aplicar essas relações.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 34/155
18/02/2024, 16:45 Introdução à programação OO em Java
Roteiro de prática
Passo 1
Veja a seguir um exemplo de código em Java que nos auxilia a compreender de forma
mais clara as relações de agregação e composição entre objetos.
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 35/155
18/02/2024, 16:45 Introdução à programação OO em Java
Passo 2
Agora, vamos destacar alguns pontos importantes e que devem ser observados:
looks_one Devemos notar uma associação entre a classe Escola” e as classes “Endereco”,
“Departamento” e “Aluno”.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 36/155
18/02/2024, 16:45 Introdução à programação OO em Java
looks_two Devemos notar uma relação entre a classe “Escola” e “Aluno”. Nesse caso, trata-se de
uma agregação, pois os alunos ainda vão existir no caso de a escola ser extinta.
looks_3 Uma vez que o objeto do tipo “Escola” for destruído, necessariamente todos os objetos
do tipo “Departamento” também serão destruídos. Isso mostra uma relação forte entre
ambas as classes com o ciclo de vida dos objetos de “Departamento” subordinados ao
ciclo de vida dos objetos da classe “Escola”, ilustrando uma relação do tipo composição.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 37/155
18/02/2024, 16:45 Introdução à programação OO em Java
Chave de respostaexpand_more
JAVA content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 38/155
18/02/2024, 16:45 Introdução à programação OO em Java
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 39/155
18/02/2024, 16:45 Introdução à programação OO em Java
rua X, 7
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 40/155
18/02/2024, 16:45 Introdução à programação OO em Java
Roteiro de prática
A passagem de um objeto como parâmetro em um método, ou o retorno dele, é
sempre uma passagem por referência. Isso não ocorre com tipos primitivos, que são
sempre passados por valor.
Passo 1
Implemente os seguintes códigos:
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 41/155
18/02/2024, 16:45 Introdução à programação OO em Java
Passo 2
Implemente a classe “Referencia”, cujo código é apresentado a seguir:
JAVA content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 42/155
18/02/2024, 16:45 Introdução à programação OO em Java
Passo 3
Execute o programa e veja se o resultado da execução desse código é:
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 43/155
18/02/2024, 16:45 Introdução à programação OO em Java
Vamos entender o que acontece seguindo passo a passo a execução do código visto
anteriormente.
A classe principal desse código é a classe “Referencia”. Logo, já sabemos que o nome
do arquivo deve ser “Referencia.java”. Dentro dela, há o método estático “main”, no
qual criamos um objeto do tipo “Referencia”. Nesse momento, a JVM passa a
instanciar dois objetos do tipo Aluno. Sendo que o objeto “a1” fica com o estado dos
atributos “nome” e “idade”, respectivamente, dados por "Carlos" e "20".
Já o objeto “a2” fica com “nome” recebendo “Ana” e “idade” recebendo “23”. Ou seja,
temos dois objetos distintos (“a1” e “a2”), cujos estados também são distintos.
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 44/155
18/02/2024, 16:45 Introdução à programação OO em Java
Que significa que “a1” e “a2” são referências para os objetos criados, ou seja, não é um
caso de atribuição. Por isso que, ao modificarmos o estado do objeto “a2”, também
afetamos o estado do objeto “a1”.
Apesar do Java oferecer esse recurso de referência de objetos, devemos evitá-lo, pois
o código pode ficar confuso e difícil de dar manutenção posteriormente. Bem, agora,
chegou a hora de praticar!
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 45/155
18/02/2024, 16:45 Introdução à programação OO em Java
a2 = a1;
Por
a1 = a2;
Chave de respostaexpand_more
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 46/155
18/02/2024, 16:45 Introdução à programação OO em Java
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 47/155
18/02/2024, 16:45 Introdução à programação OO em Java
Fim da Execução
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 48/155
18/02/2024, 16:45 Introdução à programação OO em Java
2 - Herança e polimorfismo
Ao final deste módulo, você será capaz de descrever o mecanismo de herança e polimorfismo em
Java.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 49/155
18/02/2024, 16:45 Introdução à programação OO em Java
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 50/155
18/02/2024, 16:45 Introdução à programação OO em Java
Na figura acima, vemos que "Empregado" é pai (superclasse) das classes "Professor", "Diretor", "Coordenador" e
"Secretario". Essas últimas são filhas (subclasses) da classe "Empregado".
Atenção!
É importante ressaltar que uma interface pode herdar de múltiplas interfaces pai. Ao contrário das classes,
as interfaces não permitem a implementação de métodos, sendo responsabilidade da classe que as
implementa realizar essa implementação.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 51/155
18/02/2024, 16:45 Introdução à programação OO em Java
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 52/155
18/02/2024, 16:45 Introdução à programação OO em Java
JAVA content_copy
looks_one looks_two
A classe “Professor” deve declarar O “Empregado” deve declarar “Pessoa”
“Empregado” como sua superclasse. como sua superclasse.
Herança de interfaces
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 53/155
18/02/2024, 16:45 Introdução à programação OO em Java
A sintaxe é análoga para o caso das interfaces, exceto que pode haver mais de um
identificador de superinterface. O código consecutivo mostra um exemplo baseado no
diagrama anterior, considerando que “ProfessorComissionado”, “Professor” e “Diretor”
sejam interfaces.
JAVA content_copy
Nesse exemplo, a herança múltipla pode ser vista pela lista de superinterfaces
(“Professor” e “Diretor”) que se segue ao modificador “extends”.
Se uma classe for declarada sem estender nenhuma outra, então o compilador
assume implicitamente que ela estende a classe “Object”. Se ela estender uma
superclasse, como no código, então ela é uma descendente indireta de “Object”.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 54/155
18/02/2024, 16:45 Introdução à programação OO em Java
Resumindo
Na herança com vários níveis de ancestralidade, a classe "Pessoa" é uma subclasse de "Object" e, portanto,
herda todos os métodos de "Object". Esses métodos são herdados pelas subclasses subsequentes até a
base da hierarquia de classes. Consequentemente, um objeto da classe "ProfessorComissionado" terá
acesso a todos os métodos disponíveis em "Object".
Atividade 1
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 55/155
18/02/2024, 16:45 Introdução à programação OO em Java
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 56/155
18/02/2024, 16:45 Introdução à programação OO em Java
Herança e visibilidade
Quando dizemos que a classe “Pessoa” é uma generalização da classe “Empregado”,
isso significa que ela reúne atributos e comportamentos que podem ser generalizados
para outras subclasses. Esses comportamentos podem ser especializados nas
subclasses, isto é, as subclasses podem sobrescrever o comportamento modelado na
superclasse. Nesse caso, a assinatura do método pode ser mantida, mudando-se
apenas o código que o implementa. Aqui, vamos abordar esses pontos que já são um
avanço do que podemos fazer com a propriedade herança.
Neste vídeo, você vai aprender sobre os modificadores em Java, aplicáveis a atributos,
métodos e classes, auxiliando na compreensão da combinação das propriedades da
programação orientada a objetos e na construção de projetos mais organizados e
controlados.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 57/155
18/02/2024, 16:45 Introdução à programação OO em Java
Mecanismos de visibilidade
Inicialmente, precisamos compreender como os modificadores de acesso operam. Já
vimos que esses modificadores alteram a acessibilidade de classes, métodos e
atributos. Existem quatro níveis de acesso em Java. Vamos conhecê-los!
keyboard_arrow_down Default
É assumido quando nenhum modificador é usado. Define a visibilidade como deve ser
restrita ao pacote do Java.
keyboard_arrow_down Privado
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 58/155
18/02/2024, 16:45 Introdução à programação OO em Java
keyboard_arrow_down Protegido
adjust Público
looks_one
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html#
looks_two 59/155
18/02/2024, 16:45 Introdução à programação OO em Java
Pacotes em Java
Em Java, um pacote é definido pela instrução “package” seguida do nome do pacote
inserida no arquivo de código-fonte. Todos os arquivos que contiverem essa instrução
terão suas classes agrupadas no pacote. Isso significa que todas essas classes, isto
é, classes do mesmo pacote, terão acesso aos elementos que tiverem o modificador
de acessibilidade "default".
O acesso aos métodos e atributos da superclasse pode ser concedido pelo uso do
modificador “protected”. Esse modificador restringe o acesso a todas as classes do
mesmo pacote. Classes de outros pacotes têm acesso apenas mediante herança.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 60/155
18/02/2024, 16:45 Introdução à programação OO em Java
Já, o modificador de acesso “public” é o menos restritivo. Ele fornece acesso com
escopo global. Qualquer classe do ambiente de desenvolvimento pode acessar as
entidades declaradas como públicas.
Subclasse do mesmo
sim sim não sim
pacote
Subclasse de pacote
não sim não sim
diferente
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 61/155
18/02/2024, 16:45 Introdução à programação OO em Java
looks_one looks_two
Métodos (e atributos) declarados Métodos (e atributos) declarados
públicos na superclasse devem ser protegidos na superclasse devem ser
públicos nas subclasses. protegidos ou públicos nas subclasses.
Eles não podem ser privados.
Portanto, devemos observar também que métodos e atributos privados não são
accessíveis às subclasses, e sua acessibilidade não é afetada pela herança.
Atividade 2
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 62/155
18/02/2024, 16:45 Introdução à programação OO em Java
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 63/155
18/02/2024, 16:45 Introdução à programação OO em Java
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 64/155
18/02/2024, 16:45 Introdução à programação OO em Java
Roteiro de prática
O nosso objetivo aqui é implementar o modelo representado a seguir:
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 65/155
18/02/2024, 16:45 Introdução à programação OO em Java
Basicamente, o que temos são relações entre classes que desempenham papéis bem
distintos. Por exemplo, a classe “Pessoa” generaliza as classes “Empregado” e “Aluno”.
Enquanto as classes “Endereço” e “Data” são exemplos de relações de agregação.
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 66/155
18/02/2024, 16:45 Introdução à programação OO em Java
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 67/155
18/02/2024, 16:45 Introdução à programação OO em Java
JAVA content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 68/155
18/02/2024, 16:45 Introdução à programação OO em Java
JAVA content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 69/155
18/02/2024, 16:45 Introdução à programação OO em Java
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 70/155
18/02/2024, 16:45 Introdução à programação OO em Java
Isso significa que podemos entender que a subclasse herda aquilo que lhe é
visível (ou acessível). Por isso, a subclasse "Aluno" é capaz de usar o método
privado “calcularIdade ()”da superclasse. Porém, ela o faz por meio da
invocação do método protegido “atualizarIdade()”, como vimos na classe
“Aluno”.
Passo 5
Execute a atividade prática.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 71/155
18/02/2024, 16:45 Introdução à programação OO em Java
Chave de respostaexpand_more
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 72/155
18/02/2024, 16:45 Introdução à programação OO em Java
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 73/155
18/02/2024, 16:45 Introdução à programação OO em Java
Polimorfismo
O polimorfismo é a propriedade de um mesmo método se comportar de formas
distintas para assinaturas de métodos diferentes. Ele pode se expressar de diversas
maneiras. A sobrecarga de função, assim como a herança, é uma forma de dar ao
objeto uma capacidade polimórfica. No caso da herança, o polimorfismo surge
justamente porque um objeto pode se comportar também como definido na
superclasse. Por exemplo, vamos considerar um objeto do tipo “Aluno”.
Comentário
Como vimos, todo objeto do tipo “Aluno” é do tipo “Pessoa”. Logo, ele pode se comportar como “Aluno” ou
como “Pessoa”.
Todo objeto que possui uma superclasse tem capacidade de ser polimórfico. A
justificativa, como já dissemos, é que toda classe em Java descende direta ou
indiretamente da classe “Object”.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 74/155
18/02/2024, 16:45 Introdução à programação OO em Java
Roteiro de prática
Passo 1
Implemente a classe “Diretor” que é subclasse de “Empregado”, sendo código dado
por:
JAVA content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 75/155
18/02/2024, 16:45 Introdução à programação OO em Java
Passo 2
Implemente a modificação na classe “Principal”, cujo código é dado por:
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 76/155
18/02/2024, 16:45 Introdução à programação OO em Java
Passo 3
Execute este código que produz como saída:
Observe que estamos invocando o método “gerarMatricula ()” com uma referência do
tipo da superclasse. Essa variável, porém, está se referindo a um objeto da subclasse
e o método em questão possui uma versão especializada na classe “Diretor” (ela
sobrescreve o método “gerarMatricula ()” da superclasse). Dessa maneira, durante a
execução, o método da subclasse será chamado. Outra forma de polimorfismo pode
ser obtida por meio da sobrecarga de métodos.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 77/155
18/02/2024, 16:45 Introdução à programação OO em Java
Passo 4
A sobrecarga é uma característica que permite que métodos com o mesmo
identificador, mas diferentes parâmetros, sejam implementados na mesma classe. Ao
usar parâmetros distintos em número ou quantidade, o programador permite que o
compilador identifique qual método chamar.
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 78/155
18/02/2024, 16:45 Introdução à programação OO em Java
JAVA
content_copy
Por outro lado, caso seja feita uma chamada como “alterarMatricula (“M-202100-
1000)”, o método chamado será:
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 79/155
18/02/2024, 16:45 Introdução à programação OO em Java
A diferença entre qual dos dois métodos será chamado está na passagem ou não do
parâmetro.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 80/155
18/02/2024, 16:45 Introdução à programação OO em Java
Chave de respostaexpand_more
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 81/155
18/02/2024, 16:45 Introdução à programação OO em Java
Classes abstratas
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 82/155
18/02/2024, 16:45 Introdução à programação OO em Java
Uma classe abstrata é uma classe que não pode ser instanciada diretamente, mas
serve como base para outras subclasses. Isso significa que ela pode ter atributos e
métodos que podem ser herdados e estendidos por outras classes.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 83/155
18/02/2024, 16:45 Introdução à programação OO em Java
Roteiro de prática
Passo 1
Implemente a classe abstrata “Animal” que possui um método abstrato chamado de
“emitirSom” e um método concreto chamado de “dormir”. Na sequência, utilizamos
duas subclasses herdeiras – as classes “Cachorro” e “Gato”- que vão implementar o
método “emitirSom”. Acompanhe o código completo a seguir:
JAVA content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 84/155
18/02/2024, 16:45 Introdução à programação OO em Java
Passo 2
Execute o código que produz a seguinte saída:
Latir!
Zzzz...
Miar!
Zzzz...
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 85/155
18/02/2024, 16:45 Introdução à programação OO em Java
Neste exemplo, é fundamental ressaltar que estamos aplicando vários conceitos que
foram estudados até o momento, onde estão inclusos:
Encapsulamento
Herança
Polimorfismo
Classe abstrata
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 86/155
18/02/2024, 16:45 Introdução à programação OO em Java
Chave de respostaexpand_more
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 87/155
18/02/2024, 16:45 Introdução à programação OO em Java
JAVA content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 88/155
18/02/2024, 16:45 Introdução à programação OO em Java
No qual a saída é:
Latir!
Zzzz...
Miar!
Zzzz...
Rugir!
É um animal Selvagem.
Zzzz...
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 89/155
18/02/2024, 16:45 Introdução à programação OO em Java
3 - Agrupamento de objetos
Ao final deste módulo, você será capaz de descrever os mecanismos de agrupamento de objetos
em Java.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 90/155
18/02/2024, 16:45 Introdução à programação OO em Java
Fundamentos do agrupamento de
objetos
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 91/155
18/02/2024, 16:45 Introdução à programação OO em Java
F(U) = { [k1 , <lista agrupada>], [k2 , <lista agrupada>] , ..., [kn , <lista agrupada>] }
Felizmente, a Java API oferece estruturas que facilitam o nosso trabalho. Para manter
e manipular os objetos, usaremos o container “List”, que cria uma lista de objetos.
Essa estrutura já possui métodos de inserção e remoção e pode ser expandida ou
reduzida conforme a necessidade.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 92/155
18/02/2024, 16:45 Introdução à programação OO em Java
Implementação de agrupamento de
objetos
Para mantermos os pares de particionamento, usaremos o container “Map”, que faz o
mapeamento entre uma chave e um valor. No nosso caso, a chave é o critério de
particionamento e o valor é a lista de objetos particionados. A estrutura “Map”, além
de possuir métodos que nos auxiliarão, não permite a existência de chaves
duplicadas. Veja, então, um exemplo da classe “Aluno” modificada:
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 93/155
18/02/2024, 16:45 Introdução à programação OO em Java
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 94/155
18/02/2024, 16:45 Introdução à programação OO em Java
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 95/155
18/02/2024, 16:45 Introdução à programação OO em Java
Na sequência, temos um laço que implementa a varredura sobre toda a lista. A cada
iteração, o valor da variável “naturalidade” é recuperado, e a função “containsKey”
verifica se a chave já existe no mapa. Se não existir, ela é inserida. Ao final,
adicionamos o objeto à lista correspondente à chave existente no mapa. A saída é
dada por:
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 96/155
18/02/2024, 16:45 Introdução à programação OO em Java
Podemos ver que nossa função agrupou corretamente os objetos. A chave é mostrada
à esquerda do sinal de “=” e, à direita, entre colchetes, estão as listas de objetos, nas
quais cada objeto encontra-se separado por vírgula.
Atividade 1
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 97/155
18/02/2024, 16:45 Introdução à programação OO em Java
A I.
B II.
C III.
D I e II.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 98/155
18/02/2024, 16:45 Introdução à programação OO em Java
E II e III.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 99/155
18/02/2024, 16:45 Introdução à programação OO em Java
code static <T,K> Collector<T,?,Map>> groupingBy(Function <? super T,? extends K> classifier)
code static <T, K, A, D> Collector<T,?,Map> groupingBy(Function<? super T,? extends K>
classifier, Collector<? super T,A,D> downstream)
Atenção!
A cláusula “static Collector” é o método (“Collector”) que retorna uma estrutura “Map”, formada pelos pares
“K” e uma lista de objetos “T”. “K” é a chave de agrupamento e “T” é um objeto agrupado. Então a função cuja
referência é passada para o método “groupingBy” é capaz de mapear o objeto na chave de agrupamento.
A terceira versão é a mais genérica. Nela, além de poder decidir a estrutura utilizada
para implementar as coleções, o programador pode decidir sobre qual mecanismo de
“Map” será utilizado para o mapeamento.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 101/155
18/02/2024, 16:45 Introdução à programação OO em Java
Roteiro de prática
Passo 1: Uso da assinatura 1
Implemente a reescrita do método “agruparAlunos” usando a primeira assinatura de
“groupingBy”, como podemos ver no código a seguir:
JAVA content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 102/155
18/02/2024, 16:45 Introdução à programação OO em Java
Passo 2
Execute o código em que o resultado é:
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 103/155
18/02/2024, 16:45 Introdução à programação OO em Java
Veja agora o uso das demais assinaturas. Por simplicidade, mostraremos apenas a
sobrecarga do método “agruparAluno”, uma vez que o restante da classe permanecerá
inalterado.
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 104/155
18/02/2024, 16:45 Introdução à programação OO em Java
JAVA content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 105/155
18/02/2024, 16:45 Introdução à programação OO em Java
Passo 5
Execute o código cujo resultado da execução é:
Gomes(São Paulo)]
Devemos notar que a ordem das coleções está diferente do caso anterior. Isso porque
o mecanismo “TreeMap” mantém as suas entradas ordenadas. No entanto, podemos
perceber que os agrupamentos são iguais.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 106/155
18/02/2024, 16:45 Introdução à programação OO em Java
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 107/155
18/02/2024, 16:45 Introdução à programação OO em Java
Chave de respostaexpand_more
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 108/155
18/02/2024, 16:45 Introdução à programação OO em Java
JAVA content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 109/155
18/02/2024, 16:45 Introdução à programação OO em Java
Coleções em Java
Coleções, por vezes chamadas de containers, são objetos capazes de agrupar
múltiplos elementos em uma única unidade. Elas têm por finalidade armazenar,
manipular e comunicar dados agregados, de acordo com o Oracle America Inc. (2021).
Por causa da importância dessas funcionalidades, vamos estudá-las sob o ponto de
vista teórico e prático.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 110/155
18/02/2024, 16:45 Introdução à programação OO em Java
Ainda de acordo com a Oracle America Inc. (2021), a API Java provê uma interface de
coleções chamada Collection Interface, que encapsula diferentes tipos de coleção:
“Set”, “List”, “Queue” e “Deque”. Há, ainda, as coleções “SortedSet” e “SortedMap” que
são, essencialmente, versões ordenadas de “Set” e “Map”, respectivamente.
Conheça a seguir alguns dos principais tipos de coleções suportados pelo Java:
Set expand_more
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 111/155
18/02/2024, 16:45 Introdução à programação OO em Java
List expand_more
Queue expand_more
Trata-se de uma coleção que implementa algo mais genérico, embora o nome
faça referência ao conceito de filas. Uma “Queue” pode ser usada para criar
uma fila (FIFO), mas também pode implementar uma lista de prioridades, na
qual os elementos são ordenados e consumidos segundo a prioridade e não na
ordem de chegada. Essa coleção admite a criação de outros tipos de filas com
outras regras de ordenação.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 112/155
18/02/2024, 16:45 Introdução à programação OO em Java
Deque expand_more
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 113/155
18/02/2024, 16:45 Introdução à programação OO em Java
lista[0]= 10
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 114/155
18/02/2024, 16:45 Introdução à programação OO em Java
lista[1]= 20
lista[2]= 30
lista[3]= 40
lista[4]= 50
lista[0]= 57
lista[1]= 30
lista[2]= 40
lista[3]= 50
Limpar o ArrayList.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 115/155
18/02/2024, 16:45 Introdução à programação OO em Java
Atividade 2
O Java oferece diversos tipos de coleções. De fato, isso pode ser muito útil para
trabalhar com determinados cenários em que os dados devem obedecer a
alguma política de manipulação, como por exemplo, uma estrutura do tipo FIFO
(Primeiro a Entrar e Primeiro a Sair), ou LIFO (Último a Entrar, Primeiro a Sair).
Nesse sentido, selecione a única alternativa verdadeira a respeito das coleções
em Java:
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 116/155
18/02/2024, 16:45 Introdução à programação OO em Java
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 117/155
18/02/2024, 16:45 Introdução à programação OO em Java
4 - Ambientes de desenvolvimento
Reconhecer os ambientes de desenvolvimento em Java e as principais estruturas da linguagem.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 118/155
18/02/2024, 16:45 Introdução à programação OO em Java
Comentário
Talvez um dos pontos mais interessantes seja a questão da portabilidade. O C++ buscou alcançá-la por meio
da padronização.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 120/155
18/02/2024, 16:45 Introdução à programação OO em Java
(STROUSTRUP, 2020)
A JVM expõe sempre para o programa a mesma interface, enquanto ela própria é um
software acoplado a uma plataforma de hardware específica. A vantagem dessa
abordagem é que um software em Java pode rodar em diferentes hardwares, por outro
lado, o desempenho dele é inferior ao de um software desenvolvido em C++.
Alguns aspectos de C
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 121/155
18/02/2024, 16:45 Introdução à programação OO em Java
close
As linguagens Java e C++ são A linguagem C é aderente ao
OO (Orientadas a Objeto). paradigma de programação
estruturado. Não possui
conceito de classes e objetos.
Qualquer programa em Java precisa ter ao menos uma classe. Além disso, o Java
ainda aceita declarações como interface e enum. Isso significa que não é possível
aplicar o paradigma estruturado em Java. Comparar Java e C, portanto, serve apenas
para apontar as diferenças dos paradigmas de programação orientada a objetos e
estruturada.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 122/155
18/02/2024, 16:45 Introdução à programação OO em Java
CPP
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 123/155
18/02/2024, 16:45 Introdução à programação OO em Java
Atividade 1
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 124/155
18/02/2024, 16:45 Introdução à programação OO em Java
PORQUE
(II) Um software desenvolvido em Java não é executado pelo hardware, mas, sim,
pela Máquina Virtual Java (JVM).
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 125/155
18/02/2024, 16:45 Introdução à programação OO em Java
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 126/155
18/02/2024, 16:45 Introdução à programação OO em Java
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 127/155
18/02/2024, 16:45 Introdução à programação OO em Java
Um interpretador Java
(java)
Um compilador (javac)
Um programa de
arquivamento (jar)
Um gerador de
documentação (javadoc)
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 129/155
18/02/2024, 16:45 Introdução à programação OO em Java
Dois JDK muito utilizados são o Oracle JDK e o OpenJDK. Vejamos a seguir um aviso
legal exibido durante a instalação do Oracle JDK (Java SE 17), um software cujo uso
gratuito é restrito.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 130/155
18/02/2024, 16:45 Introdução à programação OO em Java
Curiosidade
O Netbeans é um IDE mantido pela The Apache Software Foundation e licenciado segundo a licença Apache
versão 2.0. De acordo com o site do IDE, ele é o IDE oficial do Java 8, mas também permite desenvolver em
HTML, JavaScript, PHP, C/C++, XML, JSP e Groovy. É um IDE multiplataforma que pode ter suas
funcionalidades ampliadas pela instalação de plugins.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 131/155
18/02/2024, 16:45 Introdução à programação OO em Java
IDE Netbeans.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 132/155
18/02/2024, 16:45 Introdução à programação OO em Java
Outra IDE muito popular para desenvolver aplicações Java é o Eclipse. Pode-se
especificar o modificador da classe, declará-la como abstract ou final, especificar sua
superclasse e passar parâmetros para o construtor da superclasse automaticamente.
Por exemplo, na imagem a seguir, apresentamos uma visão geral do Eclipse:
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 133/155
18/02/2024, 16:45 Introdução à programação OO em Java
O Eclipse é mantido pela Eclipse Foundation, que possui membros como IBM, Huawei,
Red Hat, Oracle e outros. Trata-se de um projeto de código aberto que, da mesma
maneira que o Netbeans, suporta uma variedade de linguagens além da Java. O IDE
também oferece suporte a plugins, e o editor de código possui características
semelhantes às do Netbeans. Sendo assim, vejamos na imagem a seguir um IDE
Eclipse que mostra um exemplo de depuração no Eclipse.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 134/155
18/02/2024, 16:45 Introdução à programação OO em Java
IDE Eclipse.
Atividade 2
correta que contém todos os elementos que são imprescindíveis para realizar um
desenvolvimento em Java:
O JDK contém o JRE e a máquina virtual Java, mas não possui aplicativo de
edição de código, que precisa ser complementado.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 136/155
18/02/2024, 16:45 Introdução à programação OO em Java
Uma classe padrão no Java não será executada a menos que haja um ponto de
partida explícito. Isso quer dizer que, caso seu código possua apenas as classes
“Aluno”, “Escola”, “Departamento” e “Pessoa”, por exemplo, ele irá compilar, mas não
poderá ser executado.
Quando se trata de uma aplicação standalone (que vai rodar apenas em uma
máquina), um ponto de entrada pode ser definido pelo método “main”. Entretanto,
diferentemente de C/C++, esse método deverá pertencer a uma classe.
No código a seguir, a função “main” define o ponto de entrada da aplicação. Esse será
o primeiro método a ser executado pela JVM:
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 138/155
18/02/2024, 16:45 Introdução à programação OO em Java
Métodos de acesso
Não são comandos Java nem uma propriedade da linguagem, e sim consequências do
encapsulamento. Eles apareceram em alguns códigos mostrados aqui. Os métodos de
acesso são as mensagens trocadas entre objetos para alterar seu estado. Eles, assim
como os demais métodos e atributos, estão sujeitos aos modificadores de acesso.
Todos os métodos utilizados para recuperar valor de variáveis ou para defini-los são
métodos de acesso. Na prática, é muito provável, mas não obrigatório, que um atributo
dê origem a dois métodos, conheça a seguir quais são eles:
looks_one looks_two
Um para obter seu valor (“get”). Outro para inseri-lo (“set”).
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 139/155
18/02/2024, 16:45 Introdução à programação OO em Java
No caso, o método “setNome” é utilizado para atribuir valor para o atributo “nome”,
enquanto o método “getNome” é utilizado para obter o valor do atributo “nome”.
Comando switch
Um comando bastante útil no Java também é o “switch”, onde a sintaxe é a seguinte:
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 140/155
18/02/2024, 16:45 Introdução à programação OO em Java
No caso do comando “switch”, a expressão pode ser, por exemplo, uma “String”, “byte”,
“int”, “char” ou “short”. O valor da expressão será comparado com os valores em cada
cláusula “case” até que um casamento seja encontrado. Então, o “bloco”
correspondente ao “case” coincidente é executado. Se nenhum valor coincidir com a
expressão, é executado o bloco da cláusula “default”.
É interessante notar que tanto as cláusulas “break” quanto as “default” são opcionais,
mas seu uso é uma boa prática de programação. Apresentaremos, a seguir, um
exemplo de código que utiliza os comandos “switch-case”, “break” e “default”:
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 141/155
18/02/2024, 16:45 Introdução à programação OO em Java
Atividade 3
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 142/155
18/02/2024, 16:45 Introdução à programação OO em Java
O método “main” em Java não admite sobrecarga. Sua assinatura é fixa, inclusive
quanto aos parâmetros.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 143/155
18/02/2024, 16:45 Introdução à programação OO em Java
Comandos iterativos
Outro grupo de comandos importantes da linguagem Java são as estruturas de
repetição. As três estruturas providas pela Java são “while”, “do-while” e o laço “for”.
Neste estudo, vamos analisar a sintaxe e alguns exemplos práticos de como utilizá-
las. O comando “break”, visto na estrutura switch anteriormente, interrompe o
laço/estrutura de controle atual, como o “while”, “for”, “do ... while”.
Comando while
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 144/155
18/02/2024, 16:45 Introdução à programação OO em Java
JAVA
content_copy
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 145/155
18/02/2024, 16:45 Introdução à programação OO em Java
Para obter esse resultado, ele utiliza o valor da variável “controle” para verificar se a
condição de teste é válida. Caso seja, ele exibe o valor da variável e, na sequência,
incrementa.
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 146/155
18/02/2024, 16:45 Introdução à programação OO em Java
Como vemos pela sintaxe, o primeiro “bloco” é executado e, apenas depois disso, a
expressão é avaliada. A repetição continua até que a expressão seja falsa. A seguir,
veremos um exemplo do comando “do-while”:
JAVA
content_copy
Comando for
A última estrutura de repetição que veremos é o laço “for”, que possui a seguinte
sintaxe:
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 147/155
18/02/2024, 16:45 Introdução à programação OO em Java
JAVA
content_copy
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 148/155
18/02/2024, 16:45 Introdução à programação OO em Java
O Java oferece ainda mais uma possibilidade do comando “for” que é chamada de
“for-each”. Esse laço é empregado para iterar sobre uma coleção de objetos, de
maneira sequencial. Sendo assim, a sua sintaxe é dada por:
JAVA
content_copy
Por fim, observamos que, quando o “bloco” for formado por apenas uma instrução, o
uso das chaves ( “{ }” ) é opcional.
Atividade 4
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 149/155
18/02/2024, 16:45 Introdução à programação OO em Java
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 150/155
18/02/2024, 16:45 Introdução à programação OO em Java
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 151/155
18/02/2024, 16:45 Introdução à programação OO em Java
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 152/155
18/02/2024, 16:45 Introdução à programação OO em Java
Explore +
Acesse o site oficial da Oracle, pesquise por “Collectors”. Nele você vai
aprender ainda mais sobre principais conceitos de Coletores e encontrará
diversos exemplos que vão lhe ajudar aprofundar os seus conhecimentos.
Ainda no site oficial da Oracle, procure por “Java Documentation”. Lá, você
vai encontrar diversos exemplos de Java que vão ajudá-lo a se aprofundar
mais nessa linguagem de programação que é bastante importante no
mercado.
Referências
GOSLING, J. et. al. The Java® Language Specification: Java SE 15 Edition. Oracle
America Inc, 2020.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 153/155
18/02/2024, 16:45 Introdução à programação OO em Java
JAVA SE: Chapter 2 − The Structure of the Java Virtual Machine. Oracle America Inc,
2015. Consultado na internet em: 26 maio 2023.
JAVA Platform, Standard Edition & Java Development Kit Specifications − Version 20.
Oracle America Inc. Consultado na internet em: 26 maio 2023.
SCHILDT, H. Java: The Complete Reference. Nova Iorque: McGraw Hill Education, 2014.
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 154/155
18/02/2024, 16:45 Introdução à programação OO em Java
Download material
https://stecine.azureedge.net/repositorio/00212ti/07673/index.html# 155/155