12
1 Programa Programaç ão ão Orientada Orientada a a Objetos Objetos: : Reuso Reuso Alexandre César Muniz de Oliveira 2 Introdução w Hierarquia de classes está associada a forma como se distribui conceitos (comportamentos) entre as unidades que compõem o sistema (classes) w O genérico reside em um nível superior enquanto que o específico nos inferiores w O genérico pode ser atribuído ao específico (truncado), mas o contrário não (inventado) w Descer a hierarquia retrata a diminuição do grau de abstração 3 Introdução Boolean Character Class ClassLoader Compiler Math Number Process Runtime SecurityManager Object Double Float Integer Long Croneable Legenda: CLASSE CLASSE ABSTRATA INTERFACE extends implements 4 Classes Abstratas w Servem de base para a construção de uma hierarquia de classes w Representam o comportamento tão genérico quanto possível (métodos genéricos) w Não admitem objetos concretos com seu comportamento (abstrato)

Introdução Programação Orientada a Objetos: Reusoacmo/grad/lp2/POO_Especial_03.pdf · 2005-10-03 · 1 Programação Orientada a Objetos: Reuso Alexandre César Muniz de Oliveira

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Introdução Programação Orientada a Objetos: Reusoacmo/grad/lp2/POO_Especial_03.pdf · 2005-10-03 · 1 Programação Orientada a Objetos: Reuso Alexandre César Muniz de Oliveira

1

ProgramaProgramaççãoão OrientadaOrientada a a ObjetosObjetos: : ReusoReuso

Alexandre César Muniz de Oliveira

2

Introdução

w Hierarquia de classes está associada a forma como se distribui conceitos (comportamentos) entre as unidades que compõem o sistema (classes)w O genérico reside em um nível superior

enquanto que o específico nos inferioresw O genérico pode ser atribuído ao específico

(truncado), mas o contrário não (inventado)w Descer a hierarquia retrata a diminuição do

grau de abstração

3

Introdução

Boolean

Character

Class

ClassLoader

Compiler

Math

Number

Process

Runtime

SecurityManager

Object Double

Float

Integer

Long

Croneable

Legenda:

CLASSE

CLASSE ABSTRATA

INTERFACE

extends

implements 4

Classes Abstratas

w Servem de base para a construção de uma hierarquia de classesw Representam o comportamento tão

genérico quanto possível (métodos genéricos)w Não admitem objetos concretos com seu

comportamento (abstrato)

Page 2: Introdução Programação Orientada a Objetos: Reusoacmo/grad/lp2/POO_Especial_03.pdf · 2005-10-03 · 1 Programação Orientada a Objetos: Reuso Alexandre César Muniz de Oliveira

2

5

Classes Abstratas

w Não podem ser instanciadasw Deixa a implementação mais específica de

métodos nas subclasses que não forem abstratasw Facilita o polimorfismo com métodos

sobrepostosw Herança de código preservando

comportamento

6

Classes Abstratas

w Define uma interface comum a todos em uma hierarquiaw Permite a implementação progressiva de classes

– Permite o acesso a:• Construtores• Métodos public e protected

w É utilizada a palavra reservada abstract para sua definição

7

Classes Abstratas

w É obrigatório definir uma classe como abstrata se houver um ou mais métodos abstratosw Métodos abstratos não apresentam

implementaçãow As subclasses de classes abstratas devem

fornecer implementações para todos os métodos abstratos (a não ser que a subclasse também seja abstrata)

8

Classes Abstrataspublic abstract class Mensagem {

private String remetente;private int status;public abstract void play();public abstract void testaItens();public abstract void aplicaItens();public abstract boolean noPadrao();public String getRemetente() {

return this.remetente;}public String Formata() {

this.testaItens();if (this.noPadrao())

this.aplicaItens();}}

Page 3: Introdução Programação Orientada a Objetos: Reusoacmo/grad/lp2/POO_Especial_03.pdf · 2005-10-03 · 1 Programação Orientada a Objetos: Reuso Alexandre César Muniz de Oliveira

3

9

Exercícios

public abstract class Empregado {private String nome, sobrenome;public Empregado(String n, String s) {

nome= n; sobrenome=s;}public String getNome() {

return nome;}public abstract double calcSalario();} 10

Exercícios

public final class Gerente extends Empregado {private double salario;public Gerente(String n, String s) {

super(n, s);this.salario = 1000.0;

}public double calcSalario() {

return salario;}}

11

Exercícios

12

Exercíciospublic abstract class ContaAbstrata {

private String numero;private double saldo;public ContaAbstrata(String numero) {

this.numero = numero;saldo = 0.0;

}public void depositar(double valor) {

saldo += valor;}public abstract void sacar(double valor);protected void Saldo(double saldo) {

this.saldo = saldo;}public double Saldo() {

return saldo;}}

Page 4: Introdução Programação Orientada a Objetos: Reusoacmo/grad/lp2/POO_Especial_03.pdf · 2005-10-03 · 1 Programação Orientada a Objetos: Reuso Alexandre César Muniz de Oliveira

4

13

Exercícios

public class Conta extends ContaAbstrata {public Conta(String numero) {

super (numero);}public void sacar(double valor) {

this.Saldo(Saldo() - valor);}

}

14

Exercícios

public class Poupanca extends Conta {public Poupanca(String numero) {

super (numero);}public void renderJuros(double taxa) {

depositar( Saldo()*taxa);}

}

15

Exercíciospublic class ContaEspecial extends Conta {

public static final double TAXA = 0.01;private double bonus;public ContaEspecial (String numero) {

super (numero);}public void depositar(double valor) {

bonus = bonus + (valor * TAXA);super.depositar(valor);

}}

16

Exercíciospublic class ContaImposto extends ContaAbstrata {

public static final double TAXA = 0.001;public ContaImposto (String numero) {

super (numero);}public void sacar(double valor) {

double imposto = valor * TAXA;double total = valor + imposto;this.Saldo( Saldo() – total);

}}

Page 5: Introdução Programação Orientada a Objetos: Reusoacmo/grad/lp2/POO_Especial_03.pdf · 2005-10-03 · 1 Programação Orientada a Objetos: Reuso Alexandre César Muniz de Oliveira

5

17

Exercíciospublic class Programa {

public static void main(String [ ] args) {ContaAbstrata conta1, conta2;conta1 = new ContaEspecial(“21.342-7”);conta2 = new ContaImposto(“21.987-8”);conta1.sacar(500);conta2.sacar(500);System.out.println(conta1. Saldo());System.out.println(conta2. Saldo());

}}

18

Interfaces

w Herança múltipla pode causar conflitos de métodos iguais com implementações diferentes -Java não suportaw Uma interface pode ser definida como um

“protocolo” que define o comportamento de um determinado objetow Funciona como uma superclasse onde todos os

métodos não estão implementadosw Uma classe pode “implementar” vários serviços

(múltiplas interfaces) causando um efeito similar à herança múltipla

19

Interfaces

w Interfaces são também conhecidas como classes abstratas “puras”w Não têm construtoresw Não contém atributos de dados (a não ser

constantes estáticas – public, static, final)w Todos os métodos são implicitamente abstratosw Provêm uma interface de serviços e

comportamentosw Uma classe pode estender somente uma única

classe, mas pode implementar várias interfaces

20

Interfaces

w Implementar uma interface é semelhante àestender uma classe, porém a classe não herda comportamentos e sim os implementaw É possível chamar métodos que sejam

membros da interface em qualquer objeto que implemente a interface

Page 6: Introdução Programação Orientada a Objetos: Reusoacmo/grad/lp2/POO_Especial_03.pdf · 2005-10-03 · 1 Programação Orientada a Objetos: Reuso Alexandre César Muniz de Oliveira

6

21

Interfaces

w Exemplo um veículo pode acelerar, frear e virar para uma direção

public interface Veiculo {public freiar();public acelerar();public virar(direcao);

}

w As classes caminhão, trator, carroça, ..., que implementam a interface ve ículo é que dizem como efetuar estas operações em cada classew Pode-se projetar sistemas e serviços utilizando

interfaces sem a preocupação com sua implementação

22

Interfaces

w Provedora de serviços– Forte separação entre funcionalidade e

implementação.• Embora parâmetros e tipos de retorno sejam

obrigatórios.

– Clientes interagem independentemente da implementação.

• Mas os clientes podem escolher implementações alternativas.

23

Interfaces

24

Interfaces

interface Leitor {String lendo();

}interface Programador {

void pensando( char[] ideias);String digitando();

}

class ParticipanteForum implements Leitor, Programador {

String pensamento;public String lendo() { return "Forum"; }public void pensando( char[] ideias) {

pensamento = new String(ideias);}public String digitando() {

return pensamento; }// método exclusivo desta classeprivate String aprendendo() {

return "Java";}

}

Page 7: Introdução Programação Orientada a Objetos: Reusoacmo/grad/lp2/POO_Especial_03.pdf · 2005-10-03 · 1 Programação Orientada a Objetos: Reuso Alexandre César Muniz de Oliveira

7

25

Exercíciospublic interface Funcionario {

public double calcularSalario();public int bonus();

}

class Gerente implements Funcionario {private static final int SALARIO = 40000;private static final int BONUS = 0;public double calcularSalario() {

return SALARIO;}public int getBonus( ) { return BONUS; }

}

26

Exercícios

class Programador implements Funcionario {private static final double SALARIO = 50000;private static final int BONUS = 10000;public double calcularSalario() {

return SALARIO;}public int getBonus() { return BONUS; }

}

27

Exercíciospublic class FolhaPagamento {

public double calcularFolhaPagamento(Funcionario emp) {return emp.calcularSalario() + emp.bonus();

}public static void main(String arg[]) {

FolhaPagamento fp = new FolhaPagamento();Programador prg = new Programador();Gerente mgr = new Gerente();System.out.println("Salário do Programador " +

fp.calcularFolhaPagamento(prg));System.out.println("Salário do Gerente " +

fp.calcularFolhaPagamento(mgr));}

} 28

Exercíciospublic interface Transacao {

public void depositar (double valor);public boolean sacar (double valor);

}public class Conta implements Transacao{private double saldo;private String numero;public void depositar (double valor){ saldo += valor; }public boolean sacar (double valor){

if (saldo >= valor){ saldo -= valor; return true; }return false;

}public String toString (){ return "" + numero + "-" + saldo; }}}

Page 8: Introdução Programação Orientada a Objetos: Reusoacmo/grad/lp2/POO_Especial_03.pdf · 2005-10-03 · 1 Programação Orientada a Objetos: Reuso Alexandre César Muniz de Oliveira

8

29

Exercíciospublic class TesteConta {static void teste (Transacao t){

t.depositar(500);}public static void main(String[] args) {

Transacao t;Conta c = new Conta();c.nomeia("Acmo e mia");c.depositar(500);System.out.println(c.toString());c.sacar(200);System.out.println(c.toString());t = c;teste(t);System.out.println(((Conta) t). toString());

}}30

Reuso de código

Boolean

Character

Class

ClassLoader

Compiler

Math

Number

Process

Runtime

SecurityManager

Object Double

Float

Integer

Long

Croneable

Legenda:

CLASSE

CLASSE ABSTRATA

INTERFACE

extends

implements

31

Reuso de código

ThreadGroup

ThreadDeath

System

StringBuffer

String

Throwable

Object

Runnable

Legenda:

CLASSE

CLASSE ABSTRATA

INTERFACE

extends

implements

Errorjava.lang-erros

Exceptionjava.lang-exceptions

Thread

32

public class NoMatchingDetailsException extends Exception{

private String key;public NoMatchingDetailsException(String key){

this.key = key;}public String getKey(){

return key;}public String toString(){

return "No details matching '" + key +"' were found.";

}}

Reuso de código

w Reuso da classe Exception

Page 9: Introdução Programação Orientada a Objetos: Reusoacmo/grad/lp2/POO_Especial_03.pdf · 2005-10-03 · 1 Programação Orientada a Objetos: Reuso Alexandre César Muniz de Oliveira

9

33

Reuso de código

class pilha{ // Pilha genérica int tam,topo;Object []vetor; // Vetor de elementos genéricos

pilha(int tam){ // Construtorthis.tam=tam;topo=-1;vetor=new Object[tam];

}

34

Reuso de códigopublic void insere(Object elemento){ // Insere um elemento na pilha

if(topo<(tam-1)){ // Verifica se pilha não está cheiatopo++;vetor[topo]=elemento;

}else System.out.println(“Pilha cheia!”);

}public Object retira(){ // Retira um elemento da pilha

if(topo!=-1){ // Verifica se pilha não está vaziaObject elemento=vetor[topo];topo--;return(elemento);

}else{

System.out.println(“Pilha vazia!”);return(null);

}}}

35

Reuso de códigoclass exemplo{

public static void main(String args[]){pilha p=new pilha(5); p.insere(new String(“Um elemento”)); p.insere(new Float(1.5)); p.insere(new Integer(1)); p.insere(new Character(‘a’)); p.insere(new pilha(10)); p.remove(); for(int i=1;i<=p.tam;i++)

System.out.println(p.remove()); }

}

36

Reuso de código

w Reuso do código que implementa uma pilha para gerar uma classe fila– Fila.insere: aproveita Pilha.insere– Fila.remove: Precisa ser reescrito usando outro

atributo chamado início que é incrementado quando um elemento é removido

– Fila.vazia: Precisa ser reescrita

Page 10: Introdução Programação Orientada a Objetos: Reusoacmo/grad/lp2/POO_Especial_03.pdf · 2005-10-03 · 1 Programação Orientada a Objetos: Reuso Alexandre César Muniz de Oliveira

10

37

Reuso de código

w Sem herança– Modificador final– Classe String é vital para a normal operação da

JVM • main (String args[])

– Sempre se pode confiar no comportamento de uma classe final

38

Reuso de código

39

Reuso de códigopublic class Database{public void addItem(Item theItem)

{...

}}

Video video = new Video(...);CD cd = new CD(...);

database.addItem(video);database.addItem(cd);

40

Herança múltipla

w Simulador

Page 11: Introdução Programação Orientada a Objetos: Reusoacmo/grad/lp2/POO_Especial_03.pdf · 2005-10-03 · 1 Programação Orientada a Objetos: Reuso Alexandre César Muniz de Oliveira

11

41

Herança múltipla

w Simulador

42

Herança múltipla

w Simulador com visualização separada da atuação

43

Herança múltipla

public interface Actor{

/*** Realiza o comportamento diário do ator.* Transfere o ator para updatedField se ele for * participar das etapas posteriores da simulação.* @param currentField O estado atual do campo.* @param location A posição do ator no campo.* @param updatedField O estado atualizado do campo.*/void act(Field currentField, Location location,

Field updatedField);}

44

Herança múltipla

public class Fox extends Animal implements Drawable{

...}

public class Hunter implements Actor, Drawable{

...}

Page 12: Introdução Programação Orientada a Objetos: Reusoacmo/grad/lp2/POO_Especial_03.pdf · 2005-10-03 · 1 Programação Orientada a Objetos: Reuso Alexandre César Muniz de Oliveira

12

Projeto Livraria Projeto Livraria Virtual Virtual LeiaBemLeiaBem

......