Buscar

Apostila - POO com java

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 18 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 18 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 18 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

AAPPOOSSTTIILLAA DDEE 
 
OORRIIEENNTTAAÇÇÃÃOO AA OOBBJJEETTOOSS 
 
CCOOMM JJAAVVAA 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
PROFª. GILENE DO ESP. STO. BORGES GOMES 
MESTRA EM CIÊNCIA DA COMPUTAÇÃO 
gilene@gomeshp.com 
http://www.gomeshp.com 
 
 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 2 
nome do objeto : nome da classe 
 
atributo 1 = valor 
atributo 2 = valor 
1. Introdução a Orientação a Objetos 
 
 
“Uma abordagem típica usada no desenvolvimento de programas complexos consiste em 
decompor os programas em diversos módulos e dividir cada módulo em diversas funções. Cada 
função é responsável por parte da solução do problema. Esta abordagem de desenvolvimento se 
baseia na decomposição funcional. Embora a decomposição funcional tenha sido amplamente 
utilizada nos últimos anos, apresenta algumas deficiências, tais como o fraco acoplamento entre 
dados e funções. 
 
A orientação a objetos é uma tecnologia de desenvolvimento composta por metodologias e 
linguagens usadas na análise, no projeto e na implementação de programas. Apesar de existir a 
décadas, só recentemente a orientação a objetos adquiriu popularidade. Em parte esta popularidade 
decorre do uso crescente de interfaces gráficas e da arquitetura distribuída dos programas atuais, 
características que são adequadamente suportadas pela orientação a objetos. 
 
Os programas desenvolvidos usando-se a orientação a objetos são compostos por módulos 
cujos dados e funções são fortemente acoplados. Estes módulos são denominados “objetos” e, em 
cada um deles, temos dados e funções. As funções são denominadas “métodos” e contêm o código 
responsável pelos serviços providos pelos objetos. Os dados, por sua vez, só podem ser acessados 
através do código presente nos métodos do objeto. Por isso, costuma-se dizer que os dados são 
encapsulados“. 
 
Fernando Albuquerque. 
 
 Os principais conceitos de orientação a objetos são: objetos, classes, atributos, métodos, 
mensagens, abstração e encapsulamento, descritos a seguir: 
 
1.1. Objetos 
 
 Um objeto representa um ‘elemento’ que pode ser identificado de maneira única. Em nível 
apropriado de abstração1, praticamente tudo pode ser considerado como objeto. Assim, elementos 
específicos como pessoas, organizações, máquinas ou eventos podem ser considerados objetos. 
 
 Um objeto tem estado, comportamento e identidade; a estrutura e comportamento de objetos 
similares são definidos em suas classes comuns. 
 
 Um objeto é a instância de uma classe. Os objetos que são instâncias de uma mesma classe 
armazenam os mesmos tipos de informações e apresentam o mesmo comportamento. 
 
 A seguir são apresentadas três notações para representar um objeto: 
 
 
 
 
 
 
 
 
1 Exame seletivo de determinados aspectos de um problema. 
nome do objeto 
nome do objeto : nome da classe 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 3 
1.2. Classes 
 
 As classes são tipos de objetos que descrevem as informações armazenadas e os serviços 
(métodos) providos por um objeto. Em outras palavras, são padrões a partir dos quais os objetos são 
criados. Uma classe é um conjunto de objetos que compartilham uma estrutura comum (atributos) e 
um procedimento comum (operações). 
 
 Duas notações para representar uma classe são apresentadas a seguir: 
 
 
 
 
 
 
 
 
 As classes são organizadas em níveis hierárquicos compartilhando estruturas e comportamentos 
comuns e são associadas a outras classes. As classes definem os valores de atributos relativos a cada 
instância de objetos e os métodos que cada objeto executa ou a que se submete. 
 
1.3. Atributos 
 
 Os atributos são as características do objeto. Cada atributo tem um valor para cada instância 
do objeto. Este valor deve ser um valor de dado puro, não um objeto. 
 
Para cada atributo, deve ser definido um nome e o tipo de dado. Opcionalmente, pode ser 
definido um valor default. Os atributos são representados no segundo terço da notação gráfica de 
classe. Na notação gráfica de objetos, estes devem ser representados com os respectivos valores de 
atributos. 
 
Indivíduo 
+ cod_indiv: long 
+ sexo: M ou F 
+ data_nasc: data 
 
 
 
1.4. Métodos 
 
 Operações ou métodos são as funções ou transformações que podem ser aplicados em ou por 
um objeto numa classe. Todos os objetos numa classe compartilham os mesmos métodos. Cada 
método tem um objeto alvo como um argumento implícito. Um método pode ter argumentos em 
adição ao seu objeto alvo, os quais parametrizam o método. 
 O método é parte da classe e não parte do objeto. O método pode não ser parte da classe; mas 
ser uma herança2 de uma superclasse na hierarquia de classes. 
 
 Exemplo de classes com alguns de seus atributos e métodos. 
 
 
2 Descreve o relacionamento entre classes definidas a partir de outras classes. 
nome da classe 
 
atributos (opcional) 
 
métodos (opcional) 
nome da classe 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 4 
TocaFitas Avião 
- marca : char[30] 
- modelo : char[40] 
- ano : char[4] 
- proprietário : char[50] 
- situação : char[1] 
 - marca : char[30] 
- modelo : char[40] 
- ano : char[4] 
- situação : char[1] 
+ ligar() 
+ gravar() 
+ tocar() 
+ parar() 
+ desligar() 
 + decolar() 
+ aterrizar() 
+ planar() 
+ ligarMotor() 
+ acelerar() 
+ frear() 
 
Polígono 
- vértice : int 
- corBorda : char[40] 
- corInterior : char[40] 
+ desenhar() 
+ apagar() 
+ mover() 
 
1.5. Classes x Objetos 
 
Para criar um objeto é necessário criar uma classe e instanciar um objeto a partir da classe 
criada. Com um molde são gerados vários objetos parecidos, onde todos os objetos possuem os 
mesmos atributos e os mesmos métodos (implementação dos métodos é a mesma para todos os 
objetos). Entretanto, os valores dos atributos podem ser modificados por cada objeto. 
 
Quando uma instância da classe é gerada, um objeto é criado e o sistema aloca memória para 
seus atributos. 
 
A seguir é apresentada uma classe e duas de suas instâncias: 
 
Classe: Empregado 
atributos: 
 nome 
 endereço 
 salário 
métodos: 
 atualizar(nome, end, salário) 
 buscarDados() 
Objeto: Empregado A 
atributos: 
 nome = João 
 endereço = R. Maria 12 
 salário = R$ 300,00 
métodos: 
 atualizar(nome, end, salário) 
 buscarDados() 
Objeto: Empregado B 
atributos: 
 nome = Ana 
 endereço = R. D. José 30 
 salário = R$ 400,00 
métodos: 
 atualizar(nome, end, salário) 
 buscarDados() 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 5 
1.6. Visibilidade de atributos e métodos 
 
A visibilidade define como será o acesso ao atributo ou ao método, e pode ser de três tipos: 
pública, protegida ou privada. 
 
+ visibilidade pública: significa que todos têm acesso podendo o atributo e/ou método ser 
utilizado por métodos declarados dentro de outras classes. É parte da interface de uma classe e é 
visível por qualquer porção do ambientede sua referência; 
 
# visibilidade protegida: significa que o atributo e/ou método é acessado através de métodos 
dentro da mesma classe e por métodos de classes ao longo do pacote no qual a classe é definida; 
 
- visibilidade privada: declaração que é parte da interface de uma classe, mas não é visível a 
quaisquer outras classes – o atributo e/ou método pode apenas ser acessado por métodos declarados 
dentro da mesma classe. 
 
