Академический Документы
Профессиональный Документы
Культура Документы
Palhoa
UnisulVirtual
2007
prog_orient_objetos.indb 1
2/7/2007 16:43:35
Crditos
Unisul - Universidade do Sul de Santa Catarina
UnisulVirtual - Educao Superior a Distncia
Campus UnisulVirtual
Avenida dos Lagos, 41
Cidade Universitria Pedra Branca
Palhoa SC - 88137-100
Fone/fax: (48) 3279-1242 e
3279-1271
E-mail: cursovirtual@unisul.br
Site: www.virtual.unisul.br
Reitor Unisul
Gerson Luiz Joner da Silveira
Vice-Reitor e Pr-Reitor
Acadmico
Sebastio Salsio Heerdt
Chefe de Gabinete da Reitoria
Fabian Martins de Castro
Pr-Reitor Administrativo
Marcus Vincius Antoles da Silva
Ferreira
Campus Sul
Diretor: Valter Alves Schmitz Neto
Diretora adjunta: Alexandra
Orsoni
Campus Norte
Diretor: Ailton Nazareno Soares
Diretora adjunta: Cibele Schuelter
Campus UnisulVirtual
Diretor: Joo Vianney
Diretora adjunta: Jucimara
Roesler
Equipe UnisulVirtual
Administrao
Renato Andr Luz
Valmir Vencio Incio
Avaliao Institucional
Dnia Falco de Bittencourt
Biblioteca
Soraya Arruda Waltrick
Capacitao e Apoio
Pedaggico Tutoria
Angelita Maral Flores
(Coordenadora)
Caroline Batista
Enzo de Oliveira Moreira
Patrcia Meneghel
Vanessa Francine Corra
prog_orient_objetos.indb 2
Design Grco
Cristiano Neri Gonalves Ribeiro
(Coordenador)
Adriana Ferreira dos Santos
Alex Sandro Xavier
Evandro Guedes Machado
Fernando Roberto Dias
Zimmermann
Higor Ghisi Luciano
Pedro Paulo Alves Teixeira
Rafael Pessi
Vilson Martins Filho
Disciplinas a Distncia
Tade-Ane de Amorim
Ctia Melissa Rodrigues
Gerncia Acadmica
Patrcia Alberton
Gerncia de Ensino
Ana Paula Reusing Pacheco
Logstica de Encontros
Presenciais
Mrcia Luz de Oliveira
(Coordenadora)
Aracelli Araldi
Graciele Marins Lindenmayr
Letcia Cristina Barbosa
Knia Alexandra Costa Hermann
Priscila Santos Alves
Formatura e Eventos
Jackson Schuelter Wiggers
Logstica de Materiais
Jeferson Cassiano Almeida da
Costa (Coordenador)
Jos Carlos Teixeira
Eduardo Kraus
Monitoria e Suporte
Rafael da Cunha Lara
(Coordenador)
Adriana Silveira
Andria Drewes
Caroline Mendona
Cristiano Dalazen
Dyego Rachadel
Edison Rodrigo Valim
Francielle Arruda
Gabriela Malinverni Barbieri
Jonatas Collao de Souza
Josiane Conceio Leal
Maria Eugnia Ferreira Celeghin
Rachel Lopes C. Pinto
Vincius Maykot Seram
2/7/2007 16:44:14
Apresentao
Parabns, voc est recebendo o livro didtico da disciplina de
Programao orientada a objeto.
Este material didtico foi construdo especialmente para este
curso, levando em considerao o seu perl e as necessidades
da sua formao. Como os materiais estaro, a cada nova
verso, recebendo melhorias, pedimos que voc encaminhe suas
sugestes sempre que achar oportuno via professor tutor ou
monitor.
Recomendamos, antes de voc comear os seus estudos, que
verique as datas-chave e elabore o seu plano de estudo pessoal,
garantindo assim a boa produtividade no curso.
Lembre: voc no est s nos seus estudos, conte com o Sistema
Tutorial da UnisulVirtual sempre que precisar de ajuda ou
alguma orientao.
Desejamos que voc tenha um excelente xito neste curso!
Equipe UnisulVirtual
prog_orient_objetos.indb 3
2/7/2007 16:44:14
prog_orient_objetos.indb 4
2/7/2007 16:44:14
Andra Bordin
Design instrucional
Flavia Lumi Matuzawa
Karla Leonora Dahse Nunes
Palhoa
UnisulVirtual
2007
prog_orient_objetos.indb 5
2/7/2007 16:44:14
Design Instrucional
Karla Leonora Dahse Nunes, Flvia Lumi Matuzawa
Leandro Kingeski Pacheco (4. ed. rev. e atual.)
(
ISBN 978-85-7817-001-1
Projeto Grfico e Capa
Equipe UnisulVirtual
Diagramao
Rafael Pessi
Reviso Ortogrfica
B2B
005.117
B72
Bordin, Andra
Programao orientada a objeto : livro didtico / Andra Bordin ; design
instr uciona l F lav ia Lumi Mat uzawa, K a rla Leonora Da hse Nunes, [L eandro
Kingeski Pacheco]. 4. ed. rev. e atual. Palhoa : UnisulVirtual, 2007.
306 p. : il. ; 28 cm.
Inclui bibliografia.
ISBN 978-85-7817-001-1
1. Programao orientada a objetos (Computao). I. Nunes, Karla Leonora
Dahse. II. Matuzawa, Flavia Lumi. III. Pacheco, Leandro Kingeski. IV. Ttulo.
Ficha catalogrfica elaborada pela Biblioteca Universitria da Unisu
Sumrio
Apresentao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 03
Palavras da professora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 09
Plano de estudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
UNIDADE
UNIDADE
UNIDADE
UNIDADE
UNIDADE
UNIDADE
UNIDADE
UNIDADE
UNIDADE
UNIDADE
UNIDADE
UNIDADE
UNIDADE
UNIDADE
prog_orient_objetos.indb 7
2/7/2007 16:44:15
prog_orient_objetos.indb 8
2/7/2007 16:44:15
Palavras da professora
Ol!
Voc est iniciando a disciplina de Programao
Orientada a Objetos. Nessa disciplina, primeiramente,
ser apresentada a voc uma linguagem de programao.
O nome da linguagem Java. Atravs dessa linguagem
de programao, voc poder desenvolver, no
computador, os algoritmos que elaborou nas disciplinas
de Lgica de Programao I e II. Voc conseguir ver
seus programas funcionando, poder test-los e modiclos, j que ter o conhecimento de lgica, e, tambm, de
uma linguagem de programao.
Para isso, as unidades iniciais desse livro sero dedicadas
a passar todos os detalhes de sintaxe dessa linguagem.
Ser necessria muita ateno da sua parte, pois o
desenvolvimento de instrues de um programa em
uma linguagem de programao uma tarefa muito
detalhada. Seu programa pode no funcionar porque
voc esqueceu de programar, por exemplo, um ponto e
vrgula.
Mas, essa ateno ser recompensada com a sua
satisfao ao ver o seu programa funcionar. uma
sensao muito boa ver o primeiro programa em
funcionamento.
Conhecer uma linguagem de programao um prrequisito importante para que voc possa aprender e
colocar em prtica os conceitos da programao orientada
a objetos, que o tpico principal desse livro e ser
tratado na maior parte das unidades.
prog_orient_objetos.indb 9
2/7/2007 16:44:15
10
prog_orient_objetos.indb 10
2/7/2007 16:44:15
Plano de estudo
O plano de estudos visa a orient-lo/a no
desenvolvimento da Disciplina. Nele, voc encontrar
elementos que esclarecero o contexto da Disciplina e
sugeriro formas de organizar o seu tempo de estudos.
O processo de ensino e aprendizagem na UnisulVirtual
leva em conta instrumentos que se articulam e se
complementam. Assim, a construo de competncias
se d sobre a articulao de metodologias e por meio das
diversas formas de ao/mediao.
So elementos desse processo:
o livro didtico;
o Sistema Tutorial.
Ementa
Introduo aos conceitos de programao orientada
a objetos. Abstrao e modelo conceitual. Modelo de
Objetos. Classes, atributos, mtodos, mensagens/aes.
Conceitos e Tcnicas de programao. Desenvolvimento
de sistemas com Classes. Bibliotecas, reusabilidade.
Aplicaes em ambiente WEB.
Carga horria
120 horas 8 crditos.
prog_orient_objetos.indb 11
2/7/2007 16:44:15
Objetivos da disciplina
Contedo programtico/objetivos
Os objetivos de cada unidade denem o conjunto de
conhecimentos que voc dever deter para o desenvolvimento
de habilidades e competncias necessrias sua formao. Fique
atento pgina inicial de cada unidade para saber qual o
objetivo a ser alcanado.
12
prog_orient_objetos.indb 12
2/7/2007 16:44:15
Atividades obrigatrias
13
prog_orient_objetos.indb 13
2/7/2007 16:44:15
prog_orient_objetos.indb 14
2/7/2007 16:44:16
UNIDADE 1
Conhecendo a Linguagem de
Programao Java
Objetivos de aprendizagem
Sees de estudo
Seo 1 Linguagens de Programao
Seo 2 Histria da linguagem Java
Seo 3 Linguagem Java
Seo 4 Plataforma Java
Seo 5 Tipos de Aplicaes Java
prog_orient_objetos.indb 15
2/7/2007 16:44:16
Programar diretamente em
cdigo de mquina costuma ser
exaustivamente difcil, pois requer
o conhecimento dessa seqncia
de nmeros correspondente a uma
seqncia de instrues. Ex. decorar
seqncias como 1011101110110
1101110110011001010 para cada
instruo do processador.
16
prog_orient_objetos.indb 16
2/7/2007 16:44:16
Unidade 1
prog_orient_objetos.indb 17
17
2/7/2007 16:44:16
18
prog_orient_objetos.indb 18
2/7/2007 16:44:16
Unidade 1
prog_orient_objetos.indb 19
19
2/7/2007 16:44:16
20
prog_orient_objetos.indb 20
2/7/2007 16:44:17
simplicidade;
interpretada;
orientada a objetos;
multiplataforma;
segura.
Simplicidade
Java uma linguagem simples e de fcil aprendizado ou
migrao, pois possui um reduzido nmero de construes.
Contm uma biblioteca (API Java) de programas (conhecidos em
Java como classes) que fornecem grande parte da funcionalidade
bsica da linguagem, incluindo rotinas de acesso rede e criao
de interface grca.
Unidade 1
prog_orient_objetos.indb 21
Application Programming
Interface ou Interface
de Programao de
Aplicativos.
21
2/7/2007 16:44:17
Orientada a Objetos
A partir da unidade 7 voc
aprender os conceitos do
paradigma orientado a objetos.
Interpretada
Linguagens de programao podem ser tanto compiladas como
interpretadas.
Quando se utiliza uma linguagem compilada, aps escrever o
cdigo fonte (que contm instrues numa linguagem de alto
nvel), necessrio que o mesmo seja traduzido (compilado)
para cdigo binrio (executvel). Quem faz essa traduo um
software chamado compilador.
Voc j leu sobre isso na seo 1
- Linguagens de Programao.
prog_orient_objetos.indb 22
2/7/2007 16:44:17
Bytecode o termo
dado ao cdigo binrio
(executvel) gerado pela
compilao de um cdigo
fonte em Java.
Multiplataforma
A caracterstica de multiplataforma da linguagem Java indica
que um programa desenvolvido nela pode ser executado em
plataformas de hardware e sistemas operacionais diferentes.
Vamos explicar com detalhes o que isso signica.
Na maioria das linguagens de programao como C e Pascal, o
cdigo fonte de um programa compilado para uma plataforma
de hardware e sistema operacional especcos.
Cdigo fonte em
Pascal (Soma.pas)
Compilao
Cdigo executvel
para Windows
Cdigo executvel
para Linux
S.O. Windows
S.O. Linux
Unidade 1
prog_orient_objetos.indb 23
23
2/7/2007 16:44:17
24
prog_orient_objetos.indb 24
2/7/2007 16:44:19
Segurana
O processo de compilao - gerao de bytecodes - projetado
para a deteco prvia dos possveis erros, evitando que os erros
se manifestem em tempo de execuo. O uso de cdigo para
tratamento de excees - exception handling - permite manter a
consistncia da aplicao no caso de erros.
Alm de diminuir as possibilidades de erro de programao,
a linguagem tem um esquema de segurana para garantir a
integridade de cdigo - principalmente no caso de cdigo
originrio de rede insegura.
Tcnicas de programao
utilizadas no momento
do desenvolvimento do
programa que evitam que
o programa tenha algum
erro de execuo.
Unidade 1
prog_orient_objetos.indb 25
25
2/7/2007 16:44:19
26
prog_orient_objetos.indb 26
2/7/2007 16:44:20
Aplicao console
Applet
Aplicao janela
Servlet / JSP
Unidade 1
prog_orient_objetos.indb 27
27
2/7/2007 16:44:20
28
prog_orient_objetos.indb 28
2/7/2007 16:44:20
Unidade 1
prog_orient_objetos.indb 29
29
2/7/2007 16:44:21
Sntese
Nesta unidade voc estudou o que uma linguagem de
programao, para que ela serve e sua classicao. importante
ter em mente que sem uma linguagem de programao voc
no pode programar ou instruir o computador a realizar alguma
tarefa.
atravs de uma linguagem de programao que elaboramos
o conjunto instrues organizadas logicamente (programa) que
indicam o qu o computador deve fazer. Porm, a maioria das
linguagens de programao de alto nvel, ou seja, sua sintaxe
semelhante linguagem humana, portanto no entendida pelo
computador.
por isso que todo o programa (conjunto de instrues) deve ser
compilado ou interpretado, isto , traduzido para a linguagem
binria que o computador entende.
A linguagem que iremos utilizar no decorrer dessa disciplina
se chama Java. Essa linguagem se tornou muito popular no
mercado de desenvolvimento de sistemas, por duas razes
principais: ela gratuita, ou seja, no preciso pagar para
obter os softwares necessrio para construir um programa nessa
linguagem e, por ser multi-plataforma, permitindo que um
programa desenvolvido numa plataforma de hardware/sistema
operacional funcione perfeitamente em outra plataforma.
Alm disso, possui uma srie de outras caractersticas que foram
abordadas durante essa unidade,sendo possvel desenvolver
diversos tipos de aplicao com ela.
30
prog_orient_objetos.indb 30
2/7/2007 16:44:21
Atividades de auto-avaliao
1) Um programa feito em uma linguagem de programao de alto
nvel no pode ser entendido diretamente nessa linguagem pelo
computador. O que precisar ser feito com esse programa em alto nvel
para que suas instrues possam ser entendidas pelo computador?
Unidade 1
prog_orient_objetos.indb 31
31
2/7/2007 16:44:21
Saiba mais
Histria da linguagem Java
http://campus.fortunecity.com/psychology/196/javatudo.html
32
prog_orient_objetos.indb 32
2/7/2007 16:44:21
UNIDADE 2
Objetivos de aprendizagem
Sees de estudo
Seo 1 Instalando o J2SE Development Kit (JDK)
Seo 2 Editando, Compilando e Executando o
primeiro programa em Java
prog_orient_objetos.indb 33
2/7/2007 16:44:21
34
prog_orient_objetos.indb 34
2/7/2007 16:44:21
Unidade 2
prog_orient_objetos.indb 35
35
2/7/2007 16:44:22
36
prog_orient_objetos.indb 36
2/7/2007 16:44:26
Unidade 2
prog_orient_objetos.indb 37
37
2/7/2007 16:44:29
38
prog_orient_objetos.indb 38
2/7/2007 16:44:29
Unidade 2
prog_orient_objetos.indb 39
39
2/7/2007 16:44:31
40
prog_orient_objetos.indb 40
2/7/2007 16:44:32
Unidade 2
prog_orient_objetos.indb 41
41
2/7/2007 16:44:32
1) Edio
2) Compilao
Aps a edio do programa, o mesmo deve ser compilado, ou
seja, gerado um arquivo contendo os bytecodes do programa.
Os bytecodes so cdigos em linguagem de mquina que sero
interpretados (entendidos) pela JVM (Java Virtual Machine)
que dever estar instalada no computador.O arquivo contendo os
bytecodes possui extenso .class.
42
prog_orient_objetos.indb 42
2/7/2007 16:44:32
3) Interpretao
O processo de interpretao realizado a partir dos bytecodes
gerados pela compilao, que esto no arquivo .class. Ele
realizado pela JVM instalada no computador a qual dependente
do sistema operacional do mesmo.
Comando para interpretao: java nomedoprograma
A gura abaixo ilustra essas etapas:
Unidade 2
prog_orient_objetos.indb 43
43
2/7/2007 16:44:33
44
prog_orient_objetos.indb 44
2/7/2007 16:44:33
Voc deve ter recebido como resposta a frase Alo Mundo !. Isso
signica que tudo est certo e voc acabou de criar seu primeiro
programa em Java.
Ao executar o programa
java voc est acionando
a mquina virtual de java
para que ela interprete o
bytecode gerado na etapa
anterior.
ATENO !!
No se preocupe se voc no conseguir executar os
passos descritos acima nesse momento. Na unidade 4,
voc aprender com mais detalhes a editar, compilar e
executar um programa.
A inteno agora foi s dar a voc aps a instalao do
J2SDK uma noo de como desenvolver um programa
em Java.
Unidade 2
prog_orient_objetos.indb 45
45
2/7/2007 16:44:33
Sntese
Nessa unidade voc aprendeu a instalar e congurar a ferramenta
de trabalho bsica para desenvolver programas em Java, o J2SE
Development Kit (JDK).
Tambm aprendeu a executar as trs etapas do desenvolvimento
de qualquer programa: edio, compilao e execuo. Isso foi
feito atravs de um pequeno exemplo que teve o objetivo de
ilustrar o que vamos fazer daqui para a frente.
Atividades de auto-avaliao
1) Desenvolva um pequeno programa na linguagem Java que imprima o
seu nome da tela. Mude o nome do programa para MeuNome.java, ou
seja, no lugar de AloMundo voc deve digitar MeuNome.
46
prog_orient_objetos.indb 46
2/7/2007 16:44:33
Saiba mais
Hello, World - Seu primeiro programa em Java!
http://www.guj.com.br/java.tutorial.artigo.16.1.guj
Unidade 2
prog_orient_objetos.indb 47
47
2/7/2007 16:44:34
prog_orient_objetos.indb 48
2/7/2007 16:44:34
UNIDADE 3
Sintaxe bsica da
linguagem Java
Objetivo de aprendizagem
Seo de estudo
Seo 1 Sintaxe bsica da linguagem Java
prog_orient_objetos.indb 49
2/7/2007 16:44:34
50
prog_orient_objetos.indb 50
2/7/2007 16:44:34
// (duas barras)
Utiliza-se duas barras ( // ) em qualquer posio da linha. Tudo
o que aparecer direita das duas barras ser ignorado pelo
compilador.
Smbolo de atribuio
O que signica essa instruo?
Uma varivel de memria chamada A est recebendo o valor
dela mesma acrescido de 1.
/* e */
Unidade 3
prog_orient_objetos.indb 51
51
2/7/2007 16:44:34
Tipo
Tamanho*
Faixa de Valores**
int
4 bytes
-2.147.483.648 at 2.147.483.647
short
2 bytes
-32.768 at 32.767
byte
1 byte
-128 at 127
long
8 bytes
-9.223.372.036.854.775.808 at
9.223.373.036.854.775.807
Tipo
Tamanho
Faixa de Valores
oat
4 bytes
1,4E-45 a 3,4E+38
double
8 bytes
4,9E-324 a 1,7E+308
52
prog_orient_objetos.indb 52
2/7/2007 16:44:34
Tamanho
char
2 bytes
Faixa de Valores
Tamanho
Faixa de Valores
boolean
1 byte
true ou false
Pseudocdigo
int a
a: Numrico
double d
d: Numrico
byte b
b: Numrico
char ch
c: Alfanumrica
boolean ok
ok: Lgica
prog_orient_objetos.indb 53
53
2/7/2007 16:44:34
54
prog_orient_objetos.indb 54
2/7/2007 16:44:35
O operador mod
equivalente a funo
RESTO() aprendida em
Lgica I.
Signicado
==
Igualdade
!=
Diferena
<
Menor que
>
Maior que
<=
Menor ou igual a
>=
Maior ou igual
Unidade 3
prog_orient_objetos.indb 55
55
2/7/2007 16:44:35
Signicado
&&
||
OU
NO
Importante
Uma String no deve ser comparada com outra
usando o sinal = =, pois elas so objetos.
56
prog_orient_objetos.indb 56
2/7/2007 16:44:35
ou
a.equalsIgnoreCase(b)
Unidade 3
prog_orient_objetos.indb 57
57
2/7/2007 16:44:35
58
prog_orient_objetos.indb 58
2/7/2007 16:44:35
JAVA
1 int idade;
2 idade=Integer.parseInt(JOptionPane.showInputDialog(Entre com a idade));
3 JOptionPane.showMessageDialog(null, A idade +idade);
Unidade 3
prog_orient_objetos.indb 59
59
2/7/2007 16:44:35
60
prog_orient_objetos.indb 60
2/7/2007 16:44:36
JAVA
1 double valor;
2 valor=Double.parseDouble(JOptionPane.showInputDialog(Entre com o valor));
3 JOptionPane.showMessageDialog(null, O valor +valor);
Unidade 3
prog_orient_objetos.indb 61
61
2/7/2007 16:44:36
62
prog_orient_objetos.indb 62
2/7/2007 16:44:36
JAVA
1 String Nome;
2 Nome=JOptionPane.showInputDialog(Entre com o nome);
3 JOptionPane.showMessageDialog(null, O nome +Nome);
Unidade 3
prog_orient_objetos.indb 63
63
2/7/2007 16:44:36
Sntese
Vamos revisar as principais instrues aprendidas nessa unidade:
Instruo de Entrada de Dados em Java
JOptionPane.showInputDialog( );
Observe as letras maisculas e
minsculas da instruo.
Integer.parseInt ( )
Double.parseDouble( )
Float.parseFloat ( )
Integer.toString ( )
Double.toString( )
64
prog_orient_objetos.indb 64
2/7/2007 16:44:36
Atividades de auto-avaliao
1) Faa as seguintes declaraes de variveis na linguagem Java:
a. Declare uma varivel de memria para armazenar um valor numrico
interiro, um valor numrico real, um valor do tipo lgico, um valor do
tipo Literal.
b. Declare um vetor de 5 posies para armazenar valores inteiros.
c. Declare uma matriz de 3 x 2 para armazenar valores do tipo literal.
Unidade 3
prog_orient_objetos.indb 65
65
2/7/2007 16:44:36
Saiba mais
Fundamentos da Linguagem
http://www.jspbrasil.com.br/jsp/tutoriais/tutorial.jsp?idTutorial=002_002
66
prog_orient_objetos.indb 66
2/7/2007 16:44:37
UNIDADE 4
Implementando os primeiros
programas em Java
Objetivos de aprendizagem
Seo de estudo
Seo 1 Implementando os primeiros programas em Java
prog_orient_objetos.indb 67
2/7/2007 16:44:37
68
prog_orient_objetos.indb 68
2/7/2007 16:44:37
Passos iniciais
1 Passo: certique-se que o SDK da linguagem Java est
instalado no seu computador e se est devidamente congurado.
importante ressaltar
essa frase de acordo
com o pseudocdigo
mostrado a seguir. Por
qu? Por que podemos
desenvolver um algoritmo
de diversas maneiras
e isso altera como o
algoritmo implementado
na linguagem de
programao.
Unidade 4
prog_orient_objetos.indb 69
69
2/7/2007 16:44:37
70
prog_orient_objetos.indb 70
2/7/2007 16:44:37
JAVA
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import javax.swing.*;
class DadosProfessor {
public static void main(String args[])
{
String NOME, ENDERECO, CIDADE, ESTADO, CEP, DATANASC, GRAUESC, CURSO;
int RG;
NOME =JOptionPane.showInputDialog(Entre com o Nome);
ENDERECO = JOptionPane.showInputDialog(Entre com o Endereo);
CIDADE = JOptionPane.showInputDialog(Entre com a Cidade);
ESTADO = JOptionPane.showInputDialog(Entre com o Estado);
CEP = JOptionPane.showInputDialog(Entre com o CEP);
RG = Integer.parseInt(JOptionPane.showInputDialog(Entre com o RG));
DATANASC = JOptionPane.showInputDialog(Entre com a Data de Nascimento);
GRAUESC = JOptionPane.showInputDialog(Entre com o Grau de Escolaridade);
CURSO = JOptionPane.showInputDialog(Entre com o Curso);
JOptionPane.showMessageDialog(null,Nome + NOME);
JOptionPane.showMessageDialog(null,Endereo + ENDERECO);
JOptionPane.showMessageDialog(null,Cidade + CIDADE);
JOptionPane.showMessageDialog(null,Estado + ESTADO);
JOptionPane.showMessageDialog(null,CEP + CEP);
JOptionPane.showMessageDialog(null,RG + RG);
JOptionPane.showMessageDialog(null,Data de Nascimento + DATANASC);
JOptionPane.showMessageDialog(null,Grau de Escolaridade + GRAUESC);
JOptionPane.showMessageDialog(null,Curso + CURSO);
System.exit(0);
}
}
Unidade 4
prog_orient_objetos.indb 71
71
2/7/2007 16:44:37
72
prog_orient_objetos.indb 72
2/7/2007 16:44:37
Unidade 4
prog_orient_objetos.indb 73
73
2/7/2007 16:44:38
1) Na EDIO
voc deve digitar o programa acima num editor de texto. Vamos
usar o Bloco de Notas do Windows. Abra o Bloco de Notas,
digite o programa CUIDANDO letras minsculas e maisculas
e salve-o na pasta CURSOWEB criada anteriormente.
Saiba mais
Voc pode utilizar uma IDE para o desenvolvimento
de seus programas. Uma IDE uma ambiente de
desenvolvimento (software) onde o programador
pode digitar o programa, compilar e executar. Existem
vrias IDEs no mercado. Algumas mais profissionais
como JBuilder, Eclipse, NetBeans e outras mais
simples como JCreator, JEdit.
74
prog_orient_objetos.indb 74
2/7/2007 16:44:38
IMPORTANTE
Na hora de salvar o arquivo contendo o cdigo
digitado, utilize o mesmo nome da class, ou seja, se
a class se chama DadosProfessor, o nome do arquivo
deve se chamar DadosProfessor.java. No esquea a
extenso (.java)
cd ..
cd <nome da pasta>
md <nome da pasta>
IMPORTANTE
Na hora de compilar o programa no esquea de
digitar o nome da classe seguido de .java. Preste
ateno para digitar o nome da class da mesma
maneira que voc a salvou.
Unidade 4
prog_orient_objetos.indb 75
75
2/7/2007 16:44:38
76
prog_orient_objetos.indb 76
2/7/2007 16:44:39
Unidade 4
prog_orient_objetos.indb 77
77
2/7/2007 16:44:40
78
prog_orient_objetos.indb 78
2/7/2007 16:44:40
Unidade 4
prog_orient_objetos.indb 79
79
2/7/2007 16:44:40
80
prog_orient_objetos.indb 80
2/7/2007 16:44:41
Sntese
Nesta unidade, voc desenvolveu os primeiros programas (sem
controle de uxo) na linguagem Java, com entrada e sada de
dados.
importante que voc pratique as informaes passadas nessa
unidade, ou seja, que voc saiba como se declara variveis de
memria, como programa uma instruo de entrada de dados e
como se programa uma instruo de sada de dados, tudo dentro
da estrutura de classe da linguagem Java.
Unidade 4
prog_orient_objetos.indb 81
81
2/7/2007 16:44:42
Atividades de auto-avaliao
1) Desenvolver em Java TODOS os exerccios de auto-avaliao da seo 1
da Unidade 5 da disciplina de Lgica de Programao I.
Saiba mais
FURGERI, Sergio. Java 2 Ensino Didtico. So Paulo: rica,
2002.
82
prog_orient_objetos.indb 82
2/7/2007 16:44:42
UNIDADE 5
Implementando programas em
Java com controle de uxo
Objetivo de aprendizagem
Seo de estudo
Seo 1 Estruturas de Controle de Fluxo em Java
prog_orient_objetos.indb 83
2/7/2007 16:44:42
84
prog_orient_objetos.indb 84
2/7/2007 16:44:43
numero = numero /2 .
Unidade 5
prog_orient_objetos.indb 85
85
2/7/2007 16:44:43
86
prog_orient_objetos.indb 86
2/7/2007 16:44:43
11 else
12
if (MEDIA = = 7.0)
13
14
15
16
System.exit(0);
17 }
18 }
Unidade 5
prog_orient_objetos.indb 87
87
2/7/2007 16:44:43
88
prog_orient_objetos.indb 88
2/7/2007 16:44:43
Unidade 5
prog_orient_objetos.indb 89
89
2/7/2007 16:44:43
prog_orient_objetos.indb 90
2/7/2007 16:44:43
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import javax.swing.*;
class Alunos{
public static void main(String args[])
{
String nome;
int NUMALUNOS;
NUMALUNOS = 1;
while (NUMALUNOS <= 100) {
NOME=JOptionPane.showInputDialog(Entre com o Nome);
JOptionPane.showMessageDialog(null,Aluno cadastrado+NOME);
//incrementa-se a varivel NUMALUNOS a cada repetio
NUMALUNOS = NUMALUNOS + 1;
}
System.exit(0);
}
}
Unidade 5
prog_orient_objetos.indb 91
91
2/7/2007 16:44:44
2. para/faa/m-para-faa
Em Java a estrutura para/faa/m-para-faa possui a sintaxe
mostrada abaixo:
for (inicializao da varivel de controle ; condio de repetio ;
incremento da varivel de controle)
instruo ou { bloco }
prog_orient_objetos.indb 92
2/7/2007 16:44:44
Unidade 5
prog_orient_objetos.indb 93
93
2/7/2007 16:44:44
Sntese
Nessa unidade voc avanou um pouco mais e passou a
desenvolver programas com controle de uxo de execuo,
ou seja, usando estruturas que controlam o uxo de execuo
dos programas como a estrutura se (if), a estrutura enquanto
(while) e a estrutura para-faa (for). Com elas voc ir conseguir
desenvolver a maioria dos programas.
94
prog_orient_objetos.indb 94
2/7/2007 16:44:44
Atividades de auto-avaliao
1) Desenvolver em Java todos os exerccios de auto-avaliao da seo 2,
da Unidade 5, da disciplina de Lgica de Programao I (Exerccios com
estrutura condicional).
Unidade 5
prog_orient_objetos.indb 95
95
2/7/2007 16:44:44
96
prog_orient_objetos.indb 96
2/7/2007 16:44:44
Saiba mais
Tutorial sobre Variveis primitivas e Controle de uxo
http://www.caelum.com.br/download/fj-joo/fj-2.pdf
Unidade 5
prog_orient_objetos.indb 97
97
2/7/2007 16:44:44
prog_orient_objetos.indb 98
2/7/2007 16:44:44
UNIDADE 6
Desenvolvendo programas
modularizados em Java
Objetivos de aprendizagem
Seo de estudo
Seo 1 Modularizao de programas em Java
prog_orient_objetos.indb 99
2/7/2007 16:44:44
100
prog_orient_objetos.indb 100
2/7/2007 16:44:45
Unidade 6
prog_orient_objetos.indb 101
101
2/7/2007 16:44:45
102
prog_orient_objetos.indb 102
2/7/2007 16:44:45
prog_orient_objetos.indb 103
103
2/7/2007 16:44:45
104
prog_orient_objetos.indb 104
2/7/2007 16:44:45
1 import javax.swing.*;
2 class Calcula{
3 public static void main(String args[])
4{
5 int n1,n2, resultado;
6 n1=Integer.parseInt(JOptionPane.showInputDialog(Entre com o Numero 1));
7 n2=Integer.parseInt(JOptionPane.showInputDialog(Entre com o Numero 2));
8 resultado = soma (n1,n2);
9 imprime(Resultado, resultado);
10 }
11
12 public static int soma(int n1, int n2)
13 {
14 return n1 + n2;
15 }
16
17 public static void imprime(String legenda, int valor)
18 {
19 JOptionPane.showMessageDialog(null, legenda + valor);
20 }
21 }
22
Unidade 6
prog_orient_objetos.indb 105
105
2/7/2007 16:44:45
106
prog_orient_objetos.indb 106
2/7/2007 16:44:46
Sntese
Nessa unidade voc aprendeu a desenvolver programas
modularizados, isto , divididos em mdulos, chamados de
procedimentos ou funes. Aprendeu, tambm, a diferena entre
um procedimento e uma funo. Esse entendimento ser muito
importante para as unidades futuras, principalmente quando
entrarmos na unidade de orientao a objetos. Modularizar
programas importante porque facilita a manuteno do cdigo
(alteraes futuras) e torna os programas mais legveis, mais
organizados.
Unidade 6
prog_orient_objetos.indb 107
107
2/7/2007 16:44:46
Atividades de auto-avaliao
1) Faa um programa em Java que leia 3 nmeros e calcule a sua mdia.
O programa deve ser modularizado. Utilize uma funo para calcular
e retornar a mdia dos nmeros. Essa funo deve receber os trs
nmeros como parmetro.
2) Crie um programa em Java que leia o raio de uma esfera (do tipo real) e
passe esse valor para a funo volumeEsfera. Essa funo deve calcular
o volume da esfera na tela e retornar o seu valor.
Para o clculo do volume deve ser usada a seguinte frmula:
Volume = (4.0 / 3.0) * PI * raio3
108
prog_orient_objetos.indb 108
2/7/2007 16:44:46
Unidade 6
prog_orient_objetos.indb 109
109
2/7/2007 16:44:46
prog_orient_objetos.indb 110
2/7/2007 16:44:46
UNIDADE 7
Introduo Programao
Orientada a Objeto (POO)
Objetivos de aprendizagem
Sees de estudo
Seo 1 Paradigma de Programao Orientada a Objeto
Seo 2 Implementando uma Classe e criando Objetos a
partir dela
prog_orient_objetos.indb 111
2/7/2007 16:44:46
Entenda paradigma de
programao como um estilo,
uma maneira de se desenvolver
um programa. Existem outros
paradigmas de programao como
veremos adiante.
112
prog_orient_objetos.indb 112
2/7/2007 16:44:46
Um pouco de histria
O conceito de programao orientada a objeto no algo novo.
No nal da dcada de 60, a linguagem Simula67, desenvolvida na
Noruega, introduzia conceitos hoje encontrados nas linguagens
orientadas a objetos. Em meados de 1970, o Centro de Pesquisa
da Xerox (PARC) desenvolveu a linguagem Smalltalk, a primeira
totalmente orientada a objetos. No incio da dcada de 80, a
AT&T lanou a Linguagem C++, uma evoluo da linguagem de
programao C em direo orientao a objetos.
Atualmente, um grande nmero de linguagens incorpora
caractersticas de orientao a objeto, tais como Java, Object
Pascal, Python , etc.
Unidade 7
prog_orient_objetos.indb 113
113
2/7/2007 16:44:46
114
prog_orient_objetos.indb 114
2/7/2007 16:44:46
Disciplina nesse
caso refere-se a uma
disciplina oferecida
numa universidade.
Essa operao
car mais clara
(concreta), quando
avanarmos
um pouco mais
nos conceitos
de orientao a
objetos.
Unidade 7
prog_orient_objetos.indb 115
115
2/7/2007 16:44:47
Objetos reais
Cliente
Conta
Cliente
Agncia
Conta
Agncia
116
prog_orient_objetos.indb 116
2/7/2007 16:44:47
Joao: Cliente
Ana: Cliente
nome: Joao
endereco: Rua J
nome: Ana
endereco: Rua A
9916:Conta
8761:Conta
Centro:Agencia
numero: 9916
saldo: 1000,00
transaco: dbito
numero: 8761
saldo: 500,00
transaco: crdito
nome: Centro
numero: 123
Unidade 7
prog_orient_objetos.indb 117
117
2/7/2007 16:44:47
1) Estado
representado pelos valores dos atributos de um objeto em um
determinado instante do tempo. O estado do objeto usualmente
muda ao longo da existncia do objeto.
Estado 2
Joao: Cliente
Joao: Cliente
nome: Joao
endereco: Rua J
nome: Joao
endereco: Rua J
2) Comportamento
Determina como um objeto age e reage: suas modicaes de
estado e interaes com outros objetos.
O comportamento determinado pelo conjunto de operaes ou
mtodos que o objeto pode realizar. Operaes ou mtodos so
algo que voc pede para o objeto fazer, como fazer um depsito
(comportamento de qualquer objeto do tipo Conta).
Voc deve estar achando estranho: fazer um depsito
um comportamento de qualquer objeto do tipo
Conta? Isso mesmo!
118
prog_orient_objetos.indb 118
2/7/2007 16:44:47
Unidade 7
prog_orient_objetos.indb 119
119
2/7/2007 16:44:47
3) Identidade
Refere-se identicao do objeto. Como cada objeto nico,
ou seja, tem seus prprios valores nos atributos, ele deve ser
identicado por algum nome. Mesmo que seu estado seja
idntico ao de outro objeto ele tem identicao prpria.
A identicao do objeto do tipo Agncia mostrado na gura
abaixo Centro. Esse objeto poderia ter qualquer nome
identicando-o.
Centro:Agencia
nome: Centro
numero: 123
prog_orient_objetos.indb 120
2/7/2007 16:44:48
Ateno!
Os conceitos de classe e objeto so os mais bsicos
e importantes da orientao a objetos. O correto
entendimento desses conceitos imprescindvel para
o entendimento dos demais conceitos da OO.
Conta
Agencia
nome: String
endereo: String
cpf: int
numero: int
saldo: double
transao: String
codigo: int
nome: String
alteraNome()
alteraEndereco()
alteraCpf()
forneceNome()
forneceEndereco()
forneceCpf()
Unidade 7
prog_orient_objetos.indb 121
121
2/7/2007 16:44:48
Cliente
Joao: Cliente
nome: String
endereo: String
cpf: int
nome: Joao
endereco: Rua J
alteraNome()
alteraEndereco()
alteraCpf()
forneceNome()
forneceEndereco()
forneceCpf()
Ana: Cliente
nome: Ana
endereco: Rua A
122
prog_orient_objetos.indb 122
2/7/2007 16:44:48
Unidade 7
prog_orient_objetos.indb 123
123
2/7/2007 16:44:48
124
prog_orient_objetos.indb 124
2/7/2007 16:44:48
Unidade 7
prog_orient_objetos.indb 125
125
2/7/2007 16:44:48
No devem ser utilizados smbolos de sublinhado (_) nomes compostos por mltiplas palavras so organizados
com todas as palavras juntas, onde a primeira letra de
cada uma fica em maiscula.
126
prog_orient_objetos.indb 126
2/7/2007 16:44:48
Mtodos tambm so
sinnimos de subrotinas
que voc aprendeu em
Lgica de Programao II
e foi revisado na unidade
anterior. Lembre-se
que existem dois tipos:
procedimento e funes.
Procedimento o mtodo
que no retorna valor e
funo o mtodo que
retorna valor.
Unidade 7
prog_orient_objetos.indb 127
Fala-se em atributos
do objeto porque
tudo o que denido
na classe ser atributo
de comportamento de
qualquer objeto criado
(instanciado) a partir dela.
127
2/7/2007 16:44:48
128
prog_orient_objetos.indb 128
2/7/2007 16:44:49
Linha 1
Linha 2
Linha 3
Linha 4
Linha 5
Linha 6
Linha 7
Linha 8
Linha 9
Unidade 7
prog_orient_objetos.indb 129
System.out.println ( )
uma instruo de sada
de dados. Ela uma
alternativa a instruo
JOptionPane.showMess
ageDialog(null,..) usadas
nas unidades anteriores.
Porm, essa instruo no
imprime o dado dentro de
uma caixa de dilogo e sim,
na janela do MS-DOS.
129
2/7/2007 16:44:49
prog_orient_objetos.indb 130
2/7/2007 16:44:49
Nome da Classe
a partir da qual o
objeto ser criado
Nome do objeto
Memria
nome
endereco
Objeto C
cpf
Unidade 7
prog_orient_objetos.indb 131
131
2/7/2007 16:44:49
132
prog_orient_objetos.indb 132
2/7/2007 16:44:49
Objeto C
endereco Rua A
cpf
Objeto C
nome Ana
endereco Rua A
cpf 1235
Unidade 7
prog_orient_objetos.indb 133
133
2/7/2007 16:44:50
Sntese
Nessa unidade voc, nalmente, foi apresentando ao mundo da
orientao a objetos. Esse um mundo cheio de conceitos que
voc ter que aprender para desenvolver programas orientado a
objetos. Os primeiros conceitos apresentados nessa unidade so
classe e objeto. Eles devem estar muito claros para voc, pois so
indispensveis para a aprendizagem nas unidades seguintes.
Vamos partir para a prtica?
Revise os comando para compilao
e execuo de programas na
linguagem Java nas unidades
anteriores.
Atividades de auto-avaliao
1) Edite a classe Cliente no editor de texto (Bloco de Notas ou qualquer
ambiente para desenvolvimento de programas Java) e salve na pasta
CURSOWEBOO. Essa pasta deve ser criada anteriormente. Aps a
edio (digitao) compile a classe. O arquivo Cliente.class deve ter sido
gerado.
134
prog_orient_objetos.indb 134
2/7/2007 16:44:50
Unidade 7
prog_orient_objetos.indb 135
135
2/7/2007 16:44:50
Saiba mais
Deitel, H.M. e Deitel, P.J. Java - Como programar. Sexta
Edio. Porto Alegre: Editora Pearson, 2005.
Lemay, Laura e Cadenhead, Rogers. Aprenda em 21 dias Java
1.2. Rio de Janeiro: Editora Campus, 1999.
136
prog_orient_objetos.indb 136
2/7/2007 16:44:50
UNIDADE 8
Conceitos de Orientao a
Objeto
Objetivos de aprendizagem
Sees de estudo
Seo 1 Referncia e Objeto
Seo 2 Criando programas com mais de um Objeto
Seo 3 Refinando a Criao de uma Classe
Seo 4 Encapsulamento
prog_orient_objetos.indb 137
2/7/2007 16:44:50
138
prog_orient_objetos.indb 138
2/7/2007 16:44:50
Unidade 8
prog_orient_objetos.indb 139
139
2/7/2007 16:44:50
varivel c
123x
nome
Objeto
Cliente
endereco
endereo 123x
cpf
140
prog_orient_objetos.indb 140
2/7/2007 16:44:50
varivel c
123x
nome Ana
Objeto
Cliente
endereo 123x
endereco
cpf 0
varivel c
123x
nome Ana
Objeto
Cliente
endereo 123x
endereco Rua A
cpf 1235
prog_orient_objetos.indb 141
141
2/7/2007 16:44:51
123x
nome
Objeto
Cliente
endereco
endereo 123x
cpf 0
142
prog_orient_objetos.indb 142
2/7/2007 16:44:51
c
b
123x
null
nome
Objeto
Cliente
endereo 123x
endereco
cpf 0
c
b
123x
123x
nome
Objeto
Cliente
endereo 123x
endereco
cpf 0
prog_orient_objetos.indb 143
143
2/7/2007 16:44:51
123x
c
b
123x
nome Ana
Objeto
Cliente
endereco Rua A
endereo 123x
cpf 75645
144
prog_orient_objetos.indb 144
2/7/2007 16:44:51
preciso car claro que uma vez que a classe (TAD) que
dene os atributos e comportamentos de algum objeto est
implementada e compilada, poder ser usada para a criao e
manipulao de objetos do tipo da classe em milhares de outras
classes (programas).
Isso deve oportunizar voc a entender mais visivelmente, um dos
maiores benefcios da orientao a objetos, ou seja, uma vez que
classe que dene os atributos e comportamentos de algum objeto
est pronta, ela pode ser usada para criar objetos e manipular seus
atributos por toda a vida.
Voc no ter mais que se preocupar em denir os atributos e
comportamentos de algum objeto Cliente, por exemplo. Se isso
foi feito uma vez, vai servir para ser usado para criar objetos do
tipo Cliente para sempre, a no ser que os atributos de Cliente
se alterem, diminuam ou aumentem. Nesse caso, a classe que
representa esses atributos e comportamentos ter que ser alterada
e compilada novamente.
Diante disso, vamos criar uma outra classe para manipular
objetos do tipo Cliente.
Vamos chamar essa classe de UsaCliente2.java.
Linha 2
Linha 3
Linha 4
Linha 5
Linha 6
Linha 7
Linha 8
Linha 9
Linha 10
cliente2.alteraCpf(1235);
Linha 11
Linha 12
Linha 13 }
Linha 14 }
Unidade 8
prog_orient_objetos.indb 145
145
2/7/2007 16:44:51
123x
Cliente 2
124x
nome Ana
Objeto
endereco Rua A
endereo 123x
cpf 4455
nome Joo
endereco Rua J
Objeto
endereo 124x
cpf 1235
146
prog_orient_objetos.indb 146
2/7/2007 16:44:51
Unidade 8
prog_orient_objetos.indb 147
147
2/7/2007 16:44:52
148
prog_orient_objetos.indb 148
2/7/2007 16:44:52
Linha 1
Linha 2
Linha 3
Linha 4
Linha 5
Linha 6
Linha 7
cliente1.alteraCpf(12352241123);
Linha 11
Linha 12
Linha 13
Linha 14 }
prog_orient_objetos.indb 149
149
2/7/2007 16:44:52
Cliente 1
Objeto
Cliente
123x
nome
endereco
endereo 123x
cpf 0
150
prog_orient_objetos.indb 150
2/7/2007 16:44:52
Cliente 1
123x
Cliente 2
124x
Objeto
Cliente
nome
endereo 123x
endereco
cpf 0
Objeto
Cliente
nome Carlos
endereo 124x
endereco Rua C
cpf 123552244
Importante!
Quando nenhum mtodo construtor especicado na classe,
um construtor padro chamado automaticamente e inicializa
atributos de tipo primitivos(int,double,etc.) com 0, atributos do
tipo boolean para false e null para atributos do tipo objeto.
Outro conceito importante que vamos detalhar o de mtodos
modicadores (set) e recuperadores (get) de uma classe.
Unidade 8
prog_orient_objetos.indb 151
Veremos o que um
atributo do tipo objeto
mais adiante.
151
2/7/2007 16:44:52
prog_orient_objetos.indb 152
2/7/2007 16:44:53
Unidade 8
prog_orient_objetos.indb 153
153
2/7/2007 16:44:53
154
prog_orient_objetos.indb 154
2/7/2007 16:44:53
SEO 4 - Encapsulamento
Na unidade anterior voc estudou o conceito de ABSTRAO,
que empregado no momento em que voc abstrai atributos e
comportamentos de um objeto do mundo real para um objeto do
mundo do software e representa isso atravs de uma classe.
Outro conceito muito importante da OO o
ENCAPSULAMENTO.
O encapsulamento nos diz que atributos e comportamentos em
cima desses atributos devem ser encapsulados dentro do objeto,
ou seja, os atributos de um objeto (nome, cpf, saldo...) devem
ser escondidos de ns (programadores) e s devemos ter acesso
a esses atributos atravs dos mtodos ou comportamentos desse
objeto.
Isso quer dizer que, no devemos ter acesso livre aos atributos de
um objeto, como mostra o trecho de cdigo abaixo:
.
.
Cliente c = new Cliente( ).
c.nome=Ana;
.
.
prog_orient_objetos.indb 155
155
2/7/2007 16:44:53
156
prog_orient_objetos.indb 156
2/7/2007 16:44:53
Sntese
Nessa unidade voc aprendeu a diferena entre dois termos
usados na criao de um objeto. O termo referncia e o termo
objeto. Referncia o endereo fsico de um objeto em memria.
Essa referncia aponta para uma determinada rea de memria
que chamada de objeto.
Unidade 8
prog_orient_objetos.indb 157
157
2/7/2007 16:44:53
Atividades de auto-avaliao
1) Represente graficamente em memria, tal como foi feito nessa unidade,
a seguinte instruo. Identifique na representao grfica o que
referncia e o que objeto.
158
prog_orient_objetos.indb 158
2/7/2007 16:44:53
UNIDADE 9
Aplicando os conceitos de OO
atravs de exemplos prticos
Objetivos de aprendizagem
Sees de estudo
Seo 1 Colocando em Prtica os conceitos de OO
Seo 2 Mtodo sobrecarregado
prog_orient_objetos.indb 159
2/7/2007 16:44:54
160
prog_orient_objetos.indb 160
2/7/2007 16:44:54
Armazenar informaes
sobre os funcionrios
de uma empresa um
problema do mundo real.
Respostas:
1) Funcionrio. Esse problema trata com objetos do tipo Funcionrio.
2) Todo funcionrio tem como atributo nome, endereo, salrio, estado civil, sexo, cor
dos alunos, etc. Todo funcionrio tem comportamentos do tipo digitar documentos,
caminhar, fornecer seu nome, fornecer seu endereo, etc.
3) Sim, todos os objetos so do mesmo tipo: Funcionrio, logo possuem o mesmo
conjunto de atributos e comportamento.
4) Esse problema trata com vrios objetos, mais precisamente, 50 objetos.
Unidade 9
prog_orient_objetos.indb 161
161
2/7/2007 16:44:54
162
prog_orient_objetos.indb 162
2/7/2007 16:44:54
prog_orient_objetos.indb 163
163
2/7/2007 16:44:54
164
prog_orient_objetos.indb 164
2/7/2007 16:44:54
Procedimentos Prticos:
1. Digitar o cdigo acima e salvar o arquivo com o nome
Funcionario.Java na pasta CURSOWEB. (Lembre-se que voc
pode usar o Bloco de Notas ou uma IDE como JCreator,
JBuilder, etc)
2. Compilar a classe Funcionario.java. Se voc usou o Bloco
de Notas para digitar a classe, entre na janela do MS-DOS, v
para a pasta CURSOWEB e digite o comando de compilao:
javac Funcionario.java
Unidade 9
prog_orient_objetos.indb 165
165
2/7/2007 16:44:54
import javax.swing.*;
Linha 1
Linha 2
Linha 3
Linha 4
Linha 5
Linha 6
Linha 7
Linha 8
System.exit(0);
Linha 9
Linha 10 }
Classe CadastroFuncionario que
cria um objeto do tipo Funcionrio
(linha 3) para poder armazenar
nome, endereco e salario de um
funcionario.
prog_orient_objetos.indb 166
2/7/2007 16:44:55
Procedimentos Prticos:
1. Digitar o cdigo acima e salvar o arquivo com o nome
CadastroFuncionario.Java na pasta CURSOWEB.
2. Compilar a classe CadastroFuncionario.java. A compilao
deve gerar o arquivo CadastroFuncionario.class. Comando
de compilao:
javac CadastroFuncionario.java
Tela 1
Tela 2
Tela 4
Tela 3
Unidade 9
prog_orient_objetos.indb 167
167
2/7/2007 16:44:55
Linha 3
Linha 4
Linha 5
Linha 6
Linha 7
Linha 8
...
Linha 9
....
Linha 10
....
Linha 11
Linha 12 }
168
prog_orient_objetos.indb 168
2/7/2007 16:44:55
Linha 3
Linha 4
num[0] = 5;
Linha 5
Linha 6
num[2] = 6;
Linha 7
System.exit(0);
Linha 8
Linha 9 }
num[ ]
Unidade 9
prog_orient_objetos.indb 169
169
2/7/2007 16:44:56
Linha 3
Linha 4
Linha 5
Linha 6
Linha 7
Linha 8
System.exit(0);
}
Linha 9 }
170
prog_orient_objetos.indb 170
2/7/2007 16:44:56
Linha 3
Linha 4
Linha 5
f[i]=new Funcionario( );
Linha 6
Linha 7
Linha 8
Linha 9
Linha 10 }
Linha 11
System.exit(0);
Linha 12
Linha 13 }
f[]
null
null
null
null
null
..
null
..
null
49
null
Unidade 9
prog_orient_objetos.indb 171
171
2/7/2007 16:44:56
172
prog_orient_objetos.indb 172
2/7/2007 16:44:56
f[]
155x
null
null
null
null
..
null
..
null
49
Null
nome
Objeto Funcionrio
endereo
endereo 155x
salrio
Unidade 9
prog_orient_objetos.indb 173
173
2/7/2007 16:44:56
f[]
155x
null
null
null
null
..
null
..
null
49
Null
nome Ana
Objeto Funcionrio
endereo
endereo 155x
salrio
174
prog_orient_objetos.indb 174
2/7/2007 16:44:56
f[]
155x
156x
157x
Null
Null
..
Null
..
Null
49
Null
nome Ana
endereo 155x
endereo Rua A
salrio 1000,00
nome Joo
endereo 156x
endereo Rua J
salrio 1500,00
nome Carlos
endereo 157x
endereo Rua C
salrio 2500,00
..
Unidade 9
prog_orient_objetos.indb 175
175
2/7/2007 16:44:56
176
prog_orient_objetos.indb 176
2/7/2007 16:44:56
Unidade 9
prog_orient_objetos.indb 177
Mtodo construtor
sobrecarregado
Funcionrio (String
snome, String sendere,
double ssal). Recebe como
parmetro o nome do
funcionrio na varivel
do tipo String snome,
o endereo na varivel
String sendere e o salrio
na varivel double ssal
e armazena o contedo
dessas variveis nos
respectivos atributos. Note
que j existe outro mtodo
construtor, mas esse
no recebe parmetros.
Isso quer dizer que o
mtodo construtor est
sobrecarregado.
177
2/7/2007 16:44:57
Linha 12
Linha 13
Linha 14
Linha 15
Linha 16
Linha 17
Linha 18
Linha 19
Linha 20
Linha 21
Linha 22
Linha 23
Linha 24
Linha 25
Linha 26
Linha 27
Linha 28
Linha 29
Linha 30
Linha 31
Linha 32
Linha 33
Linha 34
Linha 35
Linha 36
Linha 37
Linha 38
Linha 39
Linha 40
Linha 41
Linha 42
Linha 43
Linha 44 }
nome = snome;
endereo = sendere;
salario = ssal;
}
public void setNome(String snome){
nome=snome;
}
public void setEndereco(String sender){
endereco=sender;
}
public void setSalario(double dsalario){
salario=dsalario;
}
public void setSalario(String ssalario){
salario = Double.parseDouble(ssalario);
}
public String getNome(){
return nome;
}
public String getEndereco(){
return endereco;
}
public double getSalario(){
return salario;
}
178
prog_orient_objetos.indb 178
2/7/2007 16:44:57
Unidade 9
prog_orient_objetos.indb 179
179
2/7/2007 16:44:57
Sntese
Nessa unidade voc reforou os conceitos de classe e objeto,
bem como, a diferena entre referncia e objeto, aprendidos nas
unidades anteriores, porm, atravs de um novo exemplo.
Aprendeu passo a passo como modelar um problema do mundo
real para o mundo orientado a objeto, identicando os objetos do
problema, seus atributos e comportamentos e representando esses
objetos atravs de uma classe.
Aprendeu tambm a desenvolver programas com a criao de
mais de um objeto e manipulao desses objetos dentro de um
vetor. Trabalhar com vetor de objeto ser muito necessrio daqui
para frente, pois vamos comear a desenvolver programas que
armazenam informaes para vrios objetos.
180
prog_orient_objetos.indb 180
2/7/2007 16:44:57
Atividades de auto-avaliao
1) Implemente o cdigo explicado nessa unidade.
Unidade 9
prog_orient_objetos.indb 181
181
2/7/2007 16:44:57
prog_orient_objetos.indb 182
2/7/2007 16:44:57
UNIDADE 10
Modicadores
Objetivo de aprendizagem
Seo de estudo
Seo 1 Modificadores
prog_orient_objetos.indb 183
2/7/2007 16:44:57
SEO 1 - Modicadores
Na linguagem Java, podemos utilizar algumas palavras-chave
(keyword) para modicar o modo como so declaradas classes,
mtodos e variveis (atributos). Veremos como aplicar cada um
desses modicadores no texto a seguir.
184
prog_orient_objetos.indb 184
2/7/2007 16:44:57
Declarao de todos
os atributos com o
modicador de acesso
private.
Declarao de mtodo com
o modicador de acesso
public.
Modicador private
No exemplo acima, todos os atributos declarados possuem o
modicador private, o que determina que eles so privados
classe, ou seja, s podem ser acessados por mtodos da prpria
classe Funcionrio. Esses atributos no podem ser acessados
diretamente pelo nome em outras classes, como mostra o cdigo
abaixo:
Linha 1 public class CadastroFuncionario{
Linha 2 public static void main(String args[]) {
Linha 3
Funcionario f=new Funcionario( );
Linha 4
f.nome = Ana;
Linha 5 }
Linha 6 }
Unidade 10
prog_orient_objetos.indb 185
185
2/7/2007 16:44:58
f.setNome(Ana);
Modicador public
Quando um membro de uma classe (atributo ou mtodo) for
declarado como modicador public ele poder ser acessado,
diretamente pelo nome, dentro da prpria classe e por outras
classes tambm.
Qual membro de uma classe ns queremos que seja
acessado por outras classes? Atributos ou mtodos?
186
prog_orient_objetos.indb 186
2/7/2007 16:44:58
Unidade 10
prog_orient_objetos.indb 187
187
2/7/2007 16:44:58
Linha 5 }
Linha 6 }
Modicador protected
Esse modicador ser abordado quando voc aprender o conceito
de herana.
Modicador nal
O modicador nal no um modicador de acesso, ou seja,
seu objetivo no controlar o acesso a atributos e mtodos de um
objeto.
Na maioria das vezes, desejado que os atributos (variveis de
instncia) de um objeto tenham seus valores modicados. Porm,
existem situaes em que um atributo tem um valor xo e esse
valor no deve ser mudado. O atributo ter esse valor para todos
os objetos que forem instanciados (criados) a partir dessa classe.
Quando essa situao ocorrer, devemos denir o atributo com o
modicador nal.
Vamos mostrar o uso desse modicador em outra classe que
representa atributos e comportamento de objetos Crculo: a classe
Circulo.
Todo objeto Circulo tem como atributos o raio e o pi. Porm, o
valor de pi xo, constante, no deve mudar para cada objeto do
tipo Circulo. Logo, o atributo pi um candidato em potencial a
ter um modicador nal.
188
prog_orient_objetos.indb 188
2/7/2007 16:44:58
Linha 1
Linha 2
Linha 3
Linha 4
Linha 5
}
public void setRaio(double draio){
raio=draio;
}
public double getRaio(){
return raio;
}
public double getPi(){
return pi;
}
public double calculaArea( ){
return pi*raio*raio;
}
}
Unidade 10
prog_orient_objetos.indb 189
189
2/7/2007 16:44:58
C1
referncias C 2
C3
10x
11x
290v
raio
endereo 10x
pi 3.14
Objetos Crculo
raio
pi 3.14
raio
endereo 11x
endereo 290x
pi 3.14
190
prog_orient_objetos.indb 190
2/7/2007 16:44:58
Modicador static
O modicador static no um modicador de acesso, ou seja,
seu objetivo no controlar o acesso a atributos e mtodos de
um objeto. Sabemos que cada objeto instanciado a partir de uma
classe tem sua prpria cpia de todos os atributos (variveis de
instncia) da classe.
Quando existir uma situao em que o valor de uma varivel
de instncia puder ser compartilhado por todos os objetos
instanciados a partir de uma classe, essa varivel pode ser
denida como static.
Declarar um atributo como static economiza memria, uma vez
que esse valor (espao na memria) compartilhado por todos os
objetos criados a partir da classe onde o atributo static foi criado.
Mas em qual situao vamos desejar que um atributo
seja compartilhado por todos os objetos de uma
classe?
Resposta: quando o valor desse atributo puder ser
compartilhado por todos os objetos criados.
Unidade 10
prog_orient_objetos.indb 191
191
2/7/2007 16:44:59
192
prog_orient_objetos.indb 192
2/7/2007 16:44:59
pi
3.14
c1
referncias c 2
c3
10x
Objetos Crculo*
11x
290v
raio
endereo 10x
raio
endereo 11x
raio
endereo 290x
Unidade 10
prog_orient_objetos.indb 193
193
2/7/2007 16:44:59
Mtodos static
Mtodos de uma classe tambm podem ser declarados com
o modicador static, porm, se isso acontecer, esses somente
podero acessar atributos e outros mtodos tambm static.
Isso acontece porque qualquer membro da classe (atributo
ou mtodo) declarado como static, pertence classe e no a
nenhuma instncia (objeto) em particular dessa classe.
Vamos transformar o mtodo getPi( ) da classe Circulo em
static.
public static double getPi(){
return pi;
}
194
prog_orient_objetos.indb 194
2/7/2007 16:44:59
Unidade 10
prog_orient_objetos.indb 195
195
2/7/2007 16:44:59
Exemplos:
JOptionPane.showInputDialog(Entre com o valor);
196
prog_orient_objetos.indb 196
2/7/2007 16:44:59
Linha 1
Linha 2
Linha 3
Linha 4
Linha 5
Linha 6
Linha 7
Linha 8
Linha 9
Linha 10
Linha 11
Linha 12
Linha 13
Linha 14
Linha 15
Linha 16
Linha 17
Linha 18
Linha 19
Linha 20
Linha 21
Linha 22
Linha 23
Linha 24
Linha 25
Linha 26
Linha 27
Linha 28
Linha 29
Linha 30
Linha 31
Linha 32
Linha 33
Linha 34
Linha 35
Linha 36
Linha 37
Linha 38
Linha 32 }
Unidade 10
prog_orient_objetos.indb 197
197
2/7/2007 16:44:59
Linha 4
Linha 5
Linha 6
Linha 7
System.out.println(f1.getCont());
Linha 8
System.out.println(f2.getCont());
Linha 9
Linha 10 }
198
prog_orient_objetos.indb 198
2/7/2007 16:45:00
Isso faz com que o atributo cont armazene + 1. Logo, o seu valor
no momento 1.
A gura ilustra a representao em memria depois da execuo
dessa instruo.
O objeto f1 criado, seu mtodo construtor chamado e
incrementa o valor do atributo cont.
Objeto Funcionrio
pi
f1
100x
nome
Endereo
Salrio 0
Unidade 10
prog_orient_objetos.indb 199
endereo 100x
199
2/7/2007 16:45:00
cont
f1
Objetos Funcionrio
2
100x
101x
nome
Endereo
Salrio 0
nome
Endereo
Salrio 0
endereo 100x
endereo 101x
200
prog_orient_objetos.indb 200
2/7/2007 16:45:00
Sntese
Nessa unidade voc aprendeu sobre modicadores. Viu que
existem os chamados modicadores de acesso (public, private,
protected e pacote) e que existem os modicadores static e nal.
Modicadores podem ser aplicados a uma classe, atributo ou
mtodo.
importante que voc entenda porqu usava a palavra public,
private, static nos programas anteriores.
Agora isso se tornou possvel.
Vimos nessa unidade as aplicaes mais importantes desses
modicadores, contudo, existem outras possibilidades de
aplicao dos modicadores.
Unidade 10
prog_orient_objetos.indb 201
201
2/7/2007 16:45:00
Atividades de auto-avaliao
1) Analise o seguinte trecho de cdigo e identifique se existe algum erro.
Caso exista, explique qual o erro e como solucion-lo.
//classe Retangulo
public class Retngulo{
private double base, altura;
//mtodos
}
//classe calcula que cria objeto retangulo
public class CalculaRetangulo{
public static void main(String args[]){
Retangulo r = new Retangulo( )
r.base = 5.0;
r.altura = 6.0
}
}
202
prog_orient_objetos.indb 202
2/7/2007 16:45:00
Unidade 10
prog_orient_objetos.indb 203
203
2/7/2007 16:45:00
prog_orient_objetos.indb 204
2/7/2007 16:45:00
UNIDADE 11
Objetivo de aprendizagem
Seo de estudo
Seo 1 Associao
prog_orient_objetos.indb 205
2/7/2007 16:45:00
SEO 1 Associao
Ao modelar os atributos da classe Funcionrio (lembre-se que ela
representa os atributos e comportamentos de objetos Funcionrio)
podemos denir que o setor em que o funcionrio trabalha uma
informao importante.
206
prog_orient_objetos.indb 206
2/7/2007 16:45:00
Funcionario
nome: String
endereo: String
salario: double
setor: Setor
Funcionario( )
setNome(String snome )
setEndereco(String send )
setSalario(double dsal )
setSetor(Setor ssetor)
getNome( ):String
getEndereco( ):String
getSalario( ):double
getSetor( ):Setor
Setor
0*
codigo: int
nome: String
Setor( )
setCodigo( int icod)
setNome(String snome )
getCodigo( ):int
getNome( ):String
prog_orient_objetos.indb 207
207
2/7/2007 16:45:01
*
1
0..*
1..*
0..1
2..4, 6..8
Referncia f 1
Objeto Funcionrio
O atributo setor
guarda uma
referncia ou
endereo de um
objeto Setor.
10x
nome Ana
endereo Rua A
salrio 1000.00
setor 150x
Cdigo 1
Setor Financeiro
endereo 10x
Objeto Setor
208
prog_orient_objetos.indb 208
2/7/2007 16:45:01
Unidade 11
prog_orient_objetos.indb 209
209
2/7/2007 16:45:01
Linha 1
Linha 2
Linha 3
Linha 4
Linha 5
Linha 6
Linha 7
Linha 8
Linha 9
Linha 10
Linha 11
Linha 12
Linha 13
Linha 14
Linha 15
Linha 16
Linha 17
Linha 18
Linha 19
Linha 20
Linha 21
Linha 22
Linha 23
Linha 24
Linha 25
Linha 26
Linha 27
Linha 28
Linha 29
Linha 30
Linha 31
Linha 32
Linha 33
Linha 34
Linha 35
Linha 36
Linha 37
Linha 38
Linha 39
Linha 40
Linha 41
Linha 42
Linha 43
Linha 44
Linha 45
Linha 46
Linha 47
Linha 48
Linha 49
Linha 50
Linha 51
Linha 52
Linha 53
Linha 54
Linha 55
Linha 56
210
prog_orient_objetos.indb 210
2/7/2007 16:45:01
import javax.swing.*;
public class CadastroFuncionarioSetor{
public static void main(String args[]) {
Setor s[]=new Setor[3];
s[0] = new Setor(1,Financeiro);
s[1] = new Setor(2,Compras);
s[2] = new Setor(3,Almoxarifado);
Funcionario f=new Funcionario( );
f.setNome(JOptionPane.showInputDialog(Entre com o Nome));
f.setEndereco(JOptionPane.showInputDialog(Entre com o Endereo));
f.setSalario(Double.parseDouble(JOptionPane.showInputDialog(Entre com o Salrio)));
int codsetor=Integer.parseInt(JOptionPane.showInputDialog(Entre com o Cdigo do Setor));
for (int i=0;i<3;i++){
if (codsetor = = s[i].getCodigo( ))
f.setSetor(s[i]);
}
Funcionario f2=new Funcionario( );
f2.setNome(JOptionPane.showInputDialog(Entre com o Nome));
f2.setEndereco(JOptionPane.showInputDialog(Entre com o Endereo));
f2.setSalario(Double.parseDouble(JOptionPane.showInputDialog(Entre com o Salrio)));
codsetor=Integer.parseInt(JOptionPane.showInputDialog(Entre com o Cdigo do Setor));
for (int i=0;i<3;i++){
if (codsetor = = s[i].getCodigo( ))
f2.setSetor(s[i]);
}
Funcionario f3=new Funcionario( );
f.3.setNome(JOptionPane.showInputDialog(Entre com o Nome));
f.3.setEndereco(JOptionPane.showInputDialog(Entre com o Endereo));
f3.setSalario(Double.parseDouble(JOptionPane.showInputDialog(Entre com o Salrio)));
codsetor=Integer.parseInt(JOptionPane.showInputDialog(Entre com o Cdigo do Setor));
for (int i=0;i<3;i++){
if (codsetor = = s[i].getCod( ))
f3.setSetor(s[i]);
}
JOptionPane.showMessageDialog(null,Nome e Setor dos Funcionrios \n + f.getNome( )
+ +f.getNomeSetorFunc( ) + \n + f2.getNome( ) + + f2.getNomeSetorFunc( )
+ \n + f3.getNome( ) + + f.3.getNomeSetorFunc( ) );
Linha 37
System.exit(0);
Linha 38 }
Linha 39 }
Unidade 11
prog_orient_objetos.indb 211
211
2/7/2007 16:45:01
S[]
null
null
null
S[]
Objeto Setor
0
1
2
100x
null
null
codigo 1
nomesetor Financeiro
100x
prog_orient_objetos.indb 212
2/7/2007 16:45:01
0
1
2
S[]
100x
101x
102x
Objeto Setor
codigo 1
nomesetor Financeiro
100x
Objeto Setor
codigo 2
nomesetor Compras
101x
Objeto Setor
codigo 3
nomesetor Almoxarifado
102x
90x
0
100x
1
101x
2
102x
Objeto Setor
codigo 1
nomesetor Financeiro
100x
Objeto Setor
codigo 2
nomesetor Compras
101x
Objeto Setor
codigo 3
nomesetor Almoxarifado
102x
Nome
Endereo
Salrio
Setor
90x
Objeto Funcionrio
Unidade 11
prog_orient_objetos.indb 213
213
2/7/2007 16:45:02
prog_orient_objetos.indb 214
2/7/2007 16:45:02
90x
0
100x
1
101x
2
102x
Objeto Setor
codigo 1
nomesetor Financeiro
100x
Objeto Setor
codigo 2
nomesetor Compras
101x
Objeto Setor
codigo 3
nomesetor Almoxarifado
102x
Nome Ana
Endereo Rua A
Salrio 1000.00
Setor 100x
90x
Objeto Funcionrio
Unidade 11
prog_orient_objetos.indb 215
215
2/7/2007 16:45:02
f2
f
S[]
92x
90x
0
100x
1
101x
2
102x
100x
101x
Objeto Setor
codigo 3
nomesetor Almoxarifado
102x
nome Ana
Objeto Funcionrio nndereo Rua A
salrio 1000.00
setor 100x
90x
nome Joo
nndereo Rua J
Objeto Funcionrio
salrio 1700.00
setor 102x
92x
216
prog_orient_objetos.indb 216
2/7/2007 16:45:02
f3
f2
f
S[]
94x
92x
90x
0 100x
1 101x
2 102x
Objeto Setor
codigo 1
nomesetor Financeiro
100x
Objeto Setor
codigo 2
nomesetor Compras
101x
Objeto Setor
codigo 3
nomesetor Almoxarifado
102x
Objeto Funcionrio
nome Ana
nndereo Rua A
salrio 1000.00
setor 100x
90x
Objeto Funcionrio
nome Joo
nndereo Rua J
salrio 1700.00
setor 102x
92x
Objeto Funcionrio
nome Carlos
nndereo Rua C
salrio 2700.00
setor 102x
94x
Unidade 11
prog_orient_objetos.indb 217
217
2/7/2007 16:45:02
218
prog_orient_objetos.indb 218
2/7/2007 16:45:02
Sntese
Nesta unidade voc aprendeu o conceito de relacionamento entre
classes. O relacionamento demonstrado nessa unidade se chama
Associao.
Na maioria dos sistemas orientados a objetos que voc ir
construir, existiro diversas classes representando atributos
e comportamentos dos objetos do problema. Esses objetos,
muito provavelmente, no estaro isolados, ou seja, eles iro se
relacionar. Uma classe poder se relacionar com vrias outras
classes.
Uma das formas de relacionamento a Associao.
Nela, um dos objetos, ou ambos, apenas conhecem o outro
objeto.
Unidade 11
prog_orient_objetos.indb 219
219
2/7/2007 16:45:02
Atividades de auto-avaliao
1) Faa uma nova verso da classe Funcionrio e inclua um novo atributo:
cep.
O cep ir indicar a rua (logradouro) e bairro do funcionrio.O
atributo endereo que j existe para o funcionrio pode armazenar o
complemento do endereo como o nmero, bloco, apto, etc.
Voc deve pensar e modelar cep com um objeto do tipo Cep. Esse
objeto tem os seguintes atributos: cdigo (cep), rua (logradouro) e o
bairro.
Um funcionrio est associado a somente um (1) cep, mas um cep pode
estar associado a vrios funcionrios.
Portanto, existir um relacionamento de Associao entre Funcionrio
e Data, semelhante ao relacionamento trabalhado nessa unidade entre
Funcionrio e Setor.
Modele as classes do sistema em UML.
Crie um programa para cadastrar 5 funcionrios e aps o cadastro
exibir nome, rua e bairro de todos os funcionrios.
220
prog_orient_objetos.indb 220
2/7/2007 16:45:03
UNIDADE 12
Associao na prtica
Objetivo de aprendizagem
Seo de estudo
Seo 1 Associao por exemplos
prog_orient_objetos.indb 221
2/7/2007 16:45:03
prog_orient_objetos.indb 222
2/7/2007 16:45:03
Conta
Cliente
nome: String
endereo: String
cpf: int
multiplicidade
1
0..*
numero: int
saldo: double
cliente: Cliente
Conta( )
setNumero(int inum)
setSaldo(double ssal)
setCliente(Cliente c)
getNumero():int
getSaldo():double
getCliente():Cliente
Cliente( )
setNome(String snome )
setEndereco(String send)
setCpf(int icpf)
getNome(): String
getEndereco(): String
getCpf(): int
Objeto Conta
O atributo cliente guarda uma
referncia ou endereo de um
objeto Cliente (dono da conta)
Objeto Cliente
10x
140x
numero 1596
saldo 2000.00
cliente 140x
Endereo 10x
nome Carlos
endereo Rua R
cpf 626193455
Endereo 140x
Unidade 12
prog_orient_objetos.indb 223
223
2/7/2007 16:45:03
224
prog_orient_objetos.indb 224
2/7/2007 16:45:03
Unidade 12
prog_orient_objetos.indb 225
225
2/7/2007 16:45:03
226
prog_orient_objetos.indb 226
2/7/2007 16:45:03
cta [ ]
null
null
null
cli [ ]
0
1
2
null
null
null
0
1
null
null
cta [ ]
0
1
2
null
null
null
cli [ ]
0
1
140x
null
Objeto Cliente
nome Carlos
endereo Rua R
cpf 626193455
Unidade 12
prog_orient_objetos.indb 227
Endereo 140x
227
2/7/2007 16:45:04
cta [ ]
0
1
2
160x
null
null
cli [ ]
0
1
140x
null
Objeto Cliente
nome Carlos
endereo Rua R
cpf 626193455
Endereo 140x
Objeto Conta
numero 1596
saldo 2000.00
cliente 140x
Endereo 160x
228
prog_orient_objetos.indb 228
2/7/2007 16:45:04
cta [ ]
cli [ ]
0
1
2
160x
null
null
0
1
140x
142x
Objeto Cliente
nome Carlos
endereo Rua C
cpf 626193455
Endereo 140x
Objeto Cliente
nome Roger
endereo Rua R
cpf 75567788
Endereo 142x
Objeto Conta
numero 1596
saldo 2000.00
cliente 140x
Endereo 160x
cli [ ]
0
1
2
160x
162x
null
0
1
140x
142x
Objeto Cliente
nome Carlos
endereo Rua C
cpf 626193455
Endereo 140x
Objeto Cliente
nome Roger
endereo Rua R
cpf 75567788
Endereo 142x
Objeto Conta
numero 1596
saldo 2000.00
cliente 140x
Endereo 160x
Objeto Conta
numero 1597
saldo 1000.00
cliente 142x
Endereo 162x
Unidade 12
prog_orient_objetos.indb 229
O atributo cliente do
segundo objeto Conta
aponta ou faz referncia
para o endereo do
segundo objeto Cliente.
142x o endereo do
segundo objeto Cliente
cadastrado.
229
2/7/2007 16:45:04
cli [ ]
0
1
2
160x
162x
164x
0
1
140x
142x
Objeto Cliente
nome Carlos
endereo Rua C
cpf 626193455
Endereo 140x
Objeto Cliente
nome Roger
endereo Rua R
cpf 75567788
Endereo 142x
Objeto Conta
numero 1596
saldo 2000.00
cliente 140x
Endereo 160x
Objeto Conta
numero 1597
saldo 1000.00
cliente 142x
Endereo 162x
Objeto Conta
numero 1598
saldo 500.00
cliente 140x
Endereo 164x
prog_orient_objetos.indb 230
2/7/2007 16:45:04
Linha 30
Saldo
1596
1597
1598
2000.00
1000.00
500.00
Carlos
Roger
Carlos
Unidade 12
prog_orient_objetos.indb 231
231
2/7/2007 16:45:04
232
prog_orient_objetos.indb 232
2/7/2007 16:45:04
Linha 31
break; //instruo de interrompe a repetio (for)
Linha 32
}
Linha 33
}
Linha 34
} //m da op = = 2
Linha 35
else
Linha 36
if (op.equalsIgnoreCase(3))
Linha 38
break; //sai do while
Linha 39
} //m do while
Linha 40
System.exit(0);
Linha 41 } //m do mtodo main( )
Linha 42} //m da classe
Unidade 12
prog_orient_objetos.indb 233
233
2/7/2007 16:45:05
Sntese
Nesta unidade, voc fortaleceu seu conhecimento sobre o
relacionamento de associao entre classes.
Para isso, retomamos o exemplo de sistema que utilizamos nas
primeiras unidades em que trabalhamos conceitos de OO. Foram
implementadas as classes Cliente e Conta (conta corrente) e,
posteriormente, foram desenvolvidos duas verses do sistema de
cadastro de contas. A primeira verso foi mais simplicada e, a
segunda, um pouco mais elaborada.
Espero que voc tenha entendido o conceito de associao!
234
prog_orient_objetos.indb 234
2/7/2007 16:45:05
Atividades de auto-avaliao
1) Implemente o cdigo dessa unidade.
Faa o seguinte:
a) cadastre as disciplinas e o professor que ministra a disciplina;
b) entre com o nome de uma disciplina e o sistema mostre o nome do
professor que ministra essa disciplina;
c) entre com o nome de uma titulao e o sistema mostre o nome de
todos os professores que possuem essa titulao.
Unidade 12
prog_orient_objetos.indb 235
235
2/7/2007 16:45:05
prog_orient_objetos.indb 236
2/7/2007 16:45:05
UNIDADE 13
Herana
Objetivos de aprendizagem
Seo de estudo
Seo 1 Herana
prog_orient_objetos.indb 237
2/7/2007 16:45:05
SEO 1 - Herana
A Herana um recurso da orientao a objetos que permite que
atributos e comportamentos (mtodos) COMUNS a diversos
tipos de objetos, existentes em um problema, sejam agrupados
e representados em uma nica classe base, conhecida como
SUPERCLASSE.
Os atributos e comportamentos (mtodos) ESPECFICOS
de cada tipo de objeto presente no problema so representados
por classes especcas desses tipos de objetos. Essas classes
especcas, conhecidas como SUBCLASSES, herdam os
atributos e comportamentos comuns que foram agrupados na
superclasse.
A partir de uma classe base (superclasse), outras classes podem
ser especicadas ou especializadas.
238
prog_orient_objetos.indb 238
2/7/2007 16:45:05
Docente
Nome
Nome
Endereo
Endereo
Salrio
Salrio
Cargo
Setor
Unidade 13
prog_orient_objetos.indb 239
239
2/7/2007 16:45:05
Superclasse
Generalizao
Funcionario
nome: String
endereo: String
salario: double
Funcionario( )
setNome( )
setEndereco( )
setSalario( )
getNome( )
getEndereco( )
getSalario( )
Subclasse
Subclasse
Administrativo
Docente
cargo: String
setor: String
nuhaula: int
titulacao: String
Administrativo( )
setCargo( )
setSetor( )
getCargo( )
getSetor( )
Docente ( )
setNhaula( )
setTitulacao( )
getNhaula( )
getTitulacao( )
prog_orient_objetos.indb 240
2/7/2007 16:45:05
Unidade 13
prog_orient_objetos.indb 241
241
2/7/2007 16:45:06
Objetivo da herana
O objetivo principal da herana a reutilizao de cdigo, j
que novas classes (subclasses) podem ser criadas a partir de outra
j existente (superclasse), herdando seus atributos e mtodos.
Outras caractersticas
Podem existir vrios nveis de relacionamento de herana entre
classes, por exemplo, uma classe Docente herda de Funcionrio
que poderia herdar de Pessoa.
Chama-se superclasse direta de uma subclasse,
aquela imediatamente superior a essa subclasse e,
superclasse indireta, aquela de dois ou mais nveis
acima da hierarquia.
242
prog_orient_objetos.indb 242
2/7/2007 16:45:06
Linha 1
Linha 2
Linha 3
Linha 4
Linha 5
Linha 6
Linha 7
Linha 8
Linha 9
Linha 10
Linha 11
Linha 12
Linha 1
Linha 2
Linha 3
Linha 4
Linha 5
Linha 6
Linha 7
Linha 8
Linha 9
Linha 10
Unidade 13
prog_orient_objetos.indb 243
243
2/7/2007 16:45:06
Linha 11
Linha 12
Linha 13
244
prog_orient_objetos.indb 244
2/7/2007 16:45:06
Linha 1
Linha 2
Linha 3
Linha 4
Linha 5
Linha 6
Linha 7
Linha 8
import javax.swing.JOptionPane;
public class CadastraAdmDocente{
public static void main(String args[]){
Docente d1= new Docente( );
d1.setNome(JOptionPane.showInputDialog(Entre com o Nome:));;
d1.setEndereco(JOptionPane.showInputDialog(Entre com o Endereco:));
d1.setSalario(Double.parseDouble(JOptionPane.showInputDialog(Entre com o Salario:)));
d1.setNha(Integer.parseInt(JOptionPane.showInputDialog(Entre com o Nu.de Horas Aula
Semanais:)));
d1.setTitulacao(JOptionPane.showInputDialog(Entre com a Titulacao:)));
Linha 9
Linha 10
Linha 11
Administrativo a1= new Administrativo( );
Linha 12
a1.setNome(JOptionPane.showInputDialog(Entre com o Nome:));;
Linha 13
a1.setEndereco(JOptionPane.showInputDialog(Entre com o Endereco:));
Linha 14
a1.setSalario(Double.parseDouble(JOptionPane.showInputDialog(Entre com o Salario:)));
Linha 15
a1.setCargo(JOptionPane.showInputDialog(Entre com o Cargo:));
Linha 16
a1.setSetor(JOptionPane.showInputDialog(Entre com o Setor:));
Linha 17
System.exit(0);
Linha 18 }
Linha 19 }
Objeto Docente
nome
endereco
salario
nha
titulacao
endereo 10x
Unidade 13
prog_orient_objetos.indb 245
245
2/7/2007 16:45:06
246
prog_orient_objetos.indb 246
2/7/2007 16:45:06
Objeto Docente
Nome Ana
endereo Rua A
salrio 1000
nha 12
titulacao Mestre
endereo 10x
Objeto
Administrativo
nome
endereco
salrio
cargo
setor
endereo 12x
Unidade 13
prog_orient_objetos.indb 247
247
2/7/2007 16:45:06
248
prog_orient_objetos.indb 248
2/7/2007 16:45:07
Unidade 13
prog_orient_objetos.indb 249
249
2/7/2007 16:45:07
250
prog_orient_objetos.indb 250
2/7/2007 16:45:07
O atributo salario
est sendo acessado
diretamente pelo nome
na subclasse Docente.
Isso possvel porque seu
modicador de acesso
agora foi mudado para
protected.
Modicador
Assinatura do mtodo
public void setSalario (double dsal) {
salario=dsal;
}
Unidade 13
prog_orient_objetos.indb 251
Nome do mtodo
Parmetro
251
2/7/2007 16:45:07
Especialista
R$ 15,00
Mestre
R$ 20,00
Doutor
R$ 30,00
prog_orient_objetos.indb 252
2/7/2007 16:45:07
Cargo
Valor
Tcnico administrativo
R$ 300,00
Bibliotecria
R$ 400,00
Tcnico de laboratrio
R$ 500,00
Unidade 13
prog_orient_objetos.indb 253
253
2/7/2007 16:45:07
254
prog_orient_objetos.indb 254
2/7/2007 16:45:07
Linha 1
Linha 2
Linha 3
Linha 4
Linha 5
Linha 6
import javax.swing.JOptionPane;
public class CadastraAdmDocente{
public static void main(String args[]){
Docente d1= new Docente( );
d1.setNome(JOptionPane.showInputDialog(Entre com o Nome:));;
d1.setEndereco(JOptionPane.showInputDialog(Entre com o
Endereco:));
Linha 7
d1.setNha(Integer.parseInt(JOptionPane.showInputDialog(Entre
com o Nu.de Horas Aula Semanais:)));
Linha 8
d1.setTitulacao(JOptionPane.showInputDialog(Entre com a
Titulacao:)));
Linha 9
d1.setSalario(Double.parseDouble(JOptionPane.InputDialog(Entre
com o Salario:)));
Linha 10
Administrativo a1= new Administrativo( );
Unidade 13
prog_orient_objetos.indb 255
A chamada ao mtodo
setSalario( ) deve ser
feita depois da chamada
aos mtodos setNha( ) e
setTitulao pois o mtodo
setSalario( ) na sua nova
implementao na classe
Docente precisa dos
valores dos atributos nha
e titulacao.
255
2/7/2007 16:45:07
Linha 11
Linha 12
Linha 13
Linha 14
Linha 15
A chamada ao mtodo
setSalario( ) deve ser feita
depois da chamada ao
mtodo setCargo( ) pois o
mtodo setSalario( ) na sua
nova implementao na
classe Administrativo precisa
do valor do atributo cargo.
Linha 16
Linha 17 }
Linha 19 }
Sntese
Nessa unidade voc aprendeu outro conceito importante da OO,
o conceito de herana. atravs da herana que a caracterstica
de reutilizao de cdigo do paradigma orientado a objeto se
torna mais evidente. Isso acontece porque podemos modelar
e implementar numa classe genrica, chamada de superclasse,
todos os atributos e comportamentos comuns a diversos tipos de
objetos e, esses atributos e comportamento, podem ser herdados
por vrias outras classes (que representam esses tipos de objetos
diferentes com atributos e comportamentos em comum) evitando
assim a duplicao de cdigo.
256
prog_orient_objetos.indb 256
2/7/2007 16:45:08
Atividades de auto-avaliao
1) Desenvolva um sistema orientado a objetos para automatizar as
informaes de uma Administradora de Imveis.
Unidade 13
prog_orient_objetos.indb 257
257
2/7/2007 16:45:08
prog_orient_objetos.indb 258
2/7/2007 16:45:08
UNIDADE 14
Herana na prtica
Objetivo de aprendizagem
Seo de estudo
Seo 1 Herana mediante exemplo prtico
prog_orient_objetos.indb 259
2/7/2007 16:45:08
Requisitos:
Uma empresa de locao de veculos necessita de um sistema
para armazenar as informaes de sua frota de veculos. Para
todos os tipos de veculos, necessrio armazenar informaes
como: placa, marca, modelo, ano, valor do km rodado, km inicial
(antes da locao), km nal (depois da locao). Essa locadora de
veculos possui duas categorias de veculos para locao: Passeio e
Carga. O total da frota 15 veculos, sendo 10 do tipo Passeio e
5 do tipo Carga.
260
prog_orient_objetos.indb 260
2/7/2007 16:45:08
Unidade 14
prog_orient_objetos.indb 261
261
2/7/2007 16:45:08
Modelagem:
Veculo Passeio
Veculo Carga
Atributos
Placa
Placa
Marca
Marca
Modelo
Modelo
Ano
Ano
valor do km rodado
valor do km rodado
km inicial
km inicial
km nal
km nal
Ar-condicionado
capacidade
Nmero de portas
Comportamentos ou mtodos
Passeio ( )
Carga ( )
calculaValorLocacao( )
calculaValorLocacao( )
262
prog_orient_objetos.indb 262
2/7/2007 16:45:08
Superclasse
Veiculo
placa: String
marca: String
modelo: double
ano: int
valorkmrod: double
kminic: int
kmfin: int
Veiculo( )
setPlaca(String splaca )
setMarca(String smarca )
setModelo(String smodelo)
setAno(int iano )
setValorKmRod(double dvalkm )
setKmInic(int ikmi )
setKmFin(int ikmf )
getPlaca( ):String
getMarca( ):String
getModelo( ): String
getAno( ): int
getValorKmRod( ): double
getKmInic( ): int
getKmFin( ):int
calculaValorLocacao( )
Subclasse
Subclasse
Passeio
Carga
arcond: boolean
nuportas: int
capacidade: int
Passeio( )
setArCond( boolean
barcond )
setNuPortas(int inup )
getArCond( ): boolean
getNuPortas( ): int
Carga ( )
setCapacidade( int icap)
getCapacidade( ):int
Unidade 14
prog_orient_objetos.indb 263
263
2/7/2007 16:45:08
264
prog_orient_objetos.indb 264
2/7/2007 16:45:08
O mtodo
calculaValorLocao ( )
deve existir para Passeio
e Carga. Logo ele est
implementado aqui na
superclasse Veculo e ser
HERDADO por Passeio e
Carga. O mtodo contm
a frmula que determina
o valor de locao do
veiculo.
}
}
Unidade 14
prog_orient_objetos.indb 265
265
2/7/2007 16:45:08
266
prog_orient_objetos.indb 266
2/7/2007 16:45:09
Unidade 14
prog_orient_objetos.indb 267
267
2/7/2007 16:45:09
Linha 44
Linha 44
Linha 45
Linha 46
Linha 47
Linha 48
Linha 50
Linha 51
Linha 52
Linha 53
Linha 54
Linha 55
Linha 56
Linha 57
Linha 58
Linha 59
Linha 60
Linha 61
Linha 62
Linha 63
Linha 64
Linha 65
Linha 66
Linha 67
Linha 68
Linha 69
Linha 70
Linha 71
Linha 72
Linha 74
Linha 75
Linha 76
Linha 77
Linha 78
Linha 79
Linha 80
Linha 81
Linha 82
Linha 83
Linha 84
Linha 85
Linha 86
Linha 87
Linha 88
Linha 89
pc = pc + 1;
} //FIM opo = = 2
else
if (op = = 3) {
for (int i=0; i<pp; i++){
JOptionPane.showMessageDialog(null,LISTAGEM DE VEICULOS TIPO PASSEIO: +\n +
PLACA: + p[i].getPlaca () +\n+
MARCA: + p[i].getMarca() +\n+
MODELO: + p[i].getModelo() +\n+
ANO DE FABRICAAO: + p[i].getAno () +\n+
VALOR KM RODADO: + p[i].getValKmRod() +\n+
KM INICIAL: + p[i].getKmInic() +\n+
KM FINAL: + p[i].getKmFin() +\n+
NUMEROS DE PORTAS: + p[i].getNuPortas() +\n);
}
for (int i=0; i<pc; i++){
JOptionPane.showMessageDialog(null,LISTAGEM VEICULOS TIPO CARGA: +\n +
PLACA: + c[i].getPlaca () +\n+
MARCA: + c[i].getMarca() +\n+
MODELO: + c[i].getModelo() +\n+
ANO DE FABRICAAO: + c[i].getAno () +\n+
VALOR KM RODADO: + c[i].getValKmRod() +\n+
KM INICIAL: + c[i].getKmInic() +\n+
KM FINAL: + c[i].getKmFin() +\n+
CAPACIDADE MAXIMA: + c[i].getCapacidadea() +\n);
}
}//FIM opcao = = 3
else
if (op = = 4) {
String placa=JOptionPane.showInputDialog(Digite a PLACA do veiculo a ser pesquisado);
for (int i=0; i<pp; i++){
if (p[i].getPlaca().equalsIgnoreCase(placa)){
JOptionPane.showMessageDialog(null,O valor de locao desse veculo :
+ p[i].calculaValorLocacao( ));
}
}
for (int i=0; i<pc; i++){
if (c[i].getPlaca().equalsIgnoreCase(placa)){
JOptionPane.showMessageDialog(null,O valor de locao desse veculo :
+ c[i].calculaValorLocacao( ));
}
} //m do for
} //m da opo 4
else
if (op = = 5){
int cot=0;
for (int i=0; i<10; i++){
268
prog_orient_objetos.indb 268
2/7/2007 16:45:09
Linha 90
Linha 91
Linha 92
Linha 93
if (c[i].getArCond() = = true)
cont = cont + 1;
}
JOptionPane.showMessageDialog(null,Nmero de Veculos do Tipo Passeio com
Ar-Condicionado: + cont );
Linha 94
}
Linha 95
else
Linha 96
if (op = = 6)
Linha 97
break;
Linha 98 }// m while
Linha 99 }// m do mtodo main ( )
Linha 100} // m da classe
Unidade 14
prog_orient_objetos.indb 269
269
2/7/2007 16:45:09
270
prog_orient_objetos.indb 270
2/7/2007 16:45:10
Unidade 14
prog_orient_objetos.indb 271
271
2/7/2007 16:45:10
272
prog_orient_objetos.indb 272
2/7/2007 16:45:10
Sntese
Nessa unidade voc reforou o conceito de herana atravs de um
outro exemplo prtico.
Voc estudou sobre modelagem e implementou um sistema para
uma locadora de veculos. Nesse sistema identicou que existia
dois tipos de objetos: Veculos Passeio e Veculos Carga e que
existia uma srie de atributos e comportamentos comuns entre
esses dois tipos de objetos.
Diante dessa situao, modelamos esses atributos e
comportamentos em comum dentro de uma classe genrica
chamada Veculo e os atributos e comportamentos especcos de
cada tipo de objeto foram modelagem em classes especcas.
A herana um recurso muito til na orientao a objetos porque
propicia a reutilizao de cdigo, evitando assim o retrabalho de
codicao.
Unidade 14
prog_orient_objetos.indb 273
273
2/7/2007 16:45:10
Atividades de auto-avaliao
1) Implemente as classes modeladas no sistema da Administradora de
Imveis descrito na atividade da unidade anterior. Desenvolva um
sistema que permita:
274
prog_orient_objetos.indb 274
2/7/2007 16:45:10
prog_orient_objetos.indb 275
2/7/2007 16:45:10
prog_orient_objetos.indb 276
2/7/2007 16:45:10
Referncias
DEITEL, H.M.; DEITEL, P.J. Java - Como programar. Sexta Edio.
Ed. Pearson, 2005.
LEMAY, Laura; CADENHEAD, Rogers. Aprenda em 21 dias Java
1.2. Rio de Janeiro: Campus, 1999.
HORSTMANN, Cay S.; CORNELL, Gary. Core Java 2. So Paulo:
Makron Books, 2004.
HORSTMANN, Cay S. Big Java. Porto Alegre: Bookman, 2004.
The Java Tutorial - A practical guide for programmers.
Disponvel em: http://java.sun.com/tutorial
BOOCH, Grady; RUMBAUGH, James; JACOBSON, Ivar. UML Guia
do Usurio. Rio de Janeiro: Campus, 2000.
FOWLER, Martin; SCOTT, Kendall. UML essencial: um breve guia
para a linguagem-padro de modelagem de objetos. Segunda
Edio. Porto Alegre: Bookman, 2000.
prog_orient_objetos.indb 277
2/7/2007 16:45:10
prog_orient_objetos.indb 278
2/7/2007 16:45:11
prog_orient_objetos.indb 279
2/7/2007 16:45:11
prog_orient_objetos.indb 280
2/7/2007 16:45:11
prog_orient_objetos.indb 281
2/7/2007 16:45:11
Unidade 2
1) Desenvolva um pequeno programa na linguagem Java que imprima
o seu nome da tela. Mude o nome do programa para MeuNome.java, ou
seja, no lugar de AloMundo voc deve digitar MeuNome.
Resposta:
public class MeuNome {
public static void main(String args[]) {
System.out.println(Andra );
}
}
Unidade 3
1) Faa as seguintes declaraes de variveis na linguagem Java:
a.Declare uma varivel de memria para armazenar um valor numrico
inteiro, um valor numrico real, um valor do tipo lgico, um valor do tipo
Literal.
Resposta:
int num;
double numreal;
boolean status;
String endereo;
b. Declare um vetor de 5 posies para armazenar valores inteiros.
Resposta:
int val[]=new int[5]
282
prog_orient_objetos.indb 282
2/7/2007 16:45:11
283
prog_orient_objetos.indb 283
2/7/2007 16:45:11
Unidade 4
1) Desenvolver em Java TODOS os exerccios de auto-avaliao da seo 1 da Unidade 5
da disciplina de Lgica de Programao I.
Resposta:
Algoritmo 1
import javax.swing.*;
public class Compra{
public static void main(String args[])
{
String CLIENTE;
int QTDHOT, QTDXEGG, QTDREFRI, QTDBATATA;
double PREHOT, PREXEGG, PREREFRI, PREBATATA,TOTAL;
// QTDHOT = Quantidade de Cachorro-Quente
// QTDXEGG = Quantidade de XEGG;
//QTDREFRI = Quantidade de Refrigerante;
//QTDBATATA = Quantidade de Batatas Fritas;
//TOTAL = Valor total comprado
CLIENTE=JOptionPane.showInputDialog(Digite o nome do cliente:);
QTDHOT= Integer.parseInt(JOptionPane.showInputDialog(Digite a quantidade de Cachorro-Quente:));
PREHOT= Double.parseDouble(JOptionPane.showInputDialog(Digite o preo do Cachorro-Quente:));
QTDXEGG= Integer.parseInt(JOptionPane.showInputDialog(Digite a quantidade de X-EGG:));
PREXEGG= Double.parseDouble(JOptionPane.showInputDialog(Digite o preo do X-EGG:));
QTDREFRI= Integer.parseInt(JOptionPane.showInputDialog(Digite a quantidade de refrigerantes:));
PREREFRI= Double.parseDouble(JOptionPane.showInputDialog(Digite o preo do refrigerante:));
QTDBATATA= Integer.parseInt(JOptionPane.showInputDialog(Digite a quantidade de batatas fritas:));
PREBATATA= Double.parseDouble(JOptionPane.showInputDialog(Digite o preo da batata frita:));
TOTAL = (QTDHOT * PREHOT) + (QTDXEGG * PREXEGG) + (QTDREFRI * PREREFRI) + (QTDBATATA * PREBATATA);
JOptionPane.showMessageDialog(null,Cliente +CLIENTE);
JOptionPane.showMessageDialog(null,Total +TOTAL);
}
}
Algoritmo 2
import javax.swing.*;
public class Aluno{
public static void main(String args[])
{
String nome, endereco,sexo, cidade, estado, nomedopai, nomedamae,telefonecontato;
String datadenascimento,grauescolar;
nome=JOptionPane.showInputDialog(Digite o nome do aluno:);
284
prog_orient_objetos.indb 284
2/7/2007 16:45:11
Algoritmo 3
import javax.swing.*;
public class Professor{
public static void main(String args[])
{
String nome, endereco, cidade, estado, cep ;
String datadenascimento,grauescolar, curso;
int rg;
nome=JOptionPane.showInputDialog(Digite o nome do aluno:);
endereco= JOptionPane.showInputDialog(Digite o endereco:);
cidade= JOptionPane.showInputDialog(Digite a cidade:);
estado= JOptionPane.showInputDialog(Digite o estado:);
cep= JOptionPane.showInputDialog(Digite o cep:);
datadenascimento= JOptionPane.showInputDialog(Digite a data de nascimento:);
grauescolar= JOptionPane.showInputDialog(Digite o grau de escolaridade:);
curso= JOptionPane.showInputDialog(Digite o curso que leciona:);
rg= Integer.parseInt(JOptionPane.showInputDialog(Digite o RG:));
JOptionPane.showMessageDialog(null,Nome +nome);
JOptionPane.showMessageDialog(null,Endereco +endereco);
JOptionPane.showMessageDialog(null,Cidade +cidade);
JOptionPane.showMessageDialog(null,Estado +estado);
285
prog_orient_objetos.indb 285
2/7/2007 16:45:11
JOptionPane.showMessageDialog(null,CEP +cep);
JOptionPane.showMessageDialog(null,Data de nascimento +datadenascimento);
JOptionPane.showMessageDialog(null,Grau de escolaridade +grauescolar);
JOptionPane.showMessageDialog(null,Curso que leciona +curso);
JOptionPane.showMessageDialog(null,RG +rg);
}
}
Algoritmo 4
import javax.swing.*;
public class Media{
public static void main(String args[])
{
double nota1, nota2, nota3, media;
String nomedisci;
int numeroturma;
nota1=Double.parseDouble(JOptionPane.showInputDialog(Digite a primeira nota:));
nota2=Double.parseDouble(JOptionPane.showInputDialog(Digite a segunda nota:));
nota3=Double.parseDouble(JOptionPane.showInputDialog(Digite a terceira nota:));
nomedisci= JOptionPane.showInputDialog(Digite o nome da disciplina:);
numeroturma= Integer.parseInt(JOptionPane.showInputDialog(Digite o numero da turma:));
JOptionPane.showMessageDialog(null,Nota 1 +nota1);
JOptionPane.showMessageDialog(null,Nota 2 +nota2);
JOptionPane.showMessageDialog(null,Nota 3 +nota3);
JOptionPane.showMessageDialog(null,Disciplina +nomedisci);
JOptionPane.showMessageDialog(null,Numero da turma +numeroturma);
JOptionPane.showMessageDialog(null,Media Final +(nota1+nota2+nota3)/3);
}
}
Algoritmo 5
import javax.swing.*;
public class Conta{
public static void main(String args[])
{
double limite, saldoatual, valor;
String nomecor, nomebanco;
int numeroconta;
nomecor= JOptionPane.showInputDialog(Digite o nome do correntista:);
nomebanco= JOptionPane.showInputDialog(Digite o nome do banco:);
numeroconta= Integer.parseInt(JOptionPane.showInputDialog(Digite o numero da conta:));
286
prog_orient_objetos.indb 286
2/7/2007 16:45:11
limite=Double.parseDouble(JOptionPane.showInputDialog(Digite o limite:));
saldoatual=Double.parseDouble(JOptionPane.showInputDialog(Digite o saldo atual:));
//entrar com um valor de deposito (credito)
valor=Double.parseDouble(JOptionPane.showInputDialog(Digite o valor de deposito:));
saldoatual = saldoatual + valor;
JOptionPane.showMessageDialog(null,O saldo atual +saldoatual);
//entrar com um valor de saque (debito)
valor=Double.parseDouble(JOptionPane.showInputDialog(Digite o valor de saque:));
saldoatual = saldoatual - valor;
JOptionPane.showMessageDialog(null,O saldo atual +saldoatual);
}
}
Unidade 5
1) Desenvolver em Java todos os exerccios de auto-avaliao da seo 2
da Unidade 5 da disciplina de Lgica de Programao I (Exerccios com
estrutura condicional)
Resposta:
287
prog_orient_objetos.indb 287
2/7/2007 16:45:12
MAIOR = A;
INTERMEDIARIO = B;
MENOR = C;
}
}
else {
if (C > B){
MAIOR = C;
INTERMEDIARIO = B;
MENOR = A;
}else {
if (C > A){
MAIOR = B;
INTERMEDIARIO = C;
MENOR = A;
}else {
MAIOR = B;
INTERMEDIARIO = A;
MENOR = C;
}
}
}
JOptionPane.showMessageDialog(null,O maior nmero : +MAIOR);
JOptionPane.showMessageDialog(null,O nmero intermdirio : +INTERMEDIARIO);
JOptionPane.showMessageDialog(null,O menor nmero : +MENOR);
}
}
288
prog_orient_objetos.indb 288
2/7/2007 16:45:12
289
prog_orient_objetos.indb 289
2/7/2007 16:45:12
Algoritmo 2: (Entrar com 20 nmeros e imprimir a soma dos positivos, e o total de nmeros negativos)
import javax.swing.*;
public class PositivoNegativo{
public static void main(String args[])
{
int num;
int soma=0;
int cont=0;
for (int i=1;i<=20;i++){
num = Integer.parseInt(JOptionPane.showInputDialog(Digite o numero:));
if ( num > 0 )
290
prog_orient_objetos.indb 290
2/7/2007 16:45:12
Algoritmo 4: (entrar com o nome, idade e sexo de 20 pessoas. Imprimir o nome, se a pessoa for do
sexo masculino e tiver mais de 21anos)
import javax.swing.*;
public class Maior21{
public static void main(String args[])
{
String nome,sexo;
int idade;
for (int i=1;i<=20;i++){
nome=JOptionPane.showInputDialog(Digite o nome do aluno:);
idade= Integer.parseInt(JOptionPane.showInputDialog(Digite o endereco:));
291
prog_orient_objetos.indb 291
2/7/2007 16:45:12
Unidade 6
1) Faa um programa em Java que leia 3 nmeros e calcule a sua mdia.
O programa deve ser modularizado. Utilize uma funo para calcular e
retornar a mdia dos nmeros. Essa funo deve receber os trs nmeros
como parmetro.
Resposta:
import javax.swing.*;
public class FuncaoMedia{
public static void main(String args[])
{
int num1, num2, num3;
double media;
num1 = Integer.parseInt(JOptionPane.showInputDialog(Digite o primeiro numero:));
num2 = Integer.parseInt(JOptionPane.showInputDialog(Digite o segundo numero:));
num3 = Integer.parseInt(JOptionPane.showInputDialog(Digite o terceiro numero:));
media = calcMedia(num1,num2,num3);
JOptionPane.showMessageDialog(null,A media + media);
}
//aqui comea a funcao calcMedia
public static double calcMedia(int n1,int n2, int n3){
return (n1+n2+n3)/3;
}
}
2) Crie um programa em Java que leia o raio de uma esfera (do tipo real) e
passe esse valor para a funo volumeEsfera. Essa funo deve calcular o
volume da esfera na tela e retornar o seu valor. Para o clculo do volume
deve ser usada a seguinte frmula: Volume = (4.0 / 3.0) * PI * raio3
292
prog_orient_objetos.indb 292
2/7/2007 16:45:12
Resposta:
import javax.swing.*;
public class FuncaoVolumeEsfera{
public static void main(String args[])
{
double raio, volume;
raio = Double.parseDouble(JOptionPane.showInputDialog(Digite o raio:));
volume = volumeEsfera(raio);
JOptionPane.showMessageDialog(null,O volume + volume);
}
//aqui comea a funcao
public static double volumeEsfera(double draio){
return (4.0 / 3.0) * 3.14 * (draio*draio*draio);
}
}
3) Faa um programa em Java em que o usurio entre com um valor de
base e um valor de expoente. O programa deve calcular a potncia. O
programa deve ser modularizado. Voc deve decidir se a subrotina ser
um procedimento ou uma funo. A formula : base expoente
Resposta:
import javax.swing.*;
public class FuncaoVolumeEsfera{
public static void main(String args[])
{
int base, expoente, pot;
base = Integer.parseInt(JOptionPane.showInputDialog(Digite a base:));
expoente = Integer.parseInt(JOptionPane.showInputDialog(Digite o expoente:));
pot = potencia(base, expoente);
JOptionPane.showMessageDialog(null,A potencia + pot);
}
//aqui comea a funcao
public static int potencia(int base, int expoente){
int pote=1;
for (int i=1;i<=expoente;i++)
pote=pote*base;
return pote;
}
}
293
prog_orient_objetos.indb 293
2/7/2007 16:45:12
Unidade 7
1) Edite a classe Cliente no editor de texto (Bloco de Notas ou qualquer
ambiente para desenvolvimento de programas Java) e salve na pasta
CURSOWEBOO. Essa pasta deve ser criada anteriormente. Aps a edio
(digitao) compile a classe. O arquivo Cliente.class deve ter sido gerado.
Resposta: O cdigo j est na unidade.
2) Edite a classe UsaCliente no editor de texto. e salve na pasta
CURSOWEBOO. Aps a edio, compile a classe. O arquivo UsaCliente.
classe deve ter sido gerado. O ultimo passo executar a classe. Dessa
forma, voc ver funcionando seu primeiro programa orientado a objeto
desenvolvido na linguagem Java.
Resposta: O cdigo j est na unidade.
3) Cite exemplos de objetos do mundo real. Identifique atributos e
comportamentos para esses objetos. Agrupe esses objetos nas suas
respectivas classes. Faa isso usando a notao UML para classes e objetos.
Objetos imvel
Imovel
Imvel A: Imovel
endereco: String
numeroquartos:int
possuigaragem: String
nomeproprietario: String
endereco: Rua X
numeroquartos: 2
possuigaragem: sim
nomeproprietario: Joo
alteraEndereco()
alteraNumeroQua()
alteraGaragem()
alteraProprietario()
forneceEndereco()
forneceNumeroQua()
forneceGaragem()
forneceProprietario()
Imvel B: Imovel
endereco: Rua Y
numeroquartos: 1
possuigaragem: nao
nomeproprietario: Mario
294
prog_orient_objetos.indb 294
2/7/2007 16:45:12
Unidade 8
1) Represente graficamente em memria, tal como foi feito nessa unidade,
a seguinte instruo. Identifique na representao grfica o que
referncia e o que objeto.
Cliente cliente = new Cliente (Rita, Rua R, 15215215211);
Resposta:
cliente
Objeto Cliente
130x
nome Rita
endereco Rua R
cpf 15215215211
endereo 130x
Unidade 9
A resposta a implementao (programao) do cdigo da unidade.
295
prog_orient_objetos.indb 295
2/7/2007 16:45:13
Unidade 10
1) Analise o seguinte trecho de cdigo e identifique se existe algum erro.
Caso exista, explique qual o erro e como solucion-lo.
Resposta: Na classe CalculoRetangulo, os atributos base e altura do
objeto r esto sendo acessados diretamente. Isso no possvel porque
esses atributos foram definidos com o modificador private na classe
Retngulo. Quando os atributos de um objeto so private (privados)
eles s podem ser acessados via algum mtodo public set ou get.
Unidade 11
1) Resposta:
296
prog_orient_objetos.indb 296
2/7/2007 16:45:13
{
codigo=0;
nomerua= ;
bairro= ;
}
public void setCodigo(int icodigo)
{
codigo=icodigo;
}
public void setNomeRua(String snome)
{
nomerua=snome;
}
public void setBairro(String sbairro)
{
bairro=sbairro;
}
public int getCodigo()
{
return codigo;
}
public String getNomeRua()
{
return nomerua;
}
public String getBairro()
{
return bairro;
}
}
// Implementao da classe Funcionrio (sem o atributo setor)
public class Funcionario
{
private String nome, end;
private double salario;
private Cep cep;
public Funcionario()
{
nome=;
end=;
salario=0;
cep=null;
}
public void setNome(String snome)
{
297
prog_orient_objetos.indb 297
2/7/2007 16:45:13
nome=snome;
}
public void setEnd(String send)
{
end=send;
}
public void setSalario(double dsalario)
{
salario=dsalario;
}
public void setCep(Cep ccep)
{
cep=ccep;
}
public String getNome()
{
return nome;
}
public String getEnd()
{
return end;
}
public double getSalario()
{
return salario;
}
public Cep getCep()
{
return cep;
}
}
298
prog_orient_objetos.indb 298
2/7/2007 16:45:13
c[i].setCodigo(Integer.parseInt(JOptionPane.showInputDialog(Digite o cdigo
de endereamento postal)));
c[i].setNomeRua(JOptionPane.showInputDialog(Digite o nome da rua));
c[i].setBairro(JOptionPane.showInputDialog(Digite o bairro));
}
Funcionario f[]=new Funcionario[5];
for (int i=0; i<5; i++)
{
f[i]= new Funcionario();
f[i].setNome(JOptionPane.showInputDialog(Digite o nome do funcionrio));
f[i].setEnd(JOptionPane.showInputDialog(Digite o endereo do funcionrio));
f[i].setSalario(Double.parseDouble(JOptionPane.showInputDialog(Digite o
salario do funcionrio)));
String digCep=JOptionPane.showInputDialog(Digite o cep do funcionrio);
for (int j=0; j<3; j++)
{
if (digCep.equalsIgnoreCase(c[j].getCodigo() ))
{
f[i].setCep(c[j]);
break;
}
}
}
for (int i=0; i<5; i++)
{
JOptionPane.showMessageDialog(null, Nome:+ +f[i].getNome()+\
n+Rua:+ +f[i].getCep().getNomeRua()+\n+Bairro:+ +f[i].getCep().getBairro());
}
System.exit(0);
}
}
Unidade 12
1) A resposta a implementao (programao) do cdigo da unidade.
299
prog_orient_objetos.indb 299
2/7/2007 16:45:13
Resposta:
public Disciplina ( ){
nome= ;
ch= 0;
prof=null;
}
300
prog_orient_objetos.indb 300
2/7/2007 16:45:13
301
prog_orient_objetos.indb 301
2/7/2007 16:45:13
302
prog_orient_objetos.indb 302
2/7/2007 16:45:13
Unidade 13
1) Desenvolva um sistema orientado a objetos para automatizar as
informaes de uma Administradora de Imveis.
Resposta:
Imovel
endereco: String
nomeproprietario: String
vendaaluguel:String
valor:double
Imovel()
setEndereco()
setProprietario()
setVendaAluguel()
setValor()
getEndereco()
getProprietario()
getVendaAluguel()
getValor()
Casa
Apto
piscina: String
andar: int
numeroapto:int
Casa()
setPiscina()
getPiscina()
Apto ()
setAndar()
setNumeroApto()
getAndar()
getNumeroApto()
303
prog_orient_objetos.indb 303
2/7/2007 16:45:13
Unidade 14
1) Implemente as classes modeladas no sistema da Administradora de
Imveis descrito na atividade da unidade anterior.
Resposta:
//Implementao da classe Imvel
public class Imovel {
private String nomeproprietario;
private String endereco;
private String vendaaluguel;
private double valor;
public Imovel (){
nomeproprietario= ;
endereco=;
vendaaluguel=;
valor = 0;
}
public void setNomeProprietario ( String snome){
nomeproprietario=snome;
}
public void setEndereco ( String sendereco){
endereco=sendereco;
}
public void setVendaAluguel (String stipo){
vendaaluguel=stipo;
}
public void setValor ( double dvalor){
valor=dvalor;
}
public String getNomeProprietario(){
return nomeproprietario
;
}
public String getEndereo(){
return endereco;
}
public String getVendaAluguel(){
return vendaaluguel;
}
public double getValor(){
return valor;
}
}
// Implementao da classe Apto
304
prog_orient_objetos.indb 304
2/7/2007 16:45:14
305
prog_orient_objetos.indb 305
2/7/2007 16:45:14
prog_orient_objetos.indb 306
2/7/2007 16:45:14