Você está na página 1de 18

APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA

__________________________________________________________________ Profa. Gilene Borges Gomes ___

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

APOSTILA DE 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

ORIENTAÇÃO A OBJETOS
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“.

COM JAVA
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:

nome do objeto
PROFª. GILENE DO ESP. STO. BORGES GOMES nome do objeto : nome da classe
MESTRA EM CIÊNCIA DA COMPUTAÇÃO
gilene@gomeshp.com atributo 1 = valor
http://www.gomeshp.com atributo 2 = valor
nome do objeto : nome da classe

1
Exame seletivo de determinados aspectos de um problema.

____ www.gomeshp.com _________________________________________________________ 2


APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA
__________________________________________________________________ Profa. Gilene Borges Gomes ___ __________________________________________________________________ Profa. Gilene Borges Gomes ___

1.2. Classes TocaFitas Avião


- marca : char[30] - marca : char[30]
As classes são tipos de objetos que descrevem as informações armazenadas e os serviços - modelo : char[40] - modelo : char[40]
(métodos) providos por um objeto. Em outras palavras, são padrões a partir dos quais os objetos são - ano : char[4] - ano : char[4]
criados. Uma classe é um conjunto de objetos que compartilham uma estrutura comum (atributos) e - proprietário : char[50] - situação : char[1]
- situação : char[1]
um procedimento comum (operações).
+ ligar() + decolar()
+ gravar() + aterrizar()
Duas notações para representar uma classe são apresentadas a seguir: + tocar() + planar()
+ parar() + ligarMotor()
+ desligar() + acelerar()
nome da classe
nome da classe + frear()
atributos (opcional) Polígono
- vértice : int
métodos (opcional) - corBorda : char[40]
- corInterior : char[40]
+ desenhar()
As classes são organizadas em níveis hierárquicos compartilhando estruturas e comportamentos
+ apagar()
comuns e são associadas a outras classes. As classes definem os valores de atributos relativos a cada + mover()
instância de objetos e os métodos que cada objeto executa ou a que se submete.

1.5. Classes x Objetos


1.3. Atributos
Para criar um objeto é necessário criar uma classe e instanciar um objeto a partir da classe
Os atributos são as características do objeto. Cada atributo tem um valor para cada instância criada. Com um molde são gerados vários objetos parecidos, onde todos os objetos possuem os
do objeto. Este valor deve ser um valor de dado puro, não um objeto. 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.
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 Quando uma instância da classe é gerada, um objeto é criado e o sistema aloca memória para
classe. Na notação gráfica de objetos, estes devem ser representados com os respectivos valores de seus atributos.
atributos.
A seguir é apresentada uma classe e duas de suas instâncias:
Indivíduo
+ cod_indiv: long
Classe: Empregado
+ sexo: M ou F atributos:
+ data_nasc: data nome
endereço
salário
métodos:
atualizar(nome, end, salário)
1.4. Métodos buscarDados()

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 Objeto: Empregado A Objeto: Empregado B
método tem um objeto alvo como um argumento implícito. Um método pode ter argumentos em atributos: atributos:
adição ao seu objeto alvo, os quais parametrizam o método. nome = João nome = Ana
endereço = R. Maria 12 endereço = R. D. José 30
O método é parte da classe e não parte do objeto. O método pode não ser parte da classe; mas salário = R$ 300,00 salário = R$ 400,00
ser uma herança2 de uma superclasse na hierarquia de classes. métodos: métodos:
atualizar(nome, end, salário) atualizar(nome, end, salário)
Exemplo de classes com alguns de seus atributos e métodos. buscarDados() buscarDados()

2
Descreve o relacionamento entre classes definidas a partir de outras classes.

____ www.gomeshp.com _________________________________________________________ 3 ____ www.gomeshp.com _________________________________________________________ 4


APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA
__________________________________________________________________ Profa. Gilene Borges Gomes ___ __________________________________________________________________ Profa. Gilene Borges Gomes ___

1.6. Visibilidade de atributos e métodos 1.8. Abstração

A visibilidade define como será o acesso ao atributo ou ao método, e pode ser de três tipos: Abstração é o exame seletivo de determinados aspectos de um problema. O objetivo da
pública, protegida ou privada. 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 é
+ visibilidade pública: significa que todos têm acesso podendo o atributo e/ou método ser importante.
utilizado por métodos declarados dentro de outras classes. É parte da interface de uma classe e é
visível por qualquer porção do ambiente de sua referência; 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
# visibilidade protegida: significa que o atributo e/ou método é acessado através de métodos características resultante da abstração forma um tipo de dados abstrato com informações sobre seu
dentro da mesma classe e por métodos de classes ao longo do pacote no qual a classe é definida; estado e comportamento.