Cliente 
+ cod_cliente: long 
# sit_cliente: long 
- lim_credito: long 
 
+ obter_limite( ) : float 
# bloquear_cliente( ) 
- cancelar_cliente( ) 
 
 
1.7. Mensagens 
 
 Os objetos se comunicam entre si através da mensagem. A mensagem especifica que um 
determinado método de um objeto necessita utilizar um ou mais métodos de outro objeto. Podem ser 
passados objetos como parâmetro, e, opcionalmente, algum resultado ou valor pode ser retornado. As 
mensagens especificam que os métodos devem ser executados, não como estes métodos devem ser 
executados. 
Quando um objeto A quer que o objeto B faça uma ação, o objeto A envia uma mensagem ao 
objeto B: “A pede para B fazer Ação” = “A pede para B executar Método 1” 
 
MENSAGEM 
 
 
 
 
 
 
 
 
 
 
 
 
Objeto B Objeto A 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 6 
1.8. Abstração 
 
Abstração é o exame seletivo de determinados aspectos de um problema. O objetivo da 
abstração é isolar os aspectos que sejam importantes para algum propósito e suprimir os que não o 
forem. A abstração deve sempre visar a um propósito, porque este determina o que é e o que não é 
importante. 
 
Abstração é o processo de extrair as características essenciais de um objeto real. A abstração é 
necessária para se ter um modelo fiel da realidade sobre o qual se possa operar. O conjunto de 
características resultante da abstração forma um tipo de dados abstrato com informações sobre seu 
estado e comportamento. 
 
A abstração nem sempre produz os mesmos resultados, depende do contexto onde é utilizada, 
ou seja, a abstração de um objeto por uma pessoa pode ser diferente na visão de outra. Por exemplo, 
para um mecânico, um carro é caracterizado pela marca, modelo, potência, cilindradas, etc. Já um 
usuário comum pode caracterizá-lo pela cor, marca, modelo, consumo e preço. E finalmente, para o 
Departamento de Trânsito, um carro pode ser totalmente caracterizado pela placa, proprietário, marca, 
modelo, cor e número de chassi. Veja a ilustração abaixo. 
 
Ponto de vista 
do mecânico do usuário do Dep. trânsito 
 
Carro Carro Carro 
- marca : char[40] 
- modelo : char[40] 
- potencia : int 
- cilindradas : int 
 - marca : char[40] 
- modelo : char[40] 
- cor : char[20] 
- consumo : float 
- preco : float 
- placa : char[7] 
 - marca : char[40] 
- modelo : char[40] 
- cor : char[20] 
- dono : char[50] 
- chassi : char[20] 
- placa : char[7] 
 
 
 
 
Vamos supor que você vai escrever um aplicativo para uma transportadora que trabalha 
exclusivamente para uma livraria e cobra por livro, apesar do custo ser baseado no peso. É possível ter 
uma boa noção do peso de um livro sabendo o número de páginas, o formato e o tipo de capa (dura ou 
mole). Portanto, você poderá criar um objeto Livro que tenha essas três características. Já se você 
também for escrever um aplicativo semelhante para a livraria, não poderá aproveitar o mesmo objeto 
Livro que você criou, pois a abstração é diferente. Para a livraria, interessam características como 
autor, título, assunto, editora, preço, etc. que não interessam à transportadora. 
 
 Um outro exemplo é sobre o corpo 
humano, veja a figura a seguir; para 
cada abstração, o foco para observação 
é diferente. 
 
 
 
 
 
 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 7 
1.9. Encapsulamento 
 
O encapsulamento é justamente o 
empacotamento dos atributos e dos métodos 
numa mesma classe. Isto protege os dados 
contra corrupção, pois somente os métodos 
da classe poderão alterar as estruturas de 
dados desta classe em questão, ilustradas 
pela figura. 
 
Por exemplo, existe um número determinado de coisas que se pode fazer com um toca-fitas. 
Pode-se avançar, voltar, gravar, tocar, parar, interromper e ejetar a fita. Dentro do toca-fitas, porém, há 
várias outras funções sendo realizadas como: acionar o motor, desligá-lo, acionar o cabeçote de 
gravação, liberar o cabeçote, e outras operações mais complexas. Essas funções são escondidas dentro 
do mecanismo do toca-fitas e não é possível acessá-las diretamente. Quando o botão play é apertado, o 
motor é ligado e o cabeçote de reprodução acionado, não sendo necessário saber como isso é feito para 
usar o toca-fitas. 
 
Uma das principais vantagens do encapsulamento é esconder a complexidade do código. Outra, 
é proteger os dados. Permitindo o acesso a eles apenas através de métodos evita que seus dados sejam 
corrompidos por aplicações externas. 
 
No exemplo do toca-fitas, quando é utilizado o método gravar, sabe-se que o aparelho irá 
gravar informações na fita em um formato padrão que poderá ser lido por outros aparelhos similares. 
Se não existisse o método gravar e fosse necessário acessar direto à fita, cada pessoa poderia 
estabelecer uma maneira diferente de gravar informações (usando laser, ímãs, etc.). Gravar uma fita 
passaria a ser uma tarefa complicada, pois o usuário teria que conhecer toda a complexidade do 
aparelho. Depois, se perderia a compatibilidade, pois não haveria uma forma de proteger os dados para 
que fossem sempre gravados em um formato padrão. O encapsulamento, então, funciona tanto para 
proteger os dados, como para simplificar o uso de um objeto. 
 
Há vários exemplos na programação. Os aplicativos conhecidos que rodam no Windows têm 
uma grande semelhança porque usam os mesmos objetos. Cada objeto tem um número limitado de 
funções (métodos) que podem ser invocados sobre ele. Se você decide usar, em alguma parte do seu 
programa, dois botões: OK e Cancela, você não precisa entender como ele foi escrito, nem saber quais 
as suas variáveis internas. Basta saber como construí-lo, mudar o texto que contém e depois incluí-lo 
em seu programa. Não há como corromper a estrutura interna do botão. 
 
1.10. Porque usar objetos? 
 
As vantagens de se usar objetos como blocos para a construção de aplicações são muitas. Pode-
se citar: 
? Simplicidade: os objetos escondem a complexidade do código. Pode-se criar uma 
complexa aplicação gráfica usando botões, janelas, barras de rolamento, etc., sem conhecer 
a complexidade do código utilizado para criá-los. 
? Reutilização de código: um objeto, depois de criado, pode ser reutilizado por outras 
aplicações, ter suas funções estendidas e serem usados como blocos fundamentais em 
sistemas mais complexos. 
? Integridade dos dados: devido ao uso do encapsulamento. 
 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 8 
1.11. Introdução a Orientação a Objetos com Java 
 
1.11.1. 1º Exemplo: 
 
1. public class JavaOO_0101 { 
2. private float base; 
3. private float alt; 
 
4. public void iniciar(float b, float a) { 
5. base = b; 
6. alt = a; 
7. } 
 
8. public void mostrarArea() { 
9. System.out.println("\nArea = " + base * alt); 
10. } 
 
11. publicstatic void main (String args[]) { 
12. JavaOO_0101 x = new JavaOO_0101(); 
13. x.iniciar(10, 2); 
14. x.mostrarArea(); 
15. JavaOO_0101 y = new JavaOO_0101(); 
16. y.iniciar(5, 3); 
17. y.mostrarArea(); 
18. } 
19. } 
 
 
A seguir será descrito a explicação geral do programa, o que cada linha executa: 
 
