Академический Документы
Профессиональный Документы
Культура Документы
Daniel Oliveira
Conceitos de Algoritmos
Pg.: 1/137
Prof. Daniel Oliveira
Ilustraes
Pg.: 3/137
Prof. Daniel Oliveira
Pg.: 4/137
Prof. Daniel Oliveira
Quadros
Pg.: 5/137
Prof. Daniel Oliveira
Exemplos
Pg.: 7/137
Prof. Daniel Oliveira
Sumrio
Ilustraes ........................................................................................................................................................... 2
Quadros ............................................................................................................................................................... 5
Exemplos ............................................................................................................................................................. 6
Introduo ............................................................................................................................................................. 11
Algoritmos Computacionais .............................................................................................................................. 12
Fluxogramas ...................................................................................................................................................... 15
Exerccios....................................................................................................................................................... 23
Trabalhando com expresses ........................................................................................................................... 25
Modularizao de expresses e precedncia de operadores ....................................................................... 28
Estrutura de dados ............................................................................................................................................ 28
Constantes ........................................................................................................................................................ 29
Variveis ............................................................................................................................................................ 29
Tipos de dados .............................................................................................................................................. 30
Atribuio .......................................................................................................................................................... 30
Exerccios........................................................................................................................................................... 31
Java........................................................................................................................................................................ 32
Ambiente de desenvolvimento ......................................................................................................................... 34
Obtendo o Eclipse e instalando .................................................................................................................... 35
Perspectiva .................................................................................................................................................... 36
Workspace .................................................................................................................................................... 37
Criando um projeto ....................................................................................................................................... 38
Variveis ............................................................................................................................................................ 44
Tipos numricos ............................................................................................................................................ 48
System.Math ............................................................................................................................................. 49
Compatibilidade entre tipos ......................................................................................................................... 52
Interagindo com usurios ................................................................................................................................. 56
Exerccios........................................................................................................................................................... 60
Estrutura condicional ........................................................................................................................................ 61
A instruo IF................................................................................................................................................. 61
Comparao de strings.................................................................................................................................. 62
A instruo Else ............................................................................................................................................. 63
Aninhando a instruo if/else ....................................................................................................................... 64
Usando operadores AND e OR ...................................................................................................................... 64
Declarao switch/case................................................................................................................................. 67
Pg.: 8/137
Prof. Daniel Oliveira
Exerccios....................................................................................................................................................... 70
Estruturas de repetio..................................................................................................................................... 73
Loop While .................................................................................................................................................... 74
Loop Do...While............................................................................................................................................. 75
Loop For ........................................................................................................................................................ 77
Exerccios....................................................................................................................................................... 80
Arrays ................................................................................................................................................................ 83
Exerccios....................................................................................................................................................... 86
Arrays multidimensionais.............................................................................................................................. 88
Exerccios....................................................................................................................................................... 91
Modularizao................................................................................................................................................... 94
Definindo uma funo ou mtodo ................................................................................................................ 95
Exemplo de uma funo sem parmetros ................................................................................................ 96
Funes e parmetros................................................................................................................................... 96
Funes retornando valores ......................................................................................................................... 98
Exerccios (Nvel 1) ........................................................................................................................................ 99
Exerccios (Nvel 2) ........................................................................................................................................ 99
Exerccios (Nvel 3) ...................................................................................................................................... 100
Orientao a Objetos ...................................................................................................................................... 101
Declarando uma classe ............................................................................................................................... 102
Mtodos ...................................................................................................................................................... 105
Exerccios..................................................................................................................................................... 106
Construtores ............................................................................................................................................... 107
ArrayList ...................................................................................................................................................... 109
Exerccios................................................................................................................................................. 111
Encapsulamento.......................................................................................................................................... 113
Herana e polimorfismo.............................................................................................................................. 114
Override .................................................................................................................................................. 116
Polimorfismo ........................................................................................................................................... 116
Exerccios..................................................................................................................................................... 118
Classes Abstratas e Interfaces ..................................................................................................................... 119
Interfaces .................................................................................................................................................... 120
Excees e controle de erros ...................................................................................................................... 122
Exerccios..................................................................................................................................................... 126
Trabalhando com arquivos ......................................................................................................................... 127
Pg.: 9/137
Prof. Daniel Oliveira
Pg.: 10/137
Prof. Daniel Oliveira
Introduo
Um algoritmo uma sequncia de passos logicamente organizados que realizam uma tarefa. Na realidade, em
vrios momentos no nosso dia a dia utilizamos algoritmos para realizao de tarefas rotineiras, por exemplo: a
troca de uma lmpada, a troca de um pneu, preparao de um caf e etc.
De forma geral um algoritmo um procedimento computacional que com um conjunto de dados de entrada
realiza uma tarefa, resultando em um conjunto de dados de sada. Ou seja, um conjunto de passos
computacionais que recebe uma entrada e gera uma sada.
No nosso dia a dia, utilizamos o princpio de algoritmos com muita frequncia. Como por exemplo: a receita de
um bolo, a troca de um pneu furado, o uso de um determinado dispositivo ou aparelho, e, assim por diante.
Basicamente todos os procedimentos que so constitudos por um conjunto de regras e operaes muito bem
definidas e ordenadas. Sendo realizadas em um nmero finito de etapas, constitui algoritmos.
Ingredientes:
2 cenouras grandes
1 xcara de leo
2 xcaras de acar
4 ovos
2 xcaras de farinha de trigo
1 colher de sopa de fermento em p
1 lata de leite condensado
Pg.: 11/137
Prof. Daniel Oliveira
4 colheres de chocolate em p
2 colheres de sopa de margarina
Modo de Preparo:
Algoritmos Computacionais
Um programa de computador nada mais do que um algoritmo escrito em alguma linguagem de programao
que passa por um processo de compilao ou interpretao que traduz os comandos da linguagem em
instrues que o computador executa.
Todos os computadores e dispositivos computacionais tem uma estrutura bem parecida. Em, sua maioria so
constitudos por:
A UCP ou unidade controladora a parte mais importante do computador. Ela executa todos os clculos,
execuo de tarefas e processamento de dados. Qualquer processador executa um conjunto especfico de
instrues denominado de linguagem de mquina.
Todo processador tem um conjunto de instrues que ele pode realizar. Estas instrues so denominadas de
cdigo de mquina, que so representados por uma sequncia de bits (zeros e uns). A quantidade desses bits
limitada ao tamanho do registrador principal do processador (8 bits, 16, 32 ou 64).
Pg.: 12/137
Prof. Daniel Oliveira
Estas instrues so tarefas muito simples, como por exemplo, transferir uma informao de uma posio da
memria para o processador, somar dois nmeros e etc. Normalmente, este conjunto de instrues binrias (1s
e 0s) representado em um formato hexadecimal ver Figura 3.
Normalmente trabalha-se com uma linguagem denominada de Assembly ou linguagem de montagem. Que na
realidade uma representao das instrues de mquinas, mas, em um formato que seja humanamente legvel
(Figura 4)
Outra parte importante dessa arquitetura a memria. na memria que os dados que so armazenados, o
processador acessa um posio de memria, copia o contedo dela para um de seus registradores internos,
realiza as aes e operaes necessrias e retorna (se for o caso) a informao alterada para memria.
A memria RAM (Random Access Memory Memria de acesso aleatrio), loteada locais que so
endereados atravs de um nmero inteiro. Quanto mais memria a mquina possuir, maior ser a quantidade
desses endereos e consequentemente maior ser o valor do endereo. Na Figura 4, temos na primeira coluna
da esquerda o endereo de memria. Como vimos anteriormente os processadores tem o que chamamos de
registradores. Estes registradores iro conter o endereo de memria de uma determinada informao, assim
sendo, o tipo de processador influi em quanto de memria pode ser endereado pelo mesmo.
A quantidade de memria enderevel por um processador pode ser calculada atravs da seguinte frmula:
2( )
Pg.: 13/137
Prof. Daniel Oliveira
Por exemplo um processador de 32 bits: 232 = 4.294.967.296 bytes ou 4Gbs. Mesmo que a mquina apresente
mais memria RAM, o processador simplesmente no conseguir enderear todos os endereos disponveis. J
um processador de 64bits consegue enderear at 16 Terabytes.
Alm da memria temos os dispositivos de entrada e sada de dados, que podem ser:
Monitor
Teclado
Mouse
Impressoras
Ou, qualquer dispositivo que possa receber dados e exibir dados. Para ns, seres humanos, temos a tendncia
de imaginar que os computadores se resumem a apenas aos dispositivos de entrada e sada, pois, atravs dos
mesmos que interagimos com os computadores.
Nos ltimos anos estes dispositivos tm evoludo e novas formas desse tipo de dispositivo tm surgido. Por
exemplo, at alguns anos atrs os monitores eram considerados dispositivos apenas de sada, hoje, com o uso
de telas de touch isto mudou.
Assim, sendo, um programa de computador nada mais do que a codificao de um algoritmo que contm
instrues para que um computador realize alguma tarefa. Evidentemente, no escrevemos os programas em
linguagem de mquina ou instrues de mquina. Utilizamos para isto linguagens, denominadas de alto nvel.
As instrues escritas nessas linguagens so chamadas de cdigo fonte. Este cdigo fonte
passa por um processo de traduo para linguagem de mquina, chamado de
compilao.
Aps, o cdigo fonte ter sido validado, ento, transformado no que se chama em
cdigo intermedirio. Este cdigo intermedirio quase a linguagem de mquina, mas,
ainda faltam alguns ajustes. Este cdigo ento otimizado e ento transformado para
em cdigo de mquina dando origem ao programa executvel ou biblioteca.
Um ponto que deve ser realado que o processo de compilao e criao de cdigo
sempre esta ligado a uma determinada arquitetura. Ou seja, necessrio a existncia de
compiladores especficos para cada tipo de arquitetura.
Figura 5 - Processo de
compilao
Pg.: 14/137
Prof. Daniel Oliveira
Fluxogramas
Alm das linguagens de programao (nosso principal foco), existe outra forma de representao dos algoritmos
(uma forma mais visual e mais simples de entendimento para iniciantes ou leigos), que so os fluxogramas.
Os Fluxogramas ou Diagramas de Fluxo so uma representao grfica que utilizam formas geomtricas
padronizadas ligadas por setas de fluxo, para indicar as diversas aes (instrues) e decises que devem ser
seguidas para resolver o problema em questo.
Na Figura 6, temos um exemplo de fluxograma para o clculo de uma raiz quadrada. Como se pode notar
utilizam-se figuras para indicar os passos do algoritmo a ser executado no fluxo. Os smbolos utilizados na
construo de um fluxograma podem ser visto no Quadro 1, aonde apresentado apenas os principais.
Atribuio,
Operao,
Processamento
Deciso
Pg.: 15/137
Prof. Daniel Oliveira
Imprimir / Sada
Esta forma de representao dos algoritmos de grande utilidade para exemplificar e demonstrar os passos
necessrios para a construo dos nossos algoritmos. Por exemplo, como ficaria um fluxograma para clculo
da rea de um retngulo?
Largura e
Inicio Largura * Altura Fim
Altura rea
Inicio Idade
Idade >= 18 No
SIM
Fim
Em muitas situaes queremos guardar o resultado de alguma operao para ser utilizado ou testado mais a
frente no fluxograma. Para isto utilizamos o que ns chamamos de variveis (vamos abordar este conceito mais
a frente). Dentro da representao dos fluxogramas utilizamos uma seta () para indicar o armazenamento da
informao na varivel, por exemplo:
Pg.: 16/137
Prof. Daniel Oliveira
Inicio
N1 Nota N1
N2 Nota N2 M (N1+N2)/2
M >= 5
Sim
Reprovado
Aprovado
Fim
1) Os diagramas devem feitos e quebrados em nveis. Inicia-se com uma ideia geral, e, ento aumenta-se
o detalhamento
2) Os fluxogramas devem ser desenvolvidos sempre, que possvel, de cima para baixo e da esquerda para
a direita
3) incorreto e proibido ocorrncia de cruzamento das linhas de fluxo
Pg.: 17/137
Prof. Daniel Oliveira
O fluxograma da imagem anterior est em nvel muito elevado. No possvel entender pontos como: quantas
notas iro compor a mdia, qual a frmula de clculo da mdia e como se determinar a aprovao? Ento, se
faz necessrio, aumentar o nosso detalhamento.
Inicio
Obter N1
Obter N2
Calcular mdia e
determinar
aprovao
Fim
Pg.: 18/137
Prof. Daniel Oliveira
M (N1 + N2) /2
Determinar
aprovao
Fim
M (N1 +
N2) /2
SIM M >= 5 No
Aprovado Reprovado
Fim
Um diagrama de fluxo aonde os elementos so executados de cima para baixo (top-down), sendo que cada
elemento tem apenas um nico predecessor e um nico sucessor conhecido como digrama linear - Figura 12.
J digramas construdos para boa parte dos sistemas de processamento de dados, temos o que chamamos de
lgica estruturada. Nesse tipo de lgico temos elementos que simbolizam a sequncia de aes, condies de
execuo e repetio ou lao.
Na Figura 13, vemos o exemplo de representao grfica de uma sequncia. Nela temos a ordem em que
processos devem ser executados, mostrando assim a hierarquia em que as aes devero ser realizadas.
J na Figura 14, vemos a representao de estrutura condicionais. Aonde dependendo dos testes lgicos
realizados (verdadeiro ou falso) o fluxo de execuo do fluxograma desviado.
Pg.: 20/137
Prof. Daniel Oliveira
Alm das estruturas condicionais, temos as chamadas estruturas condicionais. Nelas um conjunto de aes so
repetidas at que alguma condio impea ou pare a repetio, ver abaixo.
Em situaes aonde temos vrios testes condicionais aninhados (como por exemplo a seleo de uma opo
em um menu), podemos utilizar uma estrutura denominada de case (ver abaixo)
Pg.: 21/137
Prof. Daniel Oliveira
Evidentemente no podemos descrever todo um sistema em seus detalhes, ou at mesmo uma rotina, em
apenas um nico diagrama. A tcnica deve ser utilizada a chamada: Modularizao. Para isto precisamos
realizar as seguintes etapas:
Se, possvel, a modularizao deve ser desenvolvida em diferentes nveis. Partimos de um viso geral do
problema identificando os sistemas que iro compor a soluo, para cada sistema quais os programas que o iro
compor e para cada programa quais sero seus mdulos.
Pg.: 22/137
Prof. Daniel Oliveira
Exerccios
2) Em uma escola, a mdia final dada pela mdia aritmtica de trs notas. E a mesma tem o seguinte
esquema de avaliao:
Desenvolva um algoritmo que a partir da entrada das trs notas mostre a situao do aluno. No caso do aluno
em recuperao e prova final, mostre tambm quanto o aluno ir precisar para passar. No caso da recuperao
a nota necessria para passar dada por 10 Mdia + 2 e na prova final dado por 10 Mdia.
4) Em uma loja e CDs existem apenas quatro tipos de preos que esto associados a cores. Assim os CDs
que ficam na loja no so marcados por preos e sim por cores. Desenvolva o algoritmo que a partir a
entrada da cor o software mostre o preo. A loja est atualmente com a seguinte tabela de preos
Cor Preo
Verde 10,00
Azul 15,00
Amarelo 30,00
Vermelho 40,00
5) Desenvolva um algoritmo capaz e encontrar o menor dentre 3 nmeros inteiros quaisquer dados pelo
teclado.
6) Desenvolva um algoritmo capaz de verificar se uns nmeros inteiros, dados como entrada, par ou
mpar.
7) Elabore um algoritmo que leia as variveis C e N respectivamente cdigo e nmero de horas trabalhadas
de um operrio. E calcule o salrio sabendo-se que ele ganha R$ 10,00 por hora. Quando o nmero de
horas excederem a 50 calcule o excesso e pagamento armazenando-o na varivel E, caso contrrio zerar
Pg.: 23/137
Prof. Daniel Oliveira
tal varivel. A hora excedente de trabalho vale R$ 20,00. No final do processamento imprimir o salrio
total e o salrio excedente.
8) A secretria de Meio Ambiente que controla o ndice de poluio mantm 3 grupos que so altamente
poluentes do meio ambiente. O ndice de poluio aceitvel varia de 0,05 at 0,25. Se o ndice sobe para
0,3 as indstrias do 1 grupo so intimadas a suspenderem suas atividades, se o ndice crescer para 0,4
as indstrias do 1 e 2 grupo so intimadas a suspenderem suas atividades, se o ndice atingir 0,5 todos
os grupos devem ser notificados a paralisarem suas atividades. Faa um algoritmo que leia o ndice de
poluio medido e emita a notificao adequada aos diferentes grupos de empresas.
Pg.: 24/137
Prof. Daniel Oliveira
Para a construo de Algoritmos todas as expresses aritmticas devem ser linearizadas, ou seja, colocadas em
linhas. importante tambm ressalvar o uso dos operadores correspondentes da aritmtica tradicional para a
computacional.
Exemplo:
2
3 5 3 1
(2/3+(5-3))+1=
Tradicional Computacional
Cada linguagem de programao tem um conjunto de operadores para a construo de expresses aritmticas
ou relacionais. As expresses relacionais so aquelas que o resultado um valor lgico (verdadeiro ou falso
true ou false).
Por exemplo, a expresso 1+1 uma expresso aritmtica que resultar em um valor. J a expresso 1 > 2 (o
valor 1 maior do que 2?) uma expresso relacional, aonde so realizadas comparaes.
Nos quadros acima temos as representao dos operadores aritmticos e relacionais utilizados nas principais
linguagens de programao. Vale a ressalva que no sero os mesmos para todas as linguagens, existem
variaes.
Alm desses operadores ainda existem os operadores lgicos, que atuam apenas sobre os valores lgicos. Eles
so relacionados no Quadro 4.
Pg.: 25/137
Prof. Daniel Oliveira
Disjuno OU (or) BASTA QUE UMA PARTE SEJA VERDADEIRA PARA RETORNAR VERDADEIRO.
Disjuno Exclusiva XOU RETORNAR FALSO SE AMBOS OS LADOS FOREM IGUAIS E VERDADEIRO CASO
(XOR) CONTRRIO
NO (not) INVERTE O ESTADO, DE VERDADEIRO PASSA PARA FALSO E VICE-VERSA.
Os operadores lgicos atuam sobre os valores lgicos da seguinte forma (Quadro 5):
A B A E B A OU B NO (A) A XOR V
V V V V F F
V F F V F V
F V F V V V
F F F F V F
Pg.: 26/137
Prof. Daniel Oliveira
Pg.: 27/137
Prof. Daniel Oliveira
Alm do fato do uso dos parnteses deve ser levada em conta a precedncia dos operadores na resoluo das
expresses aritmticas. A lista abaixo relaciona os operadores de maior precedncia para os de menor
precedncia:
Parnteses e Funes
Operadores Aritmticos na seguinte ordem:
Potenciao: ^;
Multiplicao e Diviso: *, /;
Soma e Subtrao: +, -;
Operadores Relacionais: = ,<> ,> ,< ,>= ,<=;
Operadores Lgicos na seguinte ordem: NAO, E, OU.
Estrutura de dados
As estruturas de dados e algoritmos so muito ligados. No se pode estudar estruturas de dados sem
considerar os algoritmos associados a elas, assim como a escolha dos algoritmos em geral depende da
representao e da estrutura dos dados (ZIVIANI,1999).
Pg.: 28/137
Prof. Daniel Oliveira
De uma maneira bem informal podemos definir um programa de computador ou um software como sendo a
unio entre um algoritmo e uma estrutura de dados. Na soluo de problemas atravs de algoritmos devemos
tambm determinar qual a estrutura de dados ser utilizada.
Constantes
As constantes so valores (ou informaes, dados) que no variam com o tempo. So valores fixos (no
variveis). Como exemplo, so os nmeros, letras, palavra e etc.
Variveis
O conceito de varivel muito importante para a elaborao de algoritmos e os programas. Uma varivel um
espao de memria do computador que reservado para armazenar as informaes ou dados utilizado pelo
programa de computador.
Como o prprio nome mostra, as variveis tem seu valor no constante, ou seja, varivel no tempo. Toda varivel
tem um nome ou identificador, para facilitar (para ns humanos) a referncia mesma. Internamente os
computadores acessam a memria atravs de endereos numricos, as linguagens de programao simplificam
esse processo associando aos endereos de memria nomes ou identificadores fornecidos pelos
programadores.
Podemos caracterizar uma varivel como sendo uma caixa com contedo. No lado de fora dessa caixa temos
uma etiqueta com um identificador e o contedo da caixa o valor dessa varivel (que poder ser alterado
diversas vezes).
Pg.: 29/137
Prof. Daniel Oliveira
Cada linguagem de programao tem suas prprias regras para a criao de identificadores.
Tipos de dados
Em linguagens de programao os dados tm certas caractersticas e uma das mais importantes o seu tipo.
Nmeros, textos, datas e outros tem uma forma peculiar de ser armazenado e representado pelos
computadores. O tipo do dado define a forma a armazenamento e representao da informao.
Os tipos de dados podem ser simples, ou seja, o valor indivisvel. Por exemplo, um nmero inteiro um tipo
simples, um valor de tipo lgico (verdadeiro ou falso), uma letra (caractere), so tipos simples.
Os tipos estruturados em geral definem uma coleo de valores simples, ou um agregado de valores de tipos
diferentes (ZIVIANI,1999). Estes tipos so os vetores, matrizes e outros.
Os tipos de dados determina o conjunto de valores possveis que uma varivel ou expresso pode assumir. E,
tambm, quais operaes podero ser realizadas.
Atribuio
Atribuio a ao de armazenar ou passar valor para um varivel. Quando realizamos uma ao de atribuio
estamos colocando a informao no endereo de memria referenciado. Como foi visto no contedo de
fluxogramas utilizamos uma seta () para indicar esta ao. Mas, como iremos ver mais a frente existem outros
smbolos para indicar a atribuio.
Uma observao importante a ser feita em relao a atribuies que na parte esquerda (a que vai "receber"
algo) no pode haver nada alm da varivel, ou seja, s varivel que "recebe" algum contedo, no possvel
ter um clculo por exemplo, ou uma constante, recebendo alguma coisa. Por exemplo:
Ex.: nota1 + nota2 valor Esta instruo est incorreta e no poder ser realizada
Pg.: 30/137
Prof. Daniel Oliveira
Exerccios
b(3 x )
a. ae 2
c
2 x 2 (3 x) ( x 1) x 1
b.
2 x2
22 k
45
c. 2h 4h(3 h)
3x
2b 4a 2 2 f 3
d.
3 2a
1
6 x (2 y ) 3
e.
39
2
2x u 3
f.
a bc
2- Escreva as expresses em formato tradicional
a. a+b+(34+exp(e,9))/u-89^(1/2)=
b. 23+5/((7*a)/47)^(2/x)=
c. (12*x)/(36-9^x)^2=
3- Resolva as expresses lgicas
a. no (2^3 < 16 ou 15\2 < 10)
b. (6<8) ou (3>7) =
c. No (2<3) =
d. (5>=6) ou (6<7) ou no (a+5-6=8) {sabendo-se que A=5}
e. (34>9 e 5+u = 34) ou (5=15/3 e 8>12) {sabendo-se que u=29}
f. 10%4 < 16%3
g. 2+8%7 >= 6- (8^(2/3))^(1/2)
h. 15\7 >= 27 % 5
Pg.: 31/137
Prof. Daniel Oliveira
Java
uma linguagem de programao desenvolvida pela Sun Microsystem, que posteriormente foi comprada pela
Oracle. A sintaxe do Java baseada no C/C++, mas, de forma diferente uma linguagem altamente portvel
entre plataformas.
A partir de 1991 que o Java passou a ser visto pelo pblico em geral quando a Netscape anunciou que seu
navegador iria suportar o Java para a execuo de cdigos (applets). Colocando assim, a internet em outro
patamar com informaes dinmicas e pginas com recursos que ainda no se havia visto at ento.
Java hoje em dia est presente em vrios dispositivos e solues. Desde solues empresariais at tablets e
celulares. Abaixo segue uma lista das principais tecnologias Java (Oracle,2011):
Java SE Java Standard Edition, verso para a disponibilizao de solues para desktops e servidores.
Java EE - Java Enterprise Edition, conjunto de solues para desenvolvimento corporativo.
Java ME Java for Micro Edition, ambiente para construo de solues para dispositivos mveis e embarcados
em equipamentos como: celulares, tablets, PDAs, consoles de gerenciamento de TVs (receptores de TV digital) e
impressoras.
JavaFX nova tecnologia para desenvolvimento de aplicaes RIA
Java Card Tecnologia java utilizao de aplicaes que iro ser executadas em smartcards e outros equipamentos
com capacidade de memoria e processamento reduzidos.
Java TV Plataforma Java ME, otimizada para ser executada em TVs e consoles de gerenciamento de TVs.
Mas, o grande objetivo do desenvolvimento do Java foi portabilidade. Ou seja, o mesmo cdigo sendo
executado em diferentes sistemas operacionais, sem a necessidade de rescrita ou recompilao. Mas como isto
possvel?
Mquina imaginria
Emulada por software em mquina real
Cdigo armazenado em arquivos *.class
Interpreta e executa programas Java
O processo de criao de cdigos executveis em java passa por duas etapas: uma primeira etapa aonde o
cdigo escrito Java traduzido (compilado) para uma linguagem intermediria (bytecode). A mquina virtual
Java responsvel pela execuo dessa linguagem intermediria, para cada sistema operacional existe uma
mquina virtual prpria que realizar a segunda etapa do processo de execuo do cdigo, que a traduo do
bytecode para a linguagem de mquina do ambiente hospedeiro. Ver Figura 19.
Pg.: 32/137
Prof. Daniel Oliveira
Compilador
JDK
JVM
Execuo do
Interpreta o
cdigo
Byte Code
Na Figura 20, temos uma viso conceitual do nvel de abstrao do cdigo em Java em relao ao hardware
aonde esse mesmo cdigo ser executado. Quando por exemplo, queremos exibir uma mensagem de texto no
console, simplesmente iremos chamar o comando apropriado no Java. A JVM traduz que este comando para
uma ou mais instrues para o sistema operacional hospedeiro (lembre-se vai existir uma JVM para cada sistema
operacional que ir executar as aplicaes Java), e da para frente com SO.
JVM
Sistema
Operacional
BIOS
Hardware
O uso de uma mquina virtual foi sem dvida nenhuma um grande avano para a criao de solues portveis
e multi-plataforma.
A linguagem Java 100% orientada a objetos, mas, nesse texto no iremos levar isto em considerao e iremos
nos ater apenas a uma programao estruturada (no orientada a objetos).
Pg.: 33/137
Prof. Daniel Oliveira
Ambiente de desenvolvimento:
Ambiente de produo:
Bem, existem dois tipos de distribuio do Java: JDK e o JRE. O primeiro JDK voltado para instalao de
mquinas aonde iremos desenvolver solues Java, pois, acompanha vrias ferramentas e documentao
necessria para isto. J o JRE indicado para ser instalado em ambientes aonde iremos apenas executar as
solues construdas. Evidentemente, esta uma explicao bem simplificada, os puristas que me perdoem,
mas, inicialmente o suficiente.
Ambiente de desenvolvimento
Vamos utilizar uma IDE de livre distribuio que o Eclipse (http://www.eclipse.org/). O eclipse uma framework
para integrar diferentes tipos de aplicaes. Uma das linguagens que se pode desenvolver o Java atravs do
JDT (Java Development Tooling).
O Eclipse trabalhar com plug-ins, facilitando a integrao de novas linguagens e funcionalidades ao IDE.
Pg.: 34/137
Prof. Daniel Oliveira
Na Figura 22, vemos a opo para baixar a verso desejada do Eclipse. Note uma vez instalado podemos incluir
novos recursos e at mesmo linguagens suportadas a IDE atravs do recurso de instalao de extenses na
mesma.
Realizado o download, voc dever descompactar o arquivo no local aonde quiser e dever localizar o arquivo
eclipse.exe (para ambiente Windows) e execut-lo. Voc dever ver a tela da Figura 23 para configurao do
chamado Workspace.
Como o prprio nome j diz, nessa tela (Figura 23) ir indicar para o Eclipse o local de trabalho. Que dever ser
uma pasta, aonde a IDE ir manter nossos cdigos fontes, parmetros de configurao e outras informaes de
trabalho. Podem-se ter vrios Workspaces, mas, apenas um fica ativo por vez. Uma vez criado o Workspace,
voc dever uma tela como esta na Erro! Fonte de referncia no encontrada..
Pg.: 35/137
Prof. Daniel Oliveira
Na Figura 25Erro! Fonte de referncia no encontrada. temos o ambiente o Eclipse pronto para ser utilizado
para o desenvolvimento.
Perspectiva
O Eclipse tem o conceito de perspectivas, ou seja, pode-se definir a configurao das janelas e views de acordo
com o tipo de projeto ou com as configuraes que melhor se adequem ao seu gosto.
Pg.: 36/137
Prof. Daniel Oliveira
Workspace
O workspace ou espao de trabalho o local aonde sero armazenados os arquivos fontes, arquivos compilados,
informaes de configurao e outros, que o Eclipse ir utilizar para cada usurio.
Na primeira vez que se executa o Eclipse, ser pedido que voc informe qual o local do Workspace a ser utilizado
(s permitido utilizar um workspace por vez). Na Figura 28, vemos o caminho no menu do Eclipse que
possibilita a troca de workspace, o que far com que o Eclipse se re-inicie.
Pg.: 37/137
Prof. Daniel Oliveira
Criando um projeto
Na Figura 29, temos o caminho para criao de um projeto Java no Eclipse. Em algumas configuraes do Eclipse
a opo Java Project pode no estar disponvel, ento selecione a opo Other e na janela que ir aparecer digite
com campo de texto: Java Project selecione a opo conforme a Figura 30.
Pg.: 38/137
Prof. Daniel Oliveira
Uma vez selecionado o tipo de projeto Java (se voc estiver na janela como da Figura 30, selecione o boto
Next), a janela da Erro! Fonte de referncia no encontrada. dever ser exibida para informaes dos
parmetros iniciais do projeto Java.
Pg.: 39/137
Prof. Daniel Oliveira
Na Figura 33, temos a tela final de configurao do nosso projeto Java. Na aba Source vemos como ser a
estrutura do projeto (esta mesma estrutura estar replicada fisicamente em disco no Workspace). Nas demais
abas tm opes mais avanadas que vo alm do exigido nesse texto e vamos deixar para um segundo
momento. Selecionando o boto Finish para finalizar a criao do projeto.
Depois que o projeto criado podemos ver a sua estrutura do Package Explorer(Figura 34).
Pg.: 40/137
Prof. Daniel Oliveira
Caso o Package Explorer no esteja sendo exibido v at: Window -> Show View, e selecione o Package
Explorer(Figura 35). Nessa opo de menu podemos exibir todas as principais janelas do Eclipse.
Para finalizar a criao do primeiro projeto java, devemos criar um arquivo .java (todo e qualquer programa em
Java tem que ter pelo menos uma classe). No vamos agora entrar em por menores sobre a estrutura da classe
criada, vamos abordar isto mais a frente.
No package Explorer, selecione o n src e com o boto direito do mouse selecione - Figura 36:
Pg.: 41/137
Prof. Daniel Oliveira
Aps a seleo da opo de uma nova classe ser exibida a janela da Figura 37, aonde deve-se levar em conta
(nesse primeiro momento) apenas as informaes marcadas de vermelho. Informa-se o nome da classe e
selecione a caixa de criao do mtodo Main. Selecione o boto Finish para finalizar o assistente de criao de
classes.
Aps a finalizao do assistente de criao de classes, a janela do editor ir ser exibida com o cdigo inicial da
classe. Mais a frente vamos olhar com mais detalhe este cdigo(Figura 38).
Pg.: 42/137
Prof. Daniel Oliveira
Para executar o seu projeto tecle CTRL+F11, o Eclipse ir exibir o processo de compilao e nada ser exibido na
tela de console, pois, ainda no colocamos nenhum cdigo que realize alguma tarefa interessante.
Na janela do editor altere o cdigo colocando a linha de cdigo em destaque na Figura 39. Note que o cdigo
deve ser escrito exatamente como est no exemplo. A linguagem Java case sensitive ou seja faz distino
entre maisculas e minsculas.
Selecione as teclas CTRL+F11 e veja o resultado na janela de console do Eclipse como na Figura 40.
Pg.: 43/137
Prof. Daniel Oliveira
Variveis
Anteriormente falamos sobre tipos de dados e a definio do que so variveis. Bem, vamos agora ver estas
definies dentro de um programa em Java.
No inicio do nosso cdigo de exemplo temos a declarao import, este comando responsvel por indicar ao
compilador Java aonde ele dever procurar pelos comandos utilizados no cdigo (uma definio bem inicial).
A classe Scanner (responsvel pela captura das informaes digitadas no teclado) definida dentro do pacote
util que est dentro do pacote java veja a definio e uso de pacotes no Anexo A . Se, no informamos o
import correto o compilador ir apresentar um erro, pois, no ser possvel localizar a definio da classe
Scanner.
Pg.: 44/137
Prof. Daniel Oliveira
Avanando pelo cdigo vemos a declarao de uma classe: public class CMain. No objetivo do texto abordar
orientao a objetos, mas, para no ficarmos totalmente sem uma explicao podemos resumir este trecho
como:
public esta palavra chave indica que a classe a ser definida poder ser acessada por qualquer outro
cdigo que necessite chama-la ou seja e de acesso pblico
class como esperado esta palavra chave define que vamos criar uma classe e aps esta palavra chave
temos o nome da classe propriamente dito.
Dentro da classe criada no exemplo tem mais coisas estranhas, temos a seguinte declarao:
O que vem a ser isto? Bem, na linha acima temos a definio do chamamos de mtodo (mais uma vez este
contedo est fora do escopo desse texto). Um mtodo, em poucas palavras, definem aes que as classes
podem realizar comportamento dos objetos. Todos nossos programas aqui ter que ter este mtodo, prprio
assistente de criao de classes do Eclipse cria esta estrutura (ver Figura 37). Este o mtodo principal (main do
ingls), o ponto de partida para execuo do nosso cdigo pela mquina virtual Java.
Aps a criao da classe temos o caractere {, no Java todo bloco de cdigo deve ser envolvido entre um
conjunto de { e }. Ou seja, para cada { temos que ter um correspondente }.
Outra questo importante na codificao do Java (herana do C/C++) uso do caractere ; como terminador
de instruo. Em Java o ; finaliza uma idia.
Pg.: 45/137
Prof. Daniel Oliveira
Se olharmos a Figura 45 e compararmos com a Figura 46 podemos ficar em dvida: Por que a instruo if no
tem ; no final? A instruo if (com veremos mais frente) ir delimitar um bloco de cdigo e por isso no utiliza
o terminador ; outras instrues de bloco (como os repetidores) tem o mesmo comportamento.
Uma boa prtica (isto no uma regra) a endentao do cdigo atravs do uso de espaos e tabulaes. Isto
facilita a leitura e entendimento do cdigo - Figura 47.
Depois de tudo isto dito, podemos retomar ao assunto de variveis. As variveis so usadas para armazenar
informaes durante o processamento de programas. O Java usa nove tipos diferentes de tipos de dados -
Quadro 6.
Tipo Descrio
boolean Pode assumir o valor true ou o valor false
char Caractere em notao Unicode de 16 bits. Serve para a armazenagem de dados alfanumricos
armazenamento de um nico caractere. Tambm pode ser usado como um dado inteiro com
valores na faixa entre 0 e 65535.
byte Inteiro de 8 bits. Pode assumir valores entre -128 a 127.
short Inteiro de 16 bits. Os valores possveis cobrem a faixa de -2-15=-32.768 a 215-1=32.767
int Inteiro de 32 bits. Pode assumir valores entre -2.147.483.648 a 2.147.483.647.
long Inteiro de 64 bits em notao de complemento de dois. Pode assumir valores entre -263 e 263-1.
float Representa nmeros em notao de ponto flutuante normalizada em preciso simples de 32 bits
em conformidade com a norma IEEE 754-1985. O menor valor positivo representvel por esse
tipo 1.40239846E-46 e o maior 3.40282347E+38
double Representa nmeros em notao de ponto flutuante normalizada em preciso dupla de 64 bits
em conformidade com a norma IEEE 754-1985. O menor valor positivo representvel
4.94065645841246544e-324 e o maior 1.7976931348623157e+308
String O tipo string no um tipo primitivo mais se comporta como. Este tipo utilizado para
armazenar cadeias de caracteres como nomes, frases, palavras e etc.
Quadro 6 - Tipos de dados primitivos do Java
No exemplo abaixo temos um cdigo que ir exibir os valores limites dos tipos de dados numricos em Java,
como no quadro acima:
Pg.: 46/137
Prof. Daniel Oliveira
A declarao de uma varivel em Java, sempre feita atravs da seguinte estrutura: <TIPO> <NOME
(IDENTIFICADOR>, por exemplo:
Ex. int i; => Declara uma varivel do tipo inteira cujo o nome i.
Para atribuirmos um valor a uma varivel usamos o operador = (ou igual simples), como no exemplo da
Figura 49 - Atribuio de valores.
Pg.: 47/137
Prof. Daniel Oliveira
Na primeira linha temos a declarao da varivel e na segunda linha temos a chamada inicializao da varivel
(a primeira vez que ela recebe algum valor). Em Java no podemos trabalhar com uma varivel sem antes
inicializa-la. Isto devido ao fato de que quando declaramos uma varivel, apenas separamos um espao de
memria para seu uso, mas, qualquer que seja o valor que j exista nesse local ainda permanece l (ou seja, um
lixo qualquer) - Figura 50.
int i = 10;
Tipos numricos
Com os tipos numricos em Java: tipos inteiros (byte, short, int e long) e tipos de ponto-flutuante (float e
double) podemos realizar todas as operaes:
Operao Descrio
= Operadores de atribuio
==, != Operadores de igualdade e diferena
<, <=, >, >= Operadores de desigualdade
+, -, *, /, % Adio, subtrao, multiplicao, diviso e mdulo.
+=, -=, *=, /=, %= Operadores de atribuio com adio, subtrao, multiplicao, diviso e mdulo.
++, -- Incremento e decremento
~ Operador lgico de negao
&, | Operadores lgicos E, OU
Quadro 7 - Operadores para tipos numricos
Pg.: 48/137
Prof. Daniel Oliveira
O Java, assim como outras linguagens tem operadores que simplificam a escrita. No existe nenhum ganho de
desempenho no uso deles e sim reduo de escrita.
byte j = 60;
short k = 24;
int l = 30;
long m = 12L;
long resultado = 0L;
System.Math
Alm desses operadores evidentemente existem outras operaes (mais complexas) que podem ser realizadas
com tipos numricos. No Java estas operaes so definidas dentro de uma classe especial chamada de Math.
Mximo e Mnimo;
Potncias e Razes;
Logaritmo;
Arredondamentos e Valores Absolutos;
Trigonometria;
Nmeros Randmicos.
Constantes
A classe Math possui duas constantes que so o (pi) e E (base de logaritmos naturais ou neperianos) cada
uma com o valor de 3,141592653589793 e 2.718281828459045, respectivamente.
Pg.: 49/137
Prof. Daniel Oliveira
Mximo e Mnimo
Como o ttulo j sugere, a classe Math de Java possui dois mtodos que retornam o maior e o menor valor de
seus argumentos. Esses mtodos so max() e min().
public class MenorMaior {
public static void main(String[] args) {
float precoProdutoA[] = { 11.2f, 15.12f };
float precoProdutoB[] = { 19.7f, 20 };
System.out.println("O maior preo do produto A " + Math.max(precoProdutoA[0], precoProdutoA[1]));
System.out.println("O menor preo do produto B " + Math.min(precoProdutoB[0], precoProdutoB[1]));
}
}
Logaritmo
Na classe Math encontramos funes para clculo de logaritmo natual, na base de 10 e a soma do nmero mais
1. Tais mtodos so:
log (nmero) - logaritmo natural de um nmero.
log10 (nmero) - logaritmo natural de um nmero na base 10
log1p (nmero) - logaritmo natural de um nmero somado a 1. Esse mtodo retorna um resultado
mais confivel se o nmero em questo for muito prximo a 0 ou um nmero fracionado. Ou seja, o
resultado no o mesmo entre os mtodos log1p (0.1f) e log (1+0.1f).
Pg.: 50/137
Prof. Daniel Oliveira
abs (nmero) - retorna o valor absoluto do mesmo tipo do parmetro (ex.: inteiro retorna int positivo,
decimal retorna float positivo, etc)
ceil (decimal) - este mtodo retorna o valor decimal do parmetro sem a parte fracionada. Ex.: 2.1 ser
2, 6.0 ser 6, 10.8 ser 10. Realiza o truncamento do nmero.
floor (decimal) - este mtodo retorna o primeiro inteiro aps o valor decimal. Ex.: 2.1 ser 3, 6.0 ser
6, 10.8 ser 11.
round (decimal) - retorna o arredondamento aritmtico do nmero decimal passado como parmetro.
Trigonometria
A maioria da funes da classe Math so trigonomtricas, ngulo em radianos.
sin (ngulo) - seno
cos (ngulo) cosseno
tan (ngulo) - tangente
asin (ngulo) arco seno
acos (ngulo) arco cosseno
atan (ngulo) arco tangente
sinh (ngulo) seno hiperblico.
cosh (ngulo) cosseno hiperblico.
tanh (ngulo) tangente hiperblica.
hypot (x , y) - retorna o valor da hipotenusa, ou, basicamente, a distncia entre dois pontos
fundamentada na frmula [sqrt (pow(x, 2) + pow(y,2))].
toRadians (ngulo) - retorna um valor aproximado de radianos de acordo com o ngulo medido em
graus.
toDegrees (raio) - retorna um valor aproximado de graus de acordo com o ngulo medido em raios.
Pg.: 51/137
Prof. Daniel Oliveira
Nmeros Randmicos
O mtodo random() retorna um valor double em 0.0 e 1.0 (deve-se levar em contar que no uma quantidade
infinita de nmeros, uma vez que o double tem um limite de casas decimais. Para conseguirmos um valor limite
ou um alcance (comumente chamado de range) delimitado, devemos fazer pequenas operaes matemticas.
Essas operaes so simples e podem ser resumidas da seguinte maneira.
O limite inferior, ou valor inicial (start value) ser sempre somado ao nmero randmico.
O limite superior, ou alcance (range) ser sempre o limite superior subtrado o limite inferior e
depois multiplicado ao nmero randmico.
Por exemplo, se quisermos que um nmero randmico sempre fique entre 5 e 10, procederamos da seguinte
maneira:
1. O menor nmero possvel 5, portanto ele ser nosso start value ou limite inferior.
2. O maior nmero possvel 10, ento 10 ser nosso limite superior.
3. Como temos ambos os limites (inferior e superior) devemos criar um alcance (range). Para obtermos
isso, subtrairemos o limite superior com o limite inferior (10-5=5).
muito comum pensarmos que todos os tipos numricos so iguais no sentido do que armazenar. Como foi
visto anteriormente, cada tipo numrico tem um limite de informao que pode ser armazenada, isto devido
ao fato de as variveis so posies de memria do computador e a mesma limitada.
Tendo isto em conta, se tenho um tipo de dados inteiro simples (int) o espao de memria separado para
armazenar este valor pode ser utilizado para armazenar valores do tipo short e byte, pois, requerem menos
espao de memria do que o int. Mas, no
poderamos armazenar um tipo long dentro do
espao reservado para um int ou qualquer tipo
menor do que o mesmo. Uma boa dica sempre
se perguntar se o tipo cabe dentro do outro.
informados diretamente no cdigo fonte um exemplo, s ser alterado se o cdigo fonte for alterado)
precisamos indicar ao compilador qual tipo de dado dever ser utilizado para armazenar o valor na memria
(lembre-se que os tipos de dados determinam entre outras coisas o espao de memria reservado para o valor).
Por padro toda constante inteira (nmeros inteiros) so armazenados com int e todos os nmeros com partes
fracionrias so armazenadas com double.
Para alterarmos este comportamento padro do compilador podemos utilizar sufixos pr-definidos, na
linguagem para isto:
O uso de sufixos muito til em relao a valores que so fixos ou escritos diretamente no cdigo. Mas, quando
estamos trabalhando com variveis?
A forma mais usual, colocar na frente da varivel o nome do tipo (entre parnteses) para o qual deseja-se
converter o contedo da varivel :
public class Exemplo {
public static void main(String[] args) {
double d = 3.213;
float f;
f = d; // Erro
f = (float)d; // OK
}
}
Exemplo 11 - Cast
Este tipo de converso tambm conhecido como sendo converso explcita, ou seja, aquela em que
informamos de forma explcita qual converso o compilador dever realizar. Existe tambm a chamada
converso implcita, aquela aonde o compilador realiza a converso da melhor forma possvel.
Converses implcitas ocorrem principalmente quando existe alto nvel de compatibilidade entre os tipos. Por
exemplo, ao se atribuir uma varivel inteira de 32bits a uma varivel inteira longa de 64 bits aplicando a regra
de que um tipo cabe dentro do outro fica mais fcil para entender que se for o inverso teremos que fazer uma
converso explcita.
j = i; //OK
i = j; //Erro
i = (int)j; //OK - Apenas de contedo de J for inteiro de 32 Bits
}
}
Exemplo 12 - Cast
Dica: Os tipos em Java e o comportamento da linguagem em relao pode gerar uma situao inusitada quando
trabalhamos com a diviso numrica. Se, em uma operao de diviso ambos os operandos forem inteiros o
resultado da operao tambm ser inteiro, ou seja, ocorrer um truncamento do nmero se a diviso no for
Pg.: 53/137
Prof. Daniel Oliveira
inteira. Mas, se os operandos forem de tipos diferentes o resultado ser do tipo de maior preciso ou tamanho.
Veja o exemplo:
}
}
Quando trabalhamos com tipos alfanumricos, como por exemplo: String, podemos ter a seguinte situao:
E o inverso, possvel utilizar o contedo de uma varivel string como sendo um valor numrico (isto ser muito
utilizado quando estivermos desenvolvimento programas que obtenham valores digitados pelo usurio)? Sim,
possvel, mas nem sempre possvel a converso direta para isto teremos que utilizar algumas funes:
}
}
O que ocorreria se o contedo da varivel str for incompatvel em alguma converso. Nesse caso teremos um
erro em tempo de execuo e o programa ir ser abortado - Figura 52. Este tipo de erro chamado de exceo
ou exception (no escopo desse texto abordar este assunto isto est ficando muito frustrante!), na Figura
53, temos um exemplo de como tratar de forma elegante este tipos de erros (existe muito mais contedo para
isto, mas, agora no o momento).
Pg.: 54/137
Prof. Daniel Oliveira
Forma bem geral, e simples, todos os erros que ocorram dentro de um bloco try (tentativa) capturada por um
bloco catch e o erro informado atravs de um objeto do tipo Exception.
Pg.: 55/137
Prof. Daniel Oliveira
Uma parte importante dos programas entrada e sada de dados. Como pode ser percebido nos exemplo
anteriores o principal comando para sada (na tela de console) o: println este comando est dentro da classe
out que est no pacote System, por isso o escrevemos dessa forma: System.out.println. Como a documentao
do Java (ORACLE,2012) diz: fluxo padro de sada. Ficando aberto e pronto para o uso. Normalmente utilizando
em aplicaes padres.
Como o prprio nome deixa claro, a classe out responsvel por rotinas de sada, no nosso caso (o que ir
abordar todo este texto) iremos utilizar as rotinas de sada no console. No Java podemos construir aplicativos
de janela, applets (para pginas html) e Web, mas, nosso foco so aplicativos de console.
print(<<texto>>): Imprime o texto sem gerar um nova linha. Um prximo comando print ir continuar
da posio de onde este parou.
println(<<texto>>): Imprime o texto e gera uma quebra de linha. Um prximo comando print ou println
ir continuar da nova linha.
Tanto para o mtodo print ou println podemos passar qualquer tipo de varivel que o mesmo ir realizar a
converso para o tipo String e exibir na sada.
public class Exemplo{
public static void main(String[] args) {
int inteiro = 200;
float decimal = 0.5f;
char letra = 'J';
System.out.println ("Valor:" + inteiro);
System.out.println ("Valor:" + decimal);
System.out.println ("Valor:" + letra);
}
}
Podemos ainda informar (como parte do texto a ser exibido) caracteres especiais que sero interpretados pelos
comandos print e println da seguinte forma:
Pg.: 56/137
Prof. Daniel Oliveira
possvel ainda aplicar algum tipo de formatao na sada de valores numricos, para isto deve ser utilizado o
mtodo printf imprimir formatando. Este mtodo utiliza do que chamamos de placeholders ou espaos
reservados. Veja o exemplo:
O primeiro parmetro passado para a funo uma string, dentro dessa string temos marcadores especiais que
so inicializados com caractere %, para cada marcador desse deve haver uma varivel ou valor (listado aps a
string) para ser colocado nessa posio (placeholder).
Flags:
o '-' : justificado a esquerda
o '^' : caixa alata
o '+' : valor sinalizado
o '0' : fora zeros a direita ou esquerda
Width: comprimento do nmero
Precision: preciso do nmero casas decimais
Conversion:
o 'd': inteiro
o 'o': octal
o 'x': hexadecimal
o 'f': notao decimal para ponto-flutuante
o 'g': notao cientfica
o 'a': hexadecimal com expoentes
o 'c': caractere
o 's': string
Pg.: 57/137
Prof. Daniel Oliveira
Alm da sada precisamos de uma forma de obter as informaes dos usurios. Para isto vamos trabalhar com
uma classe especial que Scanner. Na Figura 54, temos um exemplo da utilizao da classe Scanner. Como esta
classe est definida dentro do pacote util que por sua vez est definido no pacote java, necessrio sempre a
introduo da declarao import como na linha 1.
Pg.: 58/137
Prof. Daniel Oliveira
E quando necessitarmos de obter valores numricos? Classe Scanner tem rotina para isto, obtendo as
informaes digitadas e tenta converter para o tipo especifico que necessitamos, caso no seja possvel um erro
ir ocorrer (uma exceo).
import java.util.*;
System.out.print("Sua idade:");
int Idade = scan.nextInt(); //Obter um valor inteiro
System.out.print("Sua altura:");
double altura = scan.nextDouble(); //Obter um double
System.out.println(Nome);
System.out.println(Idade);
System.out.println(altura);
}
}
Exemplo 21 - Exemplo das rotinas da classe Scanner para obter dados numricos
Alm das rotinas acima, temos ainda outros para os tipos byte, long. Veja no Anexo B, informaes sobre como
utilizar JOptionPane.
Pg.: 59/137
Prof. Daniel Oliveira
Exerccios
1) Faa um programa que leia trs valores inteiros, e calcule e exiba a sua mdia ponderada. A primeira nota
tem peso 2, a segunda tem peso 3 e a terceira tem peso 5.
2) Realizarei uma viagem de vrios dias em meu automvel, e gostaria de saber a quilometragem mdia por
litro de gasolina. Para isto, anotarei a quilometragem no velocmetro ao sair de viagem, e depois ao chegar.
Tambm vou somar toda a gasolina que comprar para o carro. Voc poderia fazer um programa que me
desse, com estes dados, quantos km fiz, em mdia, por litro de gasolina?
3) Faa um programa que leia o nome de um piloto, uma distncia percorrida em km e o tempo que o piloto
levou para percorr-la (em horas). O programa deve calcular a velocidade mdia em km/h, e exibir a
seguinte frase: A velocidade mdia de XX foi YY km/h, onde XX o nome do piloto, e YY a velocidade
mdia.
4) Em uma pizzaria, cada refrigerante custa R$1,80 e uma pizza mista grande custa R$25,00 mais R$ 3,50 por
tipo de cobertura pedida (queijo, presunto, banana, etc.). Uma turma vai pizzaria e pede uma
determinada quantidade de refrigerantes e uma pizza grande com uma determinada quantidade de
coberturas. Faca um programa que calcula a conta e, sabendo que a ser informada a quantidade de
pessoas, quanto que cada um deve pagar. Lembre-se dos 10% do garom.
5) A converso de graus Fahrenheit para Celsius obtida pela frmula abaixo. Faa um algoritmo que leia um
valor em graus Centgrados e imprima seu correspondente em graus Fahrenheit.
6) Fazer um programa que leia um nmero inteiro e mostre o seu triplo, sua metade, a sua raiz
cbica, e por fim, o nmero elevado a potncia fracionria 2/3.
7) Construa um algoritmo que, tendo como dados de entrada dois pontos quaisquer no plano,
P(x1,y1) e P(x2,y2), escreva a distncia entre eles. A frmula que efetua tal clculo :
10) Faa um programa que receba um valor que o valor pago, um segundo valor que o preo do
produto e retorne o troco a ser dado.
11) Faa um programa que receba o valor do quilo de um produto e a quantidade de quilos do produto
consumida calculando o valor final a ser pago.
Pg.: 60/137
Prof. Daniel Oliveira
Estrutura condicional
Normalmente qualquer algoritmo apresenta algum tipo de condio para a sua execuo, por exemplo, vamos
examinar o fluxograma da Figura 57 - Estrutura condicional aonde temos uma rotina que ir calcular a raiz real
Clculo de Raiz Real
de um nmero. No podemos calcular a raiz real de
qualquer nmero, necessrio verificar se o
nmero informado positivo ou no.
Calcula raiz
erro Iremos utilizar estruturas condicionais sempre
quadrada real quando for necessrio realizar um ao ou no
realizar de acordo com um teste de condies que
resultaro em verdadeiro ou falso.
Fim
Exibe resultado
A instruo IF
No Java a estrutura condicional mais simples utiliza apenas um comando if (se em ingls - Exemplo 22).
int i = 5;
if (i == 5)
{
System.out.println("Valor igual a 5.");
}
}
}
Nesse exemplo temos uma estrutura clssica do comando if. O teste lgico realizado se o contedo da varivel
i igual a cinco: i == 5. O operador relacional para teste de igualdade no Java (e em vrias linguagens baseadas
no C) o chamado double equal ou igual duplo (==) e no o igual simples (=) que o operador de atribuio.
Pg.: 61/137
Prof. Daniel Oliveira
O teste lgico do if vem logo em seguida ao comando e entre parnteses, depois do teste lgico temos um bloco
de cdigo, e, como em Java todo bloco de cdigo iniciado com um abre chaves { e finalizado por um fecha
chaves }. Repararam que no ; no comando if?
Na realidade o comando if formado pelo teste lgico e caso este teste for verdadeiro uma instruo
executada. Sendo que essa instruo pode ser apenas uma nica linha de cdigo (nesse caso o conjunto de {}
opcional) ou bode ser um bloco com vrias linhas de cdigo, com inclusive outras instrues condicionais.
int i = 5;
if (i == 5)
System.out.println("Valor igual a 5.");
}
}
Exemplo 23 - Exemplo do IF com apenas uma linha
Resumindo, se o teste lgico do comando if for verdadeiro, ento a instruo seguida ao comando ser realizada.
Podendo esta instruo ser apenas uma linha ou um bloco (delimitado pelo para de {}) de cdigo.
Comparao de strings
Vimos que o operador de teste de igualdade o ==, este operador poder ser utilizado para todos os tipos de
dados vistos at agora com exceo da String. Deve-se ser usado o mtodo equals para realizar a comparao
entre strings, veja o exemplo abaixo:
if (Cor.equals("azul"))
{
System.out.print("Minha cor preferida tambm o azul.");
}
}
}
No exemplo anterior comparamos o contedo da varivel Cor com o valor azul. O mtodo equals sensvel a
caixa, ou seja, ele diferencia maiscula de minsculas. Para comparaes no sensveis a caixa deve ser usado o
mtodo equalsIgnoreCase.
Pg.: 62/137
Prof. Daniel Oliveira
import java.util.*;
if (Cor.equalsIgnoreCase("azul"))
{
System.out.print("Minha cor preferida tambm o azul.");
}
}
}
A instruo Else
Bem, e se a condio de teste da instruo if for falsa? Caso seja necessrio uma ao nessa situao existe a
declarao else (seno em ingls). Se a instruo else for usada em conjunto com a instruo if, a linha de
comando ou cdigo de bloco (aqui vale os mesmos parmetros da instruo if) ser executada se a condio for
falsa.
import java.util.*;
if (Cor.equalsIgnoreCase("azul"))
{
System.out.print("Minha cor preferida tambm o azul.");
}
else
{
System.out.print("A cor escolhida no foi o azul!");
}
}
}
A instruo else sempre dever ser utilizada em conjunto da instruo if. Mas, as instruo if, pode ser
utilizada sem a instruo else.
Pg.: 63/137
Prof. Daniel Oliveira
Aps uma instruo if ou else podemos ter uma linha de comando ou um bloco de comandos. Como as
instrues if so tambm comandos, podemos ter uma instruo seguida da outra, veja o exemplo.
import java.util.*;
if (Numero == 1)
System.out.println("Voc informou o nmero 1.");
else if (Numero == 2)
System.out.println("Voc informou o nmero 2.");
else if (Numero == 3)
System.out.println("Voc informou o nmero 3.");
else
System.out.println("Nmero invlido.");
}
}
O expresso de teste da instruo if pode ser simples (como foi visto nos exemplos anteriores) ou pode ser
resultado de uma expresso bem mais complexa. Para a construo de expresses lgicas com mais de um
termos temos que usar os chamados conectivos lgicos:
Vamos imaginar um algoritmo que receba um nmero inteiro e verifica se o mesmo maior ou igual a 10 e
menor ou igual a 100. Como ficaria a expresso para este teste?
Pg.: 64/137
Prof. Daniel Oliveira
Pg.: 65/137
Prof. Daniel Oliveira
Pg.: 66/137
Prof. Daniel Oliveira
Declarao switch/case
O uso de if/else encadeados pode ser bem confuso para se manter o cdigo fonte. Por exemplo, vamos
desenvolver um algoritmo que simule um menu de uma aplicao:
import java.util.*;
if (opcao == 1){
System.out.print("Opo 1 selecionada");
}
else
{
if (opcao == 2)
{
System.out.print("Opo 2 selecionada");
}
else
{
if (opcao == 3)
{
System.out.print("Opo 3 selecionada");
}
else
{
if (opcao == 4)
{
System.out.print("Opo 4 selecionada");
}
else
{
System.out.print("Operao invlida");
}
}
}
}
}
}
No exemplo acima fcil notar que medida que a quantidade de opes aumenta, mais intricado e difcil de
entender o cdigo fica. Para situaes como esta, indicado o uso da estrutura switch/case. Nessa estrutura
Pg.: 67/137
Prof. Daniel Oliveira
um teste de igualdade realizado em uma varivel (switch) e para da possvel valor dessa varivel (case)
realizado uma ao.
Alm das palavras chaves switch e case, ainda compe esta estrutura:
break usado dentro do bloco de cdigo do case. Este comando indica que o processamento do switch
deve ser interrompido e a execuo do cdigo dever continuar a partir da primeira linha aps o final
do switch. Se, por exemplo, omitirmos um break, o comando case imediatamente aps ser executado
(mesmo que o contedo da varivel no execute este case).
default este seria o comando else dessa estrutura e opcional. Se o valor da varivel de teste do switch
no corresponder a nenhum case, ento, se houver um default definido, o cdigo dentro do default
executado.
import java.util.*;
switch(opcao)
{
case 1:
System.out.print("Opo 1 selecionada.");
break;
case 2:
System.out.print("Opo 2 selecionada.");
break;
case 3:
System.out.print("Opo 3 selecionada.");
break;
case 4:
System.out.print("Opo 4 selecionada.");
break;
default:
System.out.print("Opo invlida!");
}
}
}
1) O switch trabalha apenas com os tipos primitivos: int, short, byte e char
2) No possvel o uso de expresses booleanas (lgicas) no switch.
No Exemplo 30, temos um algoritmo mais complexo que para determinar a quantidade de dias do ms,
levando-se em conta se o ano bissexto ou no.
Pg.: 68/137
Prof. Daniel Oliveira
import java.util.*;
System.out.print("Informe um ms:");
int mes = scan.nextInt();
System.out.print("Informe um ano:");
int ano = scan.nextInt();
int numDays = 0;
switch (mes) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
numDays = 31;
break;
case 4:
case 6:
case 9:
case 11:
numDays = 30;
break;
case 2:
if ( ((ano % 4 == 0) && !(ano % 100 == 0)) || (ano % 400 == 0))
numDays = 29;
else
numDays = 28;
break;
default:
System.out.println("Ms invlidos.");
break;
}
System.out.println("Nmero de dias = " + numDays);
}
}
Pg.: 69/137
Prof. Daniel Oliveira
Exerccios
2. Faa um programa que receba o valor do salrio de uma pessoa e o valor de um financiamento
pretendido. Caso o financiamento seja menor ou igual a 5 vezes o salrio da pessoa, o programa dever
escrever "Financiamento Concedido"; seno, escrever "Financiamento Negado". Independente de
conceder ou no o financiamento, o programa escrever depois a frase "Obrigado por nos consultar."
3. Dois carros percorreram diferentes distncias em diferentes tempos. Sabendo que a velocidade mdia
a razo entre a distncia percorrida e o tempo levado para percorr-la, faa um programa para ler as
distncias que cada carro percorreu e o tempo que cada um levou, e indique o carro que teve maior
velocidade mdia.
4. Faa um programa que leia o nome e idade de duas pessoas e imprima o nome da pessoa mais nova, e
seu ano de nascimento (o programa deve funcionar corretamente para qualquer que seja o ano atual).
5. Leia um nome e duas notas dadas a um aluno e imprima: nome, mdia e aprovado, reprovado ou
recuperao, de acordo com as regras abaixo:
Reprovado, se mdia maior igual a zero e menor que 5;
Recuperao, se mdia maior igual a 5 e menor que 7;
Aprovado, se mdia maior igual a 7 e menor igual a 10.
6. Tendo como dados de entrada a altura e o sexo de uma pessoa, construa um algoritmo que calcule seu
peso ideal, utilizando as seguintes formulas:
Para homens: (72.7 * Altura) - 58
Para mulheres: (62.1 * Altura) - 44.7
7. Leia um salrio bruto e imprima o salrio bruto, o desconto e salrio lquido, aps os descontos do
imposto de renda, que ser calculado da seguinte maneira:
Pg.: 70/137
Prof. Daniel Oliveira
8. A loja Constri em Partes produz dois tipos de hastes: cobre e alumnio. Cada haste de cobre vendida
por R$ 2,00, e cada haste de alumnio vendida por R$ 4,00. O desconto dado depender da quantidade
de hastes compradas, conforme tabela abaixo. Fazer um algoritmo para ler a quantidade comprada de
cada tipo de haste e imprima o total pago.
9. Uma empresa de energia eltrica trabalha com 3 tipos de consumidores: I Industrial; C Comercial; R
Residencial. Fazer um algoritmo para ler o tipo de consumidor (I, C ou R), a quantidade de energia
consumida, e calcular e imprimir qual ser o valor pago. Para calcular o valor pago, verificar a tabela
abaixo.
10. Faa um programa que receba 2 valores e retorne o maior entre eles.
11. Faa um programa que receba 4 valores e retorne o menor entre eles.
12. Faa um programa que receba 3 valores que representaro os lados de um tringulo e verifique se os
valores formam um tringulo e classifique esse tringulo como:
a. Equiltero (3 lados iguais);
b. Issceles (2 lados iguais);
c. Escaleno (3 lados diferentes).
13. Utilize a estrutura if para fazer um programa que retorne o nome de um produto a partir do cdigo do
mesmo. Considere os seguintes cdigos:
001: Parafuso;
002: Porca;
003: Prego;
Para qualquer outro cdigo indica: Diversos.
Pg.: 71/137
Prof. Daniel Oliveira
14. Um banco conceder um crdito especial aos seus clientes, varivel com o saldo mdio no ltimo ano.
Faa um algoritmo que leia o saldo mdio de um cliente e calcule o valor do crdito de acordo com a
tabela abaixo. Mostre uma mensagem informando o saldo mdio e o valor do crdito.
15. Um usurio deseja um algoritmo onde possa escolher que tipo de mdia deseja calcular a partir de trs
notas. Faa um algoritmo que leia as notas, a opo escolhida pelo usurio e calcule a mdia.
a. Aritmtica
b. Ponderada com pesos 3,3,4
3
c. Harmnica: = 1 1 1
( + + )
1 2 3
16. Um vendedor necessita de um algoritmo que calcule o preo total devido por um cliente. O algoritmo
deve receber o cdigo de um produto e a quantidade comprada e calcular o preo total, usando a tabela
abaixo.
1001 5,32
1324 6,45
6548 2,37
0987 5,32
7623 6,45
17. Escrever um algoritmo que l a hora de incio de um jogo e a hora do final do jogo (considerando apenas
horas inteiras) e calcula a durao do jogo em horas, sabendo-se que o tempo mximo de durao do
jogo de 24 horas e que o jogo pode iniciar em um dia e terminar no dia seguinte.
Pg.: 72/137
Prof. Daniel Oliveira
Estruturas de repetio
Em muitas situaes necessrio que nossos algoritmos repitam uma ou mais vezes um conjunto de instrues.
Por exemplo, o desenvolvimento de um algoritmo que ir ordenar uma lista de nmeros inteiros. Ser necessrio
percorrer vrios elementos dessa lista vrias vezes at finalmente a mesma esteja ordenada da forma como
queremos. Chamamos de iterao a cada vez que a estrutura de repetio executada.
As estruturas de repetio so formadas por duas partes lgicas: condio(expresso lgica) e o corpo (conjunto
de cdigo que executado a cada iterao) do loop. A condio testada a cada iterao para verificar se
necessria a execuo do cdigo contido no corpo do loop ou no.
Indeterminados
Determinados
Nos loops determinados possvel saber quantas vezes ocorrer repetio. J, os loops indeterminados a sua
execuo realizada enquanto uma determinada condio for verdadeira.
Pr-testados
Ps-testados
Os loops pr-testados (ver Figura 63) verificam a condio antes de qualquer coisa, desta forma o cdigo contido
dentro do corpo do loop poder nunca ser executado caso a condio resultar em um valor falso.
No
Pg.: 73/137
Prof. Daniel Oliveira
Os loops ps-testados (Figura 64) verificam a condio aps a execuo do cdigo contido no corpo do loop.
Assim, nesse tipo de loop o corpo do loop executado pelo menos uma vez.
Executa o corpo do
loop
Sim
Condio
verdadeira ?
No
Loop While
while(<Condio lgica>)
{
///Comandos
}
Exemplo 31 - Estrutura do Loop While
O termo while vem do ingls que traduzido enquanto. Ou seja, enquanto uma determinada condio for
verdadeira execute o corpo do loop.
public class Exemplo{
public static void main(String[] args) {
int x= 10;
while( x < 20 ){
System.out.print("x : " + x );
x++;
System.out.print("\n");
}
}
}
Exemplo 32 - Exemplo do loop while
Pg.: 74/137
Prof. Daniel Oliveira
Analisando o Exemplo 32, temos um cdigo que ir imprimir na tela os valores da varivel x de 10 at 19 (Por
que no 20? Veja a condio de teste do loop.).
Dica: Loops indeterminados tem uma caracterstica que pode ser perigosa, eles podem simplesmente nunca
parar e entrar no que chamamos de loop infinito, bastando para isto que a condio de teste de parada sempre
seja verdadeira. Se, no exemplo anterior a linha de cdigo que incrementa a varivel x por omitida o loop nunca
ir parar.
Dica: Alm do teste de parada retornar um valor falso, podemos realizar uma parada forada da execuo do
loop. Bastando para isto utilizar o comando break dentro do corpo do loop. Ao ser executado este comando
dentro do corpo do loop a execuo do loop para imediatamente e o a primeira linha imediatamente aps o
loop executada. Ver Exemplo 33.
while( x < 20 ){
System.out.print("x : " + x );
x++;
System.out.print("\n");
}
}
}
Exemplo 33 - Exemplo do uso do comando break dentro de um loop
Loop Do...While
No Exemplo 34, temos a estrutura desse loop. Este um loop indeterminado (j vimos anteriormente qual o
significado desse termo) e ps-testado.
do
{
//Comandos
}while(<Condio lgica>);
Exemplo 34 - Estrutura do Loop Do...While
Se traduzirmos do ingls as palavras Do e While temos: Faa e Enquanto. Faa alguma coisa (o cdigo dentro
do corpo do loop) enquanto alguma coisa for verdadeira (a condio lgica).
Pg.: 75/137
Prof. Daniel Oliveira
fcil notar que nesse loop que o cdigo no seu interior executado pelo menos uma vez. Este tipo de loop
muito til em situaes aonde queremos garantir que o cdigo no interior do loop seja executado pelo menos
uma vez.
No Exemplo 35, temos um cdigo que ir imprimir nmeros de 10 a 19 no console. Este exemplo faz a mesma
coisa que o Exemplo 32.
Dica: Na realidade tudo que fazemos com o loop while podemos fazer com loop do...while e vice versa.
Vamos analisar um exemplo um pouco mais complexo (ver Exemplo 36). Aqui temos um cdigo que ir conter
quantos inteiros maiores do que zero o usurio informou.
1 import java.util.*;
6 do{
System.out.print("Informe um inteiro positivo e zero para encerrar:");
valor = scan.nextInt();
if (valor > 0)
{
conta++;
}
7 }while( valor != 0 );
Pg.: 76/137
Prof. Daniel Oliveira
A execuo do loop encerrada quando o usurio informa o valor zero. (linha 6). Ainda nesse exemplo vamos
analisar o seguinte:
1. O que ocorreria se a declarao da varivel conta fosse feita dentro do corpo do loop?
2. Por que foi necessrio inicializar a varivel conta para zero?
3. O que ocorrer se for informado um nmero inteiro negativo?
import java.util.*;
while ( valor != 0)
{
System.out.print("Informe um inteiro positivo e zero para encerrar:");
valor = scan.nextInt();
if (valor > 0)
{
conta++;
}
Loop For
At agora vimos loops categorizados como indeterminados, j este o loop for tem a seguinte estrutura:
A estrutura desse loop bem diferente dos demais, aqui temos uma varivel de controle do loop que dever
ser inicializada, a cada iterao do loop ser feito um teste lgico com ela e tambm a cada iterao esta varivel
ir sofrer uma alterao do seu valor. Se, o teste lgico resultar em um valor falso o loop encerrado.
Pg.: 77/137
Prof. Daniel Oliveira
}
}
Exemplo 38 - Exemplo do loop FOR
No Exemplo 38, temos um cdigo que ir imprimir os valores de 10 a 19. Podemos tambm utilizar a estrutura
do loop for para gerar contagens inversas, partindo de um valor superior ir decrementando a varivel de controle
at atingir o limite inferior desejado veja Exemplo 39.
for(int i=10;i>=0;i--)
{
System.out.println(i);
}
Em todos os exemplos vistos at agora com Loop for, a varivel de controle declarada e inicializada dentro da
declarao do loop, assim, esta varivel s ser visvel dentro do corpo do loop. E, no poder ser acessada
fora do bloco. Mas, nada impede que seja utilizada uma varivel j declarada, reescrevendo o exemplo anterior:
for(i=10;i>=0;i--)
{
System.out.println(i);
}
Exemplo 40 - Exemplo de loop for com a varivel de controle declarada fora do loop
Pg.: 78/137
Prof. Daniel Oliveira
if(isPrime)
System.out.println("Primo");
else
System.out.println("No primo");
Pg.: 79/137
Prof. Daniel Oliveira
Exerccios
3) A converso de graus Fahrenheit para centgrados obtida pela frmula C = 5/9 (F-32). Escreva um
algoritmo que calcule e escreva uma tabela de graus centgrados em funo de graus Fahrenheit que
variem de 32 a 212 de 1 em 1. A tabela dever ser semelhante mostrada abaixo:
Graus Fahrenheit Graus Celsius
32 0
33 0.6
34 1.1
... ...
212 100
4) Escrever um algoritmo que calcule a mdia obtida por uma turma de "n" alunos na primeira prova
do semestre, onde o valor de n ser informado pelo usurio.
5) Escrever um algoritmo que, dada uma sequncia de valores inteiros e positivos, determine qual a
mdia aritmtica dos valores pares. O valor 0 (zero) indica o trmino dos dados de entrada, ou seja,
o programa termina quando for informado o valor 0(zero).
6) Codifique o algoritmo que leia dois nmeros inteiro e positivo e apresente o resultado do
primeiro nmero elevado ao segundo nmero (exemplo: 24 = 2*2*2*2 = 16). No utilizar o mtodo
pow do package Math.
7) Escrever um algoritmo que l um valor n e outro valor m, e calcula a tabuada de n de 1 at m.
Exemplo: Supor que o usurio informe os seguintes valores: n=8 e m=12. Ento tem-se:
1x8=8
2 x 8 = 16
...
. . .
12 x 8 = 96
8) Fazer um algoritmo para calcular a soma de todos os mltiplos de 7 entre 100 e 500.
9) Faa um algoritmo que imprima os nmeros inteiros decrescentes compreendidos entre 100 e 10.
10) Faa um algoritmo que imprima a tabuada do nmero 5 da seguinte maneira:
5x0=0
5x1=5
5x2=10
...
5x10=50
11) Faa um algoritmo que imprima a soma dos nmeros mpares compreendidos entre 10 e 100.
Pg.: 80/137
Prof. Daniel Oliveira
12) Codificar o programa abaixo, para que determine os valores de y, tal que y = (3+2x+6x)
/(1+9x+16x) para x variando de 1,0 at 5,0 em intervalos de 0,1 unidades
1 2 3 4 30
S
60 58 56 54 2
1 3 5 7 99
H
1 2 3 4 50
15) Faa um algoritmo que leia um nmero inteiro e positivo N e imprima o valor de S da seguinte srie:
16) Faa um algoritmo que imprima a soma dos 20 primeiros termos da serie abaixo, onde o
denominador representa o fatorial do nmero.
100 99 98 97
0! 1! 2! 3!
17) Programa para calcular e imprimir o volume e o raio da esfera com o raio variando de 1 a 10 usando
a estrutura de repetio
18) Escreva um algoritmo para ler 2 valores (se o segundo valor informado for ZERO, deve ser lido
um novo valor, ou seja, para o segundo valor no pode ser aceito o zero exibindo uma
mensagem de erro) e imprimir o resultado da diviso do primeiro pelo segundo.
19) Faa um algoritmo que leia a altura de 10 pessoas e imprima mdia destas alturas. Imprima
tambm quantas alturas maiores que 1.60 e quantas menores que 1.30.
20) Faa um algoritmo que leia os dados de cada empregado: nome, salrio por dia e nmero de dias
trabalhados de uma firma de 10 empregados. Imprima o salrio total a ser pago aos empregados e
a mdia dos salrios.
21) Faa um algoritmo que leia a altura e o sexo de 100 pessoas e imprima:
- Quantos homens e mulheres foram medidas;
- Quantos homens acima de 1,70;
- A mdia das alturas das mulheres.
22) Codifique um algoritmo para determinar o maior nmero em N nmeros diferentes dados.
23) Codifique um algoritmo para calcular e imprimir o menor dentre N valores lidos.
Pg.: 81/137
Prof. Daniel Oliveira
24) Faa um programa de que determinar quais nmeros so primos entre os inteiros 1 e N. Aonde N
ser informado pelo usurio.
25) Codificar um algoritmo que simule o jogo de adivinhao: o jogador 1 escolhe um nmero entre 1
e 10; o jogador 2 insere nmeros na tentativa de acertar o nmero escolhido pelo jogador 1.
Quando ele acertar, o algoritmo deve informar que ele acertou o nmero escolhido pelo jogador 1
em x tentativas (quantidade de tentativas do jogador 2).
26) Supondo que a populao de um pas A seja da ordem de 98.000.000 de habitantes, com uma taxa
anual de crescimento de 3,5% e que um pas B tenha uma populao de
aproximadamente 200.000.000 habitantes com uma taxa anual de crescimento de 1,5%.
Escreva um algoritmo que calcule iterativamente, quantos anos sero necessrios para que a
populao do pas A, ultrapasse ou iguale a populao do pas B, mantidas as taxas
de crescimento.
27) Um determinado material radioativo perde metade de sua massa a cada 50 segundos. Dada a
massa inicial, em gramas, fazer um programa que determine o tempo necessrio para que a massa
se torne menor que 0,5 grama. Escreva o massa inicial, a massa final e o tempo em horas, minutos
e segundos.
Pg.: 82/137
Prof. Daniel Oliveira
Arrays
Array ou arranjo uma estrutura de dados que contm em seu interior um nmero fixo de valores e de mesmo
tipo. O tamanho de uma array determinado no momento da sua criao e permanece constante aps a sua
criao. So objetos que representam um agrupamento contnuo de posies de memria, sendo que o tipo dos
elementos contidos em uma array pode ser um tipo primitivo ou no - Figura 65.
ndice do
primeiro
elemento
0 1 2 3 4 5 6 7 8 9
Cada item dentro de uma array chamado de elemento, e cada elemento de uma array acessado atravs de
um ndice. Sendo que o elemento inicial indicado pelo ndice zero ver Figura 65.
1. int[] anArray;
2. //Alocando uma array com 10 elementos
3. anArray = new int[10];
4. //Inicializando a array
5. anArray[0] = 100;
6. anArray[1] = 200;
7. anArray[2] = 300;
8. anArray[3] = 400;
9. anArray[4] = 500;
10. anArray[5] = 600;
11. anArray[6] = 700;
12. anArray[7] = 800;
13. anArray[8] = 900;
14. anArray[9] = 1000;
No Exemplo 42, temos um cdigo que declara uma array (linha 1) , na linha 3 temos a alocao da array e a
partir da linha 5 a 14 temos o cdigo aonde inserimos os elementos nas posies indicadas pelos ndices.
possvel perceber que para declarar uma array no formato: tipo[] o conjunto [] indica que estamos
declarando uma array. Cada conjunto deste refere-se a uma dimenso da array. As arrays de apenas uma
dimenso tm tambm um nome especial: vetor.
Pg.: 83/137
Prof. Daniel Oliveira
byte[] anArrayOfBytes;
short[] anArrayOfShorts;
long[] anArrayOfLongs;
float[] anArrayOfFloats;
double[] anArrayOfDoubles;
boolean[] anArrayOfBooleans
possvel tambm colocar o conjunto de colchetes na frente do nome da varivel da array, assim: int anArray[];
No Exemplo 43, temos outras formas de declarar e inicializar uma array.
int[] anArray2 = {
100, 200, 300,
400, 500, 600,
700, 800, 900, 1000
};
Intrinsicamente o uso de array est vinculado ao uso de estruturas de repetio para percorrer os elementos de
uma array - Exemplo 44.
for(int i=0;i<anArray.length;i++)
{
anArray[i] = i;
}
No exemplo anterior, temos um loop do tipo for para percorrer uma array inicializando seus elementos. Mas,
na declarao do loop for temos algo interessante: anArray.length esta propriedade especial da array retorna
a quantidade de elementos dessa array.
No Exemplo 45, temos um cdigo que declara e inicializa uma array de char e a percorre exibindo seus elementos
na tela.
Pg.: 84/137
Prof. Daniel Oliveira
Abaixo temos outro exemplo, que utilizando um algoritmo simples ordena uma array com 10 elementos
aleatrios:
double[ ] nums = new double[10];
Pg.: 85/137
Prof. Daniel Oliveira
Exerccios
2) Leia um vetor de 10 elementos e em seguida ache a posio do elemento de valor m (dado pelo usurio)
no vetor. Caso o elemento no exista no vetor informe ao usurio.
3) Faa um programa que carregue um vetor de seis elementos numricos inteiros, calcule e mostre:
a. A quantidade de nmeros pares;
b. Quais os nmeros pares;
c. A quantidade de nmeros mpares;
d. Quais os nmeros mpares.
4) Faa um programa que carregue um vetor com dez nmeros reais, calcule e mostre a quantidade de
nmeros negativos e a soma dos nmeros positivos desse vetor
5) Solicite ao usurio n nmeros inteiros (onde n tambm fornecido pelo usurio), guarde os em um
vetor e em seguida imprima-os na tela. Caso o n fornecido pelo usurio seja maior que o tamanho
mximo do vetor, pea para que ele digite um n menor.
6) Leia um vetor de 10 elementos e em seguida ache a posio do elemento m (dado pelo usurio) no
vetor. Caso o elemento no exista no vetor informe ao usurio.
7) Solicite ao usurio dois vetores de n nmeros (n tambm fornecido pelo usurio) e em seguida calcule
a soma dos vetores, elemento a elemento, em um terceiro vetor.
8) Leia um vetor com 20 elementos. A seguir, troque o primeiro elemento com o ltimo, o segundo com
o penltimo, etc, at o dcimo com o dcimo primeiro.
9) Faa um programa que obtenha N nmeros (podem ser inteiros ou no). Aps obter os N nmeros, seu
programa dever exibir o menor, o maior e a mdia dos valores informados.
10) Faa um algoritmo que leia a altura de moas inscritas em um concurso de beleza. Para finalizar ser
digitado zero na altura. Imprima as duas maiores alturas.
12) Faa um algoritmo que leia a altura de 1000 pessoas e imprima a maior, a menor, a mdia destas alturas.
Imprima tambm quantas alturas maiores que 1.60 e quantas menores que 1.30.
13) Fazer um algoritmo para ler 20 nmeros reais e calcular e imprimir o desvio-padro e a varincia,
utilizando a seguinte frmula:
x x
N
1 2
i
N 1
14) Dados dois vetores de n elementos, calcule o seu produto escalar. (O produto escalar de dois vetores v1
e v2 dado por: produto = v1[0]*v2[0]+ v1[1]*v2[1]+... +v1[n]*v2[n]).
15) Leia 2 vetores com 10 elementos cada. Considerando cada vetor como sendo um conjunto,crie um
terceiro vetor, que seja a unio dos dois primeiros, e um quarto, que seja a interseco entre os dois
primeiros.
16) Desenvolva um programa em Java que receba do usurio n nmeros inteiros positivos (aonde n ser
informado pelo usurio) e os armazene em um vetor. Para cada elemento desse vetor dever ser clculo
do fatorial e o resultado dever ser armazenado em outro vetor. Depois imprima cada um dos elementos
de cada vetor.
17) Vetor suavizado uma tcnica utilizada para clculos de configurao de cores, para 50 elementos reais,
conforme regra abaixo. Ler os valores do vetor V e calcular e imprimir o vetor suavizado S.
S[I]=(V[I-1]+V[I]+V[I+1])/3, se I <> 1 e I <> 50;
S[I]=(V[I]+V[I+1])/2, se I = 1;
S[I]=(V[I-1]+V[I])/2, se I = 50;
18) Construa um algoritmo que preencha um vetor com N elementos (aonde N ser informado pelo usurio)
utilizando a srie de Fibonacci. Aps isto imprima o contedo do vetor na tela. Exemplo de valores da
srie: {1,1,2,3,5,8,13,21,34,55,89,144,233,377,...}
Pg.: 87/137
Prof. Daniel Oliveira
Arrays multidimensionais
At agora vimos arrays de apenas uma nica dimenso, tambm denominados de vetores. Mas, podemos ter
os chamados arranjos de vrias dimenses. Imagine que cada elemento de um vetor seja outro vetor, e cada
elemento desse vetor seja tambm outro vetor, e, assim por diante. Ou seja, arranjos com mais de uma
dimenso so na realidade arranjos de arranjos ver Figura 66.
Arranjo
Multi
0 0 1 ... N
1 0 1 ... N
...
0 1 ... N
N
Quando o arranjo armazenado em cada elemento tem a mesma quantidade de elementos podemos ter uma
estrutura que associada a uma matriz. Muitas vezes, arranjos multidimensionais so associados a matrizes,
mas, eles podem ter estruturas bem diferenciadas. Na Figura 67, temos a representao uma array com 3 linhas
(vetor de trs de elementos) e 5 colunas (cada elemento do vetor de 3 elementos um arranjo com cinco
elementos).
A declarao de uma matriz utiliza tambm os colchetes, assim como os vetores. Utiliza-se um par de colchetes
([]) para cada dimenso a ser includa na matriz. Por exemplo:
Pg.: 88/137
Prof. Daniel Oliveira
Na linha de cdigo acima, temos o seguinte: uma array de inteiros (todos os elementos de todos arranjos nessa
array devero ser inteiros). Sendo que teremos um arranjo de 3 elementos (linhas) e cada arranjo alocado nesse
arranjo ser de 5 elementos (colunas).
Cada elemento no array a identificado por uma expresso de acesso ao array da forma: a [ linha ] [coluna]:
Como os arrays unidimensionais, os arrays multidimensionais podem ser inicializados na sua declarao:
Os valores do inicializados so agrupados por linha entre chaves. O compilador conta o nmero de
inicializadores de array aninhados (representado por conjuntos de chaves dentro das chaves externas) na
declarao de array para determinar o nmero de linhas no array Matriz.
Pelo fato de arrays multidimensionais sejam arranjos de arranjos, podemos ter estruturas bem mais flexveis:
int[][] b = {{1,2},{3,4,5}};
Cria um array de inleiros b com dois elementos (determinados pelo nmero de inicializadores de array
aninhados) que representam as linhas do array bidimensonal.
Cada elemento de b uma referncia a um array unidimensional de variveis int.
O array da linha O (zero) um array unidimensional com dois elementos (1 e 2)
E o array da linha 1 um array unidimensional com trs elementos (3,4 e 5)
Pg.: 89/137
Prof. Daniel Oliveira
No Figura 69, temos um cdigo mostrando uma forma de percorrer agora estes arranjos. Reparem que para
cada dimenso extra temos uma estrutura de repetio aninhada dentro de outra mas uma vez, so arranjos
de arranjos.
Pg.: 90/137
Prof. Daniel Oliveira
Exerccios
1) Elaborar um algoritmo que l uma matriz M(6,6) e um valor A e multiplica a matriz M pelo
valor A, exiba o resultado.
a. Da linha 4 de M
b. Da coluna 2 de M
c. Da diagonal principal
d. De todos os elementos da matriz M
3) Escrever um algoritmo que l uma matriz A(5,5) e a escreva. Verifique, a seguir, quais os
elementos de A que esto repetidos e quantas vezes cada um est repetido. Escrever cada
elemento repetido com uma mensagem dizendo que o elemento aparece X vezes em A.
5) Faa um algoritmo que calcule a mdia dos elementos da diagonal principal de uma matriz
10 X 10 de inteiros.
7) Faa um algoritmo que leia uma matriz 4x9 de inteiros. calcule e mostre a soma das linhas
pares da matriz.
8) Faa um algoritmo que leia uma matriz 50x50 de nmeros reais. A seguir, multiplique
cada linha pelo elemento da diagonal principal daquela linha. Mostre a matriz aps as
multiplicaes.
9) Faa um programa que leia duas matrizes 3x3 e realize a soma da duas e a multiplicao das mesmas.
Dever ser exibido as duas matrizes originais, a matriz de soma e a matriz de multiplicao.
10) Escrever um algoritmo que l uma matriz M(12,13) e divida todos os 13 elementos de cada
uma das 12 linhas de M pelo maior elemento em mdulo daquela linha. Escrever a matriz
lida e a modificada.
12) Suponha que voc tenha uma array como da imagem abaixo:
Pg.: 92/137
Prof. Daniel Oliveira
13) Faa um programa em Java que permita que dois usurios jogue o Jogo da Velha, a cada iterao de
forma alternada o jogador dever indicar a posio a ser preenchida pelo X ou O. Por exemplo:
Pg.: 93/137
Prof. Daniel Oliveira
Modularizao
A medida que evolumos no estudo dos algoritmos e no desenvolvimento programas iremos nos deparar com
problemas mais complexos. A forma como construmos nossos algoritmos at agora no permite que seja
construdo solues mais complexas e de fcil manuteno e expanso.
Quando temos um problema complexo para resolver, temos a principal estratgia da diviso das tarefas para
que cada parte menor possa ser resolvida. Esta tarefa da diviso de algoritmos mais complexos em algoritmos
menores que iro resolver o problema denominada de sub-algoritmos.
Os algoritmos podem ser agrupados em: Mdulos, rotinas, sub-rotina ou subprogramas. Ao se utilizar
subprogramas temos como vantagens:
Reduo de complexidade
Identificao de erros facilitada
Reutilizao
Manuteno mais simples
Expansibilidade
Os Subprogramas so chamados dentro do corpo do programa principal como se fossem comandos. Aps seu
trmino, a execuo continua a partir do ponto onde foi chamado. Deve-se compreender que a chamada de um
subprograma simplesmente gera um desvio temporrio no fluxo de execuo.
Inicio
SubPrograma 2
SubPrograma 1
Processo Principal
Fim
Um subprograma especial a funo. Uma funo executa alguma tarefa, podendo ou no retornar algum valor.
Em Java as funes ou procedimentos so denominados de mtodos (nas prximas unidades vamos entender o
porqu de tal nomenclatura).
Vamos olhar um cdigo j conhecido (Figura 71), na imagem temos uma linha em destaque. um cdigo que
no nenhuma novidade para ns. Agora podemos chamar o print por mtodo print.
Pg.: 94/137
Prof. Daniel Oliveira
O mtodo print o exemplo de funo que no retoma nenhum tipo de valor e sim recebe um valor para
executar a sua rotina (depois vamos entender esta passagem de valores para as rotinas). Agora vamos analisar
outra poro do nosso cdigo (Figura 72).
Nesse outro exemplo, vemos o mtodo pow do pacote Math (logo vamos cham-lo por outro nome). Este
mtodo retorna algo. Retorna o valor da potncia de uma base (primeiro valor passado ao mtodo) a um
expoente (segundo valor passado para o mtodo).
Em resumo, um mtodo pode receber um conjunto de valores (chamados de parmetros) e pode retornar um
valor.
Java, assim como as linguagens de programa c-like, tem um formato bem particular para definir suas funes e
mtodos:
<modificador>: caracteriza o mtodo quanto visibilidade e qualidade. Existem vrios modificadores, mas
neste momento daremos nfase a apenas alguns deles:
public: Indica um mtodo que pode ser acessado por qualquer classe (mais uma vez este termo
surge, mais a frente vamos estuda-lo) que enxergue aquele no qual o mtodo foi escrito.
protected: Indica um mtodo que pode ser acessado apenas por classes pertencentes ao mesmo
pacote ou por subclasses
private: Indica que o mtodo s pode ser invocado dentro da prpria classe onde ele foi escrito.
static: Indica que o mtodo pode ser invocado a partir do nome da classe, ou seja, no necessrio
criar um objeto para invoc-lo. Por exemplo, os mtodos da classe Math (Math.pow).
Se no houver modificador, significa que o mtodo se comporta como do tipo protected.
Pg.: 95/137
Prof. Daniel Oliveira
<retorno> - indica qual tipo de retorno da funo, podendo ser int, float, double, string, char, qualquer tipo de
dado (mesmo aqueles que iremos criar!). Inclusive nada, nesse caso o tipo de retorno void.
<nome>: Deve obedecer s mesmas regras que os identificadores de variveis. Observe que, em uma classe
pode haver mais de um mtodo com o mesmo nome, bastando, para isso, que os tipos, a ordem ou a
quantidade dos parmetros sejam diferentes. Veremos isso com mais detalhes mais frente.
<argumentos>: indica a lista de argumentos que sero passados como parmetros para o mtodo. Eles devem
obedecer a seguinte sintaxe: <tipo> par1, <tipo> par2, ..., <tipo> parn
Notem que no mtodo principal Main, chamamos a funo somar. Como ela no recebe nenhum
parmetro (ou seja, nenhum valor), simplesmente a chamados pelo seu nome seguida de um ().
Isto no Java obrigatrio, mesmo que funo receba nenhum parmetro.
Funes e parmetros
Precisamos recordar um conceito importante do incio desse material escopo. O escopo de uma varivel indica
at aonde uma varivel visvel ou acessvel. Ento, se uma funo ou mtodo necessitar de um valor externos
a ela para realizar sua tarefa?
A soluo para esta questo passarmos este(s) valor(es) para a funo atravs de seus parmetros. Os
parmetros so variveis ou valores que podem ser transferidos do mtodo chamador para o mtodo chamado.
Eles so responsveis pela comunicao entre os mtodos. Vamos rever o exemplo anterior:
Pg.: 96/137
Prof. Daniel Oliveira
Existem duas formas para se estabelecer esta comunicao ou passagem de parmetros: passagem por valor ou
referncia. Quando a passagem feita por valor, o valor copiado do mtodo chamador para o parmetro da
funo. Assim, o valor original permanece intacto, mesmo que o parmetro sofra alteraes dentro do cdigo
da funo.
No entanto, quando fazemos uma passagem por referncia, no o valor que copiado para o parmetro e sim
o endereo de memria do cdigo chamador para o chamado (j conversamos sobre isto antes!). Veja o
exemplo:
Este fenmeno no ocorrer apenas com vetores, tambm ir ocorrer com outros tipos de dados que iremos
trabalhar mais frente!
As funes podem retornar valores (desde valores primitivos at objetos complexos). Bastando para isto
declararmos as funes indicando o tipo de seu retorno:
return fat;
}
O que importante ressaltar nesse ultimo exemplo o seguinte: retorno da funo, e sua imediata finalizao,
depende do comando return. Assim, independentemente da posio dentro da funo. Ao ser encontrado um
comando return a funo para seu processamento e retorna ao cdigo chamador!
Mais um exemplo: funo que receba trs nmeros inteiros: a, b e c, onde a maior que 1. A funo deve
retornar a soma de todos os inteiros entre b e c que sejam divisveis por a (inclusive b e c) para o programa
principal.
Pg.: 98/137
Prof. Daniel Oliveira
Exerccios (Nvel 1)
1. Desenvolva um programa aonde o usurio ir informar duas notas e a sua rotina ir retornar a mdia
das duas.
2. Alterar a rotina de clculo de fatorial para a construo de uma funo que receba um inteiro positivo
e retorne seu fatorial
3. Reescrever o programa de converso de Celsius para Fahrenheit para que a rotina de converso seja
uma funo chamada pelo processo principal.
4. Faa um software para calcular quantas ferraduras so necessrias para equipar todos os cavalos
comprados para um haras.
5. Entrar com o dia e o ms de uma data e informar quantos dias se passaram desde o incio do ano.
Esquea a questo dos anos bissextos e considere sempre que um ms possui 30 dias.
6. Construa um programa para calcular a distncia entre dois pontos do plano cartesiano. Cada ponto
um par ordenado (x,y).
7. Desenvolva um programa que pergunte ao usurio a quantidade de alunos. E para cada aluno o seu
programa dever perguntar o Nome, Nota 1, Nota 2. Estes valores devero ser armazenados em vetores.
E, ao final o programa exiba a relao de nomes com notas e respectivas mdias. Deve-se utilizar funes
para esta tarefa.
Exerccios (Nvel 2)
1. Escreva um algoritmo que leia trs nmeros inteiros e positivos (A, B, C) e passe para uma funo que
calcule a seguinte expresso:
+
= 2
, = ( + )2 = ( + )2
2. Faa uma funo que receba a data de nascimento de uma pessoa (Dia, Ms e Ano) e informe a idade
da pessoa em Dias, meses e anos.
3. Elabore uma funo que dada idade de um nadador classifica-o em uma das seguintes categorias:
Infantil A = 5 - 7 anos
Infantil B = 8-10 anos
Juvenil A = 11-13 anos
Juvenil B = 14-17 anos
Adulto = maiores de 18 anos
4. Tendo como dados de entrada a altura e o sexo de uma pessoa (M masculino e F feminino), construa
uma funo que calcule seu peso ideal, utilizando as seguintes frmulas:
a. Para homens: (72.7*h)-58
b. Para mulheres: (62.1*h)-44.7
5. Um usurio deseja um programa onde possa escolher que tipo de mdia deseja calcular a partir de 3
notas. Faa um algoritmo que leia as notas, a opo escolhida pelo usurio e calcule a mdia: aritmtica
ou ponderada (com pesos 3,3 e 4).
Pg.: 99/137
Prof. Daniel Oliveira
6. Uma empresa conceder um aumento de salrio aos seus funcionrios, varivel de acordo com o cargo,
conforme a tabela abaixo. Faa um programa que leia o salrio e o cargo de um funcionrio e calcule o
novo salrio. Se o cargo do funcionrio no estiver na tabela, ele dever, ento, receber 40% de
aumento. Mostre o salrio antigo, o novo salrio e a diferena.
Exerccios (Nvel 3)
1. Faa um programa para transformar segundos em hora, minutos e segundos e para transformar hora,
minutos e segundos em segundos. Este programa deve ser modularizado, ou seja, deve haver um
mtodo menu (mostra o menu na tela e retorna opo do usurio) e um mtodo para cada tipo de
transformao (faz a transformao e apresenta na tela o resultado).
2. Implemente um programa, utilizando mtodos, que leia uma matriz (LxC) de inteiros. Este programa
dever mostrar a matriz no final bem como sua transposta:
a b c a d g
A= d e f , logo, At = b e h
g h i c f i
3. Faa um programa, utilizando mtodos, que carregue uma matriz 10X20 com nmeros inteiros e some
cada uma das linhas, armazenando o resultado das somas em um vetor. A seguir, multiplique cada
elemento da matriz pela soma da linha e mostre a matriz resultante.
4. Faa um programa, utilizando mtodos, que carregue uma matriz 7X7 de nmeros inteiros e crie dois
vetores de sete posies cada um e que contenham, respectivamente, o maior elemento de cada uma
das linhas e o menor elemento de cada uma das colunas. Escreva, no final, a matriz e os dois vetores.
5. Faa um programa, utilizando mtodos, que dever carregar uma matriz 2X12 que representa a
temperatura mxima e a mnima na Grande Vitria durante cada ms do ano de 2015. Calcule e
imprima o ms, ou meses, por extenso.
Pg.: 100/137
Prof. Daniel Oliveira
Orientao a Objetos
O paradigma de orientao a objetos no algo novo, no surgiu nos ltimos anos, e, sim, vem desde da dcada
de 70 do sculo XX. Este modelo ou padro, da vem o significado da palavra paradigma, domina quase
totalmente todas as linguagens de programao modernas. Mas, nem sempre foi assim.
Quando o conceito da orientao objetos surgi, o modelo de programao procedural (aquele voltado apenas
ao desenvolvimento de cdigos baseados em chamadas a procedimentos ou funes) dominava. Devido as
caractersticas do modelo OO muito cdigo extra era gerado pelo compilador para poder implementar as
funcionalidades do paradigma. Assim, nos primeiros nos e at dcada, as linguagens orientadas objetos eram
associadas a programas pesados e de baixa performance.
Mas, com o avano da capacidade computacional e principalmente das tcnicas de compilao e IDEs o modelo
OO comeou a ser popularizado. Veja um breve histrico desse modelo:
No pargrafo anterior d para se notar a importncia do Java no processo de popularizao desse modelo. Aps
a introduo do C++, o maior ponto de expanso do modelo foi a criao do Java.
O modelo de orientao a objetos tem como base a construo de programas baseando-se em algo muito
simples e que ns interagimos no dia a dia: Objetos!
Vamos imaginar que iremos construir um programa para controle de bibliotecas, a primeira ao apontar quais
seriam os principais entes envolvidos nesse sistema? Livros!
Um livro tem um conjunto de caractersticas que o definem e o descreve, como: Titulo, Autores, Editora, Ano de
Edio e etc. Esta viso representativa do modelo de um objeto se chama classe. Uma classe nada mais do que
um modelo, uma descrio. Gosto de associar classes a uma planta de uma casa, na planta temos as definies
de como ser a casa, temos as caractersticas da casa. Quando construmos a casa a partir desse modelo temos
ento um objeto. Ou seja:
A classe define a estrutura de um objeto. Define quais informaes sero armazenadas nesse objeto, define
quais aes este objeto poder realizar. E, atravs de uma classe poderemos ter vrios objetos sendo
instanciados ou construdos.
Pg.: 101/137
Prof. Daniel Oliveira
Esta definio tambm muito utilizada para classes. Ou seja, quando definimos uma classe, estamos definindo
uma estrutura heterognea que ir combinar dados e funes. E, mais importante ainda, ao se definir uma
classe, define-se um novo tipo de dado.
Ento, ao definirmos uma classe estamos tambm definindo um novo tipo de dado, logo:
Poderemos declarar uma varivel do tipo da classe que criamos. Mas, o processo ainda no est acabado. Ao se
declarar uma varivel do tipo de uma classe no significa que j podemos utilizar a varivel. Como vimos
anteriormente a classe uma estrutura que ir combinas dados e funes, logo, se faz necessrio a alocao de
um espao de memria que possa comportar esta estrutura (J vimos outros tipos de dados que precisam da
mesma coisa! Quais?).
A tarefa de alocar este espao de memria e informar para o nosso programa em qual endereo de memria o
nosso objeto estar localizado (lembrem-se, uma vez instanciada a classe passamos a ter objetos!), o operador
NEW.
O operador new extrema importncia nesse processo. Ele responsvel pela determinao de quanto de
memria ser necessrio para conter o objeto, interagir com o sistema Operacional e solicitar esta quantidade
de memria.
Um outro detalhe importante, que o operador new executa uma funo muito especial que pertence classe.
Ele executa o construtor da classe. Ns iremos abordar este assunto um pouco mais a frente.
...
Para se declarar uma classe em Java, utilizamos primeiramente um modificador de acesso. Um modificador de
acesso diz ao compilador como ser a visibilidade e o acesso a classe por outras partes do nosso cdigo fonte
(vamos utilizar muito estes modificadores mais a frente). Inicialmente teremos dois tipos de modificadores de
acesso:
public Indicando que a nossa classe ou qualquer membro pertencente a classe de acesso pblico.
Sendo assim qualquer poro do nosso cdigo fonte pode referenciar a nossa classe.
private Indica que o membro da classe s pode ser acessado dentro da classe. Este modificador de
acesso implementa um dos principais conceitos do OO: encapsulamento.
Pg.: 102/137
Prof. Daniel Oliveira
Tudo que definido dentro da classe chamado de membro da classe. Uma classe pode conter atributos,
campos ou mtodos cada um desses membros ser abordado mais frente.
...
...
Aps o modificador de acesso temos a palavra-chave <class> esta palavra chave determinar para a ns o tipo de
estrutura que ser construda, uma classe. Em seguida precisamos informar o nome da classe. O nome da classe
segue o mesmo padro e regras de nomeao das variveis. Normalmente temos por padro sempre no utilizar
termos substantivos ou substantivos.
Pg.: 103/137
Prof. Daniel Oliveira
Aps uso das telas Figura 76 e Figura 77, temos ento o esqueleto da nossa classe pronta para ser codificada
Todo o cdigo que for inserido entre o conjunto de {} de chaves, ser pertence classe. Como indicado na Figura
78. Vamos agora criar alguns membros para esta classe:
Na figura anterior temos o cdigo da nossa classe livro com alguns membros. Note que no colocamos nenhum
modificador de acesso para estes membros. Nesse caso, campos ou fields. Como ento utilizar esta classe?
Notem como a definio de classe cria um novo tipo de dados. Por isso, as classes tambm so chamadas de
tipos heterogneos. Ainda, no cdigo fonte de exemplo vemos como acessar os membros de uma classe. Para
isto utilizamos o chamado operador ponto .. Sempre se faz o acesso aos membros de uma classe pelo nome
da varivel (objeto) da classe e ponto e o nome do membro da classe.
Pg.: 104/137
Prof. Daniel Oliveira
Os campos que compe as caracteristicas da classe Livro so denominados de atributos. Bem como, na vida,
temos valores que definem as caracteristicas de objetos, temos os atributos para definir as caracteristicas dos
nossos objetos no cdigo.
Temos aqui outra definio muito importante para objetos, estados. Estado de um objeto reflete os dados que
esto armazenados em seus atributos. Como os valores dos atributos podem mudar o seu estado tambm muda.
Mtodos
Os objetos podem realizar aes. Por exemplo, uma classe Carro que ir representar um carro real em um
simulador. Sabemos que um carro pode acelerar, parar, virar Esquerda, virar Direita. Esta parte dinmica do
objeto realizada atravs de seus mtodos.
Mtodos nada mais so do que funes. Funes pertencentes a classe e acessveis atravs de seus objetos.
Assim, como funes, os mtodos podem retornar ou no valores, e receber ou no parmetros.
Pg.: 105/137
Prof. Daniel Oliveira
Exerccios
1- Desenvolva uma classe que represente uma conta bancria, esta classe dever ter:
a. Uma varivel privada que dever conter o saldo da conta
b. Um mtodo Depositar que receba um valor double, este valor dever ser acrescido ao saldo da
conta
c. Um mtodo Sacar que receba um valor double, este valor dever ser retirado do saldo da conta
d. Um mtodo VerificarSaldo que retorne o valor do saldo da conta
2- Desenvolva uma classe que represente um Ponto, esta classe dever ter:
a. Duas variveis privadas que sero as coordenadas X e Y do ponto
b. Um mtodo AtualizarCoordenadas que receba dois valores double, uma para a coordenada X e
outro para a coordenada Y
c. Um mtodo CoordenadaX que retorne a coordenada X
d. Um mtodo CoordenadaY que retorne a coordenada Y
e. Um mtodo Distancia que receba um mtodo do tipo Ponto e retorne a distncia entre o objeto
Ponto atual e o objeto Ponto passado como parmetro.
3- Escreva em Java uma classe que represente um crculo no plano cartesiano. Fornea os seguintes
membros de classe:
a. Uma varivel privada para conter o Raio do circulo
b. Um mtodo que receba o valor do raio do circulo
c. Um mtodo que retorne a rea do circulo
d. Um mtodo que retorne o comprimento do circulo
4- Escreva em uma classe Contador, que encapsule um valor usado para contagem de itens ou eventos. A
classe deve oferecer mtodos que devem:
a. Zerar;
b. Incrementar;
c. Retornar o valor do contador.
5- Escreva uma classe que represente um pas. Um pas representado atravs dos atributos: cdigo ISO
3166-1 (ex.: BRA), nome (ex.: Brasil), populao (ex.: 193.946.886) e a sua dimenso em Km2 (ex.:
8.515.767,049). Alm disso, cada pas mantm uma lista de outros pases com os quais ele faz fronteira.
a. Crie uma propriedade para cada uma citada no enunciado
b. Crie um mtodo que retorne todos os pases com fronteira
6- Escreva em Java uma classe Continente. Um continente possui um nome e composto por um conjunto
de pases. Fornea os membros de classe a seguir:
a. Um mtodo que permita adicionar pases aos continentes;
b. Um mtodo que retorne a dimenso total do continente;
c. Um mtodo que retorne populao total do continente;
d. Um mtodo que retorne densidade populacional do continente;
e. Um mtodo que retorne o pas com maior populao no continente;
f. Um mtodo que retorne o pas com menor populao no continente;
g. Um mtodo que retorne o pas de maior dimenso territorial no continente;
h. Um mtodo que retorne o pas de menor dimenso territorial no continente;
i. Um mtodo que retorne a razo territorial do maior pas em relao ao menor pas.
Pg.: 106/137
Prof. Daniel Oliveira
Construtores
Este mtodo, que no obrigatrio, construdo com o objetivo de inicializar seus atributos (no obrigatrio
tambm inicializar todos os atributos).
Um construtor, como o prprio nome diz executado na construo do objeto. Assim, podemos tomar aes
que iro inicializar o nosso objeto.
Figura 83 Construtor
No exemplo abaixo est uma classe chamada Ponto que ir definir as coordenadas x e y de um ponto no plano.
Neste momento, definiremos somente os atributos da classe.
public class Ponto {
private double x, y;
Dessa forma quando fizermos uma classe para utilizao de um objeto Ponto teremos a seguinte situao:
Ao criar o objeto p1 da classe Ponto, ele ter os valores de suas coordenadas inicializadas com 0 (zero). E, dentro
da classe TestaPonto impossvel fazer referncia a p1.x ou p1.y, pois seus atributos (x e y) so privados
classe Ponto, ou seja, no so visveis em outras classes.
Pg.: 107/137
Prof. Daniel Oliveira
private double x, y;
this.x = a;
this.y = b;
Um construtor, ao ser declarado, deve conter apenas o nome da classe e os valores que devero ser utilizados
para inicializao das variveis. Os atributos de classe (x e y) devem ser identificados pela palavra this para
diferenci-los de qualquer outra varivel local. Com o construtor j escrito, um objeto da classe Ponto poder
ser criado com a inicializao imediata de suas coordenadas.
public class TestaPonto{
public static void main (String[] args){
Ponto p1 = new Ponto(3, -1);
Ponto p2 = new Ponto(0,0);
Ponto p3 = new Ponto();
}
}
Com a classe Ponto escrita como acima, no possvel mais criar um objeto sem passar nenhum argumento.
Ento, a declarao Ponto p3 = new Ponto(); ter um erro sinttico. Mas, ainda assim, possvel
escrever outro construtor que permita este tipo de comando.
possvel criar mais de um construtor, desde que os argumentos passados sejam de tipos (ou classes) diferentes.
public class Ponto {
private double x, y;
Ponto (){
this.x = 0;
this.y = 0;
}
}
Com esses dois construtores, o JAVA escolher qual deles ir utilizar, de acordo com a chamada:
public class TestaPonto{
public static void main (String[] args){
Ponto p1 = new Ponto(3, -1);
Pg.: 108/137
Prof. Daniel Oliveira
Quando for criado p1, ele utilizar o primeiro construtor, pois est passando dois valores inteiros e ao criar o
p2, ele utilizar o segundo construtor.
ArrayList
Arrays so estruturas de dados interessantes, mas, muito limitadas frente as necessidades do dia a dia. O Java
prov um conjunto de objetos para colees de elementos dinmicos e com alta performance, a API
Collections.
import java.util.ArrayList;
Reparem que o mtodo add, recebe um object ou seja, podemos colocar qualquer objeto Java nessa
coleo.
import java.util.ArrayList;
System.out.println(list);
}
}
for(int i=0;i<list.size();i++){
Funcionario o = (Funcionario)list.get(i);
System.out.println(o.getNome());
}
Pg.: 109/137
Prof. Daniel Oliveira
Ou Ento:
Evidentemente o assunto sobre collections no se esgota aqui. Ainda temos outras estruturas de dados mais
complexas. Mas, dentro do escopo desse material as ArrayList iro ser e grande valia.
Pg.: 110/137
Prof. Daniel Oliveira
Exerccios
2) Com a classe criada no item 1, crie um programa que receba as informaes e notas de N alunos,
sendo N informado pelo usurio. E, exiba estas informaes no console.
3) Fazer uma classe VetorDePontos, contendo os seguintes atributos: vetor de pontos (seu
tamanho ser determinado no construtor) e um atributo inteiro chamado nElem que indicar
quantos elementos j foram armazenados no vetor. Alm disso, construa tambm os mtodos:
5) Crie uma classe chamada Complexos para efetuar operaes aritmticas com nmeros
complexos. Os nmeros complexos tm o formato: parteReal + parteImaginria*i,
aonde = 1
i. Crie um construtor para que essa classe possa ser inicializada
ii. Crie um construtor sem parmetros para a classe
iii. Crie mtodos pblicos para:
a. Soma de dois nmeros complexos (as partes reais so somadas juntas
e imaginrias so somadas juntas)
b. Subtrao (a parte real do nmero a direita subtrado da parte real
do nmero a esquerda e a mesma coisa ocorre com a parte
imaginria).
Pg.: 111/137
Prof. Daniel Oliveira
iii. Crie um mtodo Display para retornar uma string com a Data no formato: dia / ms /
ano
iv. Crie um mtodo NextDay que incrementa o dia de um verificando:
d. Incremento para o prximo ms
e. Incremento para o prximo ano
7) Crie uma classe para modelar os funcionrios do banco. Defina nessa classe um atributo para
armazenar o valor do vale refeio dirio pago aos funcionrios.
a) Faa um teste para verificar o funcionamento do vale refeio.
b) Defina um mtodo para reajustar o vale refeio dirio a partir de uma taxa.
c) Faa um teste para verificar o funcionamento do reajuste do vale refeio
8) Crie uma classe que represente um LED. Esta classe dever ter uma varivel privada booleana
indicando o estado led (ligado ou no ligado).
a) Crie uma varivel interna da classe que contenha o nome da cor do LED
b) Crie um mtodo que retorne a cor do LED
c) Crie um construtor que receba como parmetro a cor do LED
d) Crie um mtodo que retorne o estado do LED
e) Crie um mtodo Ligar que muda o estado do LED para ligado
f) Crie um mtodo Desligar que muda o estado do LED para Desligado
10) Crie uma classe Painel2D, que ao invs de ter um vetor de LED (como no item anterior) tenha
uma matriz quadrada de objetos do tipo LED. O construtor dessa classe dever receber um
nmero inteiro que ser a quantidade de linhas e colunas da matriz quadrada. Adapte os
mtodos do item anterior para suportar agora esta nova configurao.
Pg.: 112/137
Prof. Daniel Oliveira
Encapsulamento
Imagine que estamos modelando uma classe que represente um NPC (Non-Playable Caracter) em jogo:
Nessa classe temos dois atributos, um representando o nvel de vida do NPC e um segundo que representa o
grau de experincia do NPC. Agora vamos imaginar que em algum momento precisamos alterar a forma de obter
clculo do Vida ou Experincia do NPC. Apenas expor os atributos diretamente, assim, no ir resolver o
problema. Teremos que rever todo o cdigo que utilize esses atributos e criar novos atributos que tenham agora
os novos valores. Isto no correto ou prudente!
Como resolver este problema? A resposta uma caracterstica muito importante do OO Encapsulamento. O
processo do encapsulamento a tcnica de se expor os atributos das classes atravs de mtodos, ou seja, vamos
envolver esses dados (esconde-los) e somente exp-los atravs de mtodos. Reescrevendo a classe:
Dica: Criar getters e setters pode parecer um processo trabalhoso, mas, por ser um padro de cdigo muito
comum, as principais IDEs do mercado possuem atalhos e templates que nos ajudam a fazer isso. No eclipse,
voc pode fazer isso de forma muito produtiva utilizando o atalho Control + 3 e depois digitando setters. Repare
que essas so as iniciais do comando Generate Getters and Setters. Selecionando esta opo voc poder
escolher para quais atributos criar os mtodos e clicar em Finish.
Podemos, mas, o XP do NPC um atributo somente leitura, pois, dever ser resultado de um clculo qualquer.
Para isto basta omitir a declarao do mtodo set do atributo. Logo, podemos definir o seguinte:
Pg.: 113/137
Prof. Daniel Oliveira
Herana e polimorfismo
Na Figura 86 - Classe NPC (Herana), temos implementado alguns mtodos que iro caracterizar algumas aes
comuns aos NPCs. Vamos, agora, imaginar que termos uma nova classe de NPCs. Esta nova classe ter todas os
atributos e mtodos da classe NPC mas ir implementar alguns novos atributos e mtodos.
Como poderemos realizar isto? Copiar a estrutura do cdigo de uma classe na outra? E, se, for necessria uma
atualizao? Teremos que revisar todas as classes que copiaram a estrutura da NPC? No ser necessrio
realizada nada disso. Vamos utilizar o conceito de herana!
Em OO, herana a tcnica de que uma classe herda todas as caractersticas (atributos e mtodos) de uma outra
classe, apenas os membros no privados. Sendo assim, se alterarmos a classe bsica ou base ou tambm
chamada de superclasse, a alterao passa a valer para as classes descendentes. Este processo tambm
chamado de Generalizao / Especializao.
A classe genrica (Generalizao) herdada pelas classes especializadas (Especializao). Ento, em situaes
aonde podemos identificar este conceito ocorrendo, sempre iremos buscar colocar os atributos e mtodos
genricos e de uso geral na classe base e apenas implementar nas classes filhas as suas especificidades
(especializaes).
Pg.: 114/137
Prof. Daniel Oliveira
A classe Warrior poder ter o seu construtor, basta para isso que voc o declare. Mas, caso seja necessrio,
possvel evocar o construtor da classe base tambm (Delegate Constructor):
Pg.: 115/137
Prof. Daniel Oliveira
Override
Existem situaes que iremos precisar ter uma verso sobrescrita de um mtodo da classe pai na classe filha,
assim:
Assim, teremos uma nova verso do FLEE na classe filha. Mas, pode existir situaes que queremos ainda chamar
o mtodo da classe pai, e, adicionar mais alguma coisa na classe filha:
Opcionalmente, podemos marcar os mtodos que so sobrescritos nas classes filhas com o diretiva @Override,
esta diretiva diz para o compilador no compilar o cdigo caso no exista o mtodo a ser sobrescrito na classe
base. O comportamento padro de caso no exista o mtodo na classe base, o mtodo encarado como sendo
um novo mtodo. No entanto, se existir o mtodo na classe base, o novo mtodo assumido como sendo uma
sobrescrita.
Polimorfismo
Vamos imaginar agora que precisamos que nossos NPC no mais se movam para uma posio apenas, mas,
em algumas situaes eles devem se mover para uma posio e com uma certa acelerao. Vamos criar um
mtodo move2 ? Certamente que no!
Pg.: 116/137
Prof. Daniel Oliveira
Para isto vamos utilizar o princpio do polimorfismo, poli vrias / morfo formas ou seja, vamos criar vrias
verses do mesmo mtodo. Assim, o cdigo que utiliza a verso antiga continua funcionando e o cdigo que
utiliza a nova verso ir simplesmente utiliz-la.
Figura 94 Polimorfismo
Pg.: 117/137
Prof. Daniel Oliveira
Exerccios
1. Crie uma classe Animal, com trs mtodos (Acordar(), Comer(), Dormir()) e uma propriedade
(Nome); Crie uma classe Mamifero, que herda de Animal (criado como no item acima) e que
possui o mtodo Mamar(). Crie, ainda, as classes Morcego (que possui o mtodo Voar()) e Baleia
(que possui o mtodo Nadar()), derivadas de Mamifero;
2. Crie uma classe Pessoa que possui os mtodos Acordar(), Comer() e Dormir() e as propriedades
int Codigo, String Nome e Sexo Sexo. Crie duas classes (Homem e Mulher) que herdam de
Pessoa;
3. Crie uma classe Calculadora que faa as quatro operaes bsicas (soma, subtrao,
multiplicao e diviso). Crie uma classe derivada CalculadoraCientifica que, alm das
operaes bsicas, faa extrao de razes;
4. Crie uma classe Figura, com um campo double x (privado). Crie um construtor para fornecer o
valor para esse campo. Crie dois mtodos CalcularArea() e CalcularPerimetro() que (nas classes
derivadas) retornaro os valores da rea e do permetro de uma figura regular, baseados na
medida x. Crie as classes derivadas Equilatero, Quadrado, Circulo, Pentagono, Hexagono,
Heptagono e Octogono. Sobrescreva o mtodo ToString() de Figura.
5. Desenvolva uma classe Lampada. Esta classe dever ter uma propriedade booleana que ir indicar
se a lmpada (esta propriedade dever ser somente leitura). Esta classe dever ter dois mtodos:
Um mtodo que ir ligar a lmpada e outro mtodo para desligar a lmpada ambos os mtodos
devero alterar o valor da varivel (privada) que controla o estado da lmpada
6. Crie uma classe filha da classe Lampada criada no exerccio anterior. Esta classe filha dever ser
chamada de Led. Esta nova classe dever ter uma propriedade indicando qual a sua cor e qual a
intensidade em que est emitindo a luz (fraca, moderada, alta)
7. Crie uma classe Painel que dever conter um array de 4x4 elementos do tipo LED. Esta array dever
ser exposta via uma propriedade e dever ser criada e instanciada no contructor da classe. Esta
classe dever ter um mtodo receba dois inteiros (linha e coluna) e um booleano. De acordo com
linha e coluna informados e o booleano passado o LED naquela posio dever ser ligado ou no.
Pg.: 118/137
Prof. Daniel Oliveira
Vamos imagina a seguinte situao, ao se desenvolver um jogo deve-se ter duas classes de NPCs: warrior e orc.
Dentro do nosso projeto ambas as classes so filhas da classe NPC. E, no queremos que hiptese nenhuma a
classe NPC seja instanciada ou concretizada. Obrigando assim, os desenvolvedores utilizando apenas as classes
warrior e orc.
No basta apenas documentar este fato e sim necessrio o uso de alguma funcionalidade que no permita
que uma classe seja concretizada ou instanciada. Em OO temos a palavra chave abstract. Esta palavra chave
marca a classe como no concreta ou abstrata
Apesar de no se pode instanciar uma classe abstrata, usamos ela como um modelo ou template para a
construo das classes filhas. Assim, podemos utilizar os chamados mtodos abstratos, dando uma estrutura
melhor. Esses mtodos abstratos devero ser implementados nas classes filhas.
Com os mtodos abstratos impomos a implementao dos mesmos nas classes filhas. Ressaltando que at o
Java 8, classes abstratas no poderiam ter mtodos concretos, esta restrio no existe mais.
Pg.: 119/137
Prof. Daniel Oliveira
Interfaces
Agora vamos imaginar que estamos construindo um programa que realize operaes aritmticas sobre formas
geomtricas.
Pg.: 120/137
Prof. Daniel Oliveira
Reparem que os mtodos CalculaArea so praticamente idnticos. E, se agora precisamos de mais uma forma
geomtrica, vamos construir mais uma verso do mtodo CalculaArea?
Ser que no existe uma forma de declaramos um contrato, que indique que qualquer classe que respeite ou
implemente este contrato tenha um conjunto especifico de mtodos? Este contrato possvel atravs do uso
de interfaces.
Pg.: 121/137
Prof. Daniel Oliveira
Uma exceo representa uma situao que normalmente no ocorre e representa algo de estranho ou
inesperado no sistema.
Como tratar uma exceo sem que a mesma possa terminar a execuo do programa? Usando um bloco
try...catch
Pg.: 122/137
Prof. Daniel Oliveira
Lanando excees:
if (b == 0){
throw new Exception("Tentando dividir por zero!");
}
System.out.println(a/b);
}
}
O bloco finally, garante que um determinado cdigo sempre seja executado, mesmo quando ocorra algum tipo
de erro e o bloco catch seja executado:
try {
// bloco try
} catch (IOException ex) {
// bloco catch 1
} catch (SQLException sqlex) {
// bloco catch 2
} finally {
// bloco que ser sempre executado, independente
// se houve ou no exception e se ela foi tratada ou no
}
Um outro tipo, obriga a quem chama o mtodo ou construtor a tratar essa exceo. Chamamos esse tipo de
exceo de checked, pois o compilador checar se ela est sendo devidamente tratada, diferente das
anteriores, conhecidas como unchecked.
Um exemplo interessante o de abrir um arquivo para leitura, onde pode ocorrer o erro do arquivo no existir
(veremos como trabalhar com arquivos em outro captulo, no se preocupe com isto agora):
class Teste {
public static void metodo() {
new java.io.FileInputStream("arquivo.txt");
}
}
Para compilar e fazer o programa funcionar, temos duas maneiras que podemos tratar o problema. O
primeiro, trat-lo com o try e catch
Pg.: 123/137
Prof. Daniel Oliveira
try {
new java.io.FileInputStream("arquivo.txt");
} catch (java.io.FileNotFoundException e) {
System.out.println("Nao foi possvel abrir o arquivo para leitura");
}
A segunda forma de tratar esse erro, delegar ele para quem chamou o nosso mtodo, isto , passar para a
frente.
new java.io.FileInputStream("arquivo.txt");
Com o throws:
Ou ento,
Pg.: 124/137
Prof. Daniel Oliveira
Sendo exception uma classe, podemos tambm criar classes filhas da mesma, criando assim nossas prprias
Exceptions.
Exemplo,
Pg.: 125/137
Prof. Daniel Oliveira
Exerccios
1) Crie uma interface chamada IArea esta interface dever conter um mtodo que retorne um double e
tenha como nome CalcularArea. Crie as classes Quadrado, Triangulo e Crculo que implemente esta
Interface. Crie um mtodo que receba objetos que implementem esta interface.
2) Crie uma interface IConta que defina dois mtodos: Sacar e Depositar o primeiro retira valores do
saldo de uma conta e o segundo deposita valores em uma conta. Uma classe abstrata Conta que tenha
um atributo Saldo. Crie dois objetos: ContaCorrente e ContaPoupanca que implementem esta interface
e herdem da classe Conta. A classe ContaCorrente dever ter um outro atributo chamado
LimiteChequeEspecial, o saldo da mesma dever levar em conta este valor.
3) Crie uma interface chamada Contato com os mtodos getNome(),getContato() e getTipo(), todos sem
parmetros e retornando String; Crie uma classe ContatoTelefone e ContatoEmail que implemente esta
interface.
5) Altere as classes do exerccio 2 para verificar em caso de saque, o saldo for inferior a zero, lanar uma
exception.
Pg.: 126/137
Prof. Daniel Oliveira
Em Java os principais objetos para se trabalhar com arquivos est no pacote java.io utiliza-se as classes
abstratas InputStream e OutStream para toda e qualquer operao, que seja relativa a um arquivo, socket de
rede ou campo blob de banco de dados.
Para a leitura de bytes de um arquivo vamos utilizar o objeto FileInputStream. Para isto dever ser informado o
nome do arquivo (informado no construtor). Quando trabalhos com as classes de I/O diversos mtodos lanam
a exceo IOException, sendo uma exceo do tipo checked, nos obriga a trata-la ou declar-la.
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
}
}
Para a leitura de dados em formato texto necessrio os bytes com enconding dado para o respectivo cdigo
Unicode. Para isto vamos utilizar a classe InputStreamReader. O construtor de InputStreamReader pode receber
o encoding a ser utilizado como parmetro, se desejado, tal como UTF-8 ou ISO-8859-1.
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
}
}
Pg.: 127/137
Prof. Daniel Oliveira
Ler um caractere simples, agora vamos ler uma cadeia de caracteres, para isto vamos utilizar o
BufferedReader:
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
}
}
Pode-se configurar o tamanho do buffer no construtor da classe, aumentando a performance da leitura das
informaes.
A padro que exibido na Figura 102, chamado de Decorator Pattern. No momento apenas lemos uma linha
do arquivo, vamos ler todo o arquivo:
Pg.: 128/137
Prof. Daniel Oliveira
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
br.close();
isr.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
}
}
Pg.: 129/137
Prof. Daniel Oliveira
Serializando objetos
Vamos agora armazenar nossos objetos em disco. Primeiro precisamos que nossos objetos implemente a
interface: Serializable.
Seja a classe:
import java.io.Serializable;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
}
}
Pg.: 130/137
Prof. Daniel Oliveira
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
}
}
Pg.: 131/137
Prof. Daniel Oliveira
1) Crie uma classe que representa um Ponto no espao 3D. Esta classe dever ter trs propriedades: X,Y e
Z (todas do tipo double) representando as coordenadas do ponto
2) Crie uma classe Velocidade que ter as seguintes propriedades: VelocidadeX, VelocidadeY,VelocidadeZ
todas do tipo double.
3) Crie uma classe Aceleracao que ter as seguintes propriedades: AceleracaoX, AceleracaoY, AceleracaoZ
todas do tipo double.
6) Crie um cdigo de exemplo que utilize a classe do exerccio 5, exemplificando o uso dos mtodos e
propriedades.
7) Crie uma classe chamada Funcionario. Defina dois mtodos de aumento salarial nessa classe. O primeiro
deve aumentar o salrio com uma taxa fixa de 10%. O segundo deve aumentar o salrio com uma taxa
varivel.
8) Crie uma classe Calculadora. Esta classe dever ter os seguintes mtodos:
a. Somar realiza a soma de dois nmeros informados
b. Dividir realiza a diviso entre dois nmeros
c. Subtrao - realiza a subtrao entre dois nmeros
d. Multiplicao realiza a multiplicao entre dois nmeros.
9) Crie uma classe CalculadoraCientifica que herde a classe Calculadora do exerccio anterior, esta classe
dever ter os seguintes mtodos:
a. RaizQ calcula a raiz quadrada de um nmero informado
b. Potencia recebe dois parmetros (base e expoente) e retorna o nmero da base elevado ao
expoente
c. Fava o override no mtodo Dividir, da classe base, testando a diviso por zero (retornando
uma exceo caso isto possa ocorrer) e ento chame o mtodo da classe base.
10) Crie uma classe CalculadoraFinanceira que herde de CalculadoraCientifica e que implemente os
seguintes mtodos:
Pg.: 132/137
Prof. Daniel Oliveira
a. ValorFuturo Este mtodo dever receber um valor atual, uma taxa de juros e uma quantidade
de meses. Faa uma pesquisa e implemente o clculo de juros compostos, retornando qual seria
o valor futuro do valor atual a taxa informada e no perodo informado.
12) Crie uma classe Cadastro. Esta classe dever ter uma varivel privada que ser uma lista de objetos do
tipo Pessoa. Esta varivel dever ser instanciada no construtor da classe. Esta classe dever ter os
seguintes mtodos:
a. Inserir Mtodo que insere um objeto Pessoa na lista, passado como parmetro
b. Consultar Mtodo que recebe como parmetro uma string que ser o CPF e consulta a lista
retornando (caso encontre) o objeto com o CPF correspondente.
c. Remover Mtodo que recebe um CPF e remove o objeto Pessoa (caso encontre) com o CPF
informado.
13) Crie uma classe CadastroEstendido, que herde da classe Cadastro do exerccio anterior. Esta classe
dever ter:
a. Override do mtodo Inserir, verificando antes se j existe um objeto Pessoa com o CPF
informado se, j existir dever ser lanada uma exceo informado do erro.
b. Um mtodo esttico Salvar que receba como parmetro um nome de arquivo e um objeto do
tipo CadastroEstendido que realiza o serializao do objeto.
c. Desafio: Crie um mtodo esttico Carregar, que informado um nome de arquivo realize a de-
serializao do objeto e retorne o objeto CadastroEstendido
Pg.: 133/137
Prof. Daniel Oliveira
Anexos
Anexo A
Hierarquia do Eclipse
3) Package - agrupamento de classes afins - se no definido, usa o pacote default . Normalmente cada
programa seu ficar num Package;
4) Class - uma classe escrita dentro de um arquivo. Normalmente, os primeiros programas so compostos por
apenas uma classe.
Criao do primeiro programa: Os seguintes passos mostram a criao do projeto, pacote e classe,
respectivamente nos botes:
Obs: se estes botes no aparecem, selecione a opo Java dentro do boto Open Perspective acima e
direita.
Criao do projeto:
i Clique no boto New Java Project (ou selecione pelo menu: File - New - Project - Java Project - Next)
ii digite: Programas Algoritmo I (primeira letra sempre em maisculo).
iii Finish
Criao do pacote:
i Selecione o projeto que acabou de ser criado (janela Package Explorer esquerda)
ii Clique no boto New Java Package (ou selecione pelo menu: File - New - Package)
iii Digite: exercicio01 (primeira letra sempre em minsculo).
iv Finish
Pg.: 134/137
Prof. Daniel Oliveira
Criao da classe:
i Clique no boto New Java Class - Class (ou selecione pelo menu: File - New - Class)
ii Em name digite: Principal, para o nome da classe (primeira letra sempre em maisculo).
iii Como esta classe de execuo final ento ela deve possuir o mtodo main( ). Para isto
marque a caixa: public static void main (String[] args)
iv Finish
v Aparecer o seguinte cdigo:
public class Principal {
/**
* @param args
*/
Pg.: 135/137
Prof. Daniel Oliveira
Anexo B
Uma outra forma de interagir com usurio (exibio de mensagens e obteno de valores) o
uso da classe JOptionPane. Esta uma classe que faz parte da biblioteca swing do Java
(componentes visuais do Java).
Para utilizar esta classe para obter informaes necessrio o uso do mtodo ShowInputDialog,
que diferentemente do scanner todas as informaes so retornadas em string e devem ser
convertidas para os tipos necessrios.
import javax.swing.JOptionPane;
JOptionPane.showMessageDialog(null,
"Oi " + name + ". Voc tem "
+ age + " anos!");
Pg.: 136/137
Prof. Daniel Oliveira
Referncias
CORMEN, Thomas H.; LEISERSON, Charles Eric.; RIVEST, Ronald L.; STEIN, Clifford. Algoritmos:
teoria e prtica. Rio de Janeiro Campus, 2002. 916 p. ISBN 9788535209266
DEITEL, Harvey M.; DEITEL, Paul J. Java: como programar. 6. ed. So Paulo: Prentice Hall, 2005.
1110 p. ISBN 9788576050193
GOODRICH, Michael T.; TAMASSIA, Roberto,. Estruturas de dados e algoritmos em Java. 2. ed.
Porto Alegre, RS: Bookman, 2004. 584 p. ISBN 8536300434
ORACLE. Oracle Technology Network for Java Developers. Disponvel em: <
http://www.oracle.com/technetwork/java/index.html>. Acesso em: 16 Agosto de 2011.
Pg.: 137/137