[Cascavel-pm] Res: checagem de utilização de interface durante a fase de compilação

Nilson Santos Figueiredo Junior acid06 em gmail.com
Domingo Abril 1 07:04:34 PDT 2007


On 4/1/07, Alceu R. de Freitas Jr. <glasswalk3r em yahoo.com.br> wrote:
> Vou dar uma olhada no Class::C3, apesar de minhas pesquisas não terem encontrado nada sobre isso no CPAN.

Note que o Class::C3 não faz nada do que você quer. Mas se você
precisar de implementar, ele pode te ajudar pois ele faz coisas que
mexem com o mesmo tipo de coisas que você possivelmente terá que
alterar.

> Eu não sei qual a cisma com a linguagem Java... se você não gosta, não use. Eu pessoalmente prefiro Perl, mas seria muito interessante aplicar alguns dos recursos que não só a linguagem Java usa. O que é a palavra "interface" mais do que poder dizer de maneira resumida "todos os métodos dessa classe devem ser sobrescritos"? Pegar esse tipo de erro durante a compilação seria muito mais interessante do que durante a execução, apesar de testes unitários deverem cobrir esse tipo de coisa (isto é, quando eles são feitos).

Particularmente, eu acho que só não usar não é suficiente. Num bom
dia, eu vou ter falado mal de Java pra 4 pessoas ou mais. Num dia
médio, talvez eu consiga falar mal de Java para somente 2 ou 3
pessoas. Num dia ruim, eu terei falado mal de Java para apenas uma
pessoa. Mas se eu conseguir manter minha meta de falar mal de Java ao
menos uma vez por dia eu estou satisfeito.

O problema de "interface" é que o conceito só existe basicamente pra
contornar um gap de funcionalidade em Java: a falta de herança
múltipla propriamente dita. A forma padrão de se fazer isso é através
de herança múltipla. O possível problema de Perl é que só é possível
pelas ferramentas atuais uma checagem em runtime. Mas isso é assim com
qualquer linguagem moderna, na qual as classes podem ser
auto-modificantes. Então enquanto você acha "interessante" eu acho
limitador. Se você implementasse esse tipo de coisa, suas classes não
seriam mais compatíveis com coisas como o Class::Accessor, por exemplo
(bom, talvez, se você colocasse a chamada ao mk_accessors() dentro de
um bloco BEGIN isso fosse resolvido, neste caso específico). Mas
qualquer coisa que gere métodos em runtime deixaria de ser suportada.
Neste ponto, mude de linguagem de uma vez, já que você vai ter perdido
grandes recursos de Perl pra ter uma checagem superficial. Neste
ponto, é melhor você ir programa em Java ou C++ mesmo, que vão ter
checagens em tempo de compilação muito melhores - por definição.

-Nilson Santos F. Jr.


Mais detalhes sobre a lista de discussão Cascavel-pm