Escolar Documentos
Profissional Documentos
Cultura Documentos
ALGORITMOS E
PROGRAMAO
II
Magno Santos
Ministrio da Educao - MEC
Universidade Aberta do Brasil - UAB
Universidade Federal do Piau - UFPI
Universidade Aberta do Piau - UAPI
Centro de Educao Aberta a Distncia - CEAD
ALGORITMOS E PROGRAMAO II
Magno Santos
PRESIDENTE DA REPBLICA Luiz Incio Lula da Silva
MINISTRIO DA EDUCAO Fernando Haddad
GOVERNADOR DO ESTADO Wilson Nunes Martins
REITOR DA UNIVERSIDADE FEDERAL DO PIAU Luiz de Sousa Santos Jnior
SECRETRIO DE EDUCAO A DISTNCIA DO MEC Carlos Eduardo Bielshowsky
PRESIDENTE DA CAPES Jorge Almeida Guimares
COORDENADORIA GERAL DA UNIVERSIDADE ABERTA DO BRASIL Celso Costa
DIRETOR DO CENTRO DE EDUCAO ABERTA A DISTNCIA DA UFPI Gildsio Guedes Fernandes
A responsabilidade pelo contedo e imagens desta obra do autor. O contedo desta obra foi licenciado tem-
porria e gratuitamente para utilizao no mbito do Sistema Universidade Aberta do Brasil, atravs da UFPI.
O leitor se compromete a utilizar o contedo desta obra para aprendizado pessoal, sendo que a re-
produo e distribuio ficaro limitadas ao mbito interno dos cursos. A citao desta obra em trabalhos
acadmicos e/ou profissionais poder ser feita com indicao da fonte. A cpia deste obra sem autorizao
expressa ou com intuito de lucro constitui crime contra a propriedade intelectual, com sanses previstas no
Cdigo Penal.
Este livro destinado aos estudantes aprendizes que participam
do programa de Educao a Distncia da Universidade Aberta do Piau
(UAPI) vinculada ao consrcio formado pela Universidade Federal do
Piau (UFPI), Universidade Estadual do Piau (UESPI) e Instituto Federal
de Educao, Cincia e Tecnologia do Piau (IFPI), com apoio do Governo
do Estado do Piau, atravs da Secretaria de Educao (SEDUC).
O texto deste compndio composto de quatro unidades,
contendo quinze sub-unidades, estruturadas de modo sequencial, nas
quais se discute sobre os fundamentos da programao de computadores
orientada a objetos.
Na Unidade 1, discutiremos sobre os fundamentos de engenharia
de software e da programao orientada a objetos, apresentando a
anatomia de um programa orientado a objetos com seus elementos
constituintes. Mostraremos os primeiros passos com a IDE NetBeans e
como escrever um cdigo para ler e escrever dados na entrada e sada
padro.
Na Unidade 2, sero apresentadas as estruturas de controle de
um programa em Java; exemplificaremos as estruturas de repetio
incremental, repetio com teste no incio e repetio com teste no final,
alm das estruturas de desvio condicional.
Na Unidade 3, abordaremos as estruturas de dados de arranjos
homogneos e heterogneos. Trabalharemos exemplos com vetores,
matrizes e adicionalmente passagem de parmetros como argumentos
para um programa
Na Unidade 4, sero expostos contedos sobre o paradigma da
programao orientada a objetos. Focaremos nas definies e exemplos
de classe, objeto, mensagem; e ainda, apresentaremos caractersticas
UNIDADE 1
09 Fundamentos de Programao Orientada a Objetos
UNIDADE 2
62 Estruturas de Controle
UNIDADE 3
89 Arranjos e Argumentos
Array em Java...................................................................................... 91
Argumentos em Java........................................................................... 98
UNIDADE 4
105 Paradigma de Programao Orientada a Objetos
Referncias Bibliogrficas
UNIDADE 01
Fundamentos de Programao
Orientada a Objetos
OBJETIVOS:
Orientar na gerao de um cdigo simples, dentro dos padres
mnimos exigidos pela Engenharia de Software.
Fundamentos de
Programao
Orientada a Objetos
Ferramentas
Mtodo
Processo
Foco na Qualidade
Foco na qualidade
Essa camada busca um total foco na qualidade. uma cultura em
que o compromisso com a melhoria no processo de desenvolvimento do
software sustentado, permitindo o desenvolvimento de mais abordagens
Algoritmos e Programao II 11
efetivas para engenharia de software.
Processo
Define uma estrutura, que consiste em reas de processos-chave,
que define e permite a entrega racional a tempo de um software. reas de
processos chave so a base para o gerenciamento de projeto de software.
Estabelecem que mtodos tcnicos sejam aplicados, quais ferramentas
so usadas, que produtos de trabalho precisam ser produzidos, e que
marcos so definidos. Incluem a garantia que a qualidade ser mantida,
e que a mudana devidamente controlada e gerenciada.
Mtodo
Mtodos definem procedimentos sistemticos e ordenados de
construo de software, proporcionando uma estrutura global interna
em que as atividades do engenheiro de software so realizadas. Essas
atividades incluem um conjunto amplo de tarefas, tais como: anlise de
requisitos, design, construo do programa, teste e manuteno.
Metodologia a cincia de pensamento sistemtico, que usa
mtodos ou procedimentos para uma disciplina em particular. Existem
vrias metodologias da engenharia de software que so usadas
atualmente. Algumas delas esto enumeradas abaixo:
Metodologias estruturadas:
Informaes de engenharia
Desenvolvimento do ciclo de vida do software/ciclo de vida do
projeto
Metodologia de Desenvolvimento de Aplicao Rapid
Metodologia de Desenvolvimento de Aplicao Joint
Mtodo CASE*
12 UNIDADE 01
Ferramentas
Algoritmos e Programao II 13
O que qualidade?
Qualidade do produto
Qualidade do processo
14 UNIDADE 01
pela melhoria do processo de desenvolvimento do software, tambm h
melhora da qualidade do produto resultante. Algumas regras de processo
so demonstradas abaixo:
Capability Maturity Model Integration(CMMI) - foram formulados
pelo Software Engineering Institute (SEI). um processo meta-modelo,
que baseado em um conjunto de sistemas e competncias da
engenharia de software que devem existir dentro de uma organizao.
Essa organizao atinge diferentes nveis de capacidade e maturidade
desses processos de desenvolvimento.
ISSO 9000:2000 para Software - um padro genrico, aplicado
para qualquer organizao que queira melhorar a qualidade global dos
produtos, sistemas ou servios que proporciona.
Software Process Improvement e Capability Determination
(SPICE) - um padro que define um conjunto de requisitos para
avaliao do processo de software. O objetivo desse padro auxiliar
organizaes a desenvolver uma anlise objetiva da eficcia de qualquer
processo de software definido.
Nessa perspectiva, qualidade visualizada em termos de produtos
e servios, sendo proporcionada pelo negcio em que o software usado.
Melhorando a qualidade tcnica dos processos de negcio, agrega-
se valor ao negcio, por exemplo, valor tcnico do software traduz o
valor do negcio. Tambm importante medir o valor do software em
termos de terminologias de negcio, tal como quantos pedidos de venda
foram processados hoje?, valor do dlar sobre o retorno em cima dos
investimentos (ROI), etc. Se o software no agrega valor ao negcio,
qual a necessidade de t-lo em primeiro lugar?
Algoritmos e Programao II 15
uma perda potencial, so indevidamente otimistas em seus planos e
projees, e preferem usar julgamentos intuitivos em vez de modelos
quantitativos.
4. Engajamento para a qualidade. Uma mente focada sobre
qualidade necessria para descobrir erros e defeitos assim que possam
ser endereados imediatamente.
5. Requisitos de usurios administradores porque mudaro ao
longo do tempo. Requisitos so a base para definir as caractersticas da
qualidade de software.
Qualidade de software
16 UNIDADE 01
necessrio explicitar, especificar e priorizar.
2. Padres definem um de critrios de desenvolvimento que iro
mostrar a maneira com a qual o software ser desenvolvido.
3. Caractersticas implcitas devero ser identificadas e
documentadas; elas influenciam na maneira de como o software ser
desenvolvido assim como sua manutenibilidade.
Algoritmos e Programao II 17
Procedimentos de erros reportados e monitorados;
Documentos que devem ser produzidos;
Conjunto de respostas que se fizer necessrio.
18 UNIDADE 01
3. Assegurar-se que o software esteja de acordo com os padres
definidos;
4. Conseguir que o software seja desenvolvido de uma maneira
uniforme; e
5. Desenvolver projetos mais gerenciveis.
Algoritmos e Programao II 19
Mtodo de inspeo de Fagan
20 UNIDADE 01
Preparando. Cada inspetor ter de 1 a 2 horas sozinho para
inspecionar o produto de trabalho e ir executar as regras passadas a ele
com base na documentao provida pelo moderador, tentando descobrir
defeitos no produto de trabalho. O inspetor no dever reparar defeitos
ou criticar o desenvolvedor do produto de trabalho.
Realizando a reunio. Os participantes da reunio so
inspetores, moderadores e desenvolvedores do produto de trabalho. Os
desenvolvedores do produto de trabalho esto presentes para explicar o
produto de trabalho, e responder s perguntas que os inspetores fizerem.
Nenhuma discusso se o defeito ou no real permitida. Uma lista de
defeitos deve ser produzida pelo moderador.
Refazendo o produto de trabalho. A lista de defeitos deve ser
atribuda a uma pessoa para repar-la. Normalmente, essa pesoa o
desenvolvedor do produto de trabalho.
Acompanhando os reajustes. O moderador assegura-se que os
defeitos nos produtos de trabalho sejam endereados e solucionados.
Mais tarde esse moderador deve ser inspecionado por outro inspetor.
Realizando uma reunio ocasional de anlise. Isso opcional,
momento onde dada a possibilidade aos inspetores de expressarem
sua viso pessoal sobre erros e melhorias. A nfase dada maneira
que a inspeo foi feita.
Walkthrough
Algoritmos e Programao II 21
Nenhuma contagem ou atribuio de nota;
Criticar o produto; no a pessoa;
Sempre documentar a lista de aes.
O que documentao?
22 UNIDADE 01
ou prottipos.
MOTIVACIONAL, como por exemplo, brochuras, demonstraes
ou prottipos.
H vrios tipos de documentao e informaes funcionais do
produto. Alguns so citados abaixo:
Caractersticas e funes do sistema
Sumrio gerencial e do usurio
Manual do usurio
Manual de administrao do sistema
Vdeo
Multimdia
Tutoriais
Demonstraes
Guia de referncia
Guia de referncia rpida
Referncias tcnicas
Arquivos de manuteno do sistema
Modelos de teste do sistema
Procedimentos de converso
Manual de operaes/operador
Help on-line
Wall charts
Layout de teclado ou templates
Jornais
Algoritmos e Programao II 23
A distribuio e uso do sistema Ajudar os usurios a se adaptarem ao
sistema.
Alertar sobre problemas no sistema.
Negar responsabilidades.
24 UNIDADE 01
Desafio:
Algoritmos e Programao II 25
Linguagens de montagem de baixo nvel
26 UNIDADE 01
Para entendermos o funcionamento desse ciclo na soluo de
problemas no computador, vamos definir um problema exemplo que
iremos resolver passo a passo enquanto discutimos as metodologias
para resoluo de problemas em detalhe.
Definir o problema
Analisar o problema
Sada do programa:
O nmero de vezes que o nome aparece em uma lista
Algoritmos e Programao II 27
Projetar e representar o algoritmo
28 UNIDADE 01
Expressando a soluo atravs de pseudocdigo:
Algoritmos e Programao II 29
Codificar e depurar
30 UNIDADE 01
Na maioria das vezes, depois do programador ter escrito o
programa, este poder no estar funcionando 100% no incio, mas
o programador pode corrigir o programa no caso de erros (tambm
conhecidos como Erros de Compilao) que ocorrem no programa. Esse
processo chamado de depurao de erros (debug).
Existem dois tipos de erros que os programadores podero
encontrar. O primeiro o erro em tempo de compilao e o outro o erro
em tempo de execuo.
Erro em tempo de compilao ocorre se houver um erro de sintaxe
no cdigo. Nesse caso, o compilador ir detectar o erro e o programa
nem mesmo compilar, sendo que o programador ficar inapto a criar
um executvel que possa ser executado pelo usurio at que o erro seja
corrigido.
Esquecer um ponto-e-vrgula no final de uma instruo ou
escrever um comando erroneamente, por exemplo, so erros em tempo
de compilao. algo que o compilador pode detectar como sendo um
erro.
Compiladores no so perfeitos e ento no podem detectar todos
os erros em tempo de compilao. Isso especialmente verdadeiro para
erros de lgica como as repeties (loops) infinitos. Este tipo de erro
chamado de erro em tempo de execuo.
Por exemplo, a sintaxe do cdigo pode estar correta. Entretanto,
ao seguir a lgica do cdigo, o mesmo pedao de instruo executado
vrias e vrias vezes, infinitamente. Assim, os compiladores no so
espertos o suficiente para pegar todos estes tipos de erro em tempo de
compilao, consequentemente, o programa compila corretamente em
um arquivo executvel.
Porm, quando o usurio final roda o programa, o programa (ou
mesmo o computador inteiro) congela devido a uma repetio infinita.
Outros tipos de erro em tempo de execuo so: um valor errado a ser
computado, uma instruo errada a ser executada, etc.
Algoritmos e Programao II 31
a) Assar po
b) Acessar o computador
c) Obter a mdia de trs nmeros
2. Com base na figura abaixo, defina um problema simples, faa a
anlise de como o problema ser resolvido, represente o problema em
fluxograma e codifique em pseudocdigo (portugol).
Desafio:
Suponha que um certo instituto deseja fazer uma pesquisa de
opinio pblica. Os dados sero coletados nos bairros da vrias cidades.
Os dados sero armazenados e devero ser processados para gerar os
relatrios estatsticos da pesquisa. Construa um fluxograma de como
ser o processo de coleta, processamento e resultados do sistema.
Um pouco da histria
32 UNIDADE 01
projetos desenvolvidos utilizando Java era um controle remoto pessoal
chamado *7 (Star Seven).
Ao mesmo tempo, a World Wide Web e a Internet foram ganhando
popularidade. Gosling achava que a linguagem Java poderia ser usada
para programao da Internet.
Um ambiente de desenvolvimento
Um ambiente de aplicao
Um ambiente de distribuio
Algoritmos e Programao II 33
Algumas caractersticas do Java
Garbage collection
34 UNIDADE 01
de memria de forma que os demais programas a utilizem novamente.
Em C, C++ e outras linguagens o programador o responsvel por isso.
Isso, s vezes, pode ser difcil j que instncias podem ser esquecidas
de serem desalocadas da memria pelos programadores e resultar no
que chamamos de escapes da memria.
Em Java, o programador no possui a obrigao de retirar uma
varivel criada das reas de memria, isto feito por uma parte da JVM
especfica que chamamos de Garbage Collection. O Garbage Collection
o grande responsvel pela liberao automtica do espao em memria.
Isso acontece automaticamente durante o tempo de vida do
programa Java.
Segurana do cdigo
Algoritmos e Programao II 35
O primeiro passo para a criao de um programa Java escrever
os programas em um editor de texto. Exemplos de editores de texto que
podem ser utilizados: bloco de notas, vi, emacs, etc. Esses arquivos so
armazenados no disco rgido com a extenso .java.
Aps o programa Java ter sido criado e salvo, compile o programa
utilizando o compilador Java. A sada desse processo um arquivo de
bytecode com extenso .class.
O arquivo .class ento lido pelo Interpretador Java que converte
os bytecodes em linguagem de mquina do computador que se est
usando.
Tarefa Ferramenta utilizada Sada
Escrever o programa Qualquer editor de texto Arquivo com extenso .java
Compilar o programa Compilador Java Arquivo com extenso .class
(Java bytecode)
Executar o programa Interpretador Java Sada do programa
Desafio:
Pesquise e relacione os sistemas middlewares (mquinas virtuais)
existentes para linguagens e aplicativos. Descreva a funo de cada um.
36 UNIDADE 01
Instalao do Java e do NetBeans
Algoritmos e Programao II 37
Passo 3: Duplo-clique no arquivo jdk-1_5_0_07-linux-i586.bin.
A caixa de dilogo abaixo ser mostrada. Pressione o boto Run in
Terminal.
sudo ln -s /usr/java/jdk1.5.0_07/bin/* .
38 UNIDADE 01
Permissions, e marque a opo Execute.
Encerre a janela.
Algoritmos e Programao II 39
concorde, selecione a opo I accept the terms in the license agreement,
e ento pressione o boto Next >.
Modifique o nome do diretrio para: /usr/java/netbeans-5.5, ento
pressione o boto Next >.
A prxima caixa de dilogo mostra apenas informaes sobre o
NetBeans que voc est instalando. Pressione o boto Next >. Aguarde
o NetBeans terminar o processo de instalao.
40 UNIDADE 01
Pressione o boto Finish para completar a instalao.
Algoritmos e Programao II 41
Primeiro Programa Java com a IDE NetBeans
42 UNIDADE 01
aberta e insira as seguintes instrues:
Para o Linux:
$ md myJavaPrograms
Em Linux:
Normalmente, quando abrimos uma janela terminal, ela vai
diretamente para sua pasta home (identificada por $). Para ver o que
tem dentro do diretrio, digite ls (LS em minscula, significando "List
Sources") e pressione ENTER. Isso far com que sejam listados os
arquivos e pastas da pasta home.
Verifique a existncia de uma pasta chamada "myJavaPrograms",
criada a pouco, sendo esta o local em que foi salvo o programa "Hello.
java". Mudaremos o contexto para essa pasta.
Para entrar nessa pasta, devemos utilizar o comando: cd [nome
da pasta]. O comando "cd" significa "Change Directory". Digitaremos:
$ cd myJavaPrograms
Algoritmos e Programao II 43
executando o comando ls (LS em minscula) novamente.
javac Hello.java
java Hello
Hello world!
Erros
44 UNIDADE 01
Erros de sintaxe
Algoritmos e Programao II 45
fechar o bloco do mtodo main. O erro est exatamente na linha anterior.
Como regra, ao encontrar muitas mensagens de erros, devemos
corrigir o primeiro erro da lista e tentar novamente compilar o programa.
Desse modo, reduziremos o nmero total de mensagens de erro
dramaticamente, pois podem existir o que chamamos de erros derivados,
ou seja, um erro que tem por causa a instruo anterior.
Usando NetBeans
46 UNIDADE 01
Passo 2: Construir o projeto
Algoritmos e Programao II 47
Troque o local da aplicao clicando no boto "Browse...".
Aparecer uma janela de dilogo para localizao do diretrio. D um
clique duplo no seu diretrio home.
48 UNIDADE 01
Veja que a localizao do projeto mudou para /home/florence/
MYJAVAPROGRAMS.
Finalmente, no campo "Create Main Class", digite "Hello", que
ser o nome da classe principal, e em seguida clique no boto "Finish".
Algoritmos e Programao II 49
cria um cdigo bsico para o programa Java. Poderemos adicionar
as declaraes nesse cdigo gerado. No lado esquerdo da janela
visualizamos uma lista de pastas e arquivos que o NetBeans gerou antes
de criar o projeto.
Tudo se encontra dentro da sua pasta MYJAVAPROGRAMS, onde
foi configurado o local do projeto. No lado direito, visualizamos o cdigo
gerado.
50 UNIDADE 01
utilizaremos para este exemplo a primeira instruo. Insira esta instruo
aps a linha de comentrio (que ser desprezada pelo compilador):
//TODO code application logic here.
Algoritmos e Programao II 51
Se no existir erros no programa, veremos a mensagem de
sucesso na janela de sada.
52 UNIDADE 01
O resultado final do programa, ser mostrado na janela de sada.
Desafio:
Algoritmos e Programao II 53
Entrada e Sada de Dados
import java.io.*;
try {
String temp = dataIn.readLine();
} catch (IOException e) {
System.out.println("Error in getting input");
}
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class GetInputFromKeyboard {
public static void main(String[] args) {
BufferedReader dataIn = new BufferedReader(new
InputStreamReader(System.in));
String name = "";
54 UNIDADE 01
System.out.print("Please Enter Your Name:");
try {
name = dataIn.readLine();
} catch (IOException e) {
System.out.println("Error!");
}
System.out.println("Hello " + name +"!");
}
}
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.*;
Algoritmos e Programao II 55
Na instruo:
BufferedReader dataIn = new BufferedReader(new
InputStreamReader(System.in));
name = dataIn.readLine();
56 UNIDADE 01
Praticando!
1. import javax.swing.*;
2.
3. public class InputTest
4. {
5. public static void main(String[] args)
6. {
7. // get first input
8. String name = JOptionPane.showInputDialog
9. ("What is your name?");
10.
11. // get second input
12. String input = JOptionPane.showInputDialog
13. ("How old are you?");
14.
15. // convert string to integer value
16. int age = Integer.parseInt(input);
17.
18. // display output on console
19. System.out.println("Hello, " + name +
20. ". Next year, you'll be " + (age + 1));
21.
22. System.exit(0);
23. }
24. }
import java.util.Scanner;
public class GetInputFromScanner
{
Algoritmos e Programao II 57
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Please Enter Your Name:");
String name = sc.next();
System.out.println("Hello " + name +"!");
}
}
import java.util.Scanner;
58 UNIDADE 01
Mtodo Finalidade
next() Aguarda uma entrada em formato String
nextInt() Aguarda uma entrada em formato Inteiro
nextByte() Aguarda uma entrada em formato Inteiro
nextLong() Aguarda uma entrada em formato Longo
nextFloat() Aguarda uma entrada em formato Nmero Fracionrio
nextDoublet() Aguarda uma entrada em formato Nmero Fracionrio
import javax.swing.JOptionPane;
public class GetInputFromKeyboard {
public static void main( String[] args ){
String name = "";
name = JOptionPane.showInputDialog("Please enter your name");
String msg = "Hello " + name + "!";
JOptionPane.showMessageDialog(null, msg);
{
{
Algoritmos e Programao II 59
A primeira instruo:
import javax.swing.JOptionPane;
import javax.swing.*
A instruo seguinte:
60 UNIDADE 01
na varivel do tipo String name.
Na prxima instruo, criamos uma mensagem de cumprimento,
que ficar armazenada na varivel msg:
String msg = "Hello " + name + "!"
JOptionPane.showMessageDialog(null, msg;
Algoritmos e Programao II 61
linhas do cdigo.
1. import javax.swing.*;
2.
3. public class SimpleFrameTest
4. {
5. public static void main(String[] args)
6. {
7. SimpleFrame frame = new SimpleFrame();
8. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
9. frame.show();
10. }
11. }
12.
13. class SimpleFrame extends JFrame
14. {
15. public SimpleFrame()
16. {
17. setSize(WIDTH, HEIGHT);
18. }
19.
20. public static final int WIDTH = 300;
21. public static final int HEIGHT = 200;
22. }
62 UNIDADE 01
UNIDADE 02
Estruturas de Controle
OBJETIVOS:
Desenvolver a capacidade e abstrao na especificao ds algoritmos
de acordo com os problemas apresentados.
Estruturas de
Controle
Declarao if
Dicas de programao:
1. Expresso lgica uma declarao que possui um valor lgico.
Isso significa que
a execuo desta expresso deve resultar em um valor true ou false.
2. Coloque as instrues de forma que elas faam parte do bloco if.
Por exemplo:
if (expresso_lgica) {
// instruo1;
// instruo2;
}
if (expresso_lgica)
instruo;
ou:
if (expresso_lgica) {
Algoritmos e Programao II 65
instruo1;
instruo2
...
}
true false
Condio
Lgica
Instruo
Caso TRUE
ou:
Declarao if-else
66 UNIDADE 02
if (expresso_lgica)
instruo_caso_verdadeiro;
else
instruo_caso_falso;
if (expresso_lgica) {
instruo_caso_verdadeiro1;
instruo_caso_verdadeiro2;
...
} else {
instruo_caso_falso1;
instruo_caso_falso2;
...
}
Dicas de programao:
1. Para evitar confuso, sempre coloque a instruo ou instrues
contidas no
bloco if ou if-else entre chaves {}.
2. Pode-se ter declaraes if-else dentro de declaraes if-else, por
exemplo:
if (expresso_lgica) {
if (expresso_lgica) {
...
} else {
...
}
} else {
...
}
Algoritmos e Programao II 67
int grade = 68;
if (grade > 60) {
System.out.print("Congratulations! ");
System.out.println("You passed!");
} else {
System.out.print("Sorry ");
System.out.println("you failed");
}
true false
Condio
Lgica
Instruo Instruo
Caso TRUE Caso FALSE
Declarao if-else-if
if (expresso_lgica1)
instruo1;
else if(expresso_lgica2)
instruo2;
else
instruo3;
68 UNIDADE 02
instruo1 e salta as outras instrues. Caso contrrio, se a expresso_
lgica1 falsa,o fluxo de controle segue para a anlise lgica da
expresso_lgica2
Se esta for verdadeira, o programa executa a instruo2 e salta
a instruo3. Caso contrrio, se a expresso_lgica2 falsa, ento a
instruo3 executada.
Algoritmos e Programao II 69
System.out.println("Sorry, you failed.");
}
}
}
// ERRADO
int number = 0;
if (number) {
// algumas instrues aqui
}
// ERRADO
int number = 0;
if (number = 0) {
// algumas instrues aqui
}
// ERRADO
int number = 0;
if (number == 0) {
// algumas instrues aqui
} elseif (number == 1) {
// algumas instrues aqui
}
70 UNIDADE 02
Declarao switch
Notas:
1. Ao contrrio da declarao if, mltiplas instrues so executadas sem
a necessidade das chaves que determinam o incio e trmino de bloco {}.
2. Quando um case for selecionado, todas as instrues vinculadas ao
case sero executadas. Alm disso, as instrues dos case seguintes
tambm sero executadas.
3. Para prevenir que o programa execute instrues dos outros case
subsequentes, utilizamos a declarao break aps a ltima instruo de
cada case.
switch (varivel_inteira) {
case valor1:
instruo1; //
instruo2; // bloco 1
... //
break;
case valor2:
instruo1; //
instruo2; // bloco 2
... //
break;
default:
instruo1 ; //
instruo2; // bloco n
... //
break;
}
Algoritmos e Programao II 71
Dicas de Programao:
1. A deciso entre usar uma declarao if ou switch subjetiva. O
programador pode decidir com base na facilidade de entendimento
do cdigo, entre outros fatores.
2. Uma declarao if pode ser usada para decises relacionadas
a conjuntos, escalas de variveis ou condies, enquanto que a
declarao switch pode ser utilizada para situaes que envolvam
varivel do tipo inteiro. Tambm necessrio que o valor de cada
clusula case seja nico.subsequentes; utilizamos a declarao
break aps a ltima instruo de cada case onde, varivel_inteira
uma varivel de tipo byte, short, char ou int; valor1, valor2, e assim
por diante, so valores constantes que esta varivel pode assumir.
72 UNIDADE 02
Exemplo para switch
Algoritmos e Programao II 73
2. Solicite ao usurio para digitar um nmero, e mostre-o por extenso.
Esse nmero dever variar entre 1 e 10. Se o usurio introduzir um nmero
que no est nesse intervalo, mostre: "nmero invlido".
Faa duas verses deste programa:
a) Use uma declarao if-else-if para resolver este problema
b) Use uma declarao switch para resolver este problema
Desafio
74 UNIDADE 02
Estrutura de Controle de Repetio: while, do-while, for
Declarao while
Algoritmos e Programao II 75
...
}
As instrues contidas dentro do bloco while so executadas
repetidas vezes enquanto o valor de expresso_lgica for verdadeira.
Por exemplo, dado o trecho de cdigo:
int i = 4;
while (i > 0){
System.out.print(i);
i--;
}
Praticando!
Digite os exemplos abaixo e observe como funciona a instruo
while em diversar formas. Lembre-se da anatomia de um cdigo em Java.
Exemplo 1
int x = 0;
while (x<10) {
System.out.println(x);
x++;
}
Exemplo 2
// lao infinito
while (true)
System.out.println("hello");
Exemplo 3
76 UNIDADE 02
// a instruo do lao no ser executada
while (false)
System.out.println("hello");
Declarao do-while
A declarao do-while similar ao while. As instrues dentro do
lao do-while sero executadas pelo menos uma vez.
A declarao do-while possui a seguinte forma:
do {
instruo1;
instruo2;
...
} while (expresso_lgica);
Dicas de programao:
1. Erro comum de programao ao utilizar o lao do-while
esquecer o ponto-e vrgula (;) aps a declarao while.
do {
...
} while (boolean_expression) // ERRADO -> faltou ;
2. Como visto para a declarao while, tenha certeza que a
declarao do-while
Algoritmos e Programao II 77
executam as instrues e depois realiza-se a avaliao da expresso
lgica, ou seja, as instrues dentro em um lao do-while so executadas
pelo menos uma vez.
Praticando!
Exemplo 1
int x = 0;
do {
System.out.println(x);
x++;
} while (x<10);
Exemplo 2
// lao infinito
do {
System.out.println("hello");
} while(true);
Exemplo 3
Declarao for
78 UNIDADE 02
A declarao for possui a seguinte
forma:
for (declarao_inicial;
expresso_lgica; salto) {
instruo1;
instruo2;
...
}
onde:
int i = 0;
while (i < 10) {
System.out.print(i);
i++;
}
Algoritmos e Programao II 79
Praticando!
80 UNIDADE 02
22 total = 0; // clear total
23 gradeCounter = 0; // prepare to loop
24
25 // Processing phase
26 // prompt for input and read grade from user
27 input = JOptionPane.showInputDialog(
28 "Enter Integer Grade, -1 to Quit:" );
29
30 // convert grade from a String to an integer
31 gradeValue = Integer.parseInt( input );
32
33 while ( gradeValue != -1 ) {
34
35 // add gradeValue to total
36 total = total + gradeValue;
37
38 // add 1 to gradeCounter
39 gradeCounter = gradeCounter + 1;
40
41 // prompt for input and read grade from user
42 input = JOptionPane.showInputDialog(
43 "Enter Integer Grade, -1 to Quit:" );
44
45 // convert grade from a String to an integer
46 gradeValue = Integer.parseInt( input );
47 }
48
49 // Termination phase
50 DecimalFormat twoDigits = new DecimalFormat( "0.00" );
51
52 if ( gradeCounter != 0 ) {
53 average = (double) total / gradeCounter;
54
55 // display average of exam grades
56 JOptionPane.showMessageDialog( null,
57 "Class average is " + twoDigits.format( average ),
58 "Class Average", JOptionPane.INFORMATION_MESSAGE );
59 }
60 else
61 JOptionPane.showMessageDialog( null,
62 "No grades were entered", "Class Average",
63 JOptionPane.INFORMATION_MESSAGE );
64
65 System.exit( 0 ); // terminate application
66
67 } // end method main
68
69 } // end class Average2
Algoritmos e Programao II 81
1. Crie um programa que mostre seu nome cem vezes. Faa trs verses
deste programa:
a) Use uma declarao while para resolver este problema
b) Use uma declarao do-while para resolver este problema
c) Use uma declarao for para resolver este problema
Desafio
Encontre e faa a devida correo dos erros em cada um dos
fragmentos de cdigo abaixo.
// Cod B
switch ( n ) {
case 1:
// Cod A
System.out.println("The number is 1");
x = 1;
case 2:
while ( x <= 10 );
System.out.println("The number is 2");
x++;
break;
}
default:
System.out.println("The number is not 1 or 2");
break;
}
82 UNIDADE 02
Estrutura de Controle de Interrupo: break, continue e return
Declaraes de interrupo
Declaraes de interrupo permitem que redirecionemos o fluxo
de controle do programa. A linguagem Java possui trs declaraes de
interrupo. So elas: break, continue e return.
Declarao break
A declarao break possui duas formas: unlabeled (no
identificada - vimos esta forma com a declarao switch) e labeled
(identificada).
Algoritmos e Programao II 83
Neste exemplo, se a String Yza for encontrada, a declarao
for ser interrompida e o controle do programa ser transferido para a
prxima instruo abaixo da declarao for.
84 UNIDADE 02
Declarao continue
A declarao continue tem duas formas: unlabeled e labeled.
Utilizamos uma declarao continue para saltar a repetio atual de
declaraes for, while ou do-while.
Algoritmos e Programao II 85
atingir o valor 2 do lao interno.
Declarao return
A declarao return utilizada para sair de um mtodo. O fluxo
de controle retorna para a declarao que segue a chamada do mtodo
original. A declarao de retorno possui dois modos: o que retorna um
valor e o que no retorna nada.
Para retornar um valor, escreva o valor (ou uma expresso que
calcula este valor) depois da palavra chave return. Por exemplo:
return ++count;
ou
return "Hello";
Praticando!
Digite o programa abaixo. Veja que brincadeira legal com o uso do
continue.
86 UNIDADE 02
Algoritmos e Programao II 87
1. Execute o programa abaixo. Se faz o lao de 1 a 10 vezes, por que
imprime somente at 5? Faa o teste passo a passo no algoritmo.
// BreakTeste.java
// Lao 10 vezes
import javax.swing.JOptionPane;
public class BreakTest {
public static void main( String args[] ) {
String output = "";
int count;
for ( count = 1; count <= 10; count++ ) {
if ( count == 5 )
break;
output += count + " ";
}
output += "\nLao = " + count;
JOptionPane.showMessageDialog( null, output );
System.exit( 0 );
}
}
88 UNIDADE 02
Esta unidade apresentou as estruturas de controles bsicas como
desvios condicionais simples (IF/then) e compostos (IF/tem/else); e
repeties condicionais com teste no incio (while/for) e no final (do/while)
das estruturas da programao Java. Essas estruturas so importantes
na especificao de algoritmos, pois de acordo com as entradas, o fluxo
de execuo do algoritmo pode ser alterado.
Algoritmos e Programao II 89
90 UNIDADE 03
UNIDADE 03
Arranjos e Argumentos
OBJETIVOS:
Conhecer as estruturas de dados bsicas constantes nos programas e
saber empregl-as no momento da especificao do modo que o cdigo
fique mais claro e otimizvel.
Arranjos e
argumentos
Array em Java
Introduo a array
Em lies anteriores, discutimos como declarar diferentes
variveis usando os tipos de dados primitivos. Na declarao de variveis,
freqentemente utilizamos um identificador ou um nome e um tipo de
dados. Para se utilizar uma varivel, deve-se cham-la pelo nome que a
identifica.
Por exemplo, temos trs variveis do tipo int com diferentes
identificadores para cada varivel:
int number1;
int number2;
int number3;
number1 = 1;
number2 = 2;
number3 = 3;
Algoritmos e Programao II 93
Um array armazena mltiplos itens de um mesmo tipo de dado
em um bloco contnuo de memria, dividindo-o em certa quantidade de
posies. Imagine um array como uma varivel esticada que tem um
nome que a identifica e que pode conter mais de um valor para esta
mesma varivel.
Declarando array
Array precisa ser declarado como qualquer varivel. Ao declarar
um array, defina o tipo de dados deste, seguido por colchetes [] e pelo
nome que o identifica.
Por exemplo:
int [] ages;
int ages[];
// declarao
int ages[];
// construindo
ages = new int[100];
// declarar e construir
int ages[] = new int[100];
94 UNIDADE 03
array, tambm possvel automaticamente declarar, construir e adicionar
um valor uma nica vez.
Exemplos:
// criando um array de valores lgicos em uma varivel
// results. Este array contm 4 elementos que so
// inicializados com os valores {true, false, true, false}
boolean results[] ={ true, false, true, false };
// criando um array de 4 variveis double inicializados
// com os valores {100, 90, 80, 75};
double []grades = {100, 90, 80, 75};
// criando um array de Strings com identificador days e
// tambm j inicializado. Este array contm 7 elementos
String days[] = {"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};
Algoritmos e Programao II 95
Por exemplo, dado o array ages que declaramos anteriormente,
temos:
// atribuir 10 ao primeiro elemento do array
ages[0] = 10;
Dicas de programao:
1. Quando criar laos com for para o processamento de um array, utilize o
campo
length como argumento da expresso lgica. Isso ir permitir ao lao ajustar-se,
automaticamente para tamanhos de diferentes arrays.
2. Declare o tamanho dos arrays, utilizando variveis do tipo constante para
facilitar
alteraes posteriores. Por exemplo:
final int ARRAY_SIZE = 1000; // declarando uma constante
...
int[] ages = new int[ARRAY_SIZE];
96 UNIDADE 03
public class ArraySample {
public static void main(String[] args){
String [] nulls = new String[2];
System.out.print(nulls[0]);
// Linha correta, mostra null
System.out.print(nulls[1].trim());
// Causa erro
}
}
Tamanho de array
Para se obter o nmero de elementos de um array, pode-se utilizar
o atributo length. O atributo length de um array retorna seu tamanho,
ou seja, a quantidade de elementos. utilizado como no cdigo abaixo:
nomeArray.length
Algoritmos e Programao II 97
Arrays multidimensionais
Arrays multidimensionais so implementados como arrays dentro
de arrays. So declarados ao atribuir um novo conjunto de colchetes
depois do nome do array. Por exemplo:
// array de caracteres de 8 x 16 x 24
char [][][] threeD = new char[8][16][24];
98 UNIDADE 03
"Friday", "Saturday", "Sunday"};
Name : Joyce
Tel. # : 983-3333
Address: Quezon City
Name : Becca
Tel. # : 456-3322
Address: Manila
Desafio:
1. O programa abaixo ler os argumentos na linha de comando e coloca no
array de args. Altere esse programa para mostrar as opes disponveis,
caso o usurio entre com argumentos invlidos.
Algoritmos e Programao II 99
2. Escreva um programa para ler um conjuto de elementos, armazenar em
arrays, classificar em ordem crescente e imprimir os elementos do array.
Argumentos em Java
Dicas de programao:
1. Antes de usar os argumentos de linha de comando, observe a quantidade
de argumentos passados para a aplicao. Deste modo, nenhuma exceo
ser disparada.
100 UNIDADE 03
utilizando-se o atributo length do array.
Por exemplo:
int numberOfArgs = args.length;
Praticando!
102 UNIDADE 03
A janela "Project Properties" ir aparecer, conforme a figura
abaixo:
Execute o projeto.
104 UNIDADE 03
Como pode-se ver, a sada do projeto a quantidade de
argumentos, que 5, e o primeiro argumento passado, que tambm 5.
world
that
is
all
sum = 24
subtraction = 16
multiplication = 80
division = 5
Desafio
Altere o programa abaixo para receber os parmetros, atravs da
linha de comando.
import javax.swing.*;
public class InputArgs {
public static void main(String[] args) {
String name = JOptionPane.showInputDialog
("What is your name?");
String input = JOptionPane.showInputDialog
("How old are you?");
int age = Integer.parseInt(input);
System.out.println("Hello, " + name +
". Next year, you'll be " + (age + 1));
System.exit(0);
}
}
106 UNIDADE 03
UNIDADE 04
Paradigma de Programao
Orientada a Objetos
OBJETIVOS:
Conhecer fundamentalmente os recursos de programao orientada
por objetos como uma ferramenta poderosa que pode gerar cdigos
sofisticados e complexos.
Implementar os algoritmos de interesse do aprendiz, usando a
linguagem Java, para solidificar os conhecimentos adquiridos nas sub-
unidades anteriores.
Paradigma de
Programao Orientada
a Objetos
Classes e Objetos
110 UNIDADE 04
Quando construdos, cada objeto adquire um conjunto novo de
estado. Entretanto, as implementaes dos mtodos so compartilhadas
entre todos os objetos da mesma classe.
As classes fornecem o benefcio da Reutilizao de Classes (ou
seja, utilizar a mesma classe em vrios projetos). Os programadores de
software podem reutilizar as classes vrias vezes para criar os objetos.
Encapsulamento
Encapsulamento um princpio que prope ocultar determinados
elementos de uma classe das demais classes. Ao colocar uma proteo
ao redor dos atributos e criar mtodos para prover o acesso a estes, desta
forma estaremos prevenindo contra os efeitos colaterais indesejados
que podem afet-los ao ter essas propriedades modificadas de forma
inesperada.
Podemos prevenir o acesso aos dados dos nossos objetos
declarando que temos controle desse acesso. Aprenderemos mais sobre
como Java implementa o encapsulamento quando discutirmos mais
detalhadamente sobre as classes.
Instncia de Classe
Para criar um objeto ou uma instncia da classe, utilizamos o
operador new. Por exemplo, para criar uma instncia da classe String,
escrevemos o seguinte cdigo:
ou, o equivalente:
Mtodos
112 UNIDADE 04
retornado a quem o chamou.
O que necessrio para se criar mtodos? Por que no colocamos
todas as instrues dentro de um grande mtodo? O foco dessas
questes chamado de decomposio. Conhecido o problema, ns o
separamos em partes menores, que torna menos crtico o trabalho de
escrever grandes classes.
Usando os mtodos:
String str1 = "Hello";
char x = str1.charAt(0); // retornar o caracter H
// e o armazenar no atributo x
String str2 = "hello";
// aqui ser retornado o valor booleano true
boolean result = str1.equalsIgnoreCase(str2);
114 UNIDADE 04
Envio por referncia
Dicas de
programao:
Quando ocorre um envio por referncia, a referncia de um
objeto enviada para o mtodo chamado. Isso significa que o mtodo 1. Um erro comum
faz uma cpia da referncia do objeto enviado. sobre envio por
referncia acontece
Entretanto, diferentemente do que ocorre no envio por valor, o
quando criamos
mtodo pode modificar o objeto para o qual a referncia est apontando. um mtodo para
Mesmo que diferentes referncias sejam usadas nos mtodos, a fazer trocas (swap)
localizao do dado para o qual ela aponta a mesma. Por exemplo: usando referncia.
Note que Java
manipula objetos
'por referncia',
entretanto envia-se
a referncia para um
mtodo 'por valor'.
Como consequncia,
no se escreve um
mtodo padro para
fazer troca de valores
(swap) entre objetos.
NomeClasse.nomeMtodoEsttico(argumentos)
Escopo de um atributo
116 UNIDADE 04
do bloco.
Por exemplo, dado o seguinte fragmento de cdigo:
O escopo do atributo i A.
O escopo do atributo j B.
O escopo do atributo k C.
O escopo do atributo m D.
O escopo do atributo n E.
ages[] - escopo A
i em B - escopo B
i em C escopo C
arr[] - escopo D
i em E - escopo E
{
int test = 10;
int test = 20;
}
Dicas de programao:
1. Evite ter atributos declarados com o mesmo nome dentro de um mtodo para
no causar confuso.
118 UNIDADE 04
Quando a primeira instruo System.out.print for invocada,
exibir o valor 10 contido na primeira declarao do atributo test. Na
segunda instruo System.out.print, o valor 20 exibido, pois o valor
do atributos test neste escopo.
Casting de Objetos
120 UNIDADE 04
esse objeto sem o casting.
O contrrio tambm verdadeiro, pois uma superclasse pode
ser usada quando uma subclasse esperada. Entretanto, nesse caso,
o casting necessrio porque as subclasses contm mais mtodos que
suas superclasses, e isso acarreta em perda de preciso. Os objetos das
superclasses podem no dispor de todo o comportamento necessrio
para agir como um objeto da subclasse. Por exemplo, se uma operao
faz a chamada a um mtodo de um objeto da classe Integer, usando um
objeto da classe Number, ele no ter muitos dos mtodos que foram
especificados na classe Integer. Erros ocorrero se voc tentar chamar
mtodos que no existem no objeto de destino.
Para usar objetos da superclasse onde uma subclasse esperada,
necessrio fazer o casting explcito. Nenhuma informao ser
perdida no casting, entretanto, ganhar todos os atributos e mtodos que
a subclasse define. Para fazer o casting de um objeto para outro, utiliza-
se a mesma operao utilizada com os tipos primitivos.
Para fazer o casting:
(nomeClasse)objeto
onde:
nomeClasse o nome da classe destino;
objeto a referncia para o objeto origem que se quer converter.
Uma vez que casting cria uma referncia para o antigo objeto de
nomeClasse, ele continua a existir depois do casting.
Dicas de programao:
1. A classe Void representa vazio em Java. Desse modo, no existem motivos
para essa classe ser usada na converso de valores primitivos e objetos. Ela
um tratador para a palavra-chave void, que utilizada na assinatura de mtodos
indicando que estes no retornam valor.
122 UNIDADE 04
Usando as classes que correspondem a cada um dos tipos
primitivos, possvel criar objetos que armazenam esse mesmo valor.
Por exemplo:
Comparando Objetos
class EqualsTest {
public static void main(String[] args) {
String str1, str2;
str1 = "Free the bound periodicals.";
str2 = str1;
Dicas de programao:
1. Por que no se pode ter a mesma literal quando mudamos str2, a no ser
quando utilizamos o new? Literais String so otimizadas em Java; se uma String
criada utilizando uma literal e cria-se outra String com os mesmos caracteres,
Java tem inteligncia suficiente para retornar apenas a posio em memria do
primeiro objeto String criado. Ou seja, ambas strings se referem ao mesmo objeto
como se fosse um apelido. Para obrigar ao Java criar um novo objeto String,
deve-se utilizar o operador new.
124 UNIDADE 04
String1: Free the bound periodicals.
String2: Free the bound periodicals.
Same object? false
Same value? True
126 UNIDADE 04
3. Pipoy um novato na linguagem de programao Java. Ele apenas
ouviu que existem Java APIs (Application Programming Interface)
prontas para serem usadas em suas classes e ele est ansioso para
fazer uns testes com elas. O problema que Pipoy no tem uma cpia
da documentao Java e, tambm, no tem acesso Internet, desse
modo, no h como ele ver as APIs java.
Sua tarefa ajudar Pipoy a procurar as APIs. Voc deve informar
as classes s quais os mtodos pertencem e como o mtodo deve ser
declarado com um exemplo de uso desse mtodo.
Por exemplo, se Pipoy quer saber qual o mtodo que converte
uma String para int, sua resposta deve ser:
Classe: Integer
Declarao do Mtodo: public static int parseInt( String value )
Exemplo de Uso:
String strValue = "100";
int value = Integer.parseInt( strValue );
Desafio:
128 UNIDADE 04
// classe Empresa
public class Empresa
public static void main(String[] args) {
// fill the staff array with three Employee objects
Employee[] staff = new Employee[3];
staff[0] = new Employee("Tom", 40000);
staff[1] = new Employee("Dick", 60000);
staff[2] = new Employee("Harry", 65000);
// print out information about all Employee objects
for (int i = 0; i < staff.length; i++)
Employee e = staff[i];
e.setId();
System.out.println("name=" + e.getName()
+ ",id=" + e.getId()
+ ",salary=" + e.getSalary());
}
int n = Employee.getNextId(); // calls static method
System.out.println("Next available id=" + n);
}
}
// classe Empregado
class Employee {
public Employee(String n, double s) {
name = n;
salary = s;
id = 0;
}
public String getName() {
return name;
}
public double getSalary() {
return salary;
}
public int getId() {
return id;
}
public void setId() {
id = nextId; // set id to next available id
nextId++;
}
public static int getNextId() {
return nextId; // returns static field
}
public static void main(String[] args) // unit test {
Employee e = new Employee("Harry", 50000);
System.out.println(e.getName() + " " + e.getSalary());
}
private String name;
private double salary;
private int id;
Definindo classes
onde:
Dicas de programao:
1. Lembre-se de que, para a declarao da classe, o nico modificador de acesso
vlido o public. De uso exclusivo para a classe que possuir o mesmo nome do
arquivo externo.
Dicas de programao:
1. Pense em nomes apropriados para a sua classe. No a chame simplesmente
de classe XYZ ou qualquer outro nome aleatrio.
2. Os nomes de classes devem ser iniciadas por letra maiscula.
3. O nome do arquivo de sua classe obrigatoriamente possui o mesmo nome da
sua classe pblica.
130 UNIDADE 04
Para definir nossa classe, escrevemos:
onde:
Declarando atributos
onde:
nome - String
endereo - String
idade - int
nota de matemtica - double
nota de ingls - double
nota de cincias - double
Atributos de objeto
Dicas de programao:
1. Declare todas os atributos de objeto na parte superior da declarao da classe.
2. Declare cada atributo em uma linha.
3. Atributos de objeto, assim como qualquer outro atributo devem iniciar com letra
minscula.
4. Use o tipo de dado apropriado para cada atributo declarado.
5. Declare atributos de objetos como private de modo que somente os mtodos
da classe possam acess-los diretamente.
onde:
private significa que os atributos so acessveis apenas de dentro
da classe. Outros objetos no podem acessar diretamente estes atributos.
132 UNIDADE 04
Para declarar um atributo esttico:
Declarando mtodos
onde:
Mtodos assessores
onde:
A instruo:
return name;
134 UNIDADE 04
no mtodo, significa que retornar o contedo do atributo name
ao mtodo que o chamou. Note que o tipo do retorno do mtodo deve
ser do mesmo tipo do atributo utilizado na declarao return. O seguinte
erro de compilao ocorrer caso o mtodo e o atributo de retorno no
tenham o mesmo tipo de dados:
Mtodos modificadores
onde:
public significa que o mtodo pode ser chamado por objetos
externos classe
void significa que o mtodo no retorna valor
setName o nome do mtodo
(String temp) argumento que ser utilizado dentro do nosso
mtodo
A instruo:
name = temp;
136 UNIDADE 04
Mtodos estticos
Dicas de programao:
1. Nomes de mtodos devem iniciar com letra MINSCULA.
2. Nomes de mtodos devem conter verbos
3. Sempre faa documentao antes da declarao do mtodo. Use o estilo
javadoc para isso.
onde:
public significa que o mtodo pode ser chamado por objetos
externos classe.
static significa que o mtodo esttico e deve ser chamado
digitando-se [NomeClasse].[nomeMtodo].
int o tipo do retorno do mtodo. Significa que o mtodo deve
retornar um valor de tipo int.
getStudentCount nome do mtodo.
() significa que o mtodo no tem nenhum argumento.
138 UNIDADE 04
crisRecord.setName("Cris");
// mostrar o nome de anna
System.out.println(annaRecord.getName());
//mostrar o nmero de estudantes
System.out.println("Count=" +
StudentRecord.getStudentCount());
}
}
This
this.<nomeDoAtributo>
Overloading de Mtodos
140 UNIDADE 04
para a classe StudantRecordExample:
Name:Anna
Address:Philippines
Age:15
Name:Anna
Math Grade:80.0
English Grade:95.5
Science Grade:100.0
Declarando construtores
public StudentRecord() {
}
Overloading de construtores
public StudentRecord() {
// qualquer cdigo de inicializao aqui
}
public StudentRecord(String temp){
this.name = temp;
}
public StudentRecord(String name, String address) {
this.name = name;
142 UNIDADE 04
this.address = address;
}
public StudentRecord(double mGrade, double eGrade,
double sGrade) {
mathGrade = mGrade;
englishGrade = eGrade;
scienceGrade = sGrade;
}
Usando Construtores
public StudentRecord() {
studentCount++; // adicionar um estudante
}
public StudentRecord(String name) {
studentCount++; // adicionar um estudante
this.name = name;
}
public StudentRecord(String name, String address) {
studentCount++; // adicionar um estudante
this.name = name;
this.address = address;
Utilizando o this()
public StudentRecord() {
this("some string");
}
public StudentRecord(String temp) {
this.name = temp;
}
public static void main( String[] args ) {
StudentRecord annaRecord = new StudentRecord();
}
public StudentRecord() {
studentCount++; // adicionar um estudante
144 UNIDADE 04
}
public StudentRecord(String name) {
this();
this.name = name;
}
public StudentRecord(String name, String address) {
this(name);
this.address = address;
}
public StudentRecord(double mGrade, double eGrade,
double sGrade) {
this();
mathGrade = mGrade;
englishGrade = eGrade;
scienceGrade = sGrade;
}
Pacotes
Importando pacotes
import <nomeDoPacote>.<nomeDaClasse>;
import java.awt.Color;
import java.awt.*;
java.awt.Color color;
Criando pacotes
package <nomeDoPacote>;
package schoolClasses;
public class StudentRecord {
// instrues da classe
}
146 UNIDADE 04
C:\. Precisamos que a classpath aponte para este diretrio de tal forma
que, quando executemos a classe, a JVM seja capaz de enxergar o local
onde est armazenada.
Antes de discutirmos como ajustar a varivel classpath, vamos
ver um exemplo sobre o que aconteceria se esta no fosse ajustada.
Suponha que sigamos os passos para compilar e executar a classe
StudentRecord que escrevemos:
C:\schoolClasses>javac StudentRecord.java
C:\schoolClasses>java StudentRecord
Exception in thread "main" java.lang.NoClassDefFoundError:
StudentRecord
(wrong name: schoolClasses/StudentRecord)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
C:\schoolClasses>set classpath=C:\
C:\schoolClasses>java schoolClasses.StudentRecord
export classpath=/usr/local/myClasses
set classpath=C:\myClasses;D:\;E:\MyPrograms\Java
export classpath=/usr/local/java:/usr/myClasses
Modificadores de acesso
Acesso padro
148 UNIDADE 04
// acesso padro para o mtodo
String getName(){
return name;
}
}
Acesso pblico
Acesso protegido
Acesso particular
Dicas de programao:
Normalmente, os atributos de objeto de uma classe devem ser declarados
particulares e a classe pode fornecer mtodos assessores e modificadores para
esses atributos.
150 UNIDADE 04
Crie os seguintes mtodos:
a. Fornea todos os mtodos assessores e modificadores
necessrios para
todos os atributos.
b. Construtores.
2. Crie uma classe Agenda que possa conter entradas de objetos tipo
Registro de Agenda (utilize a classe criada no primeiro exerccio). Devem
ser oferecidos os seguintes mtodos para a agenda:
a. Adicionar registro
b. Excluir registro
c. Visualizar registros
d. Modificar um registro
Desafio
A empresa MagSoft contrata desenvolvedores para trabalhar em
projetos de software. Implemente uma soluo em Java para o controle
do empregados e projetos, usando pacote Java.
Herana
152 UNIDADE 04
A razo de termos feito isso que queremos que esses atributos
sejam acessveis s subclasses dessa classe. Se a declararmos com o
modificador private, as subclasses no estaro aptas a us-los. Todas
as propriedades de uma superclasse que so declaradas como public,
protected e default podem ser acessadas por suas subclasses.
Vamos criar outra classe chamada Student. E, como um estudante
tambm uma pessoa, conclumos que iremos estender a classe Person,
ento, poderemos herdar todas as propriedades existentes na classe
Person. Para isso, escrevemos:
Inside Person:Constructor
Inside Student:Constructor
Super
public Student(){
super( "SomeName", "SomeAddress" );
System.out.println("Inside Student:Constructor");
}
public Student(){
super();
System.out.println("Inside Student:Constructor");
}
public Student() {
super.name = "person name"; // Nome da classe pai
this.name = "student name"; // Nome da classe atual
{
Override de Mtodos
154 UNIDADE 04
implementao para aquele mtodo.
Supondo que tenhamos a seguinte implementao para o mtodo
getName da superclasse Person:
Student: getName
Polimorfismo
156 UNIDADE 04
Podemos criar uma referncia do tipo da superclasse para a
subclasse. Por exemplo:
Classes abstratas
158 UNIDADE 04
qual o seu comportamento. Entretanto, em muitos casos no sabemos
como estes mtodos se comportaro na classe que estamos criando,
e, por mera questo de padronizao, desejamos que as classes que
herdem dessa classe possuam, obrigatoriamente, esses mtodos.
Por exemplo, queremos criar uma superclasse chamada
LivingThing. Esta classe tem certos mtodos como breath, sleep e
walk. Entretanto, existem tantos mtodos nesta superclasse que no
podemos generalizar esse comportamento. Tome por exemplo, o mtodo
walk (andar). Nem todos os seres vivos andam da mesma maneira.
Tomando os humanos como exemplo, os humanos andam sobre duas
pernas, enquanto que outros seres vivos como os ces andam sobre
quatro. Entretanto, existem muitas caractersticas que os seres vivos tm
em comum, isso o que ns queremos ao criar uma superclasse geral.
Dicas de programao:
Use classes abstratas para definir muitos tipos de comportamentos no topo
de uma hierarquia de classes de programao orientada a objetos. Use suas
subclasses para prover detalhes de implementao da classe abstrata.
Interfaces
160 UNIDADE 04
comportamentos comuns.
Criando interfaces
interface Relation {
boolean isGreater(Object a, Object b);
162 UNIDADE 04
boolean isLess(Object a, Object b);
boolean isEqual( Object a, Object b);
}
/**
* Esta classe define um segmento de linha
*/
public class Line implements Relation {
private double x1;
private double x2;
private double y1;
private double y2;
public Line(double x1, double x2, double y1, double y2) {
this.x1 = x1;
this.x2 = x2;
this.y2 = y2;
this.y1 = y1;
}
public double getLength(){
double length = Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
return length;
}
public boolean isGreater( Object a, Object b){
double aLen = ((Line)a).getLength();
double bLen = ((Line)b).getLength();
return (aLen > bLen);
}
public boolean isLess( Object a, Object b){
double aLen = ((Line)a).getLength();
double bLen = ((Line)b).getLength();
return (aLen < bLen);
}
Dicas de programao:
Use interface para criar uma definio padro de mtodos em classes diferentes.
Uma vez que o conjunto de definies de mtodos criado, pode ser escrito um
mtodo simples para manipular todas as classes que implementam a interface.
164 UNIDADE 04
Herana entre interfaces
Tratando excees
try{
// escreva as instrues passveis de gerar uma exceo
// neste bloco
} catch (<exceptionType1> <varName1>){
// escreva a ao que o seu programa far caso ocorra
// uma exceo de um determinado
}...
} catch (<exceptionTypen> <varNamen>){
// escreva a ao que o seu programa far caso ocorra
// uma exceo de um determinado tipo
} finally {
// escreva a ao que o seu programa executar caso ocorra
// ou no um erro ou exceo
}
166 UNIDADE 04
OU um bloco finally, ou ambos.
Cada bloco catch define o tratamento de uma exceo.
O cabealho do bloco catch recebe somente um argumento, que
a exceo (Exception) que este bloco pretende tratar.
A exceo deve ser da classe Throwable ou de uma de suas
subclasses.
Para um melhor entendimento, observe a figura 1 que demonstra
o fluxo seguido pelo trycatch-finally:
Exception caught!
Finish
168 UNIDADE 04
1. Capturando excees 1
Dada a seguinte classe:
2. Capturando excees 2
H uma boa chance de que algumas classes escritas anteriormentes
tenham disparados excees. Como as excees no foram tratadas,
simplesmente interromperam a execuo.
Retorne a esses programas e implemente o tratamento de
excees.
1. Agenda Telefnica
Escrever um programa que cria uma agenda telefnica na qual
seja possvel acrescentar, excluir, visualizar e pesquisar os registros. O
usurio deve ter a possibilidade de visualizar todos registros por ordem
alfabtica ou por ordem crescente de nmeros de telefone. Na pesquisa
por registros, o usurio deve ter a opo de pesquisar por nome ou por
nmero de telefone. Na pesquisa pelo nome, o usurio deve ter uma
opo em que possa selecionar se a pesquisa ser efetuada com base
no primeiro ou ltimo nome.
MENU PRINCIPAL
1 Adicionar registro na agenda telefnica
2 Excluir registro da agenda telefnica
3 Visualizar todos os registros
a ordem alfabtica
b ordem numrica crescente de nmero de telefone
4 Pesquisa de registros
a por nome
1 pelo primeiro nome
2 pelo ltimo nome
b por nmero de telefone
5 Sair
170 UNIDADE 04
Sair
Fechar agenda telefnica
2. Caa-Minas
Este jogo uma verso simplificada do popular jogo de computador
Caa-minas (minesweeper). Inicialmente, questionado se o usurio quer
jogar numa grade de 5x5 ou numa grade de 10x10. Voc tem 2 arrays
bidimensionais que contm informaes sobre a grade selecionada. Um
registro desse array pode conter 0 ou 1. O valor 1 significa que existe
uma bomba nessa localizao e o valor 0 se no existir.
3. Converso Numrica
Criar uma calculadora cientfica que converta os nmeros
digitados para as quatro representaes numricas: decimal, binrio,
octal e hexadecimal. O projeto deve gerar o seguinte menu na tela.
MENU PRINCIPAL:
Por favor, selecione o tipo de converso:
1 Binrio para Decimal
2 Decimal para Octal
3 Octal para Hexadecimal
4 Hexadecimal para Binrio
5 Sair
172 UNIDADE 04
Seleo 1: Digite um nmero binrio: 11000
11000 base 2 = 24 base 10 (volta para o menu principal)
Seleo 2: Digite um nmero Decimal: 24
24 base 10 = 30 base 8 (volta para o menu principal)
Seleo 3: Digite um nmero Octal: 30
30 base 8 = 18 base 16 (volta para o menu principal)
Seleo 4: Digite um nmero Hexadecimal: 18
18 base 16 = 11000 base 2
Seleo 1: Digite um nmero Binrio: 110A
Nmero binrio invlido!
Digite um nmero binrio: 1
1 base 2 = 1 base 10 (volta para o menu principal)
Usurio selecionou 5
Tchau!
Magno Santos
174 UNIDADE 04