segunda-feira, 5 de dezembro de 2011

OO - Herança

  *&---------------------------------------------------------------------*
"  Uma das grande vantagens da OO e a criação de classe que herdam informações
" de uma classe mais generica, fazer isso de se chama 'Hierarquia' que é
" passar atributos de uma classe generica ( classe mãe ) para uma classe mais
" especifica ( classe filho ).
"  Existe a classe Carro, mas existem varios tipos de carros... F1, kart, truck,
" e assim vai, mas todos tem os atributos de um carro como velocidade, rodas,
" modelo, mas seus atributos podem variar conforme o tipo de carro, aki nos
" vamos usar a velocidade como diferencial... mas primeiro vamos criar uma
" classe filho chamada 'ZCL_KART' conforme abaixo.
" Ahhhhh  antes disso tudo na classe mãe (ZCL_CAR) vá na aba 'Caract.' é tire
" o flag do campo 'Final', pois quando isso está com flag significa que ele não
" deixa ninguem herdar dele.



"  Entrem no aba 'Atributos' e verá que só existe o atributo 'Velocidade',
" não sei se vc se lembra mas a visibilidade deste atributo é 'Protect',
" porisso vc vê, rsrs vou explicar melhor a visibilidade de atributos...
" Private - Somente aquela classe consegue visualizar.
" Protect - Somente aquela classe e suas classes filha conseguem visualizar.
" Public  - Todo mundo visualiza. rs.

"  Agora entre na aba 'Metodos' o esquema de visibilidade e a mesma ideia.
"  Todos o metodos criados antes eram 'Public' porisso aparecem aki,

"  Perceba que o nome dos 'Atributos' e dos 'Metodos' estão em azul, o que
" mostra que aquilo não é da atual classe, pra ver somente o que é desta
" classe é soh colocar um flag no campo Filtro marcado na imagem abaixo.
"  Portanto a classe filha tem todos os Atributos 'Protect' e 'Public' da
" classe mãe, juntamente com todos os metodos 'Protect' e 'Public', mas
" não sei se vc concorda mas a velocidade que um carro é diferente da
" velocidade de um Kart portanto eles tem uma acelereção diferente, pois
" é isso que vamos fazer agora, usar o mesmo metodos de forma diferente
" pois a classe mesmo sendo filha e diferente da classe mãe.



" Clicando duas vezes na classe 'AUMENTA_VELO' você, logo de cara, verá
" que ele informa pra vc que aquele 'Metodo' e da classe mãe, portanto
" teremos que redefinir o metodo.
"  Para redefinir devemos selecionar o metodo e clicar no botão 'Redefinir'
" conforme na imagem acima. ( caso queira tirar a redefinição criada e só
" clicar nesse botão com uma setinha branca, do lado redefinir.)
" Coloque o código abaixo e volte.

*&---------------------------------------------------------------------*
method AUMENTA_VELO.
*CALL METHOD SUPER->AUMENTA_VELO
*    .

      add 3 to me->velocidade.
endmethod.
*&---------------------------------------------------------------------*

"  Agora execute o código abaixo e depois execute denovo só que trocando a
" classe de referencia do objeto.
"  Debbugem e veram que o metodo 'AUMENTA_VELO' reage de forma diferente 
" dependendo da classe mesmo sendo o mesmo metodo, dahora neh...



REPORT  zmj_oo_herança.

" Refenreciei um objeto a uma classe mas este objeto ainda não existe.
DATA: o_veiculo TYPE REF TO zcl_kart.

BREAK-POINT.

"  Agora o objeto tá criado, clique duas vezes neste objeto e vc verá seus
" atributos.
CREATE OBJECT o_veiculo.

" Metodo que informa a marca do carro.
CALL METHOD o_veiculo->set_marca
  EXPORTING
    marca = 'VW'.

BREAK-POINT.

" Faça três vezes ...
DO 3 TIMES.
" Metodo que adiciona +2 cada vez que executado.
  CALL METHOD o_veiculo->aumenta_velo.
ENDDO.

BREAK-POINT.

Comentários
0 Comentários

Nenhum comentário:

Postar um comentário