POO Heranca Composicao Java

download POO Heranca Composicao Java

of 33

Transcript of POO Heranca Composicao Java

  • 8/8/2019 POO Heranca Composicao Java

    1/33

    Herana

  • 8/8/2019 POO Heranca Composicao Java

    2/33

    Herana

    O que herana?Herdar derivar caractersticas de geraes precedentes.No mundo da Programao Orientada a Objetos, o termo associado com uma das formas de reutilizao de software.

    Atravs da herana, novas classes podem ser derivadasdas classes existentes. A nova classe herda propriedades emtodos da classe base. A nova classe tambm podeadicionar suas prprias propriedades e mtodos

  • 8/8/2019 POO Heranca Composicao Java

    3/33

    Herana

    Para que serve a herana?

    Considere a criao de uma classe ClasseB em Java.

    Que mtodos esto disponveis atravs de uma

    referncia para a ClasseB (isto , um objeto)?

  • 8/8/2019 POO Heranca Composicao Java

    4/33

    Herana

  • 8/8/2019 POO Heranca Composicao Java

    5/33

    Herana

    Suponha agora que a classe ClasseB herda de ClasseA

    Que mtodos esto agora disponveis para umareferncia da ClasseB (um objeto) ?

  • 8/8/2019 POO Heranca Composicao Java

    6/33

    Herana

  • 8/8/2019 POO Heranca Composicao Java

    7/33

    Herana

    Poderoso mecanismo para o reaproveitamento de cdigo

    O objeto objB tem agora disponveis os mtodos daClasseA sem ser necessrio reescrev-los na ClasseB

    Um objeto da ClasseB tambm um objeto da ClasseA.

    Facilita a manuteno do cdigo: Os mtodos no so

    replicados. Se for necessrio alterar o cdigo do mtodom3, basta alter-lo em ClasseA.

    ClasseB pode "recusar" parte da herana

    reimplementando os mtodos herdados

  • 8/8/2019 POO Heranca Composicao Java

    8/33

  • 8/8/2019 POO Heranca Composicao Java

    9/33

    Herana

    Vrias subclasses podemherdar da mesmasuperclasse

  • 8/8/2019 POO Heranca Composicao Java

    10/33

    Herana

    Em Java, no permitido herdar de mais de uma classe

    ERRADO!!!!

  • 8/8/2019 POO Heranca Composicao Java

    11/33

    Herana

    A hierarquia de herana pode ter vrios nveis

  • 8/8/2019 POO Heranca Composicao Java

    12/33

    Herana

    Que mtodos estoagora disponveis parauma instncia deClasseC?

  • 8/8/2019 POO Heranca Composicao Java

    13/33

    Herana

    A Herana tambm pode surgir a partir da refatorao declasses existentes de modo a eliminar a duplicao decdigo

    Grande quantidade de atributos e mtodos duplicados...

  • 8/8/2019 POO Heranca Composicao Java

    14/33

    Herana

    Refatorao

    Superclasse

    (caractersticas comuns)

    Subclasses

    (caractersticas especficas)

  • 8/8/2019 POO Heranca Composicao Java

    15/33

    Herana

    O mecanismo de herana pode ser melhor entendidoatravs do seguinte exemplo:

  • 8/8/2019 POO Heranca Composicao Java

    16/33

    Herana

    A classe ContaBancaria tem quatro atributos: nome: armazena o nome do cliente cpf: armazena o nmero do CPF do cliente numeroConta: armazena o nmero da conta do cliente saldo: armazena o saldo da conta

    Os mtodos depositar e sacar so usados para fazer umdepsito ou retirada da conta bancria.

    A classe ContaBancria, sozinha, no suficiente pararealizar todas as transaes bancrias. Existemgeralmente dois tipos de contas: a conta corrente e a

    conta de investimentos

  • 8/8/2019 POO Heranca Composicao Java

    17/33

    Herana

    Vamos derivar portanto duas subclasses que herdam dasuperclasse ContaCorrente

  • 8/8/2019 POO Heranca Composicao Java

    18/33

    Herana

    As subclasses ContaInvestimento e ContaCorrente herdamos atributos e mtodos da classe ContaBancaria

  • 8/8/2019 POO Heranca Composicao Java

    19/33

    Herana

    Agora possvel fazer:

    Apesar do mtodo depositar no ter sido definido para aclasse ContaCorrente, ele est disponvel devido aomecanismo de herana

  • 8/8/2019 POO Heranca Composicao Java

    20/33

    Composio

  • 8/8/2019 POO Heranca Composicao Java

    21/33

    Composio

    A classe contm referncias para objetos de outrasclasses Estas referncias so tambm atributos da classe

    Uma maneira alternativa de estender a funcionalidade deuma classe agregando funcionalidades de outras classes

    Herana vs. Composio

    UM vs. TEM UM

  • 8/8/2019 POO Heranca Composicao Java

    22/33

    Composio

    O mecanismo de herana nem sempre apropriado

    Java no tem herana mltipla

    Estender funcionalidade atravs de herana pode no ser"natural": Uma conta de investimento uma conta bancria

    Uma conta de investimento no uma classeDecimalFormat!

  • 8/8/2019 POO Heranca Composicao Java

    23/33

    Composio

    Considere a seguinte situao:

    ::Project2

    CA

    m1 ...

    m2 ...

    CB

    m3 ...m4 ...

  • 8/8/2019 POO Heranca Composicao Java

    24/33

    Composio

    Considere agora que preciso estender a funcionalidadeda classe CA oferecendo em sua interface tambm osmtodos m3( ) e m4( )

  • 8/8/2019 POO Heranca Composicao Java

    25/33

    Composio

    1a

    soluo: Implementar os mtodos m3( ) e m4( ) naclasse CA.

    Desvantagem: duplicao de mtodos dificulta a manuteno do

    software

    ::Project2

    CA

    m1 ...

    m2 ...

    m3 ...m4 ...

    CB

    m3 ...

    m4 ...

  • 8/8/2019 POO Heranca Composicao Java

    26/33

    Composio

    2a

    soluo: Herana Desvantagens:

    Conceitualmente, aclasse CA pode no SERuma classe CB

    Java no suporta heranamltipla. E se fossenecessrio oferecer os

    servios m5() e m6() deuma classe CC?

    ::Project2

    CA

    m1 ...m2 ...

    CB

    m3 ...

    m4 ...

  • 8/8/2019 POO Heranca Composicao Java

    27/33

    Composio

    3a

    soluo: Composio

  • 8/8/2019 POO Heranca Composicao Java

    28/33

    Composio

    Que servios estodisponveis para umareferncia da classe CA?

  • 8/8/2019 POO Heranca Composicao Java

    29/33

  • 8/8/2019 POO Heranca Composicao Java

    30/33

    Composio

    Esse processo tambm conhecido por delegao: aclasse CA delega classe CB a execuo dos serviosm3 e m4

    Observe que o atributo b na classe A pblico. Diz-seento que a delegao pblica, isto , ela visvel paraos clientes da classe

    Um cliente da classe CA, para usar os mtodos m3 e m4,deve estar ciente da delegao e fazer:

    obj.b.m3();

  • 8/8/2019 POO Heranca Composicao Java

    31/33

    Composio

    possvel tornar a delegao privada:

  • 8/8/2019 POO Heranca Composicao Java

    32/33

    Composio

    Oferecer os servios m3 e m4 na classe CA no significa,neste caso, duplicar cdigo. Os mtodos m3 e m4 em CAso apenas uma fachada para os mtodos m3 e m4 emCB

  • 8/8/2019 POO Heranca Composicao Java

    33/33

    Composio

    Que servios esto agora disponveis para umareferncia da classe CA?

    Observe que, agora, o cliente da classe no conhece adelegao: para ele tudo se passa como se os mtodosm3 e m4 fossem implementados em CA