Sei sulla pagina 1di 32

Captulo anterior ( III )

1) Campos estticos em Classes 2) Mtodos estticos em Classes 3) Mtodos get e set 4) Exerccios Prticos

CAPTULO IV ENCAPSULAMENTO, HERANA E POLIMORFISMO


1) Encapsulamento 2) Herana 3) Polimorfismo 4) Exerccios Prticos

Encapsulamento
Como j foi visto no captulo 1, que encapsulamento a capacidade de

ocultar dados dentro de classes, permitindo


que somente operaes especializadas ou dedicadas manipulem estes dados ocultos.

14 de Junho de 2013

Programao Orientada por Objectos

Estrutura geral
O encapsulamento leva a observar um objecto como uma caixa preta

Mtodos pblicos Mtodos privados

Atributos pblicos Atributos privados

14 de Junho de 2013

Programao Orientada por Objectos

Encapsulamento em Java
O Encapsulamento numa classe feita pelo uso de palavras reservadas que esto associadas aos atributos e mtodos da

classe.
Estes so designados por modificadores de visibilidade.

Modificadores de visibilidade so:

public - permite acesso a partir de qualquer classe


private - permite acesso apenas na prpria classe protected - permite acesso apenas na prpria classe e nas subclasses (associado a herana!) nada
Nota: Um atributo ou mtodo sem modificador de acesso acessvel 14 ade Junho qualquer classe do mesmo de 2013 Programao Orientada por Objectos package(pacote).

Uso dos modificadores nos Atributos

Consequncias de tornar um atributo privado

Tentar aceder a um atributo privado (i.e. fora da classe) resulta


em um erro de compilao! Mas como torn-lo acessvel apenas para consulta

(leitura)?
Isto possvel definindo-se um mtodo que retorna o atributo (na prpria classe onde o atributo se encontra)

Consequncias de tornar um atributo publico possvel, mas viola o encapsulamento, aceitvel no caso dos atributos constantes (i.e. Com o modificador final)!
14 de Junho de 2013 Programao Orientada por Objectos 6

Modificadores de visibilidade
public
Atributos Viola encapsulamento

private
Refora encapsulamento

Mtodos

Proporciona Servios aos clientes

Suporta outros metodos na classe

14 de Junho de 2013

Programao Orientada por Objectos

Herana

Mecanismo

simples

poderoso

do

paradigma OO que permite que uma nova classe seja descrita a partir de uma classe j

existente.

Herana um mecanismo que permite a


uma classe herdar todo o comportamento e os atributos de outra classe. 14 de Junho de 2013 Programao Orientada por Objectos
8

Conceitos importantes

Classe me: superclasse, classe base; Classe filha/filho: subclasse, classe derivada;

Classe filha (mais especfica) herda atributos e


mtodos da classe me (generalizada);

Classe filha possui atributos e mtodos prprios.

14 de Junho de 2013

Programao Orientada por Objectos

Vantagens da herana
Modificao de uma classe (insero de novos mtodos e variveis) sem mudanas na classe original. Reutilizao do cdigo. Alterao do comportamento de uma classe.

14 de Junho de 2013

Programao Orientada por Objectos

10

A partilha de recursos leva as ferramentas


melhores e produtos mais lucrativos no necessrio reinventar a roda a cada nova aplicao.

possvel modificar uma classe para criar uma


nova classe com uma personalidade ligeiramente diferente. diversos objectos que executam aces

diferentes, mesmo possuindo a mesma origem.


14 de Junho de 2013 Programao Orientada por Objectos 11

Mecanismo de Herana
Entre uma classe e a sua superclasse, estabelecida uma relao de especializao que automaticamente implementada atravs de um mecanismo de herana. Este mecanismo automtico de herana estabelece as seguintes propriedades entre uma subclasse B e a sua superclasse A: 1. B herda de A todas as variveis e mtodos de instncia (os atributos da classe B, declarados como private em A , s podem ter acesso pelos mtodos public de A, e no directamente) 2. 3. B pode definir novas variveis e novos mtodos prprios. B pode redefinir variveis e mtodos herdados.

Classe A

Importante:

A herana no se aplica a variveis e mtodos de classe!


.
14 de Junho de 2013

Classe B

Programao Orientada por Objectos

12

