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

Re: Exceções, interfaces e Java




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 :-)

> >Em Smalltalk ("the one true OO-language"), um tipo e' definido por uma
> >interface; ou seja, dois objetos que tem a mesma interface tem o mesmo
> >tipo. Ponto. Final. Isso nao tem *nada* a ver com a arvore de hierarquias.
> OOPS! Nada a ver?!?

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.

> >Uma classe define a *implementacao* de um tipo; uma classe B pode ser
> >derivada da classe A, mas as duas podem *nao ser* do mesmo tipo.
> Em particular, se B é subclasse de A, B *é* sub-tipo de A. Ponto. Final. ;-)

Um exemplo (um pouco longo):

class super {
public:
	super (int);
	int num () const {return meuNum;};
private:
	int meuNum;
};

super::super (int i) : meuNum (i) { };

class sub: private super {
public:
	sub (int, const char*);
	string diz ();
private:
	string msg;
};

sub::sub (int i, const char* incMsg) : super (i), msg (incMsg) { };

string sub::diz () {
	string tmp;
	for (int i = 0; i < num(); i++)
		tmp += msg;
	return tmp;
};

void printsuper (const super& a) {
	cout << a.num() << endl;
};

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.

> >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 que voce nao me entendeu antes por causa desse "overloading" da palavra
interface :-))).

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

Ate' +
Nelson