1. Declarada a classe com nome JavaOO_0101 com qualificador public, que significa que 
a classe é pública; acessível por qualquer outra classe. 
2. Criado o atributo base do tipo real e privado. 
3. Criado o atributo alt do tipo real e privado. 
4. Criado o método iniciar que recebe dois parâmetros reais; o método é público. 
5. O atributo base recebe o valor do parâmetro b, enviado pelo método main( ). 
6. O atributo alt recebe o valor do parâmetro a, enviado pelo método main( ). 
 
8. Criado o método público mostrarArea. 
9. Apresentação do cálculo da área do retângulo, com referência aos valores dos atributos do 
objeto. 
 
11. O método main torna a classe executável e por ele é iniciada a execução do programa. 
12. Criada uma instância da classe JavaOO_0101 com nome x, através da palavra reservada 
new. 
13. Execução do método iniciar para o objeto x, passando 10 e 2 como parâmetros. 
14. Execução do método mostrarArea para o objeto x. 
15. Criada uma instância da classe JavaOO_0101 com nome y, através da palavra reservada 
new. 
16. Execução do método iniciar para o objeto y, passando 5 e 3 como parâmetros. 
17. Execução do método mostrarArea para o objeto y. 
 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 9 
1.11.2. 2º Exemplo: 
 
1. import javax.swing.JOptionPane; 
2. public class JavaOO_0102 { 
3. private float altura; 
4. private float largura; 
5. public void lerDados() { 
6. altura = Float.parseFloat( 
7. JOptionPane.showInputDialog("Digite a altura: ")); 
8. largura = Float.parseFloat( 
9. JOptionPane.showInputDialog("Digite a largura: ")); 
10. } 
11. public void calcularPerimetro() { 
12. float perim = 2 * (altura + largura); 
13. JOptionPane.showMessageDialog(null, 
14. "Perímetro = " + perim); 
15. } 
16. public static void main (String args[]) { 
17. JavaOO_0102 ret1 = new JavaOO_0102(); 
18. JavaOO_0102 ret2 = new JavaOO_0102(); 
19. ret1.lerDados(); 
20. ret1.calcularPerimetro(); 
21. ret2.lerDados(); 
22. ret2.calcularPerimetro(); 
23. System.exit(0); 
24. } 
25. } 
 
A seguir será descrito a explicação geral do programa, o que cada linha executa: 
 
1. Inclui no programa a definição da classe JOptionPane, para possibilitar o uso de 
seus métodos; 
2. Declarada a classe com nome JavaOO_0102 com qualificador public, que 
significa que a classe é pública; acessível por qualquer outra classe; 
3. Criado o atributo altura do tipo real e privado; 
4. Criado o atributo largura do tipo real e privado; 
5. Criado o método lerDados para que o usuário digite os valores dos atributos; 
6. O atributo altura recebe o valor transformado em float, que foi digitado; 
7. O método showInputDialog permite a entrada de dados como caracteres; 
8. O atributo largura recebe o valor transformado em float, que foi digitado; 
 
11. Criado o método público calcularPerimetro; 
12. A variável local perim recebe o cálculo do perímetro; 
13. Apresentação do cálculo do perímetro através do método showMessageDialog; 
 
16. O método main torna a classe executável e por ele é iniciada a execução do 
programa; 
17. Criada uma instância da classe JavaOO_0102 com nome ret1; 
19. Execução do método lerDados para o objeto ret1; 
20. Execução do método calcularPerimetro para o objeto ret1. 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 10 
1.12. Exercícios 01 
 
1. Qual é a principal diferença entre o desenvolvimento de sistemas utilizando a decomposição 
funcional e o desenvolvimento de sistemas utilizando objetos? 
2. Quais são os principais conceitos da Orientação a Objetos? 
3. Quais são as vantagens da Orientação a Objetos? 
4. Defina classe e objeto? O que são atributos e métodos? 
5. Em OO o que especifica uma mensagem? 
6. Quais são as possíveis formas de definir o acesso de um atributo ou método? Quais são as 
diferenças? 
7. Quais as vantagens do encapsulamento? 
8. Qual é o objetivo da abstração? 
 
 
9. Defina as classes, com seus atributos e métodos, para os objetos abaixo: 
a) um gato 
b) Gol, carro de uma pessoa 
c) "Conceitos de Orientação a Objetos", livro a venda em uma livraria 
d) Maria, professora em uma universidade 
e) "Engenharia de software", livro em uma biblioteca 
f) Corsa, carro a venda em uma concessionária 
g) João, funcionário de uma universidade 
h) uma janela do Windows 
 
 
10. Crie duas abstrações para cada um dos objetos a seguir: 
a) Carro: uma para a concessionária e outra para o departamento de trânsito; 
b) Pessoa: uma para o patrão e outra para a agência de viagens; 
c) Boi: uma para o dono e outra para o frigorífico; 
d) Cachorro: uma para o biólogo e outra para o proprietário. 
 
 
11. Quanto aos conceitos de orientação a objetos, marque V ou F. 
a.( ) Um método privado pode ser acessado diretamente por qualquer objeto de outra 
classe. 
b.( ) A definição de uma classe reserva espaço de memória para conter todos os seus 
atributos. 
c.( ) Um método público pode ser acessado por qualquer método público de sua classe. 
d.( ) Um método privado pode ser acessado diretamente por qualquer objeto da classe 
correspondente. 
e.( ) Os atributos de uma classe devem ser do tipo private; para estar de acordo com a 
OO pura. 
f.( ) Um método público pode ser acessado por qualquer método público de outra 
classe. 
 
 
 
 
 
 
 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 11 
12. Implementar em Java uma classe paralelepípedo que 
possui três atributos: altura, largura e comprimento e três 
métodos para: 
 a) solicitar as medidas do paralelepípedo; 
 b) calcular e mostrar o volume 
 (Volume = altura * largura * comprimento); 
 c) calcular e mostrar a área 
 (Área = 2 * (altura * largura + altura * comprimento + 
largura * comprimento)); 
 O programa deve criar dois paralelepípedos, ler seus 
valores e mostrar suas áreas e seus volumes. 
 
 
 
13. Usando Java, criar uma classe ContaBancaria que possui 
quatro atributos: numero, agencia, cliente e saldo e quatro 
métodos para: 
 a) entrada de todos os dados da conta; 
 b) apresentar os dados da conta; 
 c) realizar saque do valor informado, se houver saldo; caso 
contrário, mostrar mensagem de saldo insuficiente; 
 d) realizar depósito do valor informado. 
 O programa deve criar um objeto e chamar todos os 
métodos. Escolha a ordem de execução e a quantidade de 
vezes que cada método será executado. 
 
 
 
14. Criar em Java uma classe Funcionário e implementar os 
métodos apresentados ao lado. O programa deve criar um 
objeto da classe declarada e executar os seus métodos. 
Escolha a ordem e a freqüência de execução dos métodos. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Paralelepipedo 
- altura : float 
- largura : float 
- comprimento : float 
+ solicitarMedidas() 
+ mostrarVolume() 
+ mostrarArea() 
ContaBancaria 
- numero : char[10] 
- agencia : char[10] 
- cliente : char[50] 
- saldo: float 
+ entrarDados() 
+ mostrarDados() 
+ sacar() 
+ depositar() 
Funcionario 
- cpf : char[11] 
- nome : char[50] 
- horasTrab : float 
- valorHora : float 
+ entrarDados() 
+ mostrarDados() 
+ calcularSalario() 
+ alterarHoras() 
+ alterarValor() 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 12 
2. Método Construtor e Polimorfismo 
 
2.1. Métodos Construtores 
 
Os métodos construtores são criados para garantir que os objetos serão inicializados de forma 
correta. Pode haver, numa mesma classe, vários métodos construtores, entretanto, é necessário que 
cada um tenha uma quantidade diferente de parâmetros ou que os tipos de parâmetros sejam diferentes. 
 
