Einar Saukas wrote:
> "Frederico Charle S. Faria" wrote:
> >
> > Agora o motivo porque os projetores de Java decidiram por isso - exigir o
> > super() na primeira linha impossibilitando mesmo a utilização de variáveis
> > não membros - com certeza foi devido a fatores de complexidade de
> > implementação e performanca. ( da MV)
>
> Muito obrigado pelas informações, mas eu conheço um pouco sobre
> técnicas de compilação e não vejo porque a utilização de variáveis
> locais afetaria significativamente a implementação e muito menos a
> performance. Afinal de contas, para um compilador, esse trecho de código:
Primeiramente voce entendeu errado! A perda de performance e a dificuldade de
implementação
não se referem a utilização de variáveis locais , mas sim a decisão de projeto
dos fundadores do Java
,ou seja, exigir que o super() seja o primeiro comando do construtor.
Espero que perceba a diferença, e veja que se fosse de maneira contrária a
implementação seria mais difícil e a
performance com certeza mais pobre!!!
>
>
> MessageOutputStream() throws java.io.IOException {
> ByteArrayOutputStream tmp = new ByteArrayOutputStream();
> super(tmp); // ERRO!
> }
>
> Tem praticamente a mesma complexidade deste aqui:
>
> MessageOutputStream() throws java.io.IOException {
> super(new ByteArrayOutputStream());
> }
>
>
Voce está errado! Isto depende da implementação do Compilador.. Para C++ , por
exemplo, existem
várias implementações diferentes para isso! Vejo o livro do Meyers, ele cita
exemplos de implementação
deste tipo. Tem compiladores que usam algumas técnicas de otimização quando é
utilizada esta última construção.
Talvez alguns compiladores Java utilizem esta mesma técnica.
> À primeira vista, o compilador só tem que ser um pouco mais
> cuidadoso na manipulação da pilha de execução, mas isso parece ser
> muito fácil de resolver. Será que tem algum outro fator que eu não
> percebi?
>
É fácil de perceber que é mais ineficiente... Imagine um construtor com várias
chamadas de métodos
aninhados, com a implementação corrente basta para o compilador analisar a
primeira linha do construtor.
Se não fosse assim o compilador teria que analisar toda a a´rvore de métodos
aninhados para
garantir que não houvesse nenhuma referencia a algum atributo da classe antes da
chamada do super.
Mais memória e mais processador!!. Este é um simples exemplo...
Abraços,
Fred.
>
> Um abraço,
>
Abraços,
Fred.
>
> Einar Saukas
> Technical Consultant
> Summa Technologies, Inc.
> http://www.summa-tech.com
>
> --------------------------- LISTA SOUJAVA ---------------------------
> http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP
> [para sair da lista: http://www.soujava.org.br/forum/cadastrados.htm]
> ---------------------------------------------------------------------
--
Frederico Charles S. Faria
Especialista em Sistemas
INATEL - PRODEP
Fone/Phone: +55 35 471-9280
--------------------------- LISTA SOUJAVA ---------------------------
http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP
[para sair da lista: http://www.soujava.org.br/forum/cadastrados.htm]
---------------------------------------------------------------------