Вы находитесь на странице: 1из 306

Universidade do Sul de Santa Catarina

Programao Orientada a Objeto


Disciplina na modalidade a distncia

4 edio revista e atualizada

Palhoa
UnisulVirtual
2007

prog_orient_objetos.indb 1

2/7/2007 16:43:35

Crditos
Unisul - Universidade do Sul de Santa Catarina
UnisulVirtual - Educao Superior a Distncia
Campus UnisulVirtual
Avenida dos Lagos, 41
Cidade Universitria Pedra Branca
Palhoa SC - 88137-100
Fone/fax: (48) 3279-1242 e
3279-1271
E-mail: cursovirtual@unisul.br
Site: www.virtual.unisul.br
Reitor Unisul
Gerson Luiz Joner da Silveira
Vice-Reitor e Pr-Reitor
Acadmico
Sebastio Salsio Heerdt
Chefe de Gabinete da Reitoria
Fabian Martins de Castro
Pr-Reitor Administrativo
Marcus Vincius Antoles da Silva
Ferreira
Campus Sul
Diretor: Valter Alves Schmitz Neto
Diretora adjunta: Alexandra
Orsoni
Campus Norte
Diretor: Ailton Nazareno Soares
Diretora adjunta: Cibele Schuelter
Campus UnisulVirtual
Diretor: Joo Vianney
Diretora adjunta: Jucimara
Roesler

Equipe UnisulVirtual
Administrao
Renato Andr Luz
Valmir Vencio Incio
Avaliao Institucional
Dnia Falco de Bittencourt
Biblioteca
Soraya Arruda Waltrick
Capacitao e Apoio
Pedaggico Tutoria
Angelita Maral Flores
(Coordenadora)
Caroline Batista
Enzo de Oliveira Moreira
Patrcia Meneghel
Vanessa Francine Corra

prog_orient_objetos.indb 2

Coordenao dos Cursos


Adriano Srgio da Cunha
Alosio Jos Rodrigues
Ana Luisa Mlbert
Ana Paula Reusing Pacheco
Charles Cesconetto
Diva Marlia Flemming
Fabiano Ceretta
Itamar Pedro Bevilaqua
Janete Elza Felisbino
Jucimara Roesler
Lauro Jos Ballock
Lvia da Cruz (Auxiliar)
Luiz Guilherme Buchmann
Figueiredo
Luiz Otvio Botelho Lento
Marcelo Cavalcanti
Maria da Graa Poyer
Maria de Ftima Martins
(Auxiliar)
Mauro Faccioni Filho
Michelle D. Durieux Lopes Destri
Moacir Fogaa
Moacir Heerdt
Nlio Herzmann
Onei Tadeu Dutra
Patrcia Alberton
Raulino Jac Brning
Rodrigo Nunes Lunardelli
Simone Andra de Castilho
(Auxiliar)
Criao e Reconhecimento de
Cursos
Diane Dal Mago
Vanderlei Brasil
Desenho Educacional
Design Instrucional
Daniela Erani Monteiro Will
(Coordenadora)
Carmen Maria Cipriani Pandini
Carolina Hoeller da Silva Boeing
Flvia Lumi Matuzawa
Karla Leonora Dahse Nunes
Leandro Kingeski Pacheco
Ligia Maria Soufen Tumolo
Mrcia Loch
Viviane Bastos
Viviani Poyer
Acessibilidade
Vanessa de Andrade Manoel
Avaliao da Aprendizagem
Mrcia Loch (Coordenadora)
Cristina Klipp de Oliveira
Douglas Fabiani da Cruz
Silvana Denise Guimares

Design Grco
Cristiano Neri Gonalves Ribeiro
(Coordenador)
Adriana Ferreira dos Santos
Alex Sandro Xavier
Evandro Guedes Machado
Fernando Roberto Dias
Zimmermann
Higor Ghisi Luciano
Pedro Paulo Alves Teixeira
Rafael Pessi
Vilson Martins Filho
Disciplinas a Distncia
Tade-Ane de Amorim
Ctia Melissa Rodrigues
Gerncia Acadmica
Patrcia Alberton
Gerncia de Ensino
Ana Paula Reusing Pacheco
Logstica de Encontros
Presenciais
Mrcia Luz de Oliveira
(Coordenadora)
Aracelli Araldi
Graciele Marins Lindenmayr
Letcia Cristina Barbosa
Knia Alexandra Costa Hermann
Priscila Santos Alves
Formatura e Eventos
Jackson Schuelter Wiggers
Logstica de Materiais
Jeferson Cassiano Almeida da
Costa (Coordenador)
Jos Carlos Teixeira
Eduardo Kraus
Monitoria e Suporte
Rafael da Cunha Lara
(Coordenador)
Adriana Silveira
Andria Drewes
Caroline Mendona
Cristiano Dalazen
Dyego Rachadel
Edison Rodrigo Valim
Francielle Arruda
Gabriela Malinverni Barbieri
Jonatas Collao de Souza
Josiane Conceio Leal
Maria Eugnia Ferreira Celeghin
Rachel Lopes C. Pinto
Vincius Maykot Seram

Produo Industrial e Suporte


Arthur Emmanuel F. Silveira
(Coordenador)
Francisco Asp
Relacionamento com o
Mercado
Walter Flix Cardoso Jnior
Secretaria de Ensino a
Distncia
Karine Augusta Zanoni
Albuquerque
(Secretria de ensino)
Ana Paula Pereira
Andra Luci Mandira
Carla Cristina Sbardella
Deise Marcelo Antunes
Djeime Sammer Bortolotti
Franciele da Silva Bruchado
Grasiela Martins
James Marcel Silva Ribeiro
Jennier Camargo
Lamuni Souza
Lauana de Lima Bezerra
Liana Pamplona
Marcelo Jos Soares
Marcos Alcides Medeiros Junior
Maria Isabel Aragon
Olavo Lajs
Priscilla Geovana Pagani
Rosngela Mara Siegel
Silvana Henrique Silva
Vanilda Liordina Heerdt
Vilmar Isaurino Vidal
Secretria Executiva
Viviane Schalata Martins
Tecnologia
Osmar de Oliveira Braz Jnior
(Coordenador)
Jeerson Amorin Oliveira
Marcelo Neri da Silva
Ricardo Alexandre Bianchini

2/7/2007 16:44:14

Apresentao
Parabns, voc est recebendo o livro didtico da disciplina de
Programao orientada a objeto.
Este material didtico foi construdo especialmente para este
curso, levando em considerao o seu perl e as necessidades
da sua formao. Como os materiais estaro, a cada nova
verso, recebendo melhorias, pedimos que voc encaminhe suas
sugestes sempre que achar oportuno via professor tutor ou
monitor.
Recomendamos, antes de voc comear os seus estudos, que
verique as datas-chave e elabore o seu plano de estudo pessoal,
garantindo assim a boa produtividade no curso.
Lembre: voc no est s nos seus estudos, conte com o Sistema
Tutorial da UnisulVirtual sempre que precisar de ajuda ou
alguma orientao.
Desejamos que voc tenha um excelente xito neste curso!
Equipe UnisulVirtual

prog_orient_objetos.indb 3

2/7/2007 16:44:14

prog_orient_objetos.indb 4

2/7/2007 16:44:14

Andra Bordin

Programao Orientada a Objeto


Livro didtico

Design instrucional
Flavia Lumi Matuzawa
Karla Leonora Dahse Nunes

4 edio revista e atualizada

Palhoa
UnisulVirtual
2007

prog_orient_objetos.indb 5

2/7/2007 16:44:14

Copyright UnisulVirtual 2007


Nenhuma parte desta publicao pode ser reproduzida por qualquer meio sem a prvia autorizao desta instituio.

Edio Livro Didtico


Professor Conteudista
Andra Bordin

Design Instrucional
Karla Leonora Dahse Nunes, Flvia Lumi Matuzawa
Leandro Kingeski Pacheco (4. ed. rev. e atual.)
(

ISBN 978-85-7817-001-1
Projeto Grfico e Capa
Equipe UnisulVirtual
Diagramao
Rafael Pessi
Reviso Ortogrfica
B2B

005.117
B72
Bordin, Andra
Programao orientada a objeto : livro didtico / Andra Bordin ; design
instr uciona l F lav ia Lumi Mat uzawa, K a rla Leonora Da hse Nunes, [L eandro
Kingeski Pacheco]. 4. ed. rev. e atual. Palhoa : UnisulVirtual, 2007.
306 p. : il. ; 28 cm.
Inclui bibliografia.
ISBN 978-85-7817-001-1
1. Programao orientada a objetos (Computao). I. Nunes, Karla Leonora
Dahse. II. Matuzawa, Flavia Lumi. III. Pacheco, Leandro Kingeski. IV. Ttulo.
Ficha catalogrfica elaborada pela Biblioteca Universitria da Unisu

Sumrio
Apresentao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 03
Palavras da professora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 09
Plano de estudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
UNIDADE
UNIDADE
UNIDADE
UNIDADE
UNIDADE
UNIDADE
UNIDADE
UNIDADE
UNIDADE
UNIDADE
UNIDADE
UNIDADE
UNIDADE
UNIDADE

1 Conhecendo a Linguagem de Programao Java . . . . . . . . . . . . . . . . . . . 15


2 Preparando o ambiente para programar em Java . . . . . . . . . . . . . . . . . . . 33
3 Sintaxe bsica da linguagem Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4 Implementando os primeiros programas em Java . . . . . . . . . . . . . . . . . . 67
5 Implementando programas em Java com controle de fluxo . . . . . . . . . 83
6 Desenvolvendo programas modularizados em Java . . . . . . . . . . . . . . . . 99
7 Introduo Programao Orientada a Objeto (POO) . . . . . . . . . . . . . . 111
8 Conceitos de Orientao a Objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
9 Aplicando os conceitos de OO atravs de exemplos prticos . . . . . . . 159
10 Modificadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
11 Objetos como atributos de outros objetos . . . . . . . . . . . . . . . . . . . . . . . 205
12 Associao na prtica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
13 Herana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
14 Herana na prtica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259

Para concluir o estudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275


Referncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Sobre a professora conteudista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Respostas e comentrios das atividades de auto-avaliao . . . . . . . . . . . . . . . . . . . . . . . . 281

prog_orient_objetos.indb 7

2/7/2007 16:44:15

prog_orient_objetos.indb 8

2/7/2007 16:44:15

Palavras da professora
Ol!
Voc est iniciando a disciplina de Programao
Orientada a Objetos. Nessa disciplina, primeiramente,
ser apresentada a voc uma linguagem de programao.
O nome da linguagem Java. Atravs dessa linguagem
de programao, voc poder desenvolver, no
computador, os algoritmos que elaborou nas disciplinas
de Lgica de Programao I e II. Voc conseguir ver
seus programas funcionando, poder test-los e modiclos, j que ter o conhecimento de lgica, e, tambm, de
uma linguagem de programao.
Para isso, as unidades iniciais desse livro sero dedicadas
a passar todos os detalhes de sintaxe dessa linguagem.
Ser necessria muita ateno da sua parte, pois o
desenvolvimento de instrues de um programa em
uma linguagem de programao uma tarefa muito
detalhada. Seu programa pode no funcionar porque
voc esqueceu de programar, por exemplo, um ponto e
vrgula.
Mas, essa ateno ser recompensada com a sua
satisfao ao ver o seu programa funcionar. uma
sensao muito boa ver o primeiro programa em
funcionamento.
Conhecer uma linguagem de programao um prrequisito importante para que voc possa aprender e
colocar em prtica os conceitos da programao orientada
a objetos, que o tpico principal desse livro e ser
tratado na maior parte das unidades.

prog_orient_objetos.indb 9

2/7/2007 16:44:15

Universidade do Sul de Santa Catarina

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.
muito importante que voc entenda os conceitos do paradigma
orientado a objetos, pois, a maioria dos sistemas, atualmente,
desenvolvida dentro dele.
Voc no estar sozinho nessa caminhada, o livro e o professor
tutor iro sanar suas dvidas.
Boa Sorte!!

10

prog_orient_objetos.indb 10

2/7/2007 16:44:15

Plano de estudo
O plano de estudos visa a orient-lo/a no
desenvolvimento da Disciplina. Nele, voc encontrar
elementos que esclarecero o contexto da Disciplina e
sugeriro formas de organizar o seu tempo de estudos.
O processo de ensino e aprendizagem na UnisulVirtual
leva em conta instrumentos que se articulam e se
complementam. Assim, a construo de competncias
se d sobre a articulao de metodologias e por meio das
diversas formas de ao/mediao.
So elementos desse processo:


o livro didtico;

o Espao UnisulVirtual de Aprendizagem - EVA;

as atividades de avaliao (complementares, a


distncia e presenciais);

o Sistema Tutorial.

Ementa
Introduo aos conceitos de programao orientada
a objetos. Abstrao e modelo conceitual. Modelo de
Objetos. Classes, atributos, mtodos, mensagens/aes.
Conceitos e Tcnicas de programao. Desenvolvimento
de sistemas com Classes. Bibliotecas, reusabilidade.
Aplicaes em ambiente WEB.

Carga horria
120 horas 8 crditos.

prog_orient_objetos.indb 11

2/7/2007 16:44:15

Universidade do Sul de Santa Catarina

Objetivos da disciplina


Compreender as bases da Abstrao.

Aplicar a Modularidade e Componibilidade para resolver


um problema.

Organizar o modelo usando Hierarquia.

Implementao dos princpios da Orientao a


Objeto (Objeto, Encapsulamento, Classe, Atributo,
Operao, Relacionamentos, Herana, Generalizao e
Polimorsmo).

Contedo programtico/objetivos
Os objetivos de cada unidade denem o conjunto de
conhecimentos que voc dever deter para o desenvolvimento
de habilidades e competncias necessrias sua formao. Fique
atento pgina inicial de cada unidade para saber qual o
objetivo a ser alcanado.

Agenda de atividades/ Cronograma




Verique com ateno o EVA, organize-se para acessar


periodicamente o espao da Disciplina. O sucesso nos
seus estudos depende da priorizao do tempo para a
leitura; da realizao de anlises e snteses do contedo; e
da interao com os seus colegas e tutor.

No perca os prazos das atividades. Registre no espao


a seguir as datas, com base no cronograma da disciplina
disponibilizado no EVA.

Use o quadro para agendar e programar as atividades


relativas ao desenvolvimento da Disciplina.

12

prog_orient_objetos.indb 12

2/7/2007 16:44:15

Programao Orientada a Objeto

Atividades obrigatrias

Demais atividades (registro pessoal)

13

prog_orient_objetos.indb 13

2/7/2007 16:44:15

prog_orient_objetos.indb 14

2/7/2007 16:44:16

UNIDADE 1

Conhecendo a Linguagem de
Programao Java

Objetivos de aprendizagem


Entender o que uma linguagem de programao.

Conhecer a histria e caractersticas da linguagem.

Identificar os tipos de aplicaes Java.

Sees de estudo
Seo 1 Linguagens de Programao
Seo 2 Histria da linguagem Java
Seo 3 Linguagem Java
Seo 4 Plataforma Java
Seo 5 Tipos de Aplicaes Java

prog_orient_objetos.indb 15

2/7/2007 16:44:16

Universidade do Sul de Santa Catarina

Para incio de conversa


Vamos comear a disciplina de Orientao a Objetos revisando o
que uma linguagem de programao, e conhecendo a histria e
caractersticas da linguagem de programao Java. Voc tambm
aprender vrios conceitos relacionados a linguagem Java nas
5 unidades seguintes. Esse conhecimento ser fundamental
para o entendimento e aplicao dos conceitos do paradigma de
programao orientado a objetos, que o que vamos tratar nessa
disciplina. Vamos comear?
Bom estudo!

SEO 1 - Linguagens de Programao


Uma linguagem de programao um mtodo padronizado
para expressar instrues para um computador. um conjunto
de regras usadas para denir um programa de computador.
Uma linguagem permite que um programador especique
precisamente sobre quais dados um computador vai atuar, como
estes dados sero armazenados ou transmitidos e quais aes
devem ser tomadas sob vrias circunstncias.

Programar diretamente em
cdigo de mquina costuma ser
exaustivamente difcil, pois requer
o conhecimento dessa seqncia
de nmeros correspondente a uma
seqncia de instrues. Ex. decorar
seqncias como 1011101110110
1101110110011001010 para cada
instruo do processador.

Um conjunto de palavras, composto de acordo com essas regras,


constitui o cdigo fonte de um programa.
Cdigo fonte o conjunto de palavras escritas de
forma ordenada, contendo instrues em uma das
linguagens de programao existentes no mercado,
de maneira lgica.

Esse cdigo fonte , depois, traduzido para cdigo de mquina,


que executado pelo processador.

16

prog_orient_objetos.indb 16

2/7/2007 16:44:16

Programao Orientada a Objeto

Cdigo de mquina consiste de uma seqncia de


nmeros (0 e 1) que significam uma seqncia de
instrues que so reconhecidas e sero executadas
pelo processador do computador.

Linguagens de programao so classicadas em alto nvel e


baixo nvel.
As linguagens de alto nvel se caracterizam por possurem
instrues ou comando expressos sintaticamente em ingls,
ou seja, mais prximo de uma linguagem humana (por isso,
alto nvel). Ao se utilizar uma linguagem de programao de
alto nvel para desenvolver um programa, est se adquirindo
produtividade, pois ela permite expressar as
intenes do programador mais facilmente do que
quando comparado com o uso de uma linguagem
que um computador entende nativamente (cdigo
de mquina). Existem muitas linguagens de
programao de alto nvel: Java, C, Pascal, Object
Pascal, Cobol, etc.
As linguagens de baixo nvel so aquelas cujas
instrues ou comandos se aproximam bastante da
linguagem ou cdigo de mquina. Normalmente,
cada instruo nesta linguagem representa uma instruo
executada pelo microcomputador. A vantagem deste tipo de
linguagem a grande velocidade de execuo dos programas e o
tamanho dos mesmos que so mais compactos. O exemplo mais
conhecido a linguagem Assembly.
Uma linguagem de programao pode ser convertida
em cdigo de mquina por compilao ou
interpretao.

Se o mtodo utilizado traduz todo o cdigo do programa


(instrues que compem o programa) para cdigo de mquina
e s depois o programa pode ser executado (ou rodado), diz-se
que o programa foi compilado e que o mecanismo utilizado para
a traduo um compilador (que tambm um programa). A
verso compilada do programa tipicamente armazenada em
um arquivo.exe (com extenso .exe) de forma que o programa

Unidade 1

prog_orient_objetos.indb 17

17

2/7/2007 16:44:16

Universidade do Sul de Santa Catarina

pode ser executado um nmero indenido de vezes sem que seja


necessria nova compilao. Linguagens como Pascal e C so
compiladas.
Se o cdigo do programa traduzido medida em que vai sendo
executado, isso acontece nas linguagens Javascript, Python ou
Perl, em um processo de traduo de trechos seguidos de sua
execuo imediata, ento, diz-se que o programa foi interpretado
e que o mecanismo utilizado para a traduo um interpretador.
Programas interpretados so geralmente mais lentos do que os
compilados.

SEO 2 - Histria da linguagem Java


Java ao mesmo tempo uma linguagem de
programao e uma plataforma. Voc entender
essa diferena mais frente, estudando as prximas
unidades.

Site principal da linguagem


Java: http://java.sun.com

Ela desenvolvida e mantida pela Sun e foi planejada


inicialmente para ser usada no desenvolvimento de programas
que eram executados por processadores de eletrodomsticos.
Os projetistas de sistemas de controle desses processadores,
descontentes com linguagens convencionais de programao,
como C, propuseram a criao de uma linguagem especca para
uso em processadores de aparelhos domsticos, como geladeiras
e torradeiras. Todo o descontentamento dos projetistas residia no
fato de que programas escritos e compilados em C so fortemente
dependentes da plataforma para a qual foram desenvolvidos.
Como o ramo de eletro-eletrnicos est em constante evoluo,
para cada novo liquidicador lanado no mercado com um
novo processador embutido, um novo programa deveria ser
escrito e compilado para funcionar no novo processador, ou
ento, na melhor das hipteses, o antigo programa poderia
ser reaproveitado, mas teria de ser re-compilado para o novo
processador.

18

prog_orient_objetos.indb 18

2/7/2007 16:44:16

Programao Orientada a Objeto

Os projetistas de software de eletrodomsticos desejavam que


o software por eles fabricado fosse seguro e robusto, capaz de
funcionar em um ambiente to adverso quanto uma cozinha. E
que fosse convel tambm, pois quando ocorre alguma falha
em um aparelho eletro-eletrnico, peas mecnicas so trocadas,
gerando um custo a mais para o fabricante.
No incio de 1990, Patrick Naughton, Sun Fellow e James
Gosling, comearam a denir as bases para o projeto de
uma nova linguagem de programao, apropriada para
eletrodomsticos, sem os problemas j to conhecidos de
linguagens tradicionais como C e C++. O consumidor era o
centro do projeto e o objetivo era construir um ambiente de
pequeno porte e integrar esse ambiente em uma nova gerao de
mquinas para pessoas comuns.
A especicao da linguagem terminou em agosto de 1991 e
recebeu o nome de Oak [Carvalho]. Por problemas de copyright
(j existia uma linguagem chamada Oak) o nome foi mudado em
1995 para Java, em homenagem ilha de Java, de onde vinha o
caf consumido pela equipe da Sun.
Em 1992, Oak foi utilizada pela primeira vez em um projeto
chamado Projeto Green, que tinha por propsito desenvolver uma
nova interface de usurio para controlar os aparelhos de uma
casa. Tal interface consistia em uma representao animada da
casa, que era exibida em um computador manual chamado star
seven, bisav dos palmtops de hoje e que tinha uma tela sensvel
ao toque que permitia a manipulao dos eletrodomsticos. Essa
interface foi totalmente escrita em Oak e evoluiu de um projeto
de interface para redes de televiso pay-per-view. Contudo, o
padro proposto por esses dois projetos, no vingou.
Em meados de 1993, pode-se dizer que Oak ia mal das pernas,
ou seja, os projetos propostos no eram economicamente viveis
e no se via um grande futuro no desenvolvimento de aparelhos
que suportassem essa nova linguagem.
Justamente nessa poca, a World Wide Web estava em seu
nascimento, trazendo um novo horizonte para a Internet.

Unidade 1

prog_orient_objetos.indb 19

importante lembrar que


a Internet j existia muito
antes do surgimento da
WWW. Esta nada mais
que um conjunto de
protocolos que permite
um acesso mais amigvel
aos recursos disponveis
na Internet. Dentre esses
protocolos, por exemplo,
o mais conhecido o
de transferncia de
hipertexto [http].

19

2/7/2007 16:44:16

Universidade do Sul de Santa Catarina

Com o lanamento do primeiro browser do mercado, o Mosaic,


ocorreu equipe de desenvolvimento da Sun, que uma linguagem
independente de plataforma, segura e robusta como a que
estava sendo desenvolvida para eletrodomsticos, caberia como
uma luva para uso na Internet, uma vez que um aplicativo
gerado nessa linguagem poderia rodar nos diversos tipos de
computadores ligados na Internet. Ou seja, poderia rodar em
qualquer computador com qualquer sistema operacional, por
exemplo, PCs rodando OS/2, estaes RISC rodando AIX Unix
ou SparcStations rodando Solaris.
23 de maio de 1995
a data do lanamento
da linguagem Java no
mundo.

Com o novo nimo trazido pelo advento da WWW, a equipe


da Sun desenvolveu um browser totalmente escrito em Java.
Seu desenvolvimento terminou no incio de 1995 e ele foi
denominado de HotJava.
O grande diferencial de HotJava para outros browsers
da poca (como o Mosaic e o Netscape Navigator)
que ele permitia a insero de programas escritos em
Java dentro de pginas HTML comuns.

HotJava como browser no teve sucesso comercial, mas abriu


os olhos dos desenvolvedores para um fato muito importante: as
pginas HTML estariam fadadas a serem estticas e sem aes
embutidas em si, no houvesse uma linguagem padro pela qual
fossem escritos programas que pudessem ser embutidos nas
pginas Web. HotJava demonstrou que isso era possvel (ou seja,
incluir um programa, no caso escrito em Java, em uma pgina
HTML rodando em um browser preparado para dar suporte
execuo do programa, no caso o prprio HotJava).
O grande avano de Java veio logo a seguir, quando a
Netscape anunciou que sua prxima verso do browser
Navigator iria dar suporte a aplicativos Java embutidos
em documentos HTML. Em seguida, a Microsoft
anunciou o mesmo para o seu Internet Explorer. Aps
isso, Java estourou no mundo e comeou a ser utilizada
tambm fora da internet no desenvolvimento de
softwares stand-alone.

20

prog_orient_objetos.indb 20

2/7/2007 16:44:17

Programao Orientada a Objeto

E como dito anteriormente Java ao mesmo tempo uma


linguagem de programao e uma plataforma, conforme voc
ver a seguir.

SEO 3 Linguagem de programao Java


Enquanto linguagem de programao, Java considerada uma
linguagem de alto nvel que possui muitas caractersticas.
Abordaremos algumas delas nessa seo. Eis algumas
caractersticas da linguagem Java:


simplicidade;

interpretada;

orientada a objetos;

multiplataforma;

segura.

Voc j aprendeu o que


uma linguagem de
programao de alto nvel
na Seo 1 - Linguagens de
Programao.

Para saber um pouco mais sobre linguagem de


programao, consulte os seguintes sites:
http://www.inf.ufrgs.br/tools/java/introjava.pdf
http://java.sun.com/docs/white/langenv/

Simplicidade
Java uma linguagem simples e de fcil aprendizado ou
migrao, pois possui um reduzido nmero de construes.
Contm uma biblioteca (API Java) de programas (conhecidos em
Java como classes) que fornecem grande parte da funcionalidade
bsica da linguagem, incluindo rotinas de acesso rede e criao
de interface grca.

Unidade 1

prog_orient_objetos.indb 21

Application Programming
Interface ou Interface
de Programao de
Aplicativos.

21

2/7/2007 16:44:17

Universidade do Sul de Santa Catarina

Orientada a Objetos
A partir da unidade 7 voc
aprender os conceitos do
paradigma orientado 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.
Quando se utiliza uma linguagem compilada, aps escrever o
cdigo fonte (que contm instrues numa linguagem de alto
nvel), necessrio que o mesmo seja traduzido (compilado)
para cdigo binrio (executvel). Quem faz essa traduo um
software chamado compilador.
Voc j leu sobre isso na seo 1
- Linguagens de Programao.

As linguagens compiladas tm a vantagem de produzir cdigo


executvel de alta performance (rpido), o qual est ajustado
para o funcionamento em um tipo especco de processador ou
sistema operacional. Programas compilados, chamados de cdigo
binrio, s podem rodar no tipo de computador para o qual
foram compilados, uma vez que esses programas consistem, na
realidade, em instrues em linguagem de mquina, entendidas e
executadas pelo microprocessador.
Nas linguagens interpretadas, o cdigo fonte interpretado
por um programa chamado interpretador que percorre o cdigo
fonte e executa as aes indicadas pelas instrues no arquivo. O
interpretador , na realidade, o nico aplicativo que est sendo
executado. Um benefcio das linguagens interpretadas reside
no fato dos programas interpretados poderem rodar em uma
variedade de plataformas diferentes, pois estes s existem em
cdigo fonte.
A linguagem Java tanto compilada como
interpretada.

Aps escrever um programa em Java, seu cdigo fonte deve ser


compilado, gerando um arquivo binrio (com cdigo binrio).
22

prog_orient_objetos.indb 22

2/7/2007 16:44:17

Programao Orientada a Objeto

Esse arquivo no pode ser executado porque ele no contm


instrues que so entendidas diretamente pelos processadores
disponveis no mercado atualmente. Os programas Java so
compilados em um formato intermedirio chamado bytecode.
Esse bytecode s pode ser executado em qualquer plataforma ou
sistema operacional atravs de um interpretador Java (mquina
virtual) especco de uma plataforma ou sistema operacional.

Bytecode o termo
dado ao cdigo binrio
(executvel) gerado pela
compilao de um cdigo
fonte em Java.

Multiplataforma
A caracterstica de multiplataforma da linguagem Java indica
que um programa desenvolvido nela pode ser executado em
plataformas de hardware e sistemas operacionais diferentes.
Vamos explicar com detalhes o que isso signica.
Na maioria das linguagens de programao como C e Pascal, o
cdigo fonte de um programa compilado para uma plataforma
de hardware e sistema operacional especcos.

Cdigo fonte em
Pascal (Soma.pas)

Compilao

Cdigo binrio (executvel)


para determinado S.O.
(Soma.exe)

Isso faz com que o cdigo binrio (executvel) do programa seja


executado somente por computadores que tenham esse sistema
operacional (S.O).


Cdigo fonte compilado para o S.O. Windows ir


gerar um cdigo executvel que ser executado
somente pelo sistema operacional Windows.

Cdigo fonte compilado para o S.O. Linux ir gerar


um cdigo executvel que ser executado somente
pelo sistema operacional Linux.

Cdigo executvel
para Windows

Cdigo executvel
para Linux

S.O. Windows

S.O. Linux

Unidade 1

prog_orient_objetos.indb 23

Cdigo executvel e cdigo


binrio so sinnimos.

23

2/7/2007 16:44:17

Universidade do Sul de Santa Catarina

Bibliotecas so rotinas, pequenos


programas prontos.

Para que o mesmo programa seja executado nesses dois sistemas


operacionais necessrio compil-lo para Windows e para Linux.
Porm, na maioria das vezes o programa utiliza bibliotecas que
so dependentes de um determinado sistema operacional.
Ao programar a interface grfica de um programa
(telas) deve-se levar em conta que a interface grfica
do Windows bem diferente da do Linux. Nesse caso,
no basta apenas compilar o programa novamente,
necessrio alterar o cdigo fonte para o uso de rotinas
que so suportadas pelo s.o. Linux, ou seja, reescrever
pedaos do programa para que ele seja suportado por
outro S.O.

Java evita que isso acontea porque utiliza o conceito de mquina


virtual, tambm conhecida como JVM - Java Virtual Machine.
A mquina virtual pode ser entendida como uma camada extra
entre o sistema operacional e o programa, responsvel por
traduzir o que o seu programa deseja fazer para a linguagem do
sistema operacional no qual ela est rodando no momento.
A mquina virtual executa as instrues que esto no bytecode.
Esse bytecode gerado pelo processo de compilao pode ser
executado pela mquina virtual instalada em computadores com
plataformas e sistemas operacionais diferentes. Isso caracteriza
um slogan muito utilizado pela Sun: Write once, Run anywhere
(Escreva o cdigo fonte uma vez e rode em qualquer lugar).
A figura abaixo ilustra esse processo:

24

prog_orient_objetos.indb 24

2/7/2007 16:44:19

Programao Orientada a Objeto

O programa em Java escrito e compilado uma vez. Isso gera o


bytecode que ser interpretado por mquinas virtuais instaladas
em sistemas operacionais diferentes.

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.

SEO 4 Plataforma Java


Para entender Java enquanto plataforma, preciso entender o
conceito de plataforma.
Uma plataforma o ambiente de hardware e
software no qual um programa roda.

Exemplos de plataformas populares so: Windows 2000, Linux,


Solaris, e MacOS. A maioria das plataformas podem ser descritas
como uma combinao de sistema de operacional e hardware. A
plataforma Java difere das outras plataformas no sentido de que
uma plataforma baseada em software que roda em cima de outras
plataformas baseadas em hardware.

Unidade 1

prog_orient_objetos.indb 25

25

2/7/2007 16:44:19

Universidade do Sul de Santa Catarina

A plataforma Java tem dois componentes:

Voc j aprendeu um pouco sobre


o que uma JVM no tpico
Multiplataforma da Seo 3.

Mquina virtual - Java Virtual Machine ( JVM )

API Java - Java Application Programming Interface

A mquina virtual nada mais do que um software que


instalado sobre uma plataforma de hardware-sistema operacional
e necessria para interpretar os bytecodes gerados pela
compilao de um cdigo fonte em Java.
A API Java uma grande coleo de componentes de software
(programas-classes prontas) que podem ser utilizados no
desenvolvimento de programas na linguagem Java, como, por
exemplo, componentes que permitem a construo de interfaces
grcas (telas) de programas. Esses componentes de software, na
realidade, so conjuntos de classes e interfaces organizadas em
pacotes (package).

Fique atento, pois voltaremos a falar desses conceitos


nas unidades seguintes!

A seguinte gura mostra um programa rodando sob a plataforma


Java. Como a gura mostra, a API Java e mquina virtual isolam
o programa da plataforma de hardware.

26

prog_orient_objetos.indb 26

2/7/2007 16:44:20

Programao Orientada a Objeto

SEO 5 Tipos de aplicaes Java


Tipos de aplicao

Executa diretamente sobre um S.O.

Executa dentro de um container

Aplicao console

Applet

Aplicao janela

Servlet / JSP

Os programas ou aplicaes escritos em Java podem ser de dois tipos:


1. Aqueles que so executados diretamente pelo sistema
operacional.
2. Aqueles que so executados atravs de outro programa
chamado genericamente de container.

Executados diretamente pelo sistema operacional


Aplicao console so aplicaes Java que so
executadas a partir da JVM instalada no sistema
operacional e o seu resultado mostrado na tela do
shell (por exemplo, janela do MS-DOS), sem recursos
grficos.

Na gura abaixo, temos um exemplo simples do cdigo fonte


desse tipo de aplicao. Esse cdigo deve ser armazenado em
um arquivo de mesmo nome da classe que ele dene, seguido da
extenso .java.
Arquivo MeuApplication.java
public class MeuApplication {
public static void main (String[] args) {
System.out.println( Este meu application! );
}
}

Unidade 1

prog_orient_objetos.indb 27

27

2/7/2007 16:44:20

Universidade do Sul de Santa Catarina

Aplicao janela so aplicaes Java que so


executadas a partir da JVM instalada no sistema
operacional, porm, utiliza recursos grficos como
janelas, etc.

Executados atravs de um container


Esse tipo de programa precisa de um outro software para que sua
execuo seja realizada.
Applet so aplicaes Java que precisam de um
web browser (navegador web, por exemplo, Internet
Explorer) para serem executados. Isso quer dizer que
applets so aplicaes voltadas para o ambiente
Internet/Intranet e que so transportadas pela rede
junto com hiperdocumentos HTML.

Para executar um applet dentro de


um browser, a classe que representa
o applet deve ser chamada dentro
de um arquivo HTML. Um applet
aparece numa pgina web semelhante
a uma imagem, mas ao contrrio das
imagens um applet pode ser interativo
capturando entradas do usurio,
respondendo a elas e apresentando contedo mutvel.
Eles podem ser usados para construir animaes, grcos, jogos,
menus de navegao, etc.
Ao desenvolver um applet pode-se aproveitar recursos extras
oriundos do prprio browser (uma barra de status, por exemplo).

28

prog_orient_objetos.indb 28

2/7/2007 16:44:20

Programao Orientada a Objeto

Servlet/JSP: Um servlet um tipo de programa


Java que pode, por exemplo, receber dados de um
formulrio HTML por meio de uma requisio HTTP,
processar os dados, atualizar a base de dados de uma
empresa e gerar alguma resposta dinamicamente
para o cliente que fez a requisio. Ou seja, atravs
do desenvolvimento de servlets que podemos
desenvolver uma APLICAO WEB DINMICA que
interaja com o usurio.

Um servlet no envia e recebe dados direto do usurio via


protocolo http. Antes dos dados chegarem ao servlet eles so
recebidos e tratados por outro programa chamado genericamente
de container web que repassa os dados para o servlet. Por isso,
servlet rodam em cima de um container web.

Unidade 1

prog_orient_objetos.indb 29

29

2/7/2007 16:44:21

Universidade do Sul de Santa Catarina

Sntese
Nesta unidade voc estudou o que uma linguagem de
programao, para que ela serve e sua classicao. importante
ter em mente que sem uma linguagem de programao voc
no pode programar ou instruir o computador a realizar alguma
tarefa.
atravs de uma linguagem de programao que elaboramos
o conjunto instrues organizadas logicamente (programa) que
indicam o qu o computador deve fazer. Porm, a maioria das
linguagens de programao de alto nvel, ou seja, sua sintaxe
semelhante linguagem humana, portanto no entendida pelo
computador.
por isso que todo o programa (conjunto de instrues) deve ser
compilado ou interpretado, isto , traduzido para a linguagem
binria que o computador entende.
A linguagem que iremos utilizar no decorrer dessa disciplina
se chama Java. Essa linguagem se tornou muito popular no
mercado de desenvolvimento de sistemas, por duas razes
principais: ela gratuita, ou seja, no preciso pagar para
obter os softwares necessrio para construir um programa nessa
linguagem e, por ser multi-plataforma, permitindo que um
programa desenvolvido numa plataforma de hardware/sistema
operacional funcione perfeitamente em outra plataforma.
Alm disso, possui uma srie de outras caractersticas que foram
abordadas durante essa unidade,sendo possvel desenvolver
diversos tipos de aplicao com ela.

30

prog_orient_objetos.indb 30

2/7/2007 16:44:21

Programao Orientada a Objeto

Atividades de auto-avaliao
1) Um programa feito em uma linguagem de programao de alto
nvel no pode ser entendido diretamente nessa linguagem pelo
computador. O que precisar ser feito com esse programa em alto nvel
para que suas instrues possam ser entendidas pelo computador?

2) Explique a relao existente entre a caracterstica Multiplataforma da


linguagem Java e a expresso write once run anywhere.

3) Explique o que a mquina virtual (JVM-Java Virtual Machine) da


linguagem Java.

Unidade 1

prog_orient_objetos.indb 31

31

2/7/2007 16:44:21

Universidade do Sul de Santa Catarina

Saiba mais
Histria da linguagem Java
http://campus.fortunecity.com/psychology/196/javatudo.html

32

prog_orient_objetos.indb 32

2/7/2007 16:44:21

UNIDADE 2

Preparando o ambiente para


programar em Java

Objetivos de aprendizagem


Aprender a instalar e configurar o kit de


desenvolvimento de sistemas J2SE Development Kit (JDK).

Aprender a editar, compilar e executar um programa em


Java.

Sees de estudo
Seo 1 Instalando o J2SE Development Kit (JDK)
Seo 2 Editando, Compilando e Executando o
primeiro programa em Java

prog_orient_objetos.indb 33

2/7/2007 16:44:21

Universidade do Sul de Santa Catarina

Para incio de conversa


Depois de conhecer um pouco da histria e caractersticas da
linguagem Java, voc vai, a partir de agora, aprender a preparar
o ambiente no seu computador para desenvolver o primeiro
programa em Java. Para isso, voc vai precisar estar atento a uma
srie de detalhes que essa tarefa exige.
At o momento, voc no precisou se preocupar com isso. Nas
disciplinas anteriores voc aprendeu lgica de programao,
ou seja, como estruturar lgicamente as instrues que o
computadores ir executar, sem se preocupar em pass-las para
uma linguagem de programao.
A partir de agora, voc ir programar utilizando uma linguagem
de programao e, para isso precisar lembrar dos conhecimentos
de lgica das disciplinas anteriores, alm de muita ateno, pois
uma linguagem de programao cheia de detalhes sintticos.
Voc ir gostar muito dessa unidade. aqui que vai, nalmente,
colocar os conhecimentos em prtica e ver seu primeiro programa
funcionando.

SEO 1 - Instalando o J2SE


Para desenvolver programas na linguagem Java necessrio
primeiramente escolher qual a plataforma desejada (J2SE, J2ME
ou J2EE).
Ns adotaremos nesse curso a plataforma J2SE
(Java 2 Plataform Standard Edition), pois seu
conjunto de recursos oferecidos suficiente para o
desenvolvimento de nossos programas.

Cada plataforma tem suas verses, a cada nova verso, novos


recursos que facilitam o desenvolvimento de programas so
adicionados. A verso mais atual da plataforma J2SE a 5.0.

34

prog_orient_objetos.indb 34

2/7/2007 16:44:21

Programao Orientada a Objeto

Aps a escolha da plataforma, precisamos instalar e congurar


o J2SE Development Kit (JDK), ou kit de desenvolvimento de
softwares da plataforma Java 2 SE. Esse kit consiste de alguns
programas como o compilador, JVM (Java Virtual Machine),
API Java que so necessrios para o desenvolvimento dos
programas na plataforma J2SE.

O JDK da verso 5.0


pode ser baixado (fazer
download) do endereo:
http://java.sun.com/
j2se/1.5.0/download.jsp.

Vamos mostrar passo a passo como fazer o download do JDK.


1) Acesse o endereo http://java.sun.com/j2se/1.5.0/download.jsp
e escolha a opo JDK 5.0 Update 6.
A seguinte seqncia de telas ir aparecer:
Tela 1

2) Clique no link Download JDK 5.0 Update 6.


Tela 2

Unidade 2

prog_orient_objetos.indb 35

35

2/7/2007 16:44:22

Universidade do Sul de Santa Catarina

3) Clique no boto Accept e no link Windows Oine


Installation, Multilanguage.
Tela 3

4) Clique no link Windows Oine Installation,


Multilanguage.
Tela 4

36

prog_orient_objetos.indb 36

2/7/2007 16:44:26

Programao Orientada a Objeto

5) Clique no boto Salvar. Logo aps, o download do arquivo


executvel contendo o J2SDK comear. Quando terminar o
download, aparecer uma janela para voc escolher o diretrio ou
pasta dentro do disco rgido do seu computador onde o arquivo ser
salvo. Esse arquivo executvel contm aproximadamente 50 Mb.
Convm lembrar que o conjunto de softwares
contidos no J2SDK gratuito (free), ou seja, no
precisamos compr-los para instalar no nosso
computador.

O procedimento de instalao no Windows muito simples,


basta voc executar o arquivo, seguir os passos e instalar no
diretrio desejado.
IMPORTANTE !!
Aps a instalao, necessrio configurar duas
variveis de ambiente do sistema operacional. Essas
variveis se chamam PATH e CLASSPATH.

Isso necessrio para qu?


Para que voc possa executar o compilador Java e a mquina
virtual (JVM) de qualquer diretrio do seu computador e para
que a JVM encontre as classes compiladas que so usadas no seu
programa.
Para congurar essas variveis de ambiente no Windows, voc
deve atentar para a verso que est utilizando, pois em cada
verso a congurao das variveis de ambiente feita de uma
maneira diferente.

Congurando variveis de ambiente no Windows 2000 e XP


Voc deve congurar as variveis de ambiente seguindo os
seguintes passos:
1) Clique com o boto direito no cone Meu Computador e
escolha a opo Propriedades.

Unidade 2

prog_orient_objetos.indb 37

37

2/7/2007 16:44:29

Universidade do Sul de Santa Catarina

Outra opo ir ao menu Iniciar-> Conguraes->Painel de


controle-> Sistema-> Avanado-> Variveis de sistema.
A seguinte tela ir aparecer:

2) Clique na guia (aba) Avanado


3) Clique no boto Variveis de ambiente. So duas as variveis
que voc deve criar ou mudar: CLASSPATH E PATH.
A seguir ser demonstrado como configurar a varivel
de ambiente CLASSPATH.

38

prog_orient_objetos.indb 38

2/7/2007 16:44:29

Programao Orientada a Objeto

No quadro variveis do sistema procure a varivel


CLASSPATH. Caso ela exista, clique no boto Editar.

O campo Valor da varivel provavelmente estar preenchido,


portanto, posicione o cursor no nal do contedo desse campo,
digite ;. (ponto e vrgula e ponto) e clique no boto OK.
Caso a varivel CLASSPATH no exista, clicar no boto Nova.
A janela acima ir aparecer. No campo Nome da varivel voc
dever digitar CLASSPATH e no campo Valor da varivel voc
dever digitar . (ponto).

Unidade 2

prog_orient_objetos.indb 39

39

2/7/2007 16:44:31

Universidade do Sul de Santa Catarina

Aps configurar a varivel CLASSPATH vamos


configurar a varivel de ambiente PATH.

Na prxima seo voc


entender a importncia
dessa varivel ser congurada.

A varivel PATH indica para o sistema operacional onde o


compilador, mquina virtual (JVM) e outros executveis
utilizados no desenvolvimento de programas em Java estaro
instalados no seu computador.
No quadro variveis do sistema, procure a varivel PATH. Caso
ela exista, clique no boto Editar.

O campo Valor da varivel provavelmente estar preenchido,


portanto posicione o cursor no nal do contedo desse campo e
digite ; (ponto e vrgula) seguido do caminho (pode-se falar path)
onde o diretrio do J2SE JDK\bin foi instalado.
;C:\jdk1.5.0_04\bin (nesse caso o JDK est instalado
no diretrio raiz)
;C:\Arquivos de programas\Java\jdk1.5.0_05\bin
(nesse caso o JDK est instalado dentro da pasta
Arquivos de programas\Java
Verifique pelo Windows Explorer o contedo do
diretrio \bin do J2SDK. Voc ver que nesse diretrio
existem somente arquivos executveis, sendo alguns:
javac.exe (compilador da linguagem Java) e java.exe
(mquina virtual da linguagem Java).

40

prog_orient_objetos.indb 40

2/7/2007 16:44:32

Programao Orientada a Objeto

Congurando variveis de ambiente no Windows 98


No Windows 98, voc deve fazer as alteraes das variveis de
ambiente no arquivo autoexec.bat.
Edite o arquivo e inclua as seguintes linhas:
SET JAVA_HOME=c:\ jdk1.5.0_04\bin (diretrio onde o JDK foi instalado)
SET PATH=%PATH%;%JAVA_HOME%\bin
SET CLASSPATH=.;%CLASSPATH%

Abra o arquivo e procure uma varivel chamada PATH.


Se ela for encontrada adicione ; (ponto e vrgula) no nal da
linha e logo aps o caminho onde o diretrio J2SE JDK\bin foi
instalado.
Se ela no for encontrada, digite em uma nova linha PATH=
seguido do caminho onde o diretrio J2SE JDK\bin foi
instalado.

Congurando variveis de ambiente no Linux


No sistema operacional Linux, a congurao das variveis passa
por processo semelhante, porm em vez de utilizar o ; (ponto e
vrgula) deve-se utilizar : (dois pontos).
Para mais detalhes sobre instalao e configurao no
Linux consulte:
http://www.guj.com.br/content/articles/java5_linux/
guj_java_linux.pdf

Unidade 2

prog_orient_objetos.indb 41

41

2/7/2007 16:44:32

Universidade do Sul de Santa Catarina

SEO 2 - Editando, compilando e executando o


primeiro programa em Java

Um mtodo pode ser uma funo


ou um procedimento.

Os programas em Java consistem em partes chamadas classes.


Essas, por sua vez, consistem em partes chamadas mtodos
que realizam tarefas e muitas vezes retornam informaes ao
completarem tarefas.
Os programadores podem construir novas classes ou podem
utilizar as classes existentes em bibliotecas de classes prontas que
Java possui. Essas bibliotecas de classes so conhecidas como
Java API (Application Programming Interface ou Interface de
Programas Aplicativos).
DICA!!
Releia o item Multiplataforma da unidade anterior
para entender melhor essa seo.

Desenvolver um programa em Java consiste basicamente de trs


etapas.

1) Edio

Uma IDE um software que possui


recursos de editor de texto e opes
que facilitam o desenvolvimento de
um programa.

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
Aps a edio do programa, o mesmo deve ser compilado, ou
seja, gerado um arquivo contendo os bytecodes do programa.
Os bytecodes so cdigos em linguagem de mquina que sero
interpretados (entendidos) pela JVM (Java Virtual Machine)
que dever estar instalada no computador.O arquivo contendo os
bytecodes possui extenso .class.

42

prog_orient_objetos.indb 42

2/7/2007 16:44:32

Programao Orientada a Objeto

Comando para compilao: javac nomedoprograma.java


javac o nome do
software compilador que
deve ser executado.

3) Interpretao
O processo de interpretao realizado a partir dos bytecodes
gerados pela compilao, que esto no arquivo .class. Ele
realizado pela JVM instalada no computador a qual dependente
do sistema operacional do mesmo.
Comando para interpretao: java nomedoprograma
A gura abaixo ilustra essas etapas:

java o nome do software


que representa a JVM
instalada no computador.

Agora que voc j tem o J2SDK instalado, podemos partir para a


parte prtica.

Unidade 2

prog_orient_objetos.indb 43

43

2/7/2007 16:44:33

Universidade do Sul de Santa Catarina

Meu primeiro programa Java

Crie a pasta pela janela DOS


(c:\md cursoweb) ou pelo
Windows Explorer

Primeiramente vamos, ento, criar uma pasta chamada


CURSOWEB no drive C:\ do seu computador para que
possamos organizar os programas e exerccios que faremos.
Execute o Bloco de Notas (Notepad) agora vamos digitar nosso
primeiro programa em Java. Copie as linhas abaixo:
public class AloMundo {
public static void main(String args[]) {
System.out.println(Alo Mundo !);
}
}

No se preocupe em entender o cdigo. apenas um exemplo e


explicaremos esses comandos mais tarde. Salve o arquivo como
AloMundo.java na pasta CURSOWEB criada anteriormente.
Certique-se que o arquivo foi salvo com esse nome e no assim:
AloMundo.java.txt
Cuidar com as letras maisculas e minsculas. Isso
muito importante. O cdigo digitado deve estar
exatamente igual ao que voc est lendo.

A seguir, vamos compilar o programa. A compilao ir gerar os


bytecodes.
Acesse a Janela DOS e dentro da pasta CURSOWEB execute:
javac AloMundo.java

Se no houver erro, depois de alguns segundos, voc deve ter


acesso ao prompt do DOS novamente.
Se der erro, voc tem que identicar o que est causando o erro.
As mensagens de erros estaro em ingls e, provavelmente,
no caso desse programa, estaro relacionadas a algum erro de
digitao do cdigo fonte ou no comando de compilao.

44

prog_orient_objetos.indb 44

2/7/2007 16:44:33

Programao Orientada a Objeto

Se o erro estiver no cdigo fonte, retorne ao mesmo pelo Bloco


de Notas, arrume o erro, salve o arquivo novamente, retorne ao
prompt do DOS e execute o comando de compilao novamente.
Voc deve repetir essa seqncia de passos at que o comando de
compilao no gere mais erros.
Nesse momento ter sido gerado o arquivo AloMundo.class
(bytecode).
Para executar o programa, acesse a Janela DOS e dentro da pasta
CURSOWEB execute digite:
java AloMundo

Voc deve ter recebido como resposta a frase Alo Mundo !. Isso
signica que tudo est certo e voc acabou de criar seu primeiro
programa em Java.

Ao executar o programa
java voc est acionando
a mquina virtual de java
para que ela interprete o
bytecode gerado na etapa
anterior.

ATENO !!
No se preocupe se voc no conseguir executar os
passos descritos acima nesse momento. Na unidade 4,
voc aprender com mais detalhes a editar, compilar e
executar um programa.
A inteno agora foi s dar a voc aps a instalao do
J2SDK uma noo de como desenvolver um programa
em Java.

Unidade 2

prog_orient_objetos.indb 45

45

2/7/2007 16:44:33

Universidade do Sul de Santa Catarina

Sntese
Nessa unidade voc aprendeu a instalar e congurar a ferramenta
de trabalho bsica para desenvolver programas em Java, o J2SE
Development Kit (JDK).
Tambm aprendeu a executar as trs etapas do desenvolvimento
de qualquer programa: edio, compilao e execuo. Isso foi
feito atravs de um pequeno exemplo que teve o objetivo de
ilustrar o que vamos fazer daqui para a frente.

Atividades de auto-avaliao
1) Desenvolva um pequeno programa na linguagem Java que imprima o
seu nome da tela. Mude o nome do programa para MeuNome.java, ou
seja, no lugar de AloMundo voc deve digitar MeuNome.

46

prog_orient_objetos.indb 46

2/7/2007 16:44:33

Programao Orientada a Objeto

Saiba mais
Hello, World - Seu primeiro programa em Java!
http://www.guj.com.br/java.tutorial.artigo.16.1.guj

Unidade 2

prog_orient_objetos.indb 47

47

2/7/2007 16:44:34

prog_orient_objetos.indb 48

2/7/2007 16:44:34

UNIDADE 3

Sintaxe bsica da
linguagem Java

Objetivo de aprendizagem


Conhecer a sintaxe bsica da linguagem.

Seo de estudo
Seo 1 Sintaxe bsica da linguagem Java

prog_orient_objetos.indb 49

2/7/2007 16:44:34

Universidade do Sul de Santa Catarina

Para incio de conversa


Nessa unidade voc obter as informaes necessrias para
programar instrues na linguagem Java. Voc j estudou como
desenvolver programas nas disciplinas de Lgica de Programao
I e II, entretanto estas disciplinas utilizaram um pseudocdigo
para isso.
O computador no entende as instrues programadas em
pseudocdigo, necessrio que voc traduza as instrues que
esto em pseudocdigo para uma linguagem de programao.
Para isso, voc deve aprender a sintaxe ou maneira de escrever os
comandos dessa linguagem de programao.
No nosso caso, vamos utilizar a linguagem Java, portanto,
necessrio aprender a sintaxe dessa linguagem.
Agora precisaremos prestar bastante ateno. Comearemos a
ver como uma linguagem de programao detalhada em sua
sintaxe.

SEO 1 - Sintaxe bsica da linguagem Java


Nessa seo iremos discorrer sobre a sintaxe (maneira de escrever)
dos conceitos bsicos envolvidos na construo de programas
em Java. Conceitos como tipos de dados e estruturas de controle
(deciso, repetio), entre outros.
Como no trivial escrever programas que utilizam interface
grca (tela com janela, botes, etc), inicialmente, voc aprender
apenas recursos para criar aplicativos ou programas simples
dentro da janela do MS-DOS.

50

prog_orient_objetos.indb 50

2/7/2007 16:44:34

Programao Orientada a Objeto

Como inserir Comentrios no seu cdigo fonte em Java?


sempre interessante a colocao de comentrios em
programas. Os comentrios permitem que a manuteno
posterior do cdigo seja mais rpida e serve para indicar o que o
programa faz. Os comentrios em Java podem ser de dois tipos:
// (duas barras)
ou os sinais
/* (incio da marcao)
*/ (m da marcao)

// (duas barras)
Utiliza-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 signica essa instruo?
Uma varivel de memria chamada A est recebendo o valor
dela mesma acrescido de 1.
/* e */

Veja que o sinal de


atribuio na linguagem
Java o sinal de = . Em
Lgica I vocs utilizavam o
sinal 

Existem ocasies em que vrias linhas de comentrio so


necessrias. Nesse caso, utilizamos os sinais de /* e */ para indicar
incio e m de bloco de comentrios, como no exemplo:
/* Programa de Exemplo Esse programa no faz nada.
Criado por XYZ em Abril de 2005
Versao 1.0
*/

Unidade 3

prog_orient_objetos.indb 51

51

2/7/2007 16:44:34

Universidade do Sul de Santa Catarina

Tipos de dados em Java


Ao desenvolver qualquer programa, freqentemente voc
necessita declarar variveis de memria. Para declarar uma
varivel de memria voc deve especicar o tipo de dado que ser
armazenado nela.

Voc j estudou os conceitos


de varivel de memria e tipo
de dados. Isso foi aprendido
nas Disciplinas de Lgica de
Programao I e II.

Java uma linguagem que necessita que todas as variveis


tenham um tipo de dado declarado.
Existem oito tipos de dados primitivos em Java.
Seis deles so numricos, um, caracter e o outro
booleano (lgico).

Os tipos abaixo guardam valores numricos inteiros (sem casas


decimais). Valores negativos so permitidos.
* Representa o espao na memria
que uma varivel desse tipo ir
ocupar. Portanto, tenha cuidado
ao declarar o tipo de uma varivel
de memria porque ele poder
estar ocupando mais espao do que
necessrio.

Tipo

Tamanho*

Faixa de Valores**

int

4 bytes

-2.147.483.648 at 2.147.483.647

short

2 bytes

-32.768 at 32.767

byte

1 byte

-128 at 127

long

8 bytes

-9.223.372.036.854.775.808 at
9.223.373.036.854.775.807

** Diz respeito faixa de valores


que podero ser armazenados em
variveis desse tipo.

Na maioria das ocasies, declarar uma varivel de memria com


o tipo int suciente para armazenar valores numricos sem
ponto utuante (nmeros com casas decimais).
Tipos numricos que representam valores com ponto utuante
(com casas decimais):
Esses tipos representam o tipo real
que voc aprendeu em Lgica I.

Tipo

Tamanho

Faixa de Valores

oat

4 bytes

1,4E-45 a 3,4E+38

double

8 bytes

4,9E-324 a 1,7E+308

52

prog_orient_objetos.indb 52

2/7/2007 16:44:34

Programao Orientada a Objeto

O tipo caracter serve para representar apenas uma letra ou


nmero.
Tipo

Tamanho

char

2 bytes

Faixa de Valores

O tipo caracter no foi


aprendido em Lgica I e
ser apresentado aqui.

Ao armazenar um dado do tipo caracter em uma varivel desse


tipo, voc deve representar esse dado entre aspas simples, por
exemplo: h. Caracteres representados por aspas duplas (h) na
verdade so Strings.
O tipo lgico ou booleano pode assumir apenas dois valores:
verdadeiro, que aqui em Java true e falso, que em Java false.
Esse tipo usado apenas para testes lgicos.
Tipo

Tamanho

Faixa de Valores

boolean

1 byte

true ou false

String como se chama


o tipo Literal que voc
aprendeu em Lgica I.

Declarao de variveis de memria em Java


A declarao de variveis em Java, como em vrias
outras linguagens, exige que o tipo de dado da
varivel seja declarado.

Em Java, voc inicia a declarao indicando o tipo de dados que


ser armazenado na varivel e o nome dela, como no exemplo:
Java

Pseudocdigo

int a

a: Numrico

double d

d: Numrico

byte b

b: Numrico

char ch

c: Alfanumrica

boolean ok

ok: Lgica

Lembre-se que voc j


viu os tipos de dados
existentes na linguagem
Java na seo anterior.

Observe na tabela acima, a forma de declarar variveis de


memria em Java em relao maneira que voc declarava em
pseudocdigo. O tipo deve sempre comear com letra minscula
e deve vir antes do nome da varivel.
Unidade 3

prog_orient_objetos.indb 53

53

2/7/2007 16:44:34

Universidade do Sul de Santa Catarina

A primeira varivel na tabela do tipo int (numrico inteiro) e


se chama a. Isso signica que foi alocado um espao na memria
com o nome (identicador) a, nesse espao s podero ser
armazenados valores do tipo int e ele ocupar 4 bytes de espao
na memria RAM.
Note que todas as declaraes terminam com o ponto-e-vrgula.
Os nomes das variveis devem ser iniciados com qualquer letra,
seguidas por uma seqncia de letras ou dgitos. O tamanho do
nome da varivel no tem limites.
possvel declarar diversas variveis em uma linha, bem como
atribuir valores a elas na declarao, como nos exemplos abaixo:
int a,b;
int a = 10;
/* Isto uma inicializao de varivel de memria, ou seja,
quando ela criada, um valor inicial colocado dentro dela*/

Denindo constantes em Java


Voc pode denir constantes em Java utilizando a palavra
reservada nal. Essa palavra indica que voc deniu o valor da
uma varivel e que esse valor no pode ser modicado.
nal double TEMPERATURA = 25.4;

Observe que o nome da constante nesse caso est em caixa alta,


portanto, durante todo o programa ela dever ser referenciada
dessa maneira, em caixa alta. Essa regra vale para nomes de
variveis de memria. Isso acontece porque a linguagem Java
case sensitive.
Case sensitive signica que faz
diferena utilizar letras maisculas e
minsculas.

Operadores Aritmticos em Java


Os operadores aritmticos + - * / so utilizados para a adio,
subtrao, multiplicao e diviso.
A diviso retorna resultado inteiro se os operadores forem inteiros
e valores de ponto utuante (com vrgula) em caso contrrio.

54

prog_orient_objetos.indb 54

2/7/2007 16:44:35

Programao Orientada a Objeto

Se for necessrio ter o valor do resto da diviso, utilizamos o %


(operador mod).

Vamos revisar esse operador?

O operador mod
equivalente a funo
RESTO() aprendida em
Lgica I.

Observe a seguinte operao:


2 mod 2 ou 2 % 2 (em Java)

Qual o resultado dessa operao?


0 , porque o resto da diviso de 2 por 2 0.

Operadores relacionais e booleanos (Lgicos) em Java


Esses operadores servem para avaliar expresses lgicas. Para
vericar a igualdade entre dois valores, usamos o sinal = = (dois
sinais de igual). O operador usado para vericar a diferena (no
igual) o !=.
Temos ainda os sinais de maior (>), menor (<), maior ou igual
(>=), menor ou igual (<=).
Veja a tabela abaixo:
Operador Relacional

Signicado

==

Igualdade

!=

Diferena

<

Menor que

>

Maior que

<=

Menor ou igual a

>=

Maior ou igual

Unidade 3

prog_orient_objetos.indb 55

55

2/7/2007 16:44:35

Universidade do Sul de Santa Catarina

Veja a tabela dos operadores lgicos:


Operador Lgico

Signicado

&&

||

OU

NO

Declarando variveis do tipo Literal


Ao declarar uma varivel do tipo Literal ou Alfanumrica em
Java, voc deve usar o tipo chamado String (com S maisculo).
Ao declarar uma varivel do tipo String voc estar criando um
objeto em memria. Nessa varivel String poder ser armazenada
uma seqncia de caracteres, sejam eles letras ou nmeros.
String e = ; // String vazia. Note as aspas duplas.
String oi = Bom dia;

As Strings podem ser concatenadas (unidas), utilizando o sinal


de +, como no exemplo:
String um = Curso;
String dois = Web;
String result = um + dois;

Qual o contedo da varivel result?


CursoWeb

Esse conceito ser entendido nas


unidades de orientao a objetos.
Saiba no momento que duas String
no podem ser comparadas com o
sinal de = = .

Importante
Uma String no deve ser comparada com outra
usando o sinal = =, pois elas so objetos.

56

prog_orient_objetos.indb 56

2/7/2007 16:44:35

Programao Orientada a Objeto

Existem dois mtodos especiais para comparar objetos, um deles


se chama equals e o outro equalsIgnoreCase. Assim, a comparao
da String a com a String b seria:
a.equals(b)

ou
a.equalsIgnoreCase(b)

Ou seja, o que est na varivel String a igual ao que esta na


varivel String b?
No primeiro caso, a diferena entre caracteres maisculos e
minsculos so avaliados. Isso quer dizer que, se em a tiver
WEB e em b tiver web, essas duas variveis no sero iguais.
O segundo mtodo ignora essas diferenas. Nesse caso as duas
variveis seriam iguais.

Declarando vetores e matrizes em Java


Vetores so estruturas utilizadas para armazenar um conjunto de
dados do mesmo tipo. Todos os dados armazenados devem ser do
mesmo tipo de dados. Por exemplo, todos os valores podem ser
inteiros (tipo int).

Voc aprendeu a trabalhar


com vetores e matrizes em
Lgica de Programao II,
lembra?

Um vetor pode ser denido assim na linguagem Java:


int vetor[] = new int[100];

Aqui teremos um vetor de 100 posies (de 0 a 99) de valores


inteiros. Os valores do vetor devem ser acessados segundo sua
posio (tambm conhecido como ndice), comeando da posio 0.
Exemplo:
vetor[0] = 3; // estou armazenando o valor 3 na primeira posio do vetor
vetor[1] = 5; // estou armazenando o valor 5 na segunda posio do vetor

Unidade 3

prog_orient_objetos.indb 57

57

2/7/2007 16:44:35

Universidade do Sul de Santa Catarina

Podemos iniciar um vetor com valores no momento da sua


declarao, como abaixo:
int[ ] impares = {2,3,5,7,9,11,13} //foi criado um vetor chamado impares com 7 posies.

Como acessar a posio 3?


impares[2];

possvel denir vetores de vrias dimenses. Com duas


dimenses eles so conhecidos como matriz. A denio de uma
matriz em Java a seguinte:
int matriz[][] = new int[5][6];

Foi criada uma matriz de 5 linhas por 6 colunas.


Como acessar o valor que est na 1 linha e 3 coluna
dessa matriz?

Lembre-se que na linguagem Java os ndices de acesso tanto de


vetor como de matriz comeam SEMPRE em 0.
matriz[0][2]

Estou acessando o valor que est na primeira linha (linha 0) e na


terceira coluna (coluna 2).

58

prog_orient_objetos.indb 58

2/7/2007 16:44:35

Programao Orientada a Objeto

Entrada e sada de dados em Java


Em Lgica I e Lgica II voc estudou o que uma instruo de
entrada de dados e uma instruo de sada de dados.
Vamos estudar agora como implementar (programar) essas
instrues na linguagem Java.
Qualquer instruo de entrada de dados deve ser precedida por
uma declarao de varivel de memria, pois, o dado digitado
pelo usurio na entrada de dados deve car armazenado em
algum lugar, ou seja, numa varivel de memria.
Vamos revisar vrias entradas e sadas de dados em pseudocdigo
primeiramente e, mostrar em seguida, a sua implementao na
linguagem Java.
1) Entrada e sada de dados do tipo numrico inteiro
PSEUDOCDIGO
1 idade: numrico
2 Leia idade
3 Escreva A idade , idade

JAVA
1 int idade;
2 idade=Integer.parseInt(JOptionPane.showInputDialog(Entre com a idade));
3 JOptionPane.showMessageDialog(null, A idade +idade);

Como voc deve ter observado, a implementao em Java das trs


linhas do pseudocdigo simplesmente uma TRADUO das
mesmas.
Na linha 1 foi declarada uma varivel de memria chamada idade
do tipo int (int corresponde ao tipo numrico inteiro).
A linha 2 corresponde a uma instruo de entrada de dados, no
caso, da idade. Em Java vamos usar a instruo JOptionPane.

Unidade 3

prog_orient_objetos.indb 59

59

2/7/2007 16:44:35

Universidade do Sul de Santa Catarina

showInputDialog( ) para programar todas as entradas de


dados. Essa instruo faz com que aparea uma janelinha ou
caixa de dilogo (gura 1) com um campo para o usurio digitar
o dado.

Figura 1 Tela de Entrada de Dados

Entre as aspas da instruo deve estar o texto que aparecer


dentro da caixa e que deve informar o qu o usurio deve digitar.
Aps a digitao, o usurio deve clicar no boto OK.
O valor digitado pelo usurio nessa caixa SEMPRE ser do tipo
String (literal), conseqentemente, no podemos programar para
que ele seja armazenado diretamente na varivel idade que s
aceita dados do tipo int. Para resolver esse problema temos que
usar a instruo de CONVERSO de dados Integer.parseInt( )
que converte de String para int porque o dado (idade) que o usurio
digitar na caixa do tipo String, portanto, deve ser convertido para
int para ser armazenado (atribudo) na varivel idade.
O valor a ser convertido deve ser colocado entre os
parnteses da instruo.

A linha 3 corresponde a uma instruo de sada de dados, no


caso, do valor da idade digitado. Em Java vamos usar a instruo
JOptionPane.showMessageDialog(null, + varivel) para
mostrar qualquer palavra, frase, valor no vdeo. Essa instruo
faz com que aparea uma janelinha ou caixa de dilogo (gura 2)
com a palavra, frase programada entre as (aspas) seguido do
contedo da varivel de memria (se existir).

60

prog_orient_objetos.indb 60

2/7/2007 16:44:36

Programao Orientada a Objeto

Figura 2 Tela de sada de dados

Entre as aspas da instruo deve estar o texto xo que aparecer


dentro da caixa, que, normalmente, um rtulo ou legenda
para o resultado (contedo de uma varivel de memria) a ser
mostrado. Aps a visualizao o usurio deve clicar no boto
OK. Nessa instruo de sada de dados, o parmetro null sempre
teve ser digitado depois da abertura de parntese.
Observe que no final de todas as instrues em Java
deve ser digitado ; (ponto e vrgula).

2) Entrada e sada de dados do tipo numrico real


PSEUDOCDIGO
1 valor: numrico
2 Leia valor
3 Escreva O valor , valor

JAVA
1 double valor;
2 valor=Double.parseDouble(JOptionPane.showInputDialog(Entre com o valor));
3 JOptionPane.showMessageDialog(null, O valor +valor);

Na linha 1 foi declarada uma varivel de memria chamada


idade do tipo double (double corresponde ao tipo numrico real).

Unidade 3

prog_orient_objetos.indb 61

61

2/7/2007 16:44:36

Universidade do Sul de Santa Catarina

Declara-se varivel do tipo double sempre que houver necessidade


de se armazenar um nmero com casas decimais.
A linha 2 corresponde a uma instruo de entrada de dados,
no caso, valor. Novamente use a instruo JOptionPane.
showInputDialog( ) para programar essa entrada de dado. O
valor digitado pelo usurio na caixa de dilogo que ir aparecer
SEMPRE ser do tipo String (literal), deste modo no podemos
programar para que ele seja armazenado diretamente na varivel
valor que s aceita dados do tipo double.
Para resolver esse problema temos que usar a instruo de
CONVERSO de dados Double.parseDouble( ), que converte
de String para double porque o dado (valor) que o usurio
digitar na caixa do tipo String, assim, deve ser convertido
para double para ser armazenado (atribudo) na varivel valor. O
valor a ser convertido deve ser colocado entre os parnteses da
instruo.
A linha 3 corresponde a uma instruo de sada de dados, no
caso, do valor digitado. Usamos a instruo JOptionPane.
showMessageDialog(null, O valor +valor) para mostrar na
caixa a legenda o O valor seguido do dado armazenado na
varivel valor.
Observe o operador + depois da legenda que est entre aspas.
Esse operador no est somando a legenda com o valor da
varivel valor e sim CONCATENDO (unindo) a legenda que
est entre aspas (um dado String) com o valor da varivel valor
que do tipo double. Com isso, o tipo da varivel valor (double)
automaticamente ou implicitamente convertido para String,
permitindo assim que duas Strings sejam concatenadas.

62

prog_orient_objetos.indb 62

2/7/2007 16:44:36

Programao Orientada a Objeto

3) Entrada e sada de dados do tipo literal


PSEUDOCDIGO
1 Nome: literal
2 Leia Nome
3 Escreva O nome , nome

JAVA
1 String Nome;
2 Nome=JOptionPane.showInputDialog(Entre com o nome);
3 JOptionPane.showMessageDialog(null, O nome +Nome);

Na linha 1 foi declarada uma varivel de memria chamada


Nome do tipo String (String corresponde ao tipo literal).
A linha 2 corresponde a uma instruo de entrada de dados em
Java. O valor digitado pelo usurio na caixa de dilogo que ir
aparecer SEMPRE ser do tipo String (literal), deste modo,
NESSE CASO especicamente, podemos programar para que
ele seja armazenado diretamente na varivel Nome que s aceita
dados do tipo String, no sendo necessrio usar uma instruo
de CONVERSO de dados. Mas apenas nesse caso!
A linha 3 corresponde a uma instruo de sada de dados do
nome digitado.

Unidade 3

prog_orient_objetos.indb 63

63

2/7/2007 16:44:36

Universidade do Sul de Santa Catarina

Sntese
Vamos revisar as principais instrues aprendidas nessa unidade:
Instruo de Entrada de Dados em Java
JOptionPane.showInputDialog( );
Observe as letras maisculas e
minsculas da instruo.

Instruo de Sada de Dados em Java


JOptionPane.showMessageDialog(null, );

Instrues de Converso de Tipo de Dados

Integer.parseInt ( )

Converte um valor do tipo String (literal) para o tipo int


(numrico inteiro).

Double.parseDouble( )

Converte um valor do tipo String (literal) para o tipo


double (numrico real)

Float.parseFloat ( )

Converte um valor do tipo String (literal) para o tipo


oat (numrico real)

Integer.toString ( )

Converte um valor do tipo int (numrico inteiro) para o


tipo String (literal)

Double.toString( )

Converte um valor do tipo double (numrico real) para


o tipo String (literal)

64

prog_orient_objetos.indb 64

2/7/2007 16:44:36

Programao Orientada a Objeto

Atividades de auto-avaliao
1) Faa as seguintes declaraes de variveis na linguagem Java:
a. Declare uma varivel de memria para armazenar um valor numrico
interiro, um valor numrico real, um valor do tipo lgico, um valor do
tipo Literal.
b. Declare um vetor de 5 posies para armazenar valores inteiros.
c. Declare uma matriz de 3 x 2 para armazenar valores do tipo literal.

2) Produza o seguinte trecho de cdigo na linguagem Java:


Criar uma varivel do tipo literal e armazenar o valor Unisul; criar
outra varivel do tipo literal e armazenar o valor Virtual; concatenar
(unir) essas duas variveis e armazenar em uma terceira varivel.

3) Traduza os seguintes trechos de pseudocdigo para a linguagem Java:


2.1)
A,B: numrico
A5
B6
CA+B
Escreva C;

4) Escreva um trecho de cdigo em Java que leia o nome de uma pessoa e


a sua idade. Logo aps, escreva o nome da pessoa e a sua idade.

Unidade 3

prog_orient_objetos.indb 65

65

2/7/2007 16:44:36

Universidade do Sul de Santa Catarina

Saiba mais
Fundamentos da Linguagem
http://www.jspbrasil.com.br/jsp/tutoriais/tutorial.jsp?idTutorial=002_002

66

prog_orient_objetos.indb 66

2/7/2007 16:44:37

UNIDADE 4

Implementando os primeiros
programas em Java

Objetivos de aprendizagem


Entender as etapas necessrias para o desenvolvimento


de um programa.

Implementar programas em Java sem controle de fluxo.

Seo de estudo
Seo 1 Implementando os primeiros programas em Java

prog_orient_objetos.indb 67

2/7/2007 16:44:37

Universidade do Sul de Santa Catarina

Para incio de conversa


Depois de ter estudado as unidades 1, 2 e 3, voc est pronto
para colocar a mo na massa, ou seja, comear a implementar os
primeiros programas em Java, pois j viu como instalar o J2SDK
e aprendeu a sintaxe bsica da linguagem.
Agora, falta comear a programar!
Para isso, voc vai ter que seguir passo a passo e com muita
ateno s orientaes dessa unidade. Vamos desenvolver
programas em Java sem controle de uxo, com uxo seqencial,
ou seja, sem SE, ENQUANTO ou PARA.
E ento?
Voc est pronto para comear?

SEO 1 - Implementando os primeiros


programas em Java
Agora que voc estudou a sintaxe bsica da linguagem Java na
unidade 3, est pronto para comear a desenvolver os primeiros
programas nessa linguagem. Esses programas no vo envolver
estruturas de controle de uxo (se enquanto para), sero
programas com um uxo seqencial (do incio ao m).
Porm, antes de seguir no estudo dessa seo, gostaria que
voc voltasse unidade 2, seo 2: Editando, Compilando e
Executando o primeiro programa em Java para relembrar os trs
passos para desenvolver um programa em Java.

68

prog_orient_objetos.indb 68

2/7/2007 16:44:37

Programao Orientada a Objeto

Passos iniciais
1 Passo: certique-se que o SDK da linguagem Java est
instalado no seu computador e se est devidamente congurado.


Para vericar se ele est instalado abra o Windows


Explorer e procure por alguma pasta chamada jdk1.5...

Para vericar se ele est congurado entre na opo


prompt do MS-DOS ou prompt de Comando ou clique
no boto Iniciar, opo Executar e digite cmd. Com
isso voc ir entrar na janela no MS-DOS. Nessa janela,
digite javac (java nome do compilador), se aparecer
uma mensagem do tipo: javac no reconhecido como
um comando interno ou externo..... signica que o
SDK no est devidamente congurado. Para isso, volte
seo 1 da unidade 2 Instalando o J2SE que explica
passo a passo como instalar e congurar o J2SE.

Os trs pontinhos no nal


signicam que o nome
da pasta normalmente
comea por jdk, mas
pode terminar em 1.4.1
ou 1.4.1_02, 1.5.0, etc.
dependendo da verso
que voc instalou na sua
mquina.

2 Passo: crie uma pasta dentro do diretrio (pasta) raiz do seu


computador.
O nome da pasta deve se chamar CURSOWEB.
Vamos agora comear a desenvolver em Java os algoritmos que
voc desenvolveu na disciplina de Lgica de Programao I.
Voc comear revendo o enunciado do exerccio 3 que est nas
atividades de auto-avaliao da seo 1, Unidade 5, da disciplina
de Lgica de Programao I. Primeiramente, ser mostrado
o pseudocdigo do algoritmo e, posteriormente, o algoritmo
implementado na linguagem Java de acordo com a lgica
empregada no pseudocdigo mostrado a seguir.

Para quem quiser aprender


a manipular arquivos (criar
pastas, copiar arquivos,
apagar arquivos, etc)
dentro da janela do MSDOS, consulte o endereo:
http://www.infowester.
com/tutdos.php

importante ressaltar
essa frase de acordo
com o pseudocdigo
mostrado a seguir. Por
qu? Por que podemos
desenvolver um algoritmo
de diversas maneiras
e isso altera como o
algoritmo implementado
na linguagem de
programao.

Unidade 4

prog_orient_objetos.indb 69

69

2/7/2007 16:44:37

Universidade do Sul de Santa Catarina

a) Crie um algoritmo em pseudocdigo que cadastre e mostre,


no vdeo do computador, os dados de um professor: nome,
endereo, cidade, estado, CEP, RG, data de nascimento, grau de
escolaridade e curso que leciona.
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

70

prog_orient_objetos.indb 70

2/7/2007 16:44:37

Programao Orientada a Objeto

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);
}
}

Antes de digitar esse cdigo vamos analis-lo linha a linha.




Linha 0: nos programas que faremos essa instruo


ser sempre necessria e deve estar na primeira linha.
Posteriormente ela ser explicada.
Linha 1: todo o programa desenvolvido em Java
chamado de classe ou class. Em Java todo o programa
ou class deve ter um nome. O nome do nosso programa

Unidade 4

prog_orient_objetos.indb 71

Vamos nos referenciar a


classe como class daqui
para a frente.

71

2/7/2007 16:44:37

Universidade do Sul de Santa Catarina

DadosProfessor. Logo, a primeira linha deve ser a


declarao class seguido do nome do programa e o
smbolo de incio da class { (abre chave);


Linha 2: todo o programa (conjunto de instrues)


feito em Java deve estar dentro de pequenos mdulos
tambm conhecidos como sub-rotinas ou mtodos, que
podem estar na forma de procedimentos ou funes).
Pelo menos um mtodo deve existir (a princpio) em
nossos programas (class) Java e ele chamado de main
(em ingls: principal). Todo o conjunto de instrues
deve estar (a princpio) dentro do mtodo main e ele
SEMPRE deve ser declarado da maneira como est na
linha 2.

Linha 3: corresponde a instruo de incio de bloco. O


smbolo que indica incio de bloco em Java {

Linha 4: declarao de oito variveis de memria do tipo


String (literal)

Linha 5: declarao de uma varivel de memria do tipo


int (inteiro)

Linha 6: instruo de entrada de dados em Java. Observe


a instruo JOptionPane.showInputDialog(Entre
com o Nome). Essa instruo faz com que aparea uma
janelinha ou caixa de dilogo na tela com um campo
para que o usurio do programa digite o nome (gura
3). Qualquer valor digitado nessa caixa de dilogo
sempre ser do tipo String. Aps a digitao do nome,
o usurio deve clicar no boto OK. O valor digitado na
caixa ser armazenado(atribudo) na varivel NOME que
s aceita dados do tipo String porque ela foi declarada
como sendo do tipo String.

Linhas 7, 8, 9 e 10: a mesma explicao se repete para as


linhas de 7 a 10.

Voc aprendeu funes e


procedimento em Lgica II.

Ns iremos utilizar essa instruo


de entrada de dados JOptionPane.
showInputDialog no decorrer deste
livro.

72

prog_orient_objetos.indb 72

2/7/2007 16:44:37

Programao Orientada a Objeto

Linha 11: instruo de entrada de dados


em Java. Observe a instruo JOptionPane.
showInputDialog(Entre com o RG). Essa instruo
faz com que aparea uma janelinha ou caixa de dilogo
na tela com um campo para que o usurio do programa
digite o RG. Qualquer valor digitado nessa caixa de
dialogo sempre ser do tipo String. Se o valor do tipo
String, ento ele no pode ser armazenado, atribudo
diretamente a varivel RG que s aceita valores do tipo
int (inteiro). Por causa disso, programamos a instruo
Integer.parseInt(..) que ir converter o tipo do dado
digitado na caixa de dilogo (RG) para o tipo int
(inteiro). Depois do RG digitado ser convertido para int,
ele pode ser armazenado na varivel RG.

Linhas 12,13,14: a mesma explicao da linha 6 se


repete para as linhas 12 a 14.

Linha 15: a instruo de escrita ou sada de dados


em Java que iremos utilizar : JOptionPane.
showMessageDialog (null,Nome + NOME). Ela
faz com que aparea na tela uma janelinha ou caixa de
dilogo com a frase que foi programada entre seguido
do contedo de alguma varivel de memria (gura 4).

Linhas 16 a 23: a mesma explicao da linha 15 se repete


para as linhas de 16 a 23.

Linha 24: essa instruo faz com que o programa


termine adequadamente e no que pendurado na
janela do MS-DOS.

Linha 25: instruo de m do mtodo main } (fecha chave).

Linha 26: instruo de m da class } (fecha chave).

Unidade 4

prog_orient_objetos.indb 73

Ns iremos utilizar essa


instruo de sada de
dados JOptionPane.
showMessageDialog no
decorrer deste livro.

73

2/7/2007 16:44:38

Universidade do Sul de Santa Catarina

Figura 3 Tela de Entrada de Dados

Figura 4 Tela de Sada de Dados

Depois de analisar linha a linha do cdigo, vamos partir para a


prtica, ou seja, para o desenvolvimento do programa.
Para isso vamos primeiramente revisar as trs partes do
desenvolvimento de um programa: EDIO, COMPILAO
E EXECUO.

1) Na EDIO
voc deve digitar o programa acima num editor de texto. Vamos
usar o Bloco de Notas do Windows. Abra o Bloco de Notas,
digite o programa CUIDANDO letras minsculas e maisculas
e salve-o na pasta CURSOWEB criada anteriormente.
Saiba mais
Voc pode utilizar uma IDE para o desenvolvimento
de seus programas. Uma IDE uma ambiente de
desenvolvimento (software) onde o programador
pode digitar o programa, compilar e executar. Existem
vrias IDEs no mercado. Algumas mais profissionais
como JBuilder, Eclipse, NetBeans e outras mais
simples como JCreator, JEdit.

74

prog_orient_objetos.indb 74

2/7/2007 16:44:38

Programao Orientada a Objeto

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)

2) Depois de digitar o programa, voc deve COMPILAR.


Para isso, vamos entrar na janela do MS-DOS e acessar a pasta
WEBCURSO. Para conseguir acessar essa pasta pela janela do
MS-DOS voc deve utilizar alguns comandos do MS-DOS.
Reviso de comandos bsicos do MS-DOS:
cd \

Comando que permite acessar a pasta (diretrio) raiz

cd ..

Comando que permite voltar um nvel da rvore de pastas

cd <nome da pasta>

Comando que permite acessar, entrar em uma pasta

md <nome da pasta>

Comando que permite criar uma pasta

Estando dentro da pasta WEBCURSO voc deve digitar o


comando para compilar o programa (class) DadosProfessor.java
C:\webcurso\javac DadosProfessor.java

A sintaxe do comando de compilao :


javac <nome da class.java>

IMPORTANTE
Na hora de compilar o programa no esquea de
digitar o nome da classe seguido de .java. Preste
ateno para digitar o nome da class da mesma
maneira que voc a salvou.

Unidade 4

prog_orient_objetos.indb 75

75

2/7/2007 16:44:38

Universidade do Sul de Santa Catarina

Por exemplo: Se voc salvou o arquivo como dadosProfessor.java


(d minsculo), deve digitar no momento da compilao dessa
mesma maneira. Depois de digitar o comando de compilao,
tecle ENTER. Aps isso, o software compilador ir varrer
linha por linha o cdigo fonte digitado transformando-o
para um cdigo (bytecode) que a JVM (mquina virtual da
linguagem Java) ir entender. Se forem encontrados erros de
sintaxe (digitao) no programa, a compilao no terminar
com sucesso e ser apresentado na tela, a quantidade de erros
encontrados, a linha onde cada erro ocorreu dentro do programa
e uma breve descrio do mesmo.
Veja as guras abaixo:

Figura 5 Comando de compilao

Figura 6 Tela com os erros de compilao

Como voc pode notar na gura, o compilador detectou 1 erro


no programa (mas ele poderia ter detectado mais) e mostrou na
tela as informaes relativas ao erro que encontrou.
Logo na primeira linha, aps o comando de compilao, ele
identica a linha em que ocorreu o erro (linha 5) e, logo em
seguida, uma breve descrio do erro (cannot nd symbol) que,
nesse caso, quer dizer que a compilao no reconheceu algum
comando, palavra (que ele chama de symbol-simbolo) na linha 5.

76

prog_orient_objetos.indb 76

2/7/2007 16:44:39

Programao Orientada a Objeto

Na segunda linha, ele identica qual o symbol no reconhecido.


Nesse caso ele se chama Strinf. Aqui j podemos perceber que na
linha 5, deveramos ter digitado String em vez de Strinf (String
um symbol conhecido pelo compilador, Strinf no).
Na terceira linha, ele identica em qual class esse erro ocorreu.
Nesse caso foi na class DadosProfessor. Logo embaixo, ele
identica o que foi digitado na linha 5.
Com essas informaes voc deve RETORNAR ao cdigo
fonte digitado (arquivo DadosProfessor.java), ou seja, deve abrir o
arquivo e arrumar o erro.
Em seguida deve SALVAR e COMPILAR o arquivo
novamente.
Esse processo deve se repetir at que aparea a seguinte tela.

Figura 7 Tela aps compilao ter sido realizada com sucesso.

Como voc pode observar, o compilador no detectou nenhum erro.


O resultado do processo de compilao um outro arquivo
chamado DadosProfessor.class. Observe que a extenso
.class. esse arquivo que contem o cdigo (bytecode) que ser
interpretado pela JVM ( mquina virtual da linguagem Java)
instalada no seu computador.
Se voc acessar o contedo da pasta CURSOWEB, ver que existe
dois arquivos l: DadosProfessor.java e DadosProfessor.class.

Unidade 4

prog_orient_objetos.indb 77

Dica: Leia novamente a


seo 1.3.1 que explicar a
diferena entre linguagens
interpretas e compiladas.

77

2/7/2007 16:44:40

Universidade do Sul de Santa Catarina

3) Aps a compilao, o terceiro passo EXECUTAR


o programa, ou seja, testar para ver se est funcionando
corretamente. Para isso, digite:
C:\cursoweb\java DadosProfessor

A sintaxe do comando que executa ou interpreta um arquivo


.class :
javac <nome da class>

Observe que ao executar o comando javac, estamos invocando a


JVM da linguagem Java e informando a ela que a class que ser
interpretada.
IMPORTANTE!
Voc no deve digitar a extenso .class, somente o
nome do arquivo .class gerado aps a compilao.

No caso desse programa, a seqncia de execuo seguir o


formato das seguintes telas:

Figura 8 Tela de entrada do Nome

Figura 9 Tela de entrada do Endereo

78

prog_orient_objetos.indb 78

2/7/2007 16:44:40

Programao Orientada a Objeto

Figura 10 Tela de entrada da Cidade

Figura 11 Tela de entrada do Estado

Figura 12 Tela de entrada do CEP

Figura 13 Tela de entrada do RG

Figura 14 Tela de entrada da Data de Nascimento

Unidade 4

prog_orient_objetos.indb 79

79

2/7/2007 16:44:40

Universidade do Sul de Santa Catarina

Figura 15 Tela de entrada do Grau de Escolaridade

Figura 16 Tela de entrada do Curso

Figura 17 Tela de sada do Nome

Figura 18 Tela de sada do Endereo

Figura 19 Tela de sada da Cidade

Figura 20 Tela de sada do Estado

Figura 21 Tela de sada do CEP

Figura 22 Tela de sada do RG

80

prog_orient_objetos.indb 80

2/7/2007 16:44:41

Programao Orientada a Objeto

Figura 23 Tela de sada da Data

Figura 24 Tela de sada do Grau Esc.

Figura 25 Tela de sada do Curso

Sntese
Nesta unidade, voc desenvolveu os primeiros programas (sem
controle de uxo) na linguagem Java, com entrada e sada de
dados.
importante que voc pratique as informaes passadas nessa
unidade, ou seja, que voc saiba como se declara variveis de
memria, como programa uma instruo de entrada de dados e
como se programa uma instruo de sada de dados, tudo dentro
da estrutura de classe da linguagem Java.

Unidade 4

prog_orient_objetos.indb 81

81

2/7/2007 16:44:42

Universidade do Sul de Santa Catarina

Atividades de auto-avaliao
1) Desenvolver em Java TODOS os exerccios de auto-avaliao da seo 1
da Unidade 5 da disciplina de Lgica de Programao I.

Saiba mais
FURGERI, Sergio. Java 2 Ensino Didtico. So Paulo: rica,
2002.

82

prog_orient_objetos.indb 82

2/7/2007 16:44:42

UNIDADE 5

Implementando programas em
Java com controle de uxo

Objetivo de aprendizagem


Implementar programas em Java com Controle de Fluxo


(condicional e repetio).

Seo de estudo
Seo 1 Estruturas de Controle de Fluxo em Java

prog_orient_objetos.indb 83

2/7/2007 16:44:42

Universidade do Sul de Santa Catarina

Para incio de conversa


Agora que voc est um pouco mais experiente no
desenvolvimento de programas vai comear a implementar
programas em Java com controle de uxo, ou seja, programas
com SE, ENQUANTO ou PARA.
Vamos comear?

SEO 1 Estruturas de controle de uxo em Java


Vamos apresentar aqui as estruturas que nos permitem controlar
o uxo de execuo de programa (estruturas para processamento
condicional e de repetio) em Java, mas antes, temos que
aprender a delimitar blocos e conceituar o escopo.
Um bloco uma srie de linhas de cdigo situadas entre um
abre e fecha chaves ( { } ). Podemos criar blocos dentro de
blocos. Dentro de um bloco temos um determinado escopo, que
determina a visibilidade e tempo de vida de variveis de memria.
Por exemplo:
{
int x = 10;
// aqui eu tenho acesso ao x
{
int z = 20;
// aqui eu tenho acesso ao x e ao z
}
// aqui eu tenho acesso ao x; o z est fora do escopo
}

Assim, permitida a declarao de variveis com um mesmo


nome, desde que elas no estejam compartilhando o mesmo
escopo. A denio dos blocos ajuda a tornar o programa mais
legvel e a utilizar menos memria porque as variveis somente
so declaradas no momento que sero utilizadas.

84

prog_orient_objetos.indb 84

2/7/2007 16:44:43

Programao Orientada a Objeto

Estrutura de controle para processamento condicional


Em Java a estrutura condicional se seno possui a sintaxe
mostrada abaixo:
if (expresso)
comando ou { bloco }
else // opcional
instruo ou { bloco } // opcional

Vamos trabalhar com alguns exemplos de programas envolvendo


estrutura condicional.

ATENO: quando houver


mais de 1 comando ou
linha de instruo dentro
do if ou do else , voc deve
delimitar o inicio e o m
desse bloco de instrues
com { (abre chave) e }
(fecha chave)

Estrutura condicional simples


se numero > 20 ento
numero  numero/2
m-se

Em Java a sintaxe dessa estrutura condicional simples a


seguinte:
if (numero > 20)
numero = numero / 2;

Note que a condio ou expresso lgica depois do if est


envolvida entre parnteses. Toda a condio depois de um if deve
obrigatoriamente estar entre parnteses. Nesse exemplo temos
somente uma instruo dentro do if:

numero = numero /2 .

Nesse caso, no necessrio delimitar o bloco de instrues


dentro do if com { } (abre e fecha chave). A estrutura de controle
if em Java no precisa ser fechada ou terminada.

Unidade 5

prog_orient_objetos.indb 85

85

2/7/2007 16:44:43

Universidade do Sul de Santa Catarina

Estrutura condicional composta


se numero > 20 ento
numero  numero/27
seno
numero  numero/4
m-se

Em Java, a sintaxe dessa estrutura condicional composta a


seguinte:
if (numero > 20)
numero = numero / 2;
else
numero = numero / 4;

Nesse caso, tambm no necessrio delimitar o bloco de


instrues tanto dentro do if como dentro do else com { } (abre
e fecha chave), pois tanto dentro de um como dentro de outro s
existe uma linha de instruo.

Quando isso ser necessrio?

Observe o mesmo exemplo estendido:


if (numero > 20){
numero = numero / 2;
valor=valor + numero;
}else
numero = numero / 4;

Nesse caso, dentro da instruo if temos duas instrues agora.


Quando existirem dentro de um if ou dentro de um else existir
mais de uma instruo, voc deve colocar essas instrues dentro
de um bloco delimitado por { } (abre e fecha chave).

86

prog_orient_objetos.indb 86

2/7/2007 16:44:43

Programao Orientada a Objeto

Exemplo de um algoritmo completo em pseudocdigo:


Incio
NOTA1, NOTA2, NOTA3, MEDIA: numrico
Leia NOTA1, NOTA2, NOTA3
MEDIA  (NOTA1 + NOTA2 + NOTA 3)/3
se MEDIA > 7.0 ento
escreva A mdia maior que 7.0
seno se MEDIA = 7.0 ento
escreva A mdia igual a 7.0
seno se MEDIA < 7.0 ento
escreva A mdia menor a 7.0
Fim

Esse algoritmo na linguagem Java ca assim:


0 import javax.swing.*;
1 class Media{
2 public static void main(String args[])
3 {
4 double NOTA1, NOTA2, NOTA3, MEDIA;
5 NOTA1=Double.parseDouble(JOptionPane.showInputDialog(Entre com a Nota 1));
6 NOTA2= Double.parseDouble(JOptionPane.showInputDialog(Entre com a Nota 2));
7 NOTA3= Double.parseDouble(JOptionPane.showInputDialog(Entre com a Nota 3));
8 MEDIA=(NOTA1+NOTA2+NOTA3)/3;
9 if (MEDIA > 7.0)
10

JOptionPane.showMessageDialog(null,A mdia maior que 7.0);

11 else
12

if (MEDIA = = 7.0)

13
14

JOptionPane.showMessageDialog(null,A mdia igual a 7.0);


else

15

JOptionPane.showMessageDialog(null,A mdia menor que 7.0);

16

System.exit(0);

17 }
18 }

Unidade 5

prog_orient_objetos.indb 87

87

2/7/2007 16:44:43

Universidade do Sul de Santa Catarina

Vamos analisar linha a linha:

Java possui uma biblioteca de


classes que esto prontas e
disponveis para os programadores
usarem em seus programas. Quando
voc instala o j2sdk essa biblioteca
de classes instalada tambm.

Linha 0: essa instruo informa ao compilador o path


(caminho) de algumas classes da biblioteca de classes
da linguagem Java usadas nesse programa. As classes
dessa biblioteca que estamos usando so: JOptionPane e
Double.

Linha 1: todo o programa desenvolvido em Java


chamado de classe ou class. Toda classe deve ter um
nome. O nome do nosso programa Media. Logo, a
primeira linha deve ser a declarao da classe (class)
seguido do nome do programa e o smbolo de incio da
class };

Linha 2: todo o programa (conjunto de instrues) feito


em Java deve estar dentro de pequenos mdulos tambm
conhecidos como mtodos. Pelo menos um mtodo deve
existir (a princpio) em nossos programas (class) Java.
Esse mtodo chamado de main (em ingls: principal).
Todo o conjunto de instrues que corresponde ao
programa deve estar (a princpio) dentro do mtodo
main e ele SEMPRE deve ser declarado da maneira
como est na linha 2.

Linha 3: instruo de incio do programa. O smbolo


que indica incio de bloco em Java {.

Linha 4: declarao de quatro variveis de memria do


tipo double (real).

Linha 5: instruo de entrada de dados em Java.


Programamos uma instruo de entrada de dados em
Java com a JOptionPane.showInputDialog (Entre com
a Nota 1). Essa instruo faz com que aparea uma

88

prog_orient_objetos.indb 88

2/7/2007 16:44:43

Programao Orientada a Objeto

janelinha ou caixa de dilogo na tela com um campo


para o usurio do programa digitar a primeira nota.
Lembre-se que qualquer valor digitado nessa caixa de
dilogo sempre ser do tipo String. Se o valor do tipo
String, ento ele no pode ser armazenado, atribudo
diretamente a varivel NOTA1. Por causa disso,
programamos a instruo Double.parseDouble(..) que
ir converter o tipo do dado digitado na caixa de dilogo
para o tipo double (real). Depois da nota ser convertida
para doubl, ela pode ser armazenada na varivel
NOTA1 que s aceita dados do tipo double.


Linhas 6 e 7: a mesma explicao se repete para as linhas


4 e 5.

Linha 8: clculo da mdia e atribuio da mdia a


varivel MEDIA.

Linha 9: comeo da instruo if que testar as trs


possibilidades da varivel MEDIA, se a varivel
MEDIA for maior que 7.

Linha 10: executado somente essa instruo que


escreve na tela a frase: A mdia maior que 7.0. A
instruo de escrita ou sada de dados em Java que
estamos utilizando : JOptionPane.showMessageDialog
(null,A mdia maior que 7.0). Ela faz com que
aparea na tela uma janelinha ou caixa de dilogo com a
frase que foi programada entre .

Linhas 11 a 15: segue com as outras possibilidades de


vericao de MEDIA

Linha 16: instruo do mtodo main }.

Unidade 5

prog_orient_objetos.indb 89

89

2/7/2007 16:44:43

Universidade do Sul de Santa Catarina

Linha 17: instruo de m da class }.

Estrutura de controle para processamento com repetio


1. enquanto/faa/m-enquanto
Em Java a estrutura enquanto/faa/m-enquanto possui a
sintaxe mostrada abaixo:
while (expresso)
instruo ou { bloco }

Na sintaxe de Java essa estrutura no tem o comando equivalente


ao faa e nem ao m-enquanto.
Voc j estudou que nesse tipo de estrutura de repetio a
expresso ou condio lgica avaliada uma vez antes da
execuo da primeira instruo. Caso seja verdadeira, a instruo
ou bloco executado. Ao nal da instruo ou bloco, o uxo
de execuo do programa volta (loop) e a expresso avaliada
novamente. Se for necessrio mais de uma instruo, ser preciso
colocar o bloco das instrues entre { } .
Vamos trabalhar com um exemplo de programa envolvendo
estrutura de repetio.
Incio
NOME: literal
NUMALUNOS: numrico
NUMALUNOS  1
enquanto NUMALUNOS <= 100 faa
leia NOME
escreva Aluno cadastrado: NOME
{incrementa-se a varivel NUMALUNOS a cada repetio}
NUMALUNOS  NUMALUNOS + 1
m-enquanto
Fim

Em Java a implementao desse programa que utiliza estrutura


de repetio a seguinte:
90

prog_orient_objetos.indb 90

2/7/2007 16:44:43

Programao Orientada a Objeto

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

import javax.swing.*;
class Alunos{
public static void main(String args[])
{
String nome;
int NUMALUNOS;
NUMALUNOS = 1;
while (NUMALUNOS <= 100) {
NOME=JOptionPane.showInputDialog(Entre com o Nome);
JOptionPane.showMessageDialog(null,Aluno cadastrado+NOME);
//incrementa-se a varivel NUMALUNOS a cada repetio
NUMALUNOS = NUMALUNOS + 1;
}
System.exit(0);
}
}

Observe que depois do while temos a condio ou


expresso lgica que ser avaliada e ela est entre
parnteses. Toda a condio depois de um while deve estar,
OBRIGATORIAMENTE, entre parnteses.
Dentro da instruo while existem quatro instrues, ou seja,
existe mais de uma instruo a ser repetida 100 vezes, portanto,
essas instrues devem estar entre { }, que delimitam o incio e o
m de bloco.
Vamos analisar linha a linha:


Linha 1: Essa instruo serve para informar ao


compilador, o caminho ou diretrio onde algumas class
usadas no programa, se encontram.

Linha 2: declarao da class. O nome da class Alunos.

Linha 3: declarao do mtodo main. Lembre-se que


todas as instrues do nosso programa estaro a princpio
dentro desse mtodo main.

Linha 4: Incio do mtodo main {. Esse smbolo de


inicio poderia estar no nal da linha 3.

Unidade 5

prog_orient_objetos.indb 91

Lembre-se que class


sinnimo de programa
em Java.

91

2/7/2007 16:44:44

Universidade do Sul de Santa Catarina

Linha 5: declarao de uma varivel de memria do tipo


String (literal).

Linha 6: declarao de uma varivel de memria do tipo


int (inteiro).

Linha 7: a varivel NUMALUNOS inicializada, ou


seja, recebe o valor inicial 1;

Linha 8: a condio (NUMALUNOS <= 100)


avaliada. Se ela resultar no valor lgico true (verdadeiro),
sero executadas as quatro instrues seguintes (linhas
9,10,12). Observe que, como existem mais de uma
instruo dentro da estrutura de repetio, elas esto
delimitadas por { }.

Linha 11: essa instruo no ser compilada porque est


precedida do smbolo de comentrio //. Tudo o que est
depois desse smbolo ignorado pelo compilador.

Linha 13: m do bloco de instrues da estrutura de


repetio.

Linha 14: instruo de m do mtodo main }.

Linha 15: instruo de m do programa }.

2. para/faa/m-para-faa
Em Java a estrutura para/faa/m-para-faa possui a sintaxe
mostrada abaixo:
for (inicializao da varivel de controle ; condio de repetio ;
incremento da varivel de controle)
instruo ou { bloco }

Esse tipo de estrutura de repetio, conhecida tambm como


repetio controlada, deve ser usada quando se sabe o nmero
exato de vezes que uma instruo ou bloco de instrues deve ser
executado (repetido).
92

prog_orient_objetos.indb 92

2/7/2007 16:44:44

Programao Orientada a Objeto

Depois do for esto as informaes para controle dessa repetio.


So trs blocos de informaes separados por ; (ponto e vrgula).
O primeiro responsvel por declarar e inicializar a varivel de
controle usada para controlar essa repetio, por exemplo, int i=1.
A varivel de controle do tipo int, se chama i e inicializada
com o nmero 1.
O segundo trata da prpria condio de repetio, por exemplo,
i<=100. Isso signica que enquanto a varivel i for menor ou igual
a 100 a instruo ou bloco ser executado. (repetido).
O terceiro trata do incremento (soma) da varivel de controle a
cada vez que uma instruo ou bloco for executado, por exemplo,
i++. Essa instruo equivale a i=i+1, ou seja, a cada vez que a
instruo ou bloco for executado, a varivel i incrementada em 1.
Vamos trabalhar com um exemplo de programa envolvendo
estrutura de repetio controlada.
Incio
para I de 1 at 100 passo 1 faa
leia NOME
escreva Aluno cadastrado: NOME
m-para
Fim

Em Java, a implementao desse programa que utiliza essa


estrutura de repetio a seguinte:
1 import javax.swing.*;
2 class Repete{
3
public static void main(String args[])
4
{
5
String NOME;
6
for (int I=1; I<=100 ; I++)
7
{
8
NOME=JOptionPane.showInputDialog(Entre com o Nome);
9
JOptionPane.showMessageDialog(null,Aluno cadastrado+NOME);
10
}
11
}
12 }

Unidade 5

prog_orient_objetos.indb 93

93

2/7/2007 16:44:44

Universidade do Sul de Santa Catarina

Sntese
Nessa unidade voc avanou um pouco mais e passou a
desenvolver programas com controle de uxo de execuo,
ou seja, usando estruturas que controlam o uxo de execuo
dos programas como a estrutura se (if), a estrutura enquanto
(while) e a estrutura para-faa (for). Com elas voc ir conseguir
desenvolver a maioria dos programas.

94

prog_orient_objetos.indb 94

2/7/2007 16:44:44

Programao Orientada a Objeto

Atividades de auto-avaliao
1) Desenvolver em Java todos os exerccios de auto-avaliao da seo 2,
da Unidade 5, da disciplina de Lgica de Programao I (Exerccios com
estrutura condicional).

Unidade 5

prog_orient_objetos.indb 95

95

2/7/2007 16:44:44

Universidade do Sul de Santa Catarina

2) Desenvolver em Java todos os exerccios de auto-avaliao da Unidade


6, da disciplina de Lgica de Programao I (Exerccios com estrutura
de repetio).

96

prog_orient_objetos.indb 96

2/7/2007 16:44:44

Programao Orientada a Objeto

Saiba mais
Tutorial sobre Variveis primitivas e Controle de uxo
http://www.caelum.com.br/download/fj-joo/fj-2.pdf

Unidade 5

prog_orient_objetos.indb 97

97

2/7/2007 16:44:44

prog_orient_objetos.indb 98

2/7/2007 16:44:44

UNIDADE 6

Desenvolvendo programas
modularizados em Java

Objetivos de aprendizagem


Rever o conceito de modularizao de programas.

Entender o conceito de procedimento.

Implementar programas modularizados em Java.

Seo de estudo
Seo 1 Modularizao de programas em Java

prog_orient_objetos.indb 99

2/7/2007 16:44:44

Universidade do Sul de Santa Catarina

Para incio de conversa


Voc chegou ao nal das unidades relacionadas especicamente
linguagem Java nessa disciplina. At o momento, voc aprendeu
todas as informaes bsicas, porm muito importantes sobre
a linguagem Java. Isso permitir que voc entenda e aplique
(desenvolvendo programas) os conceitos do paradigma de
programao orientado a objeto o qual veremos na prxima
unidade.
Na disciplina de Lgica II, voc estudou como modularizar
programas somente atravs de funes. Para completar a parte
prtica mais intensa dessa disciplina, voc estudar agora, nesta
unidade, como modularizar programas em Java e tambm
uma nova maneira de modularizar um programa atravs de
procedimentos. Vamos continuar?

SEO 1 - Modularizao de programas em Java


Na Unidade 5 da disciplina de Lgica de Programao II, voc
estudou como modularizar programas. Vamos relembrar?
A modularizao importante porque divide o problema
(programa) em partes menores permitindo a reutilizao de
algumas partes do mesmo programa ou em outros programas. A
diviso de um programa em partes menores facilita a manuteno
do programa, uma vez que, se for necessrio alterar alguma parte
do cdigo, isso ser feito em uma s parte. Com a modularizao,
o programa ca mais legvel e organizado.
Em Lgica de Programao II voc viu que um programa pode
ser modularizado (dividido) em partes chamadas de funes e
que essas funes podem receber valores ou parmetros e retornar
algum valor tambm.
Isso est correto, mas agora voc vai aprender que um
programa pode tambm ser divido em partes conhecidas como
PROCEDIMENTOS.

100

prog_orient_objetos.indb 100

2/7/2007 16:44:45

Programao Orientada a Objeto

Portanto, um programa pode ser dividido em partes conhecidas


como FUNES e PROCEDIMENTOS.
O procedimento parecido com a funo, ou seja,
uma parte bem delimitada do programa e pode
receber valores como parmetros, mas ele NO PODE
RETORNAR NENHUM VALOR, enquanto que uma
funo SEMPRE deve retornar algum valor.

Partindo dessa diferena entre procedimento e funo voc deve


escolher como modularizar o seu programa. recomendado
colocar trechos de cdigo que envolvam clculos ou algum
processamento, onde sempre se chegue a um nico resultado
dentro de funes, j que funo, sempre deve retornar um
nico valor. Exemplo: soma de dois nmeros, clculo da rea do
retngulo, vericar se um determinado valor existe num vetor,
etc. Os demais trechos de cdigo, nos quais no se acha um nico
valor, devem ser colocados dentro de procedimentos. Exemplo:
escrever na tela um resultado ou frase, etc.
Um programa pode ser modularizado com procedimento e
funes juntos. Vamos demonstrar isso utilizando o exemplo da
Unidade 5 da disciplina de Lgica II. Mas, dessa vez, vamos
implementar direto na linguagem Java.
import javax.swing.*;
class Calcula{
public static void main(String args[])
{
int n1,n2, resultado;
n1=Integer.parseInt(JOptionPane.showInputDialog(Entre com o Numero 1));
n2=Integer.parseInt(JOptionPane.showInputDialog(Entre com o Numero 2));
resultado = soma (n1,n2);
JOptionPane.showMessageDialog(null,Resultado+resultado);
}
public static int soma(int n1, int n2)
{
return n1 + n2;
}
}

Unidade 6

prog_orient_objetos.indb 101

101

2/7/2007 16:44:45

Universidade do Sul de Santa Catarina

Vamos analisar linha a linha:

Pacote ou package o nome


dado ao diretrio ou pasta onde as
classes da biblioteca de classes da
linguagem esto agrupadas. Elas
so agrupadas por funcionalidades
em comum em pacotes com nomes
determinados. Exemplos: Classes
que representam objetos grcos
como janelas, botes, barras esto
agrupados no pacote javax.swing.

Linha 1: Essa instruo serve para informar ao


compilador o caminho, diretrio ou pacote (package)
onde algumas class usadas no programa se encontram.

Linha 2: declarao da class Calcula.

Linha 3: declarao do mtodo main. Observe que


algumas instrues do programa esto dentro do mtodo
main (linha 5 a linha 9) e que existe um outro mtodo
nessa classe cujo nome soma e que contem outras
instrues. Portanto, nessas classes existem dois mtodos:
main e soma. Qual deles ser chamado automaticamente
quando esse programa for executado? O mtodo main.
Ele o mtodo que chamado primeiramente, mesmo
que existam outros mtodos na classe.

Linha 4: Incio do mtodo main {.

Linha 5: declarao de trs variveis de memria do int.

Linha 6: entrada de dados do primeiro nmero e


armazenamento na varivel n1.

Linha 7: entrada de dados do segundo nmero e


armazenamento na varivel n2;

Linha 8: ATENO para essa instruo. Nela est


sendo chamada, invocada a funo soma. Chamamos
uma funo pelo prprio nome dela. Aps o nome,
deve vir abre e fecha parnteses ( ). Se a funo estiver
esperando valores (veja na linha 12, a funo est
esperando dois valores do tipo int) eles devem ser
passados para a funo e isso deve ser feito dentro dos
parnteses. Isso se chama passagem de parmetros. o
que est sendo feito nessa linha, logo depois da chamada
da funo abertos parnteses e dois valores separados
por vrgula, so passados para a funo soma. So os
valores que foram digitados e armazenados nas variveis
n1 e n2. Vamos supor que o usurio do programa digitou

102

prog_orient_objetos.indb 102

2/7/2007 16:44:45

Programao Orientada a Objeto

o valor 2 (armazenado em n1) e o valor 3 (armazenado


em n2), ento so esses os valores que sero passados para
a funo soma e armazenados RESPECTIVAMENTE
nas variveis locais n1 e n2 da funo soma. Como uma
funo que est sendo chamada e uma funo SEMPRE
retorna um valor, ela NUNCA deve ser chamada
isolada numa linha de programa e sim, precedida de
uma instruo de atribuio como nessa linha, onde o
resultado da chamada da funo est sendo armazenado
na varivel resultado.


Linha 9: instruo de sada de dados. O contedo da


varivel resultado impresso na caixa de dilogo.

Linha 10: instruo de m do mtodo main }

Linha 11: linha em branco. opcional. Recomenda-se


para o cdigo car mais legvel.

Linha 12: declarao da funo soma. Java no usa a


palavra function para declarar uma funo. Toda funo
comea com a palavra function seguido do tipo de dado
que est sendo retornado mais o nome da funo. Como
essa funo soma dois dados inteiros, o tipo de dado
do resultado da soma tambm inteiro, por isso, logo
depois de function vem o tipo int, seguido do nome da
funo. A funo soma, espera receber dois valores ou
parmetros. Quando uma funo recebe parmetros,
eles devem ser recebidos, armazenados em variveis de
memria declaradas dentro dos parnteses. Nesse caso,
a funo soma recebe dois parmetros ou valores. O
primeiro ser armazenado dentro da varivel local n1 e
o segundo dentro da varivel local n2. Deve-se repetir
o tipo de cada varivel declarada dentro dos parnteses.
As variveis declaradas dentro de um mtodo, seja
ele funo ou procedimentos, so chamadas variveis
LOCAIS, ou seja, elas s podem ser acessadas dentro do
prprio mtodo onde foram declaradas. As variveis n1
e n2 do mtodo main so diferentes das variveis n1 e
n2 da funo soma. Qualquer varivel declarada dentro
do mtodo main no pode ser usada pela funo soma e
vice-versa.
Unidade 6

prog_orient_objetos.indb 103

103

2/7/2007 16:44:45

Universidade do Sul de Santa Catarina

Linha 13: incio da funo {.

Linha 14: nessa linha as variveis n1 e n2 so somas e


o resultado da soma retornado para a linha dentro do
mtodo main que chamou a funo soma, no caso, linha
8. Esse valor retornado ser armazenado na varivel
resultado. Uma funo sempre deve retornar UM E
SOMENTE UM valor. Para retornar um valor use a
palavra return.

Linha 15: m da funo }.

Linha 16: m da classe }. Todos os mtodos de um


programa sejam eles procedimentos e funes, devem
estar dentro de uma classe, ou seja, devem estar
implementados antes do m da classe.

Onde podemos implementar um procedimento nesse


mesmo programa?

Voc j observou que um procedimento um bloco de programa


parecido com uma funo, mas ele no retorna nenhum valor.
Ento, vamos pensar. No programa mencionado, qual a parte que
pode ser modularizada em um procedimento?
A sada de dados, ou seja, a linha 9.
Vamos refazer o cdigo anterior, agora com um procedimento.

104

prog_orient_objetos.indb 104

2/7/2007 16:44:45

Programao Orientada a Objeto

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

Vamos analisar algumas linhas que mudaram nesse programa:


Nessa nova verso do programa, o procedimento chamado
imprime est sendo chamado na linha 9. Ao invs de programar
a instruo de sada de dados para mostrar na tela a palavra
Resultado seguido do contedo da varivel de memria
resultado, chamado o procedimento imprime e passado para
ele dois valores ou parmetros: a palavra Resultado (note que a
palavra est entre porque um valor literal do tipo String) e o
varivel resultado (onde est armazenado o resultado da soma).
Esses dois parmetros so recebidos pelo procedimento imprime
na linha 17 e armazenados respectivamente na varivel local do
tipo String legenda e na varivel local do tipo int chamada valor.
Na linha 18 est o smbolo de incio do procedimento {.
Na linha 19 est a instruo de sada de dados JOptionPane.
showMessageDialog (null, legenda + valor) que mostrar na tela o
contedo da varivel legenda seguido do contedo da varivel valor.

Unidade 6

prog_orient_objetos.indb 105

105

2/7/2007 16:44:45

Universidade do Sul de Santa Catarina

Qual o contedo da varivel legenda?

A palavra Resultado que ser passada como parmetro para o


procedimento imprime e armazenada na varivel local do tipo
String, chamada legenda.
Qual o contedo da varivel valor?

O valor armazenado na varivel resultado no mtodo main()


que ser passado como parmetro para o procedimento imprime
e armazenado na varivel local do tipo int chamada valor. No
sabemos qual valor ser. Isso depender na entrada de dados do
usurio do programa, mas sabemos que ser o resultado da soma
de dois valores.
Na linha 20, est o smbolo de m do procedimento }.
OBSERVE o cabealho da definio do procedimento
na linha 17. Qual a diferena para o cabealho da
definio da funo na linha 12? No necessrio
olhar os parmetros!

A diferena que, como uma funo SEMPRE deve retornar


um valor, o tipo do valor retornado deve estar especicado no
cabealho da funo. Veja na linha 12, o tipo do valor retornado
pela funo soma int, pois os dois valores somados (n1 e n2)
tambm so int. O tipo de retorno da funo deve estar antes do
nome da funo.
Como o procedimento NUNCA retorna um valor, a palavra void
deve ser especicada no lugar do tipo, ou seja, antes do nome do
procedimento.

106

prog_orient_objetos.indb 106

2/7/2007 16:44:46

Programao Orientada a Objeto

Relembrando: Como identificar em um cdigo Java o


que funo e o que procedimento?

Olhe o cabealho de denio de ambos. A funo deve sempre


ter um tipo de retorno e o procedimento sempre deve ter a
palavra void que indica que nenhum valor ser retornado.

Sntese
Nessa unidade voc aprendeu a desenvolver programas
modularizados, isto , divididos em mdulos, chamados de
procedimentos ou funes. Aprendeu, tambm, a diferena entre
um procedimento e uma funo. Esse entendimento ser muito
importante para as unidades futuras, principalmente quando
entrarmos na unidade de orientao a objetos. Modularizar
programas importante porque facilita a manuteno do cdigo
(alteraes futuras) e torna os programas mais legveis, mais
organizados.

Unidade 6

prog_orient_objetos.indb 107

107

2/7/2007 16:44:46

Universidade do Sul de Santa Catarina

Atividades de auto-avaliao
1) Faa um programa em Java que leia 3 nmeros e calcule a sua mdia.
O programa deve ser modularizado. Utilize uma funo para calcular
e retornar a mdia dos nmeros. Essa funo deve receber os trs
nmeros como parmetro.

2) Crie um programa em Java que leia o raio de uma esfera (do tipo real) e
passe esse valor para a funo volumeEsfera. Essa funo deve calcular
o volume da esfera na tela e retornar o seu valor.
Para o clculo do volume deve ser usada a seguinte frmula:
Volume = (4.0 / 3.0) * PI * raio3

108

prog_orient_objetos.indb 108

2/7/2007 16:44:46

Programao Orientada a Objeto

3) Faa um programa em Java em que o usurio entre com um valor de


base e um valor de expoente. O programa deve calcular a potncia. O
programa deve ser modularizado.
Voc deve decidir se a subrotina ser um procedimento ou uma funo.
A formula : base expoente

Unidade 6

prog_orient_objetos.indb 109

109

2/7/2007 16:44:46

prog_orient_objetos.indb 110

2/7/2007 16:44:46

UNIDADE 7

Introduo Programao
Orientada a Objeto (POO)

Objetivos de aprendizagem


Conhecer a histria do paradigma de programao


orientada a objetos.

Aprender o conceito de Classe e Objeto.

Implementar uma Classe e criar Objetos a partir dela.

Sees de estudo
Seo 1 Paradigma de Programao Orientada a Objeto
Seo 2 Implementando uma Classe e criando Objetos a
partir dela

prog_orient_objetos.indb 111

2/7/2007 16:44:46

Universidade do Sul de Santa Catarina

Para incio de conversa


Nessa unidade voc ser apresentado ao mundo da orientao a
objetos. A orientao a objetos uma maneira (paradigma) de se
pensar e desenvolver programas. Ao desenvolver um programa
orientado a objeto, voc deve pensar em como a situao que o
programa est automatizando funciona no mundo real, ou seja,
quais os objetos envolvidos na situao e como eles se relacionam.
A partir disso voc deve se preocupar em modelar e implementar
o programa de maneira que ele espelhe a situao existente no
mundo real, ou seja, deve criar e manipular as representaes de
objetos existentes no mundo real.
Nessa unidade, voc aprender um pouco da histria, dos
objetivos da orientao a objetos e aprender dois conceitos mais
importantes da orientao a objetos: Classe e Objeto.
Links Interessantes
http://www.vivaolinux.com.br/artigos/impressora.
php?codigo=2501

Entenda paradigma de
programao como um estilo,
uma maneira de se desenvolver
um programa. Existem outros
paradigmas de programao como
veremos adiante.

SEO 1 - Paradigma de Programao Orientada


a Objeto
Paradigma um conjunto de regras que estabelecem
fronteiras e descrevem como resolver os problemas
dentro dessas fronteiras. Os paradigmas influenciam
nossa percepo; ajudam-nos a organizar e coordenar
a maneira como olhamos para o mundo. (Definio
literal)

112

prog_orient_objetos.indb 112

2/7/2007 16:44:46

Programao Orientada a Objeto

Um pouco de histria
O conceito de programao orientada a objeto no algo novo.
No nal da dcada de 60, a linguagem Simula67, desenvolvida na
Noruega, introduzia conceitos hoje encontrados nas linguagens
orientadas a objetos. Em meados de 1970, o Centro de Pesquisa
da Xerox (PARC) desenvolveu a linguagem Smalltalk, a primeira
totalmente orientada a objetos. No incio da dcada de 80, a
AT&T lanou a Linguagem C++, uma evoluo da linguagem de
programao C em direo orientao a objetos.
Atualmente, um grande nmero de linguagens incorpora
caractersticas de orientao a objeto, tais como Java, Object
Pascal, Python , etc.

Orientao a objeto Conceitos bsicos


O paradigma de programao orientada a objeto baseado em
alguns conceitos que denem uma forma de criar programas para
computadores.
A losoa principal desse paradigma de programao
solucionar um problema (via programao) atravs da
representao computacional dos objetos existentes nesse
problema (objetos do mundo real), usando para isso os conceitos
mencionados acima. Com isso, essa maneira de se desenvolver
programas ca mais prxima das situaes, dos problemas como
eles acontecem no mundo real.
Ser um pouco difcil entender todas as vantagens de OO
(Orientao a Objetos). Agora, portanto, vamos mencionar
apenas duas:


mais fcil conversar com o cliente que pediu o software


se falarmos com objetos que existem no mundo dele (o
mundo do software ca mais perto do mundo real).

O software feito com OO pode ser feito com


maior qualidade e pode ser mais fcil de escrever e,
principalmente, alterar no futuro.

Unidade 7

prog_orient_objetos.indb 113

113

2/7/2007 16:44:46

Universidade do Sul de Santa Catarina

J que a programao orientada a objeto se baseia no


conceito de objetos vamos entender um pouco mais
sobre objetos?

O nosso mundo est repleto de objetos, sejam eles concretos


ou abstratos. Qualquer tipo de objeto possui atributos
(caractersticas) e comportamentos que so inerentes a esses
objetos.

Exemplos de objetos CONCRETOS


1) CANETA
Atributos de qualquer Caneta
- altura
- espessura
- cor
Nesse caso, o nosso objeto Caneta tem os seguintes
dados em cada caracterstica:
- altura: 10 cm
- espessura: 2 cm
- cor: rosa
Comportamentos de qualquer Caneta
- desenhar
- etc.
2) PESSOA
Atributos de qualquer Pessoa
- altura
- peso
- idade
Nesse caso, o nosso objeto Pessoa tem os seguintes
dados em cada caracterstica:
- altura: 1,80
- peso: 70
- idade: 25
Comportamentos de qualquer Pessoa
- andar
- sorrir
- ler
- etc.

114

prog_orient_objetos.indb 114

2/7/2007 16:44:46

Programao Orientada a Objeto

Exemplos de objetos que NO SO CONCRETOS:


1) RETNGULO
Atributos de qualquer Retngulo
- base
- altura
Nesse caso, o nosso objeto Retngulo tem os seguintes
dados em cada caracterstica:
- base: 10
- altura: 5
Comportamentos de qualquer Retangulo
- calcular rea
- calcular permetro
- etc.
2) DISCIPLINA
Atributos de qualquer Disciplina
- cdigo da disciplina
- nome da disciplina
Nesse caso, o nosso objeto Disciplina tem os seguintes
dados em cada caracterstica:
- cdigo da disciplina: 1
- nome da disciplina: lgebra Linear
Comportamentos de qualquer Disciplina
- listar o nome da disciplina
- etc.

Para usar objetos na programao, primeiro precisamos


distinguir entre um objeto real e a representao de um objeto.
No desenvolvimento de programas, sempre trabalhamos com
representaes de objetos. Essa representao precisa reetir os
objetos reais, ou seja, objetos existentes no problema do mundo
real que queremos solucionar.

Disciplina nesse
caso refere-se a uma
disciplina oferecida
numa universidade.

Essa operao
car mais clara
(concreta), quando
avanarmos
um pouco mais
nos conceitos
de orientao a
objetos.

Por exemplo, um sistema de conta corrente no manipula


diretamente os clientes, contas e cheques (esses so os objetos
reais do problema).

Unidade 7

prog_orient_objetos.indb 115

115

2/7/2007 16:44:47

Universidade do Sul de Santa Catarina

Em vez disso, o software deve criar representaes desses objetos,


com os mesmos atributos e comportamentos dos objetos do
mundo real. Essa representao chamada de ABSTRAO.
Segundo o dicionrio Aurlio
abstrao signica: Ato de
separar mentalmente um ou mais
elementos de uma totalidade
complexa (coisa, representao,
fato), os quais s mentalmente
podem subsistir fora dessa
totalidade.

Representao dos objetos

Objetos reais

Cliente

Conta

Cliente

Agncia

Conta

Agncia

Vamos aprender mais sobre representao de


objetos?

Para entender isso, vamos voltar ao exemplo do sistema de conta


de corrente.
No mundo real existem vrios objetos Cliente, vrios objetos
Conta e vrios objetos Agncia (pode ser somente um), ou seja,
muito provavelmente no existir somente um cliente, uma conta
e uma agncia.
Todos os objetos cliente possuem o mesmo conjunto de atributos,
por exemplo, todos os objetos cliente possuem nome e endereo,
assim como todos os objetos conta possuem um nmero, um
saldo, um histrico de transaes e todos os objetos agncia
possui um nmero e um nome.
Assim como os atributos, todos os objetos de um mesmo tipo
compartilham do mesmo conjunto de comportamentos, por
exemplo, todos os objetos Cliente fazem depsitos e saques.
Apesar de cada objeto ter o mesmo conjunto de atributos, cada
objeto possui valores prprios para cada atributo, ou seja, cada
objeto nico.

116

prog_orient_objetos.indb 116

2/7/2007 16:44:47

Programao Orientada a Objeto

Essa explicao para objetos do mundo real vale para quando


trabalhamos com a representao desses objetos no contexto de
desenvolvimento desse sistema (programao).
Portanto, podemos perceber que o sistema de conta corrente
(programa de conta corrente) ser composto de vrios objetos,
cada qual com um conjunto de atributos e comportamento em
comum (se forem do mesmo tipo) e com valores prprios nos seus
atributos. A gura abaixo ilustra os vrios objetos cliente, conta e
agncia.

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

O termo instncia freqentemente usado para descrever um


objeto com valores prprios em seus atributos. Por exemplo,
observe a gura acima:


Ana uma instncia de Cliente

9916 uma instncia de Conta

Todo objeto deve ter:


1. Estado
2. Comportamento
3. Identidade

Unidade 7

prog_orient_objetos.indb 117

117

2/7/2007 16:44:47

Universidade do Sul de Santa Catarina

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 modicaes de
estado e interaes com outros objetos.
O comportamento determinado pelo conjunto de operaes ou
mtodos que o objeto pode realizar. Operaes ou mtodos so
algo que voc pede para o objeto fazer, como fazer um depsito
(comportamento de qualquer objeto do tipo Conta).
Voc deve estar achando estranho: fazer um depsito
um comportamento de qualquer objeto do tipo
Conta? Isso mesmo!

Fazer depsito um comportamento de qualquer objeto do tipo


Conta e no de qualquer objeto do tipo Cliente, como voc deve
ter pensado a princpio.
Isso acontece porque h diferenas grandes quando pensamos no
comportamento de representaes de objetos, ou seja, objetos do
mundo do software.

118

prog_orient_objetos.indb 118

2/7/2007 16:44:47

Programao Orientada a Objeto

Ao identicar comportamentos de objetos do mundo do software


devemos levar em conta os seguintes princpios:


Primeiro princpio: no vamos modelar todo o


comportamento dos objetos. Exemplo: Clientes tomam
caf no mundo real, mas provavelmente no no software.

Segundo princpio: os comportamentos freqentemente


so assumidos por objetos diferentes. Exemplo: No
mundo real, quem faz um depsito? Um Cliente.

No software, quais objetos assumiriam a responsabilidade de


fazer um depsito? Objetos do tipo Conta.

Por que isso?

A primeira grande regra de programao Orientada a Objeto a


seguinte:
Comportamentos so associados aos objetos que
possuem os atributos afetados pelo comportamento.

Um depsito afeta duas coisas, do ponto de vista de um sistema


bancrio:


O saldo de uma conta.

O histrico de transaes feitas a uma conta.

Como se pode ver, o depsito afeta apenas atributos de uma


Conta. Portanto, esse comportamento est associado Conta e
no ao Cliente, embora, no mundo fsico, seja o Cliente que faz o
depsito.
Outros comportamentos associados aos objetos do tipo Conta:
fazer um saque, informar seu saldo, etc.

Unidade 7

prog_orient_objetos.indb 119

119

2/7/2007 16:44:47

Universidade do Sul de Santa Catarina

3) Identidade
Refere-se identicao do objeto. Como cada objeto nico,
ou seja, tem seus prprios valores nos atributos, ele deve ser
identicado por algum nome. Mesmo que seu estado seja
idntico ao de outro objeto ele tem identicao prpria.
A identicao do objeto do tipo Agncia mostrado na gura
abaixo Centro. Esse objeto poderia ter qualquer nome
identicando-o.
Centro:Agencia
nome: Centro
numero: 123

Agora voc j sabe que qualquer programa orientado a objeto


deve trabalhar com representaes de objetos que reitam as
caractersticas e comportamento de objetos do mundo real e j
aprendeu os principais conceitos relacionados a objetos.
Falta agora aprender como CRIAR a representao de
um objeto dentro de um programa.

No sistema de conta corrente foram identicados, a princpio, 3


tipos ou grupos de objetos: Cliente, Agncia e Conta.
Sabemos que podero existir vrios objetos de cada um desses
tipos e todos eles iro possuir o mesmo conjunto de atributos e
comportamentos do seu tipo.
Para criar uma representao de cada objeto dentro do programa,
devemos antes criar uma estrutura, uma espcie de molde ou
template que represente os atributos e comportamentos do tipo
do objeto.Essa estrutura chamada de classe.
Portanto, devemos ter uma classe Cliente, uma classe Agncia e
uma classe Conta.
a partir dessa estrutura conhecida como classe que iremos criar
as representaes de objetos que precisamos para desenvolver o
programa, ou seja, precisamos criar a estrutura (classe) apenas uma
vez e, a partir dela, sero criadas as representaes dos objetos.
120

prog_orient_objetos.indb 120

2/7/2007 16:44:48

Programao Orientada a Objeto

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.

Vamos aprender mais conceitos sobre Classes e Objetos?


Uma classe a descrio de atributos e comportamentos de
um grupo de objetos com propriedades similares (atributos) e
comportamento comum (operaes ou mtodos).
Por representar atributos e comportamento de um determinado
tipo de objeto que existe no mundo real, uma classe uma
abstrao da realidade, pois nela esto especicados somente
parte dos atributos e comportamentos de um objeto do mundo
real. Somente parte, porque no so todos os atributos e
comportamentos dos objetos do mundo real que interessam ao
sistema.
A gura a seguir, ilustra a representao grca das classes
do sistema de conta corrente. Na primeira parte da gura est
o nome da classe, na parte do meio, esto os atributos e, na
parte nal, est o comportamento (mtodos ou operaes).
Observe que a classe Conta e Agencia ainda no esto com
os comportamentos denidos. Faremos isso na medida que
avanarmos nos conceitos de OO.
Cliente

Conta

Agencia

nome: String
endereo: String
cpf: int

numero: int
saldo: double
transao: String

codigo: int
nome: String

alteraNome()
alteraEndereco()
alteraCpf()
forneceNome()
forneceEndereco()
forneceCpf()

Unidade 7

prog_orient_objetos.indb 121

121

2/7/2007 16:44:48

Universidade do Sul de Santa Catarina

Um objeto uma instncia de uma classe. Essa instncia possui


valores prprios em cada atributo denido na classe. As guras a
seguir ilustram a classe Cliente e os vrios objetos (instncias) da
classe Cliente.
Classe Cliente

Objetos (instncias) de Cliente

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

A notao que estamos utilizando para representar classes e


objetos a utilizada pela UML (Unied Modelling Language)
ou Linguagem de Modelagem Unicada. A UML no
uma linguagem de programao e sim, uma linguagem
composta de vrios diagramas (cada qual com seu conjunto de
smbolos grcos) que expressam como um sistema orientado
a objetos deve funcionar. Ela utilizada nas fases iniciais do
desenvolvimento de um software, ou seja, antes da programao
propriamente dita, com o objetivo de especicar e documentar
o funcionamento do sistema. O diagrama que iremos utilizar
o Diagrama de Classes que especica as classes do sistema e o
relacionamento entre elas.

122

prog_orient_objetos.indb 122

2/7/2007 16:44:48

Programao Orientada a Objeto

Agora que voc j estudou a diferena entre CLASSE


e OBJETO, vamos partir para a parte prtica, ou seja,
voc vai aprender a implementar (programar) uma
classe e a criar objetos a partir dela. Voc continuar
aprendendo outros conceitos nas prximas sees e
unidades, porm, para que os conceitos no fiquem
muito abstratos para voc, vamos ver como isso
funciona na prtica de maneira paralela.

Para nalizar essa seo vamos fazer uma pequena reviso:


Um programa orientado a objeto composto por vrios objetos
do mesmo tipo e de outros tipos que se relacionam. Chamamos
esses objetos do mundo do software de representaes de objetos.
Como num programa muito provavelmente existiro vrios
objetos do mesmo tipo, devemos criar uma estrutura ou template
que represente os atributos e comportamentos desses objetos do
mesmo tipo, essa estrutura chamada de classe. Portanto classe
uma estrutura a partir da qual os objetos (do software) so
criados.
Importante!
O entendimento dos conceitos de orientao a
objetos que j vimos e, dos demais que esto por
vir, so de vital importncia para o desenvolvimento
de programas orientado a objetos e sua utilizao
independe da linguagem utilizada para
implementao dos programas. Quer dizer que, para
desenvolver qualquer programa OO, preciso aplicar
esses conceitos na implementao do programa,
utilizando para isso, qualquer linguagem de
programao orientada a objetos.

Unidade 7

prog_orient_objetos.indb 123

123

2/7/2007 16:44:48

Universidade do Sul de Santa Catarina

SEO 2 - Implementando uma Classe e


Criando Objetos a partir dela
A implementao de uma classe s tem sentido se, no contexto
do desenvolvimento de um sistema orientado a objeto, for
identicada a necessidade de existncia de um conjunto de
objetos com atributos e comportamentos em comum.
A partir do momento que esses objetos com atributos e
comportamento em comum so identicados, j existe a
necessidade de criar a estrutura (classe) que os dena.
Nessa seo, voc ir aprender como implementar na linguagem
Java uma classe e como criar objetos (instncias) a partir dela.
Pode-se falar tambm no termo instanciar objetos a partir de
uma classe.
No iremos neste momento demonstrar o processo de
identicao de objetos num dado problema, isso ser feito nas
sees seguintes.
Veremos agora, como implementar a classe Cliente do Sistema de
Conta Corrente citado anteriormente e como criar objetos cliente
a partir dela.
A viso prtica desses dois conceitos (Classe e Objeto) facilitar o
entendimento dos demais conceitos.

Implementao da Classe Cliente


A seguir ser apresentada uma implementao resumida e mais
didtica da classe Cliente.
Didtica porque tem como objetivo
facilitar o entendimento nesse
primeiro momento.

124

prog_orient_objetos.indb 124

2/7/2007 16:44:48

Programao Orientada a Objeto

Linha 1 public class Cliente{


Linha 2
private String nome, endereco;
Linha 3
private int cpf;
Linha 4
Linha 5
public Cliente( ){
Linha 6
nome=;
Linha 7
endereo=;
Linha 8
cpf=0;
Linha 9
}
Linha 10
public void alteraNome(String snome){
Linha 11
nome=snome;
Linha 12
}
Linha 13
Linha 14
public void alteraEndereco(String sender){
Linha 15
endereco=sender;
Linha 16
}
Linha 17
Linha 18
public void alteraCpf(int icpf){
Linha 19
cpd=icpf;
Linha 20
}
Linha 21
public String forneceNome(){
Linha 22
return nome;
Linha 23
}
Linha 24
Linha 25
public String forneceEndereco(){
Linha 26
return endereco;
Linha 27
}
Linha 28
Linha 29
public int forneceCpf(){
Linha 30
return cpf;
Linha 31
}
Linha 32 }

Vamos analisar a implementao da classe Cliente linha a linha.


Relembrando: para desenvolver qualquer programa
voc deve editar o programa num editor de texto,
salv-lo num local conhecido e, logo aps, compil-lo.
O mesmo processo deve ser feito com as classes que
voc desenvolver daqui para frente. Detalhe: classes
que representam atributos e comportamento de
objetos NO SO executadas.

Unidade 7

prog_orient_objetos.indb 125

125

2/7/2007 16:44:48

Universidade do Sul de Santa Catarina

Linha 1: denio inicial da classe. Comea com a


palavra public (veremos mais adiante qual o signicado
dessa palavra) seguida da palavra class e seguida do
nome da classe.

Regras para Nomeao de Classes


Para se nomear classes, existem alguns requisitos que
devem ser observados:


Classes so nomeadas com um substantivo no singular

O nome de uma classe deve iniciar com a primeira letra


maiscula;

No devem ser utilizados smbolos de sublinhado (_) nomes compostos por mltiplas palavras so organizados
com todas as palavras juntas, onde a primeira letra de
cada uma fica em maiscula.

Exemplos: Aluno, Professor, FolhaPagamento.

Isso car mais claro no momento


da explicao da criao do objeto a
partir da Cliente.

Linhas 2 e 3: denio dos atributos denidos para


a classe. Na denio dos atributos deve-se utilizar a
palavra private (veremos mais adiante o signicado
dessa palavra) seguido do tipo de dado de cada atributo
e do nome do atributo. No caso da classe Cliente, os
dois atributos nome e endereo devem armazenar dados
do tipo String (literal) e o atributo cpf deve armazenar
valores do tipo int (numricos inteiros).

Regras para Definio de Atributos




Normalmente, atributos so colocados no incio da


definio da classe, depois do primeiro { . Tambm pode
ser colocados bem no final, antes do ltimo }.

Devem comear com letra minscula.

126

prog_orient_objetos.indb 126

2/7/2007 16:44:48

Programao Orientada a Objeto

Linha 5: depois da denio do nome da classe e


dos atributos da classe, segue-se a denio dos
comportamentos, no contexto da implementao,
conhecidos como mtodos. Por enquanto, os
comportamentos ou mtodos denidos para a
classe Cliente so simples. Na medida em que formos
avanando, mais comportamentos ou mtodos podero ser
implementados. No momento, implementamos sete mtodos:
Cliente( ), alteraNome( ), alteraEndereco( ) alteraCpf( ),
forneceNome( ), forneceEndereco( ) e forneceCpf.
O primeiro mtodo implementado se chama Cliente( ) e
se enquadra na categoria dos mtodos construtores. Um
mtodo construtor SEMPRE deve ter o mesmo nome da
classe e no deve especicar no cabealho nenhum tipo
de retorno, nem mesmo deve ser utilizada a palavra void
(o que acontece nos demais mtodos que no retornam
nada mtodos do tipo procedimento). Todo o mtodo
construtor s executado no momento em que um objeto
dessa classe criado (instanciado). Vamos saber mais
sobre mtodos construtores no momento da explicao da
criao de objetos. Saiba por enquanto que importante
(no obrigatrio) que cada classe tenha ao menos um
mtodo construtor implementado.

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.

Linhas 6 a 8: linhas de cdigo do mtodo construtor. O


que se pode programar dentro de um mtodo construtor?
Qualquer coisa que se quer que acontea quando um
objeto do tipo Cliente, no caso, for criado, porque o
cdigo que est dentro de um mtodo construtor
executado sempre que um objeto desse tipo for criado.
Porm, normalmente se programa para que os atributos
do objeto sejam inicializados. No caso do nosso
mtodo construtor, os atributos nome, endereo foram
inicializados com Strings vazias () e o atributo cpf com
o valor 0.

Linha 10: nessa linha est o comportamento ou mtodo


chamado alteraNome( ). Esse tipo de comportamento
tpico de qualquer objeto do tipo Cliente, pois todo

Unidade 7

prog_orient_objetos.indb 127

Fala-se em atributos
do objeto porque
tudo o que denido
na classe ser atributo
de comportamento de
qualquer objeto criado
(instanciado) a partir dela.

127

2/7/2007 16:44:48

Universidade do Sul de Santa Catarina

o cliente pode ter seu nome alterado. No caso de um


sistema OO, quem executa esse comportamento o
prprio objeto Cliente.
A implementao desse mtodo ou comportamento
feita atravs de um procedimento (veja que o tipo
de retorno void, ou seja, essa subrotina no retorna
nenhum valor) que recebe como parmetro o novo
nome do cliente. Esse valor recebido em uma varivel
de memria do tipo String que chamamos de snome. O
nome da varivel de memria que receber o novo valor
do atributo nome pode ser qualquer um, porm essa
varivel deve ser declarada como sendo do tipo String,
j que o valor dela ser atribudo ao atributo nome que
tambm do tipo String (prxima linha).

Programas com procedimento,


funes e passagem de parmetros
(valores) foram implementados na
ltima unidade.

Qualquer subrotina que retorne


algum valor chamada de funo.

Linha 11: atribuio do novo nome do cliente ao atributo


nome. O atributo nome recebe o contedo da varivel
snome, que contm o novo nome do cliente.

Linha 12: m do mtodo alteraNome( );

Linhas 14 a 16: implementao do mtodo ou


comportamento alteraEndereco(). Esse mtodo altera o
endereo de qualquer objeto Cliente.

Linhas 18 a 20: implementao do mtodo ou


comportamento alteraCpf(). Esse mtodo altera o cpf de
qualquer objeto Cliente.

Linha 21: nessa linha est o comportamento ou mtodo


chamado forneceNome( ). Esse tipo de comportamento
tpico de qualquer objeto do tipo Cliente, pois todo o
cliente pode ser capaz de fornecer seu nome. No caso de
um sistema OO, quem executa esse comportamento o
prprio objeto Cliente.
A implementao desse mtodo ou comportamento
feita atravs de uma funo (veja que o tipo de retorno
String) que retorna o nome do cliente, ou seja, o valor
armazenado no atributo nome do objeto Cliente.

128

prog_orient_objetos.indb 128

2/7/2007 16:44:49

Programao Orientada a Objeto

Linha 22: retorno (usar palavra return) do contedo do


atributo nome.

Linhas 25 a 27: implementao do mtodo ou


comportamento chamado forneceEndereco( ).

Linhas 29 a 31: implementao do mtodo ou


comportamento chamado forneceCpf( ).

Linha 32: nal da implementao da classe.

Depois de implementar a classe, voc deve compilar, mas no


deve executar. Esse tipo de classe no executvel, ela no possui
mtodo main ( ). Essa classe s possui a nalidade de ser uma
estrutura ou template para a criao de objetos desse tipo.

Criar objetos a partir da classe Cliente


Depois que a classe Cliente for implementada e compilada, ela
est pronta para ser usada, ou seja, possvel criar objetos do
tipo Cliente a partir dela.

Voc lembra que todos


os programas (classes)
desenvolvidos nas unidades
anteriores possuam mtodo
main( )? Toda a classe que
possui mtodo main( )
uma classe que pode ser
executada.

Abaixo est a implementao de uma classe que possui um


mtodo main( ), ou seja, uma classe executvel. Dentro
desse mtodo estamos criando um objeto do tipo Cliente e
manipulando esse objeto.
Mas o que de fato criar um objeto? Lembrese sempre: agora estamos falando de objetos no
contexto de um software. Voc entender isso nas
linhas seguintes.

Linha 1
Linha 2
Linha 3
Linha 4
Linha 5
Linha 6
Linha 7
Linha 8
Linha 9

public class UsaCliente{


public static void main(String args[]) {
Cliente c=new Cliente( );
c.alteraNome(Ana);
c.alteraEndereco(Rua A);
c.alteraCpf(1235);
System.out.println(c.forneceNome( ));
}
}

Unidade 7

prog_orient_objetos.indb 129

System.out.println ( )
uma instruo de sada
de dados. Ela uma
alternativa a instruo
JOptionPane.showMess
ageDialog(null,..) usadas
nas unidades anteriores.
Porm, essa instruo no
imprime o dado dentro de
uma caixa de dilogo e sim,
na janela do MS-DOS.

129

2/7/2007 16:44:49

Universidade do Sul de Santa Catarina

Vamos analisar a implementao da classe UsaCliente linha a linha:


Relembrando: para desenvolver qualquer programa
voc deve editar o programa num editor de texto,
salv-lo num local conhecido e logo aps compil-lo.
O mesmo processo deve ser feito com as classes que
voc desenvolver daqui para frente. Detalhe: classes
que representam atributos e comportamento de
objetos NO SO executadas.

Linha 1: denio inicial da classe. Comea com a


palavra public seguida da palavra class e seguida do
nome da classe.

Linha 2: denio do mtodo main( ). Essa denio


sempre a mesma utilizada nos programas anteriores.
Todo o programa que iremos implementar estar dentro
do mtodo main( ).

Linha 3: essa linha cria um objeto do tipo Cliente.

Criar um objeto alocar (reservar) um espao na


memria do computador para armazenar valores para
os atributos definidos na classe desse objeto.

A explicao de criar um objeto similar criao (declarao)


de uma varivel de memria. Quando declaramos uma varivel
de memria tambm estamos reservando espao na memria
para armazenar algum valor. Essa varivel de memria deve
ter um nome e deve ter um tipo de dados e nela s poder ser
armazenado valores desse tipo.
O mesmo acontece com a criao de um objeto. Ao criar um
objeto, precisamos dar um nome (identicao) para ele e, nesse
espao de memria que estamos declarando, s podero ser
armazenados valores correspondentes aos atributos denidos no
tipo (classe) desse objeto.
Essa explicao para criao de objeto simples e ser utilizada
no momento para facilitar seu entendimento. Posteriormente,
essa explicao ser renada.
130

prog_orient_objetos.indb 130

2/7/2007 16:44:49

Programao Orientada a Objeto

Portanto, sempre que se quer criar um objeto deve-se usar a


seguinte sintaxe:
Comando que
efetivamente aloca o
espao na memria
para o objeto

NomedaClasse nomedoobjeto = new nomedometodoconstrutordaclasse( );

Nome da Classe
a partir da qual o
objeto ser criado

Chamada do mtodo construtor


implementado na Classe. Tudo o que
estiver implementado nesse mtodo
ser executado nesse momento, ou seja,
no momento em que o objeto estiver
sendo criado.

Nome do objeto

Aps a execuo dessa linha, um objeto, ou seja, uma rea de


memria alocada.
Na instruo da linha 3, estamos criando um objeto chamado
c. Note cuja a sintaxe igual a denida acima para criao de
objetos. Sempre que um objeto criado, o mtodo construtor
denido na classe desse objeto chamado (invocado) e, tudo o
que est programado nesse mtodo, executado.
O que foi programado no mtodo construtor da classe Cliente?
A inicializao de todos os atributos do objeto Cliente, portanto,
ao criar o objeto cliente, todos os seus atributos j estaro
inicializados.
A gura abaixo ilustra de maneira simples o objeto alocado na
memria e seus atributos inicializados.

Memria
nome
endereco

Objeto C

cpf

Unidade 7

prog_orient_objetos.indb 131

131

2/7/2007 16:44:49

Universidade do Sul de Santa Catarina

A partir desse momento, poder ser chamado qualquer


comportamento ou mtodo denido na classe cliente. Isso ser
feito nas linhas seguintes.


Linha 4: depois que o objeto criado, podemos invocar


seus comportamentos ou mtodos. Nessa linha estamos
chamando o mtodo alteraNome(Ana) e passando
como parmetro o novo nome do cliente.
Observe que o mtodo est precedido do nome do objeto
e SEMPRE deve ser assim. Qualquer comportamento ou
mtodo deve ser chamado precedido do nome do objeto.
Quando se chama qualquer mtodo denido em
uma classe, o cdigo implementando nesse mtodo
executado. Nesse caso, o mtodo ir alterar o nome do
objeto c.

Qual o valor do atributo nome do objeto c ANTES da


chamada desse mtodo?
(String vazia) porque quando o objeto foi criado, esse valor
foi armazenado l. Isso aconteceu no momento que o mtodo
construtor foi chamado.
Qual o valor do atributo nome do objeto c DEPOIS da
chamada desse mtodo?
Ana porque foi esse o valor passado para o mtodo. Lembre-se
que o mtodo alteraNome(String snome) recebe um nome como
parmetro e, esse nome, armazenado no atributo nome.
Logo, aps a execuo dessa linha o objeto est com o seguinte
estado:
nome Ana
endereco
cpf

132

prog_orient_objetos.indb 132

2/7/2007 16:44:49

Programao Orientada a Objeto

Linha 5: chamada do mtodo alteraEndereco( ) que


ir alterar o endereo do objeto c. Logo aps a execuo
dessa linha, o objeto est com o seguinte estado:
nome Ana

Objeto C

endereco Rua A
cpf

Linha 6: chamada do mtodo alteraCpf( ) que ir alterar


o endereo do objeto c.
Logo, aps a execuo dessa linha, o objeto est com o
seguinte estado:
123x

Objeto C

nome Ana
endereco Rua A
cpf 1235

Linha 7: impresso do nome do cliente. Para isso


chamamos o mtodo forneceNome( ) do objeto c. Como
esse mtodo uma funo e toda a funo retorna
valor, ele no pode ser chamado isolado numa linha
de instruo. Deve ser feito alguma coisa com o valor
retornado do mtodo, ou imprimir ou armazenar em
outra varivel de memria.

Linha 8: m do mtodo main().

Linha 9: m da classe UsaCliente.

Observao: Essa classe utiliza apenas 1 objeto, mas


normalmente trabalharemos com programas que envolvem a
criao de vrios objetos. O procedimento explicado para criao
e utilizao de 1 objeto o mesmo para vrios objetos.

Unidade 7

prog_orient_objetos.indb 133

133

2/7/2007 16:44:50

Universidade do Sul de Santa Catarina

Sntese
Nessa unidade voc, nalmente, foi apresentando ao mundo da
orientao a objetos. Esse um mundo cheio de conceitos que
voc ter que aprender para desenvolver programas orientado a
objetos. Os primeiros conceitos apresentados nessa unidade so
classe e objeto. Eles devem estar muito claros para voc, pois so
indispensveis para a aprendizagem nas unidades seguintes.
Vamos partir para a prtica?
Revise os comando para compilao
e execuo de programas na
linguagem Java nas unidades
anteriores.

Atividades de auto-avaliao
1) Edite a classe Cliente no editor de texto (Bloco de Notas ou qualquer
ambiente para desenvolvimento de programas Java) e salve na pasta
CURSOWEBOO. Essa pasta deve ser criada anteriormente. Aps a
edio (digitao) compile a classe. O arquivo Cliente.class deve ter sido
gerado.

134

prog_orient_objetos.indb 134

2/7/2007 16:44:50

Programao Orientada a Objeto

2) Edite a classe UsaCliente no editor de texto. e salve na pasta


CURSOWEBOO.
Aps a edio, compile a classe. O arquivo UsaCliente.classe deve ter
sido gerado. O ultimo passo executar a classe.Dessa forma, voc ver
funcionando seu primeiro programa orientado a objeto desenvolvido
na linguagem Java.

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.

Unidade 7

prog_orient_objetos.indb 135

135

2/7/2007 16:44:50

Universidade do Sul de Santa Catarina

Saiba mais
Deitel, H.M. e Deitel, P.J. Java - Como programar. Sexta
Edio. Porto Alegre: Editora Pearson, 2005.
Lemay, Laura e Cadenhead, Rogers. Aprenda em 21 dias Java
1.2. Rio de Janeiro: Editora Campus, 1999.

136

prog_orient_objetos.indb 136

2/7/2007 16:44:50

UNIDADE 8

Conceitos de Orientao a
Objeto

Objetivos de aprendizagem


Entender a diferena entre referncia e Objeto.

Criar programas com mais de um Objeto.

Refinar a implementao de uma Classe.

Aprender o conceito de Encapsulamento.

Sees de estudo
Seo 1 Referncia e Objeto
Seo 2 Criando programas com mais de um Objeto
Seo 3 Refinando a Criao de uma Classe
Seo 4 Encapsulamento

prog_orient_objetos.indb 137

2/7/2007 16:44:50

Universidade do Sul de Santa Catarina

Para incio de conversa


Na unidade anterior voc aprendeu dois conceitos muito
importantes da OO: Classe e Objeto.
Nessa unidade voc vai aprender a diferena entre referncia e
objeto, conceitos presentes no processo de criao de um objeto
que precisam ser bem entendidos.
Estudar tambm como desenvolver outros programas (classes)
que utilizam mais que um objeto e a renar a implementao
de uma classe, ou seja, a desenvolver uma classe que represente
atributos e comportamentos de um objeto de maneira mais
correta e, nalmente, aprender outro conceito muito importante
da OO: o encapsulamento. Bons estudos!

SEO 1 - Referncia e Objeto


Na ltima parte da unidade anterior, voc aprendeu a criar um
objeto a partir de uma classe. Isso foi feito na classe UsaCliente.java.

Lembre-se que criar um objeto


alocar um espao na memria que
armazenar informaes denidas
no tipo (classe) desse objeto.

Esse foi o primeiro contato com o desenvolvimento completo


de um programa orientado a objeto, ou seja, primeiramente foi
modelada e implementada a classe Cliente e, posteriormente,
utilizamos essa classe (na classe UsaCliente) para criar um objeto
do tipo Cliente e manipular suas informaes em memria.
Vamos revisar o cdigo da unidade anterior e explicar dois
conceitos importantes relacionados criao de objetos.
Linha 1
Linha 2
Linha 3
Linha 4
Linha 5
Linha 6
Linha 7
Linha 8
Linha 9

public class UsaCliente{


public static void main(String args[]) {
Cliente c=new Cliente( );
c.alteraNome(Ana);
c.alteraEndereco(Rua A);
c.alteraCpf(1235);
System.out.println(c.forneceNome( ));
}
}

138

prog_orient_objetos.indb 138

2/7/2007 16:44:50

Programao Orientada a Objeto

Voc lembra que a instruo da linha 3 cria um objeto (aloca


espao na memria) do tipo Cliente e que essa, sintaxe para a
criao de um objeto?
Isso est correto!
Porm, nessa linha de instruo existem dois conceitos
importantes envolvidos na criao de um objeto: o conceito de
referncia e o prprio conceito de objeto.
Para entender isso, vamos separar essa instruo em duas partes,
como mostra a gura abaixo:

A 1 parte est criando (declarando) uma varivel de memria


que pode armazenar uma referncia (endereo de uma rea de
memria) para um objeto (rea de memria) do tipo Cliente.
Portanto, c armazena uma referncia para um objeto do tipo
Cliente.
A 2 parte aloca uma rea de memria para o objeto do tipo
Cliente, isso quer dizer, que reservada uma rea de memria
para armazenar os atributos denidos na classe Cliente.
Quem faz essa alocao a palavra new. Ela responsvel por
identicar uma rea livre na memria e reservar essa rea. Essa
rea de memria reservada o objeto do tipo Cliente.
Aps reservar a rea de memria do objeto o mtodo construtor
denido na classe desse objeto chamado. No caso do exemplo
acima, o mtodo Cliente ( ) est sendo chamado e dentro desse,
foi implementado para que os atributos alocados dentro do
objeto cliente sejam inicializados. Aps, o endereo de memria
da rea alocada para o objeto Cliente atribudo (armazenado)
na varivel c. A partir desse momento, c referencia um objeto
Cliente.

Unidade 8

prog_orient_objetos.indb 139

139

2/7/2007 16:44:50

Universidade do Sul de Santa Catarina

A gura abaixo ilustra esse processo de criao de um objeto


(linha 3) que na realidade envolve a criao de uma varivel que
far referncia a um objeto e o armazenamento nessa varivel do
endereo de memria do objeto criado.
C faz referncia ao
objeto que est no
endereo 123x

varivel c

123x

nome

Objeto
Cliente

endereco

endereo 123x

cpf

As guras abaixo ilustram o estado do objeto Cliente cuja


identicao c (o nome do objeto c) medida que as linhas do
cdigo da classe UsaCliente vo sendo executadas.

Veja a implementao dos mtodos


chamados na classe Cliente da
unidade anterior.

Linha 4: chamado o mtodo ou comportamento


alteraNome(Ana) precedido da varivel referncia c e
passado um nome xo como parmetro. Como c aponta ou faz
referncia para o objeto (rea de memria) que est no endereo
123x e o mtodo chamado armazena o valor recebido no
atributo nome desse objeto, o atributo nome que ser alterado o
existente nessa rea de memria (objeto) que c referencia.
Vamos revisar essa chamada de mtodo alteraNome(Ana). A
mesma explicao vale para os demais mtodos altera...( ).
Todo mtodo altera...( ) implementado na classe Cliente espera
receber um parmetro. O mtodo alteraNome(String snome)
espera receber um valor (parmetro) que ser armazenado
na varivel local do mtodo chamada snome. Por isso que,
ao chamar esse mtodo da classe UsaCliente, devemos
passar um valor (parmetro) para o mtodo. No caso, Ana
ser armazenado na varivel snome e logo em seguida ser
armazenado no atributo nome do objeto c.

140

prog_orient_objetos.indb 140

2/7/2007 16:44:50

Programao Orientada a Objeto

O estado do objeto em memria ca assim:

varivel c

123x

nome Ana

Objeto
Cliente

endereo 123x

endereco
cpf 0

Linhas 5 a 6: o mesmo se repete para as linhas 5 a 6.

varivel c

123x

nome Ana

Objeto
Cliente

endereo 123x

endereco Rua A
cpf 1235

Linha 7: nas linhas anteriores os atributos do objeto c foram


todos preenchidos atravs da chamada dos mtodos ou
comportamentos altera....( ). Agora queremos acessar, recuperar
o valor de algum dos atributos do objeto c. Nessa linha, estamos
mandando imprimir o contedo do atributo nome do objeto c.
Para isso, chamamos o comportamento ou mtodo desse objeto
chamado forneceNome( ). Como c faz referncia para uma rea
de memria onde o objeto se encontra, o que ser impresso o
valor do atributo nome desse objeto.
Todo o objeto (rea de memria), para existir, deve estar
associado a uma varivel que armazene a sua referncia (endereo
da rea de memria do objeto). Pode-se chamar essa varivel de
referncia. No exemplo acima foi criada uma referncia para
um objeto do tipo Cliente.
Unidade 8

prog_orient_objetos.indb 141

141

2/7/2007 16:44:51

Universidade do Sul de Santa Catarina

Pode-se criar mais de uma referncia para o mesmo objeto (se


isso for necessrio).
Vamos modicar o cdigo da classe UsaCliente.java
Linha 1 public class UsaCliente{
Linha 2
public static void main(String args[]) {
Linha 3
Cliente c=new Cliente( );
Linha 4
Cliente b;
Linha 5
b=c;
Linha 6
c.alteraNome(Ana);
Linha 7
c.alteraEndereco(Rua A);
Linha 8
c.alteraCpf(75645);
Linha 9
System.out.println(b.forneceNome( ));
Linha 10
}
Linha 11 }

Ser impresso na tela Ana

Por que ser impresso o nome Ana na tela?

Vamos analisar linha a linha e fazer as ligaes com a gura:


Linha 3: Uma varivel referncia chamada c criada. ela
armazenado o endereo do objeto do tipo Cliente criado com a
palavra new. Note que na varivel c armazenado o endereo da
rea de memria alocada para o objeto Cliente, no caso 123x.

123x

nome

Objeto
Cliente

endereco

endereo 123x

cpf 0

142

prog_orient_objetos.indb 142

2/7/2007 16:44:51

Programao Orientada a Objeto

Linha 4: Outra varivel referncia chamada b, criada. ela


no armazenado nenhuma referncia de objeto. Nesse caso, o
valor dessa varivel null.

c
b

123x
null

nome

Objeto
Cliente

endereo 123x

endereco
cpf 0

Linha 5: atribudo (armazenado) na varivel referncia b o


contedo da varivel referncia c. Portanto, o contedo de b agora
123x e ela passa a referenciar o mesmo objeto Cliente. Agora c
e b referenciam o mesmo objeto Cliente.

c
b

123x
123x

nome

Objeto
Cliente

endereo 123x

endereco
cpf 0

Linhas 6 a 8: os comportamentos ou mtodos do objeto que a


varivel c referncia so invocados. C referencia o nico objeto
cliente criado, portanto, todos os mtodos altera...( ) precedidos
de c que so chamados nas linhas 6 a 8, iro manipular os
atributos desse objeto.
Unidade 8

prog_orient_objetos.indb 143

143

2/7/2007 16:44:51

Universidade do Sul de Santa Catarina

123x

c
b

123x

nome Ana

Objeto
Cliente

endereco Rua A

endereo 123x

cpf 75645

Linha 9: nessa linha est sendo chamado o comportamento ou


mtodo forneceNome( ) precedido da nova referncia b.
Quem b referencia?
O objeto Cliente.

Veja a implementao desse e


dos outros mtodos na classe
Cliente na unidade anterior.

Portanto, o mtodo ir manipular atributos desse objeto. No


caso, a implementao desse mtodo faz retornar o contedo do
atributo nome, assim sendo, o contedo do atributo nome do
objeto que ser retornado e impresso na tela.

SEO 2 - Criando programas com mais de um objeto


At o momento criamos apenas uma classe (programa) que cria e
manipula 1 objeto do tipo Cliente (UsaCliente.java).
Ateno!
Quando voc encontrar alguma referncia no texto
para classe (programa), isso significa que no uma
classe que define os atributos e comportamentos
de um objeto (essa tambm conhecida como TAD
Tipo Abstrato de Dados) e sim, uma classe que cria e
manipula (usa) objetos de um determinado tipo.

144

prog_orient_objetos.indb 144

2/7/2007 16:44:51

Programao Orientada a Objeto

preciso car claro que uma vez que a classe (TAD) que
dene os atributos e comportamentos de algum objeto est
implementada e compilada, poder ser usada para a criao e
manipulao de objetos do tipo da classe em milhares de outras
classes (programas).
Isso deve oportunizar voc a entender mais visivelmente, um dos
maiores benefcios da orientao a objetos, ou seja, uma vez que
classe que dene os atributos e comportamentos de algum objeto
est pronta, ela pode ser usada para criar objetos e manipular seus
atributos por toda a vida.
Voc no ter mais que se preocupar em denir os atributos e
comportamentos de algum objeto Cliente, por exemplo. Se isso
foi feito uma vez, vai servir para ser usado para criar objetos do
tipo Cliente para sempre, a no ser que os atributos de Cliente
se alterem, diminuam ou aumentem. Nesse caso, a classe que
representa esses atributos e comportamentos ter que ser alterada
e compilada novamente.
Diante disso, vamos criar uma outra classe para manipular
objetos do tipo Cliente.
Vamos chamar essa classe de UsaCliente2.java.

O valor digitado pelo


usurio nessa caixa de
dilogo de entrada de
dados ser passado
como parmetro para o
mtodo alteraNome( ).
Isso quer dizer que o valor
digitado pelo usurio ser
armazenado no atributo
nome do objeto cliente1.
O mesmo acontece para os
demais mtodos altera.().

Logo abaixo est a implementao dessa classe.


Linha 1

public class UsaCliente2{

Linha 2

public static void main(String args[]) {

Linha 3

Cliente cliente1=new Cliente( );

Linha 4

Cliente cliente2=new Cliente( );

Linha 5

cliente1.alteraNome(JOptionPane.showInputDialog(Entre com o nome));

Linha 6

cliente1.alteraEndereco(JOptionPane.showInputDialog(Entre com o endereco));

Linha 7

cliente1.alteraCpf(Integer.parseInt(JOptionPane.showInputDialog(Entre com o CPF)));

Linha 8

cliente2.alteraNome(JOptionPane.showInputDialog(Entre com o nome));

Linha 9

cliente2.alteraEndereco(JOptionPane.showInputDialog(Entre com o endereco));

Linha 10

cliente2.alteraCpf(1235);

Linha 11

System.out.println(Nome do Cliente 1+ cliente1.forneceNome( ));

Linha 12

System.out.println(Nome do Cliente 2+ cliente2.forneceNome( ));

Linha 13 }
Linha 14 }

Unidade 8

prog_orient_objetos.indb 145

145

2/7/2007 16:44:51

Universidade do Sul de Santa Catarina

Vamos analisar o cdigo linha a linha:




Linha 3: criao de uma varivel chamada cliente1


que armazenar uma referncia para o primeiro objeto
Cliente. Atribuio a essa varivel do endereo de
memria do primeiro objeto Cliente.

Linha 4: criao de uma varivel chamada cliente2


que armazenar uma referncia para o segundo objeto
Cliente. Atribuio a essa varivel do endereo de
memria do segundo objeto Cliente.

Linhas 5 a 7: alterao dos atributos do objeto cliente1


atravs da chamada de seus mtodos altera...( ).

Linhas 8 a 10: alterao dos atributos do objeto cliente2


atravs da chamada de seus mtodos altera...( ).

Linha 11: impresso na tela da frase Nome do Cliente


1 seguido do nome que foi armazenado no atributo
nome do objeto cliente1. O valor desse atributo
recuperado pelo mtodo forneceNome() do objeto
cliente1.

Linha 12: idem linha 11, s que para o objeto cliente2.

A representao grca desses dois objetos em memria


ilustrada na gura abaixo:
Cliente 1

123x

Cliente 2

124x
nome Ana

Objeto

endereco Rua A

endereo 123x

cpf 4455
nome Joo
endereco Rua J

Objeto

endereo 124x

cpf 1235

146

prog_orient_objetos.indb 146

2/7/2007 16:44:51

Programao Orientada a Objeto

Ao trmino dessa seo, voc j sabe que um objeto nada mais


do que uma rea de memria que armazena valores para
atributos denidos na classe (tipo) desse objeto, e que precisa ser
referenciado por outra varivel. Pode existir, tambm, mais de
uma referncia para um mesmo objeto, assim como podem existir
(vamos programar assim) vrios objetos alocados em memria.

SEO 3 - Renando a criao de uma Classe


Nas duas sees anteriores voc aprendeu a utilizar
(usar) uma classe criando objetos a partir dela. Foi
desenvolvido um programa que cria e manipula 1 objeto
e, outro programa, que cria e manipula dois objetos do
tipo Cliente.
Normalmente, os programas que voc far iro criar e
manipular muitos objetos.
Antes disso, porm, voc deve aprender mais alguns conceitos
importantes relacionados ao desenvolvimento de uma classe.
Voc j sabe o que uma classe, pois, j implementou e utilizou
uma para criar objetos. Contudo, existem mais conceitos
relacionados criao de classes. Agora, com um conhecimento
um pouco mais maduro, voc ser apresentado a eles.
Para isso, voc deve voltar unidade anterior, mais
especicamente onde a classe Cliente foi implementada.
O primeiro con ceito importante que vamos rever de mtodo
construtor de uma classe.

Mtodo Construtor e Mtodo Construtor Sobrecarregado


Quando um objeto criado ou instanciado (alocado na memria
atravs do operador new), um mtodo denido na classe desse
objeto sempre automaticamente chamado, esse mtodo
designado de construtor.

Unidade 8

prog_orient_objetos.indb 147

147

2/7/2007 16:44:52

Universidade do Sul de Santa Catarina

Esse mtodo deve (no obrigatrio) ser denido na classe do


objeto instanciado da seguinte forma:
public Cliente(){
nome = ;
endereo = ;
cpf=0;
}

Cuidar letras maisculas e


minsculas. Se a classe de
chamar cliente o mtodo
construtor tambm deve se
chamar cliente().

Ele SEMPRE deve ter o mesmo nome da classe e no retornar


valor (no deve nem ter a palavra void, que signica que nenhum
valor est sendo retornado do mtodo).
Quando o mtodo construtor chamado, o cdigo que est
dentro do mtodo, executado, portanto, devemos programar
dentro de mtodo construtor, qualquer instruo que queiramos
que seja executada quando um objeto criado. Normalmente,
programado dentro de um mtodo construtor para que os
atributos do objeto que est sendo criado sejam inicializados, ou
seja, tenham valores consistentes (corretos).
comum o desenvolvimento de mais de um mtodo construtor
com o mesmo nome, porm, com parmetros diferentes, como
mostra o trecho de cdigo da classe Cliente a seguir:
public Cliente( ){
nome = ;
endereo = ;
cpf = 0;
}
public Cliente(String snome, String sendereco, int icpf){
nome = snome;
endereo = sendereco;
cpf = icpf;
}

Quando isso acontece, se diz que o mtodo construtor foi


sobrecarregado.

148

prog_orient_objetos.indb 148

2/7/2007 16:44:52

Programao Orientada a Objeto

Observe que o nome do mtodo igual, mas um dos mtodos


no recebe parmetro e o outro mtodo recebe trs parmetros
que correspondem a valores que sero armazenados em cada
atributo do objeto.
importante observar que os cabealhos dos mtodos no
devem ser iguais. Deve haver uma diferena em nvel de
parmetros, como no exemplo acima onde, um dos mtodos no
recebe parmetros e o outro recebe.
O objetivo de sobrecarregar o mtodo construtor oferecer
para quem for criar um objeto do tipo Cliente (um programador)
outras maneiras de inicializar os atributos do objeto que foi
instanciado.
1. Implemente o mtodo sobrecarregado
desenvolvido acima na classe Cliente.java
2. Compile a classe Cliente.java.
3. Edite e compile a classe abaixo: UsaCliente3.java

Linha 1

Criao do primeiro objeto


e chamada do mtodo
construtor. Qual mtodo
construtor ser chamado?
O mtodo construtor sem
parmetros implementado
na classe Cliente. Na
linha abaixo, o segundo
objeto cliente est sendo
criado e, nesse caso,
o mtodo construtor
com parmetros (o que
implementado por ltimo)
est sendo chamado. Note
que est sendo passado
para o mtodo trs
valores: Nome do cliente,
endereo do cliente e o cpf.

public class UsaCliente3{

Linha 2

public static void main(String args[]) {

Linha 3

Cliente cliente1=new Cliente( );

Linha 4

Cliente cliente2=new Cliente(Carlos, Rua C, 123552244 );

Linha 5

cliente1.alteraNome(JOptionPane.showInputDialog(Entre com o nome));

Linha 6

cliente1.alteraEndereco(JOptionPane.showInputDialog(Entre com o endereco));

Linha 7

cliente1.alteraCpf(12352241123);

Linha 11

System.out.println(Nome do Cliente 1+ cliente1.forneceNome( ));

Linha 12

System.out.println(Nome do Cliente 2+ cliente2.forneceNome( ));

Linha 13

Linha 14 }

Vamos analisar com mais detalhes:


Linha 3: o primeiro objeto cliente est sendo criado e o mtodo
construtor sem parmetros Cliente ( ) est sendo chamado.
O que esse mtodo faz? Inicializa cada atributo do objeto
com string vazia para nome e endereo e 0 para cpf. Olhe a
Unidade 8

prog_orient_objetos.indb 149

149

2/7/2007 16:44:52

Universidade do Sul de Santa Catarina

implementao do mtodo acima ou na classe Cliente. Nesse


momento, o objeto representado em memria possui o seguinte
estado:

Cliente 1

Objeto
Cliente

123x

nome
endereco

endereo 123x

cpf 0

Observe que os atributos nome, endereo e cpf do objeto


foram inicializados com os valores implementados no mtodo
construtor Cliente ( ).

Isso se chama passagem de


parmetros em subrotinas (aqui
conhecida como mtodo) e, voc viu
isso, em Lgica de Programao II.

Linha 4: o segundo objeto cliente est sendo criado e o


mtodo construtor com parmetros Cliente (Carlos, Rua
C, 123552244 ) est sendo chamado. Cada valor (parmetro)
passado para o mtodo armazenado na respectiva varivel de
memria. Por exemplo: Ana, ser armazenado na varivel de
memria do mtodo chamada snome; Rua C, ser armazenado
na varivel de memria do mtodo chamada sendereco; o mesmo
acontece com o valor 123552244, que ser armazenado na
varivel cpf.
Os valores passados sero armazenados, respectivamente, nessas
variveis de memria e, logo aps, o contedo dessas variveis
ser armazenado (atribudo) aos atributos do objeto que est
sendo criado.
Portanto, esse mtodo construtor sobrecarregado tem o objetivo
de armazenar nos atributos do objeto, valores que so passados
como parmetro para o mtodo. Nesse momento, o objeto
representado em memria possui o seguinte estado:

150

prog_orient_objetos.indb 150

2/7/2007 16:44:52

Programao Orientada a Objeto

Cliente 1

123x

Cliente 2

124x

Objeto
Cliente

nome

endereo 123x

endereco
cpf 0

Objeto
Cliente

nome Carlos

endereo 124x

endereco Rua C
cpf 123552244

Observe que, ao criar o segundo objeto e chamar o mtodo


construtor com parmetros, os atributos nome, endereo e cpf , j
possuem valores e, no precisam mais ser modicados atravs dos
comportamentos ou mtodos alteraNome( ), alteraEndereco( ),
etc. como ter que acontecer com o objeto cliente1, nas linhas
seguintes.
uma boa prtica de programao desenvolver pelo
menos uma sobrecarga do mtodo construtor de uma
classe.

Importante!
Quando nenhum mtodo construtor especicado na classe,
um construtor padro chamado automaticamente e inicializa
atributos de tipo primitivos(int,double,etc.) com 0, atributos do
tipo boolean para false e null para atributos do tipo objeto.
Outro conceito importante que vamos detalhar o de mtodos
modicadores (set) e recuperadores (get) de uma classe.

Unidade 8

prog_orient_objetos.indb 151

Veremos o que um
atributo do tipo objeto
mais adiante.

151

2/7/2007 16:44:52

Universidade do Sul de Santa Catarina

Mtodos modicadores(set) e recuperadores(get)


Voc implementou na classe Cliente uma srie de mtodos ou
comportamentos para alterar o valor dos atributos de um objeto
(mtodos chamados altera...( ) ) e para recuperar o valor desses
atributos (mtodos chamados fornece...( ) ).
importante voc saber, e isso car mais claro na seo
seguinte, que os atributos de um objeto s devem ser
manipulados via comportamento ou mtodos desse objeto e,
nunca diretamente, como no exemplo:
cliente1.nome = Ana;

Nesse caso, essa linha estaria na classe UsaCliente.


Essa instruo est tentando armazenar no atributo nome, do
objeto cliente1, o nome Ana. Est se tentando acessar o atributo
diretamente e, no atravs de um mtodo ou comportamento
desse objeto. Isso no deve feito e, nem ao menos funcionar,
pois, os atributos da classe Cliente esto com a palavra private.
Veremos com mais detalhes o signicado e impacto dessa palavra
nos atributos de uma classe mais tarde, por enquanto, suciente
dizer que essa palavra que impede que qualquer atributo de um
objeto seja acessado diretamente em outra classe (a linha acima
estaria na classe UsaCliente), como no exemplo acima.
Portanto, para alterar o valor do atributo nome, s nos resta
chamar o mtodo alteraNome(Ana) passando o nome Ana
como parmetro. Isso s possvel porque todos os mtodos
implementados na classe Cliente tm a palavra public (isso
tambm ser explicado mais tarde).
Essa questo ser revisada na prxima seo. O que nos interessa
nesse momento est relacionado ao nome dos mtodos ou
comportamentos implementados na classe Cliente.
Na verso implementada da classe Cliente todos os mtodos que
alteram o valor dos atributos so chamados de altera...( ). Esse
nome foi utilizado para facilitar o entendimento da necessidade
de existncia desses mtodos, o mesmo valendo para os mtodos
fornece..( ) que recuperam o valor dos atributos de um objeto.
152

prog_orient_objetos.indb 152

2/7/2007 16:44:53

Programao Orientada a Objeto

O objetivo desse tpico informar que existe um padro de


nomenclatura para nomes de mtodos, classes e atributos.
Padro de nomenclatura quer dizer que as pessoas
que implementam classes usam o mesmo padro de
nomes para identificar (nomear) classes, atributos e
mtodos de uma classe.

Em relao aos mtodos de uma classe, sempre que um mtodo


tem a funo nica e exclusiva de alterar (modicar ) o atributo
de uma classe ele deve comear com o a palavra set seguido do
nome do atributo que ele altera.
Mtodo na primeira verso da classe Cliente:
public void alteraNome(String snome){
nome=snome;
}
Nome de mtodo recomendado:
public void setNome(String snome){
nome=snome;
}

O mesmo acontece com os mtodos que tem a funo de fornecer


ou recuperar o valor dos atributos de um objeto, os mtodos
fornece...( ). Esses mtodos devem comear com a palavra get
seguido do nome do atributo que ele recupera.

Note que o que muda o


inicio do nome do mtodo.
Todos os demais nomes
de mtodos devem ser
alterados para comear
com a palavra set.

Mtodo na primeira verso da classe Cliente:


public String forneceNome(){
return nome;
}
Nome de mtodo recomendado:
public String getNome( ){
nome=snome;
}

Unidade 8

prog_orient_objetos.indb 153

Note que o que muda o


inicio do nome do mtodo.
Todos os demais nomes
de mtodos devem ser
alterados para comear
com a palavra get.

153

2/7/2007 16:44:53

Universidade do Sul de Santa Catarina

Portanto, todo o mtodo que se destina, exclusivamente,


a alterar o valor de uma atributo deve comear com
set e todo o mtodo que se destina a recuperar o
valor de um atributo com get.

Mtodos set so denominados mtodos modicadores porque


modicam o valor dos atributos.
Mtodos get so denominados mtodos recuperadores porque
recuperam o valor dos atributos.
Os mtodos da classe Cliente devem ser todos alterados. A nova
implementao da classe Cliente car como a seguir:
Linha 1 public class Cliente{
Linha 2
private String nome, endereco;
Linha 3
private int cpf;
Linha 4
Linha 5
public Cliente( ){
Linha 6
nome=;
Linha 7
endereo=;
Linha 8
cpf=0;
Linha 9
}
Linha 10
public void setNome(String snome){
Linha 11
nome=snome;
Linha 12
}
Linha 13
Linha 14
public void setEndereco(String sender){
Linha 15
endereco=sender;
Linha 16
}
Linha 17
Linha 18
public void setCpf(int icpf){
Linha 19
cpd=icpf;
Linha 20
}
Linha 21
public String getNome(){
Linha 22
return nome;
Linha 23
}
Linha 24
Linha 25
public String getEndereco(){
Linha 26
return endereco;
Linha 27
}
Linha 28
Linha 29
public int getCpf(){
Linha 30
return cpf;
Linha 31
}
Linha 32 }

154

prog_orient_objetos.indb 154

2/7/2007 16:44:53

Programao Orientada a Objeto

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;
.
.

No trecho acima, estamos tentando acessar (alterando o valor) o


atributo nome do objeto c diretamente. Isso no deve acontecer,
no recomendado e burla o princpio do encapsulamento que
nos diz que os atributos de um objeto devem estar encapsulados
(escondidos dentro do prprio objeto) e s devem ser acessados
por comportamentos ou mtodos do prprio objeto.
O encapsulamento permite o ocultamento das informaes de
quem vai manipular o objeto, ou seja, no preciso conhecer
detalhes sobre os atributos de um objeto, s preciso ter meios
(mtodos ou comportamentos) para manipular essas informaes.
por isso que no cdigo que est logo no incio dessa unidade,
alteramos os valores dos atributos do objeto c atravs da chamada
de seus mtodos ou comportamentos pblicos.
Unidade 8

prog_orient_objetos.indb 155

155

2/7/2007 16:44:53

Universidade do Sul de Santa Catarina

Pode-se dizer que um objeto manipulado atravs da sua


interface. A interface de um objeto o conjunto de mtodos
pblicos disponibilizados para manipular um objeto.
Estamos falando de mtodos pblicos. Mas o que so
mtodos pblicos?

Observe a implementao da classe Cliente. Todo o mtodo


denido com a palavra public e todo o atributo com a palavra
private.
Para tornar um mtodo pblico preciso usar a palavra public na
denio do mtodo.
Isso signica que ele pode ser chamado (precedido da referncia
ao seu objeto) de qualquer outra classe. Dessa maneira, est se
disponibilizando a interface do objeto para a sua manipulao.
Para tornar um atributo privado, preciso usar a palavra private
na denio do atributo. Ao tornar um atributo privado, estamos
promovendo o encapsulamento, porque o atributo s poder ser
acessado por mtodos do objeto.
Um dos objetivos do encapsulamento a facilidade de
manuteno do cdigo.
Isso quer dizer que, se houve alteraes na estrutura de um
objeto, como por exemplo, o atributo cpf, no armazena mais
dados do tipo int e sim, dados do tipo String.
Isso NO IR ser reetido nas vrias classes que criam e
manipulam objetos do tipo Cliente, ou seja, no ser necessrio
alterar (dar manuteno) nessas vrias classes que manipulam
objetos do tipo Cliente, porque essa mudana s ocorrer dentro
da classe Cliente, mais especicamente, na linha que dene o
atributo cpf.
As demais classes que criam e manipulam objetos do tipo Cliente
continuaro chamando os mtodos alteraCpf( ) e forneceCpf( )
para ter acesso ao atributo cpf que agora do tipo String.

156

prog_orient_objetos.indb 156

2/7/2007 16:44:53

Programao Orientada a Objeto

Se o encapsulamento no for mantido nesse exemplo, o atributo


cpf nessas classes poderia ser acessado diretamente. Por exemplo:
Cliente c=new Cliente( );
c.cpf=123525222;

Com a mudana no tipo do atributo, TODAS as classes que


criam e manipulam objetos do tipo Cliente teriam que ser
alteradas para o seguinte cdigo:

Valor inteiro sendo


armazenado diretamente
no atributo cpf do objeto c.

Cliente c=new Cliente( );


c.cpf=123525222;

Sntese
Nessa unidade voc aprendeu a diferena entre dois termos
usados na criao de um objeto. O termo referncia e o termo
objeto. Referncia o endereo fsico de um objeto em memria.
Essa referncia aponta para uma determinada rea de memria
que chamada de objeto.

O atributo cpf agora


s armazena valor do
tipo String. Como ele
est sendo acessado
diretamente nessa e em
outras classes, todas elas
precisaro ser alteradas
para que cpf receba um
dado do tipo String. Note
que o valor est entre
(aspas).

Aprendeu a criar programas que envolviam a criao de mais de


um objeto e tambm o conceito muito importante da OO que o
Encapsulamento.

Unidade 8

prog_orient_objetos.indb 157

157

2/7/2007 16:44:53

Universidade do Sul de Santa Catarina

Atividades de auto-avaliao
1) Represente graficamente em memria, tal como foi feito nessa unidade,
a seguinte instruo. Identifique na representao grfica o que
referncia e o que objeto.

Cliente cliente = new Cliente (Rita, Rua R, 215215211);

2) Quando um mtodo construtor chamado?

3) Qual a funo de um mtodo modificador numa classe? E de um


mtodo recuperador?

158

prog_orient_objetos.indb 158

2/7/2007 16:44:53

UNIDADE 9

Aplicando os conceitos de OO
atravs de exemplos prticos

Objetivos de aprendizagem


Fortalecer a aprendizagem dos conceitos estudados


anteriormente atravs de exemplos.

Desenvolver programas com vetor de objetos.

Utilizar como recurso o Mtodo sobrecarregado


(overload).

Sees de estudo
Seo 1 Colocando em Prtica os conceitos de OO
Seo 2 Mtodo sobrecarregado

prog_orient_objetos.indb 159

2/7/2007 16:44:54

Universidade do Sul de Santa Catarina

Para incio de conversa


Na unidade anterior, voc foi apresentado a mais alguns conceitos
de OO, dentre eles, o de encapsulamento. Voc estudou a
diferena entre referncia e objeto, aprendeu a desenvolver
programas que exigiam a criao de mais de um objeto e a
implementar uma classe com mtodo construtor, modicador
(set) e recuperador (get).
Nessa unidade, voc ir reforar a maioria dos conceitos
apresentados anteriormente, atravs de uma srie de exemplos
concretos, diferentes do Sistema de Conta Corrente, descrito
nas unidades anteriores. Aprender o conceito de mtodo
sobrecarregado e mais alguns conceitos novos, mas tudo atravs
de exemplos prticos.
A partir da descrio de um problema iremos primeiramente
implementar a classe que representa os atributos e
comportamentos do(s) objeto(s) existente no problema e,
nalmente, criar, a partir dessa classe, o(s) objetos(s) para
solucionar o problema.
Tudo isso ser feito colocando a mo na massa, ou seja,
codicando (programando) na linguagem Java.Vamos comear?
Ento, bom estudo!

160

prog_orient_objetos.indb 160

2/7/2007 16:44:54

Programao Orientada a Objeto

SEO 1 - Colocando em prtica os conceitos de OO


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.
Diante do enunciado desse problema, como voc pretende
resolv-lo? Ou melhor, implement-lo?
Pense em uma resposta para as seguintes questes. (No olhe
para as respostas sugeridas, pense nas suas e depois conra!)
1. Qual o(s) objeto(s) desse problema do mundo real?
2. Quais os atributos (caractersticas) e comportamentos
desse(s) objetos(s)?
3. Todos os objetos so do mesmo tipo, ou seja, possuem o
mesmo conjunto de atributos e comportamentos?

Armazenar informaes
sobre os funcionrios
de uma empresa um
problema do mundo real.

4. Esse problema trata com 1 ou vrios objetos?

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.

De acordo com as respostas acima, chegamos concluso que


existe somente um tipo de objeto (Funcionrio) e que o problema
trata com vrios objetos desse mesmo tipo (50). Esses objetos
possuem um conjunto de atributos e comportamento no mundo
real (exemplos foram listados acima).

Unidade 9

prog_orient_objetos.indb 161

161

2/7/2007 16:44:54

Universidade do Sul de Santa Catarina

Mas ser que nos interessa todos os atributos e


comportamentos desses objetos no contexto de
um sistema (software) orientado a objetos? Muito
provavelmente no!

No nosso sistema de cadastro de funcionrios, no interessa


atributos do tipo cor do cabelo e comportamento do tipo digitar
documento. Portanto, vamos aplicar o processo de abstrao,
ou seja, desse conjunto de atributos e comportamentos de
funcionrios no mundo real, vamos apanhar somente os atributos
e comportamentos que interessam ao sistema (software) de
cadastro de funcionrios.
Os atributos que escolhemos so: nome, endereo e salrio
Abstrair extrair tudo o que for essencial e nada mais.
Aaron Walsh
A abstrao o processo de filtragem de detalhes
sem importncia do objeto, para que apenas
as caractersticas apropriadas que o descrevem
permaneam.
Peter Van Der Linden

Para cada atributo denido, deve-se ter um comportamento ou


mtodo para armazenar algum valor no atributo (mtodo set) e
para recuperar o valor do atributo (mtodo get).
Feito a abstrao, primeiramente devemos criar uma classe que
represente os atributos e comportamentos dos vrios objetos
Funcionrio.
Pode existir mais de uma classe se
existir mais de um tipo de objeto
no problema e elas ainda podem
se relacionar. Veremos isso nas
unidades seguintes!

Essa classe deve se chamar Funcionrio. Ela deve ter como


atributos: nome, endereo e salrio e deve ser um conjunto de
comportamentos (mtodos) que manipulem esses atributos. Voc
Lembra do encapsulamento?
Identicada a(s) classes(s) que representam os objetos do
problema, devemos criar um modelo grco dessa(s) classe(s).
Esse modelo grco chamado de Diagrama de Classes (j
falamos dele antes, lembram?).

162

prog_orient_objetos.indb 162

2/7/2007 16:44:54

Programao Orientada a Objeto

Como nesse problema s identicamos a classe Funcionrio,


nosso diagrama ser composto de apenas 1 classe.
Funcionrio
nome: String
endereco: String
salario double
setNome()
setEndereco()
setSalario()
getNome()
getEndereco()
getCpf()

Observe que o smbolo grco que representa a classe possui trs


divises:


a primeira corresponde ao nome da classe;

a segunda aos atributos da classe; e

a terceira corresponde ao comportamento da classe.

importante que voc saiba que quando falamos em atributos e


comportamentos da classe, na realidade, estamos querendo dizer,
atributos e comportamento dos objetos que a classe representa.
Em relao aos comportamentos, voc lembra por
que chamamos os comportamentos ou mtodos de
setNome() e getNome()?

Voc estudou na unidade oito, na seo sobre Encapsulamento,


que os atributos de um objeto devem estar protegidos,
encapsulados dentro do objeto (dentro de uma rea de memria)
e que s podem ser acessados por comportamentos ou mtodos
do prprio objeto.
Portanto, devemos ter um comportamento ou mtodo pblico
(public) para modicar (set) e recuperar (get) cada atributo de um
objeto Funcionrio. Por isso, temos que planejar e implementar
Unidade 9

prog_orient_objetos.indb 163

163

2/7/2007 16:44:54

Universidade do Sul de Santa Catarina

um mtodo setNome() para modicar o valor do atributo nome


de um objeto Funcionrio na memria e, devemos planejar e
implementar um mtodo getNome() para recuperar o valor desse
atributo.
Lembre-se que qualquer mtodo
que modica o valor do atributo
de um objeto deve comear pela
palavra set e qualquer mtodo que
recuperar o valor do atributo deve
comear pela palavra get. Isso um
padro de nomenclatura.

private: para promover o princpio


do encapsulamento devemos
colocar os atributos de classe como
privados (private)

recomendado que toda classe


tenha pelo menos 1 mtodo
construtor. Mtodo construtor
sempre tem o mesmo nome da
classe e executado quando um
objeto do tipo Funcionrio criado.

Mtodo setEndereco(String sender)


recebe como parmetro o endereo
do funcionario na varivel sender
e armazena o contedo dessa
varivel no atributo endereco do
objeto. Funcionario.

Mtodo getEndereco() retorna o


contedo do atributo endereco do
objeto Funcionario.

Depois de identicar a classe que representa o objeto do problema


e de representar gracamente essa classe, estamos prontos para a
implementao (programao).
Linha 1 public class Funcionario{
Linha 2
private String nome, endereco;
Linha 3
private double salario;
Linha 4
Linha 5
public Funcionario( ){
Linha 6
nome=;
Linha 7
endereo=;
Linha 8
salario=0;
Linha 9
}
Linha 10
public void setNome(String snome){
Linha 11
nome=snome;
Linha 12
}
Linha 13
Linha 14
public void setEndereco(String sender){
Linha 15
endereco=sender;
Linha 16
}
Linha 17
Linha 18
public void setSalario(double dsalario){
Linha 19
salario=dsalario;
Linha 20
}
Linha 21
public String getNome(){
Linha 22
return nome;
Linha 23
}
Linha 24
Linha 25
public String getEndereco(){
Linha 26
return endereco;
Linha 27
}
Linha 28
Linha 29
public double getSalario(){
Linha 30
return salario;
Linha 31
}
Linha 32 }

164

prog_orient_objetos.indb 164

2/7/2007 16:44:54

Programao Orientada a Objeto

Procedimentos Prticos:
1. Digitar o cdigo acima e salvar o arquivo com o nome
Funcionario.Java na pasta CURSOWEB. (Lembre-se que voc
pode usar o Bloco de Notas ou uma IDE como JCreator,
JBuilder, etc)
2. Compilar a classe Funcionario.java. Se voc usou o Bloco
de Notas para digitar a classe, entre na janela do MS-DOS, v
para a pasta CURSOWEB e digite o comando de compilao:
javac Funcionario.java

Se a sua classe no contiver erros, ser gerado o arquivo


Funcionrio.class. desse arquivo que voc precisa para
criar objetos do tipo Funcionrio no prximo programa e em
qualquer programa que exija a criao de objetos do tipo
Funcionrio.

Essa uma grande vantagem da orientao a objetos.


Uma vez que voc cria um tipo abstrato de dados
(classe), pode usar sempre que tiver necessidade, sem
precisar escrever a classe novamente. Isso se chama
reutilizao de cdigo.

Se a classe contiver erros, voc deve voltar ao Bloco de Notas,


arrumar o cdigo da classe e compilar novamente. Esse processo
s estar terminado quando o arquivo Funcionario.class for
gerado com sucesso.
At o momento, podemos dizer que 50% do nosso trabalho est
realizado. Temos, no entanto, um problema. Identicamos o
objeto desse problema, desenhamos e implementamos uma classe
para representar esse objeto ou o conjunto desses objetos. O que
precisamos fazer usar essa classe para resolver o problema.
Releia o problema novamente.

Unidade 9

prog_orient_objetos.indb 165

165

2/7/2007 16:44:54

Universidade do Sul de Santa Catarina

Devemos criar um programa OO para armazenar informaes


de 50 funcionrios de uma empresa. Nesse programa OO, para
armazenar a informao de 1 funcionrio, devemos criar 1 objeto
do tipo Funcionrio, como mostra o cdigo abaixo:
Linha 0

import javax.swing.*;

Linha 1

public class CadastroFuncionario{

Linha 2

public static void main(String args[]) {

Linha 3

Funcionario f=new Funcionario( );

Linha 4

f.setNome(JOptionPane.showInputDialog(Entre com o Nome));

Linha 5

f.setEndereco(JOptionPane.showInputDialog(Entre com o Endereo));

Linha 6

f.setSalario(Double.parseDouble(JOptionPane.showInputDialog(Entre com o Salrio)));

Linha 7

JOptionPane.showMessageDialog(null,Nome do Funcionrio Cadastrado + f.getNome( ));

Linha 8

System.exit(0);

Linha 9

Linha 10 }
Classe CadastroFuncionario que
cria um objeto do tipo Funcionrio
(linha 3) para poder armazenar
nome, endereco e salario de um
funcionario.

O programa acima, depois de compilado e executado ir


armazenar as informaes de 1 funcionrio. Ao executar a
linha 3 ser criado um objeto do tipo Funcionrio, portanto,
ser alocada somente uma rea de memria onde poder ser
armazenado nome, endereo e salrio de um funcionrio. Logo
aps, nas linhas 4 a 5 os mtodos setNome( ), setEndereo( )
e setSalario( ) sero chamados. Cada mtodo chamado passa
como parmetro um valor digitado pelo usurio. Esse valor
armazenado no respectivo atributo do objeto f. No caso da linha
4, o metodo setNome( ) passa como parmetro o nome que o
usurio ir digitar na caixa de entrada de dados JOptionPane.
showInputDialog(Entre com o Nome).
Essa a maneira que programamos qualquer entrada
de dados do usurio. Ela faz aparecer uma caixa no
centro da tela, com um campo onde o usurio digita
algum valor.

A linha 7 imprime na tela a frase Nome do Funcionrio


Cadastrado seguido do nome digitado do funcionario. Para
recuperar o nome digitado e armazenado no atributo nome do
objeto f, invocado na linha 4 o mtodo getNome() .
166

prog_orient_objetos.indb 166

2/7/2007 16:44:55

Programao Orientada a Objeto

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

3 Executar o arquivo CadastroFuncionario.class. Comando


para execuo:
java CadastroFuncionario
Obs.: Nunca usar .class no comando de execuo.

A seguir, apresentada a seqncia de telas do programa


exemplicado mais acima:

Tela 1

Tela 2

Tela 4

Tela 3

Unidade 9

prog_orient_objetos.indb 167

167

2/7/2007 16:44:55

Universidade do Sul de Santa Catarina

Como voc deve ter observado, o programa acima armazena


os dados de 1 funcionrio. Porm, o problema inicial pede
um programa para armazenar os dados de 50 funcionrios.
O que devemos alterar no nosso programa, ou seja, na classe
CadastroFuncionario.java para permitir que sejam armazenados
os dados de 50 funcionrios?
Devemos criar 50 objetos! Isso mesmo, 50 objetos.
Vamos comear a desenvolver o cdigo para criar 50 objetos.
Linha 0 import javax.swing.*;
Linha 1 public class CadastroFuncionario{
Linha 2

public static void main(String args[]) {

Linha 3

Funcionario f1=new Funcionario( );

Linha 4

Funcionario f2=new Funcionario( );

Linha 5

Funcionario f3=new Funcionario( );

Linha 6

Funcionario f4=new Funcionario( );

Linha 7

Funcionario f5=new Funcionario( );

Linha 8

...

Linha 9

....

Linha 10

....

Linha 11

Linha 12 }

Quantas linhas de cdigo teremos que implementar para criar os


50 objetos? 50 linhas!
E para armazenar as informaes nos 50 objetos, 50 linhas
para cada atributo que iramos querer armazenar algum valor.
Multiplique isso por trs atributos e, ento teremos 150 linhas.
muita linha de cdigo com a mesma instruo. O que muda
s o nome do objeto. Para evitar esse excesso de linhas de cdigo,
voc vai aprender a trabalhar com VETOR DE OBJETOS.
Voc j aprendeu a trabalhar com vetor em Lgica de
Programao II e a implementar um vetor na linguagem Java nas
unidades anteriores.

168

prog_orient_objetos.indb 168

2/7/2007 16:44:55

Programao Orientada a Objeto

Um vetor uma varivel de memria que pode


armazenar vrios valores, todos do mesmo tipo
de dado sendo que, cada posio dessa varivel,
armazena somente um valor.

Vamos revisar como trabalhar com vetor?


Linha 0 import javax.swing.*;
Linha 1 public class CriarVetor{
Linha 2

public static void main(String args[]) {

Linha 3

int num[]=new int[3];

Linha 4

num[0] = 5;

Linha 5

num[1] = Integer.parseInt(JOptionPane.showInputDialog(Entre com o Nmero));

Linha 6

num[2] = 6;

Linha 7

System.exit(0);

Linha 8

Linha 9 }

Vamos analisar o cdigo linha a linha:




Linha 3: Criao de um vetor chamado num de 3


posies. Esse vetor do tipo int, ou seja, s pode
armazenar valores do tipo int (inteiro). Lembre-se que,
cada valor dentro do vetor acessado atravs de uma
posio ou ndice. Quando um vetor do tipo int criado,
cada posio do vetor inicializada com 0.
posio ou ndice do vetor

num[ ]

Linha 4: Na primeira posio do vetor, posio 0,


armazenado o valor 5.

Unidade 9

prog_orient_objetos.indb 169

169

2/7/2007 16:44:56

Universidade do Sul de Santa Catarina

Linha 5: Na segunda posio do vetor, posio 1,


armazenado o valor digitado pelo usurio.

Linha 6: Na terceira posio do vetor, posio 2,


armazenado o valor 6.

Outra forma de armazenar dados num vetor usar uma


estrutura de repetio (para-faa ou for na linguagem Java) e
programar para o usurio digitar os dados que sero armazenados
no vetor.
Vejamos na prxima verso do programa.
Linha 0 import javax.swing.*;
Linha 1 public class CriarVetor{
Linha 2

public static void main(String args[]) {

Linha 3

int num[]=new int[3];

Linha 4

for (int i=0;i<3;i++)

Linha 5

num[i] = Integer.parseInt(JOptionPane.showInputDialog(Entre com o Nmero));

Linha 6
Linha 7
Linha 8

System.exit(0);
}

Linha 9 }

Nessa verso, em cada posio do vetor num (de 0 at 2)


armazenado um valor digitado pelo usurio. Note que no
foi preciso programar 3 instrues de entrada de dados para
armazenar o valor em cada posio do vetor num. Usamos uma
estrutura de repetio for e mandamos ela repetir 3 vezes, ou
seja, executar a instruo de atribuio programada dentro dela 3
vezes.
Na ltima verso do programa (classe) CadastroFuncionario.
java, vamos usar um vetor para armazenar os 50 objetos que
precisamos. S que esse vetor armazenar objetos do tipo
Funcionario. Vamos usar tambm uma estrutura de repetio for
para trabalhar melhor sobre esse vetor de objetos.

170

prog_orient_objetos.indb 170

2/7/2007 16:44:56

Programao Orientada a Objeto

Linha 0 import javax.swing.*;


Linha 1 public class CadastroFuncionario{
Linha 2

public static void main(String args[]) {

Linha 3

Funcionario f[ ]=new Funcionario[50];

Linha 4

for (int i=0;i<50;i++){

Linha 5

f[i]=new Funcionario( );

Linha 6

f[i].setNome(JOptionPane.showInputDialog(Entre com o Nome));

Linha 7

f[i].setEndereco(JOptionPane.showInputDialog(Entre com o Endereo));

Linha 8

f[i].setSalario(Double.parseDouble(JOptionPane.showInputDialog(Entre com o Salrio)));

Linha 9

JOptionPane.showMessageDialog(null,Nome do Funcionrio Cadastrado + f[i].getNome( ));

Linha 10 }
Linha 11

System.exit(0);

Linha 12

Linha 13 }

Vamos analisar o cdigo linha a linha:


Linha 3: Criao de um vetor de 50 posies chamado f. Esse
vetor do tipo Funcionario, ou seja, somente pode armazenar
objetos do tipo Funcionrio. Quando um vetor de um tipo
abstrato de dados (no caso classe Funcionrio) criado, cada
posio do vetor inicializada com o valor null.

f[]

null

null

null

null

null

..

null

..

null

49

null

Unidade 9

prog_orient_objetos.indb 171

171

2/7/2007 16:44:56

Universidade do Sul de Santa Catarina

Linha 4: Observe que as posies do vetor no referenciam


nenhum objeto do tipo Funcionrio, elas contm o valor
null. Precisamos ento criar, instanciar um objeto do tipo
Funcionrio em cada posio do vetor f. Poderamos fazer isso
sequencialmente e repetidamente da seguinte forma:
..
..
f[0]=new Funcionario( );
f[1]= new Funcionario( );
f[1]= new Funcionario( );
f[1]= new Funcionario( );
..
f[49]= new Funcionario( );
..

Isso est correto, mas vamos ter que programar 50 linhas de


cdigo para armazenar a referncia de um objeto em cada posio
do vetor. Ao invs de fazer assim, vamos usar uma estrutura de
repetio for que repetir 50 vezes as instrues das linhas 5 a 9.
Linha 5: Nessa linha est sendo criado um objeto do tipo
Funcionrio e sua referncia est sendo armazenada no vetor f[ ]
em alguma das suas posies. Por exemplo, quando a estrutura de
repetio for iniciar a varivel de controle i, vai estar com o valor
inicial 0, logo, na linha 5, ser armazenado na posio 0 do vetor
f[] uma referncia a um objeto do tipo Funcionrio, em palavras
mais simples, ser criado um objeto do tipo Funcionrio.
A gura a seguir ajuda a entender essa explicao.

172

prog_orient_objetos.indb 172

2/7/2007 16:44:56

Programao Orientada a Objeto

f[]

155x

null

null

null

null

..

null

..

null

49

Null

nome

Objeto Funcionrio

endereo

endereo 155x

salrio

Sempre que a posio f[0] for acessada, estar sendo acessado o


objeto Funcionrio do endereo 155x de memria.
O mesmo ir acontecer para as demais posies do vetor f[],
pois essa instruo da linha 5, est dentro de uma estrutura de
repetio que ir executar essa instruo 50 vezes, ou seja, sero
criados 49 objetos do tipo Funcionrio e a referncia de cada um
ser armazenada em cada posio do vetor f[].
Linha 6: Depois de criar o objeto em determinada posio do
vetor, por exemplo na posio 0, chamado o mtodo setNome( )
desse objeto (note que a maneira de fazer referncia ao objeto
atravs do nome do vetor e a posio f[i] - onde i tem valor 0,
no momento) e passado como parmetro o nome do funcionrio
digitado pelo usurio. Isso far com que o nome digitado seja
armazenado no atributo nome do objeto que a posio 0 do vetor
f[] faz referncia. A gura a seguir ilustra essa instruo:

Unidade 9

prog_orient_objetos.indb 173

173

2/7/2007 16:44:56

Universidade do Sul de Santa Catarina

f[]

155x

null

null

null

null

..

null

..

null

49

Null

nome Ana

Objeto Funcionrio

endereo

endereo 155x

salrio

Linhas 7 a 8: Idem para as linhas 7 e 8 que chamam


respectivamente os mtodos setEndereco( ) e setSalario( ) e
passam como parmetro, o endereo e o salrio do funcionrio
digitados pelo usurio.
Linha 9: Depois de criar o objeto e armazenar a referncia em
determinada posio do vetor, armazenar os valores de nome,
endereo e salrio no objeto Funcionrio, essa linha imprime
na tela o nome do funcionrio que acabou de ser armazenado
no atributo nome desse objeto. Para isso, chama o mtodo
getNome() desse objeto. Note que sempre precedido da referncia
ao objeto que est armazenada no vetor f[i], onde i possui um
valor de 0 a 49 no momento.
Linha 10: Final da estrutura de repetio for. Observe que as
cinco instrues anteriores sero executadas 50 vezes, pois o
intervalo de repetio estabelecido foi 50.

174

prog_orient_objetos.indb 174

2/7/2007 16:44:56

Programao Orientada a Objeto

A gura a seguir ilustra alguns objetos Funcionrios criados, suas


referncias armazenadas no vetor f[] e com valores dentro dos
atributos.

f[]

155x

156x

157x

Null

Null

..

Null

..

Null

49

Null

nome Ana

endereo 155x

endereo Rua A
salrio 1000,00
nome Joo

endereo 156x

endereo Rua J
salrio 1500,00
nome Carlos

endereo 157x

endereo Rua C
salrio 2500,00
..

Unidade 9

prog_orient_objetos.indb 175

175

2/7/2007 16:44:56

Universidade do Sul de Santa Catarina

SEO 2 - Mtodo sobrecarregado


Quando voc implementa os comportamentos (mtodos) de uma
classe, pode utilizar o recurso de mtodo sobrecarregado. Um
mtodo sobrecarregado, como j vimos um pouco na unidade
anterior, um mtodo com o mesmo nome de outro mtodo
que j existe na classe. Mas ele deve ter apenas o nome igual ao
nome de outro mtodo que j existe. Isso quer dizer que, alguma
diferena em nvel de parmetros que o mtodo recebe ou do tipo
de retorno do mtodo, deve existir.
Observe o trecho de cdigo da classe Funcionario:
public void setSalario(double dsalario){
salario=dsalario;
}
public void setSalario(String ssalario){
salario = Double.parseDouble(ssalario);
}

Existem dois mtodos com o mesmo nome setSalario, mas o que


muda o tipo do parmetro desse mtodo. O primeiro mtodo
setSalario recebe como parmetro um valor (salrio) do tipo
double e armazena na varivel. O segundo mtodo setSalario
recebe como parmetro um valor (salrio) do tipo String. Veja
que o tipo de retorno dos mtodos igual, ou seja, void (no
retorna nada).
Nesse caso, diz-se que o mtodo setSalario est sobrecarregado
(overloading).

176

prog_orient_objetos.indb 176

2/7/2007 16:44:56

Programao Orientada a Objeto

Mas, para que serve isso? Por que devo sobrecarregar


algum mtodo da minha classe?

Quando projetamos e implementamos uma classe, devemos ter


em mente que ela um molde, um template, uma estrutura que
no ser usada somente para resolver o problema em questo
inicial para o qual ela foi projetada, no nosso caso, cadastrar
informaes sobre funcionrios. Uma vez que a classe foi
implementada e compilada, ela pode ser usada para criar objetos a
partir dela em milhares de outros programas (classes).

No existe limite para


o nmero de vezes
que um mtodo pode
ser sobrecarregado.
Poderamos sobrecarregar
o mtodo setSalario 2
ou 3 vezes se isso fosse
necessrio.

Nesse sentido, quanto mais mtodos ou variveis do mesmo


mtodo (sobrecarga) se tiver implementado, melhor ser para as
futuras utilizaes dessa classe.
No nosso exemplo, resolvemos sobrecarregar somente o mtodo
setSalario. Uma verso dele recebe um valor de salrio do tipo
double e, outra verso, recebe um valor do tipo String. Isso quer
dizer que, quando for necessrio chamar o mtodo setSalario
para setar, modicar o valor do atributo salrio, o programador
que est utilizando a classe Funcionrio, poder escolher se deseja
chamar o mtodo setSalario e passar um valor do tipo double
ou passar um valor do tipo String. A sobrecarga de mtodo d
mais opes ao programador na hora de programar a chamada de
mtodos de uma classe.
Abaixo est o cdigo da classe Funcionrio com o mtodo
construtor sobrecarregado (vimos isso na unidade anterior) e com
o mtodo setSalario sobrecarregado.
Linha 1 public class Funcionario{
Linha 2
private String nome, endereco;
Linha 3
private double salario;
Linha 4
Linha 5
public Funcionario( ){
Linha 6
nome=;
Linha 7
endereco=;
Linha 8
salario=0;
Linha 9
}
Linha 10
Linha 11
public Funcionario( String snome,String sendere, double ssal){

Unidade 9

prog_orient_objetos.indb 177

Mtodo construtor
sobrecarregado
Funcionrio (String
snome, String sendere,
double ssal). Recebe como
parmetro o nome do
funcionrio na varivel
do tipo String snome,
o endereo na varivel
String sendere e o salrio
na varivel double ssal
e armazena o contedo
dessas variveis nos
respectivos atributos. Note
que j existe outro mtodo
construtor, mas esse
no recebe parmetros.
Isso quer dizer que o
mtodo construtor est
sobrecarregado.

177

2/7/2007 16:44:57

Universidade do Sul de Santa Catarina

Mtodo setSalario(String ssalario)


sobrecarregado. Recebe como
parmetro o salrio do funcionrio
na varivel do tipo String ssalario
e armazena o contedo dessa
varivel transformada para double
no atributo salario do objeto.
necessrio transformar porque o
atributo salario s aceita valores
do tipo double. Veja que j existe
outro mtodo setSalario s que este
recebe como parmetro um valor do
tipo double.

Linha 12
Linha 13
Linha 14
Linha 15
Linha 16
Linha 17
Linha 18
Linha 19
Linha 20
Linha 21
Linha 22
Linha 23
Linha 24
Linha 25
Linha 26
Linha 27
Linha 28
Linha 29
Linha 30
Linha 31
Linha 32
Linha 33
Linha 34
Linha 35
Linha 36
Linha 37
Linha 38
Linha 39
Linha 40
Linha 41
Linha 42
Linha 43
Linha 44 }

nome = snome;
endereo = sendere;
salario = ssal;
}
public void setNome(String snome){
nome=snome;
}
public void setEndereco(String sender){
endereco=sender;
}
public void setSalario(double dsalario){
salario=dsalario;
}
public void setSalario(String ssalario){
salario = Double.parseDouble(ssalario);
}
public String getNome(){
return nome;
}
public String getEndereco(){
return endereco;
}
public double getSalario(){
return salario;
}

Depois de implementar a nova verso da classe Funcionrio,


compile-a.

178

prog_orient_objetos.indb 178

2/7/2007 16:44:57

Programao Orientada a Objeto

Aps ter sido compilada, vamos utilizar esse classe para


criar objetos do tipo funcionrio em outra classe chamada
InsereFuncionario,java.
Observe que no a classe CadastraFuncionario.java

Linha 0 import javax.swing.*;


Linha 1 public class InsereFuncionario{
Linha 2
public static void main(String args[]) {
Linha 3
Funcionario f=new Funcionario( Ana,Rua A, 1000.00 );
Linha 4
JOptionPane.showMessageDialog(null,Nome do Funcionrio Cadastrado + f.getNome( ));
Linha 5
System.exit(0);
Linha 6 }
Linha 7 }

Nessa classe, estamos criando um objeto do tipo Funcionrio, na


linha 3. Para isso, estamos usando um dos mtodos construtores
disponveis na classe Funcionrio. Qual deles est sendo
chamado? O mtodo cons trutor sem parmetros ou o com
parmetros? O que espera trs parmetros!
E o outro mtodo? Est l na classe, disponvel para ser usado
em outra criao de objeto (porque s nesse momento que um
mtodo construtor chamado).
No caso dessa classe InsereFuncionario, note que no precisamos
chamar os mtodos setNome, setEndereco porque os atributos do
objeto funcionrio criado j foram armazenados com a chamada
desse mtodo construtor, ou seja, na chamada do mtodo
construtor j foram passados os valores para o nome, endereo
e salrio do funcionrio. A linha 4 s imprime o contedo do
atributo nome do objeto criado. O nome impresso ser Ana.
A seguir temos a classe CadastroFuncionario.java, a que criamos
no inicio dessa unidade. Note que ela foi modicada. Na linha
6, o mtodo setSalario est sendo chamado e est sendo passado
como parmetro, um valor de salrio do tipo String. Veja que o
valor da entrada do usurio no est sendo transformado para
doubl como nas verses anteriores.

Unidade 9

prog_orient_objetos.indb 179

179

2/7/2007 16:44:57

Universidade do Sul de Santa Catarina

Portanto, qual o mtodo setSalario que est sendo chamado? O


setSalario que espera um valor do tipo doubl ou o setSalario que
espera um valor do tipo String?
O mtodo setSalario que espera um valor do tipo String, porque
esse valor o que est sendo passado como parmetro.
Linha 0
import javax.swing.*;
Linha 1 public class CadastroFuncionario{
Linha 2 public static void main(String args[]) {
Linha 3
Funcionario f=new Funcionario( );
Linha 4
f.setNome(JOptionPane.showInputDialog(Entre com o Nome));
Linha 5
f.setEndereco(JOptionPane.showInputDialog(Entre com o Endereo));
Linha 6
f.setSalario(Double.parseDouble(JOptionPane.showInputDialog(Entre com o Salrio)));
Linha 7
JOptionPane.showMessageDialog(null,Nome do Funcionrio Cadastrado + f.getNome( ));
Linha 8
System.exit(0);
Linha 9 }
Linha 10 }

Sntese
Nessa unidade voc reforou os conceitos de classe e objeto,
bem como, a diferena entre referncia e objeto, aprendidos nas
unidades anteriores, porm, atravs de um novo exemplo.
Aprendeu passo a passo como modelar um problema do mundo
real para o mundo orientado a objeto, identicando os objetos do
problema, seus atributos e comportamentos e representando esses
objetos atravs de uma classe.
Aprendeu tambm a desenvolver programas com a criao de
mais de um objeto e manipulao desses objetos dentro de um
vetor. Trabalhar com vetor de objeto ser muito necessrio daqui
para frente, pois vamos comear a desenvolver programas que
armazenam informaes para vrios objetos.

180

prog_orient_objetos.indb 180

2/7/2007 16:44:57

Programao Orientada a Objeto

Atividades de auto-avaliao
1) Implemente o cdigo explicado nessa unidade.

Unidade 9

prog_orient_objetos.indb 181

181

2/7/2007 16:44:57

prog_orient_objetos.indb 182

2/7/2007 16:44:57

UNIDADE 10

Modicadores

Objetivo de aprendizagem


Aprender o conceito e a forma como se faz a aplicao


dos modificadores de acesso e dos modificadores static
e final.

Seo de estudo
Seo 1 Modificadores

prog_orient_objetos.indb 183

2/7/2007 16:44:57

Universidade do Sul de Santa Catarina

Para incio de conversa


Na unidade anterior voc sedimentou os conceitos das unidades
7 e 8 (bases da OO) e aprendeu a criar programas que envolviam
a criao de vrios objetos usando para isso vetor de objetos.
Aprendeu tambm o conceito de mtodo sobrecarregado e a
utilidade de utilizar esse tipo de recursos ao implementar uma
classe.
Nessa unidade voc ir aprender o conceito de modicadores
de acesso (public, private, protected e sem modicador) e
modicadores static e nal.
Modicadores esto presentes desde a primeira classe que voc
desenvolveu, inclusive antes de aprender os conceitos de OO.
Portanto, importante que voc saiba o signicado de cada um
deles e como utiliz-los.

SEO 1 - Modicadores
Na linguagem Java, podemos utilizar algumas palavras-chave
(keyword) para modicar o modo como so declaradas classes,
mtodos e variveis (atributos). Veremos como aplicar cada um
desses modicadores no texto a seguir.

Modicadores de acesso a membros (public, private, protected e


acesso de pacote)
So considerados membros de uma classe as variveis de
instncia (atributos) e os mtodos da classe.
Atributos tambm so conhecidos
como variveis de instncia.
Instncia o termo usado para
designar um objeto.

Quando implementamos uma classe, sempre declaramos os seus


membros (atributos ou mtodos). No momento dessa declarao,
utilizamos algum modicador de acesso. Os modicadores de
acesso que podem ser utilizados so: public, private, protected
e, quando nenhum modicador especicado, se diz que o
modicador de acesso de pacote (package).
Veja o trecho de cdigo da classe Funcionrio da unidade
anterior.

184

prog_orient_objetos.indb 184

2/7/2007 16:44:57

Programao Orientada a Objeto

Linha 1 public class Funcionario{


Linha 2
private String nome, endereco;
Linha 3
private double salario;
..
..
..
..
..
..
Linha 10
public void setNome(String snome){
Linha 11
nome=snome;
Linha 12
}

Declarao de todos
os atributos com o
modicador de acesso
private.
Declarao de mtodo com
o modicador de acesso
public.

Mas afinal, para que servem os modificadores de


acesso?

atravs dos modicadores de acesso, tambm conhecidos como


qualicadores de acesso, que se controla o acesso aos membros
da classe. Isso quer dizer que, os modicadores determinam
como, ou melhor, de que lugar, esses membros (atributos e
mtodos) podero ser acessados.
Importante!
Lembre-se que para acessar os membros de uma
classe em outra classe, necessrio preced-los com o
nome da referncia do objeto dessa classe.

Modicador private
No exemplo acima, todos os atributos declarados possuem o
modicador private, o que determina que eles so privados
classe, ou seja, s podem ser acessados por mtodos da prpria
classe Funcionrio. Esses atributos no podem ser acessados
diretamente pelo nome em outras classes, como mostra o cdigo
abaixo:
Linha 1 public class CadastroFuncionario{
Linha 2 public static void main(String args[]) {
Linha 3
Funcionario f=new Funcionario( );
Linha 4
f.nome = Ana;
Linha 5 }
Linha 6 }

Unidade 10

prog_orient_objetos.indb 185

Essa instruo est errada.


No podemos acessar o
atributo nome de qualquer
objeto do tipo Funcionrio
porque ele foi denido
com o modicador de
acesso private. Esse
atributo nome s pode ser
acessado diretamente pelo
nome dentro da classe
Funcionrio.

185

2/7/2007 16:44:58

Universidade do Sul de Santa Catarina

Nesse caso, a nica maneira de armazenar um valor dentro do


atributo nome desse objeto chamar o mtodo pblico (com
modicador public) setNome( ).
A seguinte linha corrige a instruo acima:
Linha 4

f.setNome(Ana);

atravs do modificador private, por exemplo, que


se implementa um importante conceito da OO - o
ENCAPSULAMENTO.

Uma boa prtica de programao tornar todos os atributos de


uma classe private, pois isso encapsula, protege os atributos dos
objetos que se originam da classe, permitindo que, s os mtodos
(geralmente os mtodos set) da classe possam acessar e modicar
os valores dessas variveis.

Modicador public
Quando um membro de uma classe (atributo ou mtodo) for
declarado como modicador public ele poder ser acessado,
diretamente pelo nome, dentro da prpria classe e por outras
classes tambm.
Qual membro de uma classe ns queremos que seja
acessado por outras classes? Atributos ou mtodos?

Mtodos, porque os atributos devem ser privados para promover


o encapsulamento. E se os atributos devem ser todos privados,
devemos ter mtodos pblicos para acessar esses atributos
externamente, ou seja, em outras classes.
Os clientes de uma classe so as
pessoas (programadores) que usam
uma classe para criar objetos a
partir dela.
So chamados de servios os
mtodos de uma classe.

Portanto, todos os mtodos set e get de uma classe devem ser


public para que possam ser acessados por outras classes.
Diz-se que os mtodos public de uma classe apresentam aos
clientes de uma classe uma visualizao dos servios que a classe
oferece (interface pblica da classe).

186

prog_orient_objetos.indb 186

2/7/2007 16:44:58

Programao Orientada a Objeto

Modicador de acesso de pacote


Chama-se de acesso de pacote quando no explicitamente
especicado um modicador para algum atributo ou mtodo.
Isso faz com que, outras classes do mesmo pacote (entendam
pacote como uma pasta ou diretrio) possam acessar os membros
da classe em questo.
O termo pacote est relacionado a um conjunto de classes
agrupadas em determinada estrutura de pastas ou diretrios.
Agrupa-se classes em pacotes com o objetivo de organizar essas
classes em categorias.
Por exemplo, vamos imaginar que temos as seguintes classes:
Retngulo, Tringulo e Trapzio. Cada uma dessas classes
representa atributos e comportamentos de objetos: Retngulo,
Tringulo e Trapzio, respectivamente.
Como essas trs classes representam atributos e comportamentos
de guras da geometria plana, podemos organiz-las em um
pacote (pasta) chamado GeometriaPlana.
A criao de pacotes no meramente uma ao de criar uma
pasta e copiar as classes para l, mas envolve um mtodo que ser
abordado oportunamente, mais frente.
O que importa agora voc saber que, se no for especicado
nenhum modicador em um atributo ou mtodo da classe, ele
ter modicador de pacote. Isso quer dizer que, somente as
classes que esto no mesmo pacote dessa classe podero acessar
diretamente pelo nome os atributos e mtodos dessa classe.
No trecho abaixo, os atributos declarados esto com modicador
de acesso de pacote.
Linha 1
Linha 2
Linha 3
..
..

public class Funcionario{


String nome, endereco;
double salario;
..
..

Unidade 10

prog_orient_objetos.indb 187

Atributos declarados sem


modicador de acesso. So
atributos com acesso de
pacote.

187

2/7/2007 16:44:58

Universidade do Sul de Santa Catarina

O cdigo abaixo ilustra o acesso direto (no recomendado) aos


atributos de um objeto, criado a partir da classe acima.
Linha 1 public class CadastroFuncionario{
Linha 2 public static void main(String args[]) {
Linha 3
Funcionario f=new Funcionario( );
Linha 4
f.nome = Ana;
O atributo nome do objeto pode ser
acessado diretamente nessa outra
classe, mas isso no recomendado!

Linha 5 }
Linha 6 }

Modicador protected
Esse modicador ser abordado quando voc aprender o conceito
de herana.

Modicador nal
O modicador nal no um modicador de acesso, ou seja,
seu objetivo no controlar o acesso a atributos e mtodos de um
objeto.
Na maioria das vezes, desejado que os atributos (variveis de
instncia) de um objeto tenham seus valores modicados. Porm,
existem situaes em que um atributo tem um valor xo e esse
valor no deve ser mudado. O atributo ter esse valor para todos
os objetos que forem instanciados (criados) a partir dessa classe.
Quando essa situao ocorrer, devemos denir o atributo com o
modicador nal.
Vamos mostrar o uso desse modicador em outra classe que
representa atributos e comportamento de objetos Crculo: a classe
Circulo.
Todo objeto Circulo tem como atributos o raio e o pi. Porm, o
valor de pi xo, constante, no deve mudar para cada objeto do
tipo Circulo. Logo, o atributo pi um candidato em potencial a
ter um modicador nal.

188

prog_orient_objetos.indb 188

2/7/2007 16:44:58

Programao Orientada a Objeto

Linha 1
Linha 2
Linha 3
Linha 4
Linha 5

public class Circulo{


private nal double pi=3.14;
private double raio;
public Circulo( ){
raio=0;
}
public Circulo(double draio ){
raio=drario;

Note que no foi


implementado o mtodo
setPi( ) pois no podemos
alterar o valor do atributo
pi j que ele foi denido
como nal.

}
public void setRaio(double draio){
raio=draio;
}
public double getRaio(){
return raio;
}
public double getPi(){
return pi;
}
public double calculaArea( ){
return pi*raio*raio;
}
}

Na linha 2, o atributo pi foi declarado com o modicador nal e


imediatamente inicializado com o seu valor xo.
Qualquer atributo denido como nal, deve ter seu valor
atribudo na linha de denio do atributo, obrigatrio!
Uma tentativa dentro de algum mtodo da prpria classe Circulo
de modicar o valor de um atributo nal capturada em tempo
de compilao.
Quando um atributo de uma classe denido como nal, todos
os objetos criados a partir daquela classe tero nesse atributo o
valor xo inicializado no momento da denio do atributo e,
esse valor no poder mudar.
Vejamos o cdigo da classe a seguir que cria objetos do tipo
Crculo.

Unidade 10

prog_orient_objetos.indb 189

189

2/7/2007 16:44:58

Universidade do Sul de Santa Catarina

Linha 1 public class CalculaAreaCirculos{


Linha 2
public static void main(String args[]) {
Linha 3
Circulo c1 = new Circulo( );
Linha 4
Circulo c2 = new Circulo( );
Linha 5
Circulo c3 = new Circulo( );
Linha 6
c1.setRaio(5.0);
Linha 7
c2.setRaio(6.0);
Linha 8
c3.setRaio(7.0);
Linha 9
}
Linha 10 }

Vamos analisar o cdigo:


Linhas 3 a 5: so criados objetos do tipo Circulo. Nesse
momento, criada a seguinte representao em memria de cada
objeto.

C1
referncias C 2
C3

10x
11x
290v

raio

endereo 10x

pi 3.14

Objetos Crculo

raio
pi 3.14
raio

endereo 11x
endereo 290x

pi 3.14

190

prog_orient_objetos.indb 190

2/7/2007 16:44:58

Programao Orientada a Objeto

Observe que o atributo pi de cada objeto j est com o valor 3.14.


Linhas 6 a 8: chamada ao mtodo pblico setRaio( ) para cada
objeto Circulo criado. Isso far com que os valores de raio
passado como parmetro sejam armazenados no atributo raio de
cada objeto Circulo.
O modicador nal tambm pode ser aplicado aos mtodos de
uma classe, mas para entender o funcionamento, nesse contexto,
necessrio que voc aprenda o conceito de herana.

Modicador static
O modicador static no um modicador de acesso, ou seja,
seu objetivo no controlar o acesso a atributos e mtodos de
um objeto. Sabemos que cada objeto instanciado a partir de uma
classe tem sua prpria cpia de todos os atributos (variveis de
instncia) da classe.
Quando existir uma situao em que o valor de uma varivel
de instncia puder ser compartilhado por todos os objetos
instanciados a partir de uma classe, essa varivel pode ser
denida como static.
Declarar um atributo como static economiza memria, uma vez
que esse valor (espao na memria) compartilhado por todos os
objetos criados a partir da classe onde o atributo static foi criado.
Mas em qual situao vamos desejar que um atributo
seja compartilhado por todos os objetos de uma
classe?
Resposta: quando o valor desse atributo puder ser
compartilhado por todos os objetos criados.

Na classe Circulo, implementada no tpico anterior, temos uma


situao onde o valor de um atributo pode ser compartilhado por
todos os objetos Circulo.
Que atributo esse? - O atributo pi!

Unidade 10

prog_orient_objetos.indb 191

191

2/7/2007 16:44:59

Universidade do Sul de Santa Catarina

Veja a representao grca dos objetos criados (ltima gura).


O valor do atributo pi o mesmo para todos os objetos Circulo,
logo, ele pode ser compartilhado por todos os objetos Circulo.
Portanto pi, alm de nal, pode ser tambm static.
Observe o trecho de cdigo da classe Circulo onde o atributo pi
denido:
Linha 1
Linha 2
Linha 3
Linha 4

public class Circulo{


private static nal double pi=3.14;
private double raio;
..

Veja agora como ca a representao em memria dos objetos


Circulo criados com o cdigo abaixo:
Linha 1 public class CalculaAreaCirculos{
Linha 2 public static void main(String args[]) {
Linha 3
Circulo c1 = new Circulo( );
Linha 4
Circulo c2 = new Circulo( );
Linha 5
Circulo c3 = new Circulo( );
Linha 6
c1.setRaio(5.0);
Linha 7
c2.setRaio(6.0);
Linha 8
c3.setRaio(7.0);
Linha 9
System.out.println(c2.getPi( ));
Linha 10
System.out.println(c3.getPi( ));
Linha 11 }
Linha 12 }

Vamos analisar o cdigo:


Linhas 3 a 5: so criados objetos do tipo Circulo. Nesse momento
criada a seguinte representao em memria de cada objeto.

192

prog_orient_objetos.indb 192

2/7/2007 16:44:59

Programao Orientada a Objeto

pi

3.14

c1
referncias c 2
c3

10x

Objetos Crculo*

11x
290v

raio

endereo 10x

raio

endereo 11x

raio

endereo 290x

Linhas 6 a 8: chamada ao mtodo setRaio( ) para armazenar o


valor de raio em cada objeto.
Linhas 9 e 10: para comprovar que qualquer objeto Circulo
tem acesso ao atributo static pi, observe essa instruo. Atravs
do mtodo getPi( ) do objeto c1, temos acesso ao contedo do
atributo pi. Ele impresso na tela.

* Note que todos os objetos


Circulo tm acesso ao atributo
pi, que static. como se pi
estivesse dentro do domnio
de cada objeto. Tornar pi static
interessante porque ele no
ocupa espao em memria em
cada objeto.

Na linha seguinte o mesmo acontece, s que o acesso se d


atravs do objeto c2. Isso comprova que, todos os objetos tm
acesso indistinto ao contedo de pi, que static e, nesse caso,
tambm nal.
Um atributo que nal pode ser static, porm o inverso no se
aplica, um atributo que static nem sempre ser nal.

Unidade 10

prog_orient_objetos.indb 193

193

2/7/2007 16:44:59

Universidade do Sul de Santa Catarina

Mtodos static
Mtodos de uma classe tambm podem ser declarados com
o modicador static, porm, se isso acontecer, esses somente
podero acessar atributos e outros mtodos tambm static.
Isso acontece porque qualquer membro da classe (atributo
ou mtodo) declarado como static, pertence classe e no a
nenhuma instncia (objeto) em particular dessa classe.
Vamos transformar o mtodo getPi( ) da classe Circulo em
static.
public static double getPi(){
return pi;
}

Isso s possvel porque esse mtodo acessa o atributo pi, que


tambm static.
Revisando: mtodo static s pode manipular
atributos e mtodos tambm static.

Como os membros de uma classe (atributos ou mtodos)


declarados como static pertencem a classe, e no a nenhuma
instncia (objeto) em particular, eles podem ser acessados em
outras classes da seguinte maneira:
Nomedaclasse.membrodaclasse

O cdigo a seguir ilustra essa explicao:


Linha 1 public class CalculaAreaCirculos{
Linha 2
public static void main(String args[]) {
Linha 3
System.out.println ( Circulo.getPi ( ) );
Linha 4 }
Linha 5 }

194

prog_orient_objetos.indb 194

2/7/2007 16:44:59

Programao Orientada a Objeto

Observe que, na linha 5, o mtodo getPi( ) est sendo chamado


precedido do nome da classe Circulo e no precedido da
referncia de um objeto, como sempre foi feito. Veja que no
existe nenhum objeto Circulo criado anteriormente. Como o
atributo pi static, ele j est alocado em memria, mesmo que
nenhum objeto Circulo tenha sido criado.
A instruo da linha 3 s pode acontecer porque o mtodo
getPi( ) static.
Qual o valor que o mtodo getPi( ) ir retornar?
3.14

esse valor que ser impresso na tela com o comando System.


out.println.
Isso no impede que se chame os membros da classe declarados
como static e que so public da maneira convencional, ou seja,
atravs de uma referncia de objeto.
nomedareferenciadeobjeto.membrodaclasse

O cdigo abaixo ilustra essa explicao:


Linha 1 public class CalculaAreaCirculos{
Linha 2
public static void main(String args[]) {
Linha 3
Circulo c=new Circulo( );
Linha 4
System.out.println ( c.getPi ( ) );
Linha 5 }
Linha 6 }

Note que o mtodo static getPi( ) est sendo chamado precedido


da referncia ao objeto Circulo. Ns j usamos vrias vezes, em
nossos programas, mtodos static de classes da biblioteca de
classes da linguagem Java (API Java).

Unidade 10

prog_orient_objetos.indb 195

195

2/7/2007 16:44:59

Universidade do Sul de Santa Catarina

Exemplos:
JOptionPane.showInputDialog(Entre com o valor);

Observe a sintaxe da linha acima. Temos o nome de uma classe


(JOptionPane) seguido de um . (ponto) seguido de mtodo
(showInputDialog( ) ).
Essa a maneira como mtodos static so chamados, precedidos
do nome da sua classe. Portanto, o mtodo showInputDialog( )
um mtodo static da classe JOptionPane.
Observe que nunca precisamos criar uma objeto do tipo
OptionPane para chamar o mtodo showInputDialog( ).
Outro exemplo so os mtodos da classe Math. Essa tambm
uma classe da biblioteca de classes da linguagem Java. Essa classe
possui um conjunto de mtodos matemticos que podemos usar
da seguinte maneira:
Math.pow(2,3).

Como pow(..) um mtodo public static da classe Math, no


precisa ser acessado via uma referncia de objeto, ou seja, no
preciso instanciar um objeto dessa classe para utilizar o mtodo
pow(..). Esse mtodo calcula a potncia de um nmero.
O primeiro argumento passado o 2 que se refere base e, o
segundo argumento passado o 3, que se refere ao expoente.
Logo, esse mtodo ir retornar o valor de 23.
Os membros de uma classe que so declarados como static
existem, mesmo que nenhum objeto dessa classe seja instanciado.
Eles esto disponveis em tempo de execuo quando a classe
carregada para a memria.
Para fortalecer o conceito de modicador static, vamos trabalhar
com outro exemplo. Modique a classe Funcionrio e insira o
cdigo a seguir:

196

prog_orient_objetos.indb 196

2/7/2007 16:44:59

Programao Orientada a Objeto

Linha 1
Linha 2
Linha 3
Linha 4
Linha 5
Linha 6
Linha 7
Linha 8
Linha 9
Linha 10
Linha 11
Linha 12
Linha 13
Linha 14
Linha 15
Linha 16
Linha 17
Linha 18
Linha 19
Linha 20
Linha 21
Linha 22
Linha 23
Linha 24
Linha 25
Linha 26
Linha 27
Linha 28
Linha 29
Linha 30
Linha 31
Linha 32
Linha 33
Linha 34
Linha 35
Linha 36
Linha 37
Linha 38
Linha 32 }

public class Funcionario{


private String nome, endereco;
private double salario;
private static int cont;
public Funcionario( ){
nome=;
endereo=;
salario=0;
cont=cont + 1;
}
public void setNome(String snome){
nome=snome;
}
public void setEndereco(String sender){
endereco=sender;
}

Cada vez que o construtor


dessa classe for chamado,
o atributo cont ir
incrementar em 1. Quando
um mtodo construtor
chamado? Sempre que um
objeto do tipo Funcionrio
for criado.

public void setSalario(double dsalario){


salario=dsalario;
}
public String getNome(){
return nome;
}
public String getEndereco(){
return endereco;
}
public double getSalario(){
return salario;
}
public static int getCont( ){
return cont;
}

Unidade 10

prog_orient_objetos.indb 197

Temos um atributo static


chamado cont.

Mtodo static getCont(


) retorna o contedo do
atributo static cont.

197

2/7/2007 16:44:59

Universidade do Sul de Santa Catarina

Voc entendeu a funo do atributo cont na classe


Funcionrio?

Ele static, logo, ele no estar dentro de cada objeto


Funcionrio criado. Ele existir apenas uma vez na memria, mas
todos os objetos podero acess-lo, modicando ou recuperando
seu valor.
Existe algum mtodo setCont ( ) para alterar o valor do
atributo cont?

No! O valor do atributo cont alterado (incrementado em 1)


somente dentro do mtodo construtor.
Com essas caractersticas conclumos que o atributo cont tem a
funo de armazenar o nmero de objetos Funcionrio criados.
No cdigo abaixo estamos criando vrios objetos Funcionrio:
Linha 1
Linha 2
Linha 3

public class ContaFuncinario{


public static void main(String args[]){
System.out.println(Funcionrio.getCont( ));

Linha 4
Linha 5
Linha 6

Funcionario f1= new Funcionario( );


Funcionario f2= new Funcionario( );
System.out.println(Funcionario.getCont());

Linha 7

System.out.println(f1.getCont());

Linha 8

System.out.println(f2.getCont());

Linha 9
Linha 10 }

Vamos analisar o cdigo linha a linha:


Linha 3: chamada ao mtodo public static getCont( ) que
retornar o valor 0 porque, nesse momento, o atributo static cont
est em memria com o valor 0. Note que o mtodo chamado
precedido com o nome da classe. Isso s pode acontecer porque o
mtodo static.

198

prog_orient_objetos.indb 198

2/7/2007 16:45:00

Programao Orientada a Objeto

A gura abaixo ilustra a representao em memria depois da


execuo dessa linha. O atributo static cont est em memria
com valor 0.
0

Linha 4: Criao do objeto Funcionrio f1. No momento da


criao de um objeto, sempre um mtodo construtor chamado,
nesse caso, o mtodo construtor Funcionrio ( ) chamado e
executado o cdigo que est dentro dele. Uma instruo que est
dentro do construtor a seguinte:
cont = cont + 1;

Isso faz com que o atributo cont armazene + 1. Logo, o seu valor
no momento 1.
A gura ilustra a representao em memria depois da execuo
dessa instruo.
O objeto f1 criado, seu mtodo construtor chamado e
incrementa o valor do atributo cont.

Objeto Funcionrio

pi

f1

100x
nome
Endereo
Salrio 0

Unidade 10

prog_orient_objetos.indb 199

endereo 100x

199

2/7/2007 16:45:00

Universidade do Sul de Santa Catarina

Linha 5: criao do objeto Funcionrio f2. No momento da


criao de um objeto, sempre um mtodo construtor chamado
e, assim, executado o que foi programado dentro dele. Logo,
a instruo que incrementa cont executada e seu valor do
momento 2.

cont
f1

Objetos Funcionrio

2
100x
101x
nome
Endereo
Salrio 0
nome
Endereo
Salrio 0

endereo 100x

endereo 101x

Linha 6: chamada ao mtodo public static getCont( ) que


retornar o valor 2 porque, nesse momento, o atributo static cont
est em memria com esse valor, depois de ter criado dois objetos
Funcionrio.
Linha 7: um mtodo static tambm pode ser chamado precedido
da referncia a um objeto. Nessa linha, o mtodo static getCont( )
chamado precedido da referncia f1 e retorna o valor 2, que o
valor do atributo cont.
Linha 8: chamada do mtodo static getCont( ) precedido da
referncia f2. Lembre-se que todos os objetos podem acessar o
atributo pi atravs do mtodo getCont( ). O valor retornado
tambm ser 2.

200

prog_orient_objetos.indb 200

2/7/2007 16:45:00

Programao Orientada a Objeto

Sntese
Nessa unidade voc aprendeu sobre modicadores. Viu que
existem os chamados modicadores de acesso (public, private,
protected e pacote) e que existem os modicadores static e nal.
Modicadores podem ser aplicados a uma classe, atributo ou
mtodo.
importante que voc entenda porqu usava a palavra public,
private, static nos programas anteriores.
Agora isso se tornou possvel.
Vimos nessa unidade as aplicaes mais importantes desses
modicadores, contudo, existem outras possibilidades de
aplicao dos modicadores.

Unidade 10

prog_orient_objetos.indb 201

201

2/7/2007 16:45:00

Universidade do Sul de Santa Catarina

Atividades de auto-avaliao
1) Analise o seguinte trecho de cdigo e identifique se existe algum erro.
Caso exista, explique qual o erro e como solucion-lo.
//classe Retangulo
public class Retngulo{
private double base, altura;
//mtodos
}
//classe calcula que cria objeto retangulo
public class CalculaRetangulo{
public static void main(String args[]){
Retangulo r = new Retangulo( )
r.base = 5.0;
r.altura = 6.0
}
}

202

prog_orient_objetos.indb 202

2/7/2007 16:45:00

Programao Orientada a Objeto

2) A seguinte classe tem dois mtodos static. Implemente outra classe


chamada UsaCalculos.java e demonstre como esses mtodos static
podem ser chamados dessa classe.
public class Calculos{
public static int potencia(int base, int exp){
int pote=1;
for (int i=1;i<=exp;i++){
pote = pote * base;
return pote;
}
public static int fatorial(int nu){
int fat=1;
for (int i=1;i<=nu;i++){
fat = fat * nu;
return fat;
}
}

Unidade 10

prog_orient_objetos.indb 203

203

2/7/2007 16:45:00

prog_orient_objetos.indb 204

2/7/2007 16:45:00

UNIDADE 11

Objetos como atributos de


outros objetos

Objetivo de aprendizagem


Entender o conceito de associao.

Seo de estudo
Seo 1 Associao

prog_orient_objetos.indb 205

2/7/2007 16:45:00

Universidade do Sul de Santa Catarina

Para incio de conversa


Na unidade anterior voc estudou o conceito de modicador
e viu que existem vrios tipos de modicadores: os de acesso,
static e nal e as implicaes de se denirem atributos e mtodos
com esses modicadores. Nessa unidade, voc ir estudar que,
ao representar atributos e comportamentos de um determinado
tipo de objeto atravs de uma classe, podem existir atributos
(nessa classe) que so de um outro tipo de objeto que tambm
est representado atravs de uma classe. Quando isso acontece,
existe um relacionamento entre esses tipos de objetos diferentes
(no mnimo dois), conseqentemente, entre as classes que os
representam, que ser chamado, nessa unidade, de associao.
O exemplo prtico que daremos a seguir ir facilitar seu
entendimento sobre o conceito de associao.

SEO 1 Associao
Ao modelar os atributos da classe Funcionrio (lembre-se que ela
representa os atributos e comportamentos de objetos Funcionrio)
podemos denir que o setor em que o funcionrio trabalha uma
informao importante.

Poderamos definir essa informao como um atributo


do tipo String.

Tambm podemos pensar que essa informao um objeto


do problema (cadastrar informaes sobre funcionrios). Esse
objeto possui atributos como cdigo e nome do setor ao ser
representado atravs de uma classe, possivelmente chamada de
Setor, pode ser usado como atributo de outros objetos/Classe ou
em outros programas.
Ao pensar em setor como um objeto, devemos representar esse
objeto atravs de uma classe logo teremos mais uma classe no

206

prog_orient_objetos.indb 206

2/7/2007 16:45:00

Programao Orientada a Objeto

nosso problema. Ela pode ser chamada de Setor, pois representa


os atributos e comportamentos de qualquer objeto Setor.
Teremos, portanto, duas classes para representar os objetos do
problema: Funcionrio e Setor.
O que ocasionou a criao da classe Setor foi pensarmos no
atributo setor como um objeto. Portanto, se setor um atributo
de Funcionrio e ele do tipo Setor, a classe Funcionrio possui
um relacionamento com a classe Setor. Vamos chamar esse
relacionamento de Associao.
A gura abaixo ilustra, em UML, o relacionamento de
associao entre a classe Funcionrio e a classe Setor.

Essa linha indica o relacionamento de associao


entre as classes Funcionrio e Setor. Os valores
em cada extremidade indicam a multiplicidade
desse relacionamento. A multiplicidade indica
quantas vezes um objeto Funcionrio est
associado a um objeto Setor e vice-versa.

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

Observe que o atributo setor do tipo


Setor. Isso quer dizer que entre os
atributos de um objeto Funcionrio
existir uma referncia para um objeto
do tipo Setor.

Como observado na gura acima, a multiplicidade indica o


nmero de vezes que um objeto se relaciona com outro objeto, ou
o nmero referncia ou referenciado por outro objeto.
Unidade 11

prog_orient_objetos.indb 207

207

2/7/2007 16:45:01

Universidade do Sul de Santa Catarina

Por exemplo: na gura anterior, um objeto Funcionrio est


associado a somente um objeto Setor (veja cardinalidade 1 na
extremidade direita). Isso quer dizer que um objeto Funcionrio
far referncia a, no mximo, 1 objeto Setor. Por outro lado,
um objeto Setor pode ser referenciado por vrios objetos do tipo
Funcionrio.
A seta no sentido da direita indica que somente o objeto
Funcionrio tem conhecimento do objeto Setor.
A tabela abaixo indica os diversos tipos de indicadores de
multiplicidade.
Indicadores de multiplicidade
Muitos
Exatamente um
Zero ou mais
Um ou mais
Zero ou um
Faixa especicada

*
1
0..*
1..*
0..1
2..4, 6..8

Antes de demonstrar como car o cdigo da classe Funcionrio


com o novo atributo setor, vamos representar gracamente um
objeto f1 do tipo Funcionrio em memria, para melhorar a sua
compreenso sobre esse conceito. O objeto est com todos os
atributos preenchidos.

f1 guarda a referncia ou endereo de memria do


objeto funcionrio. Ele est no endereo 10x.

Referncia f 1

Objeto Funcionrio
O atributo setor
guarda uma
referncia ou
endereo de um
objeto Setor.

10x

nome Ana
endereo Rua A
salrio 1000.00
setor 150x

Cdigo 1
Setor Financeiro

endereo 10x

Objeto Setor

208

prog_orient_objetos.indb 208

2/7/2007 16:45:01

Programao Orientada a Objeto

Primeiramente, vamos implementar a classe Setor.


Posteriormente, vamos implementar a nova verso da classe
Funcionrio, agora com o atributo setor que do tipo Setor.
Quando implementamos uma classe que possui algum atributo
ou faz referncia outra classe, essa outra classe j deve ter sido
implementada, por isso, vamos implementar primeiro, a classe
Setor.
uma implementao de classe simples, como voc j fez antes.
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 }

public class Setor{


private int codigo;
private String nomesetor;
public Setor( ){
codigo=0;
nomesetor=;
}
public Setor(int icod, String snomeset ){
codigo=icod;
nomesetor=snomeset;
}
public void setCodigo(int icod){
codigo=icod;
}
public void setNomeSetor(String snomeset){
nomesetor= snomeset;
}
public int getCodigo(){
return codigo;
}
public String getNomeSetor(){
return nomesetor;
}

Unidade 11

prog_orient_objetos.indb 209

209

2/7/2007 16:45:01

Universidade do Sul de Santa Catarina

Implementao da classe Funcionrio, agora com o atributo setor.


Implementao da classe Funcionrio.java
O atributo setor que do tipo Setor, ou seja, far
referncia a um objeto do tipo Setor em memria
deve ser private como os demais atributos.

o atributo setor 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 setSetor(Setor ssetor) recebe como


parmetro a referncia ou endereo de um
objeto Setor. Essa referncia armazenada
no atributo setor.

Mtodo getSetor( ) retorna o valor do atributo


setor que uma referncia ou endereo do
objeto Setor armazenado nela. Como a referncia
retornada do tipo Setor o tipo retornado Setor
Esse mtodo retorna o valor do atributo
nomesetor do objeto Setor a que o atributo setor
faz referncia. Isso ir car mais claro em seguida.

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

public class Funcionario


{
private String nome, endereco;
private double salario;
private Setor setor;
public Funcionario( )
{
nome=;
endereco=;
salario=0;
setor = null;
}
public void setNome(String snome)
{
nome=snome;
}
public void setEndereco(String sender)
{
endereco=sender;
}
public void setSalario(double dsalario)
{
salario=dsalario;
}
public String getNome()
{
return nome;
}
public String getEndereco()
{
return endereco;
}
public double getSalario()
{
return salario;
}
public void setSetor (Setor ssetor)
{
setor = ssetor;
}
public Setor getSetor( )
{
return setor;
}
public String getNomeSetorFunc( )
return setor.getNomeSetor( );
}
}

210

prog_orient_objetos.indb 210

2/7/2007 16:45:01

Programao Orientada a Objeto

Depois de implementar a classe Funcionrio e a classe Setor,


vamos desenvolver um programa de cadastre as informaes de
alguns Funcionrios que agora possuem um setor associado.

Implementao da classe CadastroFuncionarioSetor.java


Linha 0
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 34
Linha 35

Nesse trecho de cdigo, o cdigo do setor digitado


pelo usurio procurado no vetor s[ ] que contm
trs objetos Setor. Quando encontrar um objeto
Setor, com o atributo cdigo igual ao cdigo digitado
pelo usurio, a referncia (endereo) desse objeto
passada como parmetro para o mtodo setSetor(
) de Funcionrio. Essa referncia armazenada no
atributo setor do objeto Funcionrio f.

import javax.swing.*;
public class CadastroFuncionarioSetor{
public static void main(String args[]) {
Setor s[]=new Setor[3];
s[0] = new Setor(1,Financeiro);
s[1] = new Setor(2,Compras);
s[2] = new Setor(3,Almoxarifado);
Funcionario f=new Funcionario( );
f.setNome(JOptionPane.showInputDialog(Entre com o Nome));
f.setEndereco(JOptionPane.showInputDialog(Entre com o Endereo));
f.setSalario(Double.parseDouble(JOptionPane.showInputDialog(Entre com o Salrio)));
int codsetor=Integer.parseInt(JOptionPane.showInputDialog(Entre com o Cdigo do Setor));
for (int i=0;i<3;i++){
if (codsetor = = s[i].getCodigo( ))
f.setSetor(s[i]);
}
Funcionario f2=new Funcionario( );
f2.setNome(JOptionPane.showInputDialog(Entre com o Nome));
f2.setEndereco(JOptionPane.showInputDialog(Entre com o Endereo));
f2.setSalario(Double.parseDouble(JOptionPane.showInputDialog(Entre com o Salrio)));
codsetor=Integer.parseInt(JOptionPane.showInputDialog(Entre com o Cdigo do Setor));
for (int i=0;i<3;i++){
if (codsetor = = s[i].getCodigo( ))
f2.setSetor(s[i]);
}
Funcionario f3=new Funcionario( );
f.3.setNome(JOptionPane.showInputDialog(Entre com o Nome));
f.3.setEndereco(JOptionPane.showInputDialog(Entre com o Endereo));
f3.setSalario(Double.parseDouble(JOptionPane.showInputDialog(Entre com o Salrio)));
codsetor=Integer.parseInt(JOptionPane.showInputDialog(Entre com o Cdigo do Setor));
for (int i=0;i<3;i++){
if (codsetor = = s[i].getCod( ))
f3.setSetor(s[i]);
}
JOptionPane.showMessageDialog(null,Nome e Setor dos Funcionrios \n + f.getNome( )
+ +f.getNomeSetorFunc( ) + \n + f2.getNome( ) + + f2.getNomeSetorFunc( )
+ \n + f3.getNome( ) + + f.3.getNomeSetorFunc( ) );
Linha 37
System.exit(0);
Linha 38 }
Linha 39 }
Unidade 11

prog_orient_objetos.indb 211

211

2/7/2007 16:45:01

Universidade do Sul de Santa Catarina

Vamos analisar o cdigo acima, linha a linha:


Linha 3: Criao de um vetor chamado s[ ] para armazenar
endereos de objetos do tipo Setor. Aps a criao do vetor, cada
uma das trs posies estar inicializada com o valor null.

S[]

null

null

null

Vetor s[ ] de trs posies


alocado em memria.

Linha 4: armazena na posio 0 do vetor s[ ] a referncia


(endereo) do objeto Setor que est sendo criado com a instruo:
new Setor( 1, Financeiro). Observe que o objeto Setor est
sendo criado, e o seu mtodo construtor com parmetros est
sendo chamado. Conforme implementao desse mtodo
construtor os dois valores passados como parmetros esto sendo
armazenados nos respectivos atributos cdigo e nomesetor.

S[]

Objeto Setor

0
1
2

100x
null
null

codigo 1
nomesetor Financeiro

100x

Linhas 5 e 6: armazena na posio 1 e 2 do vetor s[ ] a referncia


(endereo) de mais dois objetos Setor que esto sendo criados
com as respectivas instrues: new Setor( 2, Compras) e
new Setor(3,Almoxarifado). Na criao desses dois objetos
Setor, novamente o mtodo construtor com parmetros est
sendo chamado. Chamar o mtodo construtor com parmetro
interessante quando se quer criar um objeto em memria e j
inicializar seus atributos com valores.
212

prog_orient_objetos.indb 212

2/7/2007 16:45:01

Programao Orientada a Objeto

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

Linha 7: Depois dos objetos Setor terem sido criados, ou seja,


estarem alocados em memria, vamos comear a criar os objetos
funcionrios do nosso problema para, nalmente, podermos
armazenar as informaes de funcionrio. Nessa linha criado
um objeto f do tipo Funcionrio.
F
S[]

90x
0
100x
1
101x
2
102x

Objeto Setor

codigo 1
nomesetor Financeiro

100x

Objeto Setor

codigo 2
nomesetor Compras

101x

Objeto Setor

codigo 3
nomesetor Almoxarifado

102x

Nome
Endereo
Salrio
Setor

90x

Objeto Funcionrio

Unidade 11

prog_orient_objetos.indb 213

213

2/7/2007 16:45:02

Universidade do Sul de Santa Catarina

Linhas 8 a 10: Depois que o objeto f for criado, so chamados


seus mtodos setNome( ), setEndereco( ) e set Salrio( ) para
armazenarem os valores digitados pelo usurio nos atributos
nome, endereo e salrio.
Linha 11: o usurio digita o cdigo do setor em que o
funcionrio trabalha e ele armazenado na varivel de memria
codsetor. Esse cdigo de setor no pode ser armazenado no
atributo setor do objeto funcionrio, porque esse atributo no
do tipo int e sim, do tipo Setor.
Linha 12: Depois do cdigo do setor digitado e armazenado na
varivel codsetor, iremos procurar um objeto Setor no vetor s[
] que tenha no atributo cdigo um valor igual ao que o usurio
digitou e que est armazenado na varivel codsetor. Para isso,
usaremos uma estrutura de repetio for para percorrer todos os
objetos Setor armazenados no vetor s[ ] . Note que a condio de
repetio comea em 0 e vai at um valor menor que 3 , ou seja,
2. Isso porque vetor s[ ] s possui trs posies.
Linha 13: vericado, testado, se o atributo cdigo de cada
objeto Setor que est no vetor s[ ] igual ao contedo da varivel
codsetor (aqui est o cdigo de setor que o usurio digitou).
O cdigo de cada objeto Setor recuperado com seu mtodo
getCodigo( ).
Linha 14: se for encontrado um objeto Setor com cdigo igual
ao cdigo digitado pelo usurio e que est armazenado na
varivel codsetor, a referncia desse objeto Setor passada como
parmetro para o mtodo setSetor do objeto Funcionrio que
est sendo cadastrado no momento. Note o que est em s[i],
sendo que i pode ser 0, 1 ou 2 uma referncia para um objeto
Setor, por isso que s[i] est sendo passado como parmetro para
o mtodo setSetor. Na implementao desse mtodo (ver linha 35
da classe Funcionrio) essa referncia armazenada no atributo
setor do objeto Funcionrio.
No nosso exemplo, o usurio ir digitar o cdigo de setor 1 para
o primeiro funcionrio cadastrado (signica que o funcionrio
trabalha no setor Financeiro). A rotina das linhas 12 a 14 ir
procurar esse cdigo em algum objeto Setor do vetor s[]. Ele
ser encontrado no objeto Setor que est na primeira posio do
vetor s[ ]. Observem na gura abaixo que a primeira posio
214

prog_orient_objetos.indb 214

2/7/2007 16:45:02

Programao Orientada a Objeto

do vetor s[ ] aponta para um objeto Setor, cujo cdigo 1 logo,


a referncia ou endereo que est nessa posio, ser passado
como parmetro para o mtodo setSetor( ) e ser armazenada
no atributo setor. Veja isso na gura abaixo: o atributo setor do
objeto Funcionrio est com o valor de referncia (100x) para o
objeto Setor cujo cdigo 1 (Financeiro).
f
S[]

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

Veja que o atributo setor do objeto Funcionrio f est


apontando para o endereo 100x que o endereo do
objeto Setor cujo cdigo 1 e o nome Financeiro.

Linhas 16 e 24: criado um outro objeto Funcionrio f2 e o


mesmo procedimento descrito para o objeto Funcionario f,
executado. O funcionrio f2 trabalha no setor de Almoxarifado,
logo ser digitado o cdigo 2, e as rotinas das linhas 21 a 24 iro
procurar no vetor s[ ] se existe algum objeto Setor cujo cdigo
igual ao cdigo 2 digitado pelo usurio e que foi armazenado na
varivel codsetor. Esse cdigo ser encontrado no objeto Setor,
que est sendo referenciado na posio 2 do vetor s[ ] logo, a
referncia para o objeto Setor ali armazenada ser passada como
parmetro para o mtodo setSetor( ) e ser armazenada no

Unidade 11

prog_orient_objetos.indb 215

215

2/7/2007 16:45:02

Universidade do Sul de Santa Catarina

atributo setor do objeto Funcionrio f2, caracterizando, assim,


que esse funcionrio trabalha no setor de Almoxarifado. A gura
abaixo ilustra esse processo.

f2
f
S[]

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

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

Note que o atributo setor do objeto Funcionrio f2


aponta ou faz referencia para o objeto Setor de endereo
102x cujo cdigo 3 e o nome Almoxarifado.

Linhas 25 e 34: criado o terceiro objeto Funcionrio f3 e o


mesmo procedimento descrito para os objetos Funcionario f
e f2 executado. O funcionrio f3 tambm trabalha no setor
de Almoxarifado logo ser digitado o cdigo 2, e a rotina das
linhas 30 a 34 ir procurar no vetor s[ ] se existe algum objeto
Setor, cujo cdigo igual ao cdigo 2 digitado pelo usurio e
que foi armazenado na varivel codsetor. Esse cdigo tambm

216

prog_orient_objetos.indb 216

2/7/2007 16:45:02

Programao Orientada a Objeto

ser encontrado no objeto Setor que est sendo referenciado


na posio 2 do vetor s[ ] logo a referncia para o objeto Setor
ali armazenada ser passada como parmetro para o mtodo
setSetor( ) e ser armazenada no atributo setor do objeto
Funcionrio f3, estabelecendo assim, que esse funcionrio
tambm trabalha no setor de Almoxarifado. Como voc deve
ter notado, teremos dois funcionrios que trabalham no mesmo
setor, portanto, que compartilham do mesmo objeto Setor. A
gura abaixo ilustra esse processo.

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

Note que o atributo do objeto Funcionrio f3 tambm


aponta ou faz referncia para o objeto Setor cujo cdigo
3 e o nome Almoxarifado.

Unidade 11

prog_orient_objetos.indb 217

217

2/7/2007 16:45:02

Universidade do Sul de Santa Catarina

Esse ltimo cadastro de funcionrio explicita multiplicidade 0..*


(nenhum ou muitos) da classe Setor com a classe Funcionario.
Vamos revisar: essa multiplicidade indica que um
objeto Setor pode ser referenciado por nenhum ou
por vrios objetos Funcionrio.

E isso que acabamos de demonstrar com o cadastro do


funcionrio f3, j que o seu atributo setor tambm faz referncia
ao objeto Setor, cujo cdigo 3 e que j tinha sido referenciado
pelo segundo funcionrio, j que ambos trabalham no setor
Almoxarifado.
Linha 35: nessa linha, impresso na tela no nome e setor dos
trs funcionrios cadastrados. Note que o nome recuperado
atravs do mtodo getNome ( ) do objeto Funcionrio e o nome
do setor recuperado atravs do mtodo getNomeSetorFunc( ),
que tambm foi implementado na classe Funcionrio. Vamos
revisar a implementao desse mtodo aqui.
public String getNomeSetorFunc( )
return setor.getNomeSetor( )
}

Observe que quando esse mtodo chamado para um


determinado objeto Funcionrio, ser acessado o valor do atributo
setor desse objeto Funcionrio.
Exemplo: se esse mtodo for chamado para o objeto Funcionrio
f2 o valor do atributo setor ser 102x . Essa a referncia
ou endereo de um objeto Setor. Logo, a instruo setor.
getNomeSetor( ) recupera o nome do setor do objeto que est no
endereo 102x, no nosso caso, Almoxarifado.
A sada em tela ser como a listagem a seguir:
Nome e Setor dos Funcionrios
Ana
Financeiro
Joo
Almoxarifado
Carlos
Almoxarifado

218

prog_orient_objetos.indb 218

2/7/2007 16:45:02

Programao Orientada a Objeto

Sntese
Nesta unidade voc aprendeu o conceito de relacionamento entre
classes. O relacionamento demonstrado nessa unidade se chama
Associao.
Na maioria dos sistemas orientados a objetos que voc ir
construir, existiro diversas classes representando atributos
e comportamentos dos objetos do problema. Esses objetos,
muito provavelmente, no estaro isolados, ou seja, eles iro se
relacionar. Uma classe poder se relacionar com vrias outras
classes.
Uma das formas de relacionamento a Associao.
Nela, um dos objetos, ou ambos, apenas conhecem o outro
objeto.

Unidade 11

prog_orient_objetos.indb 219

219

2/7/2007 16:45:02

Universidade do Sul de Santa Catarina

Atividades de auto-avaliao
1) Faa uma nova verso da classe Funcionrio e inclua um novo atributo:
cep.
O cep ir indicar a rua (logradouro) e bairro do funcionrio.O
atributo endereo que j existe para o funcionrio pode armazenar o
complemento do endereo como o nmero, bloco, apto, etc.
Voc deve pensar e modelar cep com um objeto do tipo Cep. Esse
objeto tem os seguintes atributos: cdigo (cep), rua (logradouro) e o
bairro.
Um funcionrio est associado a somente um (1) cep, mas um cep pode
estar associado a vrios funcionrios.
Portanto, existir um relacionamento de Associao entre Funcionrio
e Data, semelhante ao relacionamento trabalhado nessa unidade entre
Funcionrio e Setor.
Modele as classes do sistema em UML.
Crie um programa para cadastrar 5 funcionrios e aps o cadastro
exibir nome, rua e bairro de todos os funcionrios.

220

prog_orient_objetos.indb 220

2/7/2007 16:45:03

UNIDADE 12

Associao na prtica

Objetivo de aprendizagem


Fortalecer o conceito de associao.

Seo de estudo
Seo 1 Associao por exemplos

prog_orient_objetos.indb 221

2/7/2007 16:45:03

Universidade do Sul de Santa Catarina

Para incio de conversa


Na unidade anterior voc aprendeu que, ao representar atributos
e comportamentos de um determinado tipo de objeto atravs de
uma classe, podem existir atributos (nessa classe) que so de um
outro tipo de objeto, que tambm est representado atravs de
uma classe.
Isso caracteriza um relacionamento entre esses tipos de objetos
diferentes (no mnimo dois), conseqentemente, entre as
classes que os representam, esse relacionamento chamado de
associao.
Nessa unidade iremos fortalecer esse conceito atravs de outro
exemplo prtico.

SEO 1 - Associao por exemplos


Vamos relembrar o problema do sistema de contas correntes,
apresentado nas unidades 7 e 8, em que voc comeou a aprender
os primeiros conceitos de O.O.
Nesse sistema tnhamos a classe Cliente e a classe Conta.
Obviamente, elas representam objetos do tipo Cliente e objetos
do tipo Conta nesse sistema.
Existe alguma relao entre estes dois tipos de
objetos: Cliente e Conta?

Sim! Um cliente poder possuir vrias contas e, (no nosso sistema)


uma conta, pode pertencer a, no mximo, 1 cliente. Isso indica a
multiplicidade desse relacionamento.
O objeto conta, apenas conhece o seu cliente. Esse um
relacionamento de associao.
A gura a seguir representa em UML, as classes desse sistema e
como elas se relacionam.
222

prog_orient_objetos.indb 222

2/7/2007 16:45:03

Programao Orientada a Objeto

Conta

Cliente
nome: String
endereo: String
cpf: int

multiplicidade
1
0..*

numero: int
saldo: double
cliente: Cliente
Conta( )
setNumero(int inum)
setSaldo(double ssal)
setCliente(Cliente c)
getNumero():int
getSaldo():double
getCliente():Cliente

Cliente( )
setNome(String snome )
setEndereco(String send)
setCpf(int icpf)
getNome(): String
getEndereco(): String
getCpf(): int

Observe que o atributo


cliente do tipo Cliente.
Isso caracteriza a ligao
do objeto conta com
o objeto Cliente. Cada
conta faz referncia a um
determinado Cliente.

Antes de demonstrar como car o cdigo das classes Conta e


Cliente, vamos representar gracamente um objeto c1 do tipo
Conta em memria, fazendo referncia atravs do seu atributo
cliente a um objeto Cliente.
cta [ ]
cli [ ]

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

cta1 guarda a referncia


ou endereo de memria
do objeto Conta. Ele
est no endereo 10x.
cli guarda referencia
de Cliente que est no
endereo 140x

Primeiramente, vamos implementar a classe Cliente.


Posteriormente, vamos implementar a classe Conta com o
atributo cliente que do tipo Cliente.
Lembre-se!
Quando implementamos uma classe que possui
algum atributo ou faz referncia a outra classe, essa
outra classe, j deve ter sido implementada, por isso,
vamos implementar primeiro a classe Cliente.

Unidade 12

prog_orient_objetos.indb 223

223

2/7/2007 16:45:03

Universidade do Sul de Santa Catarina

Implementao da Classe Cliente.java


Linha 1
public class Cliente{
Linha 2
private String nome;
Linha 3
private String endereco;
Linha 4
private int cpf;
Linha 5
Linha 6
public Cliente( ){
Linha 7
nome= ;
Linha 8
endereco=;
Linha 9
cpf=0;
Linha 10
}
Linha 11
Linha 12
public Cliente(String snom, String send, int icpf ){
Linha 13
nome=snom;
Linha 14
endereco=send;
Linha 15
cpf=icpf;
Linha 16
}
Linha 17
Linha 18
public void setNome(String snom){
Linha 19
nome=snom;
Linha 20
}
Linha 21
Linha 22
public void setEndereco(String sender){
Linha 23
endereco= sender;
Linha 24
}
Linha 25
Linha 26
public void setCpf(int icpf){
Linha 27
cpf= icpf;
Linha 28
}
Linha 29
Linha 30
public String getNome(){
Linha 31
return nome;
Linha 32
}
Linha 33
Linha 34
public String getEndereco(){
Linha 35
return endereco;
Linha 36
}
Linha 37
Linha 38 }
Linha 39
public int getCpf( ){
Linha 40
return cpf;
Linha 41
}
Linha 42 } //m da classe Cliente

224

prog_orient_objetos.indb 224

2/7/2007 16:45:03

Programao Orientada a Objeto

Implementao da Classe Conta.java


Linha 1 public class Conta{
Linha 2
private int numero;
Linha 3
private double saldo;
Linha 4
private Cliente cliente;
Linha 5
Linha 6
public Conta ( ){
Linha 7
numero =0;
Linha 8
saldo =0;
Linha 9
cliente = null;
Linha 10
Linha 11
}
Linha 12
public void setNumero(int inum){
Linha 13
numero=inum;
Linha 14
}
Linha 15
Linha 16
public void setSaldo(double ssaldo){
Linha 17
saldo=ssaldo;
Linha 18
}
Linha 19
Linha 20
public void setCliente(Cliente c){
Linha 21
cliente = c;
Linha 22
}
Linha 23
public int getNumero( ){
Linha 24
return numero;
Linha 25
}
Linha 26
Linha 27
public double getSaldo(){
Linha 28
return saldo;
Linha 29
}
Linha 30
Linha 31
public Cliente getCliente(){
Linha 32
return cliente;
Linha 33
}
Linha 34 }

Unidade 12

prog_orient_objetos.indb 225

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.

Esse mtodo retorna a referncia para um objeto


Cliente armazenada no atributo cliente. Por isso o
tipo de retorno Cliente.

225

2/7/2007 16:45:03

Universidade do Sul de Santa Catarina

Depois de implementar a classe Cliente e a classe Conta, vamos


desenvolver um sistema de contas correntes que cadastre Clientes
e suas Contas.
Como o sistema tem ns didticos, cadastrar 3 contas e 2
clientes. Voc deve expandir esse nmero depois, nas atividades
de auto-avaliao.

Implementao da Classe Cliente.java


Linha 0 import javax.swing.*;
Linha 1 public class SistemaContaCorrente{
Linha 2 public static void main(String args[]) {
Linha 3 Conta cta[ ]=new Conta[3];
Linha 4 Cliente cli[ ]= new Cliente[2];
Linha 5 //Cadastrar o primeiro cliente com uma conta corrente
Linha 6 cli[0] = new Cliente( );
Linha 7 cli[0]. setNome(JOptionPane.showInputDialog(Entre com o Nome));
Linha 8 cli[0].setEndereco(JOptionPane.showInputDialog(Entre com o Endereo));
Linha 9 cli[0].setCpf(Integer.parseInt(JOptionPane.showInputDialog(Entre com o CPF)));
Linha 10 cta[0] = new Conta();
Linha 11 cta[0]. setNumero(Integer.parseInt(JOptionPane.showInputDialog(Entre com o Numero)));
Linha 12 cta[0].setSaldo(Double.parseDouble(JOptionPane.showInputDialog(Entre com o saldo)));
Linha 13 cta[0].setCliente(cli[0]);
Linha 14 //cadastrar o segundo cliente e sua conta
Linha 15 cli[1] = new Cliente( );
Linha 16 cli[1]. setNome(JOptionPane.showInputDialog(Entre com o Nome));
Linha 17 cli[1].setEndereco(JOptionPane.showInputDialog(Entre com o Endereo));
Linha 18 cli[1].setCpf(Integer.parseInt(JOptionPane.showInputDialog(Entre com o CPF)));
Linha 19 cta[1] = new Conta();
Linha 20 cta[1]. setNumero(Integer.parseInt(JOptionPane.showInputDialog(Entre com o Numero)));
Linha 21 cta[1].setSaldo(Double.parseDouble(JOptionPane.showInputDialog(Entre com o saldo)));
Linha 22 cta[1].setCliente(cli[1]);
Linha 23 //cadastrar outra conta e associar ao primeiro cliente.
Linha 24 cta[2] = new Conta();
Linha 25 cta[2]. setNumero(Integer.parseInt(JOptionPane.showInputDialog(Entre com o Numero)));
Linha 26 cta[2].setSaldo(Double.parseDouble(JOptionPane.showInputDialog(Entre com o saldo)));
Linha 27 cta[2].setCliente(cli[0]);
Linha 28 //listar o nmero da conta, saldo e nome de todos os clientes cadastrados
Linha 29 JOptionPane.showMessageDialog(null, Nmero da conta Saldo - Nome dos Clientes \n +
Linha 30 cta[0].getNumero( ) + - +cta[0].getSaldo( ) + - +cta[0].getCliente( ).getNome( ) + \n +
Linha 31 cta[1].getNumero( ) + - +cta[1].getSaldo( ) + - +cta[1].getCliente( ).getNome( ) + \n +
Linha 32 cta[2].getNumero( ) + - +cta[2].getSaldo( ) + - +cta[2].getCliente( ).getNome( ) );
Linha 36
Linha 37 System.exit(0);
Linha 38 }
Linha 39 }

226

prog_orient_objetos.indb 226

2/7/2007 16:45:03

Programao Orientada a Objeto

Vamos analisar o cdigo anterior, linha a linha:


Linha 3: Criao de um vetor chamado cta[ ] para armazenar
objetos do tipo Conta. Aps a criao do vetor, todas as posies
esto com o valor null.
0
1
2

cta [ ]

null
null
null

Vetor cta[ ] de trs posies


alocado em memria.

Linha 4: Criao de um vetor chamado cli[ ] de 2 posies para


armazenar objetos do tipo Cliente. Aps a criao do vetor todas
as posies esto com o valor null.
cta [ ]
Vetor cta[ ] de trs
posies alocado
em memria.

cli [ ]

0
1
2

null
null
null

0
1

null
null

Linhas 6 a 9: Criao de um objeto Cliente e atribuio


da sua referncia na posio 0 do vetor cli. Posteriormente,
armazenamento de nome, endereo e cpf nos respectivos
atributos desse objeto.

cta [ ]

0
1
2

null
null
null

cli [ ]

0
1

140x
null

Objeto Cliente

nome Carlos
endereo Rua R
cpf 626193455

Unidade 12

prog_orient_objetos.indb 227

Endereo 140x

227

2/7/2007 16:45:04

Universidade do Sul de Santa Catarina

Linhas 10, 11 e 12: Criao de um objeto Conta e atribuio


da sua referncia na posio 0 do vetor cta. Posteriormente,
armazenamento de nmero e saldo desse objeto.
Linha 13: passagem da referncia que est armazenada na
posio 0 do vetor cli[ ] para o mtodo setCliente( ) do objeto
Conta. A referncia que est nessa posio corresponde ao
endereo do primeiro objeto Cliente cadastrado. No mtodo
setCliente, essa referncia armazenada no atributo cliente do
objeto Conta que est sendo cadastrado no momento (cta[0]).

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.

cta [ ]

0
1
2

160x
null
null

cli [ ]

0
1

140x
null

Objeto Cliente

nome Carlos
endereo Rua R
cpf 626193455

Endereo 140x

Objeto Conta

numero 1596
saldo 2000.00
cliente 140x

Endereo 160x

Linhas 15 a 18: Criao do segundo objeto Cliente e atribuio


da sua referncia na posio 1 do vetor cli. Posteriormente,
armazenamento de nome, endereo e cpf nos respectivos
atributos desse objeto.

228

prog_orient_objetos.indb 228

2/7/2007 16:45:04

Programao Orientada a Objeto

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

Linhas 19, 20, 21 e 22: Criao do segundo objeto Conta


e atribuio da sua referncia na posio 1 do vetor cta.
Posteriormente, ser armazenado nmero, saldo desse objeto e a
referncia de um objeto Cliente no atributo cliente desse objeto
Conta.
cta [ ]

cli [ ]

0
1
2

160x
162x
null

0
1

140x
142x

Objeto Cliente

nome Carlos
endereo Rua C
cpf 626193455

Endereo 140x

Objeto Cliente

nome Roger
endereo Rua R
cpf 75567788

Endereo 142x

Objeto Conta

numero 1596
saldo 2000.00
cliente 140x

Endereo 160x

Objeto Conta

numero 1597
saldo 1000.00
cliente 142x

Endereo 162x

Unidade 12

prog_orient_objetos.indb 229

O atributo cliente do
segundo objeto Conta
aponta ou faz referncia
para o endereo do
segundo objeto Cliente.
142x o endereo do
segundo objeto Cliente
cadastrado.

229

2/7/2007 16:45:04

Universidade do Sul de Santa Catarina

Linhas 24, 25, 26 e 27: agora ser cadastrada outra conta, ou


seja, ser criado um objeto conta e ele ser associado ao primeiro
cliente cadastro. Isso possvel porque na nossa modelagem
inicial do problema, um cliente pode ter vrias contas associadas
a ele. A referncia desse terceiro objeto Conta ser armazenada
na terceira posio do vetor cta[ ] .
Posteriormente, ser armazenado nmero, saldo desse objeto,
conta e a referncia do primeiro objeto Cliente no atributo cliente
desse objeto Conta. Portanto, o primeiro cliente possui duas
contas correntes.
cta [ ]

cli [ ]

O atributo cliente do terceiro objeto


Conta aponta ou faz referncia
para o endereo do primeiro objeto
Cliente. 140x o endereo do
primeiro objeto Cliente cadastrado.

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

Linhas 29 a 32: Impresso na tela do nmero da conta, saldo e


nome dos clientes cadastrados. Para isso, chamado o mtodo
getNumero( ) e getSaldo( ) de cada objeto Conta (dos trs). Para
imprimir o nome do cliente de uma conta, chamado o mtodo
getCliente( ). Esse mtodo ir retorna a referncia (endereo) do
objeto Cliente associado quela conta. A partir dessa referncia
possvel recuperar o nome do cliente atravs do seu mtodo
getNome( ).
230

prog_orient_objetos.indb 230

2/7/2007 16:45:04

Programao Orientada a Objeto

Vamos exemplicar com a linha 30.


O que existe no atributo nmero do objeto cuja
referncia est em cta[0]?

O que est em cta[0] uma referncia (endereo) de um objeto.


Nesse endereo existe um objeto Conta cujo valor do atributo
numero 1596. Logo 1596 que ser impresso na tela.
Linha 30 cta[0].getNumero( ) + +cta[0].getSaldo( ) + \n +cta[0].getCliente( ).getNome( ) + \n +;

O que existe no atributo cliente do objeto cuja


referncia est em cta[0]?

Existe uma referncia para um objeto do tipo Conta. O mtodo


getCliente( ) do objeto Conta ir retornar essa referncia para um
objeto Cliente. No caso dessa linha, ser retornada a referncia de
nmero 140x para um objeto Cliente.
Lembre-se de que a instruo \n serve para imprimir o prximo
valor na prxima linha.

Linha 30

cta[0].getNumero( ) + +cta[0].getSaldo( ) + \n +cta[0].getCliente( ).getNome( ) + \n +;

A partir dessa referncia (ela aponta para um objeto Cliente),


podemos chamar um mtodo getNome( ) desse objeto Cliente.
Nesse caso o nome retornado ser Carlos. Carlos o cliente
desse objeto conta que referenciado em cta[0].
A sada em tela ser como a listagem abaixo:
Nmero da conta

Saldo

Nome dos Clientes

1596
1597
1598

2000.00
1000.00
500.00

Carlos
Roger
Carlos

Unidade 12

prog_orient_objetos.indb 231

231

2/7/2007 16:45:04

Universidade do Sul de Santa Catarina

A primeira verso do sistema de contas correntes foi mais


simples para facilitar o seu entendimento. Vamos elaborar uma
nova verso desse mesmo sistema um pouco mais renada.
Novamente, o nosso sistema ter a limitao de possuir trs
contas e dois clientes. Vamos trabalhar assim para diminuir a
complexidade do cdigo.
Linha 0 import javax.swing.*;
Linha 1 public class SistemaContaCorrente{
Linha 2 public static void main(String args[]) {
Linha 3
Conta cta[ ]=new Conta[3];
Linha 4
Cliente cli[ ]= new Cliente[2];
Linha 5
int pcli=0, pta=0;
Linha 6
while (true) {
Linha 7
String op= JOptionPane.showInputDialog
(1 Cadastra Cliente e Conta 2 Cadastra Conta para Cliente 3 - Sair));
Linha 8
if (op.equalsIgnoreCase(1)){
Linha 9
cli[pcli] = new Cliente( );
Linha 10
cli[pcli]. setNome(JOptionPane.showInputDialog(Entre com o Nome));
Linha 11
cli[pcli].setEndereco(JOptionPane.showInputDialog(Entre com o Endereo));
Linha 12
cli[pcli].setCpf(Integer.parseInt(JOptionPane.showInputDialog(Entre com o CPF)));
Linha 13
cta[pcta] = new Conta();
Linha 14
cta[0].setNumero(Integer.parseInt(JOptionPane.showInputDialog
(Entre com o Numero)));
Linha 15
cta[0].setSaldo(Double.parseDouble(JOptionPane.showInputDialog
(Entre com o saldo)));
Linha 16
cta[0].setCliente(cli[0]);
Linha 17
pcli ++ ; //igual a pcli = pcli + 1;
Linha 18
pcta ++ ;
Linha 19 }
Linha 20 else
Linha 21
if (op.equalsIgnoreCase(2)){
Linha 22
String nomecli = JOptionPane.showInputDialog(Entre com o Nome do Cliente );
Linha 23
for (int i=0;i<pcli;i++) {
Linha 24
if (nomecli.equalsIgnoreCase(cli[i].getNome( ))){ //achou o cliente
Linha 25
JOptionPane.showMessage(null, Cliente : + cli[i].getNome( ));
Linha 26
cta[pta] = new Conta();
Linha 27
cta[pta]. setNumero(Integer.parseInt(JOptionPane.showInputDialog
(Entre com o Numero)));
Linha 28
cta[pta].setSaldo(Double.parseDouble(JOptionPane.showInputDialog
(Entre com o saldo)));
Linha 29
cta[1].setCliente(cli[i]);
Linha 30
pcta ++ ; //incrementa o contador de contas

232

prog_orient_objetos.indb 232

2/7/2007 16:45:04

Programao Orientada a Objeto

Linha 31
break; //instruo de interrompe a repetio (for)
Linha 32
}
Linha 33
}
Linha 34
} //m da op = = 2
Linha 35
else
Linha 36
if (op.equalsIgnoreCase(3))
Linha 38
break; //sai do while
Linha 39
} //m do while
Linha 40
System.exit(0);
Linha 41 } //m do mtodo main( )
Linha 42} //m da classe

No cdigo acima, mostrada uma tela ao usurio para que ele


escolha entre trs opes:


Se ele escolher a opo 1, cadastrado um cliente e sua


conta.

Se ele escolher a opo 2, cadastrada uma conta para


um cliente j existente, por isso, o usurio deve entrar
com o nome do cliente. Esse cliente deve ser pesquisado
pelo nome digitado no vetor de cliente. Se encontrar,
pode ser cadastrada uma nova conta e associada a
referncia desse cliente a essa conta.

Se ele escolher a opo 3, signica que ele quer sair do


sistema. A instruo break interrompe a repetio while,
e o programa termina.

Unidade 12

prog_orient_objetos.indb 233

233

2/7/2007 16:45:05

Universidade do Sul de Santa Catarina

Sntese
Nesta unidade, voc fortaleceu seu conhecimento sobre o
relacionamento de associao entre classes.
Para isso, retomamos o exemplo de sistema que utilizamos nas
primeiras unidades em que trabalhamos conceitos de OO. Foram
implementadas as classes Cliente e Conta (conta corrente) e,
posteriormente, foram desenvolvidos duas verses do sistema de
cadastro de contas. A primeira verso foi mais simplicada e, a
segunda, um pouco mais elaborada.
Espero que voc tenha entendido o conceito de associao!

234

prog_orient_objetos.indb 234

2/7/2007 16:45:05

Programao Orientada a Objeto

Atividades de auto-avaliao
1) Implemente o cdigo dessa unidade.

2) Desenvolva um sistema para armazenar informaes sobre professores


e disciplinas de uma instituio educacional.
Requisitos do sistema:


Sabe-se que cada professor pode ministrar vrias disciplinas.

Uma disciplina s ministrada por um professor.

importante armazenar as seguintes informaes sobre cada


professor: nome, titulao mxima e carga horria.

Sobre cada disciplina necessrio armazenar nome e carga horria.

O sistema deve permitir atravs de um menu, que o usurio:

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.

Obs.: Antes da implementao, crie o diagrama de classes do sistema.

Unidade 12

prog_orient_objetos.indb 235

235

2/7/2007 16:45:05

prog_orient_objetos.indb 236

2/7/2007 16:45:05

UNIDADE 13

Herana

Objetivos de aprendizagem


Aprender o conceito de herana.

Identificar a necessidade de sobrescrever um mtodo.

Seo de estudo
Seo 1 Herana

prog_orient_objetos.indb 237

2/7/2007 16:45:05

Universidade do Sul de Santa Catarina

Para incio de conversa


Nas unidades anteriores, voc aprendeu que duas classes que
representam atributos e comportamentos de dois tipos de objetos
podem se relacionar.
Nesta unidade, voc ir aprender outro tipo de relacionamento
entre classes, o relacionamento de herana.
Aprender o que o conceito de herana e outros conceitos
relacionados como o modicador protected e mtodos
sobrescritos.

SEO 1 - Herana
A Herana um recurso da orientao a objetos que permite que
atributos e comportamentos (mtodos) COMUNS a diversos
tipos de objetos, existentes em um problema, sejam agrupados
e representados em uma nica classe base, conhecida como
SUPERCLASSE.
Os atributos e comportamentos (mtodos) ESPECFICOS
de cada tipo de objeto presente no problema so representados
por classes especcas desses tipos de objetos. Essas classes
especcas, conhecidas como SUBCLASSES, herdam os
atributos e comportamentos comuns que foram agrupados na
superclasse.
A partir de uma classe base (superclasse), outras classes podem
ser especicadas ou especializadas.


Uma subclasse uma especializao de uma superclasse.

Uma superclasse uma generalizao de uma subclasse.

Cada subclasse herda atributos e comportamentos da superclasse


e acrescenta mais atributos e comportamentos especcos a essa
subclasse.

238

prog_orient_objetos.indb 238

2/7/2007 16:45:05

Programao Orientada a Objeto

O exemplo, a seguir, ilustra quando necessrio utilizar o recurso


de herana ao modelar um problema dentro do paradigma
orientado a objeto.
Uma empresa do ramo educacional necessita
armazenar informaes sobre seus funcionrios. Nessa
empresa, existem duas categorias de funcionrios. Os
que trabalham com funes tcnico-administrativas,
como secretrias, bibliotecrias, laboratoristas e os
que trabalham com atividades de docncia, como
os professores. Os primeiros so chamados de
Administrativo e, os segundos, de Docente. Para
ambos os tipos de funcionrios, necessita armazenar
nome, endereo e salrio.
Para os funcionrios do tipo Administrativo,
necessrio armazenar tambm cargo e setor. Para os
funcionrios do tipo Docente, necessrio armazenar
nmero de horas aula semanal e a titulao do
professor.

A princpio, poderamos pensar que existem dois tipos de objetos


nesse problema: Administrativo e Docente. Ento, vamos
identicar os atributos e comportamentos para esses dois tipos de
objetos:
Administrativo

Docente

Nome

Nome

Endereo

Endereo

Salrio

Salrio

Cargo

Nu. Horas aula semanais

Setor

Titulao do docente (doutor, mestre, espec.)

Note que, tanto os objetos do tipo Administrativo,


quanto os objetos do tipo Docente possuem trs atributos
(conseqentemente, mtodos get e set para esses atributos) em
comum: nome, endereco e salario.
Em vez modelar e implementar esses atributos em comum
nas duas classes (RETRABALHO), podemos modelar esses
atributos em uma classe genrica chamada Funcionrio, pois,
tanto Administrativo quanto Docente, so tipos de Funcionrio.

Unidade 13

prog_orient_objetos.indb 239

239

2/7/2007 16:45:05

Universidade do Sul de Santa Catarina

Sendo assim, a soluo modelada em UML para esse problema


a seguinte:

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( )

Observe que os atributos e comportamentos em comum,


foram modelados na classe Funcionrio, e os atributos e
comportamentos especcos, esto nas classes especializadas,
Administrativo e Docente.
Como Administrativo e Docente so tipos de Funcionrio,
eles tambm possuem nome, endereo e salrio, mas esses
atributos no precisam ser modelados e implementados nessas
240

prog_orient_objetos.indb 240

2/7/2007 16:45:05

Programao Orientada a Objeto

duas classes. Eles podem ser modelados e implementados na


superclasse Funcionrio e serem HERDADOS pelas subclasses
Administrativo e Docente.
Logo, Herana um tipo de relacionamento que
pode existir entre classes em que uma subclasse herda
atributo e comportamento de uma superclasse.

Pode-se empregar o relacionamento de Herana entre classes


quando uma classe for um tipo de outra classe. Costuma-se
interpretar o relacionamento de herana entre duas classes como:
um tipo de ou um.
Docente um tipo de Empregado.
Administrativo um Empregado.

Em UML, o smbolo que expressa o relacionamento de herana


a seta no sentido da subclasse para a superclasse, como pde ser
visto na gura mais acima.
A maior caracterstica desse tipo de relacionamento , como o
prprio nome diz, a herana de mtodos e atributos da superclasse
pela subclasse.
Quando uma subclasse herda atributos e comportamentos,
como se esses atributos e comportamentos fossem dela prpria,
ou seja, como se eles tivessem sido implementados na prpria
subclasse. Mas, na verdade, eles foram implementados somente
em uma classe, a superclasse e podem ser herdados por vrias
subclasses, evitando assim, a programao desses atributos e
comportamentos em cada uma das classes especializadas.
Quando uma subclasse herda atributos e
comportamentos de uma superclasse, pode-se dizer
que essa subclasse estende a superclasse.

O sentido de estender de aumentar, ou seja, uma subclasse ter


todos os atributos e comportamentos da sua superclasse e mais
seus atributos e comportamentos especcos.

Unidade 13

prog_orient_objetos.indb 241

241

2/7/2007 16:45:06

Universidade do Sul de Santa Catarina

Docente estende a superclasse Funcionario.


Administrativo estende a superclasse Funcionario.

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.

Veremos o que signica


sobrescrever um mtodo herdado
mais a frente.

A classe que herda ou estende outra classe, tem a capacidade de


ter novos atributos e mtodos de acordo com sua caracterstica e,
tambm pode modicar ou sobrescrever (override) os mtodos
herdados de acordo com sua necessidade.
A reutilizao de cdigo economiza tempo de desenvolvimento
de programas.

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.

Partindo do exemplo possvel vericar que, Funcionrio


superclasse direta de Docente e Pessoa seria superclasse indireta
de Docente.
Ao se instanciar um objeto de qualquer subclasse, pode-se acessar
diretamente os membros com qualicador de acesso public da
superclasse (normalmente mtodos) como se fossem parte da
subclasse.
Isso s possvel por causa do relacionamento de herana que
existe entre a superclasse e a subclasse.

242

prog_orient_objetos.indb 242

2/7/2007 16:45:06

Programao Orientada a Objeto

Veremos na prtica como isso funciona.


A implementao da classe Funcionrio continua a mesma.
Vamos implementar as subclasses Administrativo e Docente.

Linha 1
Linha 2
Linha 3
Linha 4
Linha 5
Linha 6
Linha 7
Linha 8
Linha 9
Linha 10
Linha 11
Linha 12

public class Administrativo extends Funcionario{


private String cargo, setor;
public Administrativo ( ){
super( );
cargo = ;
setor = ;
}
public void setCargo(String scargo){
cargo=scargo;
}

A palavra-chave extends indica que a


subclasse Administrativo estende a superclasse
Funcionrio.
Essa instruo super( ) chama explicitamente
o mtodo construtor da superclasse. Sempre
deve estar programada na primeira linha.
Quando o mtodo construtor de Administrativo
for chamado (quando se cria um objeto do tipo
Administrativo) a primeira instruo chamar o
mtodo construtor da superclasse Funcionrio.

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
Linha 7
Linha 8
Linha 9
Linha 10

public class Docente extends Funcionario{


private int nha;
private String titulacao;
public Docente(){
super( ); //chamada explcita ao construtor
da superclasse
nha=0;
titulacao=;
}

Unidade 13

prog_orient_objetos.indb 243

243

2/7/2007 16:45:06

Universidade do Sul de Santa Catarina

Linha 11
Linha 12
Linha 13

public void setNha(int inha){


nha=inha;
}
public int getNha(){
return nha;
}
public void setTitulacao(String stitu){
titulacao=stitu;
}
public String getTitulacao(){
return titulacao;
}

Agora que modelamos e implementamos as classes que


representam os dois tipos de objetos do nosso problema, podemos
implementar o sistema que armazena informaes para um
funcionrio Administrativo e Docente (problema inicial).
Inicialmente, vamos implementar um sistema que armazena
informaes para um funcionrio docente e, para um funcionrio
administrativo.

244

prog_orient_objetos.indb 244

2/7/2007 16:45:06

Programao Orientada a Objeto

Linha 1
Linha 2
Linha 3
Linha 4
Linha 5
Linha 6
Linha 7
Linha 8

import javax.swing.JOptionPane;
public class CadastraAdmDocente{
public static void main(String args[]){
Docente d1= new Docente( );
d1.setNome(JOptionPane.showInputDialog(Entre com o Nome:));;
d1.setEndereco(JOptionPane.showInputDialog(Entre com o Endereco:));
d1.setSalario(Double.parseDouble(JOptionPane.showInputDialog(Entre com o Salario:)));
d1.setNha(Integer.parseInt(JOptionPane.showInputDialog(Entre com o Nu.de Horas Aula
Semanais:)));
d1.setTitulacao(JOptionPane.showInputDialog(Entre com a Titulacao:)));

Linha 9
Linha 10
Linha 11
Administrativo a1= new Administrativo( );
Linha 12
a1.setNome(JOptionPane.showInputDialog(Entre com o Nome:));;
Linha 13
a1.setEndereco(JOptionPane.showInputDialog(Entre com o Endereco:));
Linha 14
a1.setSalario(Double.parseDouble(JOptionPane.showInputDialog(Entre com o Salario:)));
Linha 15
a1.setCargo(JOptionPane.showInputDialog(Entre com o Cargo:));
Linha 16
a1.setSetor(JOptionPane.showInputDialog(Entre com o Setor:));
Linha 17
System.exit(0);
Linha 18 }
Linha 19 }

Vamos analisar o cdigo linha a linha:


Linha 4: Para armazenar informaes sobre um funcionrio
docente, precisamos criar um objeto do tipo Docente.
Quando se cria um objeto de uma subclasse, alocado espao em
memria para todos os atributos desse objeto e para os atributos
que ele herda da superclasse.
A gura abaixo ilustra a representao do objeto Docente em
memria.
referncia d1 10x

Objeto Docente

nome
endereco
salario
nha
titulacao

endereo 10x

Unidade 13

prog_orient_objetos.indb 245

245

2/7/2007 16:45:06

Universidade do Sul de Santa Catarina

Observe que quando o objeto Docente criado, alocada


memria para os seus atributos (nha e titulao) e para os
atributos herdados de Funcionrio (nome, endereo e salrio).
como se esses atributos tivessem sido implementados dentro
da classe Docente. Mas no foram. Esto sendo herdados de
Funcionrio.
Linha 5: chamado ao mtodo setNome( ) e passagem do nome
digitado pelo usurio como parmetro para ser armazenado no
atributo nome do objeto d1.
Note que esse mtodo est sendo chamado precedido de
um objeto do tipo Docente (d1), mas o mtodo no est
implementado na classe Docente. Ele est implementado na
classe Funcionrio, mas como todo objeto Docente herda
atributos e mtodos da classe Funcionrio, como se estivesse
implementado em Docente.
Qualquer objeto Docente pode chamar, invocar mtodos pblicos
da classe Funcionrio por causa da herana.
Linhas 6 e 7: o mesmo acontece nessas linhas.
Linha 8: chamada ao mtodo setNha( ) e passagem do nmero
de horas aula semanal do docente como parmetro para ser
armazenado no atributo nha do objeto d1.
Linha 9: chamada ao mtodo setTitulacao( ) e passagem da
titulao do docente como parmetro para ser armazenado no
atributo titulacao do objeto d1.
Linha 10: criao do objeto Administrativo para armazenar
informaes sobre um funcionrio administrativo.

246

prog_orient_objetos.indb 246

2/7/2007 16:45:06

Programao Orientada a Objeto

A gura abaixo ilustra a representao do objeto Docente (j


preenchido) e o objeto Administrativo em memria.
referncia d1 10x
a1 12x

Objeto Docente

Nome Ana
endereo Rua A
salrio 1000
nha 12
titulacao Mestre

endereo 10x

Objeto
Administrativo

nome
endereco
salrio
cargo
setor

endereo 12x

Linha 12: chamado ao mtodo setNome( ) e passagem do nome


digitado pelo usurio como parmetro para ser armazenado no
atributo nome do objeto a1.
Note que esse mtodo est sendo chamado precedido de um
objeto do tipo Administrativo (a1), mas o mtodo no est
implementado na classe Administrativo. Ele est implementado
na classe Funcionrio, porm como todo objeto Administrativo,
herda atributos e mtodos da classe Funcionrio, como se
estivesse implementado em Administrativo.
Qualquer objeto Administrativo pode chamar, invocar mtodos
pblicos da classe Funcionrio por causa da herana.

Mtodo Construtor em Subclasse


Na implementao do mtodo construtor de uma subclasse o
construtor da superclasse deve ser explicitamente chamado na
primeira linha atravs da instruo super( ).

Unidade 13

prog_orient_objetos.indb 247

247

2/7/2007 16:45:06

Universidade do Sul de Santa Catarina

Veja isso na linha 5 da implementao da subclasse


Administrativo e, na linha 6, da implementao da subclasse
Docente.
A execuo da instruo super( ) far com que o mtodo
construtor sem parmetros da superclasse seja invocado. Por que
isso deve ser feito?
No nosso caso, para que se possa fazer a inicializao dos
atributos de um objeto herdados da superclasse.
Vamos ver um exemplo prtico:
Na linha 4 da classe CadastraAdmDocente, estamos criando
um objeto do tipo Docente. Sempre que criamos ou alocamos
um objeto em memria, o mtodo construtor desse objeto
automaticamente chamado. Nesse caso, o mtodo construtor
Docente( ) est sendo chamado.
O que est programado dentro desse mtodo
construtor?

A inicializao dos atributos desse objeto que acabou de ser


criado em memria. Nesse caso, dos atributos nha e titulao que
so atributos de um objeto Docente.
Mas um objeto Docente no tem alocado em memria somente
esses dois atributos. Ele alocou espao para os atributos herdados
de Funcionrio que so: nome, endereo e salrio.

Quem ir inicializar esses atributos?

O mtodo construtor da superclasse Funcionrio. nele que


esses atributos so inicializados.
Para isso, devemos chamar explicitamente esse mtodo construtor
da superclasse na primeira linha do mtodo construtor da
subclasse.

248

prog_orient_objetos.indb 248

2/7/2007 16:45:07

Programao Orientada a Objeto

Modicador de acesso protected


Voc deve lembrar que na unidade anterior, falamos sobre os
modicadores de acesso public, private, protected e acesso de
pacote.
Os membros (atributos e mtodos) public de uma superclasse
podem ser acessados diretamente (somente pelo nome) em todas
as subclasses que estendem essa superclasse.
Isso signica que o trecho seguinte de cdigo vlido na
subclasse Docente.
O mtodo imprimeNomeTituSalario ( ) do exemplo retorna o
valor do atributo nome juntamente com a titulao e o salrio
de determinado objeto Docente.
public class Docente{
.
.
public String imprimeNomeTituSalario( ) {
return getNome( )+ +titulao+ +getSalario( );
}
.
.
}

Os membros (atributos e mtodos) private de uma superclasse


somente so acessados pelos mtodos dessa superclasse, ou seja,
a subclasse no pode acessar diretamente os membros private
da sua superclasse.
O trecho seguinte de cdigo INVLIDO, no pode
acontecer, porque os atributos nome e salario so private na
superclasse Funcionrio.

Unidade 13

prog_orient_objetos.indb 249

O mtodo pblico getNome( ) no


existe na subclasse Docente. Ele
est na superclasse Funcionrio.
Mas como a subclasse Docente
herda de atributos e mtodos de
Funcionrio, pode acessar esse
mtodo public como se estivesse
implementado nela.

O mesmo acontece com o mtodo


pblico getSal( ) que est sendo
acesso acessado diretamente pelo
nome da subclasse Docente.

249

2/7/2007 16:45:07

Universidade do Sul de Santa Catarina

public class Docente{


.
.
public String imprimeNomeTituSalario( ) {
return nome+ +titulao+ +salario;
}
.
.
}

A subclasse somente pode acessar qualquer atributo private


da superclasse atravs dos mtodos pblicos get e set dessa
superclasse.
Na unidade de modicadores, dissemos que o modicador de
acesso protected iria ser explicado juntamente com o conceito de
herana.
Agora que voc j estudou esse conceito e sabe quando aplic-lo,
vamos aprender onde o modicador protected pode ser inserido.
O modicador protected pode ser utilizado na denio de
atributos e mtodos da superclasse.
O trecho de cdigo da superclasse Funcionrio ilustra essa
explicao.

O atributo salario foi denido como


protected.

public classe Funcionrio {


private String nome, endereo;
protected double salrio;
.
.
}

Quando atributos e mtodos da superclasse so denidos com


o modicador protected, eles so liberados para acesso direto
(pelo nome) pelas subclasses que estendem essa superclasse.

250

prog_orient_objetos.indb 250

2/7/2007 16:45:07

Programao Orientada a Objeto

O trecho de cdigo da subclasse Docente VLIDO:


public class Docente{
.
.
public String imprimeNomeTituSalario( ) {
return getNome( )+ +titulao+ +salario;
}
.
.
}

O atributo salario
est sendo acessado
diretamente pelo nome
na subclasse Docente.
Isso possvel porque seu
modicador de acesso
agora foi mudado para
protected.

Acessar diretamente quer dizer que os mtodos


da subclasse podem acessar os membros public e
protected da superclasse somente pelo nome.

Redenio de Mtodos (mtodo sobrescrito)


Outro conceito importante ligado herana o de mtodo
sobrescrito ou mtodo redenido.
Isso acontece quando uma subclasse (que herda todos os mtodos
da sua superclasse) redene ou sobrescreve (override) um mtodo
herdado da sua superclasse.
Redenir ou sobrescrever um mtodo herdado na subclasse
implementar esse mtodo herdado NOVAMENTE utilizando a
mesma assinatura.
Assinatura do mtodo o cabealho do mtodo, ou seja,
modicador + tipo de retorno + nome + parmetros.
Exemplo:
Tipo de retorno

Modicador

Assinatura do mtodo
public void setSalario (double dsal) {
salario=dsal;
}

Unidade 13

prog_orient_objetos.indb 251

Nome do mtodo

Parmetro

251

2/7/2007 16:45:07

Universidade do Sul de Santa Catarina

A sobrescrita de mtodo necessria quando a subclasse no


deseja herdar um determinado mtodo da maneira como ele foi
implementado.
Vamos ilustrar com um exemplo essa situao.
O sistema de cadastro de informaes de funcionrios
Administrativo e Docente ganhar alguns requisitos de
funcionamento que so:


O salrio de cada tipo de funcionrio calculado de


maneira diferente. Cada tipo de funcionrio ganha um
valor base mais um adicional, dependendo do seu tipo:
Administrativo ou Docente.

Para os funcionrios do tipo Docente, o adicional de


salrio calculado da seguinte forma:
nu. de horas-aula * valor da hora-aula

Sendo que o valor da hora aula depende da titulao de


cada professor. A tabela a seguir, mostra o valor da hora
aula de um docente conforme sua titulao:
Titulao

Valor hora aula

Especialista

R$ 15,00

Mestre

R$ 20,00

Doutor

R$ 30,00

Assim, o clculo do salrio de um docente :


Salrio base + (nu. de horas-aula * valor da hora aula )

Para os funcionrios do tipo Administrativo, o adicional de


salrio calculado em funo do seu cargo.
Para cada cargo, existe um valor xo a ser adicionado ao salrio
base. A tabela abaixo mostra os cargos possveis e o valor
recebido em cada cargo:
252

prog_orient_objetos.indb 252

2/7/2007 16:45:07

Programao Orientada a Objeto

Cargo

Valor

Tcnico administrativo

R$ 300,00

Bibliotecria

R$ 400,00

Tcnico de laboratrio

R$ 500,00

Assim, o clculo do salrio de um docente : salrio base + (Valor


associado ao cargo)
Analisando esses novos requisitos, vemos que o mtodo
setSalario(double dsal) implementado na classe Funcionario e
herdado por Docente e Administrativo no atende a eles, pois
esse mtodo s recebe um valor do salrio e armazena no atributo
salrio do objeto.
Logo, esse mtodo est sendo herdado por Docente e
Administrativo, mas no atende s exigncias de nenhuma dessas
classes j que, a maneira de calcular o salrio, no a maneira
exigida por Docente e nem a exigida por Administrativo.
O que fazer? Sobrescrever o mtodo setSalario( ) que est sendo
herdado na classe Docente e Administrativo.
A seguir segue o trecho cdigo da classe Docente que mostra a
sobrescrita do mtodo setSalario( ).

Linha 1 public class Docente extends Funcionario{


Linha 2
private int nha;
Linha 3
private String titulacao;
Linha 4
Linha 5
//mtodos construtor, sets e gets
Linha 6
Linha 7
public void setSalario(double dsalario){
Linha 8
if (titulacao.equalsIgnoreCase(Especialista))
Linha 9
super.setSalario(dsalario+(nha*15));
Linha 10
else
Linha 11
if (titulao.equalsIgnoreCase(Mestre))
Linha 12
super.setSalario(dsalario+(nha*20));
Linha 13
else
Linha 14
super.setSalario(dsalario+(nha*20));
Linha 15
Linha 16
}
Linha 17 }

Unidade 13

prog_orient_objetos.indb 253

253

2/7/2007 16:45:07

Universidade do Sul de Santa Catarina

Note que a assinatura (cabealho) do mtodo setSalario(double


dsal) est idntica a implementada na superclasse Funcionrio,
mas a sua implementao (lgica) est totalmente diferente para
atender ao novo requisito de clculo de salrio de Docente.
Vamos analisar essa lgica.
Na linha 8, comea o teste para vericar se a titulao do objeto
Docente igual a Especialista. Se for igual, o mtodo setSalario
da superclasse est sendo chamado novamente, e est sendo
passado como parmetro o novo salrio calculado em funo das
horas-aulas * titulao do professor.
Observe que essa instruo de chamada ao mtodo setSalario
da superclasse est sendo feita dentro da prpria redenio do
mtodo setSalario na subclasse.
Chamar o mtodo do mesmo nome dentro de um mtodo do
mesmo nome que est sendo redenido possvel, mas deve-se
preceder essa chamada com a palavra super seguida do nome do
mtodo, como mostra a linha 9.
As demais linhas seguem testando as outras opes de titulao
do Docente.
Depois de sobrescrever o mtodo na subclasse Docente vamos
sobrescrever o mtodo setSalario na subclasse Administrativo.
A seguir segue o trecho de cdigo da classe Administrativo que
mostra a sobrescrita do mtodo setSalario( ).

254

prog_orient_objetos.indb 254

2/7/2007 16:45:07

Programao Orientada a Objeto

Linha 1 public class Administrativo extends Funcionario{


Linha 2
private String cargo, setor;
Linha 3
Linha 4 //mtodos construtor, sets e gets
Linha 5
Linha 6
Linha 7
public void setSalario(double dsalario){
Linha 8
if (cargo.equalsIgnoreCase(Tecnico Administrativo))
Linha 9
super.setSalario(dsalario+(300));
Linha 10
else
Linha 11
if (cargo.equalsIgnoreCase(Bibliotecaria))
Linha 12
super.setSalario(dsalario+(400));
Linha 13
else
Linha 14
super.setSalario(dsalario+(500));
Linha 15
Linha 16
}
Linha 17 }

O mesmo acontece com a redenio do mtodo setSalario( ) na


classe Administrativo. So testadas todas as opes de valores
do atributo cargo, pois, dependendo de cada uma das opes
de valores (Tcnico administrativo, Bibliotecria ou Tcnico
de laboratrio) um determinado valor adicional acrescido ao
salrio.
Vamos fazer uma pequena modicao no cdigo da classe
CadastraAdmDocente, j mostrado anteriormente nessa unidade.

Linha 1
Linha 2
Linha 3
Linha 4
Linha 5
Linha 6

import javax.swing.JOptionPane;
public class CadastraAdmDocente{
public static void main(String args[]){
Docente d1= new Docente( );
d1.setNome(JOptionPane.showInputDialog(Entre com o Nome:));;
d1.setEndereco(JOptionPane.showInputDialog(Entre com o
Endereco:));
Linha 7
d1.setNha(Integer.parseInt(JOptionPane.showInputDialog(Entre
com o Nu.de Horas Aula Semanais:)));
Linha 8
d1.setTitulacao(JOptionPane.showInputDialog(Entre com a
Titulacao:)));
Linha 9
d1.setSalario(Double.parseDouble(JOptionPane.InputDialog(Entre
com o Salario:)));
Linha 10
Administrativo a1= new Administrativo( );

Unidade 13

prog_orient_objetos.indb 255

A chamada ao mtodo
setSalario( ) deve ser
feita depois da chamada
aos mtodos setNha( ) e
setTitulao pois o mtodo
setSalario( ) na sua nova
implementao na classe
Docente precisa dos
valores dos atributos nha
e titulacao.

255

2/7/2007 16:45:07

Universidade do Sul de Santa Catarina

Linha 11
Linha 12
Linha 13
Linha 14
Linha 15
A chamada ao mtodo
setSalario( ) deve ser feita
depois da chamada ao
mtodo setCargo( ) pois o
mtodo setSalario( ) na sua
nova implementao na
classe Administrativo precisa
do valor do atributo cargo.

Linha 16
Linha 17 }
Linha 19 }

a1.setNome(JOptionPane.showInputDialog(Entre com o Nome:));;


a1.setEndereco(JOptionPane.showInputDialog(Entre com o Endereco:));
a1.setCargo(JOptionPane.showInputDialog(Entre com o Cargo:));
a1.setSetor(JOptionPane.showInputDialog(Entre com o Setor:));
a1.setSalario(Double.parseDouble(JOptionPane.showInputDialog(Entre
com o Salario:)));
System.exit(0);

Sntese
Nessa unidade voc aprendeu outro conceito importante da OO,
o conceito de herana. atravs da herana que a caracterstica
de reutilizao de cdigo do paradigma orientado a objeto se
torna mais evidente. Isso acontece porque podemos modelar
e implementar numa classe genrica, chamada de superclasse,
todos os atributos e comportamentos comuns a diversos tipos de
objetos e, esses atributos e comportamento, podem ser herdados
por vrias outras classes (que representam esses tipos de objetos
diferentes com atributos e comportamentos em comum) evitando
assim a duplicao de cdigo.

256

prog_orient_objetos.indb 256

2/7/2007 16:45:08

Programao Orientada a Objeto

Atividades de auto-avaliao
1) Desenvolva um sistema orientado a objetos para automatizar as
informaes de uma Administradora de Imveis.


Essa Administradora necessita de um sistema para automatizar o


conjunto de informaes relativas aos imveis que administra.

Sobre qualquer imvel se necessita saber o nome do proprietrio, o


endereo, se para venda ou aluguel, valor (venda ou aluguel).

Os imveis so divididos em duas categorias: Apto e Casa. Sobre os


imveis do tipo Apto necessrio saber o andar e nmero do apto.
Sobre os imveis do tipo casa necessrio saber se tem piscina ou
no.

Modele o sistema descrito acima, identificando os objetos do


problema, se existem atributos e comportamentos em comum, etc.

Represente atravs do Diagrama de classe da UML.

Unidade 13

prog_orient_objetos.indb 257

257

2/7/2007 16:45:08

prog_orient_objetos.indb 258

2/7/2007 16:45:08

UNIDADE 14

Herana na prtica

Objetivo de aprendizagem


Fortalecer o conceito de herana mediante exemplos


prticos.

Seo de estudo
Seo 1 Herana mediante exemplo prtico

prog_orient_objetos.indb 259

2/7/2007 16:45:08

Universidade do Sul de Santa Catarina

Para incio de conversa


Na unidade anterior, voc aprendeu que ao modelar um problema
que possua no mnimo dois tipos de objetos, e, que esses objetos
possuam alguns atributos e comportamentos em comum e
igualmente atributos e comportamentos especcos para cada
tipo, interessante representar esses atributos e comportamentos
em comum, mediante uma classe genrica chamada de
superclasse, e os atributos e comportamentos especcos em
classes conhecidas como subclasses, que representam cada
tipo de objeto. A herana acontece porque os objetos dessas
subclasses herdam todos atributos e comportamentos denidos na
superclasse.
Nesta unidade, voc ir fortalecer o conceito de herana e os
vrios conceitos relacionados atravs de alguns exemplos prticos.
Vamos colocar a mo na massa e aprender um pouco mais?

SEO 1 -Herana atravs de exemplo prtico


Vamos modelar no paradigma orientado a objetos o seguinte
sistema:

Requisitos:
Uma empresa de locao de veculos necessita de um sistema
para armazenar as informaes de sua frota de veculos. Para
todos os tipos de veculos, necessrio armazenar informaes
como: placa, marca, modelo, ano, valor do km rodado, km inicial
(antes da locao), km nal (depois da locao). Essa locadora de
veculos possui duas categorias de veculos para locao: Passeio e
Carga. O total da frota 15 veculos, sendo 10 do tipo Passeio e
5 do tipo Carga.

260

prog_orient_objetos.indb 260

2/7/2007 16:45:08

Programao Orientada a Objeto

Para os veculos do tipo Passeio, necessrio armazenar se o


veculo possui ar-condicionado e o nmero de portas (2 ou 4).
Para os veculos do tipo Carga, necessrio armazenar a
capacidade de carga em toneladas do veculo.
Todos os veculos cadastrados possuem um valor de locao.
Esse valor de locao calculado da seguinte forma:
n de km rodados * valor do km rodado

O nmero de km rodados obtido atravs do seguinte clculo:


km nal km inicial

Nesse sistema os veculos do tipo Carga sofrem no clculo de


locao:
(n de km rodados * valor do km rodado) + 10%.

Alm de armazenar as informaes acima, o sistema deve


permitir as seguintes consultas (listagens):


Listagem de todos os veculos cadastrados;

consulta de valor de locao mediante a digitao da


placa do veculo;

nmero de veculos com ar-condicionado;

Depois da apresentao dos requisitos do sistema, vamos comear


a modelar o sistema dentro do paradigma orientado a objetos.

Unidade 14

prog_orient_objetos.indb 261

261

2/7/2007 16:45:08

Universidade do Sul de Santa Catarina

Modelagem:


Identicar quais os objetos existentes nesse problema:


necessrio armazenar informaes sobre objetos do
tipo Veiculo Carga e Veiculo Passeio.

Identicar atributos e comportamentos dos objetos


identicados.

Veculo Passeio

Veculo Carga

Atributos
Placa

Placa

Marca

Marca

Modelo

Modelo

Ano

Ano

valor do km rodado

valor do km rodado

km inicial

km inicial

km nal

km nal

Ar-condicionado

capacidade

Nmero de portas

Comportamentos ou mtodos
Passeio ( )

Carga ( )

Mtodos set e set para cada atributo

Mtodos set e set para cada atributo

calculaValorLocacao( )

calculaValorLocacao( )

Pela tabela acima podemos identicar que existe um conjunto de


atributos e mtodos em comum entre os objetos Passeio e Carga.
Diante disso, podemos optar por representar esses atributos e
mtodos em uma classe genrica (superclasse) chamada Veculo e
representar os atributos e mtodos especcos nas classes Passeio
e Carga.
A seguir est a representao em UML das classes desse sistema.

262

prog_orient_objetos.indb 262

2/7/2007 16:45:08

Programao Orientada a Objeto

Superclasse
Veiculo
placa: String
marca: String
modelo: double
ano: int
valorkmrod: double
kminic: int
kmfin: int
Veiculo( )
setPlaca(String splaca )
setMarca(String smarca )
setModelo(String smodelo)
setAno(int iano )
setValorKmRod(double dvalkm )
setKmInic(int ikmi )
setKmFin(int ikmf )
getPlaca( ):String
getMarca( ):String
getModelo( ): String
getAno( ): int
getValorKmRod( ): double
getKmInic( ): int
getKmFin( ):int
calculaValorLocacao( )

A seta apontada para


a superclasse indica o
relacionamento de herana.
Carga um tipo de Veiculo.
Passeio um tipo de Veiculo.

Subclasse

Subclasse

Passeio

Carga

arcond: boolean
nuportas: int

capacidade: int

Passeio( )
setArCond( boolean
barcond )
setNuPortas(int inup )
getArCond( ): boolean
getNuPortas( ): int

Carga ( )
setCapacidade( int icap)
getCapacidade( ):int

Unidade 14

prog_orient_objetos.indb 263

263

2/7/2007 16:45:08

Universidade do Sul de Santa Catarina

Depois de modelado, vamos partir para a implementao das


classes.
Implementao:

//Implementao da superclasse veiculo


public class Veiculo {
private String placa, marca, modelo;
private int ano, kminic, kmn;
private double valorkmrod;
public Veiculo(){
placa=;
marca=;
modelo=;
ano=0;
valorkmrod=0;
kminic=0;
kmn=0
}
public void setPlaca(String splaca){
placa=splaca;
}
public void setMarca(String smarca){
marca=smarca;
}
public void setModelo(String smodelo){
modelo=smodelo;
}
public void setAno(int iano){
ano=iano;
}
public void setValKmRod(double dvalkmrod){
valkmrod=dvalkmrod;
}
public void setKmInic(int ikmi){
kminic= ikmi;
}
public void setKmFim(int ikmf){
kmm= ikmf;
}
public String getPlaca(){
return placa;
}
public String getMarca(){
return marca;
}

264

prog_orient_objetos.indb 264

2/7/2007 16:45:08

Programao Orientada a Objeto

public String getModelo(){


return modelo;
}
public int getAno(){
return ano;
}
public double getValKmRod(){
return valkmrod;
}
public int getKmInic(){
return kminic;
}
public int getKmFim(){
return kmm;
}
public double calculaValorLocacao( ){
return (kmm kminic) * valkmrod;

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.

}
}

//Implementao da subclasse Passeio

Note que Passeio extends


(estende) Veiculo.
essa palavra que indica
o relacionamento de
herana entre essas duas
classes.

public class Passeio extends Veiculo{


private int nuportas;
private boolean arcond;
public Passeio (){
super ();
portas=0;
arcond=false;
}
public void setNuPortas (int inup){
nuportas=inup;
}
public void setArCond (boolean barcond){
arcond=barcond;
}
public int getNuPortas (){
return nuportas;
}
public boolean getArCond (){
return arcond;
}
}

Unidade 14

prog_orient_objetos.indb 265

265

2/7/2007 16:45:08

Universidade do Sul de Santa Catarina

//Implementao da subclasse Carga


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: ((kmnkminic)*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
redenido na classe Carga com a
frmula correta.

public class Carga extends Veiculo{


private int capacidade;
public Carga (){
super ();
capacidade=0;
}
public void setCapacidade (int icap){
capacidade=icap;
}
public int getCapacidade (){
return capacidade;
}
public double calculaValorLocacao( ){
return ((getKmFim() getKmInic()) *
getValKmRod())*1.1;
}
}

Depois de implementar as classes bsicas do sistema, vamos


partir para a implementao do sistema propriamente dito.
O sistema deve ser capaz de armazenar informaes para 10
veculos do tipo Carga e, 5 veculos do tipo Passeio (total da
frota de veculos) e atender aos outros requisitos propostos na
descrio do sistema no incio dessa unidade.
Vamos revisar os requisitos de sada do sistema?


Listagem de todos os veculos cadastrados;

Consulta de valor de locao atravs da digitao da


placa do veiculo;

Nmero de veculos com ar-condicionado.

266

prog_orient_objetos.indb 266

2/7/2007 16:45:09

Programao Orientada a Objeto

Linha 0 import javax.swing.*;


Linha 1
public class CadastraVeiculosLocacao{
Linha 2
public static void main(String args[]){
Linha 3
Passeio p[]=new Passeio[10];
Linha 4
Carga c[]=new Carga[5];
Linha 5
int pp=0,pc=0;
Linha 6
int op = 0;
Linha 7
while (op!=6){
Linha 8
op=Integer.parseInt(JOptionPane.showInputDialog(Digite a opo \n+
Linha 9
1= CADASTRAR VEICULO TIPO PASSEIO \n+
Linha 10
2= CADASTRAR VEICULO TIPO CARGA \n+
Linha 11
3= LISTAGEM DOS VEICULOS CADASTRADOS \n+
Linha 12
4= CONSULTA VALOR DE LOCAO\n +
Linha 13
5= QUANTIDADE DE CARROS COM AR-CONDICIONADO\n+
Linha 14
6= SAIR));
Linha 15
Linha 16
if (op==1) {
Linha 17
p[pp]=new Passeio( );
Linha 18
p[pp].setPlaca(JOptionPane.showInputDialog(Digite a placa));
Linha 19
p[pp].setMarca(JOptionPane.showInputDialog(Digite a marca));
Linha 20
p[pp].setModelo(JOptionPane.showInputDialog(Digite o modelo));
Linha 21
p[pp].setAno(Integer.parseInt(JOptionPane.showInputDialog(Digite o ano da Fabricaao)))
Linha 22 p[pp].setValKmRod(Double.parseDouble(JOptionPane.showInputDialog(Digite o valor do Kilometro Rodado)));
Linha 23 p[pp].setKmInic(Integer.parseInt(JOptionPane.showInputDialog(Digite a Kilometragem Inicial)));
Linha 24 p[pp].setKmFim(Integer.parseInt(JOptionPane.showInputDialog(Digite a Kilometragem Final)));
Linha 25 p[pp].setNuPortas(Integer.parseInt(JOptionPane.showInputDialog(Digite o n de portas)));
Linha 26 String resp=JOptionPane.showInputDialog(Possui ar-condicionado? Sim ou No?);
Linha 27
if(resp.equalsIgnoreCase(sim))
Linha 28
p[i].setArCond(true);
Linha 29
else
Linha 30
p[i].setArCond(false);
Linha 31
pp=pp+1;
Linha 32
} //FIM opo 1
Linha 33
else
Linha 34
if (op==2) {
Linha 35
c[pc]=new Carga( );
Linha 36
c[pc].setPlaca(JOptionPane.showInputDialog(Digite a placa));
Linha 37
c[pc].setMarca(JOptionPane.showInputDialog(Digite a marca));
Linha 38
c[pc].setModelo(JOptionPane.showInputDialog(Digite o modelo));
Linha 39
c[pc].setAno(Integer.parseInt(JOptionPane.showInputDialog(Digite o ano da fabricaao)));
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)));

Unidade 14

prog_orient_objetos.indb 267

267

2/7/2007 16:45:09

Universidade do Sul de Santa Catarina

Linha 44
Linha 44
Linha 45
Linha 46
Linha 47
Linha 48
Linha 50
Linha 51
Linha 52
Linha 53
Linha 54
Linha 55
Linha 56
Linha 57
Linha 58
Linha 59
Linha 60
Linha 61
Linha 62
Linha 63
Linha 64
Linha 65
Linha 66
Linha 67
Linha 68
Linha 69
Linha 70
Linha 71
Linha 72
Linha 74
Linha 75
Linha 76
Linha 77
Linha 78
Linha 79
Linha 80
Linha 81
Linha 82
Linha 83
Linha 84
Linha 85
Linha 86
Linha 87
Linha 88
Linha 89

pc = pc + 1;
} //FIM opo = = 2
else
if (op = = 3) {
for (int i=0; i<pp; i++){
JOptionPane.showMessageDialog(null,LISTAGEM DE VEICULOS TIPO PASSEIO: +\n +
PLACA: + p[i].getPlaca () +\n+
MARCA: + p[i].getMarca() +\n+
MODELO: + p[i].getModelo() +\n+
ANO DE FABRICAAO: + p[i].getAno () +\n+
VALOR KM RODADO: + p[i].getValKmRod() +\n+
KM INICIAL: + p[i].getKmInic() +\n+
KM FINAL: + p[i].getKmFin() +\n+
NUMEROS DE PORTAS: + p[i].getNuPortas() +\n);
}
for (int i=0; i<pc; i++){
JOptionPane.showMessageDialog(null,LISTAGEM VEICULOS TIPO CARGA: +\n +
PLACA: + c[i].getPlaca () +\n+
MARCA: + c[i].getMarca() +\n+
MODELO: + c[i].getModelo() +\n+
ANO DE FABRICAAO: + c[i].getAno () +\n+
VALOR KM RODADO: + c[i].getValKmRod() +\n+
KM INICIAL: + c[i].getKmInic() +\n+
KM FINAL: + c[i].getKmFin() +\n+
CAPACIDADE MAXIMA: + c[i].getCapacidadea() +\n);
}
}//FIM opcao = = 3
else
if (op = = 4) {
String placa=JOptionPane.showInputDialog(Digite a PLACA do veiculo a ser pesquisado);
for (int i=0; i<pp; i++){
if (p[i].getPlaca().equalsIgnoreCase(placa)){
JOptionPane.showMessageDialog(null,O valor de locao desse veculo :
+ p[i].calculaValorLocacao( ));
}
}
for (int i=0; i<pc; i++){
if (c[i].getPlaca().equalsIgnoreCase(placa)){
JOptionPane.showMessageDialog(null,O valor de locao desse veculo :
+ c[i].calculaValorLocacao( ));
}
} //m do for
} //m da opo 4
else
if (op = = 5){
int cot=0;
for (int i=0; i<10; i++){

268

prog_orient_objetos.indb 268

2/7/2007 16:45:09

Programao Orientada a Objeto

Linha 90
Linha 91
Linha 92
Linha 93

if (c[i].getArCond() = = true)
cont = cont + 1;
}
JOptionPane.showMessageDialog(null,Nmero de Veculos do Tipo Passeio com
Ar-Condicionado: + cont );
Linha 94
}
Linha 95
else
Linha 96
if (op = = 6)
Linha 97
break;
Linha 98 }// m while
Linha 99 }// m do mtodo main ( )
Linha 100} // m da classe

Vamos analisar o cdigo, linha a linha:


Linhas 3 e 4: criao do vetor para armazenar os objetos Carga e
Passeio.Lembre que o vetor no contm os objetos ainda. Ele est
inicializado com null.
Linha 5: criao e inicializao das variveis pp e pc. Essas
variveis controlaro as posies dentro do vetor p (Passeio) e c
(Carga) onde os objetos Passeio e Carga sero criados.
Linha 6: criao da varivel op e inicializao dela com o valor 0.
Linha 7: incio da estrutura de repetio, que far com que o
programa volte tela de escolha das opes (menu) depois se
ser executada a opo digitada pelo usurio. Enquanto a opo
digitada for diferente de 6 (opo de Sair), o programa segue
sendo executado.
Linha 8: entrada de dados da opo desejada. O usurio dever
digitar o nmero equivalente opo desejada. A instruo \n faz
com que o texto seguinte seja impresso na prxima linha da caixa
de dilogo de entrada.
A tela de entrada de dados ser igual mostrada a seguir:

Unidade 14

prog_orient_objetos.indb 269

269

2/7/2007 16:45:09

Universidade do Sul de Santa Catarina

Linha 16: verica se o usurio digitou a opo 1 (signica que


ele quer cadastrar um veculo do tipo Passeio). Se for verdade,
somente as instrues das linhas 17 a 31 sero executadas;
Linha 17: lembre-se que o vetor p do tipo Passeio foi criado e
est vazio. Essa instruo cria um objeto do tipo Passeio e associa
a prxima posio livre do vetor p. A prxima posio livre do
vetor p controlada pela varivel pp. Na primeira vez que entrar
nessa opo, o valor da varivel pp ser 0, logo, o objeto Passeio,
ser criado na posio 0 do vetor. Note que a varivel pp
incrementada na linha 30. Isso signica que, da prxima vez que
o usurio quiser cadastrar um veiculo do tipo Passeio, ou seja,
que a opo 1 for digitada, o objeto Passeio ser criado na posio
2 do vetor p.
Linhas 18 a 25: depois que o objeto Passeio associado
determinada posio do vetor p, podem ser chamados os mtodos
pblicos desse objeto Passeio, para armazenar os valores digitados
pelo usurio nos atributos desse objeto. Note que todo objeto
Passeio herda os atributos e mtodos de Veculo, ou seja, quando
um objeto Passeio criado, ele possui em memria todos os
atributos de Veculos + os atributos de Passeio.
Linha 26: para armazenar um valor lgico (true ou false) no
atributo arcond de um objeto passeio, necessrio tratar a
entrada de dados desse valor. O usurio no vai poder digitar
valor true ou o valor false na caixa de dilogo de entrada de
dados, portanto, pedimos que ele digite sim ou no (String), e
nas linhas seguintes testado. Se o valor digitado for sim,
chamado o mtodo setArCond(true) e passado o valor lgico
true, caso contrrio, passado o valor lgico false.
Linha 32: m da opo 1.
Linha 34: verica se a opo digitada igual a 2 (signica que o
usurio quis cadastrar veculos do tipo Carga).
Linha 35: lembre-se de que o vetor c do tipo Carga foi criado e
est vazio. Essa instruo cria um objeto do tipo Carga e associa
prxima posio livre do vetor c. A prxima posio livre
do vetor c controlada pela varivel pc. Na primeira vez que
entrar nessa opo, o valor da varivel pc ser 0 logo, o objeto
Carga ser criado na posio 0 do vetor. Note que a varivel pc

270

prog_orient_objetos.indb 270

2/7/2007 16:45:10

Programao Orientada a Objeto

incrementada na linha 44. Isso signica que da prxima vez que


o usurio quiser cadastrar um veiculo do tipo Carga, ou seja, que
a opo 2 for digitada, o objeto Carga ser criado na posio 2 do
vetor c.
Linhas 36 a 43: depois que o objeto Carga associado
determinada posio do vetor c, podem ser chamados os mtodos
pblicos desse objeto Carga para armazenar os valores digitados
pelo usurio nos atributos desse objeto. Note que todo objeto
Carga herda os atributos e mtodos de Veculo, ou seja, quando
um objeto Carga criado, ele possui em memria todos os
atributos de Veculos + os atributos de Carga.
Linha 46: teste da opo 3 (signica que o usurio deseja
consultar, listar todos os veculos cadastradas at o momento).
Para isso, necessrio percorrer o vetor p de Passeio at a posio
do ltimo veculo Passeio cadastrado (quem guarda esse valor
a varivel pp) e tambm o vetor Carga, acessando cada um dos
objetos. S assim possvel recuperar e mandar imprimir os
valores dos atributos desses objetos.
Linha 47: estrutura de repetio for para determinar quais as
posies do vetor p que sero acessadas a cada iterao. Note
que a varivel pp controla a ltima posio acessada do vetor p.
No se deve percorrer o vetor p at 10, porque no sabemos se
existiro 10 objetos do tipo Passeio criados.
Linhas 48 a 57: imprimem na caixa de dilogo todos os
valores dos atributos de um determinado objeto Passeio. Quem
determina o objeto que est sendo acessado no momento, a
varivel de controle da estrutura de repetio for, no caso, i.
Por exemplo, quando i contiver o valor 1, o objeto associado
posio 1 do vetor p que est sendo acessado.
Linhas 59 a 69: o mesmo acontece para o vetor c, j que a
opo se destina a listar todos os veculos e os objetos do vetor c
tambm so veculos.
Linha 72: verica se opo digita quatro (signica que o
usurio deseja consultar o valor de locao de um determinado
veculo). Para achar o valor de locao de um determinado
veculo, o usurio dever entrar com alguma informao, no caso,
a placa do veculo. O sistema ir procurar no vetor p (Passeio)

Unidade 14

prog_orient_objetos.indb 271

271

2/7/2007 16:45:10

Universidade do Sul de Santa Catarina

e c (Carga) se encontra algum objeto com o valor do atributo


placa igual placa que o usurio digitou. Se encontrar, o mtodo
calculaValorLocacao( ) desse objeto ser chamado.
Linha 74: entrada da placa do veculo sobre o qual se deseja
calcular o valor de locao. A placa digitada ser armazenada na
varivel de memria placa.
Linhas 75 a 79: o vetor p percorrido at a posio do ltimo
objeto Passeio criado. Quem controla essa posio a varivel
pp. Para cada objeto do vetor p, testado que o valor do atributo
placa igual ao contedo da varivel placa. Se for igual,
chamado o mtodo calculaValorLocacao( ) desse objeto e o valor
retornado impresso na caixa de dilogo.
Linhas 80 a 83: o mesmo feito com o vetor c, pois a placa
digitada pode ser de um veculo carga.
Linhas 87 a 94: verica se a opo digitada 5 (signica que o
usurio deseja saber o nmero de veculos do tipo Passeio que
possuem ar-condicionado). Nessa opo percorrido somente
o vetor passeio, pois somente veculos Passeio possuem arcondicionado, vericando se o atributo arcond possui o valor
true. A cada vez que encontrar, incrementada a varivel cont.
No nal, impresso o valor da varivel cont.
Linha 96: verica se a opo digitada 6 (signica que o usurio
deseja sair do sistema). Como toda a lgica de execuo est
dentro de uma estrutura de repetio while, necessrio forar a
sada dela. A instruo que faz isso chamada de break. Quando
essa instruo executada, o uxo de repetio interrompido
e, a prxima instruo a ser executada, {ser a prxima depois do
smbolo de } (m) do while.

272

prog_orient_objetos.indb 272

2/7/2007 16:45:10

Programao Orientada a Objeto

Sntese
Nessa unidade voc reforou o conceito de herana atravs de um
outro exemplo prtico.
Voc estudou sobre modelagem e implementou um sistema para
uma locadora de veculos. Nesse sistema identicou que existia
dois tipos de objetos: Veculos Passeio e Veculos Carga e que
existia uma srie de atributos e comportamentos comuns entre
esses dois tipos de objetos.
Diante dessa situao, modelamos esses atributos e
comportamentos em comum dentro de uma classe genrica
chamada Veculo e os atributos e comportamentos especcos de
cada tipo de objeto foram modelagem em classes especcas.
A herana um recurso muito til na orientao a objetos porque
propicia a reutilizao de cdigo, evitando assim o retrabalho de
codicao.

Unidade 14

prog_orient_objetos.indb 273

273

2/7/2007 16:45:10

Universidade do Sul de Santa Catarina

Atividades de auto-avaliao
1) Implemente as classes modeladas no sistema da Administradora de
Imveis descrito na atividade da unidade anterior. Desenvolva um
sistema que permita:


Cadastrar os imveis do tipo Casa e do tipo Apto. (mximo 10 para


cada)

Imprimir os seguintes dados de todos os imveis: nome do


proprietrio, endereo e o tipo, Casa ou Apto.

Impresso o nmero de casas com piscina.

2) Implemente as classes e o sistema da Locadora de Veculos descrito


nessa unidade.

274

prog_orient_objetos.indb 274

2/7/2007 16:45:10

Para concluir o estudo


Chegamos ao m de mais uma disciplina: Programao
Orientada a Objeto.
Foi um trabalho longo, em que voc comeou
aprendendo a utilizar uma linguagem de programao
(Java) colocando em pratica os conhecimentos de lgica
obtidos em Lgica I e Lgica. Um pouco menos da
metade das unidades dessa disciplina foram reservados
a essa atividade: apresent-lo a uma linguagem de
programao.
Escolhemos a linguagem Java por ser bastante utilizada
no ambiente de desenvolvimentos de softwares, por ser
free e por ser orientada a objetos. Foi importante voc ter
esse contato com a parte prtica do desenvolvimento de
programas para conseguir assimilar melhor os conceitos
relacionados ao paradigma orientado a objetos.
Mais da metade das unidades foi dedicada explanao
dos conceitos do paradigma orientado a objetos.
Esse paradigma prope uma forma de pensar e
implementar sistemas, em que devemos pensar e,
conseqentemente, implementar o problema tal como
ele acontece no mundo real, identicando os objetos
que atuam nesse problema, identicando atributos e
comportamentos desses objetos e os relacionamentos
entre os mesmos. Um sistema orientado a objetos
composto de uma coleo de objetos que se relacionam e
trocam mensagens entre si.
Todos os conceitos de OO apresentados a partir da
unidade 7 so indispensveis para voc seguir em frente
com os estudos. Proporcionaro, at o nal do curso, o
desenvolvimento de um sistema completo.
Espero que voc tenha gostado!!

prog_orient_objetos.indb 275

2/7/2007 16:45:10

prog_orient_objetos.indb 276

2/7/2007 16:45:10

Referncias
DEITEL, H.M.; DEITEL, P.J. Java - Como programar. Sexta Edio.
Ed. Pearson, 2005.
LEMAY, Laura; CADENHEAD, Rogers. Aprenda em 21 dias Java
1.2. Rio de Janeiro: Campus, 1999.
HORSTMANN, Cay S.; CORNELL, Gary. Core Java 2. So Paulo:
Makron Books, 2004.
HORSTMANN, Cay S. Big Java. Porto Alegre: Bookman, 2004.
The Java Tutorial - A practical guide for programmers.
Disponvel em: http://java.sun.com/tutorial
BOOCH, Grady; RUMBAUGH, James; JACOBSON, Ivar. UML Guia
do Usurio. Rio de Janeiro: Campus, 2000.
FOWLER, Martin; SCOTT, Kendall. UML essencial: um breve guia
para a linguagem-padro de modelagem de objetos. Segunda
Edio. Porto Alegre: Bookman, 2000.

prog_orient_objetos.indb 277

2/7/2007 16:45:10

prog_orient_objetos.indb 278

2/7/2007 16:45:11

Sobre a professora conteudista


Andra Sabedra Bordin
Graduada em Anlise de Sistemas. Especialista
em Sistemas de Informao. Mestre em Cincia da
Computao. Doutoranda em Engenharia e Gesto do
Conhecimentos pela UFSC. Professora dos Cursos de
Sistemas de Informao e Cincia da Computao da
Unisul. Analista de Sistemas do Instituto Stela.

prog_orient_objetos.indb 279

2/7/2007 16:45:11

prog_orient_objetos.indb 280

2/7/2007 16:45:11

Respostas e comentrios das


atividades de auto-avaliao
Unidade 1
1) Um programa feito em uma linguagem de programao de
alto nvel no pode ser entendido diretamente nessa linguagem
pelo computador. O que precisar ser feito com esse programa em
alto nvel para que suas instrues possam ser entendidas pelo
computador?
Resposta: O programa precisa ser interpretado ou compilado
previamente antes das suas instrues serem executadas.
O processo de interpretao consiste em transformar cada
instruo programada para a linguagem binria no momento
em que o programa est sendo executado. um processo que
deixa a execuo do programa mais lento. A cada vez que o
programa for executado esse processo ir se repetir.
O processo de compilao consiste em transformar cada
instruo programada para a linguagem binria numa
fase anterior a execuo do programa. Depois que todo o
conjunto de instrues for passado para linguagem binria o
programa est pronto para ser executado. Uma vez compilado
sem problemas, o programa pode ser sempre executado
sem necessidade de passar pelo processo de compilao
novamente.
2) Explique a relao existente entre a caracterstica
Multiplataforma da linguagem Java e a expresso write once run
anywhere.
Resposta: A caracterista multiplataforma da linguagem
Java e a expresso write once run anywhere esto ligadas
porque quando se desenvolve um programa na linguagem
Java necessrio compilar esse programa uma vez. Depois
de compilador ele ser executado em outras plataformas
de hardware/sistema operacional sem precisar voltar ao
programa e alterar o mesmo, ou seja, escreva o cdigo uma
vez e rode em qualquer lugar.

prog_orient_objetos.indb 281

2/7/2007 16:45:11

Universidade do Sul de Santa Catarina

3) Explique o que a maquina virtual (JVM - Java Virtual Machine) da


linguagem Java.
Resposta: A mquina virtual da linguagem Java um software que
permite que os programas desenvolvidos e compilados (bytecodes)
nela sejam executados. Um programa em Java no executado
diretamente pelo sistema operacional, ele passa por essa camada que
a JVM.

Unidade 2
1) Desenvolva um pequeno programa na linguagem Java que imprima
o seu nome da tela. Mude o nome do programa para MeuNome.java, ou
seja, no lugar de AloMundo voc deve digitar MeuNome.
Resposta:
public class MeuNome {
public static void main(String args[]) {
System.out.println(Andra );
}
}

Unidade 3
1) Faa as seguintes declaraes de variveis na linguagem Java:
a.Declare uma varivel de memria para armazenar um valor numrico
inteiro, um valor numrico real, um valor do tipo lgico, um valor do tipo
Literal.
Resposta:
int num;
double numreal;
boolean status;
String endereo;
b. Declare um vetor de 5 posies para armazenar valores inteiros.
Resposta:
int val[]=new int[5]

282

prog_orient_objetos.indb 282

2/7/2007 16:45:11

Programao Orientada a Objeto

c. Declare uma matriz de 3 x 2 para armazenar valores do tipo literal.


Resposta:
String nome[][]=new String [3][2]
2) Produza o seguinte trecho de cdigo na linguagem Java:
Resposta: Criar uma varivel do tipo literal e armazenar o valor
Unisul; criar outra varivel do tipo literal e armazenar o valor Virtual;
concatenar (unir) essas duas variveis e armazenar em uma terceira
varivel.
String X=Unisul;
String Y=Virtual;
String XY= X + Y;
3) Traduza os seguintes trechos de pseudocdigo para a linguagem Java:
Resposta:
A,B: numrico
A5
B 6
CA+B
Escreva C;
int A,B;
A = 5;
B = 6;
C = A +B;
JOptionPane.showMessageDialog(null, Valor de C + C);
4) Escreva um trecho de cdigo em Java que leia o nome de uma pessoa e
a sua idade. Logo aps, escreva o nome da pessoa e a sua idade.
Resposta:
String nome;
int idade;
nome = JOptionPane.showInputDialog(Entre com o nome );
idade = Integer.parseInt(JOptionPane.showInputDialog(Entre com a idade ));
JOptionPane.showMessageDialog(null, O nome da pessoa + nome + e sua idade +
idade);

283

prog_orient_objetos.indb 283

2/7/2007 16:45:11

Universidade do Sul de Santa Catarina

Unidade 4
1) Desenvolver em Java TODOS os exerccios de auto-avaliao da seo 1 da Unidade 5
da disciplina de Lgica de Programao I.
Resposta:

Algoritmo 1
import javax.swing.*;
public class Compra{
public static void main(String args[])
{
String CLIENTE;
int QTDHOT, QTDXEGG, QTDREFRI, QTDBATATA;
double PREHOT, PREXEGG, PREREFRI, PREBATATA,TOTAL;
// QTDHOT = Quantidade de Cachorro-Quente
// QTDXEGG = Quantidade de XEGG;
//QTDREFRI = Quantidade de Refrigerante;
//QTDBATATA = Quantidade de Batatas Fritas;
//TOTAL = Valor total comprado
CLIENTE=JOptionPane.showInputDialog(Digite o nome do cliente:);
QTDHOT= Integer.parseInt(JOptionPane.showInputDialog(Digite a quantidade de Cachorro-Quente:));
PREHOT= Double.parseDouble(JOptionPane.showInputDialog(Digite o preo do Cachorro-Quente:));
QTDXEGG= Integer.parseInt(JOptionPane.showInputDialog(Digite a quantidade de X-EGG:));
PREXEGG= Double.parseDouble(JOptionPane.showInputDialog(Digite o preo do X-EGG:));
QTDREFRI= Integer.parseInt(JOptionPane.showInputDialog(Digite a quantidade de refrigerantes:));
PREREFRI= Double.parseDouble(JOptionPane.showInputDialog(Digite o preo do refrigerante:));
QTDBATATA= Integer.parseInt(JOptionPane.showInputDialog(Digite a quantidade de batatas fritas:));
PREBATATA= Double.parseDouble(JOptionPane.showInputDialog(Digite o preo da batata frita:));
TOTAL = (QTDHOT * PREHOT) + (QTDXEGG * PREXEGG) + (QTDREFRI * PREREFRI) + (QTDBATATA * PREBATATA);
JOptionPane.showMessageDialog(null,Cliente +CLIENTE);
JOptionPane.showMessageDialog(null,Total +TOTAL);
}
}

Algoritmo 2
import javax.swing.*;
public class Aluno{
public static void main(String args[])
{
String nome, endereco,sexo, cidade, estado, nomedopai, nomedamae,telefonecontato;
String datadenascimento,grauescolar;
nome=JOptionPane.showInputDialog(Digite o nome do aluno:);

284

prog_orient_objetos.indb 284

2/7/2007 16:45:11

Programao Orientada a Objeto

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:);
cep= JOptionPane.showInputDialog(Digite o cep:);
datadenascimento= JOptionPane.showInputDialog(Digite a data de nascimento:);
grauescolar= JOptionPane.showInputDialog(Digite o grau de escolaridade:);
curso= JOptionPane.showInputDialog(Digite o curso que leciona:);
rg= Integer.parseInt(JOptionPane.showInputDialog(Digite o RG:));
JOptionPane.showMessageDialog(null,Nome +nome);
JOptionPane.showMessageDialog(null,Endereco +endereco);
JOptionPane.showMessageDialog(null,Cidade +cidade);
JOptionPane.showMessageDialog(null,Estado +estado);

285

prog_orient_objetos.indb 285

2/7/2007 16:45:11

Universidade do Sul de Santa Catarina

JOptionPane.showMessageDialog(null,CEP +cep);
JOptionPane.showMessageDialog(null,Data de nascimento +datadenascimento);
JOptionPane.showMessageDialog(null,Grau de escolaridade +grauescolar);
JOptionPane.showMessageDialog(null,Curso que leciona +curso);
JOptionPane.showMessageDialog(null,RG +rg);
}
}

Algoritmo 4
import javax.swing.*;
public class Media{
public static void main(String args[])
{
double nota1, nota2, nota3, media;
String nomedisci;
int numeroturma;
nota1=Double.parseDouble(JOptionPane.showInputDialog(Digite a primeira nota:));
nota2=Double.parseDouble(JOptionPane.showInputDialog(Digite a segunda nota:));
nota3=Double.parseDouble(JOptionPane.showInputDialog(Digite a terceira nota:));
nomedisci= JOptionPane.showInputDialog(Digite o nome da disciplina:);
numeroturma= Integer.parseInt(JOptionPane.showInputDialog(Digite o numero da turma:));
JOptionPane.showMessageDialog(null,Nota 1 +nota1);
JOptionPane.showMessageDialog(null,Nota 2 +nota2);
JOptionPane.showMessageDialog(null,Nota 3 +nota3);
JOptionPane.showMessageDialog(null,Disciplina +nomedisci);
JOptionPane.showMessageDialog(null,Numero da turma +numeroturma);
JOptionPane.showMessageDialog(null,Media Final +(nota1+nota2+nota3)/3);
}
}

Algoritmo 5
import javax.swing.*;
public class Conta{
public static void main(String args[])
{
double limite, saldoatual, valor;
String nomecor, nomebanco;
int numeroconta;
nomecor= JOptionPane.showInputDialog(Digite o nome do correntista:);
nomebanco= JOptionPane.showInputDialog(Digite o nome do banco:);
numeroconta= Integer.parseInt(JOptionPane.showInputDialog(Digite o numero da conta:));

286

prog_orient_objetos.indb 286

2/7/2007 16:45:11

Programao Orientada a Objeto

limite=Double.parseDouble(JOptionPane.showInputDialog(Digite o limite:));
saldoatual=Double.parseDouble(JOptionPane.showInputDialog(Digite o saldo atual:));
//entrar com um valor de deposito (credito)
valor=Double.parseDouble(JOptionPane.showInputDialog(Digite o valor de deposito:));
saldoatual = saldoatual + valor;
JOptionPane.showMessageDialog(null,O saldo atual +saldoatual);
//entrar com um valor de saque (debito)
valor=Double.parseDouble(JOptionPane.showInputDialog(Digite o valor de saque:));
saldoatual = saldoatual - valor;
JOptionPane.showMessageDialog(null,O saldo atual +saldoatual);

}
}

Unidade 5
1) Desenvolver em Java todos os exerccios de auto-avaliao da seo 2
da Unidade 5 da disciplina de Lgica de Programao I (Exerccios com
estrutura condicional)
Resposta:

Resoluo Algoritmo 6.1


import javax.swing.*;
class Ordem{
public static void main(String args[]) {
int A, B, C, MENOR, INTERMEDIARIO, MAIOR;
A=Integer.parseInt(JOptionPane.showInputDialog(Digite o primeiro nmero: ));
B=Integer.parseInt(JOptionPane.showInputDialog(Digite o segundo nmero: ));
C=Integer.parseInt(JOptionPane.showInputDialog(Digite o terceiro nmero: ));
if (A > B)
if (C > A){
MAIOR = C;
INTERMEDIARIO = A;
MENOR = B;
}else{
if (C > B){
MAIOR = A;
INTERMEDIARIO = C;
MENOR = B;
}else {

287

prog_orient_objetos.indb 287

2/7/2007 16:45:12

Universidade do Sul de Santa Catarina

MAIOR = A;
INTERMEDIARIO = B;
MENOR = C;
}
}
else {
if (C > B){
MAIOR = C;
INTERMEDIARIO = B;
MENOR = A;
}else {
if (C > A){
MAIOR = B;
INTERMEDIARIO = C;
MENOR = A;
}else {
MAIOR = B;
INTERMEDIARIO = A;
MENOR = C;
}
}
}
JOptionPane.showMessageDialog(null,O maior nmero : +MAIOR);
JOptionPane.showMessageDialog(null,O nmero intermdirio : +INTERMEDIARIO);
JOptionPane.showMessageDialog(null,O menor nmero : +MENOR);
}
}

Resoluo Algoritmo 6.2


import javax.swing.*;
public class MaiorMenor{
public static void main(String args[])
{
int NUMERO;
NUMERO=Integer.parseInt(JOptionPane.showInputDialog(Entre com um nmero ));
JOptionPane.showMessageDialog(null,Entre com um nmero : +NUMERO);
if (NUMERO < 20)
JOptionPane.showMessageDialog(null,Nmero digitado menor que 20 +NUMERO);
else
if (NUMERO == 20)
JOptionPane.showMessageDialog(null,Nmero digitado igual a 20 +NUMERO);
else
JOptionPane.showMessageDialog(null,Nmero digitado maior que 20 +NUMERO);
}
}

288

prog_orient_objetos.indb 288

2/7/2007 16:45:12

Programao Orientada a Objeto

Resoluo Algoritmo 6.3


import javax.swing.*;
class Intervalo{
public static void main(String args[])
{
int NUMERO;
NUMERO = 0;
NUMERO=Integer.parseInt(JOptionPane.showInputDialog(Digite o nmero +NUMERO));
if ((NUMERO >= 30) && (NUMERO <= 90))
JOptionPane.showInputDialog(Nmero digitado esta dentro do intervalo considerado);
else
JOptionPane.showInputDialog(Nmero digitado esta fora do intervalo considerado);
}
}
Resoluo Algoritmo 6.4
import javax.swing.*;
class Inss{
public static void main(String args[]) {
Double SAL_BRUTO, SAL_LIQUIDO;
SAL_BRUTO = 0.0;
SAL_BRUTO=Double.parseDouble(JOptionPane.showInputDialog(Digite o salrio bruto do
trabalhador: +SAL_BRUTO));
if (SAL_BRUTO <= 600)
SAL_LIQUIDO=SAL_BRUTO; // no h desconto
else
if ((SAL_BRUTO > 600) && (SAL_BRUTO <= 1200))
SAL_LIQUIDO=(SAL_BRUTO-SAL_BRUTO*0.2); //desconto de 20%
else
if ((SAL_BRUTO > 1200) && (SAL_BRUTO <=2000))
SAL_LIQUIDO=(SAL_BRUTO-SAL_BRUTO*0.25); //desconto de 25%
else
SAL_LIQUIDO=(SAL_BRUTO-SAL_BRUTO*0.3); //desconto de 30%
//saida do algoritmo
JOptionPane.showMessageDialog(null,O salrio lquido do trabalhador aps os descontps de INSS
de : +SAL_LIQUIDO);
}
}
Resoluo Algoritmo 6.5
import javax.swing.*;
public class VendaProduto{
public static void main(String args[])
{
double VCOMPRA, VVENDA;//valor de compra e de venda do produto

289

prog_orient_objetos.indb 289

2/7/2007 16:45:12

Universidade do Sul de Santa Catarina

VCOMPRA=Double.parseDouble(JOptionPane.showInputDialog(Entre com valor de compra do produto: ));


if (VCOMPRA < 20)
VVENDA = (VCOMPRA + (VCOMPRA*0.5)); // 50% de lucro
else
VVENDA = (VCOMPRA + (VCOMPRA*0.35)); // 35% de lucro
JOptionPane.showMessageDialog(null,O valor de venda do produto: +VVENDA);
}
}
2) Desenvolver em Java todos os exerccios de auto-avaliao da Unidade 6 da
disciplina de Lgica de Programao I (Exerccios com estrutura de repetio):
Resposta:

Algoritmo 1: (Ler 200 nmeros e imprimir quantos so pares e quantos so mpares)


import javax.swing.*;
public class RepeticaoParImpar{
public static void main(String args[])
{
int num;
for (int i=1;i<=200;i++){
num = Integer.parseInt(JOptionPane.showInputDialog(Digite o numero:));
if ( num % 2 == 0 )
JOptionPane.showMessageDialog(null,Numero par );
else
JOptionPane.showMessageDialog(null,Numero impar );
}
}
}

Algoritmo 2: (Entrar com 20 nmeros e imprimir a soma dos positivos, e o total de nmeros negativos)
import javax.swing.*;
public class PositivoNegativo{
public static void main(String args[])
{
int num;
int soma=0;
int cont=0;
for (int i=1;i<=20;i++){
num = Integer.parseInt(JOptionPane.showInputDialog(Digite o numero:));
if ( num > 0 )

290

prog_orient_objetos.indb 290

2/7/2007 16:45:12

Programao Orientada a Objeto

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);
}
}

Algoritmo 4: (entrar com o nome, idade e sexo de 20 pessoas. Imprimir o nome, se a pessoa for do
sexo masculino e tiver mais de 21anos)
import javax.swing.*;
public class Maior21{
public static void main(String args[])
{
String nome,sexo;
int idade;
for (int i=1;i<=20;i++){
nome=JOptionPane.showInputDialog(Digite o nome do aluno:);
idade= Integer.parseInt(JOptionPane.showInputDialog(Digite o endereco:));

291

prog_orient_objetos.indb 291

2/7/2007 16:45:12

Universidade do Sul de Santa Catarina

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);
}
//aqui comea a funcao calcMedia
public static double calcMedia(int n1,int n2, int n3){
return (n1+n2+n3)/3;
}
}
2) Crie um programa em Java que leia o raio de uma esfera (do tipo real) e
passe esse valor para a funo volumeEsfera. Essa funo deve calcular o
volume da esfera na tela e retornar o seu valor. Para o clculo do volume
deve ser usada a seguinte frmula: Volume = (4.0 / 3.0) * PI * raio3

292

prog_orient_objetos.indb 292

2/7/2007 16:45:12

Programao Orientada a Objeto

Resposta:
import javax.swing.*;
public class FuncaoVolumeEsfera{
public static void main(String args[])
{
double raio, volume;
raio = Double.parseDouble(JOptionPane.showInputDialog(Digite o raio:));
volume = volumeEsfera(raio);
JOptionPane.showMessageDialog(null,O volume + volume);
}
//aqui comea a funcao
public static double volumeEsfera(double draio){
return (4.0 / 3.0) * 3.14 * (draio*draio*draio);
}
}
3) Faa um programa em Java em que o usurio entre com um valor de
base e um valor de expoente. O programa deve calcular a potncia. O
programa deve ser modularizado. Voc deve decidir se a subrotina ser
um procedimento ou uma funo. A formula : base expoente
Resposta:
import javax.swing.*;
public class FuncaoVolumeEsfera{
public static void main(String args[])
{
int base, expoente, pot;
base = Integer.parseInt(JOptionPane.showInputDialog(Digite a base:));
expoente = Integer.parseInt(JOptionPane.showInputDialog(Digite o expoente:));
pot = potencia(base, expoente);
JOptionPane.showMessageDialog(null,A potencia + pot);
}
//aqui comea a funcao
public static int potencia(int base, int expoente){
int pote=1;
for (int i=1;i<=expoente;i++)
pote=pote*base;
return pote;
}
}

293

prog_orient_objetos.indb 293

2/7/2007 16:45:12

Universidade do Sul de Santa Catarina

Unidade 7
1) Edite a classe Cliente no editor de texto (Bloco de Notas ou qualquer
ambiente para desenvolvimento de programas Java) e salve na pasta
CURSOWEBOO. Essa pasta deve ser criada anteriormente. Aps a edio
(digitao) compile a classe. O arquivo Cliente.class deve ter sido gerado.
Resposta: O cdigo j est na unidade.
2) Edite a classe UsaCliente no editor de texto. e salve na pasta
CURSOWEBOO. Aps a edio, compile a classe. O arquivo UsaCliente.
classe deve ter sido gerado. O ultimo passo executar a classe. Dessa
forma, voc ver funcionando seu primeiro programa orientado a objeto
desenvolvido na linguagem Java.
Resposta: O cdigo j est na unidade.
3) Cite exemplos de objetos do mundo real. Identifique atributos e
comportamentos para esses objetos. Agrupe esses objetos nas suas
respectivas classes. Faa isso usando a notao UML para classes e objetos.

Classe que representa


os objetos imvel

Objetos imvel

Imovel

Imvel A: Imovel

endereco: String
numeroquartos:int
possuigaragem: String
nomeproprietario: String

endereco: Rua X
numeroquartos: 2
possuigaragem: sim
nomeproprietario: Joo

alteraEndereco()
alteraNumeroQua()
alteraGaragem()
alteraProprietario()
forneceEndereco()
forneceNumeroQua()
forneceGaragem()
forneceProprietario()

Imvel B: Imovel
endereco: Rua Y
numeroquartos: 1
possuigaragem: nao
nomeproprietario: Mario

294

prog_orient_objetos.indb 294

2/7/2007 16:45:12

Programao Orientada a Objeto

Unidade 8
1) Represente graficamente em memria, tal como foi feito nessa unidade,
a seguinte instruo. Identifique na representao grfica o que
referncia e o que objeto.
Cliente cliente = new Cliente (Rita, Rua R, 15215215211);
Resposta:

cliente

Objeto Cliente

130x

nome Rita
endereco Rua R
cpf 15215215211

endereo 130x

2) Quando um mtodo construtor chamado?


Resposta: Quando um objeto de determinado tipo criado em
memria o mtodo construtor implementando na classe desse objeto
chamado.

3) Qual a funo de um mtodo modificador numa classe? E de um


mtodo recuperador?
Resposta: Os mtodos modificadores devem comear pelo nome set
seguido do nome do atributo que esse mtodo ir modificar o valor.
Os mtodos recuperadores devem comear pelo nome get seguido do
nome do atributo que esse mtodo ir recuperar o valor.

Unidade 9
A resposta a implementao (programao) do cdigo da unidade.

295

prog_orient_objetos.indb 295

2/7/2007 16:45:13

Universidade do Sul de Santa Catarina

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.

2) A seguinte classe (ver o algoritmo ao final da unidade) tem dois mtodos


static. Implemente outra classe chamada UsaCalculos.java e demonstre
como esses mtodos static podem ser chamados dessa classe.
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:

//Implementao da classe Cep


public class Cep
{
private int codigo;
private String nomerua, bairro;
public Cep()

296

prog_orient_objetos.indb 296

2/7/2007 16:45:13

Programao Orientada a Objeto

{
codigo=0;
nomerua= ;
bairro= ;
}
public void setCodigo(int icodigo)
{
codigo=icodigo;
}
public void setNomeRua(String snome)
{
nomerua=snome;
}
public void setBairro(String sbairro)
{
bairro=sbairro;
}
public int getCodigo()
{
return codigo;
}
public String getNomeRua()
{
return nomerua;
}
public String getBairro()
{
return bairro;
}
}
// Implementao da classe Funcionrio (sem o atributo setor)
public class Funcionario
{
private String nome, end;
private double salario;
private Cep cep;
public Funcionario()
{
nome=;
end=;
salario=0;
cep=null;
}
public void setNome(String snome)
{

297

prog_orient_objetos.indb 297

2/7/2007 16:45:13

Universidade do Sul de Santa Catarina

nome=snome;
}
public void setEnd(String send)
{
end=send;
}
public void setSalario(double dsalario)
{
salario=dsalario;
}
public void setCep(Cep ccep)
{
cep=ccep;
}
public String getNome()
{
return nome;
}
public String getEnd()
{
return end;
}
public double getSalario()
{
return salario;
}
public Cep getCep()
{
return cep;
}
}

//Implementao da classe que cadastra Funcionrios


import javax.swing.*;
public class CadastroFuncCep
{
public static void main(String args[])
{
Cep c[]=new Cep[3];
for (int i=0; i<3; i++)
{
c[i]=new Cep();

298

prog_orient_objetos.indb 298

2/7/2007 16:45:13

Programao Orientada a Objeto

c[i].setCodigo(Integer.parseInt(JOptionPane.showInputDialog(Digite o cdigo
de endereamento postal)));
c[i].setNomeRua(JOptionPane.showInputDialog(Digite o nome da rua));
c[i].setBairro(JOptionPane.showInputDialog(Digite o bairro));
}
Funcionario f[]=new Funcionario[5];
for (int i=0; i<5; i++)
{
f[i]= new Funcionario();
f[i].setNome(JOptionPane.showInputDialog(Digite o nome do funcionrio));
f[i].setEnd(JOptionPane.showInputDialog(Digite o endereo do funcionrio));
f[i].setSalario(Double.parseDouble(JOptionPane.showInputDialog(Digite o
salario do funcionrio)));
String digCep=JOptionPane.showInputDialog(Digite o cep do funcionrio);
for (int j=0; j<3; j++)
{
if (digCep.equalsIgnoreCase(c[j].getCodigo() ))
{
f[i].setCep(c[j]);
break;
}
}
}
for (int i=0; i<5; i++)
{
JOptionPane.showMessageDialog(null, Nome:+ +f[i].getNome()+\
n+Rua:+ +f[i].getCep().getNomeRua()+\n+Bairro:+ +f[i].getCep().getBairro());
}
System.exit(0);
}
}

Unidade 12
1) A resposta a implementao (programao) do cdigo da unidade.

2) Desenvolva um sistema para armazenar informaes sobre professores


e disciplinas de instituio educacional.

299

prog_orient_objetos.indb 299

2/7/2007 16:45:13

Universidade do Sul de Santa Catarina

Resposta:

//Implementao da classe Professor


public class Professor{
private String nome;
private String titumax;
private int ch;
public Professor ( ){
nome= ;
titumax= ;
ch= 0;
}
public void setnome (String snome){
nome=snome;
}
public void settitumax (String stitumax){
titumax=stitumax;
}
public void setch (int ich){
ch=ich;
}
public String getnome (){
return nome;
}
public String gettitumax (){
return titumax;
}
public int getch (){
return ch;
}
}

//Implementao da Classe Disciplina


public class Disciplina{
private String nome;
private int ch;
private Professor prof;

public Disciplina ( ){
nome= ;
ch= 0;
prof=null;
}

300

prog_orient_objetos.indb 300

2/7/2007 16:45:13

Programao Orientada a Objeto

public void setnomedisc (String snome){


nome=snome;
}
public void setchdisc (int ich){
ch=ich;
}
public void setProf (Professor p){
prof = p;
}
public String getnomedisc (){
return nome;
}
public int getchdisc (){
return ch;
}
public Professor getProf (){
return prof;
}
}

//Implementao de um programa simples para cadastrar Disciplina e Professor


import javax.swing.*;
public class CadastroDisciplinaProf
{
public static void main(String args[])
{
//opcao 1 - cadastro de disciplinas e professores
//cria todos os objetos Professor
Professor p[]=new Professor[5];
for (int i=0; i<5; i++)
{
p[i]= new Professor();
p[i].setnome(JOptionPane.showInputDialog(Digite o nome do professor));
p[i].settitumax(JOptionPane.showInputDialog(Digite a titulao mxima do prof.));
p[i].setch(Integer.parseInt(JOptionPane.showInputDialog(Digite a carga horaria)));
}
/*cadastra trs disciplina e associa cada uma a um professor, porque uma disciplina s pode ser
ministrada por um professor*/
Disciplina d[]=new Disciplina[3];
for (int i=0; i<3; i++)
{
d[i]=new Disciplina();
d[i].setnomedisc(JOptionPane.showInputDialog(Digite o cdigo de endereamento postal));

301

prog_orient_objetos.indb 301

2/7/2007 16:45:13

Universidade do Sul de Santa Catarina

d[i].setchdisc(Integer.parseInt(JOptionPane.showInputDialog(Digite o nome da rua)));


/* a referncia para o objeto professor que ministra a disciplina que est sendo cadastrada deve ser
procurada no vetor p[ ] atraves do nome do professor digitado pelo usuario*/
String nomeprof=JOptionPane.showInputDialog(Digite o nome do professor);
for (int j=0; j<5; j++){
if (nomeprof.equalsIgnoreCase(p[j].getnome())){
d[i].setProf(p[j]);
break;
}
}
}
//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);
}
}

302

prog_orient_objetos.indb 302

2/7/2007 16:45:13

Programao Orientada a Objeto

Unidade 13
1) Desenvolva um sistema orientado a objetos para automatizar as
informaes de uma Administradora de Imveis.
Resposta:
Imovel
endereco: String
nomeproprietario: String
vendaaluguel:String
valor:double
Imovel()
setEndereco()
setProprietario()
setVendaAluguel()
setValor()
getEndereco()
getProprietario()
getVendaAluguel()
getValor()

Casa

Apto

piscina: String

andar: int
numeroapto:int

Casa()
setPiscina()
getPiscina()

Apto ()
setAndar()
setNumeroApto()
getAndar()
getNumeroApto()

303

prog_orient_objetos.indb 303

2/7/2007 16:45:13

Universidade do Sul de Santa Catarina

Unidade 14
1) Implemente as classes modeladas no sistema da Administradora de
Imveis descrito na atividade da unidade anterior.
Resposta:
//Implementao da classe Imvel
public class Imovel {
private String nomeproprietario;
private String endereco;
private String vendaaluguel;
private double valor;
public Imovel (){
nomeproprietario= ;
endereco=;
vendaaluguel=;
valor = 0;
}
public void setNomeProprietario ( String snome){
nomeproprietario=snome;
}
public void setEndereco ( String sendereco){
endereco=sendereco;
}
public void setVendaAluguel (String stipo){
vendaaluguel=stipo;
}
public void setValor ( double dvalor){
valor=dvalor;
}
public String getNomeProprietario(){
return nomeproprietario
;
}
public String getEndereo(){
return endereco;
}
public String getVendaAluguel(){
return vendaaluguel;
}
public double getValor(){
return valor;
}
}
// Implementao da classe Apto

304

prog_orient_objetos.indb 304

2/7/2007 16:45:14

Programao Orientada a Objeto

public class Apto extends Imovel{


private int andar;
private int numero;
public Apto (){
super ();
andar=0;
numero=0;
}
public void setAndar (int iandar){
andar=iandar;
}
public void setNumero ( int inumero){
numero=inumero;
}
public int getAndar (){
return andar;
}
public int getNumero (){
return numero;
}
}
//Implementao Casa
public class Casa extends Imovel{
private String piscina;
public Casa (){
super ();
piscina=nao;
}
public void setPiscina (String spiscina){
piscina=spiscina;
}
public String getPiscina (){
return piscina;
}
}

2) Implementa as classes e o sistema da Locadora de Veculos descrito


nessa unidade.

Resposta: cdigo j est na unidade.

305

prog_orient_objetos.indb 305

2/7/2007 16:45:14

prog_orient_objetos.indb 306

2/7/2007 16:45:14

Вам также может понравиться