O construtor tem o mesmo nome da classe; e é sempre executado quando o objeto é criado. Um 
método construtor default é o método sem parâmetros. O método construtor não retorna valor e não 
pode ser chamado diretamente. 
 
Observe os exemplos a seguir: 
 
1. public class Livro0 { 
2. private String titulo; 
3. private int pag; 
4. private float preco; 
 
5. public void mostrarDados() { 
6. System.out.println("Título = " + titulo + "\nPáginas = " + 
7. pag + "\nPreço = " + preco); 
8. } 
 
9. public static void main(String args[]) { 
10. Livro0 liv = new Livro0(); 
11. liv.mostrarDados(); 
12. System.exit(0); 
13. } 
14. } 
 
1. public class Livro0 { 
2. private String titulo; 
3. private int pag; 
4. private float preco; 
 
5. public Livro() { 
6. titulo = "OO com Java"; 
7. pag = 459; 
8. preco = (float)312.56; 
9. } 
 
10. public void mostrarDados() { 
11. System.out.println("Título = " + titulo + "\nPáginas = " + 
12. pag + "\nPreço = " + preco); 
13. } 
 
14. public static void main(String args[]) { 
15. Livro0 liv = new Livro0(); 
16. liv.mostrarDados(); 
17. System.exit(0); 
18. } 
19. } 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 13 
Nota-se que a diferença entre eles é que no primeiro exemplo não foi definido um método 
construtor; assim, o construtor executado é o default, onde os atributos são inicializados com zero para 
tipos de dados numéricos e vazio para caracteres. 
 
 A saída de dados do primeiro exemplo é: 
Título = 
Páginas = 0 
Preço = 0.0 
 
No segundo exemplo, o método construtor foi definido e será executado quando for instanciada 
a classe (na linha 15). Ou seja, os atributos serão inicializados com os valores definidos no método 
construtor. 
 
 A saída de dados do segundo exemplo é: 
Título = OO com Java 
Páginas = 459 
Preço = 312.56 
 
2.2. Polimorfismo 
 
Polimorfismo é a capacidade de um objeto enviar uma mensagem genérica para muitos outros 
objetos; ou seja, um mesmo nome de método é usado em diferentes classes ou usado na mesma classe 
com quantidade de parâmetros diferentes ou tipos de parâmetros diferentes. 
 
Quando o método polimórfico estiver na mesma classe, o objeto saberá qual método executar 
pela quantidade de parâmetros passados na chamada, porque é necessário especificar os parâmetros a 
serem utilizados. Logicamente, métodos polimórficos possuem implementações diferentes. 
 
Ao criar o objeto, o método construtor a ser executado dependerá da quantidade de parâmetros 
passados na criação. Observando o exemplo abaixo, nota-se que na linha 15, a criação do objeto ret1 
será feita a chamada ao método construtor Retangulo da linha 7 porque foram passados dois 
parâmetros. E na chamada na linha 16, a criação do objeto ret2 será feita a chamada ao método 
construtor Retangulo da linha 3 porque não foram passados parâmetros. 
 
1. public class Retangulo { 
2. private float base, alt; 
3. public Retangulo() { 
4. base = 5; alt = 20; 
5. } 
6. public Retangulo(float b, float a) { 
7. base = b; alt = a; 
8. } 
9. public void mostrarArea() { 
10. System.out.println("\nÁrea = " + base * alt); 
11. } 
12. public static void main(String args[]) { 
13. Retangulo ret1 = new Retangulo(10,2); 
14. Retangulo ret2 = new Retangulo(); 
15. ret1.mostrarArea(); 
16. ret2.mostrarArea(); 
17. System.exit(0); 
18. } 
19. } 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 14 
Observando o exemplo abaixo, nota-se que na linha 22 há uma chamada ao método 
imprimirCheque e será executado o método polimórfico da linha 14 porque não foi passado 
parâmetros. E na chamada da linha 24 será executado o método polimórfico da linha 17 porque foi 
passado o número 10 como parâmetro. 
 
1. public class Conta { 
2. private String nConta, nAgencia; 
3. private float saldo; 
4. private int numCheque; 
 
5. public Conta() { 
6. nConta = "1034-5"; 
7. nAgencia = "234-X"; 
8. saldo = 100000; 
9. numCheque = 85534; 
10. } 
 
11. public void mostrarCheque() { 
12. System.out.println("\nNº Cheque: " + numCheque); 
13. } 
 
14. public void imprimirCheque() { 
15. numCheque = numCheque + 20; 
16. } 
 
17. public void imprimirCheque( int qtd ) { 
18. numCheque = numCheque + qtd; 
19. } 
 
20. public static void main(String args[]) { 
21. Conta cta = new Conta(); 
 
22. cta.imprimirCheque(); 
23. cta.mostrarCheque(); 
24. cta.imprimirCheque(10); 
25. cta.mostrarCheque(); 
 
26. System.exit(0); 
27. } 
28. } 
 
 
Havendo métodos polimórficos em classes diferentes; o objeto saberá qual método executar, 
porque ele executará o método de sua classe. Observando o exemplo a seguir, nota-se que existe dois 
métodos polimórficos mostrarArea(), um na classe Reta e outro na classe Para. Na linha 36 a 
chamada ao método executará os comandos da linha 10, porque o objeto é da classe Reta. Na linha 37 
a chamada ao método executará os comandos da linha 25, porque o objeto é da classe Para. 
 
 
 
 
 
 
 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 15 
1. import javax.swing.JOptionPane; 
2. class Reta { 
3. private float base, altura; 
 
4. public Reta() { 
5. base = Float.parseFloat( 
6. JOptionPane.showInputDialog("Base: ")); 
7. altura = Float.parseFloat( 
8. JOptionPane.showInputDialog("Altura: ")); 
9. } 
 
10. public void mostrarArea() { 
11. JOptionPane.showMessageDialog(null, 
12. "Área do Retângulo = " + (base * altura)); 
13. } 
14. } 
 
15. class Para { 
16. private float altura, largura, compr; 
 
17. public Para() { 
18. altura = Float.parseFloat( 
19. JOptionPane.showInputDialog("Altura: ")); 
20. largura = Float.parseFloat( 
21. JOptionPane.showInputDialog("Largura: ")); 
22. compr = Float.parseFloat( 
23. JOptionPane.showInputDialog("Comprimento: ")); 
24. } 
 
25. public void mostrarArea() { 
26. float area = 2 * (altura * largura + 
27. altura * compr + largura * compr); 
28. JOptionPane.showMessageDialog(null, 
29. "Área do Paralelepipedo = " + area); 
30. } 
31. } 
 
32. public class Poli01 { 
33. public static void main (String args[]) { 
34. Reta reta1 = new Reta(); 
35. Para para1 = new Para(); 
 
36. reta1.mostrarArea(); 
37. para1.mostrarArea(); 
 
38. System.exit(0); 
39. } 
40. } 
 
 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 16 
2.3. Exercícios 01 
 
? O que será apresentado pelo programa abaixo: 
 
class CA { 
 public CA() { System.out.println("ASTRA"); } 
 public void MA1() { System.out.println("CORSA"); } 
 public void MA2() { System.out.println("VECTRA"); } 
} 
class CB { 
 public CB() { System.out.println("POLO"); } 
 public void MB1() { System.out.println("GOL"); } 
 public void MA2() { System.out.println("GOLF"); } 
} 
public class JavaOO_0201 { 
 public static void main(String args[]) { 
 CA a = new CA(); 
 CB b = new CB(); 
 a.MA1(); 
 a.MA2(); 
 b.MB1(); 
 b.MA2(); 
 } 
} 
 
 
? O que será apresentado pelo programa abaixo: 
 
