Professional Documents
Culture Documents
Palhoa
UnisulVirtual
2011
prog_orient_objetos.indb 1
15/12/2011 14:00:27
Crditos
Universidade do Sul de Santa Catarina | Campus UnisulVirtual | Educao Superior a Distncia
Avenida dos Lagos, 41 Cidade Universitria Pedra Branca | Palhoa SC | 88137-900 | Fone/fax: (48) 3279-1242 e 3279-1271 | E-mail: cursovirtual@unisul.br | Site: www.unisul.br/unisulvirtual
Reitor
Ailton Nazareno Soares
Vice-Reitor
Sebastio Salsio Heerdt
Chefe de Gabinete da Reitoria
Willian Corra Mximo
Pr-Reitor de Ensino e
Pr-Reitor de Pesquisa,
Ps-Graduao e Inovao
Mauri Luiz Heerdt
Pr-Reitora de Administrao
Acadmica
Miriam de Ftima Bora Rosa
Pr-Reitor de Desenvolvimento
e Inovao Institucional
Valter Alves Schmitz Neto
Diretora do Campus
Universitrio de Tubaro
Milene Pacheco Kindermann
Diretor do Campus Universitrio
da Grande Florianpolis
Hrcules Nunes de Arajo
Secretria-Geral de Ensino
Solange Antunes de Souza
Diretora do Campus
Universitrio UnisulVirtual
Jucimara Roesler
Equipe UnisulVirtual
Diretor Adjunto
Moacir Heerdt
Assessoria de Assuntos
Internacionais
Murilo Matos Mendona
Assessoria de Inovao e
Qualidade de EAD
Assessoria de Tecnologia
Coordenao Cursos
Coordenadores de UNA
Auxiliares de Coordenao
prog_orient_objetos.indb 2
Coordenadores Graduao
Vice-Coordenadores Graduao
Adriana Santos Ramm
Bernardino Jos da Silva
Catia Melissa Silveira Rodrigues
Horcio Dutra Mello
Jardel Mendes Vieira
Joel Irineu Lohn
Jos Carlos Noronha de Oliveira
Jos Gabriel da Silva
Jos Humberto Dias de Toledo
Luciana Manfroi
Rogrio Santos da Costa
Rosa Beatriz Madruga Pinheiro
Sergio Sell
Tatiana Lee Marques
Valnei Carlos Denardin
Smia Mnica Fortunato (Adjunta)
Coordenadores Ps-Graduao
Gerncia Administrao
Acadmica
Angelita Maral Flores (Gerente)
Fernanda Farias
Gesto Documental
Gerncia de Desenho e
Desenvolvimento de Materiais
Didticos
Assuntos Jurdicos
Desenho Educacional
Marketing Estratgico
Reconhecimento de Curso
Acessibilidade
Multimdia
Gerncia Administrativa e
Financeira
Renato Andr Luz (Gerente)
Ana Luise Wehrle
Anderson Zandr Prudncio
Daniel Contessa Lisboa
Naiara Jeremias da Rocha
Rafael Bourdot Back
Thais Helena Bonetti
Valmir Vencio Incio
Elaborao de Projeto
Extenso
Pesquisa
Ps-Graduao
Biblioteca
Capacitao e Assessoria ao
Docente
Tutoria e Suporte
Nordeste)
Avaliao da aprendizagem
Portal e Comunicao
Gerncia de Produo
Design Visual
Conferncia (e-OLA)
Gerncia de Logstica
Logsitca de Materiais
Avaliaes Presenciais
Produo Industrial
Gerncia de Marketing
15/12/2011 14:00:29
Andra Bordin
Palhoa
UnisulVirtual
2011
prog_orient_objetos.indb 3
15/12/2011 14:00:30
prog_orient_objetos.indb 4
15/12/2011 14:00:30
Sumrio
Apresentao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Palavras da professora. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Plano de estudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
UNIDADE 1 - Conhecendo a Linguagem de Programao Java. . . . . . . . . . 17
UNIDADE 2 - Preparando o ambiente para programar em Java. . . . . . . . . . 35
UNIDADE 3 - Sintaxe bsica da linguagem Java. . . . . . . . . . . . . . . . . . . . . . . . . 51
UNIDADE 4 - Implementando os primeiros programas em Java . . . . . . . . . 69
UNIDADE 5 - Implementando programas em Java
com controle de fluxo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
UNIDADE 6 - Desenvolvendo programas modularizados em Java . . . . . . 103
UNIDADE 7 - Introduo Programao Orientada a Objeto (POO). . . . . 117
UNIDADE 8 - Conceitos de Orientao a Objeto. . . . . . . . . . . . . . . . . . . . . . . 145
UNIDADE 9 - Aplicando os conceitos de OO atravs de
exemplos prticos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
UNIDADE 10 - Modificadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
UNIDADE 11 - Objetos como atributos de outros objetos . . . . . . . . . . . . . . 217
UNIDADE 12 - Associao na prtica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
UNIDADE 13 - Herana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
UNIDADE 14 - Herana na prtica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Para concluir o estudo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Referncias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
Sobre a professora conteudista. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
Respostas e comentrios das atividades de autoavaliao. . . . . . . . . . . . . . 299
Biblioteca Virtual. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
prog_orient_objetos.indb 5
15/12/2011 14:00:30
prog_orient_objetos.indb 6
15/12/2011 14:00:30
Apresentao
Este livro didtico corresponde disciplina Programao
Orientada a Objetos.
O material foi elaborado visando a uma aprendizagem autnoma
e aborda contedos especialmente selecionados e relacionados
sua rea de formao. Ao adotar uma linguagem didtica
e dialgica, objetivamos facilitar seu estudo a distncia,
proporcionando condies favorveis s mltiplas interaes e a
um aprendizado contextualizado e eficaz.
Lembre-se que sua caminhada, nesta disciplina, ser
acompanhada e monitorada constantemente pelo Sistema
Tutorial da UnisulVirtual, por isso a distncia fica
caracterizada somente na modalidade de ensino que voc optou
para sua formao, pois na relao de aprendizagem professores
e instituio estaro sempre conectados com voc.
Ento, sempre que sentir necessidade entre em contato; voc tem
disposio diversas ferramentas e canais de acesso tais como:
telefone, e-mail e o Espao Unisul Virtual de Aprendizagem,
que o canal mais recomendado, pois tudo o que for enviado e
recebido fica registrado para seu maior controle e comodidade.
Nossa equipe tcnica e pedaggica ter o maior prazer em lhe
atender, pois sua aprendizagem o nosso principal objetivo.
prog_orient_objetos.indb 7
15/12/2011 14:00:30
prog_orient_objetos.indb 8
15/12/2011 14:00:30
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 modificlos, j que ter o conhecimento de lgica e, tambm, de uma
linguagem de programao.
Para isso, as unidades iniciais deste livro sero dedicadas a
passar todos os detalhes de sintaxe dessa linguagem. Ser
necessria muita ateno de 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 pr-requisito
importante para que voc possa aprender e colocar em prtica
os conceitos da programao orientada a objetos, que o tpico
principal deste livro e ser tratado na maior parte das unidades.
A programao orientada a objetos tem esse nome porque
o seu objetivo resolver um problema analisando como
ele funciona no mundo real, ou seja, quais os objetos que
atuam no problema, quais as caractersticas (atributos) e
comportamentos desses objetos e como eles se relacionam.
prog_orient_objetos.indb 9
15/12/2011 14:00:31
10
prog_orient_objetos.indb 10
15/12/2011 14:00:31
Plano de estudo
O plano de estudos visa a orient-lo no desenvolvimento da
disciplina. Ele possui elementos que o ajudaro a conhecer o
contexto da disciplina e a organizar o seu tempo de estudos.
O processo de ensino e aprendizagem na UnisulVirtual leva
em conta instrumentos que se articulam e se complementam,
portanto, 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;
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.
prog_orient_objetos.indb 11
15/12/2011 14:00:31
Objetivos
Geral:
Capacitar o aluno a analisar problemas e implementar programas
utilizando o paradigma de programao orientada a objeto.
Especficos:
Carga Horria
A carga horria total da disciplina 120 horas-aula.
Contedo programtico/objetivos
Veja, a seguir, as unidades que compem o livro didtico desta
disciplina e os seus respectivos objetivos. Estes se referem aos
resultados que voc dever alcanar ao final de uma etapa de
estudo. Os objetivos de cada unidade definem o conjunto de
conhecimentos que voc dever possuir para o desenvolvimento
de habilidades e competncias necessrias sua formao.
Unidades de estudo: 14
12
prog_orient_objetos.indb 12
15/12/2011 14:00:31
13
prog_orient_objetos.indb 13
15/12/2011 14:00:31
14
prog_orient_objetos.indb 14
15/12/2011 14:00:31
15
prog_orient_objetos.indb 15
15/12/2011 14:00:31
Agenda de atividades/Cronograma
Atividades obrigatrias
16
prog_orient_objetos.indb 16
15/12/2011 14:00:32
unidade 1
Conhecendo a Linguagem de
Programao Java
Objetivos de aprendizagem
Sees de estudo
prog_orient_objetos.indb 17
Seo 1
Linguagens de Programao
Seo 2
Seo 3
Linguagem Java
Seo 4
Plataforma Java
Seo 5
15/12/2011 14:00:32
18
prog_orient_objetos.indb 18
15/12/2011 14:00:32
Unidade 1
prog_orient_objetos.indb 19
19
15/12/2011 14:00:32
20
prog_orient_objetos.indb 20
15/12/2011 14:00:33
Unidade 1
prog_orient_objetos.indb 21
21
15/12/2011 14:00:33
prog_orient_objetos.indb 22
15/12/2011 14:00:33
simplicidade;
orientada a objetos;
interpretada;
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 grfica.
Application Programming
Interface ou Interface
de Programao de
Aplicativos.
Orientada a Objetos
Baseada no paradigma da Orientao a Objetos, cujo conceito
essencial encapsular em um bloco de memria de variveis e
mtodos de manipulao dessas variveis. A linguagem permite
a modularizao das aplicaes, reuso de cdigo e manuteno
simples do cdigo j implementado.
Interpretada
Linguagens de programao podem ser tanto compiladas como
interpretadas.
Unidade 1
prog_orient_objetos.indb 23
23
15/12/2011 14:00:33
24
prog_orient_objetos.indb 24
15/12/2011 14:00:33
Multiplataforma
A caracterstica de multiplataforma da linguagem Java indica
que um programa desenvolvido nela pode ser executado em
plataformas de hardware e em sistemas operacionais diferentes.
Vamos explicar com detalhes o que isso significa.
Na maioria das linguagens de programao como C e Pascal, o
cdigo fonte de um programa compilado para uma plataforma
de hardware e para sistema operacional especficos.
Unidade 1
prog_orient_objetos.indb 25
Bibliotecas so rotinas,
pequenos programas
prontos.
25
15/12/2011 14:00:35
26
prog_orient_objetos.indb 26
15/12/2011 14:00:35
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 27
27
15/12/2011 14:00:35
28
prog_orient_objetos.indb 28
15/12/2011 14:00:36
Unidade 1
prog_orient_objetos.indb 29
29
15/12/2011 14:00:36
30
prog_orient_objetos.indb 30
15/12/2011 14:00:36
Sntese
Nesta unidade, voc estudou o que uma linguagem de
programao, para que ela serve e sua classificao. 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 que 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 desta 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 multiplataforma, 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 esta unidade,sendo possvel desenvolver
diversos tipos de aplicao com ela.
Unidade 1
prog_orient_objetos.indb 31
31
15/12/2011 14:00:36
Atividades de autoavaliao
1) Um programa feito em uma linguagem de programao de alto
nvel no pode ser entendido diretamente nessa linguagem pelo
computador. O que precisa ser feito com esse programa em alto nvel
para que suas instrues possam ser entendidas pelo computador?
32
prog_orient_objetos.indb 32
15/12/2011 14:00:36
Saiba mais
SILVA FILHO, ANTONIO MENDES DA, Introduo A
Programao Orientada A Objetos, Ed. Campus, 2010
Unidade 1
prog_orient_objetos.indb 33
33
15/12/2011 14:00:36
prog_orient_objetos.indb 34
15/12/2011 14:00:36
unidade 2
Sees de estudo
prog_orient_objetos.indb 35
Seo 1
Seo 2
15/12/2011 14:00:37
36
prog_orient_objetos.indb 36
15/12/2011 14:00:37
Unidade 2
prog_orient_objetos.indb 37
37
15/12/2011 14:00:37
38
prog_orient_objetos.indb 38
15/12/2011 14:00:37
Unidade 2
prog_orient_objetos.indb 39
39
15/12/2011 14:00:37
prog_orient_objetos.indb 40
15/12/2011 14:00:37
Unidade 2
prog_orient_objetos.indb 41
41
15/12/2011 14:00:37
42
prog_orient_objetos.indb 42
15/12/2011 14:00:37
DICA!!
Releia o item Multiplataforma, da unidade anterior,
para entender melhor esta seo.
1) Edio
Desenvolvimento do programa de acordo com a sintaxe da
linguagem, utilizando um software editor de texto como o Bloco
de Notas do Windows ou uma IDE (Integrated Development
Environment - ambiente de desenvolvimento integrado) como o
JCreator ou JBuilder. O arquivo contendo o programa deve ser
salvo com a extenso .java.
2) Compilao
prog_orient_objetos.indb 43
43
15/12/2011 14:00:37
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
44
prog_orient_objetos.indb 44
15/12/2011 14:00:38
Unidade 2
prog_orient_objetos.indb 45
45
15/12/2011 14:00:38
Voc deve ter recebido como resposta a frase Alo Mundo !. Isso
significa que tudo est certo e voc acabou de criar seu primeiro
programa em Java.
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.
46
prog_orient_objetos.indb 46
15/12/2011 14:00:38
Sntese
Nesta unidade voc aprendeu a instalar e configurar 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.
Unidade 2
prog_orient_objetos.indb 47
47
15/12/2011 14:00:38
Atividades de autoavaliao
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.
48
prog_orient_objetos.indb 48
15/12/2011 14:00:38
Saiba mais
BARNES, DAVID, Programao Orientada A Objetos Com
Java, PRENTICE HALL BRASIL, 2009.
Unidade 2
prog_orient_objetos.indb 49
49
15/12/2011 14:00:38
50
prog_orient_objetos.indb 50
15/12/2011 14:00:38
unidade 3
Sintaxe bsica da
linguagem Java
Objetivos de aprendizagem
Sees de estudo
Seo 1
prog_orient_objetos.indb 51
15/12/2011 14:00:38
52
prog_orient_objetos.indb 52
15/12/2011 14:00:38
// (duas barras)
Utilizam-se duas barras ( // ) em qualquer posio da linha.
Tudo o que aparecer direita das duas barras ser ignorado pelo
compilador.
A=A+1; // incremento da varivel A
Smbolo de atribuio
O que significa essa instruo?
Uma varivel de memria chamada A est recebendo o valor
dela mesma acrescido de 1.
/* e */
Unidade 3
prog_orient_objetos.indb 53
53
15/12/2011 14:00:38
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
float
4 bytes
1,4E-45 a 3,4E+38
double
8 bytes
4,9E-324 a 1,7E+308
Quadro 3.2 - Tipos numricos que representam valores com ponto flutuante.
54
prog_orient_objetos.indb 54
15/12/2011 14:00:38
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
Unidade 3
prog_orient_objetos.indb 55
55
15/12/2011 14:00:38
56
prog_orient_objetos.indb 56
15/12/2011 14:00:38
O operador mod
equivalente a funo
RESTO() aprendida em
Lgica I.
Unidade 3
prog_orient_objetos.indb 57
57
15/12/2011 14:00:39
Significado
==
Igualdade
!=
Diferena
<
Menor que
>
Maior que
<=
Menor ou igual a
>=
Maior ou igual
Significado
&&
||
OU
NO
58
prog_orient_objetos.indb 58
15/12/2011 14:00:39
Importante
Uma String no deve ser comparada com outra
usando o sinal = =, pois elas so objetos.
a.equals(b)
ou
a.equalsIgnoreCase(b)
prog_orient_objetos.indb 59
59
15/12/2011 14:00:39
prog_orient_objetos.indb 60
15/12/2011 14:00:39
Unidade 3
prog_orient_objetos.indb 61
61
15/12/2011 14:00:39
JAVA
1 int idade;
2 idade=Integer.parseInt(JOptionPane.showInputDialog(Entre com a idade));
3 JOptionPane.showMessageDialog(null, A idade +idade);
prog_orient_objetos.indb 62
15/12/2011 14:00:39
Unidade 3
prog_orient_objetos.indb 63
63
15/12/2011 14:00:39
JAVA
1 double valor;
2 valor=Double.parseDouble(JOptionPane.showInputDialog(Entre com o valor));
3 JOptionPane.showMessageDialog(null, O valor +valor);
64
prog_orient_objetos.indb 64
15/12/2011 14:00:39
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 65
65
15/12/2011 14:00:39
Sntese
Vamos revisar as principais instrues aprendidas nesta unidade:
Double.parseDouble( )
Float.parseFloat ( )
Integer.toString ( )
Double.toString( )
66
prog_orient_objetos.indb 66
15/12/2011 14:00:39
Atividades de autoavaliao
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.
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 67
67
15/12/2011 14:00:39
Saiba mais
FOWLER, Martin; SCOTT, Kendall. UML essencial: um
breve guia para a linguagem-padro de modelagem de objetos.
Segunda edio. Porto Alegre: Bookman, 2000.
68
prog_orient_objetos.indb 68
15/12/2011 14:00:39
unidade 4
Implementando os primeiros
programas em Java
Objetivos de aprendizagem
Sees de estudo
Seo 1
prog_orient_objetos.indb 69
15/12/2011 14:00:40
70
prog_orient_objetos.indb 70
15/12/2011 14:00:40
Passos iniciais
1 Passo: certifique-se de que o SDK da linguagem Java est
instalado no seu computador e se est devidamente configurado.
Unidade 4
prog_orient_objetos.indb 71
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.
71
15/12/2011 14:00:40
PSEUDOCDIGO
Incio
NOME, ENDERECO, CIDADE, ESTADO, CEP,
DATANASC: literal
GRAUESC, CURSO: literal
RG: numrico
Leia NOME
Leia ENDERECO
Leia CIDADE
Leia ESTADO
Leia CEP
Leia RG
Leia DATANASC
Leia GRAUESC
Leia CURSO
Escreva Nome, NOME
Escreva Endereo, ENDERECO
Escreva Cidade, CIDADE
Escreva Estado, ESTADO
Escreva CEP, CEP
Escreva RG, RG
Escreva Data de Nascimento, DATANASC
Escreva Grau de Escolaridade, GRAUESC
Escreva Curso, CURSO
Fim
Quadro 4.1 - Pseudocdigo
72
prog_orient_objetos.indb 72
15/12/2011 14:00:40
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 73
73
15/12/2011 14:00:40
74
prog_orient_objetos.indb 74
15/12/2011 14:00:40
Unidade 4
prog_orient_objetos.indb 75
75
15/12/2011 14:00:40
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.
76
prog_orient_objetos.indb 76
15/12/2011 14:00:40
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 se 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 77
77
15/12/2011 14:00:40
78
prog_orient_objetos.indb 78
15/12/2011 14:00:40
Figura 4.5 Tela aps compilao ter sido realizada com sucesso.
Unidade 4
prog_orient_objetos.indb 79
79
15/12/2011 14:00:41
80
prog_orient_objetos.indb 80
15/12/2011 14:00:41
prog_orient_objetos.indb 81
81
15/12/2011 14:00:41
82
prog_orient_objetos.indb 82
15/12/2011 14:00:42
Unidade 4
prog_orient_objetos.indb 83
83
15/12/2011 14:00:42
Sntese
Nesta unidade, voc desenvolveu os primeiros programas (sem
controle de fluxo) na linguagem Java, com entrada e sada de
dados.
importante que voc pratique as informaes passadas nesta
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.
84
prog_orient_objetos.indb 84
15/12/2011 14:00:42
Atividades de autoavaliao
1) Desenvolver em Java TODOS os exerccios de autoavaliao da seo 1,
da Unidade 5, da disciplina de Lgica de Programao I.
Unidade 4
prog_orient_objetos.indb 85
85
15/12/2011 14:00:42
Saiba mais
DEITEL, H.M.; DEITEL, P.J. Java - Como programar. Sexta
edio. Pearson, 2005.
FURGERI, Sergio. Java 2 Ensino Didtico. So Paulo: rica,
2002.
86
prog_orient_objetos.indb 86
15/12/2011 14:00:42
unidade 5
Implementando programas em
Java com controle de fluxo
Objetivos de aprendizagem
Sees de estudo
Seo 1
prog_orient_objetos.indb 87
15/12/2011 14:00:42
88
prog_orient_objetos.indb 88
15/12/2011 14:00:42
Unidade 5
prog_orient_objetos.indb 89
89
15/12/2011 14:00:42
90
prog_orient_objetos.indb 90
15/12/2011 14:00:42
Unidade 5
prog_orient_objetos.indb 91
91
15/12/2011 14:00:42
11 else
12
if (MEDIA = = 7.0)
13
14
else
15
16
System.exit(0);
17 }
18 }
Quadro 5.9 - Algortimo na linguagem Java
92
prog_orient_objetos.indb 92
15/12/2011 14:00:43
Unidade 5
prog_orient_objetos.indb 93
93
15/12/2011 14:00:43
94
prog_orient_objetos.indb 94
15/12/2011 14:00:43
prog_orient_objetos.indb 95
95
15/12/2011 14:00:43
96
prog_orient_objetos.indb 96
15/12/2011 14:00:43
2. para/faa/fim-para-faa
Em Java, a estrutura para/faa/fim-para-faa possui a sintaxe
mostrada abaixo:
for (inicializao da varivel de controle ; condio de repetio ;
incremento da varivel de controle)
instruo ou { bloco }
Unidade 5
prog_orient_objetos.indb 97
97
15/12/2011 14:00:43
Incio
para I de 1 at 100 passo 1 faa
leia NOME
escreva Aluno cadastrado: NOME
fim-para
Fim
98
prog_orient_objetos.indb 98
15/12/2011 14:00:43
Sntese
Nesta unidade, voc avanou um pouco mais e passou a
desenvolver programas com controle de fluxo de execuo,
ou seja, usando estruturas que controlam o fluxo 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.
Unidade 5
prog_orient_objetos.indb 99
99
15/12/2011 14:00:43
Atividades de autoavaliao
1) Desenvolver em Java todos os exerccios de autoavaliao da seo 2,
da Unidade 5, da disciplina de Lgica de Programao I (Exerccios com
estrutura condicional).
100
prog_orient_objetos.indb 100
15/12/2011 14:00:43
Unidade 5
prog_orient_objetos.indb 101
101
15/12/2011 14:00:43
Saiba mais
GAMMA, Erich; HELM, Richard. PADRES de projeto:
solues reutilizveis de software orientado e objetos. reimp.
Porto Alegre: Bookman, 2002.
102
prog_orient_objetos.indb 102
15/12/2011 14:00:43
unidade 6
Desenvolvendo programas
modularizados em Java
Objetivos de aprendizagem
Sees de estudo
Seo 1
prog_orient_objetos.indb 103
15/12/2011 14:00:43
prog_orient_objetos.indb 104
15/12/2011 14:00:43
Unidade 6
prog_orient_objetos.indb 105
105
15/12/2011 14:00:43
106
prog_orient_objetos.indb 106
15/12/2011 14:00:43
Unidade 6
prog_orient_objetos.indb 107
107
15/12/2011 14:00:43
108
prog_orient_objetos.indb 108
15/12/2011 14:00:43
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
prog_orient_objetos.indb 109
109
15/12/2011 14:00:44
prog_orient_objetos.indb 110
15/12/2011 14:00:44
Sntese
Nesta 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 111
111
15/12/2011 14:00:44
Atividades de autoavaliao
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.
112
prog_orient_objetos.indb 112
15/12/2011 14:00:44
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
Unidade 6
prog_orient_objetos.indb 113
113
15/12/2011 14:00:44
114
prog_orient_objetos.indb 114
15/12/2011 14:00:44
Saiba mais
HORSTMANN, Cay S.; CORNELL, Gary. Core Java 2. So
Paulo: Makron Books, 2004.
Unidade 6
prog_orient_objetos.indb 115
115
15/12/2011 14:00:44
prog_orient_objetos.indb 116
15/12/2011 14:00:44
unidade 7
Introduo Programao
Orientada a Objeto (POO)
Objetivos de aprendizagem
Sees de estudo
prog_orient_objetos.indb 117
Seo 1
Seo 2
15/12/2011 14:00:44
118
prog_orient_objetos.indb 118
15/12/2011 14:00:44
Um pouco de histria
O conceito de programao orientada a objeto no algo novo.
No final 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.
prog_orient_objetos.indb 119
119
15/12/2011 14:00:44
120
prog_orient_objetos.indb 120
15/12/2011 14:00:45
Disciplina nesse
caso refere-se a uma
disciplina oferecida numa
universidade.
Unidade 7
prog_orient_objetos.indb 121
121
15/12/2011 14:00:45
prog_orient_objetos.indb 122
15/12/2011 14:00:46
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 123
123
15/12/2011 14:00:46
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.
O valor dos atributos nome e endereo do objeto Joo
podem mudar ao longo da existncia desse objeto.
As figuras abaixo ilustram isso: no estado 1 do objeto
Joo, o valor do atributo endereo era Rua J, no estado
2 o valor desse atributo Rua XX.
Estado 1
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 modificaes 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!
124
prog_orient_objetos.indb 124
15/12/2011 14:00:46
prog_orient_objetos.indb 125
125
15/12/2011 14:00:46
3) Identidade
Refere-se identificao do objeto. Como cada objeto nico,
ou seja, tem seus prprios valores nos atributos, ele deve ser
identificado por algum nome. Mesmo que seu estado seja
idntico ao de outro objeto ele tem identificao prpria.
A identificao do objeto do tipo Agncia, mostrado na figura abaixo,
Centro. Esse objeto poderia ter qualquer nome identificando-o.
Centro:Agencia
nome: Centro
numero: 123
prog_orient_objetos.indb 126
15/12/2011 14:00:46
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.
Cliente
Conta
Agencia
nome: String
endereo: String
cpf: int
numero: int
saldo: double
transao: String
codigo: int
nome: String
alteraNome()
alteraEndereco()
alteraCpf()
forneceNome()
Unidade 7
prog_orient_objetos.indb 127
127
15/12/2011 14:00:46
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
128
prog_orient_objetos.indb 128
15/12/2011 14:00:46
Unidade 7
prog_orient_objetos.indb 129
129
15/12/2011 14:00:46
130
prog_orient_objetos.indb 130
15/12/2011 14:00:46
Unidade 7
prog_orient_objetos.indb 131
131
15/12/2011 14:00:46
132
prog_orient_objetos.indb 132
15/12/2011 14:00:47
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.
prog_orient_objetos.indb 133
Fala-se em atributos
do objeto porque
tudo o que definido
na classe ser atributo
de comportamento de
qualquer objeto criado
(instanciado) a partir dela.
133
15/12/2011 14:00:47
134
prog_orient_objetos.indb 134
15/12/2011 14:00:47
Unidade 7
prog_orient_objetos.indb 135
System.out.println ( )
uma instruo de sada de
dados. Ela uma alternativa
a instruo JOptionPane.
showMessageDialog(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.
135
15/12/2011 14:00:47
prog_orient_objetos.indb 136
15/12/2011 14:00:47
Nome da Classe
a partir da qual o
objeto ser criado
Nome do objeto
Memria
nome
Objeto C
endereco
cpf
Unidade 7
prog_orient_objetos.indb 137
137
15/12/2011 14:00:47
138
prog_orient_objetos.indb 138
15/12/2011 14:00:47
Objeto C
endereco Rua A
cpf
Objeto C
nome Ana
endereco Rua A
cpf 1235
Unidade 7
prog_orient_objetos.indb 139
139
15/12/2011 14:00:47
Sntese
Nesta unidade, voc, finalmente, 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 nesta 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.
140
prog_orient_objetos.indb 140
15/12/2011 14:00:47
Atividades de autoavaliao
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.
Unidade 7
prog_orient_objetos.indb 141
141
15/12/2011 14:00:47
142
prog_orient_objetos.indb 142
15/12/2011 14:00:47
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.
SANTOS, RAFAEL. Introduo A Programao Orientada
A Objetos, CAMPUS, 2003
Unidade 7
prog_orient_objetos.indb 143
143
15/12/2011 14:00:47
prog_orient_objetos.indb 144
15/12/2011 14:00:47
unidade 8
Sees de estudo
prog_orient_objetos.indb 145
Seo 1
Referncia e Objeto
Seo 2
Seo 3
Seo 4
Encapsulamento
15/12/2011 14:00:48
146
prog_orient_objetos.indb 146
15/12/2011 14:00:48
Unidade 8
prog_orient_objetos.indb 147
147
15/12/2011 14:00:48
varivel c
Objeto
Cliente
123x
nome
endereco
endereo 123x
cpf
148
prog_orient_objetos.indb 148
15/12/2011 14:00:48
varivel c
Objeto
Cliente
123x
nome Ana
endereo 123x
endereco
cpf 0
varivel c
Objeto
Cliente
123x
nome Ana
endereo 123x
endereco Rua A
cpf 1235
prog_orient_objetos.indb 149
149
15/12/2011 14:00:48
Objeto
Cliente
123x
nome
endereco
endereo 123x
cpf 0
150
prog_orient_objetos.indb 150
15/12/2011 14:00:48
c
b
123x
null
nome
Objeto
Cliente
endereo 123x
endereco
cpf 0
c
b
Objeto
Cliente
123x
123x
nome
endereo 123x
endereco
cpf 0
prog_orient_objetos.indb 151
151
15/12/2011 14:00:48
c
b
123x
123x
nome Ana
Objeto
Cliente
endereco Rua A
endereo 123x
cpf 75645
152
prog_orient_objetos.indb 152
15/12/2011 14:00:48
preciso ficar claro que, uma vez que a classe (TAD) que define
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 define 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 definir 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.
Linha 5
Linha 6
Linha 7
Linha 8
Linha 9
Linha 10
Linha 11
cliente2.alteraCpf(1235);
Linha 12
Linha 13
Linha 14 }
Linha 15 }
Unidade 8
prog_orient_objetos.indb 153
153
15/12/2011 14:00:48
123x
Cliente 2
124x
nome Ana
Objeto
endereco Rua A
endereo 123x
cpf 4455
nome Joo
Objeto
endereco Rua J
endereo 124x
cpf 1235
154
prog_orient_objetos.indb 154
15/12/2011 14:00:48
prog_orient_objetos.indb 155
155
15/12/2011 14:00:48
prog_orient_objetos.indb 156
15/12/2011 14:00:48
cliente1.alteraCpf(12352241123);
prog_orient_objetos.indb 157
157
15/12/2011 14:00:48
Cliente 1
Objeto
Cliente
123x
nome
endereco
endereo 123x
cpf 0
158
prog_orient_objetos.indb 158
15/12/2011 14:00:49
Cliente 1
123x
Cliente 2
124x
Objeto
Cliente
Objeto
Cliente
nome
endereo 123x
endereco
cpf 0
nome Carlos
endereo 124x
endereco Rua C
cpf 123552244
Importante!
Quando nenhum mtodo construtor especificado 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
modificadores (set) e recuperadores (get) de uma classe.
Unidade 8
prog_orient_objetos.indb 159
Veremos o que um
atributo do tipo objeto
mais adiante.
159
15/12/2011 14:00:49
prog_orient_objetos.indb 160
15/12/2011 14:00:49
Unidade 8
prog_orient_objetos.indb 161
161
15/12/2011 14:00:49
162
prog_orient_objetos.indb 162
15/12/2011 14:00:49
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 163
163
15/12/2011 14:00:49
164
prog_orient_objetos.indb 164
15/12/2011 14:00:49
Unidade 8
prog_orient_objetos.indb 165
165
15/12/2011 14:00:49
Sntese
Nesta 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.
Aprendeu a criar programas que envolviam a criao de mais de
um objeto e tambm o conceito muito importante da OO que o
Encapsulamento.
166
prog_orient_objetos.indb 166
15/12/2011 14:00:49
Atividades de autoavaliao
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.
Unidade 8
prog_orient_objetos.indb 167
167
15/12/2011 14:00:49
Saiba mais
TAFNER, Malcon Anderson; CORREIA, Carlos H. Anlise
orientada a objetos. Florianpolis: Visual Books, 2001.
168
prog_orient_objetos.indb 168
15/12/2011 14:00:49
unidade 9
Aplicando os conceitos de OO
atravs de exemplos prticos
Objetivos de aprendizagem
Sees de estudo
prog_orient_objetos.indb 169
Seo 1
Seo 2
Mtodo sobrecarregado
15/12/2011 14:00:49
Problema 1
Uma empresa necessita de um programa para armazenar as
informaes sobre seus 50 funcionrios. As informaes que
deseja armazenar so: nome, endereo e salrio. Desenvolva um
programa dentro do paradigma orientado a objetos.
170
prog_orient_objetos.indb 170
15/12/2011 14:00:49
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 171
171
15/12/2011 14:00:49
172
prog_orient_objetos.indb 172
15/12/2011 14:00:50
Funcionrio
nome: String
endereco: String
salario double
setNome()
setEndereco()
setSalario()
getNome()
getEndereco()
getSalario()
Unidade 9
prog_orient_objetos.indb 173
173
15/12/2011 14:00:50
174
prog_orient_objetos.indb 174
15/12/2011 14:00:50
Procedimentos Prticos:
1. Digitar o cdigo acima e salvar o arquivo com o nome
Funcionario.Java na pasta CURSOWEB. (Lembre-se de 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 175
175
15/12/2011 14:00:50
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 }
prog_orient_objetos.indb 176
15/12/2011 14:00:50
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 177
177
15/12/2011 14:00:50
Linha 3
Linha 4
Linha 5
Linha 6
Linha 7
Linha 8
...
Linha 9
....
Linha 10
Linha 11
....
}
Linha 12 }
prog_orient_objetos.indb 178
15/12/2011 14:00:50
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 179
179
15/12/2011 14:00:51
Linha 3
Linha 4
Linha 5
Linha 6
Linha 7
Linha 8
System.exit(0);
}
Linha 9 }
180
prog_orient_objetos.indb 180
15/12/2011 14:00:51
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 181
181
15/12/2011 14:00:51
..
..
f[0]=new Funcionario( );
f[1]= new Funcionario( );
f[1]= new Funcionario( );
f[1]= new Funcionario( );
..
f[49]= new Funcionario( );
..
182
prog_orient_objetos.indb 182
15/12/2011 14:00:51
f[]
155x
null
null
null
null
..
null
..
null
49
Null
nome
Objeto Funcionrio
endereo
endereo 155x
salrio
Unidade 9
prog_orient_objetos.indb 183
183
15/12/2011 14:00:51
f[]
155x
null
null
null
null
..
null
..
null
49
Null
nome Ana
Objeto Funcionrio
endereo
endereo 155x
salrio
184
prog_orient_objetos.indb 184
15/12/2011 14:00:51
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 185
185
15/12/2011 14:00:51
186
prog_orient_objetos.indb 186
15/12/2011 14:00:51
prog_orient_objetos.indb 187
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.
187
15/12/2011 14:00:51
Linha 12
nome = snome;
Linha 13
endereo = sendere;
Linha 14
salario = ssal;
Linha 15
}
Linha 16
Linha 17
public void setNome(String snome){
Linha 18
nome=snome;
Linha 19
}
Linha 20
Linha 21
public void setEndereco(String sender){
Linha 22
endereco=sender;
Linha 23
}
Linha 24
Linha 25
public void setSalario(double dsalario){
Linha 26
salario=dsalario;
Linha 27
}
Linha 28
Linha 29
public void setSalario(String ssalario){
Linha 30
salario = Double.parseDouble(ssalario);
Linha 31
}
Linha 32
Linha 33
public String getNome(){
Linha 34
return nome;
Linha 35
}
Linha 36
Linha 37
public String getEndereco(){
Linha 38
return endereco;
Linha 39
}
Linha 40
Linha 41
public double getSalario(){
Linha 42
return salario;
Linha 43
}
Linha 44 }
188
prog_orient_objetos.indb 188
15/12/2011 14:00:51
Unidade 9
prog_orient_objetos.indb 189
189
15/12/2011 14:00:51
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
190
prog_orient_objetos.indb 190
15/12/2011 14:00:51
Sntese
Nesta 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, identificando 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 a 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.
Unidade 9
prog_orient_objetos.indb 191
191
15/12/2011 14:00:51
Atividades de autoavaliao
1) Implemente o cdigo explicado nessa unidade.
prog_orient_objetos.indb 192
15/12/2011 14:00:51
Saiba mais
FOWLER, Martin; SCOTT, Kendall. UML essencial: um
breve guia para a linguagem-padro de modelagem de objetos.
Segunda edio. Porto Alegre: Bookman, 2000.
Unidade 9
prog_orient_objetos.indb 193
193
15/12/2011 14:00:51
prog_orient_objetos.indb 194
15/12/2011 14:00:51
unidade 10
Modificadores
Objetivos de aprendizagem
10
Sees de estudo
Seo 1
prog_orient_objetos.indb 195
Modificadores
15/12/2011 14:00:52
Seo 1 - Modificadores
Na linguagem Java, podemos utilizar algumas palavras-chave
(keyword) para modificar o modo como so declaradas classes,
mtodos e variveis (atributos). Veremos como aplicar cada um
desses modificadores no texto a seguir.
196
prog_orient_objetos.indb 196
15/12/2011 14:00:52
Declarao de todos
os atributos com o
modificador de acesso
private.
Declarao de mtodo com
o modificador de acesso
public.
Modificador private
No exemplo acima, todos os atributos declarados possuem o
modificador 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 }
Unidade10
prog_orient_objetos.indb 197
197
15/12/2011 14:00:52
f.setNome(Ana);
Modificador public
Quando um membro de uma classe (atributo ou mtodo) for
declarado como modificador 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?
198
prog_orient_objetos.indb 198
15/12/2011 14:00:52
Unidade10
prog_orient_objetos.indb 199
199
15/12/2011 14:00:52
Linha 5 }
Linha 6 }
Modificador protected
Esse modificador ser abordado quando voc aprender o conceito
de herana.
Modificador final
O modificador final no um modificador 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 modificados. Porm,
existem situaes em que um atributo tem um valor fixo 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 definir o atributo com o
modificador final.
Vamos mostrar o uso desse modificador 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 fixo, constante, no deve mudar para cada objeto do
tipo Circulo. Logo, o atributo pi um candidato em potencial a
ter um modificador final.
200
prog_orient_objetos.indb 200
15/12/2011 14:00:52
Linha 1
public class Circulo{
Linha 2
private final double pi=3.14;
Linha 3
private double raio;
Linha 4
Linha 5
public Circulo( ){
raio=0;
}
public Circulo(double draio ){
raio=drario;
}
public void setRaio(double draio){
raio=draio;
}
public double getRaio(){
return raio;
}
public double getPi(){
return pi;
}
public double calculaArea( ){
return pi*raio*raio;
}
}
Unidade10
prog_orient_objetos.indb 201
201
15/12/2011 14:00:52
C1
referncias C 2
C3
10x
11x
290v
raio
pi 3.14
Objetos
Crculo
raio
pi 3.14
raio
pi 3.14
endereo 10x
endereo 11x
endereo 290x
202
prog_orient_objetos.indb 202
15/12/2011 14:00:52
Modificador static
O modificador static no um modificador 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
definida 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.
Unidade10
prog_orient_objetos.indb 203
203
15/12/2011 14:00:52
204
prog_orient_objetos.indb 204
15/12/2011 14:00:52
pi
3.14
c1
referncias c 2
c3
10x
Objetos Crculo*
11x
290v
raio
endereo 10x
raio
endereo 11x
raio
endereo 290x
Unidade10
prog_orient_objetos.indb 205
205
15/12/2011 14:00:52
Mtodos static
Mtodos de uma classe tambm podem ser declarados com
o modificador 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;
}
206
prog_orient_objetos.indb 206
15/12/2011 14:00:52
Unidade10
prog_orient_objetos.indb 207
207
15/12/2011 14:00:53
Exemplos:
JOptionPane.showInputDialog(Entre com o valor);
208
prog_orient_objetos.indb 208
15/12/2011 14:00:53
Linha 1
Linha 2
Linha 3
Linha 4
private static int cont=0;
Linha 5
Linha 6
public Funcionario( ){
Linha 7
nome=;
Linha 8
endereo=;
Linha 9
salario=0;
Linha 10
cont=cont + 1;
Linha 11
}
Linha 12
Linha 13
public void setNome(String snome){
Linha 14
nome=snome;
Linha 15
}
Linha 16
Linha 17
public void setEndereco(String sender){
Linha 18
endereco=sender;
Linha 19
}
Linha 20
Linha 21
public void setSalario(double dsalario){
Linha 22
salario=dsalario;
Linha 23
}
Linha 24
public String getNome(){
Linha 25
return nome;
Linha 26
}
Linha 27
Linha 28
public String getEndereco(){
Linha 29
return endereco;
Linha 30
}
Linha 31
Linha 32
public double getSalario(){
Linha 33
return salario;
Linha 34
}
Linha 35
Linha 36
public static int getCont( ){
Linha 37
return cont;
Linha 38
}
Linha 32 }
Unidade10
prog_orient_objetos.indb 209
209
15/12/2011 14:00:53
Linha 7
System.out.println(f1.getCont());
Linha 8
System.out.println(f2.getCont());
Linha 9
Linha 10 }
prog_orient_objetos.indb 210
15/12/2011 14:00:53
Isso faz com que o atributo cont armazene + 1. Logo, o seu valor
no momento 1.
A figura 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
Unidade10
prog_orient_objetos.indb 211
endereo 100x
211
15/12/2011 14:00:53
cont
f1
Objetos Funcionrio
2
100x
101x
nome
Endereo
Salrio 0
nome
Endereo
Salrio 0
endereo 100x
endereo 101x
212
prog_orient_objetos.indb 212
15/12/2011 14:00:53
Sntese
Nesta unidade voc aprendeu sobre modificadores. Viu que
existem os chamados modificadores de acesso (public, private,
protected e pacote) e que existem os modificadores static e final.
Modificadores podem ser aplicados a uma classe, atributo ou
mtodo.
importante que voc entenda por que usava a palavra public,
private, static nos programas anteriores.
Agora isso se tornou possvel.
Vimos nesta unidade as aplicaes mais importantes desses
modificadores, contudo, existem outras possibilidades de
aplicao dos modificadores.
Unidade10
prog_orient_objetos.indb 213
213
15/12/2011 14:00:53
Atividades de autoavaliao
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
}
}
214
prog_orient_objetos.indb 214
15/12/2011 14:00:53
Unidade10
prog_orient_objetos.indb 215
215
15/12/2011 14:00:53
Saiba mais
LEMAY, Laura; CADENHEAD, Rogers. Aprenda em 21 dias
Java 1.2. Rio de Janeiro: Campus, 1999.
216
prog_orient_objetos.indb 216
15/12/2011 14:00:53
unidade 11
11
Sees de estudo
Seo 1
prog_orient_objetos.indb 217
Associao
15/12/2011 14:00:53
Seo 1 Associao
Ao modelar os atributos da classe Funcionrio (lembre-se de
que ela representa os atributos e comportamentos de objetos
Funcionrio), podemos definir que o setor em que o funcionrio
trabalha uma informao importante.
Poderamos definir essa informao como um atributo
do tipo String.
prog_orient_objetos.indb 218
15/12/2011 14:00:53
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
Unidade11
prog_orient_objetos.indb 219
219
15/12/2011 14:00:53
*
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
220
prog_orient_objetos.indb 220
15/12/2011 14:00:54
Unidade11
prog_orient_objetos.indb 221
221
15/12/2011 14:00:54
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
222
prog_orient_objetos.indb 222
15/12/2011 14:00:54
prog_orient_objetos.indb 223
223
15/12/2011 14:00:54
S[]
null
null
null
S[]
Objeto Setor
0
1
2
100x
null
null
codigo 1
nomesetor Financeiro
100x
prog_orient_objetos.indb 224
15/12/2011 14:00:54
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
Unidade11
prog_orient_objetos.indb 225
225
15/12/2011 14:00:54
prog_orient_objetos.indb 226
15/12/2011 14:00:54
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
prog_orient_objetos.indb 227
227
15/12/2011 14:00:55
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
prog_orient_objetos.indb 228
15/12/2011 14:00:55
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
Unidade11
prog_orient_objetos.indb 229
229
15/12/2011 14:00:55
230
prog_orient_objetos.indb 230
15/12/2011 14:00:55
Sntese
Nesta unidade, voc aprendeu o conceito de relacionamento entre
classes. O relacionamento demonstrado nesta 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.
Unidade11
prog_orient_objetos.indb 231
231
15/12/2011 14:00:55
Atividades de autoavaliao
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 CEP, semelhante ao relacionamento trabalhado nesta 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.
232
prog_orient_objetos.indb 232
15/12/2011 14:00:55
Saiba mais
TAFNER, Malcon Anderson; CORREIA, Carlos H. Anlise
orientada a objetos. Florianpolis: Visual Books, 2001. 112 p.
Unidade11
prog_orient_objetos.indb 233
233
15/12/2011 14:00:55
prog_orient_objetos.indb 234
15/12/2011 14:00:55
unidade 12
Associao na prtica
Objetivos de aprendizagem
12
Sees de estudo
Seo 1
prog_orient_objetos.indb 235
15/12/2011 14:00:55
prog_orient_objetos.indb 236
15/12/2011 14:00:55
Cliente
Conta
nome: String
endereo: String
cpf: int
multiplicidade
1
0..*
Cliente( )
setNome(String snome )
setEndereco(String send)
setCpf(int icpf)
getNome(): String
getEndereco(): String
getCpf(): int
numero: int
saldo: double
cliente: Cliente
Conta( )
setNumero(int inum)
setSaldo(double ssal)
setCliente(Cliente c)
getNumero():int
getSaldo():double
getCliente():Cliente
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
Unidade12
prog_orient_objetos.indb 237
237
15/12/2011 14:00:55
238
prog_orient_objetos.indb 238
15/12/2011 14:00:56
Unidade12
prog_orient_objetos.indb 239
O atributo cliente do
tipo Cliente, ou seja, far
referncia a um objeto do
tipo Cliente em memria.
O atributo cliente
inicializado com o valor
null. Todo atributo/objeto
deve ser inicializado com
esse valor. Isso quer dizer
que, no momento, ele no
faz referncia a nenhum
objeto.
Mtodo setCliente(Cliente
c) recebe como parmetro
a referncia ou endereo
de um objeto Cliente. Essa
referncia armazenada
no atributo cliente. Isso
indicar que o objeto
Conta est ligado a um
objeto Cliente.
239
15/12/2011 14:00:56
240
prog_orient_objetos.indb 240
15/12/2011 14:00:56
cta [ ]
null
null
null
cli [ ]
0
1
2
null
null
null
0
1
null
null
0
1
2
null
null
null
cli [ ]
0
1
140x
null
Objeto Cliente
nome Carlos
endereo Rua R
cpf 626193455
Unidade12
prog_orient_objetos.indb 241
Endereo 140x
241
15/12/2011 14:00:56
0
1
2
160x
null
null
cli [ ]
0
1
140x
null
Objeto Cliente
Objeto Conta
nome Carlos
endereo Rua R
cpf 626193455
numero 1596
saldo 2000.00
Endereo 140x
Endereo 160x
cliente 140x
O atributo cliente do objeto Conta
aponta ou faz referncia para o
endereo de um objeto Cliente. 140x
o endereo do primeiro objeto
Cliente cadastrado.
242
prog_orient_objetos.indb 242
15/12/2011 14:00:56
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
Unidade12
prog_orient_objetos.indb 243
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.
243
15/12/2011 14:00:56
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 244
15/12/2011 14:00:56
Saldo
1596
1597
1598
2000.00
1000.00
500.00
Carlos
Roger
Carlos
Unidade12
prog_orient_objetos.indb 245
245
15/12/2011 14:00:56
246
prog_orient_objetos.indb 246
15/12/2011 14:00:56
Linha 32
}
Linha 33 }
Linha 34 } //fi m da op = = 2
Linha 35 else
Linha 36 if (op.equalsIgnoreCase(3))
Linha 38 break; //sai do while
Linha 39 } //fi m do while
Linha 40 System.exit(0);
Linha 41 } //fi m do mtodo main( )
Linha 42 } //fi m da classe
Unidade12
prog_orient_objetos.indb 247
247
15/12/2011 14:00:57
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 simplificada e, a
segunda, um pouco mais elaborada.
Espero que voc tenha entendido o conceito de associao!
248
prog_orient_objetos.indb 248
15/12/2011 14:00:57
Atividades de autoavaliao
1) Implemente o cdigo dessa unidade.
Requisitos do sistema:
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.
Unidade12
prog_orient_objetos.indb 249
249
15/12/2011 14:00:57
Saiba mais
MICHAL, Young. Teste e anlise de software. Bookman, 2008
250
prog_orient_objetos.indb 250
15/12/2011 14:00:57
13
unidade 13
Herana
Objetivos de aprendizagem
Sees de estudo
Seo 1
prog_orient_objetos.indb 251
Herana
15/12/2011 14:00:57
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 especficas desses tipos de objetos. Essas classes especficas,
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 especificadas ou especializadas.
prog_orient_objetos.indb 252
15/12/2011 14:00:57
Docente
Nome
Nome
Endereo
Endereo
Salrio
Salrio
Cargo
Setor
Unidade13
prog_orient_objetos.indb 253
253
15/12/2011 14:00:57
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 254
15/12/2011 14:00:57
Unidade13
prog_orient_objetos.indb 255
255
15/12/2011 14:00:57
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.
prog_orient_objetos.indb 256
15/12/2011 14:00:57
public String getCargo(){
return cargo;
}
public void setSetor(String ssetor){
setor=ssetor;
}
public String getSetor(){
return setor;
}
}
Linha 1
Linha 2
Linha 3
Linha 4
Linha 5
Linha 6
construtor
Linha 7
Linha 8
Linha 9
Linha 10
//chamada explcita ao
da superclasse
nha=0;
titulacao=;
}
Unidade13
prog_orient_objetos.indb 257
257
15/12/2011 14:00:57
Linha 11
Linha 12
Linha 13
public int getNha(){
return nha;
}
public void setTitulacao(String stitu){
titulacao=stitu;
}
public String getTitulacao(){
return titulacao;
}
}
Quadro 13.1 - Implementao subclasse Administrativo e Docente
258
prog_orient_objetos.indb 258
15/12/2011 14:00:57
Objeto Docente
nome
endereco
salario
nha
titulacao
endereo 10x
Unidade13
prog_orient_objetos.indb 259
259
15/12/2011 14:00:57
260
prog_orient_objetos.indb 260
15/12/2011 14:00:58
referncia d1 10x
a1 12x
Objeto Docente
Objeto
Administrativo
Nome Ana
endereo Rua A
salrio 1000
nha 12
titulacao Mestre
endereo 10x
nome
endereco
salrio
cargo
setor
endereo 12x
Unidade13
prog_orient_objetos.indb 261
261
15/12/2011 14:00:58
262
prog_orient_objetos.indb 262
15/12/2011 14:00:58
Unidade13
prog_orient_objetos.indb 263
263
15/12/2011 14:00:58
prog_orient_objetos.indb 264
15/12/2011 14:00:58
O atributo salario
est sendo acessado
diretamente pelo nome
na subclasse Docente.
Isso possvel porque seu
modificador de acesso
agora foi mudado para
protected.
Modificador
Assinatura do mtodo
public void setSalario (double dsal) {
salario=dsal;
}
Unidade13
prog_orient_objetos.indb 265
Nome do mtodo
Parmetro
265
15/12/2011 14:00:58
Especialista
R$ 15,00
Mestre
R$ 20,00
Doutor
R$ 30,00
prog_orient_objetos.indb 266
15/12/2011 14:00:58
Cargo
Valor
Tcnico administrativo
R$ 300,00
Bibliotecria
R$ 400,00
Tcnico de laboratrio
R$ 500,00
Unidade13
prog_orient_objetos.indb 267
267
15/12/2011 14:00:58
268
prog_orient_objetos.indb 268
15/12/2011 14:00:58
Unidade13
prog_orient_objetos.indb 269
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.
269
15/12/2011 14:00:58
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 19 }
Quadro 14.4
270
prog_orient_objetos.indb 270
15/12/2011 14:00:58
Sntese
Nesta 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.
Unidade13
prog_orient_objetos.indb 271
271
15/12/2011 14:00:58
Atividades de autoavaliao
1) Desenvolva um sistema orientado a objetos para automatizar as
informaes de uma Administradora de Imveis.
272
prog_orient_objetos.indb 272
15/12/2011 14:00:58
Saiba mais
HORSTMANN, Cay S. Big Java. Porto Alegre: Bookman,
2004.
Unidade13
prog_orient_objetos.indb 273
273
15/12/2011 14:00:58
prog_orient_objetos.indb 274
15/12/2011 14:00:58
unidade 14
Herana na prtica
Objetivos de aprendizagem
14
Sees de estudo
Seo 1
prog_orient_objetos.indb 275
15/12/2011 14:00:59
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 final (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.
276
prog_orient_objetos.indb 276
15/12/2011 14:00:59
Unidade14
prog_orient_objetos.indb 277
277
15/12/2011 14:00:59
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 final
km final
Ar-condicionado
capacidade
Nmero de portas
Comportamentos ou mtodos
Passeio ( )
Carga ( )
calculaValorLocacao( )
calculaValorLocacao( )
prog_orient_objetos.indb 278
15/12/2011 14:00:59
Superclasse
Veiculo
placa: String
marca: String
modelo: double
ano: int
valorkmrod: double
kminic: int
kmfim: int
Veiculo( )
setPlaca(String splaca )
setMarca(String smarca )
setModelo(String smodelo)
setAno(int iano )
setValorKmRod(double dvalkm )
setKmInic(int ikmi )
setKmFim(int ikmf )
getPlaca( ):String
getMarca( ):String
getModelo( ): String
getAno( ): int
getValorKmRod( ): double
getKmInic( ): int
getKmFim( ):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
Unidade14
prog_orient_objetos.indb 279
279
15/12/2011 14:00:59
280
prog_orient_objetos.indb 280
15/12/2011 14:00:59
}
}
}
}
}
}
}
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.
Unidade14
prog_orient_objetos.indb 281
281
15/12/2011 14:00:59
O mtodo calculaValorLocao
( ) est sendo sobrescrito na
classe Carga. Isso acontece porque
na classe Carga, o mtodo de
calcular o valor da locao
diferente. Lembrando: ((kmfinkminic)*valorkmrod)+10%. Logo,
a classe Carga no deseja a herana
do mtodo calculaValorLocao
( ) da maneira como ele foi
implementado na classe Veculo.
Com isso, esse mtodo pode ser
redefinido na classe Carga com a
frmula correta.
}
Quadro 14.3 - Implementao classes bsicas do sistema
282
prog_orient_objetos.indb 282
15/12/2011 14:00:59
Unidade14
prog_orient_objetos.indb 283
283
15/12/2011 14:00:59
Linha 40
c[pc].setValKmRod(Double.parseDouble(JOptionPane.
showInputDialog(Digite o Valor do
Kilometro Rodado)));
Linha 41
c[pc].setKmInic(Integer.parseInt(JOptionPane.
showInputDialog(Digite a Kilometragem
Inicial)));
Linha 42
c[pc].setKmFim(Integer.parseInt(JOptionPane.
showInputDialog(Digite a Kilometragem
Final)));
Linha 43
c[pc].setCapacidade(Integer.parseInt(JOptionPane.
showInputDialog(Digite a capacidade
mxima permitida)));
Linha 44
pc = pc + 1;
Linha 44
} //FIM opo = = 2
Linha 45
else
Linha 46
if (op = = 3) {
Linha 47
for (int i=0; i<pp; i++){
Linha 48
JOptionPane.showMessageDialog(null,LISTAGEM DE VEICULOS
TIPO PASSEIO: +\n +
Linha 50
PLACA: + p[i].getPlaca () +\n+
Linha 51
MARCA: + p[i].getMarca() +\n+
Linha 52
MODELO: + p[i].getModelo() +\n+
Linha 53
ANO DE FABRICAAO: + p[i].getAno () +\n+
Linha 54
VALOR KM RODADO: + p[i].getValKmRod() +\n+
Linha 55
KM INICIAL: + p[i].getKmInic() +\n+
Linha 56
KM FINAL: + p[i].getKmFin() +\n+
Linha 57
NUMEROS DE PORTAS: + p[i].getNuPortas() +\n);
Linha 58
}
Linha 59
for (int i=0; i<pc; i++){
Linha 60
JOptionPane.showMessageDialog(null,LISTAGEM VEICULOS TIPO
CARGA: +\n +
Linha 61
PLACA: + c[i].getPlaca () +\n+
Linha 62
MARCA: + c[i].getMarca() +\n+
Linha 63
MODELO: + c[i].getModelo() +\n+
Linha 64
ANO DE FABRICAAO: + c[i].getAno () +\n+
Linha 65
VALOR KM RODADO: + c[i].getValKmRod() +\n+
Linha 66
KM INICIAL: + c[i].getKmInic() +\n+
Linha 67
KM FINAL: + c[i].getKmFin() +\n+
Linha 68
CAPACIDADE MAXIMA: + c[i].getCapacidadea() +\n);
Linha 69
}
Linha 70
}//FIM opcao = = 3
Linha 71
else
Linha 72
if (op = = 4) {
Linha 74
String placa=JOptionPane.showInputDialog(Digite a PLACA do veiculo a ser
pesquisado);
Linha 75
for (int i=0; i<pp; i++){
Linha 76
if (p[i].getPlaca().equalsIgnoreCase(placa)){
284
prog_orient_objetos.indb 284
15/12/2011 14:00:59
Linha 77
veculo :
+ p[i].calculaValorLocacao( ));
Linha 78
}
Linha 79
}
Linha 80
for (int i=0; i<pc; i++){
Linha 81
if (c[i].getPlaca().equalsIgnoreCase(placa)){
Linha 82
JOptionPane.showMessageDialog(null,O valor de locao desse
veculo :
+ c[i].calculaValorLocacao( ));
Linha 83
}
Linha 84
} //fim do for
Linha 85
} //fim da opo 4
Linha 86
else
Linha 87
if (op = = 5){
Linha 88
int cot=0;
Linha 89
for (int i=0; i<ppj; i++){
Linha 90
if (p[i].getArCond() = = true)
Linha 91
cont = cont + 1;
Linha 92
}
Linha 93
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 }// fim while
Linha 99 }// fim do mtodo main ( )
Linha 100} // fim da classe
Unidade14
prog_orient_objetos.indb 285
285
15/12/2011 14:00:59
prog_orient_objetos.indb 286
15/12/2011 14:01:00
Unidade14
prog_orient_objetos.indb 287
287
15/12/2011 14:01:00
288
prog_orient_objetos.indb 288
15/12/2011 14:01:00
Unidade14
prog_orient_objetos.indb 289
289
15/12/2011 14:01:00
Sntese
Nesta 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 identificou que existiam
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 especficos de
cada tipo de objeto foram modelagem em classes especficas.
A herana um recurso muito til na orientao a objetos porque
propicia a reutilizao de cdigo, evitando assim o retrabalho de
codificao.
290
prog_orient_objetos.indb 290
15/12/2011 14:01:00
Atividades de autoavaliao
1) Implemente as classes modeladas no sistema da Administradora de
Imveis descrito na atividade da unidade anterior. Desenvolva um
sistema que permita:
Unidade14
prog_orient_objetos.indb 291
291
15/12/2011 14:01:00
Saiba mais
SILVA FILHO, ANTONIO MENDES DA, Introduo A
Programao Orientada A Objetos, Ed. Campus, 2010
292
prog_orient_objetos.indb 292
15/12/2011 14:01:00
prog_orient_objetos.indb 293
15/12/2011 14:01:00
prog_orient_objetos.indb 294
15/12/2011 14:01:00
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 295
15/12/2011 14:01:00
prog_orient_objetos.indb 296
15/12/2011 14:01:00
prog_orient_objetos.indb 297
15/12/2011 14:01:00
prog_orient_objetos.indb 298
15/12/2011 14:01:00
prog_orient_objetos.indb 299
15/12/2011 14:01:01
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]
300
prog_orient_objetos.indb 300
15/12/2011 14:01:01
301
prog_orient_objetos.indb 301
15/12/2011 14:01:01
Unidade 4
1) Desenvolver, em Java, TODOS os exerccios de autoavaliao 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 CachorroQuente:));
PREHOT= Double.parseDouble(JOptionPane.showInputDialog(Digite o preo do CachorroQuente:));
QTDXEGG= Integer.parseInt(JOptionPane.showInputDialog(Digite a quantidade de X-EGG:));
302
prog_orient_objetos.indb 302
15/12/2011 14:01:01
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:);
endereco= JOptionPane.showInputDialog(Digite o endereco:);
sexo= JOptionPane.showInputDialog(Digite o sexo:);
cidade= JOptionPane.showInputDialog(Digite a cidade:);
estado= JOptionPane.showInputDialog(Digite o estado:);
nomedopai= JOptionPane.showInputDialog(Digite o nome do pai:);
nomedamae= JOptionPane.showInputDialog(Digite o nome da me:);
telefonecontato= JOptionPane.showInputDialog(Digite o telefone:);
datadenascimento= JOptionPane.showInputDialog(Digite a data de nascimento:);
grauescolar= JOptionPane.showInputDialog(Digite o grau escolar:);
JOptionPane.showMessageDialog(null,Nome +nome);
JOptionPane.showMessageDialog(null,Endereco +endereco);
JOptionPane.showMessageDialog(null,Sexo +sexo);
JOptionPane.showMessageDialog(null,Cidade +cidade);
JOptionPane.showMessageDialog(null,Estado +estado);
JOptionPane.showMessageDialog(null,Nome do pai +nomedopai);
JOptionPane.showMessageDialog(null,Nome da mae +nomedamae);
JOptionPane.showMessageDialog(null,Telefone de contato +telefonecontato);
JOptionPane.showMessageDialog(null,Data de nascimento +datadenascimento);
JOptionPane.showMessageDialog(null,Grau escolar +grauescolar);
}
}
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:);
303
prog_orient_objetos.indb 303
15/12/2011 14:01:01
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);
}
}
304
prog_orient_objetos.indb 304
15/12/2011 14:01:01
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:));
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 autoavaliao da seo 2
da Unidade 5, da disciplina de Lgica de Programao I (Exerccios com
estrutura condicional)
Resposta:
305
prog_orient_objetos.indb 305
15/12/2011 14:01:01
306
prog_orient_objetos.indb 306
15/12/2011 14:01:01
307
prog_orient_objetos.indb 307
15/12/2011 14:01:01
308
prog_orient_objetos.indb 308
15/12/2011 14:01:01
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 )
soma = soma + num;
else
if (num < 0)
cont=cont + 1;
}
JOptionPane.showMessageDialog(null,Somatorio dos numeros positivos +soma);
JOptionPane.showMessageDialog(null,Total de numeros negativos +cont);
}
}
Algoritmo 3: Entrar com 10 nmeros (positivos ou negativos) e imprimir o maior e o menor)
import javax.swing.*;
public class MaiorMenor{
public static void main(String args[])
{
int num;
int maiornum=0;
int menornum=999999;
for (int i=1;i<=10;i++){
num = Integer.parseInt(JOptionPane.showInputDialog(Digite o numero:));
if ( num > maiornum )
maiornum = num;
if ( num < menornum )
menornum = num;
}
JOptionPane.showMessageDialog(null,O maior numero +maiornum);
JOptionPane.showMessageDialog(null,O menor numero +menornum);
}
}
309
prog_orient_objetos.indb 309
15/12/2011 14:01:01
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:));
sexo= JOptionPane.showInputDialog(Digite o sexo:);
if ((idade > 21) && sexo.equalsIgnoreCase(masculino))
JOptionPane.showMessageDialog(null,Nome +nome);
}
}
}
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);
}
310
prog_orient_objetos.indb 310
15/12/2011 14:01:01
311
prog_orient_objetos.indb 311
15/12/2011 14:01:01
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 ltimo 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.
312
prog_orient_objetos.indb 312
15/12/2011 14:01:01
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
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.
Resposta:
cliente
Objeto Cliente
130x
nome Rita
endereco Rua R
cpf 15215215211
endereo 130x
313
prog_orient_objetos.indb 313
15/12/2011 14:01:01
Unidade 9
A resposta a implementao (programao) do cdigo da unidade.
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.
314
prog_orient_objetos.indb 314
15/12/2011 14:01:01
Resposta:
import javax.swing.*;
public class UsaCalculos{
public static void main(String args[])
{
/*estou chamando o metodo static potencia precedido do nome da classe onde ele est e estou
passando dois parametros 2 - base e 3 expoente. O valor de retorno desse metodo ser impresso na
tela*/
System.out.println(Calculos.potenca(2,3));
//idem para o metodo static fatorial
System.out.println(Calculos.fatorial(5));
}
}
Unidade 11
1) Resposta:
315
prog_orient_objetos.indb 315
15/12/2011 14:01:01
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)
{
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()
316
prog_orient_objetos.indb 316
15/12/2011 14:01:01
{
return nome;
}
public String getEnd()
{
return end;
}
public double getSalario()
{
return salario;
}
public Cep getCep()
{
return cep;
}
}
prog_orient_objetos.indb 317
15/12/2011 14:01:02
for (int j=0; j<3; j++)
{
if (digCep==(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.
Resposta:
//Implementao da classe Professor
public class Professor{
private String nome;
private String titumax;
private int ch;
public Professor ( ){
nome= ;
titumax= ;
ch= 0;
}
318
prog_orient_objetos.indb 318
15/12/2011 14:01:02
319
prog_orient_objetos.indb 319
15/12/2011 14:01:02
320
prog_orient_objetos.indb 320
15/12/2011 14:01:02
}
//opcao 2 - entra com o nome da disciplina e imprime o nome do professor que ministra
disciplina
String nomedisc=JOptionPane.showInputDialog(Digite o nome da disciplina);
for (int i=0; i<3; i++)
{
if (nomedisc.equalsIgnoreCase(d[i].getnomedisc())) {
JOptionPane.showMessageDialog(null, Nome do professor: + d[i].getProf().
getnome());
break;
}
}
//opcao 3 - entra com o nome da titulacao do professor e imprime o nome de todos os
profes com essa titulaao
String titulacao=JOptionPane.showInputDialog(Digite a titulao do professor);
for (int i=0; i<5; i++)
{
if (titulacao.equalsIgnoreCase(p[i].gettitumax())) {
JOptionPane.showMessageDialog(null, Nome do professor: + p[i].
getnome());
}
}
System.exit(0);
}
}
321
prog_orient_objetos.indb 321
15/12/2011 14:01:02
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()
322
prog_orient_objetos.indb 322
15/12/2011 14:01:02
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
323
prog_orient_objetos.indb 323
15/12/2011 14:01:02
324
prog_orient_objetos.indb 324
15/12/2011 14:01:02
Biblioteca Virtual
Veja a seguir os servios oferecidos pela Biblioteca Virtual aos
alunos a distncia:
Emprstimo de livros
<www.unisul.br/emprestimos>
prog_orient_objetos.indb 325
15/12/2011 14:01:02
prog_orient_objetos.indb 326
15/12/2011 14:01:02