[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto]

[off topic] - Re: Exceções , interfaces e Java



At 11:48 17/4/2002 -0300, you wrote:
>On Tue, Apr 16 2002 at 03:26:14pm -0300, Jorge F. Del Teglia wrote:
> > Nelson, gostei muito dos seus comentários, mas não tanto assim alguns dos
> > de Alan...
>
>Calma la'! O Alan nao falou nada disso, eu e' que acho que ele falaria :-)

oops! Desculpa; interpretei errado.

>Nada a ver. Claro, duas classes em relacao "pai-filho" provavelmente, mas
>nao obrigatoriamente, vao ser do mesmo tipo; mas isso e' "mero detalhe", e
>outras classes fora dessa hierarquia podem tambem ser do mesmo tipo. Veja
>bem: estou falando de Smalltalk.

verdade

>Voce pode passar um objeto da classe "sub" para a funcao printsuper? Eu
>acho que nao, e o gcc concorda comigo :-). Portanto, elas nao sao do mesmo
>tipo: a heranca nesse caso e' so' de implementacao.

Concordo com você que a extensão de classes usando o keyword private 
possibilita reuso de código sem inclusão do tipo, mas desde um ponto de 
vista um pouco mais conceitual de objetos (e falo dos conceitos, não da 
implementação de Stroustrup ;-) é bom que a relação entre classes chamada 
herança cumpra o principio de sustitutabilidade (Barbara Liskov) -- você 
falou dele no e-mail anterior, acho. Seguir este principio, segundo varios 
autores, melhora a qualidade dos modelos OO.
Basicamente C++ permite quebrar este principio .

Eu, pessoalmente, acredito que modelos de classes onde a propriedade 
anterior é verdade, são mais "sãos".
Apos desenvolver software em C++ por alguns anos, o "subclasseio" privado 
não me trouxe mais benefícios que os obtidos utilizando outras técnicas 
(por exemplo delegação, com a qual o código fica menos acoplado).


> > >Em Java e C++, dois objetos que tem exatamente a mesma interface so'
> > >sao do mesmo tipo se tambem pertencem a uma mesma hierarquia de
> > >classes.
> >
> > Oops again!.
> > Não necessariamente é assim, como dito pelo mesmo Alan mais abaixo: se
> > as classes dos respectivos objetos implementam a mesma interface (mesmo
> > sem pertencer a mesma hierarquia de classes), estes objetos *SÃO*
> > (pertencen/play),  do tipo definido pela interface.
>
>Voce esta' falando "javês", mas eu nao. Repare que eu disse "objetos que
>tem exatamente a mesma interface". Isso e' totalmente diferente de
>"objetos que implementam a mesma interface". "Implementar uma interface"
>e' o nome em javês para heranca de interface. Quando eu digo "objetos que
>tem a mesma interface", estou falando de objetos que tem os mesmos metodos
>publicos. Em Smalltalk, basta dois objetos terem os mesmos metodos
>publicos para poderem ser usados um no lugar do outro; em Java e C++ nao:
>eles precisam pertencer a uma mesma hierarquia de classes (ou "interfaces"
>de java, que sao totalmente equivalentes a classes virtuais puras de C++).

Acho totalmente certo o que você diz, mas acho também que não contradiz meu 
ponto. Veja assim: você falou que:

 > >Em Java e C++: dois objetos que tem exatamente a mesma interface so'
 > >sao do mesmo tipo se tambem pertencem a uma mesma hierarquia de
 > >classes.

Por exemplo, em Java:

interface M1
{
         void m1();
}

class A
         implements M1
{
         public void m1() {}
}

class B
         implements M1
{
         public void m1() {}
}

Neste caso, instâncias de A e de B, tem exatamente a mesma interface.
São de mesmo tipo.
Mas não pertencem a uma mesma hierarquia de classes (deixemos fora a 
java.lang.Object)


>Ah! Nada como ficar elocubrando ao inves de fazer EP hehehe...

;-))


Ate+

--Jorge