class COR { 
 public COR() { System.out.println("PRETO"); } 
 public COR(int x) { System.out.println("ROSA"); } 
 public void COLORIR() { System.out.println("BRANCO");} 
} 
class CORES { 
 public CORES() { System.out.println("AMARELO"); } 
 public void COLORIR() { System.out.println("AZUL"); } 
} 
public class JavaOO_0202 { 
 public static void main(String args[]) { 
 CORES a = new CORES(); 
 COR b = new COR(1); 
 a.COLORIR(); 
 COR c = new COR(); 
 c.COLORIR(); 
 b.COLORIR(); 
 } 
} 
 
 
 
 
 
 
 
 
 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 17 
? Dadas as seguintes classes, o que será apresentado pelo programa abaixo: 
 
class Uni { 
 public Uni() { System.out.println("ZERO"); } 
 public Uni(int x) { System.out.println("UM"); } 
 public void write() { System.out.println("DOIS"); } 
 public void read() { System.out.println("TRES"); } 
} 
 
class Dez { 
 public Dez(int y) { System.out.println("ONZE"); } 
 public Dez(String z) { System.out.println("DOZE"); } 
 public void write() {System.out.println("DEZESSETE");} 
 public void read() { System.out.println("DUZENTOS"); } 
} 
 
public class JavaOO_0203 { 
 public static void main(String args[]) { 
 Uni uni1 = new Uni(); 
 Uni uni2 = new Uni(1); 
 Dez dez2 = new Dez(10); 
 Dez dez3 = new Dez("10"); 
 uni1.write(); 
 dez2.read(); 
 uni2.read(); 
 dez3.write(); 
 } 
} 
 
 
? Com base nas classes Uni e Dez do exercício anterior, o que será 
apresentado pelo programa abaixo: 
 
public class JavaOO_0204 { 
 public static void main(String args[]) { 
 Dez dez1 = new Dez(10); 
 Uni uni1 = new Uni(); 
 Uni uni2 = new Uni(1); 
 Dez dez2 = new Dez("10"); 
 dez2.write(); 
 uni2.read(); 
 uni1.write(); 
 dez1.read(); 
 } 
} 
 
 
 
 
 
 
 
 
 
 
 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 18 
? Dadas as seguintes classes, o que será apresentado pelo programa abaixo: 
 
class Circulo { 
 protected int raio; 
 
 public Circulo(int r) { raio = r; } 
 
 public Circulo() { 
 raio = 0; 
 mostrar(); } 
 
 public void circular(int v1, int v2) { 
 raio = v1 + v2; 
 mostrar(); } 
 
 public void mostrar() { 
 System.out.println("Círculo = " + raio); } 
} 
 
class Esfera { 
 protected int raio; 
 
 public Esfera(int r) { 
 raio = r * 4; 
 mostrar(); } 
 
 public void circular(int v1) { 
 raio = v1 * 5; 
 mostrar(); } 
 
 public void desenhar() { 
 System.out.println("desenhando"); } 
 
 public void mostrar() { 
 System.out.println("Esfera = " + raio); } 
} 
 
public class JavaOO_0205 { 
 public static void main(String args[]) { 
 Circulo circulo1 = new Circulo(); 
 circulo1.circular(10,20); 
 Esfera esfera2 = new Esfera(83); 
 esfera2.circular(3); 
 Circulo circulo2 = new Circulo(9); 
 circulo2.circular(3,5); 
 esfera2.desenhar(); 
 esfera2.circular(7); 
 circulo2.circular(4,6); 
 } 
} 
 
 
 
 
 
 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 19 
? Com base nas classes Circulo e Esfera do exercício anterior, o que será 
apresentado pelo programa abaixo : 
 
public class JavaOO_0206 { 
 public static void main(String args[]) { 
 Esfera esfera1 = new Esfera(8); 
 esfera1.circular(5); 
 Circulo circulo1 = new Circulo(); 
 circulo1.circular(4,8); 
 Circulo circulo2 = new Circulo(10); 
 circulo2.circular(15,7); 
 esfera1.circular(7); 
 circulo1.circular(2,9); 
 esfera1.desenhar(); 
 } 
} 
 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 20 
++ EExxSSttaattiicc((iinntt nn)) 
++ mmoossttrraarr(()) 
++ qquuaannttiiffiiccaarr(()) 
-- nnuumm :: iinntt 
-- qqttdd :: iinntt 
EExxSSttaattiicc 
3. Atributos e Métodos static 
 
 
Um atributo ou método do tipo static é utilizado para economizar memória quando uma cópia 
dos dados é suficiente para armazenar o dado, não sendo necessário que cada objeto possua uma cópia. 
 
Sugere-se invocar os métodos do tipo static utilizando o nome da classe; porque isso enfatiza 
que esse método é da classe, ou seja, static. Desta forma, atributos e métodos static podem ser 
utilizados mesmo se nenhum objeto da classe tiver sido ainda instanciado. 
 
Todo atributo static é automaticamente inicializado, com seus 
valores padrões: zero para numéricos, vazio para caracteres. 
 
Ao lado é apresentada uma classe segundo a notação da UML. 
Os atributos e métodos static estão sublinhados. 
 
A partir do exemplo a seguir, o atributo static (linha 3) é um 
atributo de classe e não do objeto, ou seja, é um único atributo visível 
e acessível por qualquer objeto da classe. O método static (linha 11) pode acessar somente atributos 
static. Pode-se acessar o método static através de seus objetos (linha 19); ou pela sua classe (linhas 21 
e 26); mas, mesmo que a classe não possua objetos, é possível acessá-lo através da classe (linha 15). 
 
 
1. public class ExStatic { 
2. private int num; 
3. private static int qtd; 
4. public ExStatic(int n) { 
5. num = n; 
6. qtd++; 
7. } 
8. public void mostrar() { 
9. System.out.println(qtd + " - " + num); 
10. } 
11. public static void quantificar() { 
12. System.out.println("Tem " + qtd + " objetos."); 
13. } 
14. public static void main(String args[]) { 
15. ExStatic.quantificar(); 
16. ExStatic es1 = new ExStatic(10); 
17. es1.mostrar(); 
18. ExStatic es2 = new ExStatic(7); 
19. es2.quantificar(); 
20. ExStatic es3 = new ExStatic(99); 
21. ExStatic.quantificar(); 
22. ExStatic es4 = new ExStatic(3); 
23. es4.mostrar(); 
24. ExStatic es5 = new ExStatic(6); 
25. es5.mostrar(); 
26. ExStatic.quantificar(); 
27. } 
28. } 
 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 21 
3.1. Exercícios 01 
 
1. Quais são os valores apresentados na tela, pela execução do seguinte programa? 
 
public class Pessoa { 
 private String nome, fone; 
 private staticint qtd; 
 
 public Pessoa(String nm, String fn) { 
 nome = nm; fone = fn; qtd++; 
 } 
 
 public void mostrar() { 
 System.out.println(nome + " - " + fone); 
 } 
 
 public static void existente() { 
 System.out.println("Existem " + qtd + "pessoas."); 
 } 
 public static void main(String args[]) { 
 Pessoa.existente(); 
 Pessoa P1 = new Pessoa( "Ana", "321.3210" ); 
 Pessoa P2 = new Pessoa( "João", "345.3405" ); 
 Pessoa.existente(); 
 P2.mostrar(); 
 Pessoa P3 = new Pessoa( "Maria", " " ); 
 Pessoa P4 = new Pessoa( "Carla", "62 341.3939" ); 
 P3.mostrar(); 
 P4.existente(); 
 Pessoa P5 = new Pessoa( "José", "11 334.5678" ); 
 P1.mostrar(); 
 P2.existente(); 
 Pessoa P6 = new Pessoa( "Cíntia", "21 2334.5678" ); 
 Pessoa P7 = new Pessoa( "Paulo", "35 345.9876" ); 
 P7.existente(); 
 Pessoa P8 = new Pessoa( "Augusto", "33 9986.2217" ); 
 P8.mostrar(); 
 Pessoa.existente(); 
 } 
} 
 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 22 
4. Relacionamentos 
 
As classes costumam possuir relacionamentos entre si, com o intuito de compartilhar 
informações e colaborarem umas com as outras para permitir a execução dos diversos processos 
executados pelo sistema. 
 
As associações descrevem os vínculos existentes entre as classes; são representadas por retas 
ligando as classes envolvidas; podem também possuir títulos para determinar o tipo de vínculo 
estabelecido entre as classes; e contém outra informação conhecida como multiplicidade. 
 
A multiplicidade procura determinar qual das classes envolvidas em uma associação fornece 
informações para as outras, além de permitir especificar o nível de dependências de uma classe para 
com as outras envolvidas na associação. 
 
A tabela abaixo demonstra alguns dos diversos valores de multiplicidade que podem ser 
utilizados em uma associação: 
 
Multiplicidade Significado 
0...1 No mínimo zero (nenhum) e no máximo um. 
Indica que os objetos das classes associadas não precisam obrigatoriamente 
estar relacionados, mas se houver relacionamento indica que apenas uma 
instância da classe se relaciona com as instâncias da outra classe. 
1...1 Um e somente um. 
Indica que apenas um objeto da classe se relaciona com os objetos da outra 
classe. 
0...* No mínimo nenhum e no máximo muitos. 
Indica que pode ou não haver instâncias da classe participando do 
relacionamento. 
* Muitos. 
Indica que muitos objetos da classe estão envolvidos no relacionamento. 
1...* No mínimo 1 e no máximo muitos. 
Indica que há pelo menos um objeto envolvido no relacionamento, podendo 
haver muitos envolvidos. 
3...5 No mínimo 3 e no máximo 5. 
Indica que existem pelo menos 3 instâncias envolvidas no relacionamento e 
que podem ser 4 ou 5 as instâncias envolvidas, mas não mais do que isso. 
 
 A seguir são descritos alguns tipos de associação: binária, agregação e herança. 
 
 
4.1. Associação Binária 
 
 A associação binária é o vínculo entre duas classes. Este tipo de associação constitui-se na mais 
comum encontrada nos diagramas de classe. 
 
 
 
 
 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 23 
 
 
 
 
 
 
 
 
 
 
 
 Um objeto da classe Pessoa pode relacionar-se com várias instâncias da classe Imóvel, 
conforme demonstra a multiplicidade *, enquanto que, se existir um objeto da classe Imóvel, ele terá 
que se relacionar obrigatoriamente com no mínimo um objeto da classe Pessoa ou vários, demonstrado 
pela multiplicidade 1..*. 
 
 
 
 
 
 
 
 
 
 
 
 Um objeto da classe Sócio pode relacionar-se ou não com instâncias da classe Dependentes, 
conforme demonstra a multiplicidade 0..*, enquanto que, se existir um objeto da classe Dependente, 
ele terá que se relacionar obrigatoriamente com um objeto da classe Sócio, pois, como não foi definida 
a multiplicidade na extremidade da classe Sócio, isto significa que a multiplicidade é 1..1. 
 
 
4.2. Agregação 
 
 Outro tipo de associação é a agregação ou todo-parte, onde uma classe representa o todo e uma 
ou mais classes representam as partes deste todo. Um agregado (o todo) possui partes, que, por sua 
vez, podem ter partes. 
 
 A notação da agregação é representada pela interligação das classes e um símbolo de losango 
próximo a classe que ilustra o todo, além da especificação da multiplicidade. 
 
 O exemplo abaixo especifica que um acervo é composto por um ou mais livros; e cada livro é 
composto por uma ou mais páginas. 
 
 1...* 1...* 
 
 
 
 O exemplo a seguir mostra que um pedido é composto por um ou mais itens de pedido. 
 
 
Página Livro Acervo 
1...* 
Compra
Pessoa 
 
- nome : char[30] 
- ender : char[50] 
- fone : char[15] 
- nasc : date 
 
+ trabalhar() 
+ receber() 
+ pagar() 
Imóvel 
 
- local : char[30] 
- descri : char[50] 
- tipo : char[10] 
- valor : float 
 
+ alugar() 
+ comprar() 
+ vender() 
Possui 
0...* 
Sócio 
 
- nome : char[30] 
- ender : char[50] 
- fone : char[15] 
- nasc : date 
 
+ registrar() 
+ consultar() 
Dependente 
 
- nome : char[30] 
- nasc : date 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 24 
 
 
 
 
 
 
 
 
 
 
 
 
4.3. Herança 
 
Herança ou generalização e especialização é um tipo de associação entre classes, onde os 
atributos e métodos definidos na superclasse (a classe mais genericamente definida) são 
compartilhados pela classe mais especializada, a subclasse. Na subclasse é possível ser feita a 
definição de mais atributos e métodos e, também, a redefinição dos métodos que foram herdados pela 
superclasse. É o aproveitamento e extensão das características de uma classe existente. 
 
A notação utilizada para herança é a interligação das classes envolvidas e um triângulo 
próximo a superclasse. 
 
4.3.1. Herança Simples 
 
Na herança simples, a subclasse herda os atributos e métodos de uma única superclasse. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
No exemplo acima, um Formato fechado pode ser uma Elipse ou um Polígono. Tanto a classe 
Polígono quanto a classe Elipse herdam os atributos da classe Formato fechado. A classe Elipse possui 
ainda o atributo raio e a classe Polígono possui o atributo qtdLados. Portanto, a classe Elipse possui os 
atributos corPreench, linhaEspes e raio; e a classe Polígono possui os atributos corPreench, linhaEspes 
e qtdLados. 
 
Existem muitos exemplos na natureza. No reino animal, os mamíferos herdam a característica 
de terem uma espinha dorsal por serem uma subclasse dos vertebrados. Acrescentam várias outras, 
como ter sangue quente, amamentar, etc. Os roedores herdam todas as características dos vertebrados e 
mamíferos e acrescentam outras, e assim por diante. 
Formato fechado 
 
- corPreench : char[20] 
- linhaEspes : float 
Elipse 
 
- raio : float 
Polígono 
 
- qtdLados : int 
 
possui 
1...* 
Pedido 
 
- numero : long 
- cliente : char[50] 
- fone : char[15] 
- data : date 
 
+ registrar() 
+ obterTotal() 
Itens 
 
- pedido : long 
- numero : int 
- codprod : long 
- valor : float 
 
+ consultar() 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 25 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Em programação, a herança ocorre quando uma classe obtém a implementação (atributos e 
métodos) de outra classe para desenvolver uma especialização. A herança permite a formação de uma 
hierarquia de classes, onde cada nível é uma especialização do nível anterior, que é mais genérico. 
 
É comum desenvolver estruturas genéricas para depois ir acrescentando detalhes em POO 
(Programação Orientada a Objetos). Isto simplifica o código e permite uma organização maior de um 
projeto. Também favorece a reutilização de código. Se for necessário implementar um botão cor-de-
rosa e já se tem uma classe que define as características de um botão cinza, pode-se fazer com que 
nossa implementação seja uma subclasse de BotãoCinza, e depois estender suas características. Desta 
forma, concentra-se apenas no necessário (a cor do botão) e evita-se ter que definir tudo a partir do 
zero. 
 
4.3.2. Herança Múltipla 
 
Pela herança múltipla a subclasse, também chamada de classe de junção, herda os atributos e 
métodos de duas ou mais superclasses. 
 
 No exemplo a seguir, a subclasse Lobisomem herda atributos e métodos das superclasses Lobo 
e Homem. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Lobo Homem 
Lobisomem 
Mamífero 
 
- sangue : char 
 
+ amamentar() 
Vertebrado 
 
- espinha : float 
 
+ calcificar() 
Roedor 
 
 
 
+ roer() 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 26 
4.3.3. Classe Abstrata x Concreta 
 
 Uma classe abstrata é uma classe que não possui instâncias diretas, mas cujas descendentes, 
sim. Uma classe concreta é uma classe instanciável; isto é, pode ter instâncias diretas. Uma classe 
direta pode ter subclasses abstratas (mas estas, por sua vez, devem possuir descendentes concretos). 
 
 
4.4. Exercícios 01 
 
1. Explique a diferença entre herança e agregação. Dê exemplos. 
2. O que é agregação? Dê um exemplo. 
3. Diferencie uma superclasse de uma subclasse. 
4. Uma subclasse pode ser também uma superclasse? Por quê? 
5. Qual é a diferença entre herança simples e herança múltipla? Dê exemplo. 
6. Qual é a diferença entre classe abstrata e classe concreta? 
 
4.5. Exercícios 02 
 
Para cada um dos grupos de classes a seguir; faça e nomeie as associações existentes entre as 
classes; determine alguns atributos e métodos. 
 
a) 
 
Homem Filho Mulher 
 
b) 
 
Empresa Funcionário Habilidade 
 
c) 
 
Livro Cliente Autor Editora 
 
d) 
 
Motorista Carro Doc_carro Cart_motorista 
 
e) 
 
Quadrado Triângulo Aresta Vértice 
 
f) 
 
País Cidade Estado 
 
g) 
 
Professor Departamento Disciplina Aluno 
 
h) 
 
Arquivo Diretório Campo Registro 
 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 27 
4.6. Exercícios 03 
 
Identifique os atributos e métodos das classes abaixo e as associações de herança entre elas: 
 
 
Mamífero Carro Homem Memória de 
 Computador 
 
 
Ônibus Avião Menu Vertical Menu 
 
 
 
Caminhão RAM Transporte Menu Horizontal 
 
 
 
HD Leão CD-ROM CD-RW 
 
 
 
4.7. Exercícios 04 
 
Identifique as associações existentes entre as classes abaixo: 
 
 
Periférico de Reta Vídeo Computador 
Entrada 
 
 
Roda Processador Periférico de Polígono 
 Saída 
 
 
Carro Motor Ponto Teclado 
 
 
 
Memória Periféricos Porta Mouse 
 
 
 
RAM Transporte ROM 
 
 
 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 28 
5. Herança em Java 
 
5.1. Herança simples - Exemplo de um programa completo 
 
Fazer um programa para definir as classes abaixo, observando a implementação da herança 
(reaproveitamento de atributos e métodos). Criar um objeto para cada classe e executar todos os 
métodos de cada objeto. 
 
 
 
 
 
 
 
 
 
 
 
 
 
• Os métodos construtores – lêem todos os atributos da classe. 
• abastecer( ) – solicita a quantidade de combustível e soma ao atributo qtCombust e mostra a 
quantidade atual de combustível. 
• mostrarDados( ) – mostra todos os atributos da classe. 
 
 
RESOLUÇÃO: 
 
• Criar uma relação de herança entre Caminhão e Veiculo, como apresentado a seguir. 
Assim, a subclasse Caminhão aproveita alguns atributos e métodos da superclasse. 
• Note que para que a classe caminhão tenha acesso aos atributos, eles devem ser declarados 
como protected. 
• Há a redefinição do método mostrarDados( ), pois as implementações serão diferentes 
para cada classe. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Veiculo 
 
- marca : char[30] 
- qtCombust : float 
- qtRodas : int 
 
 
+ Veiculo() 
+ abastecer() 
+ mostrarDados() 
Caminhao 
 
- marca : char[30] 
- qtCombust : float 
- qtRodas : int 
- limite_carga : float 
 
+ Caminhao() 
+ abastecer() 
+ mostrarDados() 
Veiculo 
 
# marca : char[30] 
# qtCombust : float 
# qtRodas : int 
 
 
+ Veiculo() 
+ abastecer() 
+ mostrarDados() 
Caminhao 
 
- limite_carga : float 
 
 
 
 
+ Caminhao() 
+ mostrarDados() 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 29 
import javax.swing.JOptionPane; 
class Veiculo { 
 protected String marca; 
 protected float qtCombust; 
 protected int qtRodas; 
 
 public Veiculo(){ // Método construtor da superclasse 
 marca = JOptionPane.showInputDialog("Marca:"); 
 qtCombust = Float.parseFloat( 
 JOptionPane.showInputDialog("Combustível:")); 
 qtRodas = Integer.parseInt( 
 JOptionPane.showInputDialog("Nº Rodas:")); 
 } 
 public void abastecer() { 
 float qtd; 
 qtd = Float.parseFloat( 
 JOptionPane.showInputDialog("Qtdd. Abastatecer = " + marca)); 
 qtCombust = qtCombust + qtd; 
 JOptionPane.showMessageDialog(null, 
 "Combustível " + marca + " = " + qtCombust); 
 } 
 public void mostrarDados() { 
 JOptionPane.showMessageDialog(null, "Marca = " + marca + 
 "\nCombustível = " + qtCombust + "\nRodas = " + qtRodas); 
 } 
} 
 
class Caminhao extends Veiculo { 
 private float limiteCarga; 
 
 public Caminhao(){ // Método construtor da subclasse 
 // será executado o método construtor da superclasse 
 limiteCarga = Float.parseFloat( 
 JOptionPane.showInputDialog("Limite:")); 
 } 
 public void mostrarDados() { // redefinição do método da superclasse 
 JOptionPane.showMessageDialog(null, "Marca = " + marca + 
 "\nCombustível = " + qtCombust + "\nRodas = " + qtRodas + 
 "\nLimite de Carga = " + limiteCarga); 
 } 
} 
 
public class JavaOO_0501 { 
 publicstatic void main (String args[]) { 
 Veiculo Vei = new Veiculo(); 
 Caminhao Cam = new Caminhao(); 
 Vei.abastecer(); 
 Cam.abastecer(); 
 Vei.mostrarDados(); 
 Cam.mostrarDados(); 
 System.exit(0); 
 } 
} 
 
 
 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 30 
5.2. Exercícios teóricos 01 
 
Com base no programa anterior indique: 
 
a) Um método construtor: 
 
b) Um objeto: 
 
c) Uma variável local: 
 
d) Um método: 
 
e) Uma subclasse: 
 
f) Uma classe: 
 
g) Dois atributos: 
 
h) Um método polimórfico: 
 
i) Uma superclasse: 
 
 
5.3. Exercícios teóricos 02 
 
1. Dadas as classes abaixo, responda o que se pede. 
 
a) Quais são os atributos da classe Pessoa? 
 
b) Quais são os métodos da classe PJuridica? 
 
c) Quais são os atributos da classe PFisica? 
 
d) Quais são os métodos da classe Pessoa? 
 
e) Quais são os atributos da classe PJuridica? 
 
f) Quais são os métodos da classe PFisica? 
 
 
 
 
 
 
 
 
 
 
 
Pessoa 
 
# nome : char[30] 
# ende : char[50] 
# fone : char[15] 
 
+ alterarNome() 
PFisica 
 
# CPF : char[11] 
# celular:char[15] 
 
+ verifarCPF() 
PJuridica 
 
# CNPJ : char[14] 
# fantasia:char[20] 
 
+ verificarCNPJ() 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 31 
CONTA 
 
# nAge : char[20] 
# nCta : char[10] 
# nome : char[40] 
# saldo : float 
 
+ sacar() 
+ depositar() 
POUPANCA 
 
- taxa : float 
 
 
+ calcularRend() 
CORRENTE 
 
- limite : float 
- juros : float 
 
+ calcularJuros() 
+ emitirCheque() 
CCXX 
 
# atr1 : float 
- atr2 : int 
 
- met1() 
CCYY 
 
- atr3 : float 
+ atr4 : int 
 
# met2() 
+ met3() 
CCWW 
 
- atr5 : float 
 
- met4() 
2. Dadas as classes abaixo, responda o que se pede. 
 
a) Atributos da classe CONTA? 
 
b) Métodos da classe POUPANCA? 
 
c) Atributos da classe CORRENTE? 
 
d) Métodos da classe CONTA? 
 
e) Atributos da classe POUPANCA? 
 
 
 
 
 
 
 
 
 
 
 
 
f) Métodos da classe CORRENTE? 
 
 
 
3. Dadas as classes abaixo, responda o que se pede. 
 
a) Atributos da classe CX? 
 
 
b) Atributos da classe CW? 
 
 
c) Métodos da classe CY? 
 
 
d) Métodos da classe CX? 
 
 
e) Atributos da classe CY? 
 
 
f) Métodos da classe CW? 
 
 
 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 32 
5.4. Exercícios teóricos 03 
 
Com base nas classes abaixo, criar um ou mais relacionamentos de herança entre elas. 
 
a) b) 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c) d) 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
A 
# atrA : int 
# atrB : float 
+ mtd1() 
+ mtd2() 
B 
# atrA : int 
- atrC : int 
 
+ mtd2() 
+ mtd3() 
C 
# atrA : int 
- atrD : float 
 
+ mtd2() 
- mtd4() 
A 
# atrA : int 
 
 
# mtd1() 
# mtd2() 
B 
# atrC : int 
# atrD : int 
 
+ mtd3() 
C 
# atrA : int 
# atrB : int 
# atrC : int 
# atrD : int 
 
# mtd1() 
# mtd2() 
+ mtd3() 
A 
# atr10 : int 
 
+ mtdA() 
C 
# atr20 : int 
- atr50 : int 
+ mtdC() 
D 
# atr30 : int 
 
+ mtdD() 
B 
# atr10 : int 
# atr20 : int 
# atr30 : int 
# atr40 : int 
 
+ mtdA() 
+ mtdB() 
+ mtdC() 
+ mtdD() 
A 
# atr1 : float 
 
+ mtdA() 
D 
# atr2 : float 
 
+ mtdD() 
+ mtdD1() 
C 
# atr1 : float 
# atr2 : float 
- atr3 : int 
+ mtdA() 
+ mtdC() 
+ mtdD() 
+ mtdD1() 
B 
# atr2 : float 
# atr4 : float 
# atr5 : int 
+ mtdB() 
+ mtdD() 
+ mtdD1() 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 33 
Poupanca 
 
- rendimento : float 
 
+ Poupanca() 
+ mostrarDados() 
+ calcularRend()
Corrente 
 
- nrCheque : int 
 
+ Corrente() 
+ mostrarDados() 
+ emitirCheque()
Conta 
 
# agencia : char[15] 
# conta : char[10] 
# saldo : float 
 
+ Conta() 
+ depositar() 
+ sacar() 
e) f) 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5.5. Exercício prático 01 
 
Para cada um dos itens do exercício anterior, criar um programa em Java; não sendo necessário a 
implementação dos métodos. Lembre-se que em Java não há implementação de herança múltipla. 
 
5.6. Exercício prático 02 
 
Fazer um programa para definir as classes abaixo, observando a implementação da herança 
(reaproveitamento de atributos e métodos). Criar um objeto para cada classe, exceto para a classe 
CONTA que é abstrata, e executar todos os métodos de cada objeto. Abaixo segue a descrição de cada 
método: 
 
• Conta( ) – ler todos os atributos da classe Conta. 
• Corrente( ) – ler todos os atributos da classe Corrente. 
• Poupanca( ) – ler todos os atributos da classe Poupanca. 
• depositar( ) – ler um valor e somar ao saldo. 
• sacar( ) – ler um valor e subtrair do saldo, se possível. 
• mostrarDados( ) – mostrar todos os atributos da respectiva 
classe. 
• emitirCheque( ) – ler a quantidade de cheque a ser impresso 
e somar a quantidade ao nrCheque. 
• calcularRend( ) – usar a fórmula: saldo = saldo + saldo * 
rendimento / 100. 
 
 
 
 
 
 
 
A 
# atrX : int 
 
+ mtdA() 
C 
# atrX : int 
# atrY : int 
+ mtdA() 
# mtdC() 
B 
# atrX : int 
# atrY : int 
# atrZ : int 
 
+ mtdA() 
+ mtdB() 
# mtdC() 
X 
# atrA : float 
 
+ mtd1() 
Y 
# atrA : float 
- atrB : int 
+ mtd1() 
- mtd3() 
Z 
# atrA : float 
# atrC : float 
+ mtd1() 
+ mtd4() 
W 
# atrA : float 
# atrC : float 
# atrD : int 
+ mtd1() 
+ mtd4() 
# mtd5() 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 34 
5.7. Exercício prático 03 
 
O que será apresentado na tela pela execução de cada um dos programas apresentados a seguir? 
 
 1º) 
class CA { 
 public CA() { System.out.println("ASTRA"); } 
 public void MA1() { System.out.println("CORSA"); } 
 public void MA2() { System.out.println("VECTRA"); } 
} 
class CB extends CA { 
 public CB() { System.out.println("POLO"); } 
 public void MB1() { System.out.println("GOL"); } 
 public void MB2() { 
 MA2(); 
 System.out.println("GOLF"); 
 } 
} 
public class JavaOO_0502 { 
 public static void main (String args[]) { 
 CA a = new CA(); 
 CB b = new CB(); 
 a.MA1(); 
 b.MA2(); 
 b.MB2(); 
 System.exit(0); 
 } 
} 
 
 
 
 2º) 
class COR { 
 public COR() { System.out.println("PRETO"); } 
 public void COLORIR() { System.out.println("BRANCO"); } 
} 
class CORES extends COR { 
 public CORES() { System.out.println("AMARELO"); } 
 public void COLORIR() { System.out.println("AZUL"); } 
} 
public class JavaOO_0503 { 
 public static void main (String args[]) { 
 CORES a = new CORES(); 
 a.COLORIR(); 
 COR b = new COR(); 
 b.COLORIR(); 
 System.exit(0);} 
} 
 
 
 
APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA 
__________________________________________________________________ Profa. Gilene Borges Gomes ___ 
 
____ www.gomeshp.com _________________________________________________________ 35 
3º) 
class UNI { 
 public UNI() { System.out.println("UM"); } 
 public void WRITE() { System.out.println("DOIS"); } 
 public void READ() { System.out.println("TRES"); } 
} 
class DEZ extends UNI { 
 public DEZ() { System.out.println("DEZ"); } 
 public void WRITE() { System.out.println("DEZESSETE"); } 
} 
 
class CENT extends DEZ { 
 public CENT() { System.out.println("CEM"); } 
 public void READ() { System.out.println("DUZENTOS"); } 
} 
public class JavaOO_0504 { 
 public static void main (String args[]) { 
 UNI X = new UNI(); 
 DEZ Y = new DEZ(); 
 Y.READ(); 
 X.WRITE(); 
 CENT Z = new CENT(); 
 Z.READ(); 
 Y.WRITE(); 
 X.READ(); 
 Z.WRITE(); 
 System.exit(0); 
 } 
}

Outros materiais