You are on page 1of 327

Universidade do Sul de Santa Catarina

Programao
Orientada a Objeto
Disciplina na modalidade a distncia

Universidade do Sul de Santa Catarina

Programao Orientada a Objeto


Disciplina na modalidade a distncia

Palhoa
UnisulVirtual
2011

prog_orient_objetos.indb 1

15/12/2011 14:00:27

Crditos
Universidade do Sul de Santa Catarina | Campus UnisulVirtual | Educao Superior a Distncia

Avenida dos Lagos, 41 Cidade Universitria Pedra Branca | Palhoa SC | 88137-900 | Fone/fax: (48) 3279-1242 e 3279-1271 | E-mail: cursovirtual@unisul.br | Site: www.unisul.br/unisulvirtual

Reitor
Ailton Nazareno Soares
Vice-Reitor
Sebastio Salsio Heerdt
Chefe de Gabinete da Reitoria
Willian Corra Mximo
Pr-Reitor de Ensino e
Pr-Reitor de Pesquisa,
Ps-Graduao e Inovao
Mauri Luiz Heerdt
Pr-Reitora de Administrao
Acadmica
Miriam de Ftima Bora Rosa
Pr-Reitor de Desenvolvimento
e Inovao Institucional
Valter Alves Schmitz Neto
Diretora do Campus
Universitrio de Tubaro
Milene Pacheco Kindermann
Diretor do Campus Universitrio
da Grande Florianpolis
Hrcules Nunes de Arajo
Secretria-Geral de Ensino
Solange Antunes de Souza
Diretora do Campus
Universitrio UnisulVirtual
Jucimara Roesler
Equipe UnisulVirtual
Diretor Adjunto
Moacir Heerdt

Secretaria Executiva e Cerimonial


Jackson Schuelter Wiggers (Coord.)
Marcelo Fraiberg Machado
Tenille Catarina

Assessoria de Assuntos
Internacionais
Murilo Matos Mendona

Assessoria de Relao com Poder


Pblico e Foras Armadas
Adenir Siqueira Viana
Walter Flix Cardoso Junior

Assessoria DAD - Disciplinas a


Distncia

Patrcia da Silva Meneghel (Coord.)


Carlos Alberto Areias
Cludia Berh V. da Silva
Conceio Aparecida Kindermann
Luiz Fernando Meneghel
Renata Souza de A. Subtil

Assessoria de Inovao e
Qualidade de EAD

Denia Falco de Bittencourt (Coord.)


Andrea Ouriques Balbinot
Carmen Maria Cipriani Pandini

Assessoria de Tecnologia

Osmar de Oliveira Braz Jnior (Coord.)


Felipe Fernandes
Felipe Jacson de Freitas
Jefferson Amorin Oliveira
Phelipe Luiz Winter da Silva
Priscila da Silva
Rodrigo Battistotti Pimpo
Tamara Bruna Ferreira da Silva

Coordenao Cursos
Coordenadores de UNA

Diva Marlia Flemming


Marciel Evangelista Catneo
Roberto Iunskovski

Auxiliares de Coordenao

Ana Denise Goularte de Souza


Camile Martinelli Silveira
Fabiana Lange Patricio
Tnia Regina Goularte Waltemann

prog_orient_objetos.indb 2

Coordenadores Graduao

Alosio Jos Rodrigues


Ana Lusa Mlbert
Ana Paula R.Pacheco
Artur Beck Neto
Bernardino Jos da Silva
Charles Odair Cesconetto da Silva
Dilsa Mondardo
Diva Marlia Flemming
Horcio Dutra Mello
Itamar Pedro Bevilaqua
Jairo Afonso Henkes
Janana Baeta Neves
Jorge Alexandre Nogared Cardoso
Jos Carlos da Silva Junior
Jos Gabriel da Silva
Jos Humberto Dias de Toledo
Joseane Borges de Miranda
Luiz G. Buchmann Figueiredo
Marciel Evangelista Catneo
Maria Cristina Schweitzer Veit
Maria da Graa Poyer
Mauro Faccioni Filho
Moacir Fogaa
Nlio Herzmann
Onei Tadeu Dutra
Patrcia Fontanella
Roberto Iunskovski
Rose Clr Estivalete Beche

Vice-Coordenadores Graduao
Adriana Santos Ramm
Bernardino Jos da Silva
Catia Melissa Silveira Rodrigues
Horcio Dutra Mello
Jardel Mendes Vieira
Joel Irineu Lohn
Jos Carlos Noronha de Oliveira
Jos Gabriel da Silva
Jos Humberto Dias de Toledo
Luciana Manfroi
Rogrio Santos da Costa
Rosa Beatriz Madruga Pinheiro
Sergio Sell
Tatiana Lee Marques
Valnei Carlos Denardin
Smia Mnica Fortunato (Adjunta)

Coordenadores Ps-Graduao

Alosio Jos Rodrigues


Anelise Leal Vieira Cubas
Bernardino Jos da Silva
Carmen Maria Cipriani Pandini
Daniela Ernani Monteiro Will
Giovani de Paula
Karla Leonora Dayse Nunes
Letcia Cristina Bizarro Barbosa
Luiz Otvio Botelho Lento
Roberto Iunskovski
Rodrigo Nunes Lunardelli
Rogrio Santos da Costa
Thiago Coelho Soares
Vera Rejane Niedersberg Schuhmacher

Gerncia Administrao

Acadmica
Angelita Maral Flores (Gerente)
Fernanda Farias

Secretaria de Ensino a Distncia


Samara Josten Flores (Secretria de Ensino)
Giane dos Passos (Secretria Acadmica)
Adenir Soares Jnior
Alessandro Alves da Silva
Andra Luci Mandira
Cristina Mara Schauffert
Djeime Sammer Bortolotti
Douglas Silveira
Evilym Melo Livramento
Fabiano Silva Michels
Fabricio Botelho Espndola
Felipe Wronski Henrique
Gisele Terezinha Cardoso Ferreira
Indyanara Ramos
Janaina Conceio
Jorge Luiz Vilhar Malaquias
Juliana Broering Martins
Luana Borges da Silva
Luana Tarsila Hellmann
Luza Koing Zumblick
Maria Jos Rossetti

Marilene de Ftima Capeleto


Patricia A. Pereira de Carvalho
Paulo Lisboa Cordeiro
Paulo Mauricio Silveira Bubalo
Rosngela Mara Siegel
Simone Torres de Oliveira
Vanessa Pereira Santos Metzker
Vanilda Liordina Heerdt

Gesto Documental

Patrcia de Souza Amorim


Poliana Simao
Schenon Souza Preto

Karine Augusta Zanoni


Marcia Luz de Oliveira
Mayara Pereira Rosa
Luciana Tomado Borguetti

Gerncia de Desenho e
Desenvolvimento de Materiais
Didticos

Assuntos Jurdicos

Mrcia Loch (Gerente)

Bruno Lucion Roso


Sheila Cristina Martins

Desenho Educacional

Marketing Estratgico

Rafael Bavaresco Bongiolo

Carolina Hoeller da Silva Boing


Vanderlei Brasil
Francielle Arruda Rampelotte

Cristina Klipp de Oliveira (Coord. Grad./DAD)


Roseli A. Rocha Moterle (Coord. Ps/Ext.)
Aline Cassol Daga
Aline Pimentel
Carmelita Schulze
Daniela Siqueira de Menezes
Delma Cristiane Morari
Eliete de Oliveira Costa
Elosa Machado Seemann
Flavia Lumi Matuzawa
Geovania Japiassu Martins
Isabel Zoldan da Veiga Rambo
Joo Marcos de Souza Alves
Leandro Roman Bamberg
Lygia Pereira
Lis Air Fogolari
Luiz Henrique Milani Queriquelli
Marcelo Tavares de Souza Campos
Mariana Aparecida dos Santos
Marina Melhado Gomes da Silva
Marina Cabeda Egger Moellwald
Mirian Elizabet Hahmeyer Collares Elpo
Pmella Rocha Flores da Silva
Rafael da Cunha Lara
Roberta de Ftima Martins
Roseli Aparecida Rocha Moterle
Sabrina Bleicher
Vernica Ribas Crcio

Reconhecimento de Curso

Acessibilidade

Multimdia

Lamuni Souza (Coord.)


Clair Maria Cardoso
Daniel Lucas de Medeiros
Jaliza Thizon de Bona
Guilherme Henrique Koerich
Josiane Leal
Marlia Locks Fernandes

Gerncia Administrativa e
Financeira
Renato Andr Luz (Gerente)
Ana Luise Wehrle
Anderson Zandr Prudncio
Daniel Contessa Lisboa
Naiara Jeremias da Rocha
Rafael Bourdot Back
Thais Helena Bonetti
Valmir Vencio Incio

Gerncia de Ensino, Pesquisa e


Extenso
Janana Baeta Neves (Gerente)
Aracelli Araldi

Elaborao de Projeto

Maria de Ftima Martins

Extenso

Maria Cristina Veit (Coord.)

Pesquisa

Daniela E. M. Will (Coord. PUIP, PUIC, PIBIC)


Mauro Faccioni Filho (Coord. Nuvem)

Ps-Graduao

Anelise Leal Vieira Cubas (Coord.)

Biblioteca

Salete Ceclia e Souza (Coord.)


Paula Sanhudo da Silva
Marlia Ignacio de Espndola
Renan Felipe Cascaes

Gesto Docente e Discente

Enzo de Oliveira Moreira (Coord.)

Capacitao e Assessoria ao
Docente

Alessandra de Oliveira (Assessoria)


Adriana Silveira
Alexandre Wagner da Rocha
Elaine Cristiane Surian (Capacitao)
Elizete De Marco
Fabiana Pereira
Iris de Souza Barros
Juliana Cardoso Esmeraldino
Maria Lina Moratelli Prado
Simone Zigunovas

Tutoria e Suporte

Anderson da Silveira (Ncleo Comunicao)


Claudia N. Nascimento (Ncleo Norte-

Nordeste)

Maria Eugnia F. Celeghin (Ncleo Plos)


Andreza Talles Cascais
Daniela Cassol Peres
Dbora Cristina Silveira
Ednia Araujo Alberto (Ncleo Sudeste)
Francine Cardoso da Silva
Janaina Conceio (Ncleo Sul)
Joice de Castro Peres
Karla F. Wisniewski Desengrini
Kelin Buss
Liana Ferreira
Luiz Antnio Pires
Maria Aparecida Teixeira
Mayara de Oliveira Bastos
Michael Mattar

Vanessa de Andrade Manoel (Coord.)


Letcia Regiane Da Silva Tobal
Mariella Gloria Rodrigues
Vanesa Montagna

Avaliao da aprendizagem

Portal e Comunicao

Catia Melissa Silveira Rodrigues


Andreia Drewes
Luiz Felipe Buchmann Figueiredo
Rafael Pessi

Gerncia de Produo

Arthur Emmanuel F. Silveira (Gerente)


Francini Ferreira Dias

Design Visual

Pedro Paulo Alves Teixeira (Coord.)


Alberto Regis Elias
Alex Sandro Xavier
Anne Cristyne Pereira
Cristiano Neri Gonalves Ribeiro
Daiana Ferreira Cassanego
Davi Pieper
Diogo Rafael da Silva
Edison Rodrigo Valim
Fernanda Fernandes
Frederico Trilha
Jordana Paula Schulka
Marcelo Neri da Silva
Nelson Rosa
Noemia Souza Mesquita
Oberdan Porto Leal Piantino
Srgio Giron (Coord.)
Dandara Lemos Reynaldo
Cleber Magri
Fernando Gustav Soares Lima
Josu Lange

Claudia Gabriela Dreher


Jaqueline Cardozo Polla
Ngila Cristina Hinckel
Sabrina Paula Soares Scaranto
Thayanny Aparecida B. da Conceio

Conferncia (e-OLA)

Gerncia de Logstica

Marcelo Bittencourt (Coord.)

Jeferson Cassiano A. da Costa (Gerente)

Logsitca de Materiais

Carlos Eduardo D. da Silva (Coord.)


Abraao do Nascimento Germano
Bruna Maciel
Fernando Sardo da Silva
Fylippy Margino dos Santos
Guilherme Lentz
Marlon Eliseu Pereira
Pablo Varela da Silveira
Rubens Amorim
Yslann David Melo Cordeiro

Avaliaes Presenciais

Graciele M. Lindenmayr (Coord.)


Ana Paula de Andrade
Angelica Cristina Gollo
Cristilaine Medeiros
Daiana Cristina Bortolotti
Delano Pinheiro Gomes
Edson Martins Rosa Junior
Fernando Steimbach
Fernando Oliveira Santos
Lisdeise Nunes Felipe
Marcelo Ramos
Marcio Ventura
Osni Jose Seidler Junior
Thais Bortolotti

Carla Fabiana Feltrin Raimundo (Coord.)


Bruno Augusto Zunino
Gabriel Barbosa

Produo Industrial

Gerncia Servio de Ateno


Integral ao Acadmico
Maria Isabel Aragon (Gerente)
Ana Paula Batista Detni
Andr Luiz Portes
Carolina Dias Damasceno
Cleide Incio Goulart Seeman
Denise Fernandes
Francielle Fernandes
Holdrin Milet Brando
Jenniffer Camargo
Jessica da Silva Bruchado
Jonatas Collao de Souza
Juliana Cardoso da Silva
Juliana Elen Tizian
Kamilla Rosa
Mariana Souza
Marilene Ftima Capeleto
Maurcio dos Santos Augusto
Maycon de Sousa Candido
Monique Napoli Ribeiro
Priscilla Geovana Pagani
Sabrina Mari Kawano Gonalves
Scheila Cristina Martins
Taize Muller
Tatiane Crestani Trentin

Gerncia de Marketing

Eliza B. Dallanhol Locks (Gerente)

Relacionamento com o Mercado


Alvaro Jos Souto
Relacionamento com Polos
Presenciais
Alex Fabiano Wehrle (Coord.)
Jeferson Pandolfo

15/12/2011 14:00:29

Andra Bordin

Programao Orientada a Objeto


Livro didtico
Reviso e Atualizao de Contedo
Samuel Pereira de Souza
Design instrucional
Flavia Lumi Matuzawa
Karla Leonora Dahse Nunes
6 edio

Palhoa
UnisulVirtual
2011

prog_orient_objetos.indb 3

15/12/2011 14:00:30

Copyright UnisulVirtual 2011


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

Edio Livro Didtico


Professor Conteudista
Andra Bordin
Reviso e Atualizao de Contedo
Samuel Pereira de Souza (5 ed. rev. e atual.)
Design Instrucional
Karla Leonora Dahse Nunes
Flvia Lumi Matuzawa
Leandro Kingeski Pacheco (4. ed. rev. e atual.)
Assistente Acadmico
Michele Antunes Corra (5 ed. rev. e atual.)
Roberta de Ftima Martins (6 edio)
Projeto Grfico e Capa
Equipe UnisulVirtual
Diagramao
Rafael Pessi
Alice Demaria Silva (5 ed. rev. e atual.)
Davi Pieper (6 edio)
Reviso Ortogrfica
B2B
005.117
B72
Bordin, Andra
Programao orientada ao objeto : livro didtico / Andra Bordin
; reviso e atualizao de contedo Samuel Pereira de Souza ; design
instrucional Karla Leonora Dahse Nunes, Flavia Lumi Matuzawa, [Leandro
Kingeski Pacheco ; assistente acadmico Michele Antunes Corra, Roberta
de Ftima Martins]. 6. ed. Palhoa : UnisulVirtual, 2011.
325 p. : il. ; 28 cm.
Inclui bibliografia.
1. Programao orientada a objetos (Computao). I. Souza, Samuel
Pereira de. II. Nunes, Karla Leonora Dahse. III. Matuzawa, Flavia Lumi. IV.
Pacheco, Leandro Kingeski. V. Corra, Michele Antunes. VI. Martins, Roberta
de Ftima. VII. Ttulo.

Ficha catalogrfica elaborada pela Biblioteca Universitria da Unisul

prog_orient_objetos.indb 4

15/12/2011 14:00:30

Sumrio
Apresentao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Palavras da professora. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Plano de estudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
UNIDADE 1 - Conhecendo a Linguagem de Programao Java. . . . . . . . . . 17
UNIDADE 2 - Preparando o ambiente para programar em Java. . . . . . . . . . 35
UNIDADE 3 - Sintaxe bsica da linguagem Java. . . . . . . . . . . . . . . . . . . . . . . . . 51
UNIDADE 4 - Implementando os primeiros programas em Java . . . . . . . . . 69
UNIDADE 5 - Implementando programas em Java
com controle de fluxo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
UNIDADE 6 - Desenvolvendo programas modularizados em Java . . . . . . 103
UNIDADE 7 - Introduo Programao Orientada a Objeto (POO). . . . . 117
UNIDADE 8 - Conceitos de Orientao a Objeto. . . . . . . . . . . . . . . . . . . . . . . 145
UNIDADE 9 - Aplicando os conceitos de OO atravs de
exemplos prticos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
UNIDADE 10 - Modificadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
UNIDADE 11 - Objetos como atributos de outros objetos . . . . . . . . . . . . . . 217
UNIDADE 12 - Associao na prtica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
UNIDADE 13 - Herana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
UNIDADE 14 - Herana na prtica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Para concluir o estudo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Referncias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
Sobre a professora conteudista. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
Respostas e comentrios das atividades de autoavaliao. . . . . . . . . . . . . . 299
Biblioteca Virtual. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325

prog_orient_objetos.indb 5

15/12/2011 14:00:30

prog_orient_objetos.indb 6

15/12/2011 14:00:30

Apresentao
Este livro didtico corresponde disciplina Programao
Orientada a Objetos.
O material foi elaborado visando a uma aprendizagem autnoma
e aborda contedos especialmente selecionados e relacionados
sua rea de formao. Ao adotar uma linguagem didtica
e dialgica, objetivamos facilitar seu estudo a distncia,
proporcionando condies favorveis s mltiplas interaes e a
um aprendizado contextualizado e eficaz.
Lembre-se que sua caminhada, nesta disciplina, ser
acompanhada e monitorada constantemente pelo Sistema
Tutorial da UnisulVirtual, por isso a distncia fica
caracterizada somente na modalidade de ensino que voc optou
para sua formao, pois na relao de aprendizagem professores
e instituio estaro sempre conectados com voc.
Ento, sempre que sentir necessidade entre em contato; voc tem
disposio diversas ferramentas e canais de acesso tais como:
telefone, e-mail e o Espao Unisul Virtual de Aprendizagem,
que o canal mais recomendado, pois tudo o que for enviado e
recebido fica registrado para seu maior controle e comodidade.
Nossa equipe tcnica e pedaggica ter o maior prazer em lhe
atender, pois sua aprendizagem o nosso principal objetivo.

Bom estudo e sucesso!


Equipe UnisulVirtual.

prog_orient_objetos.indb 7

15/12/2011 14:00:30

prog_orient_objetos.indb 8

15/12/2011 14:00:30

Palavras da professora
Ol!
Voc est iniciando a disciplina de Programao Orientada a
Objetos. Nessa disciplina, primeiramente, ser apresentada a
voc uma linguagem de programao. O nome da linguagem
Java. Atravs dessa linguagem de programao, voc poder
desenvolver, no computador, os algoritmos que elaborou nas
disciplinas de Lgica de Programao I e II. Voc conseguir
ver seus programas funcionando, poder test-los e modificlos, j que ter o conhecimento de lgica e, tambm, de uma
linguagem de programao.
Para isso, as unidades iniciais deste livro sero dedicadas a
passar todos os detalhes de sintaxe dessa linguagem. Ser
necessria muita ateno de sua parte, pois o desenvolvimento
de instrues de um programa em uma linguagem de
programao uma tarefa muito detalhada. Seu programa
pode no funcionar porque voc esqueceu de programar, por
exemplo, um ponto e vrgula.
Mas, essa ateno ser recompensada com a sua satisfao ao
ver o seu programa funcionar. uma sensao muito boa ver o
primeiro programa em funcionamento.
Conhecer uma linguagem de programao um pr-requisito
importante para que voc possa aprender e colocar em prtica
os conceitos da programao orientada a objetos, que o tpico
principal deste livro e ser tratado na maior parte das unidades.
A programao orientada a objetos tem esse nome porque
o seu objetivo resolver um problema analisando como
ele funciona no mundo real, ou seja, quais os objetos que
atuam no problema, quais as caractersticas (atributos) e
comportamentos desses objetos e como eles se relacionam.

prog_orient_objetos.indb 9

15/12/2011 14:00:31

Universidade do Sul de Santa Catarina

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
iro sanar suas dvidas.
Boa Sorte!!

10

prog_orient_objetos.indb 10

15/12/2011 14:00:31

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

o livro didtico;

o Espao UnisulVirtual de Aprendizagem (EVA);

as atividades de avaliao (a distncia, presenciais e de


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

prog_orient_objetos.indb 11

15/12/2011 14:00:31

Universidade do Sul de Santa Catarina

Objetivos
Geral:
Capacitar o aluno a analisar problemas e implementar programas
utilizando o paradigma de programao orientada a objeto.

Especficos:

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
Polimorfismo).

Carga Horria
A carga horria total da disciplina 120 horas-aula.

Contedo programtico/objetivos
Veja, a seguir, as unidades que compem o livro didtico desta
disciplina e os seus respectivos objetivos. Estes se referem aos
resultados que voc dever alcanar ao final de uma etapa de
estudo. Os objetivos de cada unidade definem o conjunto de
conhecimentos que voc dever possuir para o desenvolvimento
de habilidades e competncias necessrias sua formao.
Unidades de estudo: 14

12

prog_orient_objetos.indb 12

15/12/2011 14:00:31

Programao Orientada a Objeto

Unidade 1: Conhecendo a Linguagem de Programao Java


Esta unidade apresentar a linguagem de programao que
ser utilizada durante a disciplina, abordando o conceito de
linguagens de programao, sua histria e suas caractersticas,
com foco na linguagem Java.

Unidade 2: Preparando o ambiente para programar em Java


Esta unidade tem por finalidade apresentar os passos para
instalar e configurar o Java, mostrando os procedimentos
necessrios para a criao/execuo de um programa em Java.

Unidade 3: Sintaxe bsica da linguagem Java


Nesta unidade teremos contato com as primeiras instrues em
Java, que permitiro o posterior aprofundamento nas unidades
seguintes.

Unidade 4: Implementando os primeiros programas em Java


Esta unidade tem por finalidade mostrar os passos para a
criao de um programa em Java com entrada e sada de dados
e a declarao das variveis em uma estrutura de classe da
linguagem Java.

Unidade 5: Implementando programas em Java com controle de fluxo


O objetivo desta unidade avanar na criao dos programas
em Java com a utilizao de controles de fluxo no programa.
Ser abordada em Java a estrutura condicional se seno e as
estruturas de repetio enquanto/faa e para/faa, abordadas em
Lgica de Programao.

13

prog_orient_objetos.indb 13

15/12/2011 14:00:31

Universidade do Sul de Santa Catarina

Unidade 6: Desenvolvendo programas modularizados em Java


Dando continuidade aos conceitos aprendidos em Lgica
de Programao, nesta unidade veremos como estruturar
um programa em Java para que o mesmo trabalhe de forma
modularizada, apresentando, para isso, os conceitos de
procedimento e funo.

Unidade 7: Introduo Programao Orientada a Objeto (POO)


Esta stima unidade apresenta os conceitos bsicos de
programao orientada a objetos, introduzindo a viso inicial de
classe e objeto, com a implementao de uma classe e a criao de
um objeto a partir dela.

Unidade 8: Conceitos de Orientao a Objeto


Esta unidade aprofunda os conceitos vistos na unidade anterior,
com a criao de programas com mais de um objeto. Conceitos
como mtodo construtor, mtodos modificadores e recuperadores
e encapsulamento sero abordados nesta unidade.

Unidade 9: Aplicando os conceitos de OO atravs de exemplos prticos


O objetivo desta unidade aplicar os conceitos vistos nas
unidades anteriores atravs de um exemplo prtico.

Unidade 10: Modificadores


Nesta unidade, aprenderemos os conceitos dos modificadores de
acesso public, private, protected e static e sua utilizao atravs de
exemplos prticos.

14

prog_orient_objetos.indb 14

15/12/2011 14:00:31

Programao Orientada a Objeto

Unidade 11: Objetos como atributos de outros objetos


Esta unidade tem como objetivo apresentar e exemplificar atravs
do Java o conceito de associao, ou seja, o relacionamento entre
classes.

Unidade 12: Associao na prtica


Nesta unidade, ser fixado o conceito de associao atravs de um
exemplo prtico, que aborda os conceitos trabalhados na unidade
anterior.

Unidade 13: Herana


O objetivo desta unidade abordar outro tipo de relacionamento:
o conceito de herana. Sero apresentados as caractersticas desse
tipo de relacionamento, o modificador de acesso protected e a
redefinio de mtodos em outra classe.

Unidade 14: Herana na prtica


Seguindo a mesma metodologia vista em unidades anteriores,
esta unidade apresenta de forma prtica a utilizao dos conceitos
vistos na unidade anterior.

15

prog_orient_objetos.indb 15

15/12/2011 14:00:31

Universidade do Sul de Santa Catarina

Agenda de atividades/Cronograma

Verifique com ateno o EVA, organize-se para acessar


periodicamente a sala 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 professor.
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.

Atividades obrigatrias

Demais atividades (registro pessoal)

16

prog_orient_objetos.indb 16

15/12/2011 14:00:32

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

prog_orient_objetos.indb 17

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

15/12/2011 14:00:32

Universidade do Sul de Santa Catarina

Para incio de estudo


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 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 nesta
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 definir um programa de computador.
Uma linguagem permite que um programador especifique
precisamente sobre quais dados um computador vai atuar, como
esses 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 sequncia
de nmeros correspondente a uma
sequncia de instrues. Ex. decorar
sequncias 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.

18

prog_orient_objetos.indb 18

15/12/2011 14:00:32

Programao Orientada a Objeto

Cdigo de mquina consiste de uma sequncia de


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

Linguagens de programao so classificadas 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 nessa linguagem
representa uma instruo executada pelo microcomputador. A
vantagem desse 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 pode ser
executado um nmero indefinido de vezes sem que seja necessria
nova compilao. Linguagens como Pascal e C so compiladas.

Unidade 1

prog_orient_objetos.indb 19

19

15/12/2011 14:00:32

Universidade do Sul de Santa Catarina

Se o cdigo do programa traduzido medida 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 especfica
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
eletroeletrnicos est em constante evoluo, para cada novo
liquidificador 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 recompilado para o novo processador.

20

prog_orient_objetos.indb 20

15/12/2011 14:00:33

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 confivel tambm, pois quando ocorre alguma falha
em um aparelho eletroeletrnico, 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 definir 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 especificao 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 21

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

21

15/12/2011 14:00:33

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 ser 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.
E, como dito anteriormente, Java ao mesmo tempo uma linguagem
de programao e uma plataforma, conforme voc ver a seguir.
22

prog_orient_objetos.indb 22

15/12/2011 14:00:33

Programao Orientada a Objeto

Seo 3 Linguagem 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;

orientada a objetos;

Voc j aprendeu o que


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

interpretada;

multiplataforma;
segura.

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

Application Programming
Interface ou Interface
de Programao de
Aplicativos.

Orientada a Objetos
Baseada no paradigma da Orientao a Objetos, cujo conceito
essencial encapsular em um bloco de memria de variveis e
mtodos de manipulao dessas variveis. A linguagem permite
a modularizao das aplicaes, reuso de cdigo e manuteno
simples do cdigo j implementado.

A partir da unidade 7, voc


aprender os conceitos do
paradigma orientado a
objetos.

Interpretada
Linguagens de programao podem ser tanto compiladas como
interpretadas.

Unidade 1

prog_orient_objetos.indb 23

23

15/12/2011 14:00:33

Universidade do Sul de Santa Catarina

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 especfico de processador ou de
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 esses s existem em cdigo fonte.
A linguagem Java tanto compilada como
interpretada.

Bytecode o termo dado ao


cdigo binrio (executvel)
gerado pela compilao de um
cdigo fonte em Java.

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


compilado, gerando um arquivo binrio (com cdigo binrio).
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) especfico de uma plataforma ou sistema operacional.

24

prog_orient_objetos.indb 24

15/12/2011 14:00:33

Programao Orientada a Objeto

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

Figura 1.1 - Compilao

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.

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.

Unidade 1

prog_orient_objetos.indb 25

Cdigo executvel e cdigo


binrio so sinnimos.

Bibliotecas so rotinas,
pequenos programas
prontos.

25

15/12/2011 14:00:35

Universidade do Sul de Santa Catarina

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:

Figura 1.2 - Processo de compilao.

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


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

26

prog_orient_objetos.indb 26

15/12/2011 14:00:35

Programao Orientada a Objeto

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.
A plataforma Java tem dois componentes:

Mquina virtual - Java Virtual Machine ( JVM )

API Java - Java Application Programming Interface

Unidade 1

prog_orient_objetos.indb 27

Voc j aprendeu um pouco


sobre o que uma JVM no
tpico Multiplataforma da
Seo 3.

27

15/12/2011 14:00:35

Universidade do Sul de Santa Catarina

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
grficas (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 figura mostra um programa rodando sob a plataforma


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

Seo 5 Tipos de aplicaes Java

Figura 1.3 - Tipos de aplicaes Java

28

prog_orient_objetos.indb 28

15/12/2011 14:00:36

Programao Orientada a Objeto

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 figura 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 define, seguido da
extenso .java.
Arquivo MeuApplication.java
public class MeuApplication {
public static void main (String[] args) {
System.out.println( Este meu application! );
}
}

Aplicao janela so aplicaes Java que so


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

Unidade 1

prog_orient_objetos.indb 29

29

15/12/2011 14:00:36

Universidade do Sul de Santa Catarina

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, grficos, jogos,
menus de navegao, etc.
Ao desenvolver um applet, pode-se aproveitar recursos extras
oriundos do prprio browser (uma barra de status, por exemplo).
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 nem 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.

30

prog_orient_objetos.indb 30

15/12/2011 14:00:36

Programao Orientada a Objeto

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

Unidade 1

prog_orient_objetos.indb 31

31

15/12/2011 14:00:36

Universidade do Sul de Santa Catarina

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

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.

32

prog_orient_objetos.indb 32

15/12/2011 14:00:36

Programao Orientada a Objeto

Saiba mais
SILVA FILHO, ANTONIO MENDES DA, Introduo A
Programao Orientada A Objetos, Ed. Campus, 2010

Unidade 1

prog_orient_objetos.indb 33

33

15/12/2011 14:00:36

prog_orient_objetos.indb 34

15/12/2011 14:00:36

unidade 2

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

prog_orient_objetos.indb 35

Seo 1

Instalando o J2SE Development Kit (JDK)

Seo 2

Editando, Compilando e Executando o primeiro


programa em Java

15/12/2011 14:00:37

Universidade do Sul de Santa Catarina

Para incio de estudo


Depois de conhecer um pouco da histria e das 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
computador 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 desta unidade. aqui que vai, finalmente,
colocar os conhecimentos em prtica e ver seu primeiro programa
funcionando.

Seo 1 - Instalando o J2SE Development Kit (JDK)


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

36

prog_orient_objetos.indb 36

15/12/2011 14:00:37

Programao Orientada a Objeto

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 6.
Aps a escolha da plataforma, precisamos instalar e configurar
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),
e API Java que so necessrios para o desenvolvimento dos
programas na plataforma J2SE.
Vamos mostrar passo a passo como fazer o download do JDK.

O JDK da verso 6 pode ser


baixado (fazer download)
do endereo:
http://java.sun.com/javase/
downloads/index.jsp.

1. Acesse o endereo http://java.sun.com/javase/downloads/


index.jsp e escolha a opo Java SE Development Kit
(JDK) 6 Update 11. Como as mudanas de verso do
Java so frequentes, possvel estar disponvel no site
uma verso mais recente, ou um update mais atualizado.
Verses posteriores do Java podem ser utilizadas sem
problemas para o andamento da disciplina.
2. Aps clicar em download, escolha a plataforma de
acordo com o seu sistema operacional, marque a caixa
I agree to the Java SE Development Kit 6 License
Agreement e clique a seguir em Continue.
3. Na nova janela que surgir, clique no link jdk-6u11windows-i586-p.exe para iniciar o download do arquivo.
Novamente cabe lembrar aqui que, devido s frequentes
atualizaes, o processo de download do arquivo no site
da Sun pode ser ligeiramente alterado.
4. 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 73 Mb.
Convm lembrar que o conjunto de softwares
contidos no J2SDK gratuito (free), ou seja, no
precisamos compr-los para instalar no nosso
computador.

Unidade 2

prog_orient_objetos.indb 37

37

15/12/2011 14:00:37

Universidade do Sul de Santa Catarina

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 que?


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 configurar essas variveis de ambiente no Windows, voc
deve atentar para a verso que est utilizando, pois em cada
verso a configurao das variveis de ambiente feita de uma
maneira diferente.

Configurando variveis de ambiente no Windows 2000, XP e


Vista
Voc deve configurar as variveis de ambiente seguindo os
seguintes passos:
1) Clique com o boto direito no cone Meu Computador e
escolha a opo Propriedades.
Outra opo ir ao menu Iniciar-> Configuraes->Painel de
controle-> Sistema-> Avanado-> Variveis de ambiente.
A seguinte tela ir aparecer (caso o seu sistema operacional seja
o Windows Vista, haver pequenas mudanas nas abas da janela
abaixo. No entanto a aba necessria para configurao a mesma,
ou seja, a aba Avanado):

38

prog_orient_objetos.indb 38

15/12/2011 14:00:37

Programao Orientada a Objeto

Figura 2.1 - Propriedades do sistema

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.

Unidade 2

prog_orient_objetos.indb 39

39

15/12/2011 14:00:37

Universidade do Sul de Santa Catarina

Figura 2.2 - Variveis de ambiente

No quadro variveis do sistema, procure a varivel


CLASSPATH. Caso ela exista, clique no boto Editar.

Figura 2.3 - Editar varivel de sistemas (as)

O campo Valor da varivel provavelmente estar preenchido;


portanto, posicione o cursor no final 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).
40

prog_orient_objetos.indb 40

15/12/2011 14:00:37

Programao Orientada a Objeto

Aps configurar a varivel CLASSPATH, vamos


configurar a varivel de ambiente PATH.

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.

Na prxima seo, voc


entender a importncia
dessa varivel ser
configurada.

Figura 2.4 - Editar variveis de sistema (b)

O campo Valor da varivel provavelmente estar preenchido;


portanto posicione o cursor no final 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.6.0_11\bin (nesse caso o JDK est instalado no
diretrio raiz)
;C:\Arquivos de programas\Java\jdk1.6.0_11\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).

Unidade 2

prog_orient_objetos.indb 41

41

15/12/2011 14:00:37

Universidade do Sul de Santa Catarina

Configurando 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.6.0_11\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 final 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.

Configurando variveis de ambiente no Linux


No sistema operacional Linux, a configurao 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

42

prog_orient_objetos.indb 42

15/12/2011 14:00:37

Programao Orientada a Objeto

Seo 2 - Editando, compilando e executando o primeiro


programa em Java
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).

Um mtodo pode ser


uma funo ou um
procedimento.

DICA!!
Releia o item Multiplataforma, da unidade anterior,
para entender melhor esta seo.

Desenvolver um programa em Java consiste basicamente de trs


etapas.

1) Edio
Desenvolvimento do programa de acordo com a sintaxe da
linguagem, utilizando um software editor de texto como o Bloco
de Notas do Windows ou uma IDE (Integrated Development
Environment - ambiente de desenvolvimento integrado) como o
JCreator ou JBuilder. O arquivo contendo o programa deve ser
salvo com a extenso .java.

2) Compilao

Uma IDE um software


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

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.
Unidade 2

prog_orient_objetos.indb 43

43

15/12/2011 14:00:37

Universidade do Sul de Santa Catarina

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

java o nome do software que


representa a JVM instalada no
computador.

A figura abaixo ilustra essas etapas:

Figura 2.5 - Etapas de compilao

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


parte prtica.

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.

44

prog_orient_objetos.indb 44

15/12/2011 14:00:38

Programao Orientada a Objeto

Execute o Bloco de Notas (Notepad) e 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.
Certifique-se de 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 identificar 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.
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.

Unidade 2

prog_orient_objetos.indb 45

45

15/12/2011 14:00:38

Universidade do Sul de Santa Catarina

Voc deve repetir essa sequncia 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
Ao executar o programa java voc
est acionando a mquina virtual
de java para que ela interprete o
bytecode gerado na etapa anterior.

Voc deve ter recebido como resposta a frase Alo Mundo !. Isso
significa que tudo est certo e voc acabou de criar seu primeiro
programa em Java.
ATENO !!
No se preocupe se voc no conseguir executar os
passos descritos acima nesse momento. Na unidade 4,
voc aprender com mais detalhes a editar, compilar e
executar um programa.
A inteno agora foi s dar a voc aps a instalao do
J2SDK uma noo de como desenvolver um programa
em Java.

46

prog_orient_objetos.indb 46

15/12/2011 14:00:38

Programao Orientada a Objeto

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

Unidade 2

prog_orient_objetos.indb 47

47

15/12/2011 14:00:38

Universidade do Sul de Santa Catarina

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

48

prog_orient_objetos.indb 48

15/12/2011 14:00:38

Programao Orientada a Objeto

Saiba mais
BARNES, DAVID, Programao Orientada A Objetos Com
Java, PRENTICE HALL BRASIL, 2009.

Unidade 2

prog_orient_objetos.indb 49

49

15/12/2011 14:00:38

Universidade do Sul de Santa Catarina

50

prog_orient_objetos.indb 50

15/12/2011 14:00:38

unidade 3

Sintaxe bsica da
linguagem Java

Objetivos de aprendizagem

Conhecer a sintaxe bsica da linguagem.

Sees de estudo
Seo 1

prog_orient_objetos.indb 51

Sintaxe bsica da linguagem Java

15/12/2011 14:00:38

Universidade do Sul de Santa Catarina

Para incio de estudo


Nesta 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 essas 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 a 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


Nesta 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
grfica (tela com janela, botes, etc), inicialmente, voc aprender
apenas recursos para criar aplicativos ou programas simples
dentro da janela do MS-DOS.

52

prog_orient_objetos.indb 52

15/12/2011 14:00:38

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 servem para indicar o que
o programa faz. Os comentrios em Java podem ser de dois tipos:
// (duas barras)
ou os sinais
/* (incio da marcao)
*/ (fim da marcao)

// (duas barras)
Utilizam-se duas barras ( // ) em qualquer posio da linha.
Tudo o que aparecer direita das duas barras ser ignorado pelo
compilador.
A=A+1; // incremento da varivel A

Smbolo de atribuio
O que significa essa instruo?
Uma varivel de memria chamada A est recebendo o valor
dela mesma acrescido de 1.
/* e */

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 fim 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 53

53

15/12/2011 14:00:38

Universidade do Sul de Santa Catarina

Tipos de dados em Java


Ao desenvolver qualquer programa, frequentemente voc
necessita declarar variveis de memria. Para declarar uma varivel
de memria, voc deve especificar 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.

* 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.
** Diz respeito faixa de valores
que podero ser armazenados em
variveis desse tipo.

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

Quadro 3.1 - Tipos de dados em Java

Na maioria das ocasies, declarar uma varivel de memria com


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

Tipo

Tamanho

Faixa de Valores

float

4 bytes

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

double

8 bytes

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

Quadro 3.2 - Tipos numricos que representam valores com ponto flutuante.

54

prog_orient_objetos.indb 54

15/12/2011 14:00:38

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.

Legenda 3.3 - tipo caracter

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.

Quadro 3.4 - Tipo lgico ou booleano

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 de que voc


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

Quadro 3.5 - Declarao variveis de memria em java

Unidade 3

prog_orient_objetos.indb 55

55

15/12/2011 14:00:38

Universidade do Sul de Santa Catarina

Observe no quadro acima, a forma de declarar variveis de


memria em Java em relao maneira como voc declarava em
pseudocdigo. O tipo deve sempre comear com letra minscula
e deve vir antes do nome da varivel.
A primeira varivel na tabela do tipo int (numrico inteiro) e
se chama a. Isso significa que foi alocado um espao na memria
com o nome (identificador) 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 sequncia 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*/

Definindo constantes em Java


Voc pode definir constantes em Java utilizando a palavra
reservada final. Essa palavra indica que voc definiu o valor da
uma varivel e que esse valor no pode ser modificado.
final double TEMPERATURA = 25.4;

Case sensitive significa que faz


diferena utilizar letras maisculas e
minsculas.

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.

56

prog_orient_objetos.indb 56

15/12/2011 14:00:38

Programao Orientada a Objeto

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 flutuante (com vrgula) em caso contrrio.
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
verificar a igualdade entre dois valores, usamos o sinal = = (dois
sinais de igual). O operador usado para verificar a diferena (no
igual) o !=.
Temos ainda os sinais de maior (>), menor (<), maior ou igual
(>=), menor ou igual (<=).

Unidade 3

prog_orient_objetos.indb 57

57

15/12/2011 14:00:39

Universidade do Sul de Santa Catarina

Veja a tabela abaixo:


Operador Relacional

Significado

==

Igualdade

!=

Diferena

<

Menor que

>

Maior que

<=

Menor ou igual a

>=

Maior ou igual

Quadro 3.6 - Operadores relacionais e booleanos em java.

Veja a tabela dos operadores lgicos:


Operador Lgico

Significado

&&

||

OU

NO

Quadro 3.7 - Operadores lgicos

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 sequncia de caracteres, sejam eles letras ou nmeros.
String e = ; // String vazia. Note as aspas duplas.
String oi = Bom dia;

58

prog_orient_objetos.indb 58

15/12/2011 14:00:39

Programao Orientada a Objeto

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

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

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:

Esse conceito ser


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

a.equals(b)

ou
a.equalsIgnoreCase(b)

Ou seja, o que est na varivel String a igual ao que est 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.
Unidade 3

prog_orient_objetos.indb 59

59

15/12/2011 14:00:39

Universidade do Sul de Santa Catarina

Declarando vetores e matrizes em Java


Voc aprendeu a trabalhar com
vetores e matrizes em Lgica de
Programao II, lembra?

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).
Um vetor pode ser definido 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

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 definir vetores de vrias dimenses. Com duas


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

Foi criada uma matriz de 5 linhas por 6 colunas.


60

prog_orient_objetos.indb 60

15/12/2011 14:00:39

Programao Orientada a Objeto

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


dessa matriz?

Lembre-se de 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).

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 ficar 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

Unidade 3

prog_orient_objetos.indb 61

61

15/12/2011 14:00:39

Universidade do Sul de Santa Catarina

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.
showInputDialog( ) para programar todas as entradas de dados.
Essa instruo faz com que aparea uma janelinha ou caixa de
dilogo (figura 3.1) com um campo para o usurio digitar o dado.

Figura 3.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 que 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), consequentemente, 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.
62

prog_orient_objetos.indb 62

15/12/2011 14:00:39

Programao Orientada a Objeto

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 (figura
3.2) com a palavra, frase programada entre as (aspas) seguido
do contedo da varivel de memria (se existir).

Figura 3.2 Tela de sada de dados

Entre as aspas da instruo deve estar o texto fixo 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 de 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

Unidade 3

prog_orient_objetos.indb 63

63

15/12/2011 14:00:39

Universidade do Sul de Santa Catarina

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). 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). Desse 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.

64

prog_orient_objetos.indb 64

15/12/2011 14:00:39

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). Desse modo,
NESSE CASO especificamente, 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 65

65

15/12/2011 14:00:39

Universidade do Sul de Santa Catarina

Sntese
Vamos revisar as principais instrues aprendidas nesta unidade:

Instruo de Entrada de Dados em Java


JOptionPane.showInputDialog( );

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


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

Quadro 3.8 - Instrues de converso de ripos de dados.

66

prog_orient_objetos.indb 66

15/12/2011 14:00:39

Programao Orientada a Objeto

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

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, C: numrico
A5
B 6
C A+B
Escreva C;

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


a idade dela. Logo aps, escreva o nome dessa pessoa e a idade.

Unidade 3

prog_orient_objetos.indb 67

67

15/12/2011 14:00:39

Universidade do Sul de Santa Catarina

Saiba mais
FOWLER, Martin; SCOTT, Kendall. UML essencial: um
breve guia para a linguagem-padro de modelagem de objetos.
Segunda edio. Porto Alegre: Bookman, 2000.

68

prog_orient_objetos.indb 68

15/12/2011 14:00:39

unidade 4

Implementando os primeiros
programas em Java
Objetivos de aprendizagem

Entender as etapas necessrias para o desenvolvimento


de um programa.

Implementar programas em Java sem controle de fluxo.

Sees de estudo
Seo 1

prog_orient_objetos.indb 69

Implementando os primeiros programas em Java

15/12/2011 14:00:40

Universidade do Sul de Santa Catarina

Para incio de estudo


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 as orientaes desta unidade. Vamos desenvolver
programas em Java sem controle de fluxo, com fluxo sequencial,
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 fluxo (se enquanto para); sero
programas com um fluxo sequencial (do incio ao fim).
Porm, antes de seguir no estudo desta 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.

70

prog_orient_objetos.indb 70

15/12/2011 14:00:40

Programao Orientada a Objeto

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

Para verificar se ele est instalado, abra o Windows


Explorer e procure por alguma pasta chamada jdk1.5...
Para verificar se ele est configurado, 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....., significa que o
SDK no est devidamente configurado. Para isso, volte
seo 1 da unidade 2 Instalando o J2SE que explica
passo a passo como instalar e configurar o J2SE.

Os trs pontinhos no final


significam 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 autoavaliao 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.
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.

Unidade 4

prog_orient_objetos.indb 71

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.

71

15/12/2011 14:00:40

Universidade do Sul de Santa Catarina

PSEUDOCDIGO
Incio
NOME, ENDERECO, CIDADE, ESTADO, CEP,
DATANASC: literal
GRAUESC, CURSO: literal
RG: numrico
Leia NOME
Leia ENDERECO
Leia CIDADE
Leia ESTADO
Leia CEP
Leia RG
Leia DATANASC
Leia GRAUESC
Leia CURSO
Escreva Nome, NOME
Escreva Endereo, ENDERECO
Escreva Cidade, CIDADE
Escreva Estado, ESTADO
Escreva CEP, CEP
Escreva RG, RG
Escreva Data de Nascimento, DATANASC
Escreva Grau de Escolaridade, GRAUESC
Escreva Curso, CURSO
Fim
Quadro 4.1 - Pseudocdigo

72

prog_orient_objetos.indb 72

15/12/2011 14:00:40

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

Quadro 4.2 - java

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.

Unidade 4

prog_orient_objetos.indb 73

73

15/12/2011 14:00:40

Universidade do Sul de Santa Catarina

Vamos nos referenciar classe como


class daqui para a frente.

Voc aprendeu funes e


procedimento em Lgica II.

Ns iremos utilizar essa instruo


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

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
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 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 (figura 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.

74

prog_orient_objetos.indb 74

15/12/2011 14:00:40

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 (figura 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 fique pendurado na
janela do MS-DOS.

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

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

Unidade 4

prog_orient_objetos.indb 75

Ns iremos utilizar essa


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

75

15/12/2011 14:00:40

Universidade do Sul de Santa Catarina

Figura 4.1 Tela de Entrada de Dados

Figura 4.2 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.

76

prog_orient_objetos.indb 76

15/12/2011 14:00:40

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

Quadro 4.3 - Reviso de comandos bsicos do MS-DOS.

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 se esquea
de digitar o nome da classe seguido de .java. Preste
ateno para digitar o nome da class da mesma
maneira que voc a salvou.

Unidade 4

prog_orient_objetos.indb 77

77

15/12/2011 14:00:40

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 sero apresentados, na tela, a quantidade de erros encontrados,
a linha onde cada erro ocorreu dentro do programa e uma breve
descrio do mesmo.
Veja as figuras abaixo:

Figura 4.3 Comando de compilao

Figura 4.4 Tela com os erros de compilao

Como voc pode notar na figura, 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
identifica a linha em que ocorreu o erro (linha 5) e, logo em
seguida, uma breve descrio do erro (cannot find symbol) que,
nesse caso, quer dizer que a compilao no reconheceu algum
comando, palavra (que ele chama de symbol-simbolo) na linha 5.

78

prog_orient_objetos.indb 78

15/12/2011 14:00:40

Programao Orientada a Objeto

Na segunda linha, ele identifica 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 identifica em qual class esse erro ocorreu.
Nesse caso, foi na class DadosProfessor. Logo embaixo, ele
identifica 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 4.5 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 contm 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
existem dois arquivos l: DadosProfessor.java e DadosProfessor.class.

Unidade 4

prog_orient_objetos.indb 79

Dica: Leia novamente a


Seo 1 da Unidade 1, que
explica a diferena entre
linguagens interpretadas e
compiladas.

79

15/12/2011 14:00:41

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 :
java <nome da class>

Observe que, ao executar o comando java, 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 sequncia de execuo seguir o


formato das seguintes telas:

Figura 4.6 Tela de entrada do Nome

Figura 4.7 Tela de entrada do Endereo

80

prog_orient_objetos.indb 80

15/12/2011 14:00:41

Programao Orientada a Objeto

Figura 4.8 Tela de entrada da Cidade

Figura 4.9 Tela de entrada do Estado

Figura 4.10 Tela de entrada do CEP

Figura 4.11 Tela de entrada do RG

Figura 4.12 Tela de entrada da Data de Nascimento


Unidade 4

prog_orient_objetos.indb 81

81

15/12/2011 14:00:41

Universidade do Sul de Santa Catarina

Figura 4.13 Tela de entrada do Grau de Escolaridade

Figura 4.14 Tela de entrada do Curso

Figura 4.15 Tela de sada do Nome

Figura 4.16 Tela de sada do Endereo

Figura 4.17 Tela de sada da Cidade

Figura 4.18 Tela de sada do Estado

Figura 4.19 Tela de sada do CEP

Figura 4.20 Tela de sada do RG

82

prog_orient_objetos.indb 82

15/12/2011 14:00:42

Programao Orientada a Objeto

Figura 4.21 Tela de sada da Data

Figura 4.22 Tela de sada do Grau Esc.

Figura 4.23 Tela de sada do Curso

Unidade 4

prog_orient_objetos.indb 83

83

15/12/2011 14:00:42

Universidade do Sul de Santa Catarina

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

84

prog_orient_objetos.indb 84

15/12/2011 14:00:42

Programao Orientada a Objeto

Atividades de autoavaliao
1) Desenvolver em Java TODOS os exerccios de autoavaliao da seo 1,
da Unidade 5, da disciplina de Lgica de Programao I.

Unidade 4

prog_orient_objetos.indb 85

85

15/12/2011 14:00:42

Universidade do Sul de Santa Catarina

Saiba mais
DEITEL, H.M.; DEITEL, P.J. Java - Como programar. Sexta
edio. Pearson, 2005.
FURGERI, Sergio. Java 2 Ensino Didtico. So Paulo: rica,
2002.

86

prog_orient_objetos.indb 86

15/12/2011 14:00:42

unidade 5

Implementando programas em
Java com controle de fluxo
Objetivos de aprendizagem

Implementar programas em Java com Controle de Fluxo


(condicional e repetio).

Sees de estudo
Seo 1

prog_orient_objetos.indb 87

Estruturas de Controle de Fluxo em Java

15/12/2011 14:00:42

Universidade do Sul de Santa Catarina

Para incio de estudo


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

Seo 1 Estruturas de controle de fluxo em Java


Vamos apresentar aqui as estruturas que nos permitem controlar
o fluxo de execuo de programa (estruturas para processamento
condicional e de repetio) em Java, mas, antes, temos que
aprender a delimitar blocos e a 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
}
Quadro 5.1 - Exemplo de bloco

88

prog_orient_objetos.indb 88

15/12/2011 14:00:42

Programao Orientada a Objeto

Assim, permitida a declarao de variveis com um mesmo


nome, desde que elas no estejam compartilhando o mesmo
escopo. A definio 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.

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
Quadro 5.2 - sintaxe se - seno

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 fim
desse bloco de instrues
com { (abre chave) e }
(fecha chave)

Estrutura condicional simples


se numero > 20 ento

numero numero/2
fim-se
Quadro 5.3 - sintaxe estrutura condicional simples (a)

Em Java a sintaxe dessa estrutura condicional simples a


seguinte:
if (numero > 20)

numero = numero / 2;
Quadro 5.4 - Sintaxe estrutura condicional simples (b)

Unidade 5

prog_orient_objetos.indb 89

89

15/12/2011 14:00:42

Universidade do Sul de Santa Catarina

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.

Estrutura condicional composta


se numero > 20 ento

numero numero/27
seno

numero numero/4
fim-se
Quadro 5.5 - Estrutura condicional complexa (a)

Em Java, a sintaxe dessa estrutura condicional composta a


seguinte:
if (numero > 20)

numero = numero / 2;
else

numero = numero / 4;
Quadro 5.6 - Estrutura condicional composta (b)

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.

90

prog_orient_objetos.indb 90

15/12/2011 14:00:42

Programao Orientada a Objeto

Quando isso ser necessrio?

Observe o mesmo exemplo estendido:


if (numero > 20){

numero = numero / 2;

valor=valor + numero;
}else

numero = numero / 4;
Quadro 5.7 - Exemplo estendido

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


Quando existirem dentro de um if ou dentro de um else existir
em mais de uma instruo, voc deve colocar essas instrues
dentro de um bloco delimitado por { } (abre e fecha chave).
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
Quadro 5.8 - Exemplo algortimo completo em pseudocdigo

Unidade 5

prog_orient_objetos.indb 91

91

15/12/2011 14:00:42

Universidade do Sul de Santa Catarina

Esse algoritmo na linguagem Java fica 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 }
Quadro 5.9 - Algortimo na linguagem Java

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

92

prog_orient_objetos.indb 92

15/12/2011 14:00:43

Programao Orientada a Objeto

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
janelinha ou caixa de dilogo, na tela, com um campo
para o usurio do programa digitar a primeira nota.
Lembre-se de 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 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
varivel MEDIA.
Linha 9: comeo da instruo if que testar as trs
possibilidades da varivel MEDIA, se a varivel
MEDIA for maior que 7.

Unidade 5

prog_orient_objetos.indb 93

93

15/12/2011 14:00:43

Universidade do Sul de Santa Catarina

Linha 10: executada somente essa instruo que escreve


na tela a frase: A mdia maior que 7.0. A instruo
de escrita ou de 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
verificao de MEDIA

Linha 16: instruo do mtodo main }.

Linha 17: instruo de fim da class }.

Estrutura de controle para processamento com repetio


1. enquanto/faa/fim-enquanto
Em Java, a estrutura enquanto/faa/fim-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 fim-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 so executados. Ao final da instruo ou bloco, o fluxo
de execuo do programa volta (loop) e a expresso avaliada
novamente. Se for necessria mais de uma instruo, ser preciso
colocar o bloco das instrues entre { } .

94

prog_orient_objetos.indb 94

15/12/2011 14:00:43

Programao Orientada a Objeto

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
fim-enquanto
Fim
Quadro 5.10 - Exemplo de programa/estrutura de repetio

Em Java a implementao desse programa que utiliza estrutura


de repetio a seguinte:
1
import javax.swing.*;
2 class Alunos{
3 public static void main(String args[])
4 {
5 String NOME;
6 int NUMALUNOS;
7 NUMALUNOS = 1;
8 while (NUMALUNOS <= 100) {
9
NOME=JOptionPane.showInputDialog(Entre com o Nome);
10
tionPane.showMessageDialog(null,Aluno cadastrado+NOME);
11
ncrementa-se a varivel NUMALUNOS a cada repetio
12
ALUNOS = NUMALUNOS + 1;
13 }
14 System.exit(0);
15 }
16 }
Quadro 5.11 - Exemplo em Java

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.
Unidade 5

prog_orient_objetos.indb 95

95

15/12/2011 14:00:43

Universidade do Sul de Santa Catarina

Dentro da instruo while, existem quatro instrues, ou seja,


existem mais de uma instruo a ser repetida 100 vezes; portanto,
essas instrues devem estar entre { }, que delimitam o incio e o
fim de bloco.
Vamos analisar linha a linha:

Lembre-se de que class sinnimo


de programa em Java.

Linha 1: Esta instruo serve para informar, ao


compilador, o caminho ou diretrio onde algumas
class, usadas no programa, encontram-se.
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 incio
poderia estar no final da linha 3.
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: fim do bloco de instrues da estrutura de
repetio.

96

prog_orient_objetos.indb 96

15/12/2011 14:00:43

Programao Orientada a Objeto

Linha 14: instruo de fim do mtodo main }.

Linha 15: instruo de fim do programa }.

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

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 devem
ser executados (repetidos).
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, chama=se i e inicializada
com o nmero 1.
O segundo trata da prpria condio de repetio, por exemplo,
i<=100. Isso significa que, enquanto a varivel i for menor ou
igual a 100, a instruo ou bloco ser executada. (repetido).
O terceiro trata do incremento (soma) da varivel de controle a
cada vez que uma instruo ou bloco for executada, por exemplo,
i++. Essa instruo equivale a i=i+1, ou seja, a cada vez que a
instruo ou bloco for executada, a varivel i incrementada em 1.
Vamos trabalhar com um exemplo de programa envolvendo
estrutura de repetio controlada.

Unidade 5

prog_orient_objetos.indb 97

97

15/12/2011 14:00:43

Universidade do Sul de Santa Catarina

Incio
para I de 1 at 100 passo 1 faa

leia NOME

escreva Aluno cadastrado: NOME
fim-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 }

98

prog_orient_objetos.indb 98

15/12/2011 14:00:43

Programao Orientada a Objeto

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

Unidade 5

prog_orient_objetos.indb 99

99

15/12/2011 14:00:43

Universidade do Sul de Santa Catarina

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

100

prog_orient_objetos.indb 100

15/12/2011 14:00:43

Programao Orientada a Objeto

2) Desenvolver em Java todos os exerccios de autoavaliao da Unidade


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

Unidade 5

prog_orient_objetos.indb 101

101

15/12/2011 14:00:43

Universidade do Sul de Santa Catarina

Saiba mais
GAMMA, Erich; HELM, Richard. PADRES de projeto:
solues reutilizveis de software orientado e objetos. reimp.
Porto Alegre: Bookman, 2002.

102

prog_orient_objetos.indb 102

15/12/2011 14:00:43

unidade 6

Desenvolvendo programas
modularizados em Java
Objetivos de aprendizagem

Rever o conceito de modularizao de programas.

Entender o conceito de procedimento.

Implementar programas modularizados em Java.

Sees de estudo
Seo 1

prog_orient_objetos.indb 103

Modularizao de programas em Java

15/12/2011 14:00:43

Universidade do Sul de Santa Catarina

Para incio de estudo


Voc chegou ao final das unidades relacionadas especificamente
linguagem Java nesta 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 os 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 desta 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 fica 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.
104

prog_orient_objetos.indb 104

15/12/2011 14:00:43

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, verificar 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 105

105

15/12/2011 14:00:43

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 grficos
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 contm 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 so 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

106

prog_orient_objetos.indb 106

15/12/2011 14:00:43

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 fim do mtodo main }
Linha 11: linha em branco. opcional. Recomenda-se
para o cdigo ficar mais legvel.
Linha 12: declarao da funo soma. Java no usa a
palavra function para declarar uma funo. Toda funo
comea com a palavra public seguida 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 public, 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 107

107

15/12/2011 14:00:43

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: fim da funo }.
Linha 16: fim 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 fim 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.

108

prog_orient_objetos.indb 108

15/12/2011 14:00:43

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 so passados 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 so
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 109

109

15/12/2011 14:00:44

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 fim 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 especificado no cabealho
da funo. Veja, na linha 12, que 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 especificada no lugar do tipo, ou seja, antes do
nome do procedimento.
Relembrando: Como identificar em um cdigo Java o
que funo e o que procedimento?

Olhe o cabealho de definio 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.
110

prog_orient_objetos.indb 110

15/12/2011 14:00:44

Programao Orientada a Objeto

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

Unidade 6

prog_orient_objetos.indb 111

111

15/12/2011 14:00:44

Universidade do Sul de Santa Catarina

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

112

prog_orient_objetos.indb 112

15/12/2011 14:00:44

Programao Orientada a Objeto

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

Unidade 6

prog_orient_objetos.indb 113

113

15/12/2011 14:00:44

Universidade do Sul de Santa Catarina

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 sub-rotina ser um procedimento ou uma
funo.
A formula : base expoente

114

prog_orient_objetos.indb 114

15/12/2011 14:00:44

Programao Orientada a Objeto

Saiba mais
HORSTMANN, Cay S.; CORNELL, Gary. Core Java 2. So
Paulo: Makron Books, 2004.

Unidade 6

prog_orient_objetos.indb 115

115

15/12/2011 14:00:44

prog_orient_objetos.indb 116

15/12/2011 14:00:44

unidade 7

Introduo Programao
Orientada a Objeto (POO)
Objetivos de aprendizagem

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

prog_orient_objetos.indb 117

Seo 1

Paradigma de Programao Orientada a Objeto

Seo 2

Implementando uma Classe e criando Objetos a


partir dela

15/12/2011 14:00:44

Universidade do Sul de Santa Catarina

Para incio de estudo


Nesta 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 em 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.
Nesta unidade, voc aprender um pouco da histria, e dos
objetivos da orientao a objetos. Aprender tambm dois conceitos
mais importantes da orientao a objetos: Classe e Objeto.

Seo 1 - Paradigma de Programao Orientada


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

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)

118

prog_orient_objetos.indb 118

15/12/2011 14:00:44

Programao Orientada a Objeto

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

Orientao a objeto Conceitos bsicos


O paradigma de programao orientada a objeto baseado em
alguns conceitos que definem uma forma de criar programas para
computadores.
A filosofia 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 fica 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 fica 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 119

119

15/12/2011 14:00:44

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.

120

prog_orient_objetos.indb 120

15/12/2011 14:00:45

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 Retngulo

- 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 refletir 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 ficar 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 121

121

15/12/2011 14:00:45

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 significa: Ato de
separar mentalmente um ou mais
elementos de uma totalidade
complexa (coisa, representao,
fato), os quais s mentalmente
podem subsistir fora dessa
totalidade.

Vamos aprender mais sobre representao de objetos?

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


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
possuem 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.
122

prog_orient_objetos.indb 122

15/12/2011 14:00:46

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 figura 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 frequentemente usado para descrever um


objeto com valores prprios em seus atributos. Por exemplo,
observe a figura 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 123

123

15/12/2011 14:00:46

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

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.

124

prog_orient_objetos.indb 124

15/12/2011 14:00:46

Programao Orientada a Objeto

Isso acontece porque h diferenas grandes quando pensamos no


comportamento de representaes de objetos, ou seja, objetos do
mundo do software.
Ao identificar 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 frequentemente
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 125

125

15/12/2011 14:00:46

Universidade do Sul de Santa Catarina

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

Agora voc j sabe que qualquer programa orientado a objeto


deve trabalhar com representaes de objetos que reflitam 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 identificados, 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.
126

prog_orient_objetos.indb 126

15/12/2011 14:00:46

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 especificados 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 figura, a seguir, ilustra a representao grfica das classes
do sistema de conta corrente. Na primeira parte da figura,
est o nome da classe; na parte do meio, esto os atributos e,
na parte final, est o comportamento (mtodos ou operaes).
Observe que as classes Conta e Agncia ainda no esto com
os comportamentos definidos. Faremos isso na medida em 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()

Unidade 7

prog_orient_objetos.indb 127

127

15/12/2011 14:00:46

Universidade do Sul de Santa Catarina

Um objeto uma instncia de uma classe. Essa instncia possui


valores prprios em cada atributo definido na classe. As figuras 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 (Unified Modelling Language)
ou Linguagem de Modelagem Unificada. A UML no
uma linguagem de programao, e sim uma linguagem
composta de vrios diagramas (cada qual com seu conjunto de
smbolos grficos) 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 especificar e documentar
o funcionamento do sistema. O diagrama que iremos utilizar
o Diagrama de Classes que especifica as classes do sistema e o
relacionamento entre elas.

128

prog_orient_objetos.indb 128

15/12/2011 14:00:46

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 finalizar esta 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 129

129

15/12/2011 14:00:46

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
identificada 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 identificados, j existe a
necessidade de criar a estrutura (classe) que os defina.
Nesta 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
identificao 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.

130

prog_orient_objetos.indb 130

15/12/2011 14:00:46

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
cpf=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 131

131

15/12/2011 14:00:46

Universidade do Sul de Santa Catarina

Linha 1: definio inicial da classe. Comea com a


palavra public (veremos mais adiante qual o significado
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, e a primeira
letra de cada uma fica em maiscula.

Exemplos: Aluno, Professor, FolhaPagamento.

Isso ficar mais claro no momento


da explicao da criao do objeto a
partir da Cliente.

Linhas 2 e 3: definio dos atributos definidos para a


classe. Na definio dos atributos, deve-se utilizar a
palavra private (veremos mais adiante o significado
dessa palavra), seguida 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
podem ser colocados bem no final, antes do ltimo }.
Devem comear com letra minscula.

132

prog_orient_objetos.indb 132

15/12/2011 14:00:47

Programao Orientada a Objeto

Linha 5: depois da definio do nome da classe e


dos atributos da classe, segue-se a definio dos
comportamentos, no contexto da implementao,
conhecidos como mtodos. Por enquanto, os
comportamentos ou mtodos definidos 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 especificar 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: nesta linha est o comportamento ou mtodo


chamado alteraNome( ). Esse tipo de comportamento
tpico de qualquer objeto do tipo Cliente, pois todo
o cliente pode ter seu nome alterado. No caso de um
sistema OO, quem executa esse comportamento o
prprio objeto Cliente.
Unidade 7

prog_orient_objetos.indb 133

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

133

15/12/2011 14:00:47

Universidade do Sul de Santa Catarina

A implementao desse mtodo ou comportamento


feita atravs de um procedimento (veja que o tipo
de retorno void, ou seja, essa sub-rotina 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.

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: fim 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: nesta 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.

Qualquer subrotina que retorne


algum valor chamada de funo.

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


atributo nome.

134

prog_orient_objetos.indb 134

15/12/2011 14:00:47

Programao Orientada a Objeto

Linhas 25 a 27: implementao do mtodo ou


comportamento chamado forneceEndereco( ).
Linhas 29 a 31: implementao do mtodo ou
comportamento chamado forneceCpf( ).
Linha 32: final 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 finalidade 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? Lembre-se
sempre: agora estamos falando de objetos no
contexto de um software. Voc entender isso nas
linhas seguintes.

Linha 1 public class UsaCliente{


Linha 2
public static void main(String args[]) {
Linha 3
Cliente c=new Cliente( );
Linha 4
c.alteraNome(Ana);
Linha 5
c.alteraEndereco(Rua A);
Linha 6
c.alteraCpf(1235);
Linha 7
System.out.println(c.forneceNome( ));
Linha 8
}
Linha 9 }

Unidade 7

prog_orient_objetos.indb 135

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

135

15/12/2011 14:00:47

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: definio inicial da classe. Comea com a


palavra public seguida da palavra class e seguida do
nome da classe.
Linha 2: definio do mtodo main( ). Essa definio
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 podero ser
armazenado valores desse tipo.
O mesmo acontece com a criao de um objeto. Ao criar um
objeto, precisamos dar um nome (identificao) para ele e, nesse
espao de memria que estamos declarando, s podero ser
armazenados valores correspondentes aos atributos definidos 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 refinada.
136

prog_orient_objetos.indb 136

15/12/2011 14:00:47

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 sintaxe igual a definida acima para criao de objetos.
Sempre que um objeto criado, o mtodo construtor definido
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 figura abaixo ilustra, de maneira simples, o objeto alocado na
memria e seus atributos inicializados.

Memria
nome

Objeto C

endereco
cpf

Unidade 7

prog_orient_objetos.indb 137

137

15/12/2011 14:00:47

Universidade do Sul de Santa Catarina

A partir desse momento, poder ser chamado qualquer


comportamento ou mtodo definido 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 definido 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 em 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. Lembrese de 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

138

prog_orient_objetos.indb 138

15/12/2011 14:00:47

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: fim do mtodo main().

Linha 9: fim 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 139

139

15/12/2011 14:00:47

Universidade do Sul de Santa Catarina

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

140

prog_orient_objetos.indb 140

15/12/2011 14:00:47

Programao Orientada a Objeto

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

Unidade 7

prog_orient_objetos.indb 141

141

15/12/2011 14:00:47

Universidade do Sul de Santa Catarina

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.

142

prog_orient_objetos.indb 142

15/12/2011 14:00:47

Programao Orientada a Objeto

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

Unidade 7

prog_orient_objetos.indb 143

143

15/12/2011 14:00:47

prog_orient_objetos.indb 144

15/12/2011 14:00:47

unidade 8

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

prog_orient_objetos.indb 145

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

15/12/2011 14:00:48

Universidade do Sul de Santa Catarina

Para incio de estudo


Na unidade anterior, voc aprendeu dois conceitos muito
importantes da OO: Classe e Objeto.
Nesta unidade, voc vai aprender a diferena entre referncia e
objeto, conceitos presentes no processo de criao de um objeto,
os quais precisam ser bem entendidos.
Estudar tambm como desenvolver outros programas (classes)
que utilizam mais que um objeto e a refinar a implementao
de uma classe, ou seja, a desenvolver uma classe que represente
atributos e comportamentos de um objeto de maneira mais
correta e, finalmente, 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 definidas
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 public class UsaCliente{
Linha 2
public static void main(String args[]) {
Linha 3
Cliente c=new Cliente( );
Linha 4
c.alteraNome(Ana);
Linha 5
c.alteraEndereco(Rua A);
Linha 6
c.alteraCpf(1235);
Linha 7
System.out.println(c.forneceNome( ));
Linha 8
}
Linha 9 }

146

prog_orient_objetos.indb 146

15/12/2011 14:00:48

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 figura 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 definidos na classe Cliente.
Quem faz essa alocao a palavra new. Ela responsvel por
identificar 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
definido 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 147

147

15/12/2011 14:00:48

Universidade do Sul de Santa Catarina

A figura 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

Objeto
Cliente

123x

nome
endereco

endereo 123x

cpf

As figuras abaixo ilustram o estado do objeto Cliente cuja


identificao 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 fixo 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.

148

prog_orient_objetos.indb 148

15/12/2011 14:00:48

Programao Orientada a Objeto

O estado do objeto em memria fica assim:

varivel c

Objeto
Cliente

123x

nome Ana

endereo 123x

endereco
cpf 0

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

varivel c

Objeto
Cliente

123x

nome Ana

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 149

149

15/12/2011 14:00:48

Universidade do Sul de Santa Catarina

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


isso for necessrio).
Vamos modificar 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 figura:


Linha 3: uma varivel referncia chamada c criada. A 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.

Objeto
Cliente

123x

nome
endereco

endereo 123x

cpf 0

150

prog_orient_objetos.indb 150

15/12/2011 14:00:48

Programao Orientada a Objeto

Linha 4: outra varivel referncia chamada b criada. A 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

Objeto
Cliente

123x
123x

nome

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 151

151

15/12/2011 14:00:48

Universidade do Sul de Santa Catarina

c
b

123x
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.

152

prog_orient_objetos.indb 152

15/12/2011 14:00:48

Programao Orientada a Objeto

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

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

Vamos chamar essa classe de UsaCliente2.java.


Logo abaixo est a implementao dessa classe.
Linha 1 import javax.swing.*;
Linha 2 public class UsaCliente2{
Linha 3 public static void main(String args[]) {
Linha 4

Cliente cliente1=new Cliente( );

Linha 5

Cliente cliente2=new Cliente( );

Linha 6

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

Linha 7

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

Linha 8

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

Linha 9

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

Linha 10

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

Linha 11

cliente2.alteraCpf(1235);

Linha 12

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

Linha 13

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

Linha 14 }
Linha 15 }

Unidade 8

prog_orient_objetos.indb 153

153

15/12/2011 14:00:48

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 grfica desses dois objetos em memria


ilustrada na figura abaixo:
Cliente 1

123x

Cliente 2

124x
nome Ana

Objeto

endereco Rua A

endereo 123x

cpf 4455
nome Joo

Objeto

endereco Rua J

endereo 124x

cpf 1235

154

prog_orient_objetos.indb 154

15/12/2011 14:00:48

Programao Orientada a Objeto

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


do que uma rea de memria que armazena valores para
atributos definidos 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 - Refinando 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
especificamente onde a classe Cliente foi implementada.
O primeiro conceito 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 definido na classe desse
objeto sempre automaticamente chamado, esse mtodo
designado de construtor.
Unidade 8

prog_orient_objetos.indb 155

155

15/12/2011 14:00:48

Universidade do Sul de Santa Catarina

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


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

Cuidar letras maisculas e


minsculas. Se a classe se 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 significa 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, diz-se que o mtodo construtor foi


sobrecarregado.
156

prog_orient_objetos.indb 156

15/12/2011 14:00:48

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

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.

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 implementao
do mtodo acima ou na classe Cliente. Nesse momento, o objeto
representado em memria possui o seguinte estado:
Unidade 8

prog_orient_objetos.indb 157

157

15/12/2011 14:00:48

Universidade do Sul de Santa Catarina

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 ( ).
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.
Isso se chama passagem de
parmetros em sub-rotinas (aqui
conhecida como mtodo) e voc viu
isso em Lgica de Programao II.

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:

158

prog_orient_objetos.indb 158

15/12/2011 14:00:49

Programao Orientada a Objeto

Cliente 1

123x

Cliente 2

124x

Objeto
Cliente

Objeto
Cliente

nome

endereo 123x

endereco
cpf 0
nome Carlos

endereo 124x

endereco Rua C
cpf 123552244

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 modificados 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 especificado na classe,
um construtor padro chamado automaticamente e inicializa
atributos de tipo primitivos(int,double,etc.) com 0, atributos do
tipo boolean para false e null para atributos do tipo objeto.
Outro conceito importante que vamos detalhar o de mtodos
modificadores (set) e recuperadores (get) de uma classe.

Unidade 8

prog_orient_objetos.indb 159

Veremos o que um
atributo do tipo objeto
mais adiante.

159

15/12/2011 14:00:49

Universidade do Sul de Santa Catarina

Mtodos modificadores(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 ficar 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 significado e impacto dessa palavra
nos atributos de uma classe mais tarde; por enquanto suficiente
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.
160

prog_orient_objetos.indb 160

15/12/2011 14:00:49

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


incio 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:

Note que o que muda o


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

public String getNome( ){



return nome;
}

Unidade 8

prog_orient_objetos.indb 161

161

15/12/2011 14:00:49

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 modificadores porque


modificam 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 ficar 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 }

162

prog_orient_objetos.indb 162

15/12/2011 14:00:49

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 163

163

15/12/2011 14:00:49

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


definido com a palavra public e todo o atributo com a palavra
private.
Para tornar um mtodo pblico preciso usar a palavra public na
definio do mtodo.
Isso significa 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 definio 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 refletido 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 especificamente na linha que define 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.

164

prog_orient_objetos.indb 164

15/12/2011 14:00:49

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

Unidade 8

prog_orient_objetos.indb 165

165

15/12/2011 14:00:49

Universidade do Sul de Santa Catarina

Sntese
Nesta unidade, voc aprendeu a diferena entre dois termos
usados na criao de um objeto. O termo referncia e o termo
objeto. Referncia o endereo fsico de um objeto em memria.
Essa referncia aponta para uma determinada rea de memria
que chamada de objeto.
Aprendeu a criar programas que envolviam a criao de mais de
um objeto e tambm o conceito muito importante da OO que o
Encapsulamento.

166

prog_orient_objetos.indb 166

15/12/2011 14:00:49

Programao Orientada a Objeto

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

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?

Unidade 8

prog_orient_objetos.indb 167

167

15/12/2011 14:00:49

Universidade do Sul de Santa Catarina

Saiba mais
TAFNER, Malcon Anderson; CORREIA, Carlos H. Anlise
orientada a objetos. Florianpolis: Visual Books, 2001.

168

prog_orient_objetos.indb 168

15/12/2011 14:00:49

unidade 9

Aplicando os conceitos de OO
atravs de exemplos prticos
Objetivos de aprendizagem

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

prog_orient_objetos.indb 169

Seo 1

Colocando em Prtica os conceitos de OO

Seo 2

Mtodo sobrecarregado

15/12/2011 14:00:49

Universidade do Sul de Santa Catarina

Para incio de estudo


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, modificador
(set) e recuperador (get).
Nesta 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,
finalmente, criar, a partir dessa classe, o(s) objetos(s) para
solucionar o problema.
Tudo isso ser feito colocando a mo na massa, ou seja,
codificando (programando) na linguagem Java.Vamos comear?
Ento, bom estudo!

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

prog_orient_objetos.indb 170

15/12/2011 14:00:49

Programao Orientada a Objeto

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 confira!)
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 de 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 comportamentos no mundo
real (exemplos foram listados acima).
Mas ser que nos interessam todos os atributos e
comportamentos desses objetos no contexto de
um sistema (software) orientado a objetos? Muito
provavelmente no!

Unidade 9

prog_orient_objetos.indb 171

171

15/12/2011 14:00:49

Universidade do Sul de Santa Catarina

No nosso sistema de cadastro de funcionrios, no interessam


atributos do tipo cor do cabelo e comportamentos 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 definido, deve-se ter um comportamento ou


mtodo para armazenar algum valor no atributo (mtodo set) e
para recuperar o valor do atributo (mtodo get).
Feita a abstrao, primeiramente devemos criar uma classe que
represente os atributos e comportamentos dos vrios objetos
Funcionrio.
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
se lembra do encapsulamento?

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!

Identificada a(s) classes(s) que representam os objetos do


problema, devemos criar um modelo grfico dessa(s) classe(s).
Esse modelo grfico chamado de Diagrama de Classes (j
falamos dele antes, lembram?).
Como nesse problema s identificamos a classe Funcionrio,
nosso diagrama ser composto de apenas 1 classe.

172

prog_orient_objetos.indb 172

15/12/2011 14:00:50

Programao Orientada a Objeto

Funcionrio
nome: String
endereco: String
salario double
setNome()
setEndereco()
setSalario()
getNome()
getEndereco()
getSalario()

Observe que o smbolo grfico 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 comportamentos 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 modificar (set) e recuperar (get) cada atributo de um
objeto Funcionrio. Por isso, temos que planejar e implementar um
mtodo setNome() para modificar 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.

Unidade 9

prog_orient_objetos.indb 173

Lembre-se que qualquer


mtodo que modifica 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.

173

15/12/2011 14:00:50

Universidade do Sul de Santa Catarina

Depois de identificar a classe que representa o objeto do


problema e de representar graficamente essa classe, estamos
prontos para a implementao (programao).

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.

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 }

174

prog_orient_objetos.indb 174

15/12/2011 14:00:50

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 de que voc
pode usar o Bloco de Notas ou uma IDE como JCreator, JBuilder, etc)
2. Compilar a classe Funcionario.java. Se voc usou o Bloco de
Notas para digitar a classe, entre na janela do MS-DOS, v para a
pasta CURSOWEB e digite o comando de compilao:
javac Funcionario.java

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. Identificamos 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 175

175

15/12/2011 14:00:50

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

prog_orient_objetos.indb 176

15/12/2011 14:00:50

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 sequncia de telas do programa


exemplificado mais acima:

Tela 1

Tela 2

Tela 4

Tela 3

Unidade 9

prog_orient_objetos.indb 177

177

15/12/2011 14:00:50

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

prog_orient_objetos.indb 178

15/12/2011 14:00:50

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 179

179

15/12/2011 14:00:51

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.

180

prog_orient_objetos.indb 180

15/12/2011 14:00:51

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 181

181

15/12/2011 14:00:51

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 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 figura a seguir ajuda a entender essa explicao.

182

prog_orient_objetos.indb 182

15/12/2011 14:00:51

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 figura a seguir ilustra essa instruo:

Unidade 9

prog_orient_objetos.indb 183

183

15/12/2011 14:00:51

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, e 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.

184

prog_orient_objetos.indb 184

15/12/2011 14:00:51

Programao Orientada a Objeto

A figura 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 185

185

15/12/2011 14:00:51

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 o 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).

186

prog_orient_objetos.indb 186

15/12/2011 14:00:51

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, e modificar 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 187

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

187

15/12/2011 14:00:51

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
nome = snome;
Linha 13
endereo = sendere;
Linha 14
salario = ssal;
Linha 15
}
Linha 16
Linha 17
public void setNome(String snome){
Linha 18
nome=snome;
Linha 19
}
Linha 20
Linha 21
public void setEndereco(String sender){
Linha 22
endereco=sender;
Linha 23
}
Linha 24
Linha 25
public void setSalario(double dsalario){
Linha 26
salario=dsalario;
Linha 27
}
Linha 28
Linha 29
public void setSalario(String ssalario){
Linha 30
salario = Double.parseDouble(ssalario);
Linha 31
}
Linha 32
Linha 33
public String getNome(){
Linha 34
return nome;
Linha 35
}
Linha 36
Linha 37
public String getEndereco(){
Linha 38
return endereco;
Linha 39
}
Linha 40
Linha 41
public double getSalario(){
Linha 42
return salario;
Linha 43
}
Linha 44 }

Depois de implementar a nova verso da classe Funcionrio,


compile-a.
Aps ter sido compilada, vamos utilizar esse classe para
criar objetos do tipo funcionrio em outra classe chamada
InsereFuncionario,java.

188

prog_orient_objetos.indb 188

15/12/2011 14:00:51

Programao Orientada a Objeto

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 construtor 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 incio dessa unidade. Note que ela foi modificada. 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
double como nas verses anteriores.
Portanto, qual o mtodo setSalario que est sendo chamado? O
setSalario que espera um valor do tipo double ou o setSalario que
espera um valor do tipo String?

Unidade 9

prog_orient_objetos.indb 189

189

15/12/2011 14:00:51

Universidade do Sul de Santa Catarina

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

190

prog_orient_objetos.indb 190

15/12/2011 14:00:51

Programao Orientada a Objeto

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

Unidade 9

prog_orient_objetos.indb 191

191

15/12/2011 14:00:51

Atividades de autoavaliao
1) Implemente o cdigo explicado nessa unidade.

prog_orient_objetos.indb 192

15/12/2011 14:00:51

Programao Orientada a Objeto

Saiba mais
FOWLER, Martin; SCOTT, Kendall. UML essencial: um
breve guia para a linguagem-padro de modelagem de objetos.
Segunda edio. Porto Alegre: Bookman, 2000.

Unidade 9

prog_orient_objetos.indb 193

193

15/12/2011 14:00:51

prog_orient_objetos.indb 194

15/12/2011 14:00:51

unidade 10

Modificadores
Objetivos de aprendizagem

Aprender o conceito e a forma como se faz a aplicao


dos modificadores de acesso e dos modificadores static
e final.

10

Sees de estudo
Seo 1

prog_orient_objetos.indb 195

Modificadores

15/12/2011 14:00:52

Universidade do Sul de Santa Catarina

Para incio de estudo


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 modificadores
de acesso (public, private, protected e sem modificador) e
modificadores static e final.
Modificadores esto presentes desde a primeira classe que voc
desenvolveu, inclusive antes de aprender os conceitos de OO.
Portanto, importante que voc saiba o significado de cada um
deles e como utiliz-los.

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

Modificadores 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 modificador de acesso. Os modificadores de
acesso que podem ser utilizados so: public, private, protected.
E, quando nenhum modificador especificado, diz-se que o
modificador de acesso de pacote (package).
Veja o trecho de cdigo da classe Funcionrio da unidade anterior.

196

prog_orient_objetos.indb 196

15/12/2011 14:00:52

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
modificador de acesso
private.
Declarao de mtodo com
o modificador de acesso
public.

Mas, afinal, para que servem os modificadores de


acesso?

atravs dos modificadores de acesso, tambm conhecidos como


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

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

Funcionario f=new Funcionario( );
Linha 4

f.nome = Ana;
Linha 5 }
Linha 6 }

Unidade10

prog_orient_objetos.indb 197

Essa instruo est errada.


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

197

15/12/2011 14:00:52

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
modificador 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 modificar
os valores dessas variveis.

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

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.

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

198

prog_orient_objetos.indb 198

15/12/2011 14:00:52

Programao Orientada a Objeto

Modificador de acesso de pacote


Chama-se de acesso de pacote quando no explicitamente
especificado um modificador 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.
Agrupam-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 figuras 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 especificado
nenhum modificador em um atributo ou mtodo da classe, ele
ter modificador 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 modificador
de acesso de pacote.
Linha 1 public class Funcionario{
Linha 2
String nome, endereco;
Linha 3
double salario;
..
..
..
..

Unidade10

prog_orient_objetos.indb 199

Atributos declarados sem


modificador de acesso. So
atributos com acesso de
pacote.

199

15/12/2011 14:00:52

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 }

Modificador protected
Esse modificador ser abordado quando voc aprender o conceito
de herana.

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

200

prog_orient_objetos.indb 200

15/12/2011 14:00:52

Programao Orientada a Objeto

Linha 1
public class Circulo{
Linha 2
private final double pi=3.14;
Linha 3
private double raio;
Linha 4
Linha 5
public Circulo( ){

raio=0;

}

public Circulo(double draio ){

raio=drario;

}

public void setRaio(double draio){

raio=draio;

}

public double getRaio(){

return raio;

}

public double getPi(){

return pi;

}

public double calculaArea( ){

return pi*raio*raio;

}
}

Na linha 2, o atributo pi foi declarado com o modificador final e


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

Unidade10

prog_orient_objetos.indb 201

201

15/12/2011 14:00:52

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
pi 3.14

Objetos
Crculo

raio
pi 3.14
raio
pi 3.14

endereo 10x
endereo 11x
endereo 290x

202

prog_orient_objetos.indb 202

15/12/2011 14:00:52

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 modificador final tambm pode ser aplicado aos mtodos de
uma classe, mas para entender o funcionamento, nesse contexto,
necessrio que voc aprenda o conceito de herana.

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

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!

Unidade10

prog_orient_objetos.indb 203

203

15/12/2011 14:00:52

Universidade do Sul de Santa Catarina

Veja a representao grfica dos objetos criados (ltima figura).


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 final, pode ser tambm static.
Observe o trecho de cdigo da classe Circulo onde o atributo pi
definido:
Linha 1 public class Circulo{
Linha 2
private static final double pi=3.14;
Linha 3
private double raio;
Linha 4
..

Veja agora como fica 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.

204

prog_orient_objetos.indb 204

15/12/2011 14:00:52

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 final.
Um atributo que final pode ser static, porm o inverso no se
aplica; um atributo que static nem sempre ser final.

Unidade10

prog_orient_objetos.indb 205

205

15/12/2011 14:00:52

Universidade do Sul de Santa Catarina

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

return pi;
}

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

206

prog_orient_objetos.indb 206

15/12/2011 14:00:52

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 chamem 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).

Unidade10

prog_orient_objetos.indb 207

207

15/12/2011 14:00:53

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 modificador static, vamos trabalhar
com outro exemplo. Modifique a classe Funcionrio e insira o
cdigo a seguir:

208

prog_orient_objetos.indb 208

15/12/2011 14:00:53

Programao Orientada a Objeto

Linha 1
Linha 2
Linha 3

public class Funcionario{


private String nome, endereco;
private double salario;

Linha 4
private static int cont=0;
Linha 5
Linha 6
public Funcionario( ){
Linha 7
nome=;
Linha 8
endereo=;
Linha 9
salario=0;
Linha 10
cont=cont + 1;
Linha 11
}
Linha 12
Linha 13
public void setNome(String snome){
Linha 14
nome=snome;
Linha 15
}
Linha 16
Linha 17
public void setEndereco(String sender){
Linha 18
endereco=sender;
Linha 19
}
Linha 20
Linha 21
public void setSalario(double dsalario){
Linha 22
salario=dsalario;
Linha 23
}
Linha 24
public String getNome(){
Linha 25
return nome;
Linha 26
}
Linha 27
Linha 28
public String getEndereco(){
Linha 29
return endereco;
Linha 30
}
Linha 31
Linha 32
public double getSalario(){
Linha 33
return salario;
Linha 34
}
Linha 35
Linha 36
public static int getCont( ){
Linha 37
return cont;
Linha 38
}
Linha 32 }

Unidade10

prog_orient_objetos.indb 209

Temos um atributo static


chamado cont.

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.

Mtodo static getCont(


) retorna o contedo do
atributo static cont.

209

15/12/2011 14:00:53

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, modificando 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
public class ContaFuncinario{
Linha 2
public static void main(String args[]){
Linha 3
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.
210

prog_orient_objetos.indb 210

15/12/2011 14:00:53

Programao Orientada a Objeto

A figura 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 figura ilustra a representao em memria depois da execuo
dessa instruo.
O objeto f1 criado, seu mtodo construtor chamado e
incrementa o valor do atributo cont.

Objeto Funcionrio

pi

f1

100x
nome
Endereo
Salrio 0

Unidade10

prog_orient_objetos.indb 211

endereo 100x

211

15/12/2011 14:00:53

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 de que todos os objetos podem acessar
o atributo pi atravs do mtodo getCont( ). O valor retornado
tambm ser 2.

212

prog_orient_objetos.indb 212

15/12/2011 14:00:53

Programao Orientada a Objeto

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

Unidade10

prog_orient_objetos.indb 213

213

15/12/2011 14:00:53

Universidade do Sul de Santa Catarina

Atividades de autoavaliao
1) Analise o seguinte trecho de cdigo e identifique se existe algum erro.
Caso exista, explique qual o erro e como solucion-lo.
//classe Retangulo
public class Retngulo{
private double base, altura;

//mtodos

}
//classe calcula que cria objeto retangulo
public class CalculaRetangulo{
public static void main(String args[]){

Retangulo r = new Retangulo( )

r.base = 5.0;

r.altura = 6.0
}
}

214

prog_orient_objetos.indb 214

15/12/2011 14:00:53

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

Unidade10

prog_orient_objetos.indb 215

215

15/12/2011 14:00:53

Universidade do Sul de Santa Catarina

Saiba mais
LEMAY, Laura; CADENHEAD, Rogers. Aprenda em 21 dias
Java 1.2. Rio de Janeiro: Campus, 1999.

216

prog_orient_objetos.indb 216

15/12/2011 14:00:53

unidade 11

Objetos como atributos de


outros objetos
Objetivos de aprendizagem

Entender o conceito de associao.

11

Sees de estudo
Seo 1

prog_orient_objetos.indb 217

Associao

15/12/2011 14:00:53

Universidade do Sul de Santa Catarina

Para incio de estudo


Na unidade anterior, voc estudou o conceito de modificador
e viu que existem vrios tipos de modificadores: os de acesso,
static e final e as implicaes de se definirem atributos e mtodos
com esses modificadores. Nesta 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), consequentemente, 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 de
que ela representa os atributos e comportamentos de objetos
Funcionrio), podemos definir que o setor em que o funcionrio
trabalha uma informao importante.
Poderamos definir essa informao como um atributo
do tipo String.

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
nosso problema. Ela pode ser chamada de Setor, pois representa
os atributos e comportamentos de qualquer objeto Setor.
218

prog_orient_objetos.indb 218

15/12/2011 14:00:53

Programao Orientada a Objeto

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

Unidade11

prog_orient_objetos.indb 219

219

15/12/2011 14:00:53

Universidade do Sul de Santa Catarina

Por exemplo: na figura 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 especificada

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

Antes de demonstrar como ficar o cdigo da classe Funcionrio


com o novo atributo setor, vamos representar graficamente 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

220

prog_orient_objetos.indb 220

15/12/2011 14:00:54

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
public class Setor{
Linha 2
private int codigo;
Linha 3
private String nomesetor;
Linha 4
Linha 5
public Setor( ){
Linha 6
codigo=0;
Linha 7
nomesetor=;
Linha 8
}
Linha 9
Linha 10
public Setor(int icod, String snomeset ){
Linha 11
codigo=icod;
Linha 12
nomesetor=snomeset;
Linha 13
}
Linha 14
public void setCodigo(int icod){
Linha 15
codigo=icod;
Linha 16
}
Linha 17
Linha 18
public void setNomeSetor(String snomeset){
Linha 19
nomesetor= snomeset;
Linha 20
}
Linha 21
Linha 22
public int getCodigo(){
Linha 23
return codigo;
Linha 24
}
Linha 25
Linha 26
public String getNomeSetor(){
Linha 27
return nomesetor;
Linha 28
}
Linha 29
Linha 30 }

Unidade11

prog_orient_objetos.indb 221

221

15/12/2011 14:00:54

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

222

prog_orient_objetos.indb 222

15/12/2011 14:00:54

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

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.

Linha 0 import javax.swing.*;


Linha 1 public class CadastroFuncionarioSetor{
Linha 2 public static void main(String args[]) {
Linha 3
Setor s[]=new Setor[3];
Linha 4
s[0] = new Setor(1,Financeiro);
Linha 5
s[1] = new Setor(2,Compras);
Linha 6
s[2] = new Setor(3,Almoxarifado);
Linha 7
Funcionario f=new Funcionario( );
Linha 8
f.setNome(JOptionPane.showInputDialog(Entre com o Nome));
Linha 9
f.setEndereco(JOptionPane.showInputDialog(Entre com o Endereo));
Linha 10
f.setSalario(Double.parseDouble(JOptionPane.showInputDialog(Entre com o Salrio)));
Linha 11
int codsetor=Integer.parseInt(JOptionPane.showInputDialog(Entre com o Cdigo do Setor));
Linha 12
for (int i=0;i<3;i++){
Linha 13
if (codsetor = = s[i].getCodigo( ))
Linha 14
f.setSetor(s[i]);
Linha 15 }
Linha 16
Funcionario f2=new Funcionario( );
Linha 17
f2.setNome(JOptionPane.showInputDialog(Entre com o Nome));
Linha 18
f2.setEndereco(JOptionPane.showInputDialog(Entre com o Endereo));
Linha 19
f2.setSalario(Double.parseDouble(JOptionPane.showInputDialog(Entre com o Salrio)));
Linha 20
codsetor=Integer.parseInt(JOptionPane.showInputDialog(Entre com o Cdigo do Setor));
Linha 21
for (int i=0;i<3;i++){
Linha 22
if (codsetor = = s[i].getCodigo( ))
Linha 23
f2.setSetor(s[i]);
Linha 24 }
Linha 25
Funcionario f3=new Funcionario( );
Linha 26
f3.setNome(JOptionPane.showInputDialog(Entre com o Nome));
Linha 27
f3.setEndereco(JOptionPane.showInputDialog(Entre com o Endereo));
Linha 28
f3.setSalario(Double.parseDouble(JOptionPane.showInputDialog(Entre com o Salrio)));
Linha 29
codsetor=Integer.parseInt(JOptionPane.showInputDialog(Entre com o Cdigo do Setor));
Linha 30
for (int i=0;i<3;i++){
Linha 31
if (codsetor = = s[i].getCodigo( ))
Linha 32
f3.setSetor(s[i]);
Linha 34 }
Linha 35
JOptionPane.showMessageDialog(null,Nome e Setor dos Funcionrios \n + f.getNome( )
+ +f.getNomeSetorFunc( ) + \n + f2.getNome( ) + + f2.getNomeSetorFunc( )
+ \n + f3.getNome( ) + + f3.getNomeSetorFunc( ) );
Linha 37
System.exit(0);
Linha 38 }
Linha 39 }
Unidade11

prog_orient_objetos.indb 223

223

15/12/2011 14:00:54

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

prog_orient_objetos.indb 224

15/12/2011 14:00:54

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, finalmente, 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

Unidade11

prog_orient_objetos.indb 225

225

15/12/2011 14:00:54

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: verificado, 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 (significa 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 figura abaixo, que a primeira posio
226

prog_orient_objetos.indb 226

15/12/2011 14:00:54

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 figura 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
Unidade11

prog_orient_objetos.indb 227

227

15/12/2011 14:00:55

Universidade do Sul de Santa Catarina

atributo setor do objeto Funcionrio f2, caracterizando, assim,


que esse funcionrio trabalha no setor de Almoxarifado. A figura
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
ser encontrado no objeto Setor que est sendo referenciado na
228

prog_orient_objetos.indb 228

15/12/2011 14:00:55

Programao Orientada a Objeto

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

Unidade11

prog_orient_objetos.indb 229

229

15/12/2011 14:00:55

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

230

prog_orient_objetos.indb 230

15/12/2011 14:00:55

Programao Orientada a Objeto

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

Unidade11

prog_orient_objetos.indb 231

231

15/12/2011 14:00:55

Universidade do Sul de Santa Catarina

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

232

prog_orient_objetos.indb 232

15/12/2011 14:00:55

Programao Orientada a Objeto

Saiba mais
TAFNER, Malcon Anderson; CORREIA, Carlos H. Anlise
orientada a objetos. Florianpolis: Visual Books, 2001. 112 p.

Unidade11

prog_orient_objetos.indb 233

233

15/12/2011 14:00:55

prog_orient_objetos.indb 234

15/12/2011 14:00:55

unidade 12

Associao na prtica
Objetivos de aprendizagem

Fortalecer o conceito de associao.

12

Sees de estudo
Seo 1

prog_orient_objetos.indb 235

Associao por exemplos

15/12/2011 14:00:55

Universidade do Sul de Santa Catarina

Para incio de estudo


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), consequentemente, entre as classes
que os representam. Esse relacionamento chamado de associao.
Nesta 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 figura a seguir representa, em UML, as classes desse sistema e
como elas se relacionam.
236

prog_orient_objetos.indb 236

15/12/2011 14:00:55

Programao Orientada a Objeto

Cliente

Conta

nome: String
endereo: String
cpf: int

multiplicidade
1
0..*

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

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

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 ficar o cdigo das classes Conta e


Cliente, vamos representar graficamente 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.

Unidade12

prog_orient_objetos.indb 237

237

15/12/2011 14:00:55

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 } //fim da classe Cliente

238

prog_orient_objetos.indb 238

15/12/2011 14:00:56

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 }

Unidade12

prog_orient_objetos.indb 239

O atributo cliente do
tipo Cliente, ou seja, far
referncia a um objeto do
tipo Cliente em memria.
O atributo cliente
inicializado com o valor
null. Todo atributo/objeto
deve ser inicializado com
esse valor. Isso quer dizer
que, no momento, ele no
faz referncia a nenhum
objeto.

Mtodo setCliente(Cliente
c) recebe como parmetro
a referncia ou endereo
de um objeto Cliente. Essa
referncia armazenada
no atributo cliente. Isso
indicar que o objeto
Conta est ligado a um
objeto Cliente.

Esse mtodo retorna a


referncia para um objeto
Cliente armazenada no
atributo cliente. Por isso o
tipo de retorno Cliente.

239

15/12/2011 14:00:56

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 fins didticos, cadastrar 3 contas e 2
clientes. Voc deve expandir esse nmero depois, nas atividades
de autoavaliao.

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 }

240

prog_orient_objetos.indb 240

15/12/2011 14:00:56

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

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 [ ]

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

Unidade12

prog_orient_objetos.indb 241

Endereo 140x

241

15/12/2011 14:00:56

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]).
cta [ ]

0
1
2

160x
null
null

cli [ ]

0
1

140x
null

Objeto Cliente

Objeto Conta

nome Carlos
endereo Rua R
cpf 626193455

numero 1596
saldo 2000.00

Endereo 140x

Endereo 160x

cliente 140x
O atributo cliente do objeto Conta
aponta ou faz referncia para o
endereo de um objeto Cliente. 140x
o endereo do primeiro objeto
Cliente cadastrado.

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.

242

prog_orient_objetos.indb 242

15/12/2011 14:00:56

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

Unidade12

prog_orient_objetos.indb 243

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

243

15/12/2011 14:00:56

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

prog_orient_objetos.indb 244

15/12/2011 14:00:56

Programao Orientada a Objeto

Vamos exemplificar 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

Unidade12

prog_orient_objetos.indb 245

245

15/12/2011 14:00:56

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 refinada.
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, pcta=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(Double.parseDouble(JOptionPane.showInputDialog(Entre com o CPF)));
Linha 13 cta[pcta] = new Conta();
Linha 14 cta[pcta].setNumero(Integer.parseInt(JOptionPane.showInputDialog(Entre com o
Numero)));
Linha 15 cta[pcta].setSaldo(Double.parseDouble(JOptionPane.showInputDialog(Entre com o
saldo)));
Linha 16 cta[pcta].setCliente(cli[pcli]);
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 = Integer.parseInt(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[pcta] = new Conta();
Linha 27
cta[pcta]. setNumero(Integer.parseInt(JOptionPane.showInputDialog
(Entre com o Numero)));
Linha 28
cta[pcta].setSaldo(Double.parseDouble(JOptionPane.
showInputDialog(Entre com o saldo)));
Linha 29
cta[pcta].setCliente(cli[i]);
Linha 30
pcta ++ ; //incrementa o contador de contas
Linha 31
break; //instruo de interrompe a repetio (for)

246

prog_orient_objetos.indb 246

15/12/2011 14:00:56

Programao Orientada a Objeto

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

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, significa que ele quer sair do
sistema. A instruo break interrompe a repetio while,
e o programa termina.

Unidade12

prog_orient_objetos.indb 247

247

15/12/2011 14:00:57

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 simplificada e, a
segunda, um pouco mais elaborada.
Espero que voc tenha entendido o conceito de associao!

248

prog_orient_objetos.indb 248

15/12/2011 14:00:57

Programao Orientada a Objeto

Atividades de autoavaliao
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.

Unidade12

prog_orient_objetos.indb 249

249

15/12/2011 14:00:57

Universidade do Sul de Santa Catarina

Saiba mais
MICHAL, Young. Teste e anlise de software. Bookman, 2008

250

prog_orient_objetos.indb 250

15/12/2011 14:00:57

13

unidade 13

Herana

Objetivos de aprendizagem

Aprender o conceito de herana.

Identificar a necessidade de sobrescrever um mtodo.

Sees de estudo
Seo 1

prog_orient_objetos.indb 251

Herana

15/12/2011 14:00:57

Universidade do Sul de Santa Catarina

Para incio de estudo


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 modificador 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 especficas desses tipos de objetos. Essas classes especficas,
conhecidas como SUBCLASSES, herdam os atributos e
comportamentos comuns que foram agrupados na superclasse.
A partir de uma classe base (superclasse), outras classes podem
ser especificadas ou especializadas.

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
especficos a essa subclasse.
252

prog_orient_objetos.indb 252

15/12/2011 14:00:57

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-se
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 identificar
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
(consequentemente, 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.

Unidade13

prog_orient_objetos.indb 253

253

15/12/2011 14:00:57

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 especficos 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
duas classes. Eles podem ser modelados e implementados na
superclasse Funcionrio e serem HERDADOS pelas subclasses
Administrativo e Docente.
254

prog_orient_objetos.indb 254

15/12/2011 14:00:57

Programao Orientada a Objeto

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 figura 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 especficos.

Unidade13

prog_orient_objetos.indb 255

255

15/12/2011 14:00:57

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 significa


sobrescrever um mtodo herdado
mais 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 modificar 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 verificar 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 qualificador 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.
256

prog_orient_objetos.indb 256

15/12/2011 14:00:57

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


public String getCargo(){

return cargo;

}

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 void setSetor(String ssetor){

setor=ssetor;

}

public String getSetor(){

return setor;

}
}

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

public class Docente extends Funcionario{


private int nha;
private String titulacao;
public Docente(){
super( );

//chamada explcita ao

da superclasse
nha=0;
titulacao=;
}

Unidade13

prog_orient_objetos.indb 257

257

15/12/2011 14:00:57

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;

}
}
Quadro 13.1 - Implementao subclasse Administrativo e Docente

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.

258

prog_orient_objetos.indb 258

15/12/2011 14:00:57

Programao Orientada a Objeto

Linha 1 import javax.swing.JOptionPane;


Linha 2 public class CadastraAdmDocente{
Linha 3 public static void main(String args[]){
Linha 4
Docente d1= new Docente( );
Linha 5
d1.setNome(JOptionPane.showInputDialog(Entre com o Nome:));;
Linha 6
d1.setEndereco(JOptionPane.showInputDialog(Entre com o Endereco:));
Linha 7
d1.setSalario(Double.parseDouble(JOptionPane.showInputDialog(Entre com o Salario:)));
Linha 8
d1.setNha(Integer.parseInt(JOptionPane.showInputDialog(Entre com o Nu.de Horas Aula
Semanais:)));
Linha 9
d1.setTitulacao(JOptionPane.showInputDialog(Entre com a Titulacao:)));
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 }
Quadro 13.2 - Implementao informaes para funcionrios

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 figura abaixo ilustra a representao do objeto Docente em
memria.
referncia d1 10x

Objeto Docente

nome
endereco
salario
nha
titulacao

endereo 10x

Unidade13

prog_orient_objetos.indb 259

259

15/12/2011 14:00:57

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.
A figura abaixo ilustra a representao do objeto Docente (j
preenchido) e o objeto Administrativo em memria.

260

prog_orient_objetos.indb 260

15/12/2011 14:00:58

Programao Orientada a Objeto

referncia d1 10x
a1 12x

Objeto Docente

Objeto
Administrativo

Nome Ana
endereo Rua A
salrio 1000
nha 12
titulacao Mestre

endereo 10x

nome
endereco
salrio
cargo
setor

endereo 12x

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( ).
Veja isso na linha 5 da implementao da subclasse Administrativo
e, na linha 6, da implementao da subclasse Docente.

Unidade13

prog_orient_objetos.indb 261

261

15/12/2011 14:00:58

Universidade do Sul de Santa Catarina

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.

262

prog_orient_objetos.indb 262

15/12/2011 14:00:58

Programao Orientada a Objeto

Modificador de acesso protected


Voc deve lembrar que, na unidade anterior, falamos sobre os
modificadores 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 significa 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.

Unidade13

prog_orient_objetos.indb 263

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.

263

15/12/2011 14:00:58

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 modificadores, dissemos que o modificador 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 modificador protected pode ser inserido.
O modificador protected pode ser utilizado na definio de
atributos e mtodos da superclasse.
O trecho de cdigo da superclasse Funcionrio ilustra essa
explicao.

O atributo salario foi definido como


protected.

public classe Funcionrio {


private String nome, endereo;
protected double salrio;
.
.
}

Quando atributos e mtodos da superclasse so definidos com


o modificador protected, eles so liberados para acesso direto
(pelo nome) pelas subclasses que estendem essa superclasse.
O trecho de cdigo da subclasse Docente VLIDO:
264

prog_orient_objetos.indb 264

15/12/2011 14:00:58

Programao Orientada a Objeto

public class Docente{


.
.
public String imprimeNomeTituSalario( ) {

return getNome( )+ +titulao+ +salario;
}
.
.
}

Acessar diretamente quer dizer que os mtodos


da subclasse podem acessar os membros public e
protected da superclasse somente pelo nome.

O atributo salario
est sendo acessado
diretamente pelo nome
na subclasse Docente.
Isso possvel porque seu
modificador de acesso
agora foi mudado para
protected.

Redefinio de Mtodos (mtodo sobrescrito)


Outro conceito importante ligado herana o de mtodo
sobrescrito ou mtodo redefinido.
Isso acontece quando uma subclasse (que herda todos os mtodos
da sua superclasse) redefine ou sobrescreve (override) um mtodo
herdado da sua superclasse.
Redefinir 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,
modificador + tipo de retorno + nome + parmetros.
Exemplo:
Tipo de retorno

Modificador

Assinatura do mtodo
public void setSalario (double dsal) {

salario=dsal;
}

Unidade13

prog_orient_objetos.indb 265

Nome do mtodo

Parmetro

265

15/12/2011 14:00:58

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 horaaula de um docente conforme sua titulao:

Titulao

Valor hora aula

Especialista

R$ 15,00

Mestre

R$ 20,00

Doutor

R$ 30,00

Tabela 13.1 - Valor hora-aula docente

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 fixo a ser adicionado ao salrio
base. A tabela abaixo mostra os cargos possveis e o valor
recebido em cada cargo:
266

prog_orient_objetos.indb 266

15/12/2011 14:00:58

Programao Orientada a Objeto

Cargo

Valor

Tcnico administrativo

R$ 300,00

Bibliotecria

R$ 400,00

Tcnico de laboratrio

R$ 500,00

Tabela 13.2 - Valor fixo/Salrio base

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*30));
Linha 15
Linha 16
}
Linha 17 }
Quadro 13.3 - Trecho cdigo de classe docente

Unidade13

prog_orient_objetos.indb 267

267

15/12/2011 14:00:58

Universidade do Sul de Santa Catarina

Note que a assinatura (cabealho) do mtodo setSalario(double


dsal) est idntica 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 verificar se a titulao do objeto
Docente igual 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-aula * titulao do professor.
Observe que essa instruo de chamada ao mtodo setSalario
da superclasse est sendo feita dentro da prpria redefinio do
mtodo setSalario na subclasse.
Chamar o mtodo do mesmo nome dentro de um mtodo do
mesmo nome que est sendo redefinido possvel, mas se deve
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( ).

268

prog_orient_objetos.indb 268

15/12/2011 14:00:58

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 }
Quadro 13.4 - Trecho cdigo de classe administrativo

O mesmo acontece com a redefinio 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 modificao no cdigo da classe
CadastraAdmDocente, j mostrado anteriormente nesta unidade.
Linha 1 import javax.swing.JOptionPane;
Linha 2 public class CadastraAdmDocente{
Linha 3 public static void main(String args[]){
Linha 4
Docente d1= new Docente( );
Linha 5
d1.setNome(JOptionPane.showInputDialog(Entre com o Nome:));;
Linha 6
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( );

Unidade13

prog_orient_objetos.indb 269

A chamada ao mtodo
setSalario( ) deve ser
feita depois da chamada
aos mtodos setNha( ) e
setTitulao pois o mtodo
setSalario( ) na sua nova
implementao na classe
Docente precisa dos
valores dos atributos nha
e titulacao.

269

15/12/2011 14:00:58

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

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

Linha 19 }
Quadro 14.4

270

prog_orient_objetos.indb 270

15/12/2011 14:00:58

Programao Orientada a Objeto

Sntese
Nesta unidade, voc aprendeu outro conceito importante da OO,
o conceito de herana. atravs da herana que a caracterstica
de reutilizao de cdigo do paradigma orientado a objeto se
torna mais evidente. Isso acontece porque podemos modelar
e implementar numa classe genrica, chamada de superclasse,
todos os atributos e comportamentos comuns a diversos tipos de
objetos e, esses atributos e comportamento podem ser herdados
por vrias outras classes (que representam esses tipos de objetos
diferentes com atributos e comportamentos em comum), evitando
assim a duplicao de cdigo.

Unidade13

prog_orient_objetos.indb 271

271

15/12/2011 14:00:58

Universidade do Sul de Santa Catarina

Atividades de autoavaliao
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 tm 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.

272

prog_orient_objetos.indb 272

15/12/2011 14:00:58

Programao Orientada a Objeto

Saiba mais
HORSTMANN, Cay S. Big Java. Porto Alegre: Bookman,
2004.

Unidade13

prog_orient_objetos.indb 273

273

15/12/2011 14:00:58

prog_orient_objetos.indb 274

15/12/2011 14:00:58

unidade 14

Herana na prtica
Objetivos de aprendizagem

Fortalecer o conceito de herana mediante exemplos


prticos.

14

Sees de estudo
Seo 1

prog_orient_objetos.indb 275

Herana mediante exemplo prtico

15/12/2011 14:00:59

Universidade do Sul de Santa Catarina

Para incio de estudo


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 especficos
para cada tipo, interessante representar no s esses
atributos e comportamentos em comum, mediante uma classe
genrica chamada de superclasse, como tambm os atributos
e comportamentos especficos em classes conhecidas como
subclasses, que representam cada tipo de objeto. A herana
acontece porque os objetos dessas subclasses herdam todos
atributos e comportamentos definidos 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 final (depois da locao). Essa locadora de
veculos possui duas categorias de veculos para locao: Passeio e
Carga. O total da frota 15 veculos, sendo 10 do tipo Passeio e
5 do tipo Carga.

276

prog_orient_objetos.indb 276

15/12/2011 14:00:59

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

Unidade14

prog_orient_objetos.indb 277

277

15/12/2011 14:00:59

Universidade do Sul de Santa Catarina

Modelagem:

Identificar quais os objetos existentes nesse problema:


necessrio armazenar informaes sobre objetos do
tipo Veiculo Carga e Veiculo Passeio.

Identificar atributos e comportamentos dos objetos


identificados.

Veculo Passeio

Veculo Carga

Atributos
Placa

Placa

Marca

Marca

Modelo

Modelo

Ano

Ano

valor do km rodado

valor do km rodado

km inicial

km inicial

km final

km final

Ar-condicionado

capacidade

Nmero de portas

Comportamentos ou mtodos
Passeio ( )

Carga ( )

Mtodos set e set para cada atributo

Mtodos set e set para cada atributo

calculaValorLocacao( )

calculaValorLocacao( )

Quadro 14.1 - Atributos e mtodos / objetos Passio x Carga

Pelo quadro acima podemos identificar 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 especficos nas classes Passeio
e Carga.
A seguir, est a representao, em UML, das classes desse sistema.
278

prog_orient_objetos.indb 278

15/12/2011 14:00:59

Programao Orientada a Objeto

Superclasse
Veiculo
placa: String
marca: String
modelo: double
ano: int
valorkmrod: double
kminic: int
kmfim: int
Veiculo( )
setPlaca(String splaca )
setMarca(String smarca )
setModelo(String smodelo)
setAno(int iano )
setValorKmRod(double dvalkm )
setKmInic(int ikmi )
setKmFim(int ikmf )
getPlaca( ):String
getMarca( ):String
getModelo( ): String
getAno( ): int
getValorKmRod( ): double
getKmInic( ): int
getKmFim( ):int
calculaValorLocacao( )

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

Unidade14

prog_orient_objetos.indb 279

279

15/12/2011 14:00:59

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, kmfim;
private double valkmrod;
public Veiculo(){
placa=;

marca=;

modelo=;

ano=0;

valorkmrod=0;

kminic=0;

kmfin=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){

kmfim= ikmf;
}

public String getPlaca(){

return placa;
}

public String getMarca(){

return marca;
}

280

prog_orient_objetos.indb 280

15/12/2011 14:00:59

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

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.

public double calculaValorLocacao( ){


return (kmfim kminic) * valkmrod;

Quadro 14.2 - Implementao das classes

Note que Passeio extends


(estende) Veiculo. essa
palavra que indica o
relacionamento de herana
entre essas duas classes.

//Implementao da subclasse Passeio


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

Unidade14

prog_orient_objetos.indb 281

281

15/12/2011 14:00:59

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: ((kmfinkminic)*valorkmrod)+10%. Logo,
a classe Carga no deseja a herana
do mtodo calculaValorLocao
( ) da maneira como ele foi
implementado na classe Veculo.
Com isso, esse mtodo pode ser
redefinido na classe Carga com a
frmula correta.

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;

}
Quadro 14.3 - Implementao classes bsicas do sistema

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.

282

prog_orient_objetos.indb 282

15/12/2011 14:00:59

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[5];
Linha 4
Carga c[]=new Carga[10];
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)));

Unidade14

prog_orient_objetos.indb 283

283

15/12/2011 14:00:59

Universidade do Sul de Santa Catarina

Linha 40
c[pc].setValKmRod(Double.parseDouble(JOptionPane.
showInputDialog(Digite o Valor do
Kilometro Rodado)));
Linha 41
c[pc].setKmInic(Integer.parseInt(JOptionPane.
showInputDialog(Digite a Kilometragem
Inicial)));
Linha 42
c[pc].setKmFim(Integer.parseInt(JOptionPane.
showInputDialog(Digite a Kilometragem
Final)));
Linha 43
c[pc].setCapacidade(Integer.parseInt(JOptionPane.
showInputDialog(Digite a capacidade
mxima permitida)));
Linha 44
pc = pc + 1;
Linha 44
} //FIM opo = = 2
Linha 45
else
Linha 46
if (op = = 3) {
Linha 47
for (int i=0; i<pp; i++){
Linha 48
JOptionPane.showMessageDialog(null,LISTAGEM DE VEICULOS
TIPO PASSEIO: +\n +
Linha 50
PLACA: + p[i].getPlaca () +\n+
Linha 51
MARCA: + p[i].getMarca() +\n+
Linha 52
MODELO: + p[i].getModelo() +\n+
Linha 53
ANO DE FABRICAAO: + p[i].getAno () +\n+
Linha 54
VALOR KM RODADO: + p[i].getValKmRod() +\n+
Linha 55
KM INICIAL: + p[i].getKmInic() +\n+
Linha 56
KM FINAL: + p[i].getKmFin() +\n+
Linha 57
NUMEROS DE PORTAS: + p[i].getNuPortas() +\n);
Linha 58
}
Linha 59
for (int i=0; i<pc; i++){
Linha 60
JOptionPane.showMessageDialog(null,LISTAGEM VEICULOS TIPO
CARGA: +\n +
Linha 61
PLACA: + c[i].getPlaca () +\n+
Linha 62
MARCA: + c[i].getMarca() +\n+
Linha 63
MODELO: + c[i].getModelo() +\n+
Linha 64
ANO DE FABRICAAO: + c[i].getAno () +\n+
Linha 65
VALOR KM RODADO: + c[i].getValKmRod() +\n+
Linha 66
KM INICIAL: + c[i].getKmInic() +\n+
Linha 67
KM FINAL: + c[i].getKmFin() +\n+
Linha 68
CAPACIDADE MAXIMA: + c[i].getCapacidadea() +\n);
Linha 69
}
Linha 70
}//FIM opcao = = 3
Linha 71
else
Linha 72
if (op = = 4) {
Linha 74
String placa=JOptionPane.showInputDialog(Digite a PLACA do veiculo a ser
pesquisado);
Linha 75
for (int i=0; i<pp; i++){
Linha 76
if (p[i].getPlaca().equalsIgnoreCase(placa)){

284

prog_orient_objetos.indb 284

15/12/2011 14:00:59

Programao Orientada a Objeto

Linha 77
veculo :

JOptionPane.showMessageDialog(null,O valor de locao desse

+ p[i].calculaValorLocacao( ));
Linha 78
}
Linha 79
}
Linha 80
for (int i=0; i<pc; i++){
Linha 81
if (c[i].getPlaca().equalsIgnoreCase(placa)){
Linha 82
JOptionPane.showMessageDialog(null,O valor de locao desse
veculo :
+ c[i].calculaValorLocacao( ));
Linha 83
}
Linha 84
} //fim do for
Linha 85
} //fim da opo 4
Linha 86
else
Linha 87
if (op = = 5){
Linha 88
int cot=0;
Linha 89
for (int i=0; i<ppj; i++){
Linha 90
if (p[i].getArCond() = = true)
Linha 91
cont = cont + 1;
Linha 92
}
Linha 93
JOptionPane.showMessageDialog(null,Nmero de Veculos do Tipo Passeio
com
Ar-Condicionado: + cont );
Linha 94
}
Linha 95
else
Linha 96
if (op = = 6)
Linha 97
break;
Linha 98 }// fim while
Linha 99 }// fim do mtodo main ( )
Linha 100} // fim da classe

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.

Unidade14

prog_orient_objetos.indb 285

285

15/12/2011 14:00:59

Universidade do Sul de Santa Catarina

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:

Linha 16: verifica se o usurio digitou a opo 1 (significa 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 de 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 significa 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.
286

prog_orient_objetos.indb 286

15/12/2011 14:01:00

Programao Orientada a Objeto

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 ser 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: fim da opo 1.
Linha 34: verifica se a opo digitada igual a 2 (significa 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
incrementada na linha 44. Isso significa 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 (significa que o usurio deseja
consultar, listar todos os veculos cadastrados 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.

Unidade14

prog_orient_objetos.indb 287

287

15/12/2011 14:01:00

Universidade do Sul de Santa Catarina

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: verifica se opo digita quatro (significa 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)
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.

288

prog_orient_objetos.indb 288

15/12/2011 14:01:00

Programao Orientada a Objeto

Linhas 87 a 94: verifica se a opo digitada 5 (significa 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, verificando se o atributo arcond possui o valor
true. A cada vez que encontrar, incrementada a varivel cont.
No final, impresso o valor da varivel cont.
Linha 96: verifica se a opo digitada 6 (significa 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 fluxo de repetio interrompido
e a prxima instruo a ser executada {ser a prxima depois do
smbolo de } (fim) do while.

Unidade14

prog_orient_objetos.indb 289

289

15/12/2011 14:01:00

Universidade do Sul de Santa Catarina

Sntese
Nesta unidade, voc reforou o conceito de herana atravs de um
outro exemplo prtico.
Voc estudou sobre modelagem e implementou um sistema para
uma locadora de veculos. Nesse sistema identificou que existiam
dois tipos de objetos: Veculos Passeio e Veculos Carga e que
existia uma srie de atributos e comportamentos comuns entre
esses dois tipos de objetos.
Diante dessa situao, modelamos esses atributos e
comportamentos em comum dentro de uma classe genrica
chamada Veculo e os atributos e comportamentos especficos de
cada tipo de objeto foram modelagem em classes especficas.
A herana um recurso muito til na orientao a objetos porque
propicia a reutilizao de cdigo, evitando assim o retrabalho de
codificao.

290

prog_orient_objetos.indb 290

15/12/2011 14:01:00

Programao Orientada a Objeto

Atividades de autoavaliao
1) Implemente as classes modeladas no sistema da Administradora de
Imveis descrito na atividade da unidade anterior. Desenvolva um
sistema que permita:

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.

Unidade14

prog_orient_objetos.indb 291

291

15/12/2011 14:01:00

Universidade do Sul de Santa Catarina

Saiba mais
SILVA FILHO, ANTONIO MENDES DA, Introduo A
Programao Orientada A Objetos, Ed. Campus, 2010

292

prog_orient_objetos.indb 292

15/12/2011 14:01:00

Para concluir o estudo


Chegamos ao fim 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 prtica 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 foram dedicadas explanao
dos conceitos do paradigma orientado a objetos.
Esse paradigma prope uma forma de pensar e
implementar sistemas, em que devemos pensar e,
consequentemente, implementar o problema tal como
ele acontece no mundo real, identificando os objetos
que atuam nesse problema, identificando 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 final do curso, o
desenvolvimento de um sistema completo.
Espero que voc tenha gostado!!

prog_orient_objetos.indb 293

15/12/2011 14:01:00

prog_orient_objetos.indb 294

15/12/2011 14:01:00

Referncias
DEITEL, H.M.; DEITEL, P.J. Java - Como programar. Sexta Edio.
Ed. Pearson, 2005.
LEMAY, Laura; CADENHEAD, Rogers. Aprenda em 21 dias Java
1.2. Rio de Janeiro: Campus, 1999.
HORSTMANN, Cay S.; CORNELL, Gary. Core Java 2. So Paulo:
Makron Books, 2004.
HORSTMANN, Cay S. Big Java. Porto Alegre: Bookman, 2004.
The Java Tutorial - A practical guide for programmers.
Disponvel em: http://java.sun.com/tutorial
BOOCH, Grady; RUMBAUGH, James; JACOBSON, Ivar. UML Guia
do Usurio. Rio de Janeiro: Campus, 2000.
FOWLER, Martin; SCOTT, Kendall. UML essencial: um breve guia
para a linguagem-padro de modelagem de objetos. Segunda
Edio. Porto Alegre: Bookman, 2000.

prog_orient_objetos.indb 295

15/12/2011 14:01:00

prog_orient_objetos.indb 296

15/12/2011 14:01:00

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 297

15/12/2011 14:01:00

prog_orient_objetos.indb 298

15/12/2011 14:01:00

Respostas e comentrios das


atividades de autoavaliao
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 precisa 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 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 compilado 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 299

15/12/2011 14:01:01

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]

300

prog_orient_objetos.indb 300

15/12/2011 14:01:01

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

301

prog_orient_objetos.indb 301

15/12/2011 14:01:01

Universidade do Sul de Santa Catarina

Unidade 4
1) Desenvolver, em Java, TODOS os exerccios de autoavaliao da seo 1
da Unidade 5 da disciplina de Lgica de Programao I.
Resposta:

Algoritmo 1
import javax.swing.*;
public class Compra{
public static void main(String args[])
{
String CLIENTE;
int QTDHOT, QTDXEGG, QTDREFRI, QTDBATATA;
double PREHOT, PREXEGG, PREREFRI, PREBATATA,TOTAL;
// QTDHOT = Quantidade de Cachorro-Quente
// QTDXEGG = Quantidade de XEGG;
//QTDREFRI = Quantidade de Refrigerante;
//QTDBATATA = Quantidade de Batatas Fritas;
//TOTAL = Valor total comprado

CLIENTE=JOptionPane.showInputDialog(Digite o nome do cliente:);
QTDHOT= Integer.parseInt(JOptionPane.showInputDialog(Digite a quantidade de CachorroQuente:));
PREHOT= Double.parseDouble(JOptionPane.showInputDialog(Digite o preo do CachorroQuente:));
QTDXEGG= Integer.parseInt(JOptionPane.showInputDialog(Digite a quantidade de X-EGG:));

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

302

prog_orient_objetos.indb 302

15/12/2011 14:01:01

Programao Orientada a Objeto


Algoritmo 2
import javax.swing.*;
public class Aluno{
public static void main(String args[])
{
String nome, endereco,sexo, cidade, estado, nomedopai, nomedamae,telefonecontato;
String datadenascimento,grauescolar;
nome=JOptionPane.showInputDialog(Digite o nome do aluno:);
endereco= JOptionPane.showInputDialog(Digite o endereco:);
sexo= JOptionPane.showInputDialog(Digite o sexo:);
cidade= JOptionPane.showInputDialog(Digite a cidade:);
estado= JOptionPane.showInputDialog(Digite o estado:);
nomedopai= JOptionPane.showInputDialog(Digite o nome do pai:);
nomedamae= JOptionPane.showInputDialog(Digite o nome da me:);
telefonecontato= JOptionPane.showInputDialog(Digite o telefone:);
datadenascimento= JOptionPane.showInputDialog(Digite a data de nascimento:);
grauescolar= JOptionPane.showInputDialog(Digite o grau escolar:);

JOptionPane.showMessageDialog(null,Nome +nome);
JOptionPane.showMessageDialog(null,Endereco +endereco);
JOptionPane.showMessageDialog(null,Sexo +sexo);
JOptionPane.showMessageDialog(null,Cidade +cidade);
JOptionPane.showMessageDialog(null,Estado +estado);
JOptionPane.showMessageDialog(null,Nome do pai +nomedopai);
JOptionPane.showMessageDialog(null,Nome da mae +nomedamae);
JOptionPane.showMessageDialog(null,Telefone de contato +telefonecontato);
JOptionPane.showMessageDialog(null,Data de nascimento +datadenascimento);
JOptionPane.showMessageDialog(null,Grau escolar +grauescolar);
}
}

Algoritmo 3
import javax.swing.*;
public class Professor{
public static void main(String args[])
{
String nome, endereco, cidade, estado, cep ;
String datadenascimento,grauescolar, curso;
int rg;

nome=JOptionPane.showInputDialog(Digite o nome do aluno:);
endereco= JOptionPane.showInputDialog(Digite o endereco:);
cidade= JOptionPane.showInputDialog(Digite a cidade:);
estado= JOptionPane.showInputDialog(Digite o estado:);

303

prog_orient_objetos.indb 303

15/12/2011 14:01:01

Universidade do Sul de Santa Catarina

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

}
}

304

prog_orient_objetos.indb 304

15/12/2011 14:01:01

Programao Orientada a Objeto

Algoritmo 5
import javax.swing.*;
public class Conta{
public static void main(String args[])
{
double limite, saldoatual, valor;
String nomecor, nomebanco;
int numeroconta;

nomecor= JOptionPane.showInputDialog(Digite o nome do correntista:);
nomebanco= JOptionPane.showInputDialog(Digite o nome do banco:);
numeroconta= Integer.parseInt(JOptionPane.showInputDialog(Digite o numero da conta:));
limite=Double.parseDouble(JOptionPane.showInputDialog(Digite o limite:));
saldoatual=Double.parseDouble(JOptionPane.showInputDialog(Digite o saldo atual:));
//entrar com um valor de deposito (credito)
valor=Double.parseDouble(JOptionPane.showInputDialog(Digite o valor de deposito:));
saldoatual = saldoatual + valor;
JOptionPane.showMessageDialog(null,O saldo atual +saldoatual);

//entrar com um valor de saque (debito)
valor=Double.parseDouble(JOptionPane.showInputDialog(Digite o valor de saque:));
saldoatual = saldoatual - valor;
JOptionPane.showMessageDialog(null,O saldo atual +saldoatual);


}
}

Unidade 5
1) Desenvolver, em Java, todos os exerccios de autoavaliao da seo 2
da Unidade 5, da disciplina de Lgica de Programao I (Exerccios com
estrutura condicional)
Resposta:

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

305

prog_orient_objetos.indb 305

15/12/2011 14:01:01

Universidade do Sul de Santa Catarina

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

306

prog_orient_objetos.indb 306

15/12/2011 14:01:01

Programao Orientada a Objeto

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

307

prog_orient_objetos.indb 307

15/12/2011 14:01:01

Universidade do Sul de Santa Catarina

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

}
}

308

prog_orient_objetos.indb 308

15/12/2011 14:01:01

Programao Orientada a Objeto

Algoritmo 2: (Entrar com 20 nmeros e imprimir a soma dos positivos, e o total de nmeros
negativos)
import javax.swing.*;
public class PositivoNegativo{
public static void main(String args[])
{

int num;
int soma=0;
int cont=0;
for (int i=1;i<=20;i++){

num = Integer.parseInt(JOptionPane.showInputDialog(Digite o numero:));

if ( num > 0 )

soma = soma + num;

else

if (num < 0)

cont=cont + 1;
}
JOptionPane.showMessageDialog(null,Somatorio dos numeros positivos +soma);
JOptionPane.showMessageDialog(null,Total de numeros negativos +cont);
}

}
Algoritmo 3: Entrar com 10 nmeros (positivos ou negativos) e imprimir o maior e o menor)
import javax.swing.*;
public class MaiorMenor{
public static void main(String args[])
{

int num;
int maiornum=0;
int menornum=999999;
for (int i=1;i<=10;i++){

num = Integer.parseInt(JOptionPane.showInputDialog(Digite o numero:));

if ( num > maiornum )

maiornum = num;

if ( num < menornum )

menornum = num;
}
JOptionPane.showMessageDialog(null,O maior numero +maiornum);
JOptionPane.showMessageDialog(null,O menor numero +menornum);
}

}

309

prog_orient_objetos.indb 309

15/12/2011 14:01:01

Universidade do Sul de Santa Catarina

Algoritmo 4: (entrar com o nome, idade e sexo de 20 pessoas. Imprimir o nome, se a pessoa for do
sexo masculino e tiver mais de 21anos)
import javax.swing.*;
public class Maior21{
public static void main(String args[])
{
String nome,sexo;
int idade;
for (int i=1;i<=20;i++){

nome=JOptionPane.showInputDialog(Digite o nome do aluno:);

idade= Integer.parseInt(JOptionPane.showInputDialog(Digite o endereco:));

sexo= JOptionPane.showInputDialog(Digite o sexo:);

if ((idade > 21) && sexo.equalsIgnoreCase(masculino))

JOptionPane.showMessageDialog(null,Nome +nome);
}

}
}

Unidade 6
1) Faa um programa, em Java, que leia 3 nmeros e calcule a sua mdia.
O programa deve ser modularizado. Utilize uma funo para calcular e
retornar a mdia dos nmeros. Essa funo deve receber os trs nmeros
como parmetro.
Resposta:
import javax.swing.*;
public class FuncaoMedia{
public static void main(String args[])
{
int num1, num2, num3;
double media;

num1 = Integer.parseInt(JOptionPane.showInputDialog(Digite o primeiro numero:));
num2 = Integer.parseInt(JOptionPane.showInputDialog(Digite o segundo numero:));
num3 = Integer.parseInt(JOptionPane.showInputDialog(Digite o terceiro numero:));
media = calcMedia(num1,num2,num3);

JOptionPane.showMessageDialog(null,A media + media);

}

310

prog_orient_objetos.indb 310

15/12/2011 14:01:01

Programao Orientada a Objeto

//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
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 sub-rotina 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:));

311

prog_orient_objetos.indb 311

15/12/2011 14:01:01

Universidade do Sul de Santa Catarina

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

Unidade 7
1) Edite a classe Cliente no editor de texto (Bloco de Notas ou qualquer
ambiente para desenvolvimento de programas Java) e salve na pasta
CURSOWEBOO. Essa pasta deve ser criada anteriormente. Aps a edio
(digitao) compile a classe. O arquivo Cliente.class deve ter sido gerado.
Resposta: O cdigo j est na unidade.
2) Edite a classe UsaCliente no editor de texto. e salve na pasta
CURSOWEBOO. Aps a edio, compile a classe. O arquivo UsaCliente.
classe deve ter sido gerado. O ltimo passo executar a classe. Dessa
forma, voc ver funcionando seu primeiro programa orientado a objeto
desenvolvido na linguagem Java.
Resposta: O cdigo j est na unidade.
3) Cite exemplos de objetos do mundo real. Identifique atributos e
comportamentos para esses objetos. Agrupe esses objetos nas suas
respectivas classes. Faa isso usando a notao UML para classes e objetos.

312

prog_orient_objetos.indb 312

15/12/2011 14:01:01

Programao Orientada a Objeto

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

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

313

prog_orient_objetos.indb 313

15/12/2011 14:01:01

Universidade do Sul de Santa Catarina

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.

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.

314

prog_orient_objetos.indb 314

15/12/2011 14:01:01

Programao Orientada a Objeto

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

codigo=0;

nomerua= ;

bairro= ;
}
public void setCodigo(int icodigo)
{

codigo=icodigo;
}
public void setNomeRua(String snome)
{

nomerua=snome;
}
public void setBairro(String sbairro)
{

315

prog_orient_objetos.indb 315

15/12/2011 14:01:01

Universidade do Sul de Santa Catarina


bairro=sbairro;
}
public int getCodigo()
{

return codigo;
}
public String getNomeRua()
{

return nomerua;
}
public String getBairro()
{

return bairro;
}
}
// Implementao da classe Funcionrio (sem o atributo setor)
public class Funcionario
{
private String nome, end;
private double salario;
private Cep cep;
public Funcionario()
{

nome=;

end=;

salario=0;

cep=null;

}
public void setNome(String snome)
{

nome=snome;
}
public void setEnd(String send)
{

end=send;
}
public void setSalario(double dsalario)
{

salario=dsalario;
}
public void setCep(Cep ccep)
{

cep=ccep;
}
public String getNome()

316

prog_orient_objetos.indb 316

15/12/2011 14:01:01

{

return nome;
}
public String getEnd()
{

return end;
}

public double getSalario()
{

return salario;
}
public Cep getCep()
{

return cep;
}
}

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

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

int digCep=Integer.parseInt(JOptionPane.showInputDialog(Digite o cep do
funcionrio));;

prog_orient_objetos.indb 317

15/12/2011 14:01:02

Universidade do Sul de Santa Catarina


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

{

if (digCep==(c[j].getCodigo() ))

{

f[i].setCep(c[j]);

break;

}


}

}

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

{

JOptionPane.showMessageDialog(null, Nome:+ +f[i].getNome()+\
n+Rua:+ +f[i].getCep().getNomeRua()+\n+Bairro:+ +f[i].getCep().getBairro());

}

System.exit(0);

}
}

Unidade 12
1) A resposta a implementao (programao) do cdigo da unidade.

2) Desenvolva um sistema para armazenar informaes sobre professores


e disciplinas de instituio educacional.

Resposta:
//Implementao da classe Professor
public class Professor{
private String nome;
private String titumax;
private int ch;

public Professor ( ){

nome= ;

titumax= ;

ch= 0;
}

318

prog_orient_objetos.indb 318

15/12/2011 14:01:02

Programao Orientada a Objeto

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

319

prog_orient_objetos.indb 319

15/12/2011 14:01:02

Universidade do Sul de Santa Catarina

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 nome da disciplina));

d[i].setchdisc(Integer.parseInt(JOptionPane.showInputDialog(Digite a carga
horria da disciplina)));


/* 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;

}

}

320

prog_orient_objetos.indb 320

15/12/2011 14:01:02

Programao Orientada a Objeto


}


//opcao 2 - entra com o nome da disciplina e imprime o nome do professor que ministra
disciplina


String nomedisc=JOptionPane.showInputDialog(Digite o nome da disciplina);

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

{

if (nomedisc.equalsIgnoreCase(d[i].getnomedisc())) {

JOptionPane.showMessageDialog(null, Nome do professor: + d[i].getProf().
getnome());

break;

}

}

//opcao 3 - entra com o nome da titulacao do professor e imprime o nome de todos os
profes com essa titulaao


String titulacao=JOptionPane.showInputDialog(Digite a titulao do professor);

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

{

if (titulacao.equalsIgnoreCase(p[i].gettitumax())) {

JOptionPane.showMessageDialog(null, Nome do professor: + p[i].
getnome());

}

}

System.exit(0);
}
}

321

prog_orient_objetos.indb 321

15/12/2011 14:01:02

Universidade do Sul de Santa Catarina

Unidade 13
1) Desenvolva um sistema orientado a objetos para automatizar as
informaes de uma Administradora de Imveis.
Resposta:
Imovel
endereco: String
nomeproprietario: String
vendaaluguel:String
valor:double
Imovel()
setEndereco()
setProprietario()
setVendaAluguel()
setValor()
getEndereco()
getProprietario()
getVendaAluguel()
getValor()

Casa

Apto

piscina: String

andar: int
numeroapto:int

Casa()
setPiscina()
getPiscina()

Apto ()
setAndar()
setNumeroApto()
getAndar()
getNumeroApto()

322

prog_orient_objetos.indb 322

15/12/2011 14:01:02

Programao Orientada a Objeto

Unidade 14
1) Implemente as classes modeladas no sistema da Administradora de
Imveis descrito na atividade da unidade anterior.
Resposta:
//Implementao da classe Imvel
public class Imovel {
private String nomeproprietario;
private String endereco;
private String vendaaluguel;
private double valor;
public Imovel (){
nomeproprietario= ;
endereco=;
vendaaluguel=;
valor = 0;
}
public void setNomeProprietario ( String snome){
nomeproprietario=snome;
}
public void setEndereco ( String sendereco){

endereco=sendereco;
}
public void setVendaAluguel (String stipo){

vendaaluguel=stipo;
}
public void setValor ( double dvalor){

valor=dvalor;
}
public String getNomeProprietario(){

return nomeproprietario
;
}
public String getEndereo(){
return endereco;
}
public String getVendaAluguel(){
return vendaaluguel;
}
public double getValor(){

return valor;
}
}
// Implementao da classe Apto

323

prog_orient_objetos.indb 323

15/12/2011 14:01:02

Universidade do Sul de Santa Catarina

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.

324

prog_orient_objetos.indb 324

15/12/2011 14:01:02

Biblioteca Virtual
Veja a seguir os servios oferecidos pela Biblioteca Virtual aos
alunos a distncia:

Pesquisa a publicaes on-line


<www.unisul.br/textocompleto>

Acesso a bases de dados assinadas


<www.unisul.br/bdassinadas>

Acesso a bases de dados gratuitas selecionadas


<www.unisul.br/bdgratuitas >

Acesso a jornais e revistas on-line


<www.unisul.br/periodicos>

Emprstimo de livros
<www.unisul.br/emprestimos>

Escaneamento de parte de obra*

Acesse a pgina da Biblioteca Virtual da Unisul, disponvel no EVA,


e explore seus recursos digitais.
Qualquer dvida escreva para: bv@unisul.br

* Se voc optar por escaneamento de parte do livro, ser lhe enviado o


sumrio da obra para que voc possa escolher quais captulos deseja solicitar
a reproduo. Lembrando que para no ferir a Lei dos direitos autorais (Lei
9610/98) pode-se reproduzir at 10% do total de pginas do livro.

prog_orient_objetos.indb 325

15/12/2011 14:01:02