- visibilidade privada: declaração que é parte da interface de uma classe, mas não é visível a A abstração nem sempre produz os mesmos resultados, depende do contexto onde é utilizada,
quaisquer outras classes – o atributo e/ou método pode apenas ser acessado por métodos declarados ou seja, a abstração de um objeto por uma pessoa pode ser diferente na visão de outra. Por exemplo,
dentro da mesma classe. 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
Cliente Departamento de Trânsito, um carro pode ser totalmente caracterizado pela placa, proprietário, marca,
+ cod_cliente: long modelo, cor e número de chassi. Veja a ilustração abaixo.
# sit_cliente: long
- lim_credito: long Ponto de vista
do mecânico do usuário do Dep. trânsito
+ obter_limite( ) : float
# bloquear_cliente( ) Carro Carro Carro
- cancelar_cliente( ) - marca : char[40] - marca : char[40] - marca : char[40]
- modelo : char[40] - modelo : char[40] - modelo : char[40]
- potencia : int - cor : char[20] - cor : char[20]
1.7. Mensagens
- cilindradas : int - consumo : float - dono : char[50]
- preco : float - chassi : char[20]
Os objetos se comunicam entre si através da mensagem. A mensagem especifica que um - placa : char[7] - placa : char[7]
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. Vamos supor que você vai escrever um aplicativo para uma transportadora que trabalha
Quando um objeto A quer que o objeto B faça uma ação, o objeto A envia uma mensagem ao exclusivamente para uma livraria e cobra por livro, apesar do custo ser baseado no peso. É possível ter
objeto B: “A pede para B fazer Ação” = “A pede para B executar Método 1” 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ê
MENSAGEM 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.
Objeto B Objeto A
Um outro exemplo é sobre o corpo
humano, veja a figura a seguir; para
cada abstração, o foco para observação
é diferente.

____ www.gomeshp.com _________________________________________________________ 5 ____ www.gomeshp.com _________________________________________________________ 6


APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA
__________________________________________________________________ Profa. Gilene Borges Gomes ___ __________________________________________________________________ Profa. Gilene Borges Gomes ___

1.9. Encapsulamento 1.11. Introdução a Orientação a Objetos com Java

O encapsulamento é justamente o 1.11.1. 1º Exemplo:


empacotamento dos atributos e dos métodos
numa mesma classe. Isto protege os dados 1. public class JavaOO_0101 {
contra corrupção, pois somente os métodos 2. private float base;
da classe poderão alterar as estruturas de 3. private float alt;
dados desta classe em questão, ilustradas
pela figura. 4. public void iniciar(float b, float a) {
5. base = b;
Por exemplo, existe um número determinado de coisas que se pode fazer com um toca-fitas. 6. alt = a;
7. }
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 8. public void mostrarArea() {
gravação, liberar o cabeçote, e outras operações mais complexas. Essas funções são escondidas dentro 9. System.out.println("\nArea = " + base * alt);
do mecanismo do toca-fitas e não é possível acessá-las diretamente. Quando o botão play é apertado, o 10. }
motor é ligado e o cabeçote de reprodução acionado, não sendo necessário saber como isso é feito para
usar o toca-fitas. 11. public static void main (String args[]) {
12. JavaOO_0101 x = new JavaOO_0101();
Uma das principais vantagens do encapsulamento é esconder a complexidade do código. Outra, 13. x.iniciar(10, 2);
é proteger os dados. Permitindo o acesso a eles apenas através de métodos evita que seus dados sejam 14. x.mostrarArea();
corrompidos por aplicações externas. 15. JavaOO_0101 y = new JavaOO_0101();
16. y.iniciar(5, 3);
17. y.mostrarArea();
No exemplo do toca-fitas, quando é utilizado o método gravar, sabe-se que o aparelho irá 18. }
gravar informações na fita em um formato padrão que poderá ser lido por outros aparelhos similares. 19. }
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 A seguir será descrito a explicação geral do programa, o que cada linha executa:
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 1. Declarada a classe com nome JavaOO_0101 com qualificador public, que significa que
proteger os dados, como para simplificar o uso de um objeto. a classe é pública; acessível por qualquer outra classe.
2. Criado o atributo base do tipo real e privado.
Há vários exemplos na programação. Os aplicativos conhecidos que rodam no Windows têm 3. Criado o atributo alt do tipo real e privado.
uma grande semelhança porque usam os mesmos objetos. Cada objeto tem um número limitado de 4. Criado o método iniciar que recebe dois parâmetros reais; o método é público.
funções (métodos) que podem ser invocados sobre ele. Se você decide usar, em alguma parte do seu 5. O atributo base recebe o valor do parâmetro b, enviado pelo método main( ).
programa, dois botões: OK e Cancela, você não precisa entender como ele foi escrito, nem saber quais 6. O atributo alt recebe o valor do parâmetro a, enviado pelo método main( ).
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. 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
1.10. Porque usar objetos? objeto.

As vantagens de se usar objetos como blocos para a construção de aplicações são muitas. Pode- 11. O método main torna a classe executável e por ele é iniciada a execução do programa.
se citar: 12. Criada uma instância da classe JavaOO_0101 com nome x, através da palavra reservada
 Simplicidade: os objetos escondem a complexidade do código. Pode-se criar uma new.
complexa aplicação gráfica usando botões, janelas, barras de rolamento, etc., sem conhecer 13. Execução do método iniciar para o objeto x, passando 10 e 2 como parâmetros.
a complexidade do código utilizado para criá-los. 14. Execução do método mostrarArea para o objeto x.
 Reutilização de código: um objeto, depois de criado, pode ser reutilizado por outras 15. Criada uma instância da classe JavaOO_0101 com nome y, através da palavra reservada
aplicações, ter suas funções estendidas e serem usados como blocos fundamentais em new.
sistemas mais complexos. 16. Execução do método iniciar para o objeto y, passando 5 e 3 como parâmetros.
 Integridade dos dados: devido ao uso do encapsulamento.
17. Execução do método mostrarArea para o objeto y.

____ www.gomeshp.com _________________________________________________________ 7 ____ www.gomeshp.com _________________________________________________________ 8


APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA
__________________________________________________________________ Profa. Gilene Borges Gomes ___ __________________________________________________________________ Profa. Gilene Borges Gomes ___

1.11.2. 2º Exemplo: 1.12. Exercícios 01

1. import javax.swing.JOptionPane; 1. Qual é a principal diferença entre o desenvolvimento de sistemas utilizando a decomposição
2. public class JavaOO_0102 { funcional e o desenvolvimento de sistemas utilizando objetos?
3. private float altura;
2. Quais são os principais conceitos da Orientação a Objetos?
4. private float largura;
5. public void lerDados() { 3. Quais são as vantagens da Orientação a Objetos?
6. altura = Float.parseFloat( 4. Defina classe e objeto? O que são atributos e métodos?
7. JOptionPane.showInputDialog("Digite a altura: ")); 5. Em OO o que especifica uma mensagem?
8. largura = Float.parseFloat( 6. Quais são as possíveis formas de definir o acesso de um atributo ou método? Quais são as
9. JOptionPane.showInputDialog("Digite a largura: ")); diferenças?
10. } 7. Quais as vantagens do encapsulamento?
11. public void calcularPerimetro() { 8. Qual é o objetivo da abstração?
12. float perim = 2 * (altura + largura);
13. JOptionPane.showMessageDialog(null,
14. "Perímetro = " + perim);
15. }
9. Defina as classes, com seus atributos e métodos, para os objetos abaixo:
16. public static void main (String args[]) { a) um gato
17. JavaOO_0102 ret1 = new JavaOO_0102(); b) Gol, carro de uma pessoa
18. JavaOO_0102 ret2 = new JavaOO_0102(); c) "Conceitos de Orientação a Objetos", livro a venda em uma livraria
19. ret1.lerDados(); d) Maria, professora em uma universidade
20. ret1.calcularPerimetro(); e) "Engenharia de software", livro em uma biblioteca
21. ret2.lerDados(); f) Corsa, carro a venda em uma concessionária
22. ret2.calcularPerimetro(); g) João, funcionário de uma universidade
23. System.exit(0); h) uma janela do Windows
24. }
25. }

A seguir será descrito a explicação geral do programa, o que cada linha executa: 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;
1. Inclui no programa a definição da classe JOptionPane, para possibilitar o uso de 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;
seus métodos;
d) Cachorro: uma para o biólogo e outra para o proprietário.
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;
11. Quanto aos conceitos de orientação a objetos, marque V ou F.
4. Criado o atributo largura do tipo real e privado; a.( ) Um método privado pode ser acessado diretamente por qualquer objeto de outra
5. Criado o método lerDados para que o usuário digite os valores dos atributos; classe.
6. O atributo altura recebe o valor transformado em float, que foi digitado; b.( ) A definição de uma classe reserva espaço de memória para conter todos os seus
7. O método showInputDialog permite a entrada de dados como caracteres; atributos.
8. O atributo largura recebe o valor transformado em float, que foi digitado; 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
11. Criado o método público calcularPerimetro; correspondente.
12. A variável local perim recebe o cálculo do perímetro; e.( ) Os atributos de uma classe devem ser do tipo private; para estar de acordo com a
13. Apresentação do cálculo do perímetro através do método showMessageDialog; OO pura.
f.( ) Um método público pode ser acessado por qualquer método público de outra
16. O método main torna a classe executável e por ele é iniciada a execução do classe.
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.

____ www.gomeshp.com _________________________________________________________ 9 ____ www.gomeshp.com _________________________________________________________ 10


APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA
__________________________________________________________________ Profa. Gilene Borges Gomes ___ __________________________________________________________________ Profa. Gilene Borges Gomes ___

12. Implementar em Java uma classe paralelepípedo que Paralelepipedo


possui três atributos: altura, largura e comprimento e três 2. Método Construtor e Polimorfismo
métodos para: - altura : float
a) solicitar as medidas do paralelepípedo; - largura : float
b) calcular e mostrar o volume - comprimento : float 2.1. Métodos Construtores
(Volume = altura * largura * comprimento);
c) calcular e mostrar a área + solicitarMedidas() Os métodos construtores são criados para garantir que os objetos serão inicializados de forma
(Área = 2 * (altura * largura + altura * comprimento + + mostrarVolume() correta. Pode haver, numa mesma classe, vários métodos construtores, entretanto, é necessário que
largura * comprimento)); + mostrarArea() cada um tenha uma quantidade diferente de parâmetros ou que os tipos de parâmetros sejam diferentes.
O programa deve criar dois paralelepípedos, ler seus
valores e mostrar suas áreas e seus volumes. 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.

13. Usando Java, criar uma classe ContaBancaria que possui Observe os exemplos a seguir:
ContaBancaria
quatro atributos: numero, agencia, cliente e saldo e quatro - numero : char[10] 1. public class Livro0 {
métodos para: - agencia : char[10] 2. private String titulo;
a) entrada de todos os dados da conta; - cliente : char[50] 3. private int pag;
b) apresentar os dados da conta; - saldo : float 4. private float preco;
c) realizar saque do valor informado, se houver saldo; caso
contrário, mostrar mensagem de saldo insuficiente; + entrarDados() 5. public void mostrarDados() {
d) realizar depósito do valor informado. + mostrarDados() 6. System.out.println("Título = " + titulo + "\nPáginas = " +
O programa deve criar um objeto e chamar todos os 7. pag + "\nPreço = " + preco);
+ sacar()
métodos. Escolha a ordem de execução e a quantidade de 8. }
+ depositar()
vezes que cada método será executado.
9. public static void main(String args[]) {
10. Livro0 liv = new Livro0();
11. liv.mostrarDados();
12. System.exit(0);
14. Criar em Java uma classe Funcionário e implementar os Funcionario 13. }
métodos apresentados ao lado. O programa deve criar um - cpf : char[11] 14. }
objeto da classe declarada e executar os seus métodos. - nome : char[50]
Escolha a ordem e a freqüência de execução dos métodos. - horasTrab : float 1. public class Livro0 {
- valorHora : float 2. private String titulo;
+ entrarDados() 3. private int pag;
4. private float preco;
+ mostrarDados()
+ calcularSalario() 5. public Livro() {
+ alterarHoras() 6. titulo = "OO com Java";
+ alterarValor() 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. }

____ www.gomeshp.com _________________________________________________________ 11 ____ www.gomeshp.com _________________________________________________________ 12


APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA
__________________________________________________________________ Profa. Gilene Borges Gomes ___ __________________________________________________________________ Profa. Gilene Borges Gomes ___

Nota-se que a diferença entre eles é que no primeiro exemplo não foi definido um método Observando o exemplo abaixo, nota-se que na linha 22 há uma chamada ao método
construtor; assim, o construtor executado é o default, onde os atributos são inicializados com zero para imprimirCheque e será executado o método polimórfico da linha 14 porque não foi passado
tipos de dados numéricos e vazio para caracteres. 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.
A saída de dados do primeiro exemplo é:
Título = 1. public class Conta {
Páginas = 0 2. private String nConta, nAgencia;
Preço = 0.0 3. private float saldo;
4. private int numCheque;
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 5. public Conta() {
6. nConta = "1034-5";
construtor.
7. nAgencia = "234-X";
8. saldo = 100000;
A saída de dados do segundo exemplo é: 9. numCheque = 85534;
Título = OO com Java 10. }
Páginas = 459
Preço = 312.56 11. public void mostrarCheque() {
12. System.out.println("\nNº Cheque: " + numCheque);
2.2. Polimorfismo 13. }

14. public void imprimirCheque() {


Polimorfismo é a capacidade de um objeto enviar uma mensagem genérica para muitos outros 15. numCheque = numCheque + 20;
objetos; ou seja, um mesmo nome de método é usado em diferentes classes ou usado na mesma classe 16. }
com quantidade de parâmetros diferentes ou tipos de parâmetros diferentes.
17. public void imprimirCheque( int qtd ) {
Quando o método polimórfico estiver na mesma classe, o objeto saberá qual método executar 18. numCheque = numCheque + qtd;
pela quantidade de parâmetros passados na chamada, porque é necessário especificar os parâmetros a 19. }
serem utilizados. Logicamente, métodos polimórficos possuem implementações diferentes.
20. public static void main(String args[]) {
Ao criar o objeto, o método construtor a ser executado dependerá da quantidade de parâmetros 21. Conta cta = new Conta();
passados na criação. Observando o exemplo abaixo, nota-se que na linha 15, a criação do objeto ret1 22. cta.imprimirCheque();
será feita a chamada ao método construtor Retangulo da linha 7 porque foram passados dois 23. cta.mostrarCheque();
parâmetros. E na chamada na linha 16, a criação do objeto ret2 será feita a chamada ao método 24. cta.imprimirCheque(10);
construtor Retangulo da linha 3 porque não foram passados parâmetros. 25. cta.mostrarCheque();

1. public class Retangulo { 26. System.exit(0);


2. private float base, alt; 27. }
3. public Retangulo() { 28. }
4. base = 5; alt = 20;
5. }
6. public Retangulo(float b, float a) { Havendo métodos polimórficos em classes diferentes; o objeto saberá qual método executar,
7. base = b; alt = a; porque ele executará o método de sua classe. Observando o exemplo a seguir, nota-se que existe dois
8. } métodos polimórficos mostrarArea(), um na classe Reta e outro na classe Para. Na linha 36 a
9. public void mostrarArea() {
10. System.out.println("\nÁrea = " + base * alt); chamada ao método executará os comandos da linha 10, porque o objeto é da classe Reta. Na linha 37
11. } a chamada ao método executará os comandos da linha 25, porque o objeto é da classe Para.
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. }

____ www.gomeshp.com _________________________________________________________ 13 ____ www.gomeshp.com _________________________________________________________ 14


APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA
__________________________________________________________________ Profa. Gilene Borges Gomes ___ __________________________________________________________________ Profa. Gilene Borges Gomes ___

1. import javax.swing.JOptionPane;
2. class Reta { 2.3. Exercícios 01
3. private float base, altura;
n O que será apresentado pelo programa abaixo:
4. public Reta() {
5. base = Float.parseFloat( class CA {
6. JOptionPane.showInputDialog("Base: ")); public CA() { System.out.println("ASTRA"); }
7. altura = Float.parseFloat( public void MA1() { System.out.println("CORSA"); }
8. JOptionPane.showInputDialog("Altura: ")); public void MA2() { System.out.println("VECTRA"); }
9. } }
class CB {
10. public void mostrarArea() { public CB() { System.out.println("POLO"); }
11. JOptionPane.showMessageDialog(null, public void MB1() { System.out.println("GOL"); }
12. "Área do Retângulo = " + (base * altura)); public void MA2() { System.out.println("GOLF"); }
13. } }
14. } public class JavaOO_0201 {
public static void main(String args[]) {
15. class Para { CA a = new CA();
16. private float altura, largura, compr; CB b = new CB();
a.MA1();
17. public Para() { a.MA2();
18. altura = Float.parseFloat( b.MB1();
19. JOptionPane.showInputDialog("Altura: ")); b.MA2();
20. largura = Float.parseFloat( }
21. JOptionPane.showInputDialog("Largura: ")); }
22. compr = Float.parseFloat(
23. JOptionPane.showInputDialog("Comprimento: "));
24. } o O que será apresentado pelo programa abaixo:

25. public void mostrarArea() { class COR {


26. float area = 2 * (altura * largura + public COR() { System.out.println("PRETO"); }
27. altura * compr + largura * compr); public COR(int x) { System.out.println("ROSA"); }
28. JOptionPane.showMessageDialog(null, public void COLORIR() { System.out.println("BRANCO");}
29. "Área do Paralelepipedo = " + area); }
30. } class CORES {
31. } public CORES() { System.out.println("AMARELO"); }
public void COLORIR() { System.out.println("AZUL"); }
32. public class Poli01 { }
33. public static void main (String args[]) { public class JavaOO_0202 {
34. Reta reta1 = new Reta(); public static void main(String args[]) {
35. Para para1 = new Para(); CORES a = new CORES();
COR b = new COR(1);
36. reta1.mostrarArea(); a.COLORIR();
37. para1.mostrarArea(); COR c = new COR();
c.COLORIR();
38. System.exit(0); b.COLORIR();
39. } }
40. } }

____ www.gomeshp.com _________________________________________________________ 15 ____ www.gomeshp.com _________________________________________________________ 16


APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA
__________________________________________________________________ Profa. Gilene Borges Gomes ___ __________________________________________________________________ Profa. Gilene Borges Gomes ___

p Dadas as seguintes classes, o que será apresentado pelo programa abaixo: r Dadas as seguintes classes, o que será apresentado pelo programa abaixo:

class Uni { class Circulo {


public Uni() { System.out.println("ZERO"); } protected int raio;
public Uni(int x) { System.out.println("UM"); }
public void write() { System.out.println("DOIS"); } public Circulo(int r) { raio = r; }
public void read() { System.out.println("TRES"); }
} public Circulo() {
raio = 0;
class Dez { mostrar(); }
public Dez(int y) { System.out.println("ONZE"); }
public Dez(String z) { System.out.println("DOZE"); } public void circular(int v1, int v2) {
public void write() {System.out.println("DEZESSETE");} raio = v1 + v2;
public void read() { System.out.println("DUZENTOS"); } mostrar(); }
}
public void mostrar() {
public class JavaOO_0203 { System.out.println("Círculo = " + raio); }
public static void main(String args[]) { }
Uni uni1 = new Uni();
Uni uni2 = new Uni(1); class Esfera {
Dez dez2 = new Dez(10); protected int raio;
Dez dez3 = new Dez("10");
uni1.write(); public Esfera(int r) {
dez2.read(); raio = r * 4;
uni2.read(); mostrar(); }
dez3.write();
} public void circular(int v1) {
} raio = v1 * 5;
mostrar(); }

q Com base nas classes Uni e Dez do exercício anterior, o que será public void desenhar() {
apresentado pelo programa abaixo: System.out.println("desenhando"); }

public class JavaOO_0204 { public void mostrar() {


public static void main(String args[]) { System.out.println("Esfera = " + raio); }
Dez dez1 = new Dez(10); }
Uni uni1 = new Uni();
Uni uni2 = new Uni(1); public class JavaOO_0205 {
Dez dez2 = new Dez("10"); public static void main(String args[]) {
dez2.write(); Circulo circulo1 = new Circulo();
uni2.read(); circulo1.circular(10,20);
uni1.write(); Esfera esfera2 = new Esfera(83);
dez1.read(); esfera2.circular(3);
} Circulo circulo2 = new Circulo(9);
} circulo2.circular(3,5);
esfera2.desenhar();
esfera2.circular(7);
circulo2.circular(4,6);
}
}

____ www.gomeshp.com _________________________________________________________ 17 ____ www.gomeshp.com _________________________________________________________ 18


APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA
__________________________________________________________________ Profa. Gilene Borges Gomes ___ __________________________________________________________________ Profa. Gilene Borges Gomes ___

s Com base nas classes Circulo e Esfera do exercício anterior, o que será
apresentado pelo programa abaixo : 3. Atributos e Métodos static
public class JavaOO_0206 {
public static void main(String args[]) {
Esfera esfera1 = new Esfera(8); Um atributo ou método do tipo static é utilizado para economizar memória quando uma cópia
esfera1.circular(5); dos dados é suficiente para armazenar o dado, não sendo necessário que cada objeto possua uma cópia.
Circulo circulo1 = new Circulo();
circulo1.circular(4,8); Sugere-se invocar os métodos do tipo static utilizando o nome da classe; porque isso enfatiza
Circulo circulo2 = new Circulo(10); que esse método é da classe, ou seja, static. Desta forma, atributos e métodos static podem ser
circulo2.circular(15,7); utilizados mesmo se nenhum objeto da classe tiver sido ainda instanciado.
esfera1.circular(7);
circulo1.circular(2,9); ExStatic
Todo atributo static é automaticamente inicializado, com seus
esfera1.desenhar();
} valores padrões: zero para numéricos, vazio para caracteres. - num : int
} - qtd : int
Ao lado é apresentada uma classe segundo a notação da UML.
Os atributos e métodos static estão sublinhados. + ExStatic(int n)
+ mostrar()
+ quantificar()
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. }

____ www.gomeshp.com _________________________________________________________ 19 ____ www.gomeshp.com _________________________________________________________ 20


APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA
__________________________________________________________________ Profa. Gilene Borges Gomes ___ __________________________________________________________________ Profa. Gilene Borges Gomes ___

3.1. Exercícios 01
4. Relacionamentos
1. Quais são os valores apresentados na tela, pela execução do seguinte programa?
As classes costumam possuir relacionamentos entre si, com o intuito de compartilhar
public class Pessoa { informações e colaborarem umas com as outras para permitir a execução dos diversos processos
private String nome, fone;
executados pelo sistema.
private static int qtd;

public Pessoa(String nm, String fn) { As associações descrevem os vínculos existentes entre as classes; são representadas por retas
nome = nm; fone = fn; qtd++; 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.

public void mostrar() { A multiplicidade procura determinar qual das classes envolvidas em uma associação fornece
System.out.println(nome + " - " + fone); 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.
public static void existente() {
System.out.println("Existem " + qtd + "pessoas."); A tabela abaixo demonstra alguns dos diversos valores de multiplicidade que podem ser
} utilizados em uma associação:
public static void main(String args[]) {
Pessoa.existente(); Multiplicidade Significado
Pessoa P1 = new Pessoa( "Ana", "321.3210" ); 0...1 No mínimo zero (nenhum) e no máximo um.
Pessoa P2 = new Pessoa( "João", "345.3405" ); Indica que os objetos das classes associadas não precisam obrigatoriamente
Pessoa.existente(); estar relacionados, mas se houver relacionamento indica que apenas uma
P2.mostrar(); instância da classe se relaciona com as instâncias da outra classe.
Pessoa P3 = new Pessoa( "Maria", " " ); 1...1 Um e somente um.
Pessoa P4 = new Pessoa( "Carla", "62 341.3939" );
P3.mostrar(); Indica que apenas um objeto da classe se relaciona com os objetos da outra
P4.existente(); classe.
Pessoa P5 = new Pessoa( "José", "11 334.5678" ); 0...* No mínimo nenhum e no máximo muitos.
P1.mostrar(); Indica que pode ou não haver instâncias da classe participando do
P2.existente(); relacionamento.
Pessoa P6 = new Pessoa( "Cíntia", "21 2334.5678" ); * Muitos.
Pessoa P7 = new Pessoa( "Paulo", "35 345.9876" ); Indica que muitos objetos da classe estão envolvidos no relacionamento.
P7.existente(); 1...* No mínimo 1 e no máximo muitos.
Pessoa P8 = new Pessoa( "Augusto", "33 9986.2217" );
P8.mostrar(); Indica que há pelo menos um objeto envolvido no relacionamento, podendo
Pessoa.existente(); 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.

____ www.gomeshp.com _________________________________________________________ 21 ____ www.gomeshp.com _________________________________________________________ 22


APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA
__________________________________________________________________ Profa. Gilene Borges Gomes ___ __________________________________________________________________ Profa. Gilene Borges Gomes ___

Pessoa Imóvel
Pedido Itens
- nome : char[30] - local : char[30]
- ender : char[50] 1...* - descri : char[50] - numero : long - pedido : long
- fone : char[15] - tipo : char[10] - cliente : char[50] 1...* - numero : int
Compra
- nasc : date - valor : float - fone : char[15] possui - codprod : long
- data : date - valor : float
+ trabalhar() + alugar()
+ receber() + comprar() + registrar() + consultar()
+ pagar() + vender() + obterTotal()

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á 4.3. Herança
que se relacionar obrigatoriamente com no mínimo um objeto da classe Pessoa ou vários, demonstrado
pela multiplicidade 1..*. 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
Sócio Dependente 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
- nome : char[30] - nome : char[30]
0...* superclasse. É o aproveitamento e extensão das características de uma classe existente.
- ender : char[50] - nasc : date
- fone : char[15] Possui
- nasc : date A notação utilizada para herança é a interligação das classes envolvidas e um triângulo
próximo a superclasse.
+ registrar()
+ consultar()
4.3.1. Herança Simples

Um objeto da classe Sócio pode relacionar-se ou não com instâncias da classe Dependentes, Na herança simples, a subclasse herda os atributos e métodos de uma única superclasse.
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 Formato fechado
a multiplicidade na extremidade da classe Sócio, isto significa que a multiplicidade é 1..1.
- corPreench : char[20]
- linhaEspes : float
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
Elipse Polígono
vez, podem ter partes.
- raio : float - qtdLados : int
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.
No exemplo acima, um Formato fechado pode ser uma Elipse ou um Polígono. Tanto a classe
O exemplo abaixo especifica que um acervo é composto por um ou mais livros; e cada livro é Polígono quanto a classe Elipse herdam os atributos da classe Formato fechado. A classe Elipse possui
composto por uma ou mais páginas. ainda o atributo raio e a classe Polígono possui o atributo qtdLados. Portanto, a classe Elipse possui os
1...* 1...*
atributos corPreench, linhaEspes e raio; e a classe Polígono possui os atributos corPreench, linhaEspes
Acervo Livro Página e qtdLados.

Existem muitos exemplos na natureza. No reino animal, os mamíferos herdam a característica


O exemplo a seguir mostra que um pedido é composto por um ou mais itens de pedido. 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.

____ www.gomeshp.com _________________________________________________________ 23 ____ www.gomeshp.com _________________________________________________________ 24


APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA
__________________________________________________________________ Profa. Gilene Borges Gomes ___ __________________________________________________________________ Profa. Gilene Borges Gomes ___

Vertebrado Mamífero 4.3.3. Classe Abstrata x Concreta

- espinha : float - sangue : char 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
+ calcificar() + amamentar() 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.
Roedor 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.
+ roer() 6. Qual é a diferença entre classe abstrata e classe concreta?

4.5. Exercícios 02
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 Para cada um dos grupos de classes a seguir; faça e nomeie as associações existentes entre as
hierarquia de classes, onde cada nível é uma especialização do nível anterior, que é mais genérico. classes; determine alguns atributos e métodos.

É comum desenvolver estruturas genéricas para depois ir acrescentando detalhes em POO a)


(Programação Orientada a Objetos). Isto simplifica o código e permite uma organização maior de um
Homem Filho Mulher
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 b)
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 Empresa Funcionário Habilidade
zero.
c)
4.3.2. Herança Múltipla
Livro Cliente Autor Editora
Pela herança múltipla a subclasse, também chamada de classe de junção, herda os atributos e d)
métodos de duas ou mais superclasses.
Motorista Carro Doc_carro Cart_motorista
No exemplo a seguir, a subclasse Lobisomem herda atributos e métodos das superclasses Lobo
e Homem. e)

Lobo Homem Quadrado Triângulo Aresta Vértice

f)

País Cidade Estado

Lobisomem g)

Professor Departamento Disciplina Aluno

h)

Arquivo Diretório Campo Registro

____ www.gomeshp.com _________________________________________________________ 25 ____ www.gomeshp.com _________________________________________________________ 26


APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA
__________________________________________________________________ Profa. Gilene Borges Gomes ___ __________________________________________________________________ Profa. Gilene Borges Gomes ___

4.6. Exercícios 03
5. Herança em Java
Identifique os atributos e métodos das classes abaixo e as associações de herança entre elas:
5.1. Herança simples - Exemplo de um programa completo
Mamífero Carro Homem Memória de
Computador 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.
Ônibus Avião Menu Vertical Menu
Veiculo Caminhao

Caminhão RAM Transporte Menu Horizontal - marca : char[30] - marca : char[30]


- qtCombust : float - qtCombust : float
- qtRodas : int - qtRodas : int
- limite_carga : float
HD Leão CD-ROM CD-RW
+ Veiculo() + Caminhao()
+ abastecer() + abastecer()
+ mostrarDados() + mostrarDados()
4.7. Exercícios 04
• Os métodos construtores – lêem todos os atributos da classe.
Identifique as associações existentes entre as classes abaixo:
• abastecer( ) – solicita a quantidade de combustível e soma ao atributo qtCombust e mostra a
quantidade atual de combustível.
Periférico de Reta Vídeo Computador • mostrarDados( ) – mostra todos os atributos da classe.
Entrada

RESOLUÇÃO:
Roda Processador Periférico de Polígono
Saída • 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
Carro Motor Ponto Teclado
como protected.
• Há a redefinição do método mostrarDados( ), pois as implementações serão diferentes
para cada classe.
Memória Periféricos Porta Mouse
Veiculo Caminhao

RAM Transporte ROM # marca : char[30] - limite_carga : float


# qtCombust : float
# qtRodas : int

+ Veiculo() + Caminhao()
+ abastecer() + mostrarDados()
+ mostrarDados()

____ www.gomeshp.com _________________________________________________________ 27 ____ www.gomeshp.com _________________________________________________________ 28


APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA
__________________________________________________________________ Profa. Gilene Borges Gomes ___ __________________________________________________________________ Profa. Gilene Borges Gomes ___

import javax.swing.JOptionPane; 5.2. Exercícios teóricos 01


class Veiculo {
protected String marca; Com base no programa anterior indique:
protected float qtCombust;
protected int qtRodas;
a) Um método construtor:
public Veiculo(){ // Método construtor da superclasse
marca = JOptionPane.showInputDialog("Marca:"); b) Um objeto:
qtCombust = Float.parseFloat(
JOptionPane.showInputDialog("Combustível:")); c) Uma variável local:
qtRodas = Integer.parseInt(
JOptionPane.showInputDialog("Nº Rodas:")); d) Um método:
}
public void abastecer() { e) Uma subclasse:
float qtd;
qtd = Float.parseFloat(
JOptionPane.showInputDialog("Qtdd. Abastatecer = " + marca)); f) Uma classe:
qtCombust = qtCombust + qtd;
JOptionPane.showMessageDialog(null, g) Dois atributos:
"Combustível " + marca + " = " + qtCombust);
} h) Um método polimórfico:
public void mostrarDados() {
JOptionPane.showMessageDialog(null, "Marca = " + marca + i) Uma superclasse:
"\nCombustível = " + qtCombust + "\nRodas = " + qtRodas);
}
}
5.3. Exercícios teóricos 02
class Caminhao extends Veiculo {
private float limiteCarga; 1. Dadas as classes abaixo, responda o que se pede.
public Caminhao(){ // Método construtor da subclasse
a) Quais são os atributos da classe Pessoa?
// será executado o método construtor da superclasse
limiteCarga = Float.parseFloat(
JOptionPane.showInputDialog("Limite:")); b) Quais são os métodos da classe PJuridica?
}
public void mostrarDados() { // redefinição do método da superclasse c) Quais são os atributos da classe PFisica?
JOptionPane.showMessageDialog(null, "Marca = " + marca +
"\nCombustível = " + qtCombust + "\nRodas = " + qtRodas + d) Quais são os métodos da classe Pessoa?
"\nLimite de Carga = " + limiteCarga);
} e) Quais são os atributos da classe PJuridica?
}

public class JavaOO_0501 {


f) Quais são os métodos da classe PFisica?
public static void main (String args[]) {
Veiculo Vei = new Veiculo();
Caminhao Cam = new Caminhao();
Vei.abastecer(); Pessoa
Cam.abastecer(); PJuridica PFisica
Vei.mostrarDados(); # nome : char[30]
Cam.mostrarDados(); # CNPJ : char[14] # ende : char[50] # CPF : char[11]
System.exit(0); # fantasia:char[20] # fone : char[15] # celular:char[15]
}
+ verificarCNPJ() + alterarNome() + verifarCPF()
}

____ www.gomeshp.com _________________________________________________________ 29 ____ www.gomeshp.com _________________________________________________________ 30


APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA
__________________________________________________________________ Profa. Gilene Borges Gomes ___ __________________________________________________________________ Profa. Gilene Borges Gomes ___

2. Dadas as classes abaixo, responda o que se pede. 5.4. Exercícios teóricos 03


a) Atributos da classe CONTA? CONTA
Com base nas classes abaixo, criar um ou mais relacionamentos de herança entre elas.
# nAge : char[20]
b) Métodos da classe POUPANCA? a) b)
# nCta : char[10]
# nome : char[40]
c) Atributos da classe CORRENTE? # saldo : float A B A
# atrA : int # atrA : int # atrA : int
d) Métodos da classe CONTA? + sacar() # atrB : float - atrC : int C
+ depositar()
e) Atributos da classe POUPANCA? + mtd1() # atrA : int
+ mtd2() # mtd1()
+ mtd2() # atrB : int
+ mtd3() # mtd2() # atrC : int
# atrD : int
C B
CORRENTE POUPANCA # atrA : int # atrC : int # mtd1()
- atrD : float # atrD : int # mtd2()
- limite : float - taxa : float + mtd3()
- juros : float + mtd2() + mtd3()
- mtd4()
+ calcularJuros() + calcularRend()
+ emitirCheque()

f) Métodos da classe CORRENTE? c) d)

A D A C
# atr1 : float # atr2 : float # atr10 : int # atr20 : int
3. Dadas as classes abaixo, responda o que se pede. CX - atr50 : int
+ mtdA() + mtdD() + mtdA() + mtdC()
a) Atributos da classe CX? # atr1 : float
- atr2 : int + mtdD1()

- met1()
b) Atributos da classe CW? B C D B
# atr2 : float # atr1 : float # atr30 : int # atr10 : int
# atr4 : float # atr2 : float # atr20 : int
c) Métodos da classe CY? # atr5 : int - atr3 : int + mtdD() # atr30 : int
CY + mtdB() + mtdA() # atr40 : int
+ mtdD() + mtdC()
d) Métodos da classe CX? - atr3 : float + mtdA()
+ mtdD1() + mtdD()
+ atr4 : int
+ mtdD1() + mtdB()
# met2() + mtdC()
e) Atributos da classe CY? + met3() + mtdD()

f) Métodos da classe CW?

CW
- atr5 : float

- met4()

____ www.gomeshp.com _________________________________________________________ 31 ____ www.gomeshp.com _________________________________________________________ 32


APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA
__________________________________________________________________ Profa. Gilene Borges Gomes ___ __________________________________________________________________ Profa. Gilene Borges Gomes ___

e) f) 5.7. Exercício prático 03


X Y A
# atrA : float # atrA : float # atrX : int O que será apresentado na tela pela execução de cada um dos programas apresentados a seguir?
- atrB : int B
+ mtd1() + mtd1() + mtdA() # atrX : int 1º)
# atrY : int class CA {
- mtd3()
# atrZ : int public CA() { System.out.println("ASTRA"); }
public void MA1() { System.out.println("CORSA"); }
Z W C public void MA2() { System.out.println("VECTRA"); }
+ mtdA() }
# atrA : float # atrA : float # atrX : int + mtdB() class CB extends CA {
# atrC : float # atrC : float # atrY : int # mtdC() public CB() { System.out.println("POLO"); }
+ mtd1() # atrD : int + mtdA() public void MB1() { System.out.println("GOL"); }
+ mtd4() + mtd1() # mtdC() public void MB2() {
+ mtd4() MA2();
# mtd5() System.out.println("GOLF");
}
}
public class JavaOO_0502 {
public static void main (String args[]) {
5.5. Exercício prático 01 CA a = new CA();
CB b = new CB();
Para cada um dos itens do exercício anterior, criar um programa em Java; não sendo necessário a a.MA1();
implementação dos métodos. Lembre-se que em Java não há implementação de herança múltipla. b.MA2();
b.MB2();
System.exit(0);
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: 2º)
class COR {
• Conta( ) – ler todos os atributos da classe Conta. public COR() { System.out.println("PRETO"); }
• Corrente( ) – ler todos os atributos da classe Corrente. Conta public void COLORIR() { System.out.println("BRANCO"); }
}
• Poupanca( ) – ler todos os atributos da classe Poupanca. # agencia : char[15] class CORES extends COR {
• depositar( ) – ler um valor e somar ao saldo. # conta : char[10] public CORES() { System.out.println("AMARELO"); }
• sacar( ) – ler um valor e subtrair do saldo, se possível. # saldo : float public void COLORIR() { System.out.println("AZUL"); }
• mostrarDados( ) – mostrar todos os atributos da respectiva }
classe. + Conta() public class JavaOO_0503 {
• emitirCheque( ) – ler a quantidade de cheque a ser impresso + depositar() public static void main (String args[]) {
+ sacar() CORES a = new CORES();
e somar a quantidade ao nrCheque.
a.COLORIR();
• calcularRend( ) – usar a fórmula: saldo = saldo + saldo * COR b = new COR();
rendimento / 100. b.COLORIR();
System.exit(0);
}
Corrente Poupanca }

- nrCheque : int - rendimento : float

+ Corrente() + Poupanca()
+ mostrarDados() + mostrarDados()
+ emitirCheque() + calcularRend()

____ www.gomeshp.com _________________________________________________________ 33 ____ www.gomeshp.com _________________________________________________________ 34


APOSTILA DE ORIENTAÇÃO A OBJETOS COM JAVA
__________________________________________________________________ Profa. Gilene Borges Gomes ___

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

____ www.gomeshp.com _________________________________________________________ 35