Exemplo
Pessoa 2 Atributos 2 Operaes
nome sexo comer dormir

superclasse (mais genrica)

generalizao

especializao

Estudante
anoEscolar matricular estudar

Trabalhador
categoria funo trabalhar picar carto

subclasse (mais especfica) 3 Atributos 4 Operaes

subclasse (mais especfica) 4 Atributos 4 Operaes


14 de Junho de 2013 Programao Orientada por Objectos 13

Hierarquia de Classes
peso uma varivel de instncia que est presente em todos os objectos criadas para as classes Animal, Mamfero, Ave e Rptil.

Object
Animal peso
mover()

Ave pardal = new Ave(); pardal.setPeso(700);


Mamifero boi = new Mamifero(); boi.setPeso(30000); boi.mover(); boi.voar(); //Erro! no existe

Mamfero
comer()

Ave
mover()

Rptil
mover()

voar()

nadar()

14 de Junho de 2013

Programao Orientada por Objectos

14

Definir a Subclasse

Forma geral: class <nome-da-classe> extends SuperClass permitido apenas uma superclasse no h herana mltipla em Java cada classe possui exactamente uma superclasse

excepo: java.lang.Object
caso no exista a clusula extends, ento, assumese que a superclasse Object.

14 de Junho de 2013

Programao Orientada por Objectos

15

Classe Object
A classe Object uma classe que serve de

superclasse para todas as classes existentes em


Java.

Ao criar uma classe, se no for especificada nenhuma superclasse aps a palavra extends,

ento

classe

Object

ser

assumida

automaticamente como superclasse.

14 de Junho de 2013

Programao Orientada por Objectos

16

A classe Object define o mtodo equals, que serve para testar se dois objectos contm a

mesma informao (diferente do operador ==).


Como todas as classes so subclasses de

Object, eles herdam o mtodo equals.

14 de Junho de 2013

Programao Orientada por Objectos

17

Construtores de Subclasses
class Ave extends Animal { int altura; class Animal { double velocidade; Animal() { velocidade = 0.0; } void mover(double vel) { velocidade = vel; } }

Ave() { super(); // velocidade = 0.0 altura = 0; }


void mover (double vel) { if(altura >0) velocidade = vel; }

void voar (int alt) { altura = alt; } }


14 de Junho de 2013 Programao Orientada por Objectos 18

Polimorfismo
o princpio pelo qual duas ou mais classes

derivadas de uma mesma superclasse podem


invocar mtodos que tm a mesma identificao (assinatura) mas comportamentos distintos. A deciso sobre qual o mtodo que deve ser selecionado, de acordo com o tipo da classe

derivada, tomada em tempo de execuo,


atravs do mecanismo de late binding*.
* Tambm conhecido pelos termos: dynamic binding ou run-time binding. Onde a definio do mtodo que ser efectivamente invocado s ocorre durante a execuo do programa 14 de Junho de 2013 Programao Orientada por Objectos 19

No caso de polimorfismo, necessrio que os mtodos tenham exactamente a mesma identificao, sendo utilizado o mecanismo de overriding *. Esse mecanismo de

redefinio no deve ser confundido com o mecanismo de sobrecarga de mtodos.

Importante: - O mecanismo de late binding(ligao tardia) e o overriding (Redefinio de mtodos) constituem a chave para a utilizao do Polimorfismo.
* Ocorre quando um mtodo cuja assinatura j tenha sido especificada, recebe uma nova definio (ou seja, um novo corpo) em uma classe derivada.

14 de Junho de 2013

Programao Orientada por Objectos

20

Exemplo:
Considere uma classe Veculo com duas classes derivadas, Automvel e Bicicleta: import java.util.*; class Veiculo { public Veiculo() { System.out.print("Veiculo "); } public void manutencao() {

System.out.println("Veiculo.manutencao ");
} public void limpeza() { System.out.println("Veiculo.limpeza "); } }
14 de Junho de 2013 Programao Orientada por Objectos 21

import java.util.*; class Automovel extends Veiculo { public Automovel () { System.out.print(" Automovel "); } public void manutencao() { System.out.println(" Automovel.manutencao "); }

public void limpeza() {


System.out.println(" Automovel.limpeza "); }

14 de Junho de 2013

Programao Orientada por Objectos

22

import java.util.*; class Bicicleta extends Veiculo { public Bicicleta () {

System.out.print(" Bicicleta ");


} public void manutencao() {

System.out.println(" Bicicleta.manutencao ");


} public void limpeza() { System.out.println(" Bicicleta.limpeza "); } }

14 de Junho de 2013

Programao Orientada por Objectos

23

public class Oficina { Random r = new Random(); public Veiculo proximo() { Veiculo v; int num= r.nextInt(); System.out.println("Valor = "+num);

if (num== 0) v = new Automovel();


else v = new Bicicleta(); return v; }

14 de Junho de 2013

Programao Orientada por Objectos

24

public void manter(Veiculo v) { v.manutencao(); v.limpeza(); } public static void main(String[] args) {

Oficina ofic = new Oficina();


Veiculo v; for (int i=0; i<4; ++i) { v = ofic .proximo(); ofic.manter(v); } }}
14 de Junho de 2013 Programao Orientada por Objectos 25

Resultado Aleatrio
Valor = 1193310524 Veiculo Automovel Automovel.manutencao Automovel.limpeza Valor = 1087258313 Veiculo Bicicleta Bicicleta.manutencao Bicicleta.limpeza Valor = 1857219931 Veiculo Bicicleta Bicicleta.manutencao Bicicleta.limpeza

Valor = 938060274
Veiculo Automovel Automovel.manutencao Automovel.limpeza
14 de Junho de 2013 Programao Orientada por Objectos 26

Exerccio Prtico
1. Criar uma estrutura hierrquica que contenha as seguintes classes: Veiculo (classe abstracta), Bicicleta e Automvel. Os mtodos da classe Veiculo so todos abstractos e possuem a seguinte assinatura: listarVerificacoes() ajustar() limpar()

Estes

mtodos

so

implementados

nas

subclasses

Automvel e Bicicleta. Acrescentar na classe Automvel o mtodo mudarOleo()


14 de Junho de 2013 Programao Orientada por Objectos 27

2. Crie uma classe em Java para representar Empregados com as propriedades mat, nome, funcao, salario e data_adm. Todas as propriedades devem estar encapsuladas. Nenhum objecto desta classe poder ser criado sem matrcula. A matrcula ser fornecida sequencialmente a cada empregado criado a partir de zero. Devero constar tambm mtodos de acesso para cada uma das propriedades definidas. Crie um mtodo para aumentar salrio a partir de um valor percentual recebido e um mtodo chamado toString que retorne uma String com todas as propriedades existentes na classe com seus respectivos valores.

14 de Junho de 2013

Programao Orientada por Objectos

28

3.

Faa um programa em Java para estender a classe Empregado para Gerente. A classe Gerente dever conter as propriedades secretria (do tipo Empregado) e Automvel (String), com seus respectivos mtodos de acesso. Criar tambm um mtodo para aumentar o salrio do Gerente onde o percentual incidir sobre o salrio + 0,5 * cada ano na

empresa. Criar um construtor para a classe Gerente que


acrescente as novas propriedades recebidas como

parmetro. Ainda dever permanecer o construtor default.

Criar tambm um mtodo toString para que esta classe que


retorne uma String com todos os dados.

14 de Junho de 2013

Programao Orientada por Objectos

29

4.

Faa uma classe ManipulaEmpregado que tenha os seguintes mtodos: criarEmpregados que cria um vetor com 6 Empregados, sendo 3 deles Gerentes, com seus respectivos atributos a partir de dados fornecidos por usurios; listarEmpregados que liste os Empregados no array com seus dados; aumentarEmpregados que receba um valor percentual e aumente o salrio de todos os empregados; localizarEmpregado que receba um empregado como argumento e localize-o pela matricula retornando o nome caso encontre ou a string Empregado no localizado caso contrrio.
14 de Junho de 2013 Programao Orientada por Objectos 30

5. Faa um programa que exiba um menu com as seguintes opes: 1 Criar Vetor de Empregados

2 Aumentar Empregados
3 Listar Empregados

4 Localizar Empregado
5 - Sair

14 de Junho de 2013

Programao Orientada por Objectos

31

Prximo captulo

Java e UML

14 de Junho de 2013

Programao Orientada por Objectos

32

Potrebbero piacerti anche