Escolar Documentos
Profissional Documentos
Cultura Documentos
UAPI
Mdulo II
Organizao de Sistema Metodolgico
Algoritmos e Programao II
Mdulo II
Algoritmos e Programao II
Magno Santos
PRESIDENTE DA REPBLICA
Luiz Incio Lula da Silva
MINISTRO DA EDUCAO
Fernando Haddad
GOVERNADOR DO ESTADO
Wellington Dias
DIAGRAMAO
Emanuel Alcntara da Silva
Inclui bibliografia
CDU: 32
Sumrio Geral
APNDICES:
A01 - EXERCCIOS ADICIONAIS 142
A02 PLANO DE ENSINO 145
A03 - AGENDA DE ATIVIDADES 149
Resumo
Esta unidade tem como meta apresentar uma viso
geral sobre os elementos conceituais da programao
orientada a objetos. So abordados os fundamentos
da engenharia de software e da programao de
computadores. A anatomia de um programa em Java
apresentada com suas caractersticas e funes
onde se deve aprender a criar, editar, compilar e
executar um dos primeiro programa em Java. Como
objetivo principal, esta unidade ensina, a gerar um
cdigo simples dentro dos padres mnimos exigido
pela engenharia software.
Sumrio
1.1.2. Processo
82
9
1.1.3. Mtodo
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*
Mtodo Booch
Mtodo Coad e Yourdon
Mtodo Jacobson
Mtodo Rambaugh
Mtodo Wirfs-Brock
1.1.4. Ferramentas
10
82
Diagrama de Entidade-Relacionamento
Diagrama de Fluxo de Dados
Pseudocdigo
Fluxograma
Qualidade do Produto
82
11
Como engenheiros de software, devemos construir
modelos baseados em como os requisitos dos usurios externos
sero relacionados com os requisitos internos dos
desenvolvedores.
Qualidade do Processo
82
12
1. Uso de padres de Qualidade. Padres de qualidade so um
conjunto de princpios, procedimentos, metodologias e regras,
para resumir, sobre qualidade no processo, tais como, CMMI,
ISO 9000:2000 para Software e SPICE.
13
82
1. Requisitos de Software so a base para a qualidade do
software. necessrio explicitar, especificar e priorizar.
82
14
escolhe o processo de desenvolvimento e a equipe de SQA deve
verificar se ele se enquadra na poltica organizacional e nos
padres de qualidade
15
82
pode ser brando, porm construtivo.
Planejar e cumprir a agenda. Revises no devem durar mais de
duas horas.
Minimizar os debates e discusses. inevitvel que os
problemas sejam levantados e isso no cause efeito nas pessoas.
Lembre a todos que no hora de resolver os problemas que
sero apenas documentados, uma outra reunio deve ser
agendada para resolv-los.
Indique reas de problema, mas no s tente resolv-las.
Mencione e esclarea reas de problema. Entretanto, no hora
de resolver problemas, devero ser resolvidos em uma outra
reunio.
Tome nota. uma boa prtica tomar nota do que foi dito e suas
prioridades para que elas possam ser vistas por outros revisores.
Isto ajudar a esclarecer os defeitos e aes a serem tomadas.
Mantenha o nmero dos participantes a um mnimo e insista em
preparar-se para a reviso. Escrever comentrios e observaes
pelos revisores uma boa tcnica.
Fornea uma lista de verificao para o produto de trabalho que
provvel ser revista. A lista de reviso prov uma estrutura que
conduza a reviso. Isto tambm ajuda os revisores a manterem o
foco na questo.
Programe as revises como parte do processo de
desenvolvimento de software e assegure-se de que os recursos
sejam fornecidos para cada revisor. Preparao prev
interpretaes em uma reunio. Isto tambm ajuda os revisores a
manterem o foco na questo.
Sumrio da reviso. Verifica a eficcia do processo da reviso.
1.3.6. Walkthrough
Antes do walkthrough
Durante o walkthrough
Aps o walkthrough
18
82
apresentadas na lista de aes.
o Possivelmente, um outro walkthrough deve
ser agendado.
19
82
Existem dois principais propsitos da documentao.
Especificamente, eles:
Fornecem um argumento racional e permanente para a
estrutura do sistema ou comportamento atravs dos manuais de
referncia, guia do usurio e documentos de arquitetura do
sistema.
Servem como documentos transitrios que so parte de
uma infra-estrutura envolvida em uma execuo de um projeto
real como: cenrios, documentao do projeto interno, relatrio
de reunies e problemas.
Exerccios:
20
82
5. Documente o cdigo abaixo.
Desafio:
82
21
Este o ciclo de vida quando se tenta resolver um
problema no computador:
Para entendermos o
funcionamento deste 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.
Sada do programa:
O nmero de vezes que o nome aparece em uma lista
23
2.4.1. Smbolos do Fluxograma e o seu significado
Exerccios:
25
82
Desafio:
26
82
3 Histrico da Linguagem Java
28
82
maneira para desalocar o bloco 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 da 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.
29
82
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.
Exerccios:
Desafio:
30
82
4 Instalao do Java e do NetBeans
sudo ln -s /usr/java/jdk1.5.0_07/bin/* .
32
82
Passo 3: Duplo-clique no arquivo de instalao do NetBeans.
Pressione o boto Run in Terminal.
Ser mostrada uma caixa de dilogo do NetBeans 5.5.
Pressione o boto Next >.
33
82
Na pasta do JDK, selecione /usr/java/jdk1.5.0_07, e ento
pressione o boto Next >.
cd /usr/local/bin
Crie um caminho de pesquisa para o NetBeans, digitando:
sudo ln -s /usr/java/netbeans-5.5 .
34
82
possvel executar o NetBeans a partir de qualquer pasta,
digitando:
netbeans &
Exerccios:
35
82
5. PRIMEIRO PROGRAMA JAVA COM A IDE NETBEANS
Para o Linux:
$ md myJavaPrograms
36
82
Na caixa de texto "Name", digite o nome do programa
(Hello.java), e depois clique no boto salvar.
Aps salvar o arquivo observe que o ttulo da janela mudou
de "Untitled" para "Hello.java", caso deseje alterar novamente o
arquivo basta edit-lo e depois salv-lo novamente clicando em
File Save.
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 esta
pasta.
Para entrar nesta pasta devemos utilizar o comando: cd
[nome da pasta]. O comando "cd" significa "Change Directory".
Digitaremos:
$ cd myJavaPrograms
javac Hello.java
Hello world!
5.2 Erros
38
82
A primeira mensagem de erro sugere que existe um erro
na linha 6 do programa apontado para a palavra void, entretanto
esta palavra est correta. O erro na palavra anterior statict que
deve ser digitada como static.
A segunda mensagem de erro sugere que faltou um
ponto-e-vrgula na linha 10, entretanto, esta contm
simplesmente o comando de 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 tente novamente
compilar o programa. Deste 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.
39
82
Depois de abrir a
IDE NetBeans ser
mostrada a interface
grfica GUI,
conforme Figura.
Clique em File
New Project, depois
de fazer isso, uma
janela de dilogo
aparecer. Neste
momento deve-se
clicar em "Java
Application" e em
seguida clicar no
boto "Next >".
Ser mostrada
uma nova janela de
dilogo, conforme
a figura.
40
82
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.
O contedo da
raiz do diretrio
ser
apresentado. D
um clique duplo
no diretrio
MYJAVAPROGR
AMS e depois d
um clique no
boto "Open".
Veja que a
localizao do
projeto mudou
para
/home/florence/M
YJAVAPROGRA
MS.
Finalmente, no
campo "Create
Main Class",
digite "Hello",
que ser o nome
da classe
principal, e em
seguida clique no
boto "Finish".
82
41
Passo 3: escrever os detalhes do programa
System.out.println("Hello world!");
System.out.print("Hello");
System.out.println(" world!");
43
Se no existir erros
no programa,
veremos a
mensagem de
sucesso na janela
de sada.
Para executar o
programa, clique
em Run Run
Main Project, ou
utilize a tecla de
atalho F6, ou
utilize o boto de
atalho para
executar o
programa.
O resultado final
do programa
ser mostrado
na janela de
sada.
82
44
Exerccios:
Desafio:
45
6. 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 = "";
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.*;
82
47
Falaremos sobre o tratamento de excees na ltima parte
deste curso. Por hora, necessrio adicionar essas linhas para
utilizar o mtodo readLine() e receber a entrada de dados do
usurio.
Em seguida:
name = dataIn.readLine();
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. }
48
82
6.2. Classe Scanner para capturar dados
import java.util.Scanner;
public class GetInputFromScanner
{
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;
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);
}
}
50
82
A primeira instruo:
import javax.swing.JOptionPane;
import javax.swing.*;
A instruo seguinte:
JOptionPane.showMessageDialog(null, msg);
Exerccios:
51
3. Digite (sem nro de linha e identado), compile e execute o
programa abaixo. Estude o programa, diga o que faz e coloque
os comentrios em cada linha.
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. }
52
82
Unidade 2
Estruturas de controle
Resumo
Esta unidade tem como meta principal apresentar as
estruturas de controles bsicas como: desvios
condicionais simples (if/then) e compostos
(if/then/else), e repeties condicionais com teste no
incio (while/for) e no final (do/while) das estruturas da
programao Java. Estas estruturas so importantes
na especificao de algoritmos, pois de acordo com as
entradas o fluxo de execuo do algoritmo pode ser
alterado. O principal objetivo desta unidade trabalhar
com exemplos das estruturas de controle condicional
para desenvolver a capacidade de abstrao na
especificao dos algoritmos de acordo com os
problemas apresentados.
Sumrio
54
82
7. ESTRUTURA DE CONTROLE DE DECISO IF-THEN-ELSE
SWITCH
Instruo
Por exemplo, dado o trecho de cdigo: Simples
ou: Instrues
em Bloco
int grade = 68;
if (grade > 60) {
System.out.println("Congratulations!");
System.out.println("You passed!");
}
56
82
7.2. Declarao if-else
if (expresso_lgica)
instruo_caso_verdadeiro;
else
instruo_caso_falso;
Dicas de programao:
1. Para evitar confuso, Tambm podemos escrev-la na forma abaixo:
sempre coloque a
instruo ou instrues if (expresso_lgica) {
contidas no instruo_caso_verdadeiro1;
bloco if ou if-else entre instruo_caso_verdadeiro2;
chaves {}. ...
2. Pode-se ter } else {
declaraes if-else instruo_caso_falso1;
dentro de declaraes instruo_caso_falso2;
if-else, por exemplo: ...
if (expresso_lgica) { }
if (expresso_lgica) {
... Por exemplo, dado o trecho de cdigo:
}else {
... int grade = 68;
} if (grade > 60)
}else { System.out.println("Congratulations! You passed!");
... else
} System.out.println("Sorry you failed");
ou:
57
82
7.3. Declarao if-else-if
if (expresso_lgica1)
instruo1;
else if(expresso_lgica2)
instruo2;
else
instruo3;
// ERRADO
int number = 0;
if (number) {
// algumas instrues aqui
}
// ERRADO
int number = 0;
if (number = 0) {
Notas: // algumas instrues aqui
1. Ao contrrio da }
declarao if,
mltiplas 3. Escrever elseif em vez de else if.
instrues so
executadas sem a // ERRADO
necessidade das int number = 0;
chaves que if (number == 0) {
determinam o // algumas instrues aqui
incio e trmino de } elseif (number == 1) {
bloco {}. // algumas instrues aqui
2. Quando um }
case for
selecionado, todas 7.5. Declarao switch
as instrues
vinculadas ao case Outra maneira de indicar uma condio atravs de uma
sero declarao switch. A construo switch permite que uma nica
executadas. Alm varivel inteira tenha mltiplas possibilidades de finalizao.
disso, as A declarao switch possui a seguinte forma:
instrues dos
case seguintes switch (varivel_inteira) {
tambm sero case valor1:
executadas. instruo1; //
3. Para prevenir instruo2; // bloco 1
que o programa ... //
execute instrues break;
dos outros case case valor2:
subseqentes, instruo1; //
utilizamos a instruo2; // bloco 2
declarao break ... //
aps a ltima break;
instruo de cada default:
case. instruo1 ; //
instruo2; // bloco n
... //
break;
} 59
82
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.
Quando a declarao switch encontrada, o fluxo de
controle avalia inicialmente a varivel_inteira e segue para o case
que possui o valor igual ao da varivel. O programa executa todas
instrues a partir deste ponto, mesmo as do prximo case, at
encontrar uma instruo break, que interromper a execuo do
switch.
Se nenhum dos valores case for satisfeito, o bloco default
ser executado. Este um bloco opcional. O bloco default no Dicas de
obrigatrio na declarao switch. 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
7.6. Exemplo para switch valor de cada
clusula case seja
public class Grade { nico, subseqentes,
public static void main(String[] args) { utilizamos a
int grade = 92; declarao break
switch(grade) { aps a ltima
case 100: instruo de cada
System.out.println("Excellent!"); case.
break;
case 90:
System.out.println("Good job!");
break;
case 80:
System.out.println("Study harder!");
break;
default:
System.out.println("Sorry, you failed.");
}
60
82
Compile e execute o programa acima e veremos que o
resultado ser:
Sorry, you failed.
Exerccios:
Desafio
while (expresso_lgica) {
instruo1;
instruo2;
...
}
62
82
As instrues contidas dentro do bloco while so executadas
repetidas vezes enquanto o valor de expresso_lgica for
verdadeira.
int i = 4;
while (i > 0){
System.out.print(i);
i--;
}
PRATICANDO!
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:
63
A declarao do-while possui a seguinte forma:
do {
instruo1;
instruo2;
...
} while (expresso_lgica);
PRATICANDO!
Dicas de
Experimente executar os trechos de cdigo abaixo. programao:
Analise o que ocorre. 1. Erro comum de
programao ao
Exemplo 1: utilizar o lao do-
int x = 0; while esquecer o
do { ponto-evrgula
System.out.println(x); (;) aps a declarao
x++; while.
} while (x<10); do {
...
Este exemplo ter 0123456789 escrito na tela. } while
(boolean_expression)
Exemplo 2: // ERRADO -> faltou;
// lao infinito 2. Como visto para a
do { declarao while,
System.out.println("hello"); tenha certeza que a
} while(true); declarao do-while
poder terminar em
Exemplo 3: algum momento.
// Um lao executado uma vez
do
System.out.println(hello);
while (false);
64
82
O exemplo anterior mostrar a palavra hello escrita na
tela infinitas vezes.
onde:
65
82
Este mesmo exemplo, utilizando a declarao while,
mostrado abaixo:
int i = 0;
while (i < 10) {
System.out.print(i);
i++;
}
PRATICANDO!
// Increment.java
public class Increment {
// main method begins execution of Java application
public static void main( String args[] )
int c;
c = 5;
System.out.println( c ); // print 5
System.out.println( c++ ); // print 5 then postincrement
System.out.println( c ); // print 6
System.out.println(); // skip a line
c = 5;
System.out.println( c ); // print 5
System.out.println( ++c ); // preincrement then print 6
System.out.println( c ); // print 6
} // end method main
} // end class Increment
66
82
2. Digite o programa abaixo e estude com ele funciona. Remove
nos nro de linha e faa a identao do cdigo
1 // Average2.java
2 // Class average program with sentinel-controlled repetition.
3
4
// Java core packages
5 import java.text.DecimalFormat;
67
// Java extension packages
8 import javax.swing.JOptionPane;
9
10 public class Average2 {
11
12 // main method begins execution of Java application
13 public static void main( String args[] )
14 {
15 int gradeCounter, // number of grades entered
16 gradeValue, // grade value
17 total; // sum of grades
18 double average; // average of all grades
19 String input; // grade typed by user
20
21 // Initialization phase
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
67
82
Exerccios:
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
// Faz algo
public class Calculate {
public static void main( String args[] )
{
int sum, x;
x = 1;
sum = 0;
while ( x <= 10 ) {
sum += x;
++x;
}
System.out.println( "The sum is: " + sum );
}
}
Desafio
Encontre e faa a devida correo dos erros em cada um dos fragmentos de cdigo
abaixo.
68
82
9. ESTRUTURA DE CONTROLE DE INTERRUPO: BREAK,
CONTINUE E RETURN
teste:
69
82
O programa a seguir realiza uma pesquisa de um
determinado valor em um array bidimensional. Dois laos so
criados para percorrer este array. Quando o valor encontrado,
um labeled break termina a execuo do lao interno e retorna o
controle para o lao mais externo.
70
82
9.3.2. Declarao labeled continue
return ++count;
ou
return "Hello";
71
PRATICANDO!
Exerccios:
// 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 );
}
}
82
72
2. Execute o programa abaixo. Faz-se o lao at de 1 a 9 vezes, o
que ser impresso? Faa o teste passo a passo no algoritmo.
// ContinueTest.java
import
javax.swing.JOptionPane;
public class ContinueTest {
public static void
main( String args[] ) {
String output = "";
for ( int count = 1; count
<= 10; count++ ) {
if ( count == 5 )
continue;
output += count + " ";
}
73
82
Unidade 3
Arranjos e Argumentos
Resumo
Esta unidade tratar a forma de se ter acesso a
conjunto de dados agrupados em um programa Java,
atravs do estudo de arranjos homogneos e
heterogneos elementares, destacando-se exemplos
com vetores, matrizes. Argumentos tambm so
apresentados como forma de transferncia de dados
para os aplicativos. O principal objetivo conhecer as
estruturas de dados bsicas constantes nos
programas e saber empreg-las no memento da
especificao do modo que o cdigo fique mais claro e
otimizvel.
75
82
Sumrio
76
82
10 ARRAY EM JAVA
int number1;
int number2;
int number3;
number1 = 1;
number2 = 2;
number3 = 3;
Por exemplo:
int [] ages;
int ages[];
82
77
Depois da declarao, precisamos criar o array e
especificar seu tamanho. Este processo chamado de
construo (a palavra, em orientao a objetos, para a criao
de objetos). Para se construir um objeto, precisamos utilizar um
construtor. Por exemplo:
// declarao
int ages[];
// construindo
ages = new int[100];
// declarar e construir
int ages[] = new int[100];
78
82
Por exemplo, dado o array ages que declaramos
anteriormente, temos:
// array de caracteres de 8 x 16 x 24
char [][][] threeD = new char[8][16][24];
System.out.print(dogs[0][0]);
Name : Florence
Tel. # : 735-1234
Address: Manila
Name : Joyce
Tel. # : 983-3333
Address: Quezon City
Name : Becca
Tel. # : 456-3322
Address: Manila
DESAFIOS:
82
81
2. Escreva um programa para ler um conjuto de elementos,
armazenar em arrays, classificar em ordem crescente e imprimir
os elementos do array.
82
11 ARGUMENTOS EM JAVA
java Sort 5 4 3 2 1
int firstArg = 0;
if (args.length > 0) {
firstArg = Integer.parseInt(args[0]);
}
83
parseInt dispara uma exceo do tipo
NumberFormatException se o contedo do elemento arg[0]
no for um nmero.
PRATICANDO!
84
D um clique com o boto direito do mouse no cone
CommandLineExample, conforme destacado na Figura acima.
Um menu aparecer, conforme a Figura da pgina seguinte.
Selecione a opo
"Properties".
85
Na caixa de texto dos argumentos, digite os argumentos
que se quer passar para o programa. Neste caso, digitamos os
argumentos 5 4 3 2 1. Pressione o boto OK.
86
Execute o projeto.
87
EXERCCIOS
world
that
is
all
java ArithmeticOperation 20 4
sum = 24
subtraction = 16
multiplication = 80
division = 5
DESAFIO
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 +
88
Unida de 4
Paradigma de
programao Orientada a
Objetos
Resumo
Esta unidade tem como meta apresentar os fundamentos do
paradigma de programao orientada a objetos. Aborda o tema,
caracterizando com exemplos uma linguagem orientada a
objetos com Java. Apresentar os elementos inerentes como
classes, objetos e mtodos. Mostra com exemplos,
caractersticas que podem ser exploradas como herana
polimorfismo e interface. Apresenta ainda com feito o
tratamento de excees em linguagem OO como Java. So
apresentados exemplos ilustrativos, exerccios propostos a
serem vencidos pelos aprendizes. O objetivo conhecer
fundamentalmente os recursos de programao orientada por
objetos como uma ferramenta poderosa que pode gerar cdigos
sofisticados e complexos. Nesta unidade o aprendiz ter a
oportunidade a implementar os algoritmos de seu interesse
usando a linguagem Java, para solidificar os conhecimentos
adquiridos nas sub-unidades anteriores.
89
Sumriol
90
12. CLASSES, OBJETOS E MTODOS
91
Atributos especificam os tipos de dados definidos pela classe,
enquanto que os mtodos especificam as operaes. Um objeto
uma instncia de uma
classe.
Para diferenciar entre classes e objetos, vamos examinar
um exemplo. O que temos aqui uma classe Carro que pode ser
usada pra definir diversos objetos do tipo carro. Na tabela
mostrada abaixo, Carro A e Carro B so objetos da classe Carro. A
classe tem os campos nmero da placa, cor, fabricante e
velocidade que so preenchidos com os valores correspondentes
do carro A e B. O carro tambm tem alguns mtodos: acelerar,
virar e frear.
12.2.2. Encapsulamento
ou, o equivalente:
12.3. Mtodos
93
Mtodos possuem as seguintes caractersticas:
Podem ou no retornar um valor
Podem aceitar ou no argumentos
Aps o mtodo encerrar sua execuo, o fluxo de controle
retornado a quem o chamou
O que necessrio para se criar mtodos? Porque no
colocamos todas as instrues dentro de um grande mtodo? O
foco destas questes chamado de decomposio. Conhecido o
problema, ns o separamos em partes menores, que torna
menos crtico o trabalho de escrever grandes classes.
nomeDoObjeto.nomeDoMtodo([argumentos]);
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);
94
12.3.3.1. Envio por valor
Dicas de
programao:
1. Um erro comum
sobre envio por
No exemplo dado, o mtodo test foi chamado e o valor de i referncia
foi enviado como argumento. O valor de i copiado para o acontece quando
atributo do mtodo j. J que j o atributo modificado no mtodo criamos um
test, no afetar o valor do atributo i, o que significa uma cpia mtodo para fazer
diferente do atributo. trocas (swap)
Como padro, todo tipo primitivo, quando enviado para usando referncia.
um mtodo, utiliza a forma de envio por valor. Note que Java
manipula
objetos 'por
referncia',
12.3.3.2. Envio por referncia entretanto envia-
se a referncia
Quando ocorre um envio por referncia, a referncia de um para um mtodo
objeto enviada para o mtodo chamado. Isto significa que o 'por
mtodo faz uma cpia da referncia do objeto enviado. valor'. Como
Entretanto, diferentemente do que ocorre no envio por valor, o conseqncia,
mtodo pode modificar o objeto para o qual a referncia est no se escreve
apontando. Mesmo que diferentes referncias sejam usadas nos um mtodo
mtodos, a localizao do dado para o qual ela aponta a padro para fazer
mesma. Como exemplo veremos a figura na pgina a seguir: troca
de valores (swap)
95 entre objetos.
12.4. Chamando mtodos estticos
NomeClasse.nomeMtodoEsttico(argumentos);
96
12.5. Escopo de um atributo
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.
97
Dado dois mtodos: main e test teremos o seguinte exemplo:
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;
}
Por exemplo:
99
numrico que representa sua posio no conjunto de caracteres.
O casting (char)65 ir produzir a sada 'A'. O cdigo numrico
associado letra maiscula A 65, segundo o conjunto de
caracteres ASCII. Por exemplo:
100
Para fazer o casting:
(nomeClasse)objeto
onde:
nomeClasse o nome da classe destino
objeto a referncia para o objeto origem que se quer converter
102
O cdigo seguinte ilustra essa comparao,
class EqualsTest {
public static void main(String[] args) {
String str1, str2;
str1 = "Free the bound periodicals.";
str2 = str1;
System.out.println("String1: " + str1);
System.out.println("String2: " + str2);
System.out.println("Same object? " + (str1 == str2));
Dicas de
str2 = new String(str1); programao:
1. Porque no se pode
System.out.println("String1: " + str1); ter a mesma literal
System.out.println("String2: " + str2); quando mudamos
System.out.println("Same object? " + (str1 == str2)); str2, a no ser quando
S y s t e m . o u t . p r i n t l n ( " S a m e v a l u e ? " + utilizamos o new?
str1.equals(str2)); Literais String so
} otimizadas em Java;
} se uma String
criada utilizando uma
A sada dessa classe a seguinte: literal e cria-se outra
String com os mesmos
String1: Free the bound periodicals. caracteres, Java tem
String2: Free the bound periodicals. inteligncia suficiente
Same object? true para retornar apenas a
String1: Free the bound periodicals. posio em memria
String2: Free the bound periodicals. do
Same object? false primeiro objeto String
Same value? True criado. Ou seja,
ambas strings se
Vamos entender o processo envolvido. referem ao mesmo
objeto como se fosse
String str1, str2; um apelido. Para
str1 = "Free the bound periodicals."; obrigar ao Java criar
str2 = str1; um novo objeto
String, deve-se utilizar
o operador new.
103
Na segunda parte da classe, cria-se um novo objeto String
com o mesmo valor de str1 e faz-se a atribuio de str2 para esse
novo objeto String. Agora temos dois diferentes tipos de objetos
na str1 e str2, ambos com o mesmo contedo. Testando para ver
se eles so o mesmo objeto usando o operador de igualdade
obtemos a resposta esperada: false eles no so o mesmo
objeto na memria. Utilizando o mtodo equals() recebemos a
resposta esperada: true eles tem o mesmo contedo.
EXERCCIOS
104
2. Identifique na figura da pgina seguinte os elementos: a)
Classe, b) Objeto, c) Instncia, e) Mtodo, f) Atributo, g)
Construtor, h) Mensagem, i) Argumento.
Classe: Integer
Declarao do Mtodo: public static int parseInt( String
value )
Exemplo de Uso:
String strValue = "100";
int value = Integer.parseInt( strValue );
// classe Empresa
public class Empresa
DESAFIO public static void main(String[] args) {
// fill the staff array with three Employee objects
Employee[] staff = new Employee[3];
O cdigo seguinte cria uma lista staff[0] = new Employee("Tom", 40000);
de objetos empregados staff[1] = new Employee("Dick", 60000);
associados a uma identificao. staff[2] = new Employee("Harry", 65000);
Perceba que nas classes // print out information about all Employee objects
empregado e empresa est for (int i = 0; i < staff.length; i++)
Employee e = staff[i];
declarado o mtodo main().
e.setId();
Compile execute as duas System.out.println("name=" + e.getName()
classes. Justique a execuo. + ",id=" + e.getId()
Agora altere o cdigo para no + ",salary=" + e.getSalary());
permitir execuo da classe }
empregado e na criao de cada int n = Employee.getNextId(); // calls static method
System.out.println("Next available id=" + n);
empregado incrementar o
}
identificador automaticamente. }
// 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
}
106
13. DEFINIO DE CLASSE EM JAVA
onde:
Dicas de
<modificador> um modificador de acesso, que pode ser usado programao:
em combinao com outros 1. Lembre-se de
<nome> nome da sua classe que, para a
<declaraoDoAtributo> atributos definidos para a classe declarao da
<declaraoDoConstrutor> mtodo construtor classe, o nico
<declaraoDoMtodo> mtodos da classe modificador de
acesso vlido o
Nesta lio, criaremos uma classe que conter o registro de um public. De uso
estudante. Como j identificamos o objetivo da nossa classe, exclusivo para a
agora podemos nome-la. classe que possuir
Um nome apropriado para nossa classe seria StudentRecord. o mesmo nome do
arquivo externo.
Para definir nossa classe, escrevemos:
nome - String
endereo - String
idade - int
nota de matemtica - double
nota de ingls - double
nota de cincias double
Dicas de
programao: Futuramente, possvel adicionar mais informaes. Para este
1. Declare todas exemplo, utilizaremos somente estas.
os atributos de
objeto na parte 13.2.1. Atributos de Objeto
superior da
declarao da Agora que temos uma lista de todos os atributos que queremos
classe. adicionar nossa classe, vamos adicion-los ao nosso cdigo.
2. Declare cada Uma vez que queremos que estes atributos sejam nicos para
atributo em uma cada objeto (ou para cada estudante), devemos declar-los
linha. como atributos de objeto.
3. Atributos de Por exemplo:
objeto, assim
como qualquer public class StudentRecord {
outro atributo private String name;
devem private String address;
iniciar com letra private int age;
MINSCULA. private double mathGrade;
4. Use o tipo de private double scienceGrade;
dado apropriado }
para cada atributo
declarado.
5. Declare onde:
atributos de
objetos como
private de modo private significa que os atributos so acessveis apenas de
que somente dentro da classe. Outros objetos no podem acessar
os mtodos da diretamente estes atributos.
classe possam
acess-los
diretamente.
108
13.2.2. Atributos de Classe ou Atributos Estticos
onde:
<tipoArgumento> <nomeArgumento>
109
13.3.1. Mtodos assessores
onde:
A instruo:
return name;
110
Outro exemplo de um mtodo assessor o mtodo
getAverage:
onde:
name = temp;
111
13.3.3. Mltiplos comandos return
onde:
13.4. this
age = age;
this.<nomeDoAtributo>
114
13.5. Overloading de Mtodos
Name:Anna
Address:Philippines
Age:15
Name:Anna
Math Grade:80.0
English Grade:95.5
Science Grade:100.0
116
public StudentRecord() {
}
public StudentRecord() {
// qualquer cdigo de inicializao aqui
}
public StudentRecord(String temp){
this.name = temp;
}
public StudentRecord(String name, String address) {
this.name = name;
this.address = address;
}
public StudentRecord(double mGrade, double eGrade,
double sGrade) {
mathGrade = mGrade;
englishGrade = eGrade;
scienceGrade = sGrade;
}
117
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;
}
public StudentRecord(double mGrade, double eGrade,
double sGrade) {
studentCount++; // adicionar um estudante
mathGrade = mGrade;
englishGrade = eGrade;
scienceGrade = sGrade;
}
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
}
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;
}
13.7. Pacotes
import <nomeDoPacote>.<nomeDaClasse>;
import java.awt.Color;
ou:
import java.awt.*;
119
A primeira linha de instruo importa especificamente a
classe Color enquanto que a seguinte importa todas as classes
do pacote java.awt.
Outra maneira de importar classes de outros pacotes
atravs da referncia explcita ao pacote. Isto feito utilizando-se
o nome completo do pacote para
declarao do objeto na classe:
java.awt.Color color;
package <nomeDoPacote>;
package schoolClasses;
public class StudentRecord {
// instrues da classe
}
120
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
Observe que possvel definir a varivel classpath em qualquer
lugar. possvel definir mais de um local de pesquisa; basta
separ-los por ponto-evrgula (no Windows) e dois-pontos (nos
sistemas baseados em Unix). Por exemplo:
set classpath=C:\myClasses;D:\;E:\MyPrograms\Java
121
export classpath=/usr/local/java:/usr/myClasses
13.8. Modificadores de Acesso
122
O atributo de objeto name e o mtodo getName() podem
ser acessados a partir de outros objetos.
EXERCCIOS
123
Crie os seguintes mtodos:
1. Fornea todos os mtodos assessores e modificadores
necessrios para
todos os atributos.
2. Construtores.
DESAFIO
124
14. Herana, polimorfismo e interfaces
14.1. Herana
125
this.name = name;
this.address = address;
}
/**
* Mtodos modificadores e acessores
*/
public String getName(){
return name;
}
public String getAddress(){
return address;
}
public void setName( String name ){
this.name = name;
}
public void setAddress( String add ){
this.address = add;
}
}
126
Quando a classe Student for instanciada, o construtor
padro da superclasse Person invocado implicitamente para
fazer as inicializaes necessrias. Aps isso, as instrues
dentro do construtor da subclasse so executadas. Para
ilustrar, considere o seguinte cdigo:
Inside Person:Constructor
Inside Student:Constructor
14.1.2. super
public Student(){
super( "SomeName", "SomeAddress" );
System.out.println("Inside Student:Constructor");
}
127
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
}
128
}
Student: getName
129
}
14.2. Polimorfismo
131
}
14.4. Interfaces
134
< [public] [abstract] <retorno>
<nomeMetodo>(<parametro>*); >*
}
interface Relation {
boolean isGreater(Object a, Object b);
boolean isLess(Object a, Object b);
boolean isEqual( Object a, Object b);
}
135
Quando a classe implementa uma interface, deve-se
implementar todos os mtodos desta, caso contrrio ser
mostrado o erro:
Line.java:4: Line is not abstract and does not override
abstract
method isGreater(java.lang.Object,java.lang.Object) in
Relation
public class Line implements Relation
^
1 error
137
15. Tratamento bsico de excees
15.1. O que so Excees (Exception)?
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
}
138
? Um bloco try deve que ser seguido de PELO MENOS um
bloco catch 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.
Exception caught!
Finish
EXERCCIOS
1. 1. Capturando Excees 1
Dada a seguinte classe:
140
Modifique a classe TestException para tratar esta exceo. A
sada depois do tratamento da exceo dever ser:
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 estes programas e implemente o tratamento de
excees.
141
A01 EXERCCIOS ADICIONAIS
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
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.
142
Por exemplo, dado o seguinte array:
int bombList5by5[][]={{0, 0, 1, 0, 0},
{0, 0, 0, 0, 0},
{0, 1, 0, 0, 0},
{0, 0, 0, 1, 1},
{0, 1, 1, 0, 0}};
143
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
144
Bibliografia
Livros textos:
DEITEL, H. M. e DEITEL, P. J. JAVA: como programar. 6 Ed.
Porto Alegre: Pearson, 2005.
Livros de referncia:
DEITEL, H. M. e DEITEL, P. J. JAVA: como programar. 3 Ed.
Porto Alegre: Bookman, 2001.
151
Sobre o autor
152