POO Heranca Composicao Java
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