Prévia do material em texto
Lab
o
rató
rio
d
e
Pro
g
ram
ação
I
W
ag
n
e
r M
e
n
d
e
s V
o
ltz
Código Logístico
59595
Fundação Biblioteca Nacional
ISBN 978-85-387-6690-2
9 7 8 8 5 3 8 7 6 6 9 0 2
Laboratório de
Programação I
Wagner Mendes Voltz
IESDE BRASIL
2020
© 2020 – IESDE BRASIL S/A.
É proibida a reprodução, mesmo parcial, por qualquer processo, sem autorização por escrito do autor e do
detentor dos direitos autorais.
Projeto de capa: IESDE BRASIL S/A. Imagem da capa: Shemul/ENVATO ELEMENTS
Todos os direitos reservados.
IESDE BRASIL S/A.
Al. Dr. Carlos de Carvalho, 1.482. CEP: 80730-200
Batel – Curitiba – PR
0800 708 88 88 – www.iesde.com.br
CIP-BRASIL. CATALOGAÇÃO NA PUBLICAÇÃO
SINDICATO NACIONAL DOS EDITORES DE LIVROS, RJ
V899L
Voltz, Wagner Mendes
Laboratório de Programação I / Wagner Mendes Voltz. - 1. ed. - Curi-
tiba [PR] : IESDE, 2020.
106 p. : il.
Inclui bibliografia
ISBN 978-85-387-6690-2
1. Linguagem de programação de computador. 2. Java (Linguagem de
programação de computador). I. Título.
20-65422 CDD: 005.13
CDU: 004.43
Wagner Mendes Voltz
Vídeo
Especialista em Administração com ênfase em
Gestão da Tecnologia da Informação pela Faculdade
de Administração e Economia (FAE). Graduado
em Tecnologia em Informática pela Universidade
Federal do Paraná (UFPR). Atua como professor
desde 2012 e como analista de sistemas desde 2005.
Tem experiência na área de ciência da computação,
especialmente em metodologia e técnicas da
computação. Ministra as disciplinas de Programação
orientada a objetos, Desenvolvimento em Java com
testes unitários, Desenvolvimento em Java Web,
Padrões de projeto, Desenvolvimento em Android,
Qualidade de código-fonte, Metodologias ágeis, Gestão
da qualidade em projetos e Sistemas Operacionais.
SUMÁRIO
Agora é possível acessar os vídeos do livro por
meio de QR codes (códigos de barras) presentes
no início de cada seção de capítulo.
Acesse os vídeos automaticamente, direcionando
a câmera fotográ�ca de seu smartphone ou tablet
para o QR code.
Em alguns dispositivos é necessário ter instalado
um leitor de QR code, que pode ser adquirido
gratuitamente em lojas de aplicativos.
Vídeos
em QR code!
SUMÁRIO
Agora é possível acessar os vídeos do livro por
meio de QR codes (códigos de barras) presentes
no início de cada seção de capítulo.
Acesse os vídeos automaticamente, direcionando
a câmera fotográ�ca de seu smartphone ou tablet
para o QR code.
Em alguns dispositivos é necessário ter instalado
um leitor de QR code, que pode ser adquirido
gratuitamente em lojas de aplicativos.
Vídeos
em QR code!
1 Introdução à programação de computadores 9
1.1 Princípios de desenvolvimento de algoritmo 9
1.2 Histórico das linguagens de programação 13
1.3 Paradigma estruturado e paradigma orientado a objetos 21
2 Java: introdução e conceitos básicos 25
2.1 História da linguagem Java 25
2.2 Diferenças entre JVM, JRE e JDK 28
2.3 Bytecode, compilação e interpretação 31
2.4 Conhecendo a IDE 34
2.5 Criando e executando um código em Java 40
2.6 Convenções da linguagem Java 46
3 Notação condicional e estruturas de repetições no Java 54
3.1 Tipos, variáveis e operadores lógicos 54
3.2 Notação condicional em Java 65
3.3 Estruturas de repetição com Java 67
3.4 Palavras reservadas 70
4 Recursos da linguagem Java e a qualidade do código 73
4.1 Classe String 73
4.2 Conjunto de valores (matriz – arrays) 76
4.3 Classe Date 81
4.4 Testes unitários 83
5 Aplicando orientação a objetos 87
5.1 Definição e criação de classes, métodos e atributos 87
5.2 Abstração 89
5.3 Encapsulamento 91
5.4 Herança 92
5.5 Classes abstratas e métodos abstratos 95
Gabarito 102
REFERÊNCIAS 106
Esta obra foi elaborada visando gerar uma experiência prática por meio da
construção de um software na linguagem de programação Java. Para que esta
jornada seja a mais completa possível, vamos relembrar alguns conteúdos
básicos de programação e aplicá-los na linguagem Java. Todos os conceitos
terão um bloco de código-fonte, o qual será seu aliado durante toda a leitura
deste livro.
Em nossa primeira etapa desta jornada, vamos relembrar os conceitos
fundamentais de programação e de algoritmos e entender um pouco
mais sobre a evolução das linguagens de programação até o surgimento
do paradigma orientado a objetos. Essa fundamentação é extremamente
importante, pois é um alicerce para entendermos e aplicarmos corretamente
os conceitos da linguagem Java.
Na sequência, iremos mergulhar na linguagem de programação Java e, por
meio dos exercícios de programação propostos no decorrer de cada capítulo,
vamos nos aprofundar nessa linguagem. A partir do Capítulo 2 é aconselhável
que você esteja com seu material de estudos sempre acessível e com uma IDE
(software para programar em Java) já iniciada.
Não tenha receio de copiar os códigos-fonte inseridos no livro, mas tente
entender o que cada bloco ou palavra reservada faz. Se você copiar o código-
-fonte sem entendê-lo, isso pode ser prejudicial à sua capacidade cognitiva de
interpretá-lo e tratá-lo com qualidade.
O resultado esperado após a leitura deste livro é que você consiga criar
programas simples em Java, mas com potencial para serem usados em
diversos lugares. E aí, animado para esta aventura?
Bons estudos!
APRESENTAÇÃO
Introdução à programação de computadores 9
1
Introdução à programação
de computadores
Antes de mergulharmos na criação de softwares utilizando a
linguagem de programação Java, precisamos conhecer o contexto
que nos trouxe até a escolha dessa linguagem como apoio na dis-
ciplina de Laboratório de Programação I. Esta é a proposta deste
capítulo: trazer para você o conhecimento de fundamentos que re-
gem a criação de programas para computadores. Esperamos que
você, leitor, esteja animado para entender mais sobre algoritmos,
linguagens de programação e paradigmas. Vamos lá!
1.1 Princípios de desenvolvimento de algoritmo
Vídeo Você já parou um momento para pensar como seria o nosso mundo
atual sem os computadores? E sem os smartphones? Pois é, seria no míni-
mo estranho. Alguns dispositivos eletrônicos fazem tanta parte do nosso
dia a dia que, ao sair de casa, podemos esquecer objetos importantes,
como a carteira e a chave da porta, mas não esquecemos nossos celulares.
Os computadores, de fato, estão presentes no nosso cotidiano, nos
ambientes familiar, profissional, escolar e outros, muitas vezes em dis-
positivos que cabem na palma da mão (como os smartphones). Mas o
que seria desses computadores sem os programas?
Os programas, também chamados de aplicativos, são classificados
como softwares. Eles permitem que o computador, composto por di-
versas peças denominadas hardware, seja utilizado para diversos fins.
Como será que um software é criado? Antes de responder a essa
pergunta, vamos estudar um pouco mais sobre as funções de um
computador.
10 Laboratório de Programação I
O computador é uma máquina eletrônica criada para resolver pro-
blemas, que podem ser cálculos complexos ou armazenamento de al-
gum dado (de modo temporário ou permanente). Todo computador
possui a característica de processar dados por meio de uma entrada
específica e, ao concluir esse processamento, apresentar esses dados
em um dispositivo de saída.
Figura 1
Característica básica de um computador
Entrada Processamento Saída
Fonte: Elaborada pelo autor.
Como exemplos de dispositivos de entrada de dados, temos o tecla-
do e o mouse. Já a impressora e os monitores são considerados dispo-
sitivos de saída de dados. Processador e memória compõem a etapa
de processamento.
Para orquestrar esse fluxo, há um software específico e de vital im-
portância para os computadores, chamado de sistema operacional. Ele
faz um duro trabalho de mediação entre a comunicação do mundo real
e dos aplicativos com o hardware. Como exemplos de sistemas opera-
cionais temos Microsoft Windows, Linux, macOS, Android e iOS, sendo
os três primeirospara computadores pessoais e os últimos dois para
dispositivos móveis.
Figura 2
Comunicação entre software e hardware em um computador
Fonte: Tanenbaum e Bos, 2010, p. 1.
Navegador web Leitor de e-mail Reprodutor de música
Modo núcleo
Modo usuário
Programa de interface com o usuário
Sistema operacional
Software
Hardware
Conheça mais sobre os
sistemas operacionais
para computadores
pessoais assistindo ao
vídeo Windows, macOs ou
Linux, qual o melhor e o
mais seguro?, publicado
por CanalJMS Tech, que
analisa as características
de cada um deles.
Disponível em: https://www.youtube.
com/watch?v=d_pxmng2M90.
Acesso em: 19 out. 2020.
Vídeo
https://www.youtube.com/watch?v=d_pxmng2M90
https://www.youtube.com/watch?v=d_pxmng2M90
Introdução à programação de computadores 11
Quando unimos a arquitetura dos computadores (hardware) com o
sistema operacional, temos uma máquina que pode operar qualquer
trabalho complexo, contudo para cada tipo de trabalho é necessário
um software específico. Por exemplo, para digitar um texto, utilizamos
o bloco de notas ou o Microsoft Word. Para acessar a internet, recor-
remos aos navegadores Mozilla Firefox ou Google Chrome. Sem esses
softwares específicos, o computador não seria essa ferramenta tão útil
para os dias atuais. Mas como esses aplicativos são criados? Qualquer
pessoa pode criar um programa de computador?
Sim, qualquer pessoa pode fazê-lo. Cada software é desenvolvido res-
peitando uma sequência finita de passos e instruções. Essa sequência
finita de instruções para resolver um problema é chamada de algoritmo.
É errado pensarmos que algoritmos são itens exclusivos da compu-
tação. Quando seguimos uma receita de bolo, por exemplo, ou quando
precisamos montar um móvel e lemos o manual de instruções com os
passos de montagem, estamos interpretando um algoritmo.
À medida que encontramos uma sequência de instruções e perce-
bemos que ela é finita, podemos então mecanizá-la ou digitá-la em uma
linguagem que o computador possa transformar em um programa. Esse
ato de digitar instruções para o computador denomina-se programar, e
toda programação precisa utilizar uma linguagem específica, chamada
linguagem de programação. Como exemplos de linguagens de progra-
mação temos Java, Python, C e diversas outras. O algoritmo é sempre o
mesmo, o que muda é a implementação dele em cada linguagem.
Quando finalizamos a programação de algoritmo em uma linguagem
de programação, temos o código-fonte do software que estamos crian-
do. Agora, precisamos executar um passo para que o sistema operacio-
nal consiga transformar o código-fonte em software utilizável por outros
usuários. Esse processo pode se chamar compilação ou interpretação,
algo que dependerá das características da linguagem de programação.
Para linguagens de programação que são compiladas, o sistema
operacional gera um arquivo executável (semelhante aos programas
com extensão .exe no Microsoft Windows) ao final do processamento.
As linguagens de programação C, Pascal, Java e Objective-C são exem-
plos desse tipo de linguagem.
Você talvez nem tenha
percebido, mas muitos
trabalhos manuais
que existiam antes se
tornaram automatizados
graças aos algoritmos.
Sugerimos assistir ao
vídeo O que é e como
funcionam os algoritmos?,
publicado pelo canal Pes-
quisa Fapesp, no qual os
pesquisadores Roberto
Cesar Junior e Sérgio
Silveira explicam como
e por que os algoritmos
têm impacto crescente
no cotidiano.
Disponível em: https://www.
youtube.com/watch?v=Xo1V_
JL1yAg. Acesso em: 19 out. 2020
Vídeo
https://www.youtube.com/watch?v=Xo1V_JL1yAg
https://www.youtube.com/watch?v=Xo1V_JL1yAg
https://www.youtube.com/watch?v=Xo1V_JL1yAg
12 Laboratório de Programação I
Figura 3
Processo de compilação
Código-fonte
Programa
Analisador
léxico
Código-objeto
Analisador
sintático
Otimizador
de código
Analisador
semântico
Código
intermediário
Fonte: Elaborada pelo autor.
Esse processo de compilação depende de dois fatores: a arquitetura
computacional e o sistema operacional em que o software será utiliza-
do. Programas que serão utilizados no Microsoft Windows, versão 64
bits, devem ser compilados para a versão específica do sistema opera-
cional. Um software compilado em 64 bits não consegue operar em um
sistema operacional de 32 bits, mas um software compilado em 32 bits
é executado em um sistema operacional de 64 bits.
Pensando nessa situação, algumas linguagens de programação uti-
lizam máquinas virtuais que resolvem esse problema, permitindo que
o programa compilado seja utilizado em qualquer sistema operacional.
Java e C# são exemplos de linguagens de programação que utilizam
máquinas virtuais (JVM e .NET runtime, respectivamente), conforme o
quadro a seguir esclarece.
Quadro 1
Camadas de compiladores acima dos sistemas operacionais
Software compilado em Java Software compilado em C#
Máquina virtual Java (JVM) .NET runtime
Sistema operacional
Hardware
Fonte: Elaborado pelo autor.
Introdução à programação de computadores 13
Já as linguagens de programação interpretadas não geram esse ar-
quivo executável ao final do processamento. Toda vez que o software é
iniciado, o código é interpretado e, após essa etapa, o software é exe-
cutado. As linguagens de programação Python, PHP, Lua, JavaScript e
Ruby são exemplos desse tipo de linguagem.
Figura 4
Processo de interpretação
Código-fonte Interpretador Programa
Fonte: Elaborada pelo autor.
Conhecer esses conceitos de interpretação e compilação, assim
como identificar quais linguagens de programação se enquadram nes-
sas características, são atribuições esperadas de um profissional que
realizará programações em computadores por meio da transcrição de
algoritmos. Dominar esses conceitos favorece a fundamentação corre-
ta na construção de códigos-fonte de qualidade e com performance.
1.2 Histórico das linguagens de programação
Vídeo Como vimos na seção anterior, as linguagens de programação são
instruções escritas que, após um processo de compilação ou interpre-
tação, geram um software utilizado por outros usuários. Elas podem
ser classificadas em linguagem de máquina, linguagem de baixo nível e
linguagem de alto nível.
A linguagem de máquina é formada por 0 e 1 (binários) e por hexa-
decimais, que é uma maneira representativa de otimizar a quantidade
de 0 e 1 em um conjunto de dados. Esse conjunto reduzido de dados
permite que o computador processe rapidamente diversas operações.
Mas programar utilizando essa linguagem é um pouco complexo, por
isso costumamos utilizar linguagens de baixo e alto níveis para criar
softwares. As linguagens de máquina fazem parte da primeira gera-
ção de linguagens de programação. Veremos, a seguir, um exemplo de
programa que exibirá a frase “Olá Mundo” para o sistema operacional
MS-DOS, da Microsoft:
14 Laboratório de Programação I
<code>
B4 03 CD 10 B0 01 B3 0A B9 0B 00 BD 13 01 B4 13
CD 10 C3 4F 69 20 6D 75 6E 64 6F 21 0D 0A
</code>
Na linguagem de baixo nível, também chamada de assembly, em-
bora se aproxime da linguagem de máquina, não precisamos trabalhar
somente com valores binários e hexadecimais. Para transformar um
código-fonte de baixo nível em linguagem de máquina, utilizamos mon-
tadores, também chamados de assemblers. Essa linguagem faz parte da
segunda geração das linguagens de programação. A seguir, vemos um
exemplo da frase “Olá Mundo” feito para arquitetura x8086:
<code>
lea TEXTO, string
call printf
hlt
string TEXTO “Ola mundo!”, 0
printf PROC
mov AL, [TEXTO].
cmp AL, 0
je pfend
mov AH, 0Eh
int 10h
inc TEXTO
jmp printf .
pfend:
ret
printf ENDP
</code>
As linguagens de programação de alto nível se aproximam da
forma como naturalmente nos comunicamos. Os comandos são se-
Introdução à programação de computadores 15
melhantes a palavras ou a verbos comumente usados no nosso voca-
bulário. Além disso, é possível criar nomes representativos e de fácil
interpretação para as variáveis do código-fonte.Nessa categoria, utili-
zamos compiladores e interpretadores para transformar o código-fonte
em programa utilizável por outros usuários. Vejamos um exemplo de
código-fonte de uma linguagem de alto nível:
<code>
COMPUTE DOBRO = NUMERO_DIGITADO * 2
</code>
Além dessa divisão, podemos classificar as linguagens de programa-
ção pelo cenário na qual são utilizadas. Sebesta (2018), por exemplo,
classifica os cenários como linguagens de aplicações científicas e apli-
cações empresariais.
As linguagens de aplicação científica surgiram na década de 1940,
junto com os computadores digitais. Basicamente, os softwares desen-
volvidos para esse cenário realizavam cálculos matemáticos complexos.
A partir dos anos 1950, as linguagens de programação começaram a
ser utilizadas em cenários empresariais. No início, os softwares em-
presariais eram desenvolvidos numa linguagem de programação pró-
pria, até a criação das linguagens COBOL e ALGOL 60 em meados de
1960. Ambas as linguagens de programação tiveram êxito. Na época,
o sucesso do COBOL foi tão grande que, atualmente, ainda existem
oportunidades para trabalhar como programador dessa linguagem,
realizando manutenção em softwares que rodam em computadores
do tipo mainframe.
Na figura a seguir, conferimos graficamente o surgimento das
principais linguagens de programação utilizadas em cenário empre-
sarial. Podemos perceber que a linguagem COBOL é filha da lingua-
gem FLOW-MATIC, e a linguagem ALGOL 60 tem como antecessoras
ALGOL 58 e Fortran I. Tanto FLOW-MATIC como Fortran I são datadas
de 1957. Entender a figura apresentada, portanto, é relevante para a
sequência dos nossos estudos.
mainframe: computador
de grande porte dedicado ao
processamento de grandes
volumes de informações. Esse
tipo de computador, além de
geralmente não possuir interface
gráfica, costuma utilizar lingua-
gem de programação COBOL.
Glossário
16 Laboratório de Programação I
Figura 5
Genealogia das linguagens de programação
1957
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
00
01
02
03
04
05
06
07
08
09
10
11
12
13
14
Fortran I
Fortran II ALGOL 58
ALGOL 60 APL
FLOW-MATIC
COBOL
ALGOL W
ALGOL 68
Pascal
MODULA-2
SIMULA 67
SIMULA I
BASIC PL/I
CPL
LISP
SNOBOL
Fortran IV
Prolog
Fortran 77
Fortran 90
MODULA-3 Obero n
Ada 83
Eiffel
Per I
QuickBASIC
COMMON LISP
Miranda
ICON
Haskell
ANSI C (C89)
Python
C9 9
C#
Java 5.0
Python 2.0
Python 3.0
C# 2.0
C# 3.0
C# 4.0
C# 5.0
Java 6.0
Java 7.0
Java 8.0
awk
BCPL
B
C
Scheme
ML
Smalltalk 80
C++
Visual BASIC
Lua
Ada 95
PH P
Javascript
Ruby
Java
Ruby 1.8
Ruby 1.9
Visual Basic.NE T
Ada 2005
Fortran 95
Fortran 2003
Fortran 2008
Fonte: Sebesta, 2018, p. 35.
Introdução à programação de computadores 17
A linguagem ALGOL 60 influenciou muitas das linguagens de pro-
gramação atuais, podendo ser considerada como o elemento central
no estudo de qualquer histórico da área. Nessa linguagem foram intro-
duzidos os conceitos de estrutura de blocos e passagem de parâme-
tros para subprogramas por valor e por nome. As estruturas de blocos
permitem que o programador faça pequenos trechos de códigos-fonte,
mantendo, assim, a coesão e organização do algoritmo. A passagem de
parâmetro permitiu que esses pequenos blocos tivessem ligação um
com o outro, de modo que se pode passar informações entre eles. Es-
sas novidades, até hoje, fazem parte das linguagens de programação
de alto nível.
Em 1970 e 1971, houve o surgimento das linguagens de programação
C e Pascal, respectivamente. Ambas são descendentes do ALGOL 60.
Após seu lançamento, rapidamente, Pascal se tornou a linguagem
preferida no meio acadêmico para ensinar programação, substituindo
o Fortran. Pascal foi projetada para ser uma linguagem de ensino,
priorizando a simplicidade. O sucesso de Pascal começou a entrar em
declínio a partir dos anos 1990, devido ao surgimento de diversas ou-
tras linguagens que tinham foco comercial. A seguir, apresentamos um
exemplo de código em Pascal:
<code>
Uses Crt;
var A, B: Integer;
begin
Writeln (‘Digite dois Números:’); {Mostra na tela a
mensagem}
Readln (A, B); {Lê os dois números}
If (A > B) Then {Condição – se A for maior que B}
Writeln (‘A é Maior que B, e seu valor é = ‘, A);
end.
</code>
Os ancestrais da linguagem de programação C são ALGOL 60 princi-
palmente, CPL, BCPL e B. Nos anos 1980, a linguagem C teve uma grande
adesão, pois apresentava flexibilidade e seu compilador fazia parte do
sistema operacional UNIX. Convém lembrar que o sistema operacional
Microsoft Windows surgiu em meados de 1985, ou seja, o sistema ope-
racional mais utilizado era o UNIX no início dos anos 1980. A seguir, po-
demos ver um exemplo de código C que, ao ser executado, apresentará
18 Laboratório de Programação I
uma mensagem no monitor e aguardará que o usuário digite algo. Após
esse procedimento, o programa exibirá o que foi digitado:
<code>
#include <stdio.h>
main(){
char msg;
printf(“Digite um caractere e ENTER\n”); // mostrar na tela
scanf(“%c”, &msg); // %c para ler ou mostrar char 1
printf(“Caractere digitado e’ %c\n”, msg);
}
</code>
Todas as linguagens de programação citadas até o momento são do
tipo imperativa, ou seja, seus comandos expressam uma ordem para
que o computador execute algo. Costumamos falar que a sequência de
passos codificados obedece ao paradigma estruturado de programa-
ção. Na figura a seguir, percebemos o detalhamento de quais lingua-
gens são consideradas assertivas imperativas, assertivas orientadas a
objetos e declarativas.
Figura 6
Categorias das linguagens de programação
Fonte: Saugo, 2020, p. 19.
Linguagens de programação
Assertivas
Imperativas
C
Pascal
Fortran
C++
Java
C#
Lisp
Miranda
Haskell
Prolog
Gödel
Mozart/OZ
Alice
Orientadas a
objetos
Funcionais Declarativas Satisfação de restrições
Declarativas
Introdução à programação de computadores 19
Em 1980, surgiu a linguagem de programação Smalltalk, a primeira
que ofereceu suporte completo ao paradigma da orientação a objetos,
representando uma grande evolução. Além disso, Smalltalk ofereceu
interfaces gráficas para o usuário, o que representava um grande avan-
ço para a época e facilitava o uso dos softwares pelos usuários.
Em 1984, originou-se a linguagem C++, implementando tanto o
paradigma estruturado como o paradigma orientado a objetos. Essa
linguagem rapidamente se tornou amplamente utilizada, devido a
sua compatibilidade com C. Programas criados em C eram facilmente
adaptados e compilados em C++, podendo-se utilizar os recursos da
orientação a objetos. Convém considerar que, nesse contexto, as ca-
racterísticas dos compiladores C++ estavam também disponíveis em
larga escala e de maneira barata nos sistemas operacionais UNIX. O
ponto fraco da linguagem C++ é a sua complexidade. A seguir, apre-
sentamos um exemplo de seu código envolvendo uma classe chamada
Carro e uma classe filha chamada Fusca. Ambas possuem o método
MostraNome() e, dependendo de qual classe o usuário utilizar, apre-
sentarão um texto específico:
<code>
# include <iostream>
class Carro {
public: virtual void MostraNome() {
std::cout << “um carro”;
}
virtual ~Carro() {}
};
class Fusca: public Carro { // Fusca é um carro
public: void MostraNome() {
std::cout << “um fusca”; // sobrecarrega a função
virtual
}
};
int main() {
Carro* carro = new Fusca;
Existem diversas lingua-
gens de programação, e
cada uma atende a um
fim específico. Cons-
tantemente, o ranking
das linguagens mais
utilizadas sofre mudan-
ças, por isso sugerimos
assistir ao vídeo Most
Popular Programming
Languages 1965-2019,
publicado pelo canal
Data Is Beautiful, no qual
podemos visualizar as
mudanças nesse ranking
entre ao longo dos anos.
Disponível em: https://
www.youtube.com/
watch?v=Og847HVwRSI. Acesso
em: 19 out. 2020.
Vídeo
(Continua)
https://www.youtube.com/watch?v=Og847HVwRSIhttps://www.youtube.com/watch?v=Og847HVwRSI
https://www.youtube.com/watch?v=Og847HVwRSI
20 Laboratório de Programação I
carro->MostraNome(); // exibe na tela “um fusca”, e não
“um carro”
delete carro;
}
</code>
Pensando em reduzir a complexidade do C++, um grupo de enge-
nheiros de software da Sun Microsystems projetou uma nova lingua-
gem de programação chamada Java. Essa linguagem oferece mais
poder e flexibilidade que o C++ e resolve os problemas de segurança
das suas linguagens ancestrais (C e C++). O surgimento dessa lingua-
gem é datado de 1995.
O uso de Java aumentou rapidamente, permitindo que aplicativos
fossem criados para computadores pessoais e
web. Em 2008, a Oracle Corporation, empresa
especializada em soluções de banco de dados,
adquiriu a Sun Microsystems e, consequente-
mente, comprou os direitos da linguagem Java,
no entanto praticamente todo o seu código-fonte
está disponível sob a licença GNU General Public
License (GPL). Esse processo de disponibilização
foi finalizado em 2007, antes da aquisição da Sun
Microsystems pela Oracle Corporation.
Um fator de destaque na década de 1990, além do
surgimento do Java, foi o crescimento da rede internet e a necessidade
de linguagens de programação com foco na web, tais como JavaScript,
PHP, Python e Ruby. Todas essas linguagens de programação perma-
necem sendo utilizadas e são do tipo interpretadas.
É difícil saber qual é a melhor linguagem de programação, pois cada
uma foi criada para um contexto específico. Sugerimos sempre enten-
der qual é o problema a ser resolvido para, então, buscar a linguagem
de programação mais adequada.
Cash1994/Shutterstock
GNU General Public License (GPL)
é uma licença que identifica o
software como livre para uso e
alteração. Para saber mais sobre
essa licença, sugerimos a leitura
disponível em: https://www.
gnu.org/licenses/licenses.pt-br.
html. Acesso em: 19 out. 2020.
Leitura
Alguns sites especializados man-
tém um ranking das linguagens
de programação mais utilizadas.
Você pode conferir o ranking
criado pelo Tiobe (https://www.
tiobe.com/tiobe-index/), atua-
lizado mensalmente. Além dele,
sugerimos verificar o relatório
anual do Stackoverflow (https://
insights.stackoverflow.com/).
Acesso em: 19 out. 2020.
Saiba mais
https://www.gnu.org/licenses/licenses.pt-br.html
https://www.gnu.org/licenses/licenses.pt-br.html
https://www.gnu.org/licenses/licenses.pt-br.html
https://www.tiobe.com/tiobe-index/
https://www.tiobe.com/tiobe-index/
https://insights.stackoverflow.com/
https://insights.stackoverflow.com/
Introdução à programação de computadores 21
1.3 Paradigma estruturado e
paradigma orientado a objetos Vídeo
O paradigma de programação estruturado é regido por uma
sequência de comandos previamente determinados e organizados.
Ao utilizar esses comandos de modo sequencial, ou seja, criando
algoritmos, é possível resolver problemas. O paradigma estrutu-
rado tem sua origem na arquitetura de computa-
dores, a qual trabalha com sequências ordenadas
de instruções de máquina. Essa arquitetura é co-
nhecida como arquitetura de Von Neumann e foi
aplicada no computador ENIAC 1 , utilizado pelos
norte-americanos durante o final da Segunda
Guerra Mundial.
Figura 7
Arquitetura de Von Neumann
UC – unidade de controle
Memória
ULA – unidade lógica e aritmética
Entrada
Saída
Fonte: Elaborada pelo autor.
No paradigma estruturado, buscamos quebrar um problema em
partes menores, com a técnica dividir para conquistar. Ao trabalhar com
o conjunto dessas partes menores, é possível solucionar problemas
complexos. Saugo (2020) apresenta a resolução desses problemas ba-
seando-se em três conceitos:
• Comandos: ordens que controlam ações e instruções de execu-
ção do programa.
• Estados: refletem o resultado de operações lógicas e cálculos du-
rante a execução do programa.
1
O Electronic Numerical Integrator
and Computer (ENIAC), que,
em tradução livre, significa
“computador integrador numé-
rico eletrônico”, foi o primeiro
computador digital eletrônico de
grande escala já registrado.
22 Laboratório de Programação I
• Variáveis: recursos utilizados para armazenar temporariamente
um dado, sendo processado durante a execução do programa.
Esse paradigma costuma ser mais facilmente entendido por pes-
soas que estão começando a criar programas. Durante muitos anos,
inclusive, foi o principal paradigma utilizado por empresas e universi-
dades, uma vez que era implementado desde o ALGOL 60.
O paradigma estruturado é muito poderoso, mas apresenta algu-
mas deficiências que foram supridas pelo paradigma orientado a ob-
jetos. Dentre as deficiências podemos citar a dificuldade em relacionar
diversos elementos do código-fonte para resolver problemas e repre-
sentar algo próximo ao cotidiano do ser humano.
O paradigma orientado a objetos, por sua vez, busca aproximar a
forma de programação dos modelos da vida real por meio de conjuntos
de dados, também chamados de objetos. Esses objetos são definidos
com base na observação da vida real. A observação compõe o princípio
da abstração, sendo considerada a base da orientação a objetos.
Além dos conjuntos de dados, o paradigma orientado a objetos im-
plementa as ações dos objetos e as interações entre eles. Por se apro-
ximar fielmente da vida real, permite o desenvolvimento de softwares
mais complexos, de modo que as linguagens de programação que im-
plementam esse paradigma tiveram maior adesão nos últimos anos.
A orientação a objetos possui quatro pilares derivados do princípio
da abstração, apresentados na figura a seguir.
Figura 8
Pilares da orientação a objetos
Fonte: Elaborada pelo autor.
En
ca
ps
ul
am
en
to
H
er
an
ça
Co
m
po
si
çã
o
Po
lim
or
fis
m
o
Orientação a objetos
Abstração
Introdução à programação de computadores 23
O encapsulamento pode ser entendido como uma cápsula de re-
médio. Assim como a cápsula protege o medicamento, o encapsula-
mento esconde partes de um código-fonte e expõe somente o que é
necessário. Isso permite focar a produção de partes pequenas reuti-
lizáveis. No encapsulamento, não precisamos saber como uma deter-
minada parte de um código foi programada, simplesmente invocamos
o nome daquele trecho de código em qualquer parte do projeto e ele
funciona, pois está encapsulado.
A herança permite que objetos sejam referenciados como pai e
filhos, em que os objetos filhos herdam todas as características do
objeto pai, mas o objeto pai nada herda do filho. Isso reduz a dupli-
cação de código-fonte. Por sua vez, a composição busca representar
as relações que os objetos devem ter, baseando-se nas relações que
existem na vida real. Isso faz com que os objetos sejam reaproveita-
dos, evitando duplicidade e mantendo a simplicidade. Ao evitar du-
plicidade, nos tornamos mais produtivos e priorizamos a criação de
código-fonte de qualidade.
Por fim, temos o polimorfismo, com o qual podemos transformar
objetos diferentes em objetos que conseguem trocar mensagem por
meio da generalização de suas características. Por exemplo: os objetos
avião, barco e automóvel são diferentes, mas todos precisam se deslo-
car. A ação de deslocar é polimórfica. Quando essa ação é acionada, o
avião consegue voar; o barco, navegar; o automóvel, sair de um ponto
a outro com a aceleração.
Devido a essas características, as linguagens que implementam o
paradigma de orientação a objetos conseguem se aproximar da vida
real e resolver problemas complexos.
Vídeos
O paradigma estruturado e o paradigma orientado a objeto não são os únicos existen-
tes na programação. Temos o paradigma procedural, o paradigma funcional e outros.
Para conhecer mais sobre esse tema e o histórico dos paradigmas, assista ao conteúdo
do canal Código Fonte TV. Recomendamos alguns vídeos específicos:
• Paradigmas de programação: https://www.youtube.com/watch?v=EefVmQ2wPlM.
• Programação funcional // Dicionário do programador: https://youtu.be/BxbHGPivjdc.
• Programação orientada a objetos(POO) // Dicionário do programador: https://youtu.be/
QY0Kdg83orY.
Acesso em: 19 out. 2020.
https://www.youtube.com/watch?v=EefVmQ2wPlM
https://youtu.be/BxbHGPivjdc
https://youtu.be/QY0Kdg83orY
https://youtu.be/QY0Kdg83orY
24 Laboratório de Programação I
CONSIDERAÇÕES FINAIS
Quando compramos um novo aparelho eletrônico, costumamos rece-
ber um manual de especificação e uso. Com ele, entendemos o potencial
que o aparelho pode ter, suas referências e como utilizá-lo. Esse é um
bom exemplo de algoritmo da vida real.
À medida que trazemos os algoritmos para o mundo computacional,
por meio dos paradigmas de programação, temos mais e mais softwares
disponíveis para serem usados em computadores. As linguagens de pro-
gramação são o meio para realizar essa codificação computacional. Este
capítulo visou fundamentar seu conhecimento nesses temas, com uma
breve contextualização e história da programação.
ATIVIDADES
1. Um computador é formado por hardware e software. Os sistemas
operacionais são um tipo de software com uma função específica. Qual é
a importância do sistema operacional para os computadores? Cite o nome
de pelo menos dois sistemas operacionais para computadores pessoais.
2. A partir dos anos 1990, tivemos o crescimento da internet e diversas
linguagens de programação foram criadas para o desenvolvimento
de páginas na web. Cite os nomes dessas linguagens criadas
essencialmente para atuar com internet.
3. Faça uma pesquisa e identifique em qual modelo ou geração de
computador a arquitetura de Von Neumann foi usada pela primeira vez.
Java: introdução e conceitos básicos 25
2
Java: introdução e
conceitos básicos
Após aprendermos sobre algoritmos, paradigmas de desen-
volvimento de software e conhecer, de maneira básica, diversas
linguagens de programação, podemos começar a aprofundar os
nossos estudos sobre a linguagem Java. Neste capítulo, vamos en-
tender a história do Java, diferenciais e especialidades dessa lin-
guagem e, por fim, fazer nosso primeiro programa em Java. E aí,
animado para entender mais sobre essa linguagem?
2.1 História da linguagem Java
Vídeo O dia 23 de maio marca diversos acontecimentos mundiais que im-
pactaram nações e vidas. Nesta data, Portugal foi reconhecido como
reino independente em 1179. A Holanda declarou independência da
Espanha em 1568. Já em 1846, o presidente do México declarou guerra
contra os Estados Unidos. Em 1915, a Itália mudou de lado, na Primeira
Guerra Mundial, e passou a integrar o bloco dos aliados.
Talvez você esteja imaginando que, nesta data, só aconteceram con-
flitos e revoluções entre países, mas há outros eventos importantes
associados a ela. Neste dia também foi inaugurada a Biblioteca Pública
de Nova Iorque em 1911, e houve a ratificação do protocolo de Quioto
em 2005, que oficializou metas para a redução da emissão de gases po-
luentes pelos países. E foi nesta data também que tivemos a primeira
versão da linguagem Java, no ano de 1995.
Java é uma linguagem de programação criada pela empresa Sun Mi-
crosystems. Os mentores dessa linguagem foram James Gosling, Mike
Sheridan e Patrick Naughton, sendo o primeiro nome geralmente o
mais conhecido por estar publicamente em eventos de promoção do
Java e da Sun Microsystems. James também participou do desenvolvi-
mento do sistema operacional Android pela empresa Google.
26 Laboratório de Programação I
No ano de 1991, James, Mike e Patrick
perceberam o consumo de dispositivos
eletrônicos inteligentes por consumido-
res finais como uma oportunidade de
negócio. Era a chance de aproximar os
computadores pessoais dos eletroeletrô-
nicos já presentes na casa das pessoas,
como os televisores. Essa oportunidade
foi chamada de Green Project.
Treze pessoas trabalharam por 18 me-
ses na criação de um controle remoto,
chamado Star7 (lê-se Star Seven), que tra-
zia como inovação a opção touchscreen
(semelhante aos smartphones atuais). Esse controle utilizava uma lin-
guagem de programação própria para interação entre hardware e soft-
ware da interface touchscreen. Essa linguagem, baseada em C e C++,
foi chamada de Oak, que, em tradução livre para o português, significa
carvalho, uma árvore sempre visualizada pela equipe através da janela
do escritório.
A proposta do Star7 era muito boa e disruptiva, já que, além do con-
trole remoto touchscreen, o aparelho tinha a proposta de vídeo sob
demanda (semelhante ao que temos com provedores globais de filmes
e séries televisivas via streaming nos dias atuais). Infelizmente, a pro-
posta estava muito à frente do seu tempo e as empresas de TV a cabo
não se interessaram pelo produto, o que colocou o Green Project em
dificuldades e sem expectativas promissoras.
Com o rápido crescimento da World Wide Web (WWW, ou internet)
em 1993, a Sun Microsystems percebeu potencial para a linguagem
de programação Oak. James Gosling ficou responsável pela adaptação
dessa linguagem para a internet. Além das alterações de estrutura para
suportar a internet, foi decidida a mudança de nome para Java, que era
a cidade de origem de um tipo de café muito apreciado pela equipe da
Sun Microsystems. Em 23 de maio de 1995 foi lançada a primeira ver-
são pública do Java e, em pouco tempo, a base de pessoas utilizando
essa linguagem cresceu, já que ela permitiu o uso de softwares den-
tro dos navegadores, pela internet, por meio da tecnologia Java Applet
(DEITEL, P.; DEITEL, H., 2016).
RE
DP
IX
EL
.P
L/
Sh
ut
te
rs
to
ck
Sugerimos assistir à de-
monstração do Star7 rea-
lizada por James Gosling.
O vídeo intitulado Star7
Demo foi publicado pelo
canal JamesAGosling.
Disponível em: https://www.youtube.
com/watch?v=1CsTH9S79qI. Acesso
em: 19 out. 2020.
Vídeo
https://www.youtube.com/watch?v=1CsTH9S79qI
https://www.youtube.com/watch?v=1CsTH9S79qI
Se comparada às outras linguagens, Java é a linguagem de progra-
mação que teve a maior adoção. Em 2003 foi ultrapassada a marca de
3 milhões de pessoas desenvolvedoras na linguagem Java. Atualmente,
Java está entre as linguagens mais utilizadas, ao lado de C e Python,
segundo a Tiobe Index 1 (2020).
Em 2006, no dia 13 de novembro, a Sun Microsystems começou a
liberar partes do código-fonte do Java, alterando a forma de licencia-
mento dessas partes para o modelo GNU General Public License (GPL).
A liberação completa do código-fonte ocorreu em maio de 2007, doze
anos após sua criação. O que mudou com essa decisão? Basicamente,
o que era de propriedade da Sun Microsystems passou a ser de código
livre, evitando que alguma empresa cobre dos desenvolvedores que
utilizem Java.
GNU General Public License (GPL) é uma
licença de software comumente utilizada em
projetos de software livre e de código aberto.
A GPL permite que os programas sejam distri-
buídos e reaproveitados, mantendo, porém, os
direitos do autor de modo a não permitir que
essa informação seja usada de uma maneira
que limite as liberdades originais. ESB Professional/Shutterstock
Em 2008, a Oracle Corporation,
empresa especializada em soluções de banco de dados, adquiriu a Sun
Microsystems visando ampliar sua carteira de soluções para seus clien-
tes e apropriar-se do conhecimento tecnológico dos profissionais que
ali atuavam. Como o Java está na licença GPL, não é possível cobrar
pelo uso dessa linguagem, mas a Oracle cobra por suporte a versões
antigas e ferramentas específicas basea-
das em Java.
Agora que conhecemos a história do
Java, vamos mergulhar nas característi-
cas dessa linguagem e em conceitos im-
portantes para podermos usá-la.
Site especializado que mantém
um ranking das linguagens de
programação mais utilizadas.
Disponível em: https://www.
tiobe.com/tiobe-index/. Acesso
em: 19 out. 2020.
1
Vc
ha
l/S
hu
tte
rs
to
ck
2727Java: introdução e conceitos básicosJava: introdução e conceitos básicos
https://www.tiobe.com/tiobe-index/
https://www.tiobe.com/tiobe-index/
28 Laboratório de Programação I
2.2 Diferenças entre JVM, JRE e JDK
Vídeo A linguagem de programaçãoJava tem um conjunto de caracte-
rísticas que a diferencia das demais linguagens. Horstmann e Cornell
(2010) destacam onze dessas características:
Simples
A sintaxe do Java é uma versão limpa da sintaxe do C++.
Compatibilidade com redes
Java tem uma extensa biblioteca de rotinas para lidar
com os protocolos de rede. Os aplicativos Java podem
abrir e acessar objetos pela internet, a partir de um
endereço válido na web, com a mesma facilidade que
acessam um sistema de arquivos local.
Portável
Java é portável, ou seja, independe de sistema
operacional para funcionar, graças ao uso de uma
máquina virtual própria, que você conhecerá a seguir.
Java segue o conceito de “escreva uma vez, execute em
qualquer lugar” (“write once, run anywhere”).
Alto desempenho
Os bytecodes Java podem ser convertidos
instantaneamente (em tempo de execução) em código
de máquina, para que o processador realize a execução.
Dinâmico
Java é mais dinâmico que C ou C++ e consegue se
adaptar a um ambiente evolutivo, o que mantém a
linguagem competitiva e aderente às necessidades dos
dias atuais.
Seguro
Por ser utilizado num ambiente distribuído, como a internet,
Java traz a proposta de ser livre de vírus e adulterações. Infe-
lizmente, não está livre de eventuais falhas que podem expor
a segurança, mas percebemos rapidez na solução desses
problemas quando identificados. Isso torna o Java extrema-
mente seguro, se comparado com outras linguagens.
Orientado a objetos
Para as linguagens modernas, é inconcebível não
suportar esse paradigma.
Robustez
Java coloca ênfase na verificação preliminar de
possíveis problemas por meio da verificação dinâmica,
buscando identificar e eliminar situações propensas
a erros.
Interpretado
Java possui um interpretador que pode executar
bytecodes Java em qualquer máquina que possui o
interpretador instalado.
Múltiplas threads
Uma thread é uma atividade a ser executada. Java
oferece suporte à execução de mais de uma thread ao
mesmo tempo e com mais simplicidade, se comparado
com outras linguagens.
Arquitetura neutra
O compilador Java foi projetado para gerar um formato
de arquivo neutro em relação a processadores. Com
isso, qualquer máquina consegue interpretar Java e
converter em código de máquina nativo.
Essas características são diferenciais possíveis graças ao projeto ar-
quitetural da linguagem Java, que evolui desde a sua criação. Nesse
contexto arquitetural, há três softwares importantes que implemen-
tam tais diferenciais:
Java: introdução e conceitos básicos 29
• JDK – Java development kit;
• JRE – Java runtime environment;
• JVM – Java virtual machine.
Java virtual machine (JVM) é um aplicativo de software que simula
um computador, mas oculta o sistema operacional e o hardware subja-
centes dos programas que interagem com ele (DEITEL, P.; DEITEL, H.,
2016). Com isso, um programa Java pode ser utilizado em qualquer sis-
tema operacional, pois é executado na JVM, e não no sistema operacio-
nal instalado.
Somente Java development kit (JDK) e Java runti-
me environment (JRE) são softwares que podemos
instalar em qualquer sistema operacional. Não exis-
te um instalador da JVM, pois ela está dentro do JRE.
Além disso, todo JDK possui um JRE, ou seja, dentro
do JDK há uma JVM. Para facilitar o entendimento, a
imagem ao lado mostra a JVM como um item central
(ou nuclear), o JRE contendo a JVM e o JDK contendo
o JRE.
A diferença entre JDK e JRE consiste no perfil da
pessoa que utiliza o computador. Caso ela deseje
criar um programa em Java, precisará de um JDK.
Caso ela queira usar um software criado em Java,
precisará de uma versão do JRE. À medida que ela
tente usar um software ou acessar uma página web feita em Java, os
sistemas operacionais e os navegadores web conseguem identificar
que não há um JRE instalado no computador.
Para a instalação de um JDK, é necessário fazer o download da ver-
são mais atualizada desse software. Pode-se escolher entre dois forne-
cedores de JDK: uma versão proprietária da Oracle, chamada Java SE,
ou uma versão de código aberto, chamada OpenJDK.
Para o usuário do Linux, é comum instalar a versão OpenJDK, mes-
mo se ele não for desenvolvedor em Java, ou seja, se precisasse so-
mente de um JRE. Além da versão OpenJDK, é possível instalar outras
versões do JDK no Linux. Dentre as opções, podemos citar a da empre-
sa RedHat ou a versão da própria Oracle (SANTOS, 2003). A sugestão
é sempre utilizar a versão OpenJDK, pois ela está sob a licença GPL,
evitando possíveis cobranças pelo uso de um JDK proprietário. Para o
Figura 1
Modelo arquitetural do Java
Fonte: Elaborada pelo autor.
JDK – Java development kit
JRE – Java runtime
environment
JVM – Java
virtual machine
Java SE e OpenJDK são gratuitos.
Com o passar do tempo, no
entanto, a versão da Oracle
poderá cobrar à medida que o
usuário recorrer ao suporte. O
download dessas versões está
disponível em:
Oracle: https://www.oracle.
com/technetwork/pt/java/
javase/
OpenJDK: https://openjdk.
java.net/
A seguir, a instalação do JRE para
usuários do Microsoft Windows,
que pode ser baixada no site da
Oracle: https://www.java.com/
pt_BR/download/.
Acesso em: 19 out. 2020.
Curiosidade
https://www.oracle.com/technetwork/pt/java/javase/
https://www.oracle.com/technetwork/pt/java/javase/
https://www.oracle.com/technetwork/pt/java/javase/
https://openjdk.java.net/
https://openjdk.java.net/
https://www.java.com/pt_BR/download/
https://www.java.com/pt_BR/download/
30 Laboratório de Programação I
usuário do Microsoft Windows, é comum instalar um JRE se ele não for
desenvolvedor em Java.
Listamos a seguir um histórico das versões do Java e algumas ver-
sões futuras, que serão disponibilizadas nos próximos anos.
Quadro 1
Versões do Java
Versão Data de publicação
DK Beta Maio de 1995
JDK 1.0 Janeiro de 1996
JDK 1.1 Fevereiro de 1997
J2SE 1.2 Dezembro de 1998
J2SE 1.3 Maio de 2000
J2SE 1.4 Fevereiro de 2002
J2SE 5.0 Setembro de 2004
Java SE 6 Dezembro de 2006
Java SE 7 Julho de 2011
Java SE 8 Março de 2014
Java SE 9 Setembro de 2017
Java SE 10 Março de 2018
Java SE 11 Setembro de 2018
Java SE 12 Março de 2019
Java SE 13 Setembro de 2019
Java SE 14 Março de 2020
Java SE 15 Setembro de 2020
Java SE 16 Março de 2021
Java SE 17 Setembro de 2021
Fonte: Elaborado pelo autor.
Para saber qual é a versão do Java instalada no seu computador,
abra um terminal de comando e digite "java -version" 2 . Caso exista um
JDK instalado, aparecerão as seguintes mensagens:
• No Windows:
No Windows, clique no botão
INICIAR → EXECUTAR → e
digite "cmd". Com isso, você
chegará ao terminal de comando
para digitar "java -version".
No Linux, pressione as teclas
CTRL + ALT + T para acessar o
terminal de comando e digite
"java -version".
2
Java: introdução e conceitos básicos 31
• No Linux
Caso não apareçam mensagens semelhantes, feche o terminal
de comando, faça o download do JDK mais atual, realize a instalação
e, após a conclusão, abra uma nova janela de comando para digitar
"java -version".
No vídeo Instalando o
JDK no seu Computador -
Gustavo Guanabara, publi-
cado pelo canal Curso
em Vídeo, você poderá
conhecer mais sobre
como instalar o JDK.
Disponível em: https://www.
youtube.com/watch?v=yWU5bm_
pZzY. Acesso em: 19 out. 2020.
Vídeo
2.3 Bytecode, compilação e interpretação
Vídeo Antes de começar a programar em Java, precisamos entender o
processo que a linguagem faz para transformar o código-fonte em um
programa executável pelos usuários. Java possui um processo específi-
co, que o torna diferente das demais linguagens: utiliza compilação, in-
terpretação e bytecodes. Paul Deitel e Harvey Deitel (2016) categorizam
esse processo em cinco fases:
11 22 33 44 55Edição do código Java Compilação do código Carregamento Verificação Execução
Na Fase 1, o programador utiliza um editor de código-fonte em Java,
conhecido como interface de desenvolvimento (IDE). Nesse programa são
criados arquivos com aextensão .java, que são salvos nos discos rígidos.
Fonte: Elaborada pelo autor.
Figura 2
Fase 1 – Edição do código Java
Arquivo com
extensão .java
Editor Java (IDE) Disco
Na Fase 2, o compilador Java é acionado e faz a conversão do código
.java em bytecode com extensão .class. O bytecode é um arquivo inter-
mediário que será utilizado nas demais fases e interpretado pela JVM.
https://www.youtube.com/watch?v=yWU5bm_pZzY
https://www.youtube.com/watch?v=yWU5bm_pZzY
https://www.youtube.com/watch?v=yWU5bm_pZzY
32 Laboratório de Programação I
Para existir a compilação, é necessário ter o JDK instalado. O JRE não
possui o compilador Java, também chamado de javac. O compilador
pode ser acionado por linha de comando, mas os programas de edição
de código Java (IDE) costumam compilar o código-fonte Java de manei-
ra contínua e, em alguns casos, compilam a cada salvamento de um
arquivo .java. O bytecode ficará armazenado no disco, em uma pasta
chamada bin, na raiz do projeto.
Fonte: Elaborada pelo autor.
Figura 3
Fase 2 – Compilação do código
Arquivo com
extensão .class
Compilador
Java (javac) Disco
Na Fase 3, a JVM armazena o programa na memória para executá-lo
(DEITEL, P.; DEITEL, H., 2016). Esse processo é conhecido como carrega-
mento e são utilizados os bytecodes .class, criados na Fase 2, que estão
armazenados no disco.
Fonte: Elaborada pelo autor.
Figura 4
Fase 3 – Carregamento
Arquivo com
extensão .class
Carregador de
classes
Memória
principal
Disco
Na Fase 4, enquanto as classes são carregadas, o verificador de
bytecodes assegura que eles são válidos e não violam restrições de se-
gurança do Java (DEITEL, P.; DEITEL, H., 2016).
Java: introdução e conceitos básicos 33
Fonte: Elaborada pelo autor.
Figura 5
Fase 4 – Verificação
Verificador de
bytecodes
Memória
principal
Na última fase, acontece a interpretação do bytecode pela JVM. Du-
rante essa etapa, chamada de execução, a memória principal é utilizada
para o armazenamento de dados enquanto o programa é executado.
Fonte: Elaborada pelo autor.
Figura 6
Fase 5 – Execução
Interpretador
Memória
principal
Nas versões mais atuais do Java, essa última fase executa tanto a
interpretação do bytecode como a compilação em tempo de execução
(just-in-time – JIT). Essa mudança fez com que os programas Java se tor-
nassem mais rápidos no processo de conversão de bytecode para có-
digo de máquina.
As cinco fases acontecem em poucos segundos e de maneira contí-
nua, num trabalho conjunto entre IDE, JDK e JVM.
Relembre o processo de
compilação executada
pelo JDK e JVM assistindo
ao vídeo Código Fonte
Java, Bytecodes, JDK, JVM e
IDE, publicado pelo canal
High Tech Cursos Fábrica
de Programador.
Disponível em: https://www.
youtube.com/watch?v=d5JY-
GyaPgE&ab&ab. Acesso em: 19
out. 2020.
Vídeo
https://www.youtube.com/watch?v=d5JY-GyaPgE&ab&ab
https://www.youtube.com/watch?v=d5JY-GyaPgE&ab&ab
https://www.youtube.com/watch?v=d5JY-GyaPgE&ab&ab
34 Laboratório de Programação I
2.4 Conhecendo a IDE
Vídeo Na seção anterior, vimos as cinco fases para a compilação e inter-
pretação do código Java. Na primeira fase é aconselhável utilizar um
programa específico para a escrita de código Java. Costumamos cha-
mar de interface de desenvolvimento (IDE) o programa utilizado para a
escrita de código-fonte.
Na linguagem Java, temos diversas IDEs que trabalham em conjunto
com o JDK para realizar as cinco fases de compilação e interpretação do
Java. Além disso, as IDEs costumam ter as funcionalidades de linkers,
debuggers e testes automatizados, o que torna o trabalho do profissio-
nal desenvolvedor mais fácil. A seguir, apresentamos as versões mais
populares de IDEs para Java.
Quadro 2
Versões de IDEs para programação em Java
Nome Custo
Suporte ao
desenvol-
vimento
corporativo
Suporte ao
desenvolvi-
mento web
Link para down-
load
Apache
NetBeans
Gratuito Sim Sim
https://netbeans.
apache.org/
download/
IntelliJ IDEA
Ultimate
Pago Sim Sim
https://www.
jetbrains.com/pt-
br/idea/download/
IntelliJ IDEA
Community
Gratuito Não Não
https://www.
jetbrains.com/pt-
br/idea/download/
Eclipse IDE for
Java Developers
Gratuito Não Não
https://www.
eclipse.org/
downloads/
packages/
Eclipse IDE for
Enterprise Java
Developers
Gratuito Sim Sim
https://www.
eclipse.org/
downloads/
packages/
Fonte: Elaborado pelo autor.
Para nossas explanações, vamos utilizar o Eclipse IDE for Enterprise
Java Developers por apresentar o melhor custo-benefício, já que atende
desde a codificação básica até a mais avançada, sem a necessidade da
aquisição de uma licença para uso. Além disso, o Eclipse pode ser instalado
nos principais sistemas operacionais (Microsoft Windows, Linux e macOS).
linkers: são programas dentro
da IDE que ligam o código-fonte
produzido aos diversos arquivos
necessários para que a compila-
ção seja completa. Por exemplo:
um código-fonte em Java usa
uma biblioteca específica; para
compilar corretamente, o linker
envia de modo simultâneo
o código-fonte criado e a
biblioteca específica para serem
compilados pela JDK.
Glossário
debugger: é uma funcio-
nalidade presente nas IDEs
que permite ao programador
acompanhar, em tempo real, a
sequência lógica de uma funcio-
nalidade e verificar quais são os
valores das variáveis utilizados
por aquele trecho de código.
Com o debugger, o programador
consegue validar se o código
apresenta o comportamento
esperado.
Glossário
Java: introdução e conceitos básicos 35
Para instalar o Eclipse, acesse o site https://www.eclipse.org/down-
loads/ e opte por “Download 64 bits”. Nos sistemas operacionais Linux
e macOS será feito o download de um arquivo compactado com ex-
tensão .tar.gz. Descompacte-o em uma pasta e clique duas vezes no
arquivo eclipse-inst, então aguarde o carregamento da próxima tela.
No sistema operacional Microsoft Windows, por sua vez, será feito o
download de um arquivo executável com extensão .exe, geralmente
chamado de eclipse-inst-win64.exe. Clique duas vezes nesse arquivo e
aguarde o carregamento da próxima tela.
Após o carregamento do instalador do Eclipse, selecione a opção
"Eclipse IDE for Enterprise Java Developers".
Figura 7
Seleção da opção "Eclipse IDE for Enterprise Java Developers"
Fonte: Elaborada pelo autor.
Na sequência será apresentada a tela para você configurar três itens:
• Qual versão do Eclipse deseja instalar (campo "Product Version").
• Localização do JDK (campo "Java 1.8+ VM").
• Endereço no disco onde ficará o Eclipse (campo "Installation Folder").
Para esse tutorial, usamos a versão 2020-06 do Eclipse e uma versão
igual ou superior ao JDK 8. Uma dica importante é criar uma pasta chama-
da java (em minúsculo) num diretório bem acessível. No Linux, sugerimos
36 Laboratório de Programação I
criar no /home/java. No Windows, costumamos criar o C:/java/. A seguir,
apresentamos as configurações para ambos os sistemas operacionais.
Figura 8
Configurações para Linux utilizando JDK 11
Fonte: Elaborada pelo autor.
Figura 9
Configurações para Windows utilizando JDK 8
Fonte: Elaborada pelo autor.
Java: introdução e conceitos básicos 37
Ao clicar em “INSTALL”, será realizado o procedimento de instalação
na pasta definida no campo “Installation Folder”. Ao finalizar a instala-
ção, clique no ícone do Eclipse que foi adicionado na área de trabalho.
Após o carregamento, será apresentada a tela a seguir para você sina-
lizar onde deseja salvar os dados do workspace 3 :
Figura 10
Elegendo o workspace no Linux
Fonte: Elaborada pelo autor.
Figura 11
Elegendo o workspace no Windows
Fonte: Elaborada pelo autor.
Após a definição do local do workspace, clique no botão “Launch” e
será apresentada a seguinte tela:
Representa um espaço de traba-
lho no qual ficarão armazenadas
as configurações dos projetos de-
senvolvidos na IDE. Você pode ter
vários workspaces numa mesma
IDE e um workspace pode ter um
ou muitos projetos Java.
3
38 Laboratório de Programação I
Figura12
Tela de boas-vindas do Eclipse
Fonte: Elaborada pelo autor.
O Eclipse possui a funcionalidade de perspectivas que permite uma
visão particular para um propósito específico. Por exemplo, caso o in-
teresse seja desenvolver um código para a internet, é possível ter uma
perspectiva web. Caso seja acessar o banco de dados pelo Eclipse, é
possível usar uma perspectiva específica.
Por padrão, o Eclipse IDE for Enterprise Java Developers sugere o
uso da perspectiva Java EE, mas, para esse tutorial, utilizaremos algo
mais leve, por isso mudaremos para a perspectiva Java. Acesse o menu
superior "Window" → "Perspective" → "Open Perspective" → "Java":
Para que essa tela de apresen-
tação do Eclipse não seja mais
exibida, clique no X presente na
aba “Welcome”.
Curiosidade
Java: introdução e conceitos básicos 39
Figura 13
Mudando a perspectiva
Fonte: Elaborada pelo autor.
Dada essa mudança, novos espaços na IDE serão apresentados.
Nesse momento, não precisaremos das opções “Task List” e “Outline”.
Clique no X dessas abas para que sejam fechadas.
A aparência do seu Eclipse deve ter ficado semelhante à imagem a
seguir:
Figura 14
IDE Eclipse para ser utilizada
Fonte: Elaborada pelo autor.
40 Laboratório de Programação I
Fizemos essas alterações para que você consiga ter mais espaço
para ler o código-fonte Java que será desenvolvido e ter acesso direto
às abas mais utilizadas. Agora com a IDE configurada, começaremos a
criar nossos programas em Java a partir da próxima seção.
2.5 Criando e executando um código em Java
Vídeo Com a IDE configurada, é chegado o momento de criarmos o nosso
primeiro código-fonte em Java e, consequentemente, termos o nosso
primeiro programa Java. Para isso, acesse o menu "File" → "New" →
"Java Project":
Figura 15
Criando um projeto Java
Fonte: Elaborada pelo autor.
No campo “Project name”, digite "PrimeiroProjeto". Não insira espa-
ço em branco ou acentos e tente digitar conforme sugerido neste livro
(com as letras P em maiúsculo). As demais opções da tela não precisam
ser alteradas. Confira na imagem a seguir como devem ficar as confi-
gurações do projeto:
Java: introdução e conceitos básicos 41
Figura 16
Iniciando um projeto Java
Fonte: Elaborada pelo autor.
Clique no botão “Finish” para que o projeto seja criado. Caso você
esteja utilizando um JDK superior ao 8, os valores do agrupamento JRE
estarão diferentes, mas não são necessárias alterações manuais. Siga
com os valores sugeridos pelo próprio Eclipse.
Para criar o seu primeiro arquivo Java, clique com o botão direito na
pasta src, que está localizada na lateral esquerda do Eclipse:
Figura 17
Pasta src
Fonte: Elaborada pelo autor.
Selecione, então, a opção "New" → "Class", conforme a seguir:
42 Laboratório de Programação I
Figura 18
Criando um novo arquivo
Fonte: Elaborada pelo autor.
Na tela que foi aberta, no campo “Name”, escreva "PrimeiraClasse"
(não digite espaços em branco ou acentos e tente digitar conforme su-
gerido neste livro, com as letras P e C maiúsculas). As demais proprie-
dades não precisam ser alteradas e você pode clicar no botão “Finish”.
Java: introdução e conceitos básicos 43
Figura 19
Detalhes do novo arquivo
Fonte: Elaborada pelo autor.
Você deve ter percebido que um arquivo chamado PrimeiraClasse.
java foi criado dentro da pasta src, na lateral esquerda do Eclipse, e ele
também foi aberto automaticamente em um espaço específico para a
inserção e alteração de código-fonte. Dentro do arquivo "PrimeiraClas-
se.java", digite a palavra main.
Figura 20
Programando em Java (a)
Fonte: Elaborada pelo autor.
44 Laboratório de Programação I
Perceba que o texto digitado ficou com um grifado em vermelho,
ou seja, ele possui um erro. Fique tranquilo, ainda não terminamos
de programar.
Coloque o cursor no final da palavra main e pressione CTRL + BARRA
DE ESPAÇO. Então, será apresentada a seguinte caixa de sugestão:
Figura 21
Programando em Java (b)
Fonte: Elaborada pelo autor.
Selecione a opção “main” na caixa de seleção e a IDE irá sugerir um
novo código-fonte:
Figura 22
O método main
Fonte: Elaborada pelo autor.
Adicione o texto "System.out.println(“Primeiro Programa”);" dentro
do método main que você acabou de criar. O código-fonte deve ficar
conforme a seguir.
Figura 23
Escrevendo algo na tela
Fonte: Elaborada pelo autor.
Java: introdução e conceitos básicos 45
Estamos próximos de executar todas as fases do nosso primeiro
programa Java, ou seja, de compilá-lo e enviá-lo como bytecode para
que a JVM o interprete. Antes, no entanto, perceba que existe um sinal
de asterisco (*) na aba "PrimeiraClasse.java":
Figura 24
Salvando a classe PrimeiraClasse.java
Fonte: Elaborada pelo autor.
Esse asterisco sinaliza que o arquivo Java ainda não foi salvo em
disco (Fase 1). Para realizar o salvamento, pressione as teclas CTRL + S
ou clique no ícone representado por um disquete ( ).
Agora é o momento de percorrermos as Fases 2 a 5, vendo o nos-
so programa Java funcionando. Para isso, clique no botão de execução
( ) de cor verde disponível no topo da IDE. Outra alternativa é clicar
no menu superior "Run" → "Run As" → "Java Application":
Figura 25
Botão de executar
Fonte: Elaborada pelo autor.
Se estiver tudo certo, será exibida uma nova aba no canto inferior
do Eclipse chamada Console. Nessa aba será apresentada a frase “Pri-
meiro Programa”.
Figura 26
Resultado da execução do programa Java
Fonte: Elaborada pelo autor.
46 Laboratório de Programação I
Pois bem, esse é o seu primeiro programa em Java. Você utilizou
uma classe chamada PrimeiraClasse.java e criou um método chamado
main. Esse método é especial no Java, pois o código sempre é executa-
do a partir dele. Dentro desse método, adicionamos um comando do
Java que escreve um texto (System.out.println). Ao salvarmos o arquivo
e o executarmos, realizamos todas as fases mencionadas na seção an-
terior. Para verificar o que aconteceu, acesse o gerenciador de arquivos
do seu sistema operacional e localize o workspace que você informou
ao Eclipse quando iniciou esse programa.
Figura 27
Estrutura de pastas de um projeto Java
Fonte: Elaborada pelo autor.
A Figura 27 representa a visualização do sistema operacional Win-
dows. Perceba que existem as pastas src e bin. A pasta src contém o ar-
quivo .java (Fase 1) e a pasta bin contém os arquivos bytecodes (.class)
gerados na Fase 2.
2.6 Convenções da linguagem Java
Vídeo A linguagem Java possui uma convenção mundial que deve ser se-
guida. Esse padrão faz com que um código-fonte possa ser entendido
facilmente por qualquer outro programador Java no mundo. Por isso,
nunca use acentos, caracteres especiais e espaços em branco em nome
de projetos e arquivos. Vamos ver na prática as convenções do Java.
Crie um projeto clicando no menu "File" → "New" → "Java project". No
campo “Project Name”, adicione a palavra Convencoes, sem acentos e
com a primeira letra maiúscula (C).
Java: introdução e conceitos básicos 47
Figura 28
Novo projeto em Java
Fonte: Elaborada pelo autor.
Java segue a convenção denominada CamelCase. Nela, as palavras
são iniciadas com letras maiúsculas, unidas sem espaços e sem acen-
tos, por exemplo: NomeDoProjeto, NomeParaUmaClasse, NotaFiscal-
DeServico. Utilizamos CamelCase para o nome do nosso novo projeto
Java (Convencoes) e devemos usar esse padrão para os nomes de pro-
jetos e classes. Devemos utilizar CamelCase também no nome dos
métodos, mas com uma pequena alteração: deixar a primeira letra mi-
núscula. Vamos ver essa diferença na sequência.
Dentro do Java, temos uma funcionalidade de agrupamento de
classes chamado package (pacote, em tradução livre). Ele serve para
separar os arquivos .java por contextos e deixá-los organizados para
facilitar a manutenção futura do código-fonte. Os pacotes devem ser
sempre nomeados em minúsculo e separados por pontos. Nunca use
acentos ou underline (_).
Quando criados, os pacotes devem seguir a regra de leitura contrá-
ria dowebsite da empresa. Se o site da empresa dona do código-fonte
for www.meusite.com.br, o nome do pacote deve ficar br.com.meusite.
Para validar o entendimento, vejamos outros exemplos:
48 Laboratório de Programação I
• www.brasil.gov.br → o nome do pacote deve ficar br.gov.brasil.
• www.canal.tv.br → o nome do pacote deve ficar br.tv.canal.
• www.universidade.br → o nome do pacote deve ficar
br.universidade.
• www.site.com → o nome do pacote deve ficar com.site.
Para criar um pacote, clique com o botão direito na pasta src e sele-
cione a opção "New" → "Package", conforme apresentado a seguir.
Figura 29
Criando pacotes
Fonte: Elaborada pelo autor.
Na nova tela (Figura 30), clique no campo “Name” e digite o nome do
pacote "br.com.meusite", seguindo a convenção já apresentada neste
tutorial. As demais opções não precisam ser alteradas. Clique no botão
“Finish” para encerrar a criação de pacotes.
Figura 30
Criando pacote "br.com.meusite"
Fonte: Elaborada pelo autor.
Java: introdução e conceitos básicos 49
Agora com o pacote "br.com.meusite" criado, clique com o botão
direito nele e selecione a opção "New" → "Class".
Figura 31
Criando uma nova classe (a)
Fonte: Elaborada pelo autor.
Vamos criar um arquivo chamado MinhaPrimeiraClasse. Preste aten-
ção na convenção CamelCase.
Figura 32
Criando uma nova classe (b)
Fonte: Elaborada pelo autor.
50 Laboratório de Programação I
Clique no botão “Finish” e adicione o código-fonte a seguir dentro
dessa classe:
public void meuPrimeiroMetodo() {
}
O resultado dessas alterações deve ser um código-fonte semelhan-
te ao da figura a seguir:
Figura 33
Classe MinhaPrimeiraClasse
Fonte: Elaborada pelo autor.
Outra convenção importante é separar o código-fonte funcional do
código-fonte de testes, que são códigos que validam o correto funcio-
namento do algoritmo desenvolvido.
No nosso projeto, já existe uma pasta chamada src. Todo projeto Java
precisa ter essa pasta, na qual devem ficar os arquivos contendo o códi-
go-fonte com a solução de um problema. É aconselhável ter uma nova
pasta de códigos chamada test. Para criá-la, clique com o botão direito
no projeto "Convencoes" e selecione a opção "New" → "Source Folder".
Figura 34
Criando um source folder
Fonte: Elaborada pelo autor.
Java: introdução e conceitos básicos 51
Na nova tela, no campo “Folder name”, digite “test” (minúsculo e em
inglês, ou seja, sem a letra E no final).
Figura 35
Criando o source folder test
Fonte: Elaborada pelo autor.
Clique em “Finish”. A sua estrutura do projeto deverá ficar seme-
lhante à Figura 36:
Figura 36
Estrutura de pastas do projeto Java
Fonte: Elaborada pelo autor.
Dentro do novo source folder, você terá a mesma estrutura de paco-
tes que existe no src. Por isso, crie o pacote "br.com.meusite" no source
folder "test".
52 Laboratório de Programação I
Após a criação do pacote, adicione uma classe nele. O nome des-
sa classe deve ser semelhante à existente no source folder "src",
mas com a inclusão da palavra “Test” no final do nome da classe
(MinhaPrimeiraClasseTest).
Agora, adicione o código-fonte a seguir dentro dessa classe de teste:
public void meuPrimeiroMetodoTest() {
}
O resultado dessas alterações deve ser a classe MinhaPrimeira-
ClasseTest.java, conforme a figura a seguir:
Figura 37
Classe MinhaPrimeiraClasseTest
Fonte: Elaborada pelo autor.
A estrutura de arquivos deve ser semelhante à Figura 38:
Figura 38
Estrutura de pastas e arquivos do projeto "Convencoes"
Fonte: Elaborada pelo autor.
Essas convenções deverão ser seguidas em todos os projetos de-
senvolvidos na linguagem Java. Seguir as convenções demonstra pro-
fissionalismo e reduz a complexidade de entendimento do projeto por
um novo desenvolvedor que nele atue.
Java: introdução e conceitos básicos 53
CONSIDERAÇÕES FINAIS
Estamos acostumados a utilizar diversos aparelhos e objetos no nosso
dia a dia sem, de fato, entendermos a fundo como funcionam. É assim
com os carros e smartphones. Como criaremos programas em Java, preci-
saremos nos aprofundar nos conceitos, nas siglas e convenções mundiais
dessa linguagem. Neste capítulo, conhecemos a história do Java, a dife-
rença entre JDK, JVM e JRE, as principais IDEs e criamos o nosso primeiro
programa. Entender esses temas ajudará em um maior aproveitamento
da linguagem Java.
ATIVIDADES
1. Descreva o que foi o Green Project.
2. É correto afirmar que todo Java development kit (JDK) possui um Java
runtime environment (JRE)? Justifique sua resposta.
3. O Eclipse é única opção gratuita entre as IDEs utilizadas para programar
Java? Justifique sua resposta.
54 Laboratório de Programação I
3
Notação condicional
e estruturas de
repetições no Java
Após aprender sobre a história da linguagem de programação
Java e sobre a IDE Eclipse, vamos criar o nosso projeto, que consis-
te na criação de diversos algoritmos para cálculos matemáticos e
conversões numéricas.
Este projeto poderá parecer simples, mas com os aprendizados
que teremos neste capítulo, ele servirá como um excelente labora-
tório para a prática da programação Java. Animado para aprofun-
dar o conhecimento em Java?
3.1 Tipos, variáveis e operadores lógicos
Vídeo Nesse projeto, não utilizaremos uma interface gráfica refinada; va-
mos focar a interação com o usuário com base em um console para
inserção de dados, presente na IDE Eclipse ou via MS-DOS (caso utilize
Microsoft Windows) ou terminal de comando (caso utilize Linux).
Para avançar nos tópicos deste capítulo, é preciso criar primeiro um
novo projeto Java juntamente com a classe que será utilizada para a
execução do projeto. Para isso, realize os seguintes passos:
1. Inicie a IDE Eclipse (caso esteja com esse software fechado).
2. Clique no menu “File” e escolha a opção “New” → “Java Project”.
3. Crie um projeto chamado CalculosEConversoes.
4. Pressione o botão “Finish” para finalizar a criação do projeto.
Com o projeto criado, faça a organização interna realizando os se-
guintes passos:
Notação condicional e estruturas de repetições no Java 55
1. Crie um source folder chamado test. Para isso, clique com o botão
direito do mouse no nome do projeto e selecione a opção “New”
→ “Source Folder”.
2. Digite “test” no campo “Folder name”. É importante que esse
nome seja em minúsculo e sem o acréscimo da letra E no final da
palavra, ou seja, não é teste e sim test.
Seguindo com a organização do projeto, a próxima etapa é a criação
dos pacotes. Deixá-los mapeados irá ajudar o andamento da produção
do programa. Serão três pacotes dentro do source folder src e dois pa-
cotes dentro do source folder test. Para a criação deles, siga a sequência
de passos a seguir:
1. Clique com o botão direito no source folder src e selecione a
opção “New” → “Package”.
2. Digite o nome do pacote “br.com.projeto.principal”.
3. Clique no botão “Finish” para criar efetivamente o pacote.
4. Crie um novo pacote, mas com o nome “br.com.projeto.calculos”.
5. Crie um novo pacote, mas com o nome “br.com.projeto.conversoes”.
6. Agora é o momento de criar os pacotes do source folder test.
Clique com o botão direito no source folder test e selecione a
opção “New” → “Package”.
7. Digite o nome do pacote “br.com.projeto.calculos”.
8. Clique no botão “Finish” para criar efetivamente o pacote.
9. Crie um novo pacote no source folder test, mas com o nome
“br.com.projeto.conversoes”.
A figura a seguir mostra como deve ficar a estrutura interna do projeto:
Figura 1
Estrutura interna do projeto “CalculosEConversoes”
Fonte: Elaborada pelo autor.
56 Laboratório de Programação I
Para finalizar a configuração inicial, é preciso criar um arquivo que
terá o método de execução da chamada, ou seja, o método main. Para
isso, realize a sequência de passos a seguir:
1. Clique com o botão direito do mouse no pacote “br.com.projeto.
principal”, que está presente no source folder src.
2. Selecione a opção “New” → “Class”.
3. No campo “Name”, digite “Executadora”.
4. Clique nobotão “Finish” para concluir a criação do arquivo.
Automaticamente será aberto o arquivo “Executadora.java” para
ser editado.
5. Na linha abaixo do texto “public class Executadora {“, você precisará
digitar um comando. Digite “main” e aperte CTRL + BARRA DE
ESPAÇO e selecione a opção “main - main Method”:
Figura 2
Inserindo comando
Fonte: Elaborada pelo autor.
6. Para deixar o código no formato padronizado do Java, clique no
menu “Source” → “Format”:
Figura 3
Padronizando o código
Fonte: Elaborada pelo autor.
Notação condicional e estruturas de repetições no Java 57
Agora que o projeto foi criado, vamos partir para a sequência de novos
conteúdos na linguagem Java com base em um projeto real de software.
Todo software precisa de interação com o usuário final, e no
nosso projeto vamos programar essa interação dentro do arquivo
“Executadora.java”. Utilizaremos a classe Scanner para esse trabalho.
Essa classe existe dentro do Java development kit (JDK) e pode ser usa-
da em qualquer projeto que precise capturar algo digitado pelo usuário
no teclado. O Java possui diversas outras classes de apoio e, ao longo
deste livro, vamos conhecer algumas delas. Se a classe Scanner faz
a leitura do teclado, o comando System.out.println() faz a escrita de
algo na tela para o usuário. Esses dois comandos farão parte de todo
o nosso projeto.
Vamos adicionar um breve texto orientando o usuário a realizar
uma ação e, em seguida, vamos capturar o que o usuário digitou do
teclado. Para isso, insira os seguintes códigos dentro do método main:
• System.out.println(“Digite um número:”);
• Scanner ler = new Scanner(System.in);
• Integer valorInteiro = ler.nextInt();
Figura 4
Tela dao arquivo “Executadora.java” após inserção dos códigos
Fonte: Elaborada pelo autor.
Você deve ter percebido que a palavra Scanner ficou com um
sublinhado vermelho. Isso quer dizer que temos um erro na codifica-
ção. A IDE Eclipse é inteligente para detectar possíveis erros na pro-
gramação Java, bem como para sugerir como corrigir esse erro. Toda
vez que existir um sublinhado em vermelho, pare o mouse em cima
do sublinhado e a IDE Eclipse irá sugerir uma correção, como mostra
a figura a seguir.
58 Laboratório de Programação I
Figura 5
Sugestões de correção
Fonte: Elaborada pelo autor.
O erro consiste na ausência da declaração de importação da clas-
se Scanner. Lembra que foi mencionado que essa classe está dentro
do JDK? Precisamos sinalizar ao nosso programa onde está essa clas-
se. Selecione a opção “Import ‘Scanner’ (java.util)”. Tome cuidado, pois
existem diversas classes chamadas Scanner, porém queremos utilizar a
java.util.Scanner (que é a do JDK e que faz leituras de teclado). Ao se-
lecionar essa opção, você vai perceber que foi adicionado um texto no
seu código-fonte. Esse novo código foi adicionado logo nas primeiras
linhas do projeto:
import java.util.Scanner;
Figura 6
Novo código no projeto
Fonte: Elaborada pelo autor.
Para saber mais sobre a
classe Scanner e como
exibir informações em
tela, leia o texto Entrada
de Dados: Classe Scanner,
publicado pela Platafor-
ma DevMedia. O texto
mostra comandos de
entrada usando a classe
Scanner e comandos de
saída usando o método
printf.
Disponível em: https://www.
devmedia.com.br/entrada-de-
dados-classe-scanner/21366.
Acesso em: 19 out. 2020.
Saiba mais
https://www.devmedia.com.br/entrada-de-dados-classe-scanner/21366
https://www.devmedia.com.br/entrada-de-dados-classe-scanner/21366
https://www.devmedia.com.br/entrada-de-dados-classe-scanner/21366
Notação condicional e estruturas de repetições no Java 59
Além da escrita na tela (linha 8) e do uso da classe Scanner (linha 9),
temos a inclusão de uma variável chamada valorInteiro na linha 10. Uma
variável é um artifício presente na maioria das linguagens de programa-
ção e serve para armazenar uma informação de modo temporário. No
nosso caso, a variável valorInteiro irá armazenar um valor numérico di-
gitado pelo usuário para posteriormente usá-lo.
Java é considerada uma linguagem fortemente tipada porque toda
variável precisa ter a definição de qual tipo é. Os tipos em Java podem
ser categorizados em primitivos e não primitivos; a diferença entre eles
é que os primitivos são os tipos básicos que todo computador consegue
interpretar (números inteiros, números decimais, valores booleanos e
caracteres) e os não primitivos são classes interpretadas pelo compi-
lador Java. A fim de termos mais personalizações desses tipos, foram
criados objetos encapsulando os tipos primitivos, surgindo assim os
tipos não primitivos. No Quadro 1, apresentamos os tipos primitivos e
a correlação deles com os tipos não primitivos.
Quadro 1
Tipos primitivos e não primitivos
Tipo primitivo Descrição Valores suportados Tipo não primitivo
int
Utilizado para números inteiros
(sem casas decimais).
Entre -2,147,483,648 e 2,147,483,648 Integer
long
Utilizado para números inteiros
(sem casas decimais).
Entre -9,223,372,036,854,775,808 e
9,223,372,036,854,775,808
Long
short
Utilizado para números inteiros
(sem casas decimais).
Entre -32,768 e 32,768 Short
float
Utilizado para números com casas
decimais.
Trabalha com até 7 dígitos decimais Float
double
Utilizado para números com casas
decimais.
Trabalha com até 15 dígitos decimais Double
boolean
Utilizado para valores binários (verda-
deiro ou falso).
true ou false Boolean
char
Utilizado para o trabalho com
caractere unitário (letra). Para um
conjunto de caracteres (palavra),
usamos String.
Uma letra ou caractere ASCII String
byte
Utilizado para números inteiros (sem
casas decimais).
Entre -128 e 127 Byte
Fonte: Elaborado pelo autor.
60 Laboratório de Programação I
Um detalhe importante é lembrarmos que não existem somente
esses tipos não primitivos. Você pode definir outros tipos não primiti-
vos graças ao paradigma da orientação a objetos. Cada novo arquivo
Java criado na IDE Eclipse se torna um tipo não primitivo e pode ser
utilizado em qualquer parte do código-fonte.
Retornando ao nosso código-fonte, precisamos exibir ao usuário o
que ele digitou. Para isso, insira a linha a seguir:
System.out.println(“O valor digitado foi “ +
valorInteiro);
Com essa alteração poderemos executar o nosso programa por
meio dos seguintes passos:
1. Clique no ícone disquete para salvar a alteração na classe
Executadora.java. Caso não encontre o ícone, clique em “File”
→ “Save”.
2. Clique no menu “Run” → “Run As” → “Java Application”.
3. Será aberta a aba “Console” do Eclipse solicitando que você digite
um número. Clique dentro dessa aba para digitar um número e
pressione ENTER.
4. Será exibido o que foi digitado.
Figura 7
Execução do projeto
Fonte: Elaborada pelo autor.
Para saber mais sobre ti-
pos no Java, acesse o link
a seguir, que apresenta
definições e exemplos.
Disponível em: https://www.
w3schools.com/java/java_data_
types.asp. Acesso em: 19 out. 2020.
Saiba mais
https://www.w3schools.com/java/java_data_types.asp
https://www.w3schools.com/java/java_data_types.asp
https://www.w3schools.com/java/java_data_types.asp
Notação condicional e estruturas de repetições no Java 61
Na figura a seguir, há alguns exemplos de como ler um texto e um
valor decimal do teclado. Você não precisa implementar esses novos
códigos, pois eles não serão utilizados no nosso projeto.
Figura 8
Exemplos de como ler um texto e um valor decimal do teclado
Fonte: Elaborada pelo autor.
Além dos tipos, é importante conhecermos os operadores definidos
para a linguagem Java, apresentados no Quadro 2.
Quadro 2
Operadores em Java
Símbolo do operador Descrição Exemplo
+ Adição/soma variavel1 + variavel2
- Subtração/redução variavel1 - variavel2
* Multiplicação variavel1 * variavel2
/ Divisão variavel1 / variavel2
% Resto da divisão variavel1 % variavel2
++
Incremento em 1 posição do valor
numérico atual
++variavel1
--
Decréscimo em 1 posição do valor
numérico atual
--variavel1
Fonte: Elaborado pelo autor.62 Laboratório de Programação I
Agora vamos adicionar esses operadores em nosso código-fonte.
Para isso, realize os seguintes passos:
1. Crie um novo arquivo Java chamado Calculos dentro do pacote
“br.com.projeto.calculos” clicando com o botão direito no pacote
e selecionando a opção “New” → “Class”.
2. No campo “Name” digite “Calculos”.
3. Pressione o botão “Finish” para concluir.
4. Dentro do arquivo “Calculos” insira os códigos a seguir:
<code>
public Double somarDoisNumeros(Double valor1, Double valor2) {
return valor1 + valor2;
}
public Double subtrairDoisNumeros(Double valor1, Double valor2)
{
return valor1 - valor2;
}
public Double multiplicarDoisNumeros(Double valor1, Double
valor2) {
return valor1 * valor2;
}
public Double dividirDoisNumeros(Double valor1, Double valor2)
{
return valor1 / valor2;
}
public Double restoDaDivisaoDoisNumeros(Double valor1, Double
valor2) {
return valor1 % valor2;
}
public Double acrescentarUmNumero(Double valor) {
return ++valor;
}
public Double reduzirUmNumero(Double valor) {
return --valor;
}
</code>
Notação condicional e estruturas de repetições no Java 63
Para que esse novo código-fonte seja utilizado, precisamos chamar
o arquivo “Calculos.java” no arquivo “Executadora.java”, dentro do mé-
todo main. Usaremos o seguinte código:
Calculos calculos = new Calculos();
Esse código está criando uma variável chamada calculos (com letra
minúscula) e do tipo Calculos. É uma convenção darmos um mesmo
nome do tipo não primitivo que está sendo usado, mas tudo em minús-
culo. Contudo, não haveria problema se o código fosse Calculos calc =
new Calculos(), pois tudo iria continuar funcionando. Por convenção,
deixaremos Calculos calculos = new Calculos();.
Sugerimos que apague o código anteriormente desenvolvido para
facilitar o seu entendimento e copie o código a seguir para que você
perceba como estão sendo utilizadas todas as funções de soma,
subtração, multiplicação, resto e divisão, além da adição de valor e de-
créscimo de valor.
<code>
Calculos calculos = new Calculos();
Scanner ler = new Scanner(System.in);
System.out.println(“Digite o primeiro valor decimal:”);
Double valor1 = ler.nextDouble();
System.out.println(“Digite o segundo valor decimal:”);
Double valor2 = ler.nextDouble();
Double resultado = calculos.somarDoisNumeros(valor1,
valor2);
System.out.println(“Resultado da soma: “ + resultado);
resultado = calculos.subtrairDoisNumeros(valor1, valor2);
System.out.println(“Resultado da subtração: “ +
resultado);
resultado = calculos.multiplicarDoisNumeros(valor1,
valor2);
(Continua)
64 Laboratório de Programação I
System.out.println(“Resultado da multiplicação: “ +
resultado);
resultado = calculos.dividirDoisNumeros(valor1, valor2);
System.out.println(“Resultado da divisão: “ + resultado);
resultado = calculos.restoDaDivisaoDoisNumeros(valor1,
valor2);
System.out.println(“Resultado do resto da divisão: “ +
resultado);
resultado = calculos.acrescentarUmNumero(valor1);
System.out.println(“Acrescentando uma posição ao primeiro
valor digitado: “ + resultado);
resultado = calculos.reduzirUmNumero(valor1);
System.out.println(“Reduzindo uma posição ao primeiro
valor digitado: “ + resultado);
</code>
Após a inclusão desse código-fonte, vamos executá-lo para verificar
se as alterações foram implementadas de maneira correta. Siga a se-
quência de passos a seguir:
1. Clique no ícone de diversos disquetes para salvar todas as
alterações. Caso não encontre o ícone, clique em “File” → “Save All”.
2. Clique no menu “Run” → “Run As” → “Java Application”.
3. Será aberta a aba “Console” do Eclipse, solicitando que você digite
um número inteiro ou decimal. Clique dentro dessa aba para
digitar um número e pressione ENTER.
4. Será solicitado que digite um segundo valor numérico e pressione
ENTER.
5. Será exibido um resumo dos cálculos realizados.
Com esses aprendizados sobre tipos e operadores na linguagem
Java, conseguimos fazer diversos cálculos matemáticos. Utilize sua
criatividade e curiosidade e implemente novas fórmulas no arquivo
“Calculos.java” como forma de fixar o conhecimento desses temas.
Para saber mais sobre
operadores, acesse o link
a seguir, que apresenta
definições e exemplos.
Disponível em: https://
www.w3schools.com/java/
java_operators.asp. Acesso em: 19
out. 2020.
Saiba mais
https://www.w3schools.com/java/java_operators.asp
https://www.w3schools.com/java/java_operators.asp
https://www.w3schools.com/java/java_operators.asp
Notação condicional e estruturas de repetições no Java 65
3.2 Notação condicional em Java
Vídeo Nesta seção mostraremos como realizar processos condicionais na
linguagem Java. No Quadro 3, você pode ver quais são os comandos e
caracteres usados para validação.
Quadro 3
Condicionais em Java
Comando Descrição Exemplo
if Utilizado para começar uma condição em Java.
if (condicao1) {
}
else
Utilizado para executar um bloco de código caso a
condicional inicial seja falsa.
if (condicao1) {
} else {
}
else if
Semelhante à cláusula else, mas realizará uma
nova validação (if) antes de executar o próximo
bloco de código.
if (condicao1) {
} else if (condicao2) {
} else {
}
{
Utilizado para iniciar um bloco de código após
uma validação do tipo if ou else.
}
Utilizado para finalizar um bloco de código após
uma validação do tipo if ou else.
&&
Semelhante à porta lógica AND. Utilizado em con-
dicionais com duas ou mais validações. Com &&,
todas as condições têm que ser verdadeiras para
que o bloco de código seja executado.
if (condicao1 && condicao2) {
}
||
Semelhante à porta lógica OR. Utilizado em condi-
cionais com duas ou mais validações. Com ||, se
pelo menos uma condição for verdadeira, o bloco
de código é executado.
if (condicao1 || condicao2) {
}
==
Significa igual. Utilizado para validações dentro
das condicionais.
if (condicao1 == 90) {
}
!=
Significa diferente. Utilizado para validações den-
tro das condicionais.
if (condicao1 != 90) {
}
>
Significa maior. Utilizado para validações dentro
das condicionais.
if (condicao1 > 90) {
}
<
Significa menor. Utilizado para validações dentro
das condicionais.
if (condicao1 < 90) {
}
>=
Significa maior ou igual. Utilizado para validações
dentro das condicionais.
if (condicao1 >= 90) {
}
<=
Significa menor ou igual. Utilizado para validações
dentro das condicionais.
if (condicao1 <= 90) {
}
Fonte: Elaborado pelo autor.
66 Laboratório de Programação I
Para exercitar as condicionais, vamos adicionar novos métodos
no arquivo “Calculos.java”. No código a seguir, vamos utilizar os co-
mandos if, else, else if, > e < . Siga os seguintes passos para inserir
novos códigos:
1. Abra o arquivo “Calculos.java”.
2. Coloque o cursor logo depois do método reduzirUmNumero.
3. Adicione o código a seguir:
<code>
public void valorMaiorOuMenor(Double valor1, Double valor2) {
if (valor1 > valor2) {
System.out.println(“O valor “ + valor1 + “ é
maior que “ + valor2 );
} else if (valor1 < valor2) {
System.out.println(“O valor “ + valor1 + “ é
menor que “ + valor2 );
} else {
System.out.println(“O valor “ + valor1 + “ é
igual a “ + valor2 );
}
}
</code>
Para executar esses métodos, abra o arquivo “Executadora.java” e
adicione o comando calculos.valorMaiorOuMenor(valor1, valor2);.
Agora vamos exercitar os comandos de igualdade (==), condicionais
com portas lógicas AND (&&) e OR (||). Siga os seguintes passos para
inserir novos códigos:
1. Abra o arquivo “Calculos.java”.
2. Coloque o cursor logo depois do método valorMaiorOuMenor.
3. Adicione o código a seguir:
<code>
public void valorMultiploDe2e4(Double valor1) {
if (valor1 % 2 == 0 && valor1 % 4 == 0) {
System.out.println(“O valor “ + valor1 + “ é
múltiplo de 2 e 4 simultaneamente”);
} else {
System.out.println(“O valor “ + valor1 + “ não é
múltiplo de 2 e 4 simultaneamente”);
(Continua)
Notação condicional e estruturas de repetiçõesno Java 67
}
}
public void valorMultiploDe5ou7(Double valor1) {
if (valor1 % 5 == 0 || valor1 % 7 == 0) {
System.out.println(“O valor “ + valor1 + “ é
múltiplo de 5 ou 7”);
} else {
System.out.println(“O valor “ + valor1 + “ não é
múltiplo de 5 e nem múltiplo de 7”);
}
}
</code>
Para executar esses métodos, abra o arquivo “Executadora.java” e
adicione os comandos:
• calculos.valorMultiploDe2e4(valor1);
• calculos.valorMultiploDe5ou7(valor1);
Com esses aprendizados sobre condicionais na linguagem Java, con-
seguimos personalizar os cálculos matemáticos. Utilize sua criatividade
e curiosidade e implemente novas fórmulas no arquivo “Calculos.java”
como forma de fixar o conhecimento desses temas.
3.3 Estruturas de repetição com Java
Vídeo Nesta seção mostraremos como utilizar as estruturas de repetição
na linguagem Java. No Quadro 4, você poderá ver quais são as estrutu-
ras de repetição disponíveis para uso e também as palavras reservadas
que auxiliam no processo de repetição.
Quadro 4
Estruturas de repetição em Java
Comando Descrição Exemplo
while
Utilizado para repetir um bloco de código en-
quanto a condição permanecer válida.
while (condicao) {
//bloco de codigo
}
do / while
Executa pelo menos uma vez o bloco de código
e posteriormente realiza a validação. Caso o re-
sultado da validação seja verdadeiro, o bloco de
código é executado novamente.
do {
//bloco de codigo
} while (condicao);
(Continua)
68 Laboratório de Programação I
Comando Descrição Exemplo
for
Utilizado para repetir um bloco de código en-
quanto a condição permanecer válida.
for (int i = 0; i < 10; i++) {
//bloco de codigo
}
switch
Utilizado para a execução de diversos blocos de
código com base em uma expressão definida.
switch(expressao) {
case valor1:
//bloco de codigo
break;
case valor2:
//bloco de codigo
break;
default:
| //bloco de codigo
}
break
Comando utilizado para parar a execução do
bloco de repetição.
continue
Comando utilizado para dar sequência à execu-
ção do bloco de repetição.
default
Comando utilizado para iniciar um bloco de có-
digo caso nenhuma condição seja atendida no
comando switch.
Fonte: Elaborado pelo autor.
Para exercitar as estruturas de repetição, vamos adicionar novos
métodos no arquivo “Calculos.java”. No código a seguir, vamos utilizar
as estruturas de repetição while, do while, for e switch. Siga os se-
guintes passos para inserir novos códigos:
1. Abra o arquivo “Calculos.java”.
2. Coloque o cursor logo depois do método valorMultiploDe5ou7.
3. Adicione o código a seguir:
<code>
public void exemploWhile() {
Integer valor = 5;
while (valor < 10) {
System.out.println(“Valor atual da repetição
usando while: “ + valor);
valor++;
}
}
(Continua)
Notação condicional e estruturas de repetições no Java 69
public void exemploDoWhile() {
Integer valor = 5;
do {
System.out.println(“Valor atual da repetição
usando do while: “ + valor);
valor++;
} while (valor < 10);
}
public void exemploFor() {
for (Integer i = 0; i < 10; i++) {
System.out.println(“Valor atual da repetição
usando for: “ + i);
}
}
public void exemploSwitch(Integer valor) {
switch (valor) {
case 1:
System.out.println(“Opção 1 foi selecionada “);
break;
case 2:
System.out.println(“Opção 2 foi selecionada “);
break;
default:
System.out.println(“Opção diferente de 1 e 2”);
break;
}
}
</code>
Para executar esses métodos, abra o arquivo “Executadora.java” e
adicione os seguintes comandos:
• calculos.exemploWhile();
• calculos.exemploDoWhile();
• calculos.exemploFor();
• calculos.exemploSwitch(10);
• calculos.exemploSwitch(2);
70 Laboratório de Programação I
Com esses aprendizados sobre estruturas de repetição na lingua-
gem Java, conseguimos personalizar os cálculos matemáticos. Utilize
sua criatividade e curiosidade e implemente novas fórmulas no arquivo
“Calculos.java” como forma de fixar o conhecimento desses temas.
3.4 Palavras reservadas
Vídeo À medida que você cria mais código em Java, vai percebendo que
algumas palavras não podem ser usadas como nomes de arquivos ou
variáveis, pois elas são utilizadas pelo JDK. Essas palavras são comu-
mente chamadas de palavras reservadas. Nesta seção listamos as pa-
lavras que estão reservadas e bloqueadas pela linguagem para uso do
desenvolvedor, conforme o Quadro 5.
Quadro 5
Conjunto de palavras reservadas do Java
Comando Descrição
abstract
Sinaliza que uma classe não pode ser iniciada pelo coman-
do new ou que um método deve ser implementado pelas
subclasses (classes filhas).
catch Utilizado para tratamento de exceção.
final
Impede que uma classe seja estendida (herança), que um
método seja sobrescrito (override) e que uma variável seja
reiniciada.
implements Utilizado para o uso de interfaces (polimorfismo).
private
É um modificador de acesso. Impede que classes e méto-
dos externos acessem aquele trecho de código.
static
Faz com que um método seja invocado em qualquer parte
do código-fonte sem ter a obrigação de iniciar a classe com
o comando new.
throw
Utilizado para tratamento de exceção. Retorna uma exce-
ção para o método que foi invocado.
throws
Utilizado para tratamento de exceção. Retorna uma exce-
ção personalizada para o método que foi invocado.
void
Identifica que não haverá retorno no método. Não pode ser
considerado tipo primitivo ou não primitivo.
finally
Comando utilizado para que um trecho de código seja
executado após um processo de validação, repetição ou
exceção.
(Continua)
Notação condicional e estruturas de repetições no Java 71
Comando Descrição
import
Utilizado para criar um vínculo de uma classe com outra,
caso ambas estejam em pacotes ou projetos diferentes.
protected
É um modificador de acesso que gera visibilidade de classes
e métodos somente para os demais arquivos do mesmo pa-
cote ou que sejam subclasses (herança).
super
Utilizado para sinalizar o uso de algo na classe pai (super-
classe).
class Identifica o tipo daquele arquivo.
instanceof Utilizado para definir o tipo de um objeto.
new Cria uma instância ou vínculo entre classes e objetos.
public
É um modificador de acesso que permite o acesso a classes
e métodos independentes de pacotes.
extends
Utilizado para sinalizar a ligação de uma classe com outra,
por meio do conceito de herança (superclasse e subclasse).
null
É um valor. Não confunda null com vazio, são coisas dife-
rentes.
return
Utilizado para finalizar o processamento de um método, ga-
rantindo o retorno de uma informação.
synchronized
Utilizado no conceito de threads (paralelismo). Com ele, um
método só pode ser acessado por uma thread de cada vez.
true
Tipo booleano que representa algo verdadeiro (bit 1, liga-
do).
false Tipo booleano que representa algo falso (bit 0, desligado).
case Utilizado na estrutura de condição switch.
default
Utilizado na estrutura de condição switch. Caso não encon-
tre uma opção válida, o comando default é acionado.
interface
Sinaliza que aquele arquivo é do tipo interface e poderá ser
implementado por diversas classes (polimorfismo).
package Sinaliza qual pacote pertence àquela classe.
this Utilizado para identificar a instância atual do objeto.
try
Utilizado para abrir um bloco de código que pode ter
uma exceção. Geralmente utilizado com a palavra reser-
vada catch.
Fonte: Elaborado pelo autor.
O Quadro 5 contém informações importantes que você irá fixar
durante o dia a dia da programação. Ele não está completo, pois
existem diversas outras palavras reservadas, mas as principais fo-
ram listadas. Entendendo quais são elas, você poderá tirar maior
proveito da linguagem Java.
Não deixe de acessar
o link a seguir para
conhecer as demais
palavras reservadas e o
significado delas.
Disponível em: http://www.
linhadecodigo.com.br/artigo/83/
as-52-palavras-reservadas-do-
java.aspx. Acesso em: 19 out.
2020.
Saiba mais
http://www.linhadecodigo.com.br/artigo/83/as-52-palavras-reservadas-do-java.aspxhttp://www.linhadecodigo.com.br/artigo/83/as-52-palavras-reservadas-do-java.aspx
http://www.linhadecodigo.com.br/artigo/83/as-52-palavras-reservadas-do-java.aspx
http://www.linhadecodigo.com.br/artigo/83/as-52-palavras-reservadas-do-java.aspx
72 Laboratório de Programação I
CONSIDERAÇÕES FINAIS
Neste capítulo, apresentamos diversos comandos da linguagem Java.
Por meio do conhecimento em tipos primitivos e não primitivos, estrutu-
ras condicionais e estruturas de repetição é possível construir diversos
algoritmos, resolvendo, assim, problemas recorrentes. A fixação desses
conceitos acontecerá à medida que você praticar repetidamente a pro-
gramação dos códigos descritos.
ATIVIDADES
1. Crie um método que verifique se um número do tipo Integer digitado
pelo usuário é par. Caso seja par, exiba a mensagem “é par”.
2. Crie um método que verifique se um número do tipo Integer digitado
pelo usuário é maior ou igual a 2 e menor ou igual a 25. Caso esteja
entre 2 e 25, exiba a mensagem “O número digitado está entre 2 e 25”.
3. Crie um laço de repetição for que exiba os números de 1 a 6. A cada
repetição, apresente a mensagem “Sequência numérica x” (sendo X o
número da repetição; por exemplo: “Sequência numérica 1”, “Sequência
numérica 2”, “Sequência numérica 3” e assim sucessivamente, até
chegar em “Sequência numérica 6”).
Recursos da linguagem Java e a qualidade do código 73
4
Recursos da linguagem Java
e a qualidade do código
A linguagem de programação Java é composta de diversas clas-
ses utilitárias que nos ajudam com a manipulação de texto, data,
hora e com o trabalho de conjunto de valores. Boa parte dessas
classes estão dentro do Java development kit (JDK) e serão utili-
zadas de modo recorrente, ajudando-o com os diversos desafios
no desenvolvimento de software. Além de avançarmos no conhe-
cimento da linguagem Java, vamos aprender como realizar códigos
testáveis e de alta qualidade. Após esses aprendizados, você terá
um conjunto de conhecimento que servirá como uma excelente
base para seguir na programação Java.
4.1 Classe String
Vídeo Para trabalharmos com textos na linguagem Java, precisamos uti-
lizar a classe String, do pacote “java.lang”. Essa classe faz parte da
linguagem Java, pois está dentro do JDK e trata os textos como uma
sequência de caracteres, diferentemente do tipo primitivo char, o qual
trabalha com um único caractere. A seguir, observe um exemplo de
como utilizar a classe String:
<code>
String nomeDaVariavel = “Texto completo”;
</code>
Para exibir um texto, devemos usar o comando System.out.println.
Veja no exemplo a seguir:
<code>
String nomeDaVariavel = “Texto completo”;
System.out.println(nomeDaVariavel);
</code>
74 Laboratório de Programação I
Como String é uma classe, ela possui uma diversidade de coman-
dos de apoio, diferente de um tipo primitivo. Por exemplo, podemos
tornar todo o texto de uma variável do tipo String em minúsculo ou
maiúsculo rapidamente, como no exemplo a seguir:
<code>
String texto = “Olá Mundo”;
System.out.println(texto.toUpperCase()); // irá
apresentar “OLÁ MUNDO”
System.out.println(texto.toLowerCase()); // irá
apresentar “olá mundo”
</code>
Em alguns momentos, podemos desejar unir duas variáveis do tipo
String. Esse processo é chamado de concatenação e é realizado pelo
uso do caractere +. Vamos observar o exemplo a seguir:
<code>
String primeiroNome = “Ayrton”;
String ultimoNome = “Senna”;
System.out.println(primeiroNome + “ “ + ultimoNome);
</code>
Esse código exibirá no console o texto “Ayrton Senna”. Perce-
ba que foi utilizado o símbolo + para concatenar as duas variá-
veis e para concatenar um espaço em branco. Caso o código fosse
primeiroNome+ultimoNome, iria ser exibido “AyrtonSenna” e isso
não seria agradável para o usuário.
Mas quando trabalhamos com textos em qualquer linguagem de
programação, alguns caracteres precisam ter um tratamento especial e
isso não é diferente com a Java. Os caracteres ‘ (aspa simples), “ (aspas
duplas) e \ (barra invertida) são especiais. Para utilizar esses caracteres
na Java, use uma barra invertida antes de cada caractere.
Como usar o caractere
na Java Resultado Descrição Exemplo
\’ ‘ Aspa simples String txt = “pingo d\’gua”;
\” “ Aspas duplas String txt = “Ele disse: \”olá\”.”;
\\ \ Barra invertida String txt = “Exemplo de \\”;
Recursos da linguagem Java e a qualidade do código 75
Alguns comandos especiais podem ser utilizados dentro dos textos
para executar funções como pular linha ou criar um parágrafo. Na ta-
bela a seguir, encontramos as descrições desses comandos.
Comando Resultado Exemplo
\r Retorno do cursor String txt = “Exemplo de \rtexto”;
\n Nova linha String txt = “Exemplo de \ntexto”;
\t Usar um parágrafo String txt = “Exemplo de \n\ttexto”;
Como pudemos perceber, é possível utilizar mais de um comando
especial no mesmo texto. No texto “Exemplo de \n\ttexto” estamos pu-
lando uma linha (com o comando \n) e inserindo um parágrafo (com
o comando \t). Não há um limite para quantos comandos especiais é
possível utilizar dentro de um texto.
Uma mudança grande que causa confusão em quem está começan-
do com a linguagem Java é realizar comparações de textos. É natural
pensarmos que para comparar um texto se utiliza o comando ==, mas
esse comando serve para comparar valores numéricos. Para texto, pre-
cisamos utilizar o comando equals.
Essa mudança acontece, pois String contém um valor, e para com-
parar valores de classes, não pode ser usado ==, e sim equals. Quando
usamos ==, comparamos um objeto com o outro e um String nunca
será igual a outro, mesmo que tenha o mesmo texto dentro dele. Por
isso, para comparar valores entre classes, devemos usar equals. Va-
mos verificar isso em um exemplo:
<code>
String primeiroTexto = “Exemplo”;
String segundoTexto = “Exemplo”;
if (primeiroTexto == segundoTexto) {
System.out.println(“São objetos iguais”);
} else {
System.out.println(“São objetos diferentes”);
}
if (primeiroTexto.equals(segundoTexto)) {
System.out.println(“Tem valores iguais”);
} else {
System.out.println(“Tem valores diferentes”);
}
</code>
76 Laboratório de Programação I
Caso você use uma versão do JDK acima da versão oito, provavel-
mente perceberá que os resultados serão semelhantes. Mas, em versões
inferiores, os valores são diferentes. Por isso, é melhor considerar utilizar
== para comparações de números, e para os outros tipos utilizar equals.
Entender os recursos e como funciona a classe String lhe ajudará
a realizar de maneira correta as tratativas de textos e irá otimizar o
seu trabalho com programação, evitando que funções já criadas sejam
reescritas por você. Use String sem moderação e aproveite todo o po-
tencial dessa classe ao seu favor.
4.2 Conjunto de valores (matriz – arrays)
Vídeo Nesta seção, utilizaremos a classe String para explicar a maneira
correta de trabalhar com conjunto de valores. Esses conjuntos são cha-
mados de matriz e cada um deles pode guardar mais de um valor. Em
Java, essas matrizes são chamadas de arrays.
Imagine que você precisa guardar o nome de três marcas de carros.
A primeira ideia que vem à mente é usar três variáveis diferentes, mas
que tal utilizar uma única variável que armazene as três marcas? Isso
é possível com o uso das matrizes. Basicamente, você usará os carac-
teres [ ] (abertura e fechamento de colchetes) logo após da tipagem da
variável. Vamos ao exemplo:
<code>
String[] marcasCarros = {“Ford”, “Fiat”, “Chevrolet”};
</code>
É possível utilizar matriz para qualquer tipo, primitivos ou não, no
Java. Vamos ver um exemplo com números inteiros:
<code>
Integer[] numeros = {10, 20, 30, 40};
</code>
Para acessar e exibir o conteúdo de uma matriz, você precisa infor-
mar na programação qual posição deseja exibir. Vamos retornar aos
códigos de marcas de carro e exibir o texto “Fiat”. Para isso, precisamos
acessar a segunda posição. Se você pensou que a segunda posição é o
número 2, sintodizer que errou. A segunda posição é o número 1, pois
Para saber mais detalhes
sobre a classe String e quais
outros comandos podem ser
utilizados, acesse a página Java
String, disponível em: https://
www.w3schools.com/java/
java_strings.asp. Acesso em:
19 out. 2020.
Saiba mais
https://www.w3schools.com/java/java_strings.asp
https://www.w3schools.com/java/java_strings.asp
https://www.w3schools.com/java/java_strings.asp
Recursos da linguagem Java e a qualidade do código 77
a contagem começa do 0. Ou seja, 0 é a primeira posição, 1 é a segunda
e assim a sequência segue até a posição que você deseja acessar:
<code>
String[] marcasCarros = {“Ford”, “Fiat”, “Chevrolet”};
System.out.println(marcasCarros[1]);
</code>
Para mudar o conteúdo de uma posição em uma matriz, acesse a
posição desejada e mude o texto. No exemplo a seguir, vamos mudar a
terceira posição para BMW.
<code>
String[] marcasCarros = {“Ford”, “Fiat”, “Chevrolet”};
marcasCarros[2] = “BMW”;
System.out.println(marcasCarros[2]);
</code>
Para exibir todo o conteúdo da matriz, é preciso percorrer ela usan-
do algum laço de repetição. Costumamos utilizar o for como opção
para essa operação. E para percorrer todo o conteúdo de uma matriz, é
necessário saber o tamanho dela. Por isso, usamos o comando length.
Confira o exemplo a seguir:
<code>
String[] marcasCarros = {“Ford”, “Fiat”, “Chevrolet”};
for (int i = 0; i < marcasCarros.length ; i++) {
System.out.println(marcasCarros[i]);
}
</code>
A seguir, vamos unir os dois tópicos estudados neste capítulo com
um código que irá receber um número até 99 e devolverá a descrição
desse valor por extenso. Para isso, usaremos três arrays, cada um com
uma finalidade específica: um irá guardar as informações de como se
escreve as unidades; outro guardará as informações de como se es-
creve as dezenas; por fim, o último guardará informações de como se
escreve os números de 11 a 19, pois são dezenas especiais.
Para que esse código funcione, é necessário criar uma classe no pa-
cote “br.com.projeto.conversoes”. Vamos ao passo a passo a seguir.
Para saber mais detalhes do
uso de arrays em Java e quais
outros comandos podem ser
utilizados, acesse a página Java
Arrays, disponível em: https://
www.w3schools.com/java/
java_arrays.asp. Acesso em: 19
out. 2020.
Saiba mais
https://www.w3schools.com/java/java_arrays.asp
https://www.w3schools.com/java/java_arrays.asp
https://www.w3schools.com/java/java_arrays.asp
78 Laboratório de Programação I
1. Clique com o botão direito do mouse no pacote “br.com.projeto.conversoes”, que
está presente no source folder src.
2. Selecione a opção “New” → “Class”.
3. No campo “Name”, digite “NumeroPorExtenso”.
4. Clique no botão “Finish” para concluir a criação do arquivo. Automaticamente
será aberto o arquivo “NumeroPorExtenso.java” para ser editado.
Dentro da classe NumeroPorExtenso.java, insira o seguinte método:
<code>
public static String extenso(int num) {
integer posicaoUnidade, posicaoDecimal;
String extenso = “”;
String conexao;
String[] unidade = new String[10];
String[] dezena = new String[10];
String[] dezenaEspecial = new String[10];
unidade[0] = “”;
unidade[1] = “um”;
unidade[2] = “dois”;
unidade[3] = “três”;
unidade[4] = “quatro”;
unidade[5] = “cinco”;
unidade[6] = “seis”;
unidade[7] = “sete”;
unidade[8] = “oito”;
unidade[9] = “nove”;
dezena[0] = “”;
dezena[1] = “dez”;
dezena[2] = “vinte”;
dezena[3] = “trinta”;
dezena[4] = “quarenta”;
dezena[5] = “cinquenta”;
dezena[6] = “sessenta”;
dezena[7] = “setenta”;
Recursos da linguagem Java e a qualidade do código 79
dezena[8] = “oitenta”;
dezena[9] = “noventa”;
dezenaespecial[0] = “dez”;
dezenaespecial[1] = “onze”;
dezenaespecial[2] = “doze”;
dezenaespecial[3] = “treze”;
dezenaespecial[4] = “quatorze”;
dezenaespecial[5] = “quinze”;
dezenaespecial[6] = “dezesseis”;
dezenaespecial[7] = “dezessete”;
dezenaespecial[8] = “dezoito”;
dezenaespecial[9] = “dezenove”;
if (num >= 1 && num <= 99) {
posicaoDecimal = num / 10;
posicaoUnidade = num % 10;
conexao = “”;
if (posicaoDecimal > 0 && posicaoUnidade > 0) {
conexao = “ e “;
}
if (num >= 10 && num <= 19) {
extenso = dezenaEspecial[posicaoUnidade];
} else {
extenso = dezena[posicaoDecimal] + conexao +
unidade[posicaoUnidade];
}
}
return (extenso);
}
</code>
Salve as alterações dessa classe e abra a classe Executadora.java
e insira um código novo dentro do método main. Para não executar
os códigos anteriores, você pode usar os comandos /* e */. Eles irão
comentar os códigos que você não deseja executar. Observe, a seguir,
o exemplo de código comentado com o novo trecho de código para
executar a função criada.
80 Laboratório de Programação I
<code>
/*
Calculos calculos = new Calculos();
Scanner ler = new Scanner(System.in);
System.out.println(“Digite o primeiro valor decimal:”);
Double valor1 = ler.nextDouble();
System.out.println(“Digite o segundo valor decimal:”);
Double valor2 = ler.nextDouble();
Double resultado = calculos.somarDoisNumeros(valor1, valor2);
System.out.println(“Resultado da soma:” + resultado);
*/
NumeroPorExtenso n = new NumeroPorExtenso();
for (int i=1; i <100;i++) {
System.out.println(n.extenso(i));
}
</code>
Figura 1
Classe Executadora.java exibindo números por extenso.
Fonte: Elaborada pelo autor.
Recursos da linguagem Java e a qualidade do código 81
Com essa alteração, poderemos executar o nosso programa por
meio dos seguintes passos:
1. Clique no ícone do disquete para salvar a alteração na classe Executadora.java.
Caso não encontre o ícone, clique em “File” → “Save”.
2. Clique no menu “Run” → “Run As” → “Java Application”.
3. Será aberta a aba “Console” do Eclipse, solicitando que você digite um número.
Clique dentro dessa aba para digitar um número e pressione ENTER.
4. Será exibida uma sequência de textos de 1 até 99 escrita por extenso.
Esse é um exemplo poderoso de que unir arrays e textos pode
otimizar um trabalho que poderia ser repetitivo e trabalhoso. Con-
siderando que o código esteja correto, nunca mais será necessário
refazer essa tarefa, basta acionar o método extenso() para termos a
resposta correta.
Continue o desenvolvimento
desse método para conseguir
interpretar números acima de
100, pois o método está limitado
a valores entre 1 e 99.
Desafio
4.3 Classe Date
Vídeo Até o momento, aprendemos como trabalhar com números, textos
e conjunto de valores (arrays) na linguagem Java. Esse conjunto de co-
nhecimento já permite que você faça diversos programas em Java, mas
em algum momento você precisará trabalhar com datas e, pensando
nisso, o Java traz um conjunto de classes para trabalhar com datas,
todas do pacote “java.time”. No quadro a seguir, estão listadas as prin-
cipais classes para trabalhar com datas.
Quadro 1
Classes de datas no Java
Nome da classe Descrição
LocalDate
Classe utilizada para exibir uma data local com ano, mês e
dia (yyyy-MM-dd).
LocalTime
Classe utilizada para exibir um tempo em horas, minutos,
segundos e nanosegundos (HH:mm:ss-ns).
LocalDateTime É a junção das duas classes citadas.
DateTimeFormatter
Classe utilizada para formatar uma data que será apresen-
tada para o usuário.
Fonte: Elaborado pelo autor.
82 Laboratório de Programação I
Para exibir uma data atual, utilize o código a seguir na classe
Executadora.java e rode o código para verificar o resultado.
<code>
LocalDate dataAtual = LocalDate.now();
System.out.println(dataAtual);
</code>
Quando você utilizar esse código, a palavra LocalDate provavelmente
ficará grifada em vermelho. Para resolver esse problema, pare o mouse
em cima da palavra e a IDE irá automaticamente sugerir a importação
do pacote “java.time”. Isso irá resolver o problema. O resultado do códi-
go será a exibição da data atual, sem horas, no formato de ano-mês-dia
(padrão norte-americano).
Para exibir a hora atual, utilize o código a seguir na classe
Executadora.javae rode o código para verificar o resultado:
<code>
LocalTime horaAtual = LocalTime.now();
System.out.println(horaAtual);
</code>
O resultado da execução do código será a hora atual com os mi-
nutos, segundos e nanosegundos. Caso você queira apresentar data e
hora, você precisa usar a classe LocalDateTime:
<code>
LocalDateTime dataHoraAtual = LocalDateTime.now();
System.out.println(dataHoraAtual);
</code>
O resultado das datas e horas estão em um formato não muito
agradável para o usuário. Para corrigir isso, você deve utilizar a classe
DateTimeFormatter, junto com a classe LocalDateTime. No código a
seguir, iniciamos uma data e hora atual e exibimos ela sem formatação.
Logo em seguida, usamos a classe DateTimeFormatter e informamos
o padrão de saída brasileiro (dia, mês e ano, seguidos por hora, minu-
tos e segundos). Esse padrão é usado pela função ofPattern().
<code>
LocalDateTime dataHoraAtual = LocalDateTime.now();
System.out.println(“Data Hora sem formatacao: ” +
dataHoraAtual);
DateTimeFormatter formatacao = DateTimeFormatter.
ofPattern(“dd-MM-yyyy HH:mm:ss”);
Recursos da linguagem Java e a qualidade do código 83
String dataFormatada = dataHoraAtual.format(formatacao);
System.out.println(“Data Hora Formatada: ” + dataFormatada);
</code>
O resultado desse código será algo parecido com 30/08/2020
11:50:10, ou seja, um padrão que qualquer usuário está acostumado a
entender. Além desse padrão de exibição, outros podem ser utilizados
dentro do método ofPattern(). Confira no quadro a seguir.
Quadro 2
Padrões de exibição de data
Padrão a ser exibido Resultado esperado Exemplo
yyyy-MM-dd 2020-08-24 DateTimeFormatter.ofPattern(“yyyy-MM-dd”);
dd/MM/yyyy 24/08/2020 DateTimeFormatter.ofPattern(“dd/MM/yyyy”);
dd-MMM-yyyy 24-Aug-2020 DateTimeFormatter.ofPattern(“dd-MMM-yyyy”);
E, MMM dd yyyy Mon, Aug 24 2020 DateTimeFormatter.ofPattern(“E, MMM dd yyyy”);
Fonte: Elaborado pelo autor.
Nesta seção, aprendemos o básico sobre o trabalho com datas em
Java. Em alguns lugares você encontrará referências para o pacote/clas-
se java.util.Date, que não foi mencionado neste livro. Essa classe está
sendo depreciada, ou seja, entrando em desuso e é aconselhável que
você não a utilize em novos projetos. As classes presentes no pacote
java.time deverão ser utilizadas sempre que possível para o trabalho
com datas.
Para saber mais detalhes do uso
de datas em Java e quais outros
comandos podem ser utilizados,
acesse a página Java Date and
Time, disponível em: https://
www.w3schools.com/java/
java_date.asp. Acesso em: 19
out. 2020.
Saiba mais
4.4 Testes unitários
Vídeo Neste seu primeiro contato com a programação em Java, você está
tendo que inserir códigos-fonte e executá-los com bastante frequência
para testar se a implementação está correta. Mas existe uma forma
melhor de criar a execução de testes, os quais podem se tornar au-
tomatizados (ou seja, executados a qualquer momento por qualquer
pessoa). Trata-se dos testes unitários e eles são códigos-fonte, mas que
ficam no source folder test.
O ideal é que cada parte do código tenha o seu próprio teste unitá-
rio, e para criá-los costumamos utilizar a biblioteca JUnit, na versão 5.0.
Vamos criar o nosso primeiro teste unitário. Para isso, vamos acompa-
nhar os passos a seguir.
https://www.w3schools.com/java/java_date.asp
https://www.w3schools.com/java/java_date.asp
https://www.w3schools.com/java/java_date.asp
84 Laboratório de Programação I
1. Abra o source folder test e você irá visualizar os pacotes “br.com.projeto.calculos” e
“br.com.projeto.conversoes”.
2. Clique com o botão direito no pacote “br.com.projeto.calculos” e escolha a opção
“New” → “Class”.
3. Crie a classe chamada CalculosTest.
4. Pressione o botão “Finish” para encerrar a criação do arquivo.
Com essa classe criada, vamos elaborar alguns testes para os méto-
dos somarDoisNumeros e subtrairDoisNumeros que estão presen-
tes na classe Calculos.java. Para realizar esses testes:
1. Abra a classe CalculosTest.java;
2. Digite este código dentro dessa classe:
<code>
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.junit.jupiter.api.Test;
import br.com.projeto.conversoes.NumeroPorExtenso;
public class CalculosTest {
private final Calculos calculos = new Calculos();
private final NumeroPorExtenso numeroPorExtenso = new
NumeroPorExtenso();
@Test
public void somarDoisNumerosTest() {
assertTrue(2.0 == calculos.somarDoisNumeros(1.0, 1.0));
}
@Test
public void subtrairDoisNumerosTest() {
assertTrue(7.0 == calculos.subtrairDoisNumeros(8.0, 1.0));
}
@Test
public void validaSeEhParTest() {
assertEquals(“dois”, numeroPorExtenso.extenso(2));
}
</code>
Recursos da linguagem Java e a qualidade do código 85
Figura 2
Testes unitários para a classe Calculos.java
Fonte: Elaborada pelo autor.
Perceba que antes de cada método existe uma anotação @Test. Ela
é usada para identificar que aquele método terá uma execução especí-
fica de testes unitários. Você sempre deve usar essa anotação para ter
a função de testes unitários ativada.
Além dessa configuração, percebemos dois comandos importantes
para validação de dados. Usamos assertTrue para validação de nú-
meros e assertEquals para validação de textos e objetos. Para ambos,
informamos o valor que esperamos e, em seguida, informamos qual
classe e método será validada. Por exemplo: assertTrue(7.0 == calcu-
los.subtrairDoisNumeros(8.0, 1.0));.
Para executar os testes unitários, você usará a opção “Run” → “Run
as” → “JUnit test”. Ao acionar essa opção, será aberta uma aba chamada
JUnit e serão executados os testes. Caso tudo fique verde, quer dizer
que todos os testes validaram corretamente seu código. Caso algum
deles fique vermelho, você precisará analisar em qual ponto está o
erro, se é no teste ou no código escrito.
86 Laboratório de Programação I
Figura 3
Aba na IDE Eclipse que exibe o resultado da execução dos testes unitários
Fonte: Elaborada pelo autor.
Ao utilizar testes unitários, você garantirá que os códigos produzi-
dos em Java sempre irão funcionar e realizar as operações esperadas.
Produzir testes unitários faz com que seu código-fonte tenha maior
qualidade e seja de mais fácil manutenção.
CONSIDERAÇÕES FINAIS
Avançamos no conhecimento da linguagem de programação Java. Ago-
ra, conseguimos manipular números, textos, datas e conjunto de valores.
E todo o nosso trabalho de programação pode ser garantido com testes
unitários, sem complicar a base de código desenvolvido. Esse conjunto de
informações permite que façamos diversos tipos de programas e auxilia
na resolução de vários problemas complexos, atendendo às expectativas
dos usuários.
ATIVIDADES
1. Crie uma classe chamada ExercicioDeTexto.java e crie um método
chamado maiusculo() que receba um texto qualquer e retorne esse
texto com todas as letras em maiúsculo. Crie um teste unitário para o
método.
2. Crie um teste unitário para o método divisão, o qual receberá os
valores 28 e 4 e retornará o resultado 7.
3. Crie um código-fonte para exibir uma data no formato dia-mês (ambos
com duas posições e separados por um hífen).
Aplicando orientação a objetos 87
5
Aplicando orientação a objetos
Estimado aluno, até este momento você criou diversos códigos-
-fonte em Java e utilizou vários conceitos da orientação a objetos.
Neste capítulo, vamos detalhar esses conceitos usados para que,
nos próximos códigos-fonte, você tenha maior facilidade com
esse paradigma de programação. Para o bom andamento dos
estudos, permaneça com a IDE Eclipse iniciada e com o projeto
“CalculosEConversoes” aberto, pois boa parte das explicações des-
te capítulo fará menção ao que já foi desenvolvido.
O que fizemos até agora foram algoritmos em Java, mas que
utilizam alguns conceitos da orientação a objetos. Nas seções des-
te capítulo, você irá conhecer de maneira prática os quatro pilares
da orientação a objetos, bem como a base desse paradigma de
programação,que é a abstração. Vamos lá?
5.1 Definição e criação de classes,
métodos e atributosVídeo
Quando analisamos o projeto “CalculosEConversoes”, temos os se-
guintes arquivos no source folder src:
Figura 1
Arquivos no projeto “CalculosEConversoes”
Fonte: Elaborada pelo autor.
88 Laboratório de Programação I
O que temos chamado de arquivos até o momento são, na verda-
de, classes. Uma classe é o modelo ou esquema por meio do qual os
objetos são criados (HORSTMANN; CORNELL, 2010). A classe deve re-
presentar algo significativo da vida real e, dentro dela, temos diversas
informações que detalham o que a classe faz e suas características.
As possíveis ações de uma classe são chamadas de métodos e suas
características são denominadas atributos.
Por convenção, os atributos ficam logo no início do arquivo, após
a declaração do nome da classe, e os métodos ficam logo abaixo dos
atributos. É também uma convenção utilizar os nomes dos métodos
com algum verbo no infinitivo, sem esquecer do padrão CamelCase.
Vejamos um exemplo de classe com atributos e métodos:
<code>
public class ExemploDeCalculo {
private Long resultado;
private Integer resultadoInteiro;
public Integer realizarSoma(Integer valor1, Integer
valor2) {
return valor1 + valor2;
}
public Integer realizarSubtracao(Integer valor1, Integer
valor2) {
return valor1 - valor2;
}
}
</code>
Nesse código, temos a classe ExemploDeCalculo. Ela possui dois
atributos – resultado e resultadoInteiro – que atuam como variáveis;
ambos podem ser acessados em qualquer parte dessa classe. Por fim,
temos as ações que ela realiza (realizarSoma e realizarSubtracao).
Quando acessamos uma classe para utilizá-la, dizemos que criamos
uma instância da classe (HORSTMANN; CORNELL, 2010). Para referen-
ciar a classe, costumamos usar a palavra reserva new.
<code>
NomeDaClasse exemplo = new NomeDaClasse();
</code>
Aplicando orientação a objetos 89
No nosso exemplo, a classe Executadora.java faz uma ligação com
as classes Calculos.java e NumerosPorExtenso.java, conforme pode
ser visto no código a seguir:
public class Executadora {
public static void main(String[] args) {
Calculos calculos = new Calculos();
Scanner ler = new Scanner(System.in);
System.out.printIn(“Digite o primeiro valor
decimal:”);
Double valor1 = ler.nextDouble();
NumeroPorExtenso n = new NumeroPorExtenso();
for (int i=1; i <100;i++) {
System.out.printIn(n.extenso(i));
}
}
}
</code>
Ao realizar o processo de criação de uma instância, você utilizará um
espaço em memória da Java virtual machine (JVM). Quando não estiver
mais utilizando essas instâncias, a própria JVM fará a limpeza de memó-
ria. Esse processo é chamado de garbage collector.
A orientação a objetos busca aproximar a construção de algoritmos
conforme os objetos são percebidos na vida real. Para ajudar nessa
construção, devemos utilizar as classes e mapear seus atributos e mé-
todos. A fim de realizar isso com a maior precisão possível, precisamos
investir nos estudos da abstração, que é o tema da próximo seção.
Para se aprofundar no
tema das classes, méto-
dos e atributos, assista
ao vídeo Curso de Java
24 - Orientação a objetos:
classes e atributos, publi-
cado pelo canal Loiane
Groner.
Disponível em: https://youtu.be/
Gq1BS63pkRA. Acesso em: 19
out. 2020.
Vídeo
5.2 Abstração
Vídeo O paradigma orientado a objetos prevê a criação de classes com
base na análise do mundo real. Esse conceito é denominado abstração,
sendo considerado a base para todos os outros conceitos da orienta-
ção a objetos. Em síntese, uma abstração é uma visão ou representa-
ção de uma entidade que inclui apenas os atributos mais significativos
https://youtu.be/Gq1BS63pkRA
https://youtu.be/Gq1BS63pkRA
90 Laboratório de Programação I
(SEBESTA, 2018). As vantagens na utilização da abstração de dados re-
ferem-se à organização do código-fonte, à facilidade de mudanças e à
compilação separada.
Para aperfeiçoar a habilidade da abstração, você precisará prati-
car sempre que possível. Uma sugestão de treino é analisar possíveis
imagens ou telas de softwares já existentes. Um exercício de abstração
pode ser realizado por meio da figura a seguir.
Figura 2
Exercício de abstração
RECIBO No VALOR
Recebi(emos) de ___________________________________________________________________
a quantia de _______________________________________________________________________
correspondente a _________________________________________________________________
e para clareza firmo(amos) o presente.
____________________________,_________ de_____________________ de____________________
Assinatura _________________________________________________________________________
Nome ___________________________________________ CPF/RG __________________________
Exemplo de um recibo simples.
IE
SD
E
Br
as
il
S/
A
Fonte: Elaborada pelo autor.
Quais são as classes e os atributos que você consegue abstrair ao
observar esse modelo de recibo?
A primeira abstração que você pode identificar é a classe Recibo, a
qual é composta por diversos atributos, como número, valor, assinatu-
ra, nome, CPF/RG, entre outros campos que terão valores.
Após essa primeira análise, é necessário olhar o todo e verificar se
existem classes que podem ser abstraídas e aproveitadas de manei-
ra independente. Além da classe Recibo, podemos abstrair a classe
Pessoa, com os atributos nome e CPF/RG. Essa classe irá ter uma res-
ponsabilidade diferente da Recibo, já que enquanto esta guardará da-
dos de um comprovante, a outra guardará dados de pessoas, os quais
poderão ser utilizados em outros momentos durante a programação.
Para entender mais sobre
a abstração e o conteúdo
sobre orientação a
objetos, confira o vídeo
Abstração, Herança e
Polimorfismo a base de
um bom código, publicado
pelo canal DevMedia.
Disponível em: https://youtu.be/
qiGTRJlCnlA?t=22. Acesso em: 19
out. 2020.
Vídeo
https://youtu.be/qiGTRJlCnlA?t=22
https://youtu.be/qiGTRJlCnlA?t=22
Aplicando orientação a objetos 91
A abstração é uma prática que irá acompanhá-lo durante toda a
sua jornada como desenvolvedor de software. Para refiná-la e domi-
ná-la, pratique com frequência e aprenda com outros programadores
mais experientes.
5.3 Encapsulamento
Vídeo A orientação a objetos tem quatro pilares, a saber: encapsulamento,
herança, composição e polimorfismo. Encapsulamento é um conceito-
-chave ao se trabalhar com objetos; em síntese, ele não vai além de com-
binar dados e comportamentos em um pacote e ocultar os detalhes de
implementação do usuário do objeto (HORSTMANN; CORNELL, 2010).
O segredo para o encapsulamento funcionar é fazer com que os
métodos nunca acessem diretamente os campos de instância em uma
classe além daqueles próprios de um método. O encapsulamento é o
modo de dar ao objeto seu comportamento “caixa-preta”, que é o se-
gredo da reutilização e confiabilidade (HORSTMANN; CORNELL, 2010).
Para implementar o encapsulamento, utilizamos palavras
reservadas do Java:
• private;
• public;
• protected.
Essas palavras reservadas são chamadas de modificadores e cada
uma delas realiza um tipo de encapsulamento. O modificador public
permite que classes e métodos sejam acessados em qualquer parte do
código-fonte por outras classes. O comportamento inverso do public é
o modificador private, que impossibilita o acesso de métodos e classes
por outras; um método private só poderá ser acessado pela mesma
classe que esse foi declarado. O modificador protected funciona como
o modificador private, exceto que as classes herdeiras ou derivadas
também terão acesso ao campo ou método marcado (SANTOS, 2003).
Nos códigos desenvolvidos no projeto “CalculosEConversoes”, con-
seguimos utilizar a classe Calculos.java e seus métodos em outras
classes, pois eles tem o modificador public. Caso algum método da
classe Calculos estivesse como private, não seria possível usá-lo na
Executadora.java.
92 Laboratório de ProgramaçãoI
Assim, utilize os modificadores sempre que for necessário. Por meio
deles, você irá garantir a exposição correta de dados e métodos das
classes e realizará, desse modo, o encapsulamento.
5.4 Herança
Vídeo Um segundo pilar da orientação a objetos é a herança. Quando
pensamos nessa palavra, frequentemente a relacionamos a uma es-
pécie de presente, que foi deixado por alguém que seja muito próxi-
mo ou com quem tenhamos um relacionamento forte. Na orientação
a objetos, uma herança é um relacionamento entre duas classes,
o qual é considerado forte. Costumamos utilizar a frase “é um” para
expressar o relacionamento entre uma classe especial e uma mais ge-
ral (HORSTMANN; CORNELL, 2010).
Para realizar um relacionamento entre duas classes e gerar uma
herança, é preciso utilizar a palavra reservada extends. Ela indica que
você está criando uma nova classe que deriva de uma já existente –
esta é chamada de superclasse, classe básica ou classe pai. A nova classe
é denominada subclasse, classe derivada ou classe filha. Com relação
aos termos, superclasse e subclasse são mais comumente utilizados
(HORSTMANN; CORNELL, 2010).
As classes derivadas, ou subclasses, podem ter acesso aos métodos
das superclasses usando a palavra reservada super (SANTOS, 2003). No
entanto, as superclasses não conseguem acessar os métodos que são
exclusivos das subclasses. Em geral, se a classe A estender a classe B,
ela herdará os métodos dessa classe B (HORSTMANN; CORNELL, 2010).
Para entendermos o conceito, vamos aos seguintes passos, obser-
vando a prática de sempre salvar o projeto após cada alteração:
1. Crie uma nova classe chamada Animal.java dentro do pacote
“br.com.projeto.principal”.
2. Crie uma segunda classe chamada Cachorro.java dentro do
pacote “br.com.projeto.principal”.
3. Crie uma terceira classe chamada Gato.java dentro do pacote
“br.com.projeto.principal”. Os arquivos devem ficar conforme a
figura a seguir:
Aplicando orientação a objetos 93
Figura 3
Classes no projeto “br.com.projeto.principal”
Fonte: Elaborada pelo autor.
4. Abra a classe Cachorro.java e adicione a palavra extends Animal:
Figura 4
Inserindo extends Animal (a)
Fonte: Elaborada pelo autor.
5. Abra a classe Gato.java e adicione a palavra extends Animal:
Figura 5
Inserindo extends Animal (b)
Fonte: Elaborada pelo autor.
94 Laboratório de Programação I
6. Retorne à classe Animal.java, adicione um método chamado
andar e utilize o modificador de acesso public:
Figura 6
Adicionando método e modificador
Fonte: Elaborada pelo autor.
7. Volte à classe Cachorro.java e invoque o método definido na
superclasse:
Figura 7
Invocando método da superclasse
Fonte: Elaborada pelo autor.
8. Agora, crie um método na subclasse Cachorro.java:
Figura 8
Criando método na subclasse
Fonte: Elaborada pelo autor.
Aplicando orientação a objetos 95
9. Retorne à classe Animal.java e tente acessar o método da
subclasse:
Figura 9
Tentativa de acesso ao método da subclasse
Fonte: Elaborada pelo autor.
Você percebeu que um erro apareceu no código-fonte? Isso ocorre
pois não é possível uma classe pai acessar os métodos das classes fi-
lhas, mas o inverso pode acontecer. Por isso, costumamos deixar os
métodos comuns nas superclasses e os específicos nas subclasses.
Assim, evitamos a duplicidade de código-fonte e fortalecemos seu rea-
proveitamento. Desse modo, use a herança sempre que encontrar si-
tuações que tenham uma referência de objetos pai e filhos, bem como
uma referência forte de relacionamento entre as classes.
5.5 Classes abstratas e métodos abstratos
Vídeo Em alguns momentos da abstração, precisamos utilizar objetos
mais genéricos e que funcionem como base para as demais classes. À
medida que você sobe na hierarquia de herança, as classes se tornam
mais genéricas, ou seja, mais abstratas. Às vezes, a classe ancestral se
torna tão geral que podemos pensá-la mais como uma base para ou-
tras classes do que como uma classe com instâncias específicas para
ser utilizada (HORSTMANN; CORNELL, 2010).
Para tornar as classes abstratas, você deve utilizar a palavra reser-
vada abstract. É possível usar uma validação simples para saber se deve
ou não tornar a classe abstrata. Essa validação consiste em perguntar
para a superclasse se ela deve ou não ter alguma instância, isto é, per-
mitir que ela seja iniciada em algum ponto do código-fonte a partir da
palavra reservada new.
96 Laboratório de Programação I
No nosso exemplo, podemos perceber que não faz sentido ter um
comando new Animal(), já que o ideal é sabermos qual é o animal que
está sendo iniciado (cachorro ou gato). Nessa pequena validação, iden-
tificamos que a classe Animal.java deve ser abstrata. O código-fonte
deve ficar conforme o descrito a seguir:
<code>
package br.com.projeto.principal;
public abstract class Animal {
public void andar() {
}
}
</code>
Além da possibilidade de tornar uma classe abstrata, podemos
tornar os métodos abstratos. Os métodos abstratos funcionam como
marcadores de lugar para métodos que são implementados nas sub-
classes (HORSTMANN; CORNELL, 2010). Quando fazemos isso, estamos
definindo a estrutura do método na superclasse e passando a respon-
sabilidade de implementação e personalização do método para as sub-
classes. Vamos ao exemplo:
1. Abra a classe Animal.java e adicione a palavra abstract no
método andar:
Figura 10
Adicionando abstract
Fonte: Elaborada pelo autor.
2. Pressione o botão “Salvar”; você perceberá que as subclasses
Cachorro.java e Gato.java apresentarão um problema. Para
resolvê-lo, você precisará implementar o método andar nessas
classes.
Aplicando orientação a objetos 97
3. Abra a classe Cachorro.java, pare o mouse no nome da classe e
selecione a opção “Add unimplemented methods”:
Figura 11
Opção “Add unimplemented methods”
Fonte: Elaborada pelo autor.
4. Com essa opção selecionada, seu código-fonte ficará da seguinte
maneira:
Figura 12
Código-fonte resultante
Fonte: Elaborada pelo autor.
5. Realize essas mesmas operações para a classe Gato.java.
Ao utilizar os métodos abstratos você poderá manter a estrutura de
uma classe genérica (abstrata) e obrigar que os métodos sejam imple-
mentados pelas classes filhas.
Se a classe não tiver nenhum método não abstrato, é possível criá-
-la como uma interface que segue um modelo de declaração diferen-
te do usado para classes, mas que tem funcionalidade similar à de
Para saber mais sobre
herança e classes abstra-
tas, assista ao vídeo Curso
de Java 41: Orientação a
Objetos: Herança: classes
abstratas, publicado pelo
canal Loiane Groner.
Disponível em: https://www.
youtube.com/watch?v=Oibb-
17nD14. Acesso em: 19 out. 2020.
Vídeo
https://www.youtube.com/watch?v=Oibb-17nD14
https://www.youtube.com/watch?v=Oibb-17nD14
https://www.youtube.com/watch?v=Oibb-17nD14
98 Laboratório de Programação I
classes abstratas. A diferença entre classes abstratas e interfaces é
que utilizando uma classe abstrata você criará um único vínculo entre
esse tipo de classe e a classe não abstrata. Já com interfaces é possível
ter vários vínculos entre classe e interfaces e, com isso, ter o polimor-
fismo (muitas formas). Isso ocorre porque uma classe abstrata é uma
implementação de herança e, por definição, uma herança restringe
a classe normal a ser uma única coisa – lembre-se da frase “é um”
(SANTOS, 2003).
Em suma, as interfaces são utilizadas na linguagem Java para definir
um conjunto exigido de funcionalidades para as classes que implemen-
tam a interface. Ao contrário de estender as classes básicas, uma classe
é livre para implementar quantas interfaces forem necessárias. Assim,
uma interface pode ser vista como uma classe abstrata e todos os mé-
todos abstratos (LIGUORI; FINEGAN, 2010).
Para criar uma interface em Java, siga os passos a seguir:
1. Clique com o botão direito no pacote “br.com.projeto.principal” e
selecione a opção “New” → “Interface”:
Figura 13
Criando uma interface no Java
Fonte: Elaboradapelo autor.
2. Insira o nome Mamifero para a interface.
3. Abra a interface Mamifero e insira a declaração void amamentar();.
Aplicando orientação a objetos 99
Figura 14
Inserindo void amamentar()
Fonte: Elaborada pelo autor.
4. Retorne à classe Gato.java e insira o vínculo com a interface
Mamifero.java por meio da palavra implements:
Figura 15
Vinculando a interface (a)
Fonte: Elaborada pelo autor.
5. Perceba que a classe Gato.java está com um problema, pois
o método amamentar não foi implementado. Para resolver
isso, pare o mouse no nome da classe e selecione a opção “Add
unimplemented methods”.
6. O resultado final deve estar conforme o apresentado a seguir:
Figura 16
Código-fonte final
Fonte: Elaborada pelo autor.
100 Laboratório de Programação I
7. Para demonstrar o poder da interface, vamos criar uma
segunda interface Petshop e implementar os métodos
retornarTempoDeBanho e animalGostaDeAgua. Confira a
figura a seguir para entender como ficará essa interface:
Figura 17
Interface Petshop
Fonte: Elaborada pelo autor.
8. Agora, abra a classe Gato.java, adicione o vínculo com essa nova
interface e implemente os métodos:
Figura 18
Vinculando a interface (b)
Fonte: Elaborada pelo autor.
Desse modo, durante o processo de desenvolvimento de software
utilizando a orientação a objetos, você irá se deparar com situações
que exigirão uma abstração mais aprofundada. Para resolver esses
problemas, você precisará usar herança, classes abstratas e interfaces.
Aplicando orientação a objetos 101
Ao utilizá-las, serão potencializados a reutilização do código-fonte e o
trabalho com polimorfismo.
O último pilar da orientação a objetos é o polimorfismo – con-
ceito que já foi visto quando falamos de herança, classes abstratas
e interfaces. O polimorfismo pode existir quando uma classe her-
da outra ou implementa uma interface (LIGUORI; FINEGAN, 2010).
O polimorfismo fala sobre um objeto mapeado ter várias formas e,
com isso, poder resolver problemas complexos por meio de suas
personalizações implementadas.
Dessa maneira, aplicar corretamente os conceitos de polimorfismo
faz com que o seu projeto de software esteja mais próximo da orienta-
ção a objetos. Sem utilizar esses recursos, você provavelmente progra-
mará com base em um outro paradigma, em especial o estruturado.
CONSIDERAÇÕES FINAIS
Chegamos ao final dos nossos estudos! Agora, você já sabe como uti-
lizar os recursos básicos da linguagem de programação Java. Além disso,
conheceu de maneira prática o paradigma de orientação a objetos. Isso
permitirá que você crie soluções para computadores de modo profissio-
nal, reaproveitando o código-fonte e tendo qualidade em seu trabalho por
meio dos testes unitários.
ATIVIDADES
1. Crie uma superclasse chamada Pai.java e uma subclasse chamada
Filha.java. Faça com que a classe filha acesse o método exibirDados
presente na superclasse.
2. Crie uma classe abstrata chamada Carro.java e uma subclasse
chamada CarroPasseio.java. Por fim, crie um método abstrato buzinar
na superclasse.
3. Crie uma interface chamada Rugir com uma declaração de método
chamada rugido. Faça a implementação dessa interface pelas classes
Leao.java e Monstro.java.
102 Laboratório de Programação I
GABARITO
1 Introdução à programação de computadores
1. O sistema operacional faz um duro trabalho de mediação entre a
comunicação do mundo real e dos aplicativos com o hardware. Como
exemplo de sistemas operacionais para computadores pessoais temos
Microsoft Windows, Linux e macOS.
2. As linguagens de programação essencialmente para web são JavaScript,
PHP, Ruby e Python.
3. A arquitetura de Von Neumann foi utilizada pela primeira vez nos
computadores que compõem a primeira geração. Entre esses
computadores, temos o ENIAC como o principal representante. Esse
modelo arquitetural é utilizado até os dias atuais.
2 Java: introdução e conceitos básicos
1. O Green Project foi um projeto da Sun Microsystems, que criou uma
linguagem específica (chamada Oak) e um hardware (chamado Star7)
semelhante a um controle remoto com interface touchscreen. Esse
projeto fracassou, mas a linguagem Oak foi adaptada para a internet
e originou o Java.
2. Sim, é correto afirmar que todo Java development kit (JDK) possui um
Java runtime environment (JRE) e, consequentemente, todo JRE possui
uma Java virtual machine (JVM). O JDK precisa da JVM, que está na JRE,
para realizar o processo de interpretação do bytecode.
3. Não, o Eclipse não é a única opção gratuita de IDE para Java. Temos
também o Apache Netbeans e o IntelliJ IDEA Community, por exemplo.
3 Notação condicional e estruturas
de repetições no Java
1. Código-fonte esperado como resposta:
public void validaSeEhPar(Integer valor) {
if (valor % 2 == 0) {
System.out.println(“é par”);
}
}
Gabarito 103
2. Código-fonte esperado como resposta:
public void validaSeEstaEntre2e25(Integer valor) {
if (valor >= 2 && valor <= 25) {
System.out.println(“O número digitado está
entre 2 e 25”);
}
}
3. Código-fonte esperado como resposta:
public void repeticaoDe1a6() {
for (Integer i = 1; i <= 6; i++) {
System.out.println(“Sequência numérica “ +
i);
}
}
4 Recursos da linguagem Java e a qualidade do código
1. Código-fonte esperado como resposta:
public class ExercicioDeTexto {
public String maisculo(String texto) {
return texto.toUpperCase();
}
}
public class ExercicioDeTextoTest {
@Test
public void maiusculoTest() {
ExercicioDeTexto exercicio = new
ExercicioDeTexto();
Assert.assertEquals(“EXEMPLO”, exercicio.
maisculo(“Exemplo”));
}
}
2. Código-fonte esperado como resposta:
@Test
public void dividirDoisNumerosTest() {
assertTrue(7 == calculos.dividirDoisNumeros(28.0, 4.0));
}
104 Laboratório de Programação I
3. Código-fonte esperado como resposta:
LocalDateTime dataHoraAtual = LocalDateTime.now();
DateTimeFormatter formatacao = DateTimeFormatter.
ofPattern(“dd-MM”);
System.out.println(dataHoraAtual.format(formatacao));
5 Aplicando orientação a objetos
1. Para responder a esta questão, execute os passos a seguir:
Passo 1: crie a classe Pai.java com o método exibirDados(), sendo
este público e sem passar parâmetros. Não há necessidade de
código-fonte dentro do método exibirDados(). Veja o código a
seguir como exemplo:
public class Pai {
public void exibirDados() {
}
}
Passo 2: na sequência, crie a classe Filha.java – ela deve ser uma
herança da classe Pai.java. Para isso, use a palavra reservada extends.
Passo 3: crie um novo método chamado acessarDadosDoPai e
invoque o método exibirDados da classe Pai.java, usando a palavra
reservada super. Segue um exemplo de código-fonte:
public class Filha extends Pai {
public void acessarDadosDoPai() {
super.exibirDados();
}
}
2. Para responder a esta questão, execute os passos a seguir:
Passo 1: crie uma classe chamada Carro.java. Ela deve ter a palavra
reservada abstract em sua declaração. Dentro dessa classe, crie um
método abstrato chamado buzinar(); para isso, use novamente a
palavra reservada abstract, mas agora na declaração do método. A
seguir, temos um exemplo de código para resolução do problema:
public abstract class Carro {
public abstract void buzinar();
}
(Continua)
Gabarito 105
Passo 2: crie uma segunda classe chamada CarroPasseio.java – ela
deve ser uma herança da classe Carro. Ao salvar essa classe, será
necessário implementar o método abstrato da classe Carro.java.
A seguir, temos o exemplo de código-fonte da resolução deste
exercício:
public class CarroPasseio extends Carro {
@Override
public void buzinar() {
}
}
3. Para responder a esta questão, execute os passos a seguir:
Passo 1: crie uma interface chamada Rugir.java. Nela, você deve
criar uma declaração de método chamado rugido() e ele não deve
retornar nada. Para isso, use a palavra void. Veja um exemplo de
como o código-fonte deve ficar:
public interface Rugir {
void rugido();
}
Passo 2: na sequência,crie uma classe chamada Leao.java e
Monstro.java. Ambas devem usar a palavra implements para criar um
vínculo com a interface Rugir.java. Veja a seguir como o código-fonte
deverá ficar:
public class Leao implements Rugir{
@Override
public void rugido() {
}
}
A classe Monstro.java ficará do seguinte modo:
public class Monstro implements Rugir{
@Override
public void rugido() {
}
}
106 Laboratório de Programação I
REFERÊNCIAS
DEITEL, P.; DEITEL, H. Java: como programar. 10. ed. São Paulo: Pearson, 2016.
HORSTMANN, C. S.; CORNELL, G. Core Java, volume I: fundamentos. 8. ed. São Paulo:
Pearson Prentice Hall, 2010.
LIGUORI, R.; FINEGAN, E. SCJA Sun® Certified Java™ Associate Study Guide. Nova Iorque:
McGraw-Hill, 2010.
SANTOS, R. Introdução à programação orientada a objetos usando Java. 7. reimp. Rio de
Janeiro: Elsevier, 2003.
SAUGO, V. J. Linguagens e paradigmas de programação. Curitiba: IESDE, 2020.
SEBESTA, R. W. Conceitos de linguagens de programação. 11. ed. Porto Alegre: Bookman,
2018.
TANENBAUM, A. S.; BOS, H. Sistemas operacionais modernos. 3. ed. São Paulo: Prentice Hall,
2010.
TIOBE Index for July 2020: July Headline: All time high for the R programming language.
TIOBE Index. 2020. Disponível em: https://www.tiobe.com/tiobe-index. Acesso em: 19 out.
2020.
Lab
o
rató
rio
d
e
Pro
g
ram
ação
I
W
ag
n
e
r M
e
n
d
e
s V
o
ltz
Código Logístico
59595
Fundação Biblioteca Nacional
ISBN 978-85-387-6690-2
9 7 8 8 5 3 8 7 6 6 9 0 2
Página em branco
Página em branco