Buss anda meio calado ultimamente, estamos precisando de polêmicas =P

2008/9/22 Miguel Jonathan <[EMAIL PROTECTED]>

> O Peter explicou bem a idéia, vamos reforçar alguns pontos:
>
> Uma referência de um determinado tipo (ex: Pessoa) pode apontar para
> qualquer objeto que seja da classe Pessoa ou de alguma subclasse dela (ex:
> Aluno, Professor):
> Pessoa p1 = new Pessoa();
> Pessoa p2 = new Aluno();
> Pessoa p3 = new Professor();
>
> E, em tempo de execução, podemos fazer qualquer dessas variaveis passar a
> apontar para outro objeto, desde que seja Pessoa ou subclasse dela:
> Ex:   p2 = p1;   // etc.
>
> A única coisa que podemos garantir, a qualquer tempo, quando enviamos uma
> mensagem a um objeto através de uma referência do tipo Pessoa, é que esse
> objeto é capaz de responder ao protocolo de Pessoa.
> Não podemos fazer algo como:
>   p2.getDre();
> Porque nada nos garante que p2 estará apontando sempre para um Aluno.
>
> Mas sempre poderemos fazer, com a certeza de que funcionará, algo assim:
>   p2.getNome();
> Porque getNome() é um método definido em Pessoa, portanto herdado ou
> modificado nas subclasses.
>
> Alguém dirá: mas EU SEI que no meu programa, na hora que eu for fazer
> p2.getDre(), p2 estará apontando para um Aluno, porque fui eu quem fiz isso
> em uma linha anterior. Porque não compila?
>
> A resposta é que o compilador não faz uma análise do seu código para checar
> isso, senão a compilação levaria séculos. Mas ele aceita que você diga:
> "Pode compilar, que eu garanto que vai funcionar". Para dizer isso ao
> compilador, você precisa fazer uma coerção do tipo da referência (ou
> casting, em inglês):
>   ( (Aluno)p2).getDre();
> ou, se preferir mais clareza:
>     Aluno alu = (Aluno) p2;
>     alu.getDre();
> Aí o compilador não reclama mais.
>
> Com interfaces, ocorre uma situação similar.
> Assuma que Pessoa implementa a interface Comparable<Pessoa>. Nesse caso, é
> como se Pessoa (e, por extensão, também Aluno e Professor) também herdassem
> o método dessa interface. Na realidade Pessoa apenas herda a obrigação de
> implementar esse método, mas na prática isso significa que podemos garantir
> que Profesor, Aluno, e Data sempre responderão à mensagem compareTo(Pessoa
> p).
> Podemos fazer então:
> Comparable<Pessoa> comp1 = new Aluno();
> Comparable<Pessoa> comp2 = new Professor();
>
> A única coisa que podemos garantir de uma variável tipo Comparable<Pessoa>
> é que ela pode apontar para objetos que a implementam, mais nada.
>
> Portanto, escrever comp1.getDre()  dará erro de compilação, porque nada
> impede que você tenha feito antes:
>   comp1 = comp2;
> e, nesse caso, comp1 agora estaria apontando para um Professor, que não
> sabe o que é getDre() !
>
> Mas sempre poderemos escrever:
> Pessoa p = new Pessoa(.....);
> comp1.compareTo(p);
>
> É isso aí...
>
> Jonathan
>
>
> 2008/9/22 Zaedy Sayão <[EMAIL PROTECTED]>
>
> Eu cansei de falar isso na monitoria de hj....
>> Eh bom q vc nao tenha ido, senao eu vou te matar...xD
>>
>> Mas isso eh meio complicado por email.
>> Se me achar amanha antes do teste te explico pessoalmente...
>>
>> []s
>>
>> 2008/9/22 Peter <[EMAIL PROTECTED]>
>>
>>  Vou me aventurar... vamos ver se consigo ajudar:
>>>
>>> Imagine uma variável do tipo int.
>>> Ele só pode apontar para valores tipo int.
>>> Logo, só vai poder participar de operações que estejam definidas para o
>>> tipo int.
>>> Quando definimos uma classe ou uma interface, estamos definindo um tipo
>>> também.
>>>
>>> Uma variável de um tipo de uma interface só pode participar de operações
>>> válidas para aquela interface, ou seja, vc só vai conseguir chamar os
>>> métodos declarados naquela interface (ou numa interface da qual ela tenha
>>> herdado).
>>> Isso pq esta variável estará apontando para uma classe qualquer da qual a
>>> única coisa que vc pode garantir é que ela implementa aqueles métodos. Logo,
>>> vc só poderá chamar aqueles métodos, independe da classe da instância
>>> apontada por aquela referência.
>>>
>>> O mesmo serve para classes abstratas E concretas. Se uma referência de um
>>> tipo de uma classe X aponta para uma instância de uma subclasse Y, vc só
>>> poderá chamar métodos da classe X e das superclasses dela, não conseguirá
>>> acessar os métodos exclusivos da subclasse Y.
>>>
>>> Isto garante tipagem da linguagem. Java é uma linguagem fortemente
>>> tipada.
>>>
>>> Espero ter conseguido ajudar. Se vc tiver dúvidas, pode me ligar até
>>> 21:00 ou aparecer no msn, icq, google talk, skype, sinal de fumaça, etc,
>>> etc...
>>>
>>> Abraço!
>>>
>>>  Peter P. Lupo
>>> Undergraduating in Computer Science DCC/UFRJ
>>> Sun Certified Java Associatehttp://pplupo.googlepages.com/
>>> Cell. +55 (21) 81742487
>>>
>>>
>>>
>>> Flavio Costa wrote:
>>>
>>> Meio dificil explicar isso via e-mail.
>>> Acho que essa dúvida deveria ser sanada pessoalmente com os monitores ou
>>> o professor.
>>>
>>> 2008/9/22 FernandoKling <[EMAIL PROTECTED]>
>>>
>>>>
>>>> se eu entendi bem, a dúvida do gustavo é em relaçao à variaveis cujo
>>>> tipo sao interfaces ou classes abstratas
>>>> tipo o trecho de código q tinha no teste 1:
>>>> M x = new A();
>>>> onde M podia ser uma interface...
>>>>
>>>> On 22 set, 19:27, Gustavo Cury <[EMAIL PROTECTED]> wrote:
>>>> > Sobre esta dúvida: "Uso correto de variáveis do tipo de uma interface
>>>> ou do tipo de uma classe abstrata"
>>>> > Está na pagina do professor, fui olhando os tópicos e quando chegou
>>>> nesse, não entendi.
>>>> > Gustavo Cury
>>>> >
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> Flávio Coutinho da Costa
>>>
>>>
>>>
>>>
>>>
>>
>>
>> --
>> Zaedy Dantas Sayão
>> Graduando em Ciência da Computação DCC/UFRJ
>> http://www.manufato.com.br/
>> MSN: [EMAIL PROTECTED]
>>
>>
>>
>
> >
>


-- 
Flávio Coutinho da Costa

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Comp 
2 - Geral" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/comp2-geral?hl=en
-~----------~----~----~----~------~----~------~--~---

Responder a