Quanto a diretiva de compilação vale lembrar que o Java optima o codigo. (um opção no processo de compilação)

    Se eu tiver o seguinte codigo:

public class Exemplo
{
    private static final int MODO_ATUAL = 2;
    private static final int MODO_DESENVOLVIMENTO = 1;
    privare static final int MODO_PRODUCAO = 2;

    public void main(String[] args) throws Exception
    {
        if (MODO_ATUAL=MODO_DESENVOLVIMENTO)
        {
            // codigo de log, ou qualquer outra coisa.
        }
        System.out.println("Ola");
    }
}

O compilador só vai compilar:

public class Exemplo
{
    public void main(String[] args) throws Exception
    {
        System.out.println("Ola");
    }
}

Deixo aqui tambem minha opniao sobre LOG. Log tem que estar no codigo de producao. Mas... existem 2 (ou mais) tipos de LOG. O log de producao e o log de desenvolvimento.

Um abraço,


flexa wrote:
Caros,

Quanto à questão da diretiva de compilação há uma solução muito melhor em Java que é usar o compilador de Aspect Oriented Programming. A solução é melhor pois os aspectos são escritos em separado do seu código-fonte em Java e são incluídos direto no .class através de injeção de código, por consequência, quando se desliga um aspecto não há mais injeção de código.

Os Aspectos funcionam muito melhor em Java por causa do formato .class, que é igual não importando a plataforma, o que permite injeção de código. Como C/C++ não tem um formato de executável padrão não há a mesma facilidade.

Mais informações sobre Aspectos podem ser obtidas em http://aosd.net/


Flexa


At 12:12 24/2/2003, you wrote:

Concordo Michael, deveria estar na java-list, mas
já que estamos aqui. tenho uma correção a fazer : o finalize
é chamado antes do GC recolher o objeto e não após o objeto
sair de seu escopo. Há uma grande diferença ... por isso
ele não pode ser comparado a um destrutor. concorda ?

Sobre o 'clone' não vou comentar, todos já sabem...

Quanto as diretivas Michael, há um grave problema por sua falta :
Quem já programou em linguagens como C/C++, sempre teve à
disposição um meio prático para gerar o código para produção
e para desenvolvimento, o código de produção não precisa
fazer logs e checar assertivas, então não precisa das 'chamadas'
em java eu preciso fazer algo como:

if (desenvolvimento) {
    logs, assertivas etc...
}

Hoje com 1.4 posso fazer 'uma gambiarra' com o assert

assert 1=1: logs,etc...

mas não é correto...

Não vamos mais alongar a discussão, ou podermos ir para o java-list se
alguém quiser prosseguir.

okeys.

Até mais.




                                                                                                          
                      "Michael                                                                            
                      Nascimento               Para:    <[EMAIL PROTECTED]>                  
                      Santos"                  cc:                                                        
                      <[EMAIL PROTECTED]         Assunto: Re: [enterprise-list] Destrutor                   
                      il.com>                                                                             
                                                                                                          
                      24/02/03 10:37                                                                      
                      Responder a                                                                         
                      enterprise-list                                                                     
                                                                                                          
                                                                                                          



Para implementar o que voce quer, seria necessario que houvesse um operador
delete no Java, o que tornaria facil que se esquecesse de usa-lo, causando
memory leaks. O metodo finalize eh chamado quando o objeto sai do escopo e
nao pode mais ser referenciado, exceto quando a VM estah proxima de ser
terminada. Se voce fizer um debug, perceberah que o finalize normalmente eh
chamado na maioria das implementacoes de VM alguns instantes depois de o
objeto nao poder ser mais referenciado. A sua chamada nao eh certa, mas eh
bastante provavel e com um delay relativamente pequeno com relacao a morte
do objeto. Pode nao ser a solucao perfeita, mas simplicidade e performance
tem seu preco.

Com respeito a clonagem, concordo que eh uma questao bastante polemica,
especialmente referente a implementacao de deep cloning. Quanto aos
operadores de sobrecarga, a grande maioria dos desenvolvedores Java nao
sente a menor falta deles e eles realmente tornam o codigo ilegivel exceto
em dominios bem limitados, como matematica - operacoes com matrizes e
coisas
do genero. Diretivas de compilacao, bem, desculpe, mas nao fazem o menor
sentido - a menos que voce me prove o contrario :-P

Para concluir, sinceramente acho que esta discussao deveria ir para a
java-list, porque nao estamos falando nada relacionado a J2EE. Que acha?

[]s
Michael Nascimento Santos
Sun Certified Programmer for the Java 2 Platform
Sun Certified Programmer for the Java 2 Platform 1.4
Sun Certified Web Component Developer for J2EE
Moderador SouJava - www.soujava.org.br


----- Original Message -----
From: "Giuseppe Proment" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Friday, February 21, 2003 8:50 PM
Subject: Re: [enterprise-list] Destrutor



Antes do Java programava em C++ então entendo que o destrutor poderia ser
chamado em java
quando o objeto sai de seu escopo ou não pode mais ser referênciado. A
explicação para o não
uso do Finalize é bastante vaga... Acho que isso é um dos furos da
linguagem, como muitos outros
exemplo: falta de construtores de cópia remendados pelo 'clone', falta de
sobrecarga de operadores
porque foi julgado 'complexo',  falta de diretivas de compilação idem,
etc...
O que ocorre é a criação de um método próprio para fazer clean-up e temos
sempre que lembrar
de chama-lo, porque não há outro jeito... Uma solução bastante desajeitada.





                      "Michael
                      Nascimento               Para:
<[EMAIL PROTECTED]>
                      Santos"                  cc:
                      <[EMAIL PROTECTED]         Assunto: Re:
[enterprise-list] Destrutor
                      il.com>

                      21/02/03 16:31
                      Responder a
                      enterprise-list





Senao voce ia ter que acabar sendo obrigado a dizer quando ele precisava
ser
chamado. Ou o overhead de execucao ia ser enorme, porque a cada instrucao,
o
garbage collector teria que checar para quais objetos jah seria possivel
chamar o destrutor.

Se voce pensou em algo diferente disto, explique melhor.

[]s
Michael Nascimento Santos
Sun Certified Programmer for the Java 2 Platform
Sun Certified Programmer for the Java 2 Platform 1.4
Sun Certified Web Component Developer for J2EE
Moderador SouJava - www.soujava.org.br

----- Original Message -----
From: "Nilseu Padilha" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Friday, February 21, 2003 2:44 PM
Subject: [enterprise-list] Destrutor


> Alguem sabe o motivo pelo qual nao incluiram um Destrutor decente (nao
finalize()) na especificacao de Java?
>
>
> <Padilha id="Nilseu">
> Nilseu Perside Ortiz Padilha Junior
> Desenvolvedor Java - J2EE
> Immediate Consultoria e Sistemas
> http://www.immediate.com.br
> Ciencia da Computacao - ULBRA
> <Quote>
> Rejeitamos reis, presidentes e votos. Acreditamos em puro consenso e
codigo eficiente. - Dave Clark
> </Quote>
> <Quote>
> One exam does not a (J2EE) architect make. - Master Yoda
> </Quote>
> </Padilha>
>
>
> ---------------------------------------------------------------------
> Para cancelar a subscrição, envie mensagem para:
[EMAIL PROTECTED]
> Para comandos adicionais, envie mensagem para:
[EMAIL PROTECTED]
>

---------------------------------------------------------------------
Para cancelar a subscrição, envie mensagem para:
[EMAIL PROTECTED]
Para comandos adicionais, envie mensagem para:
[EMAIL PROTECTED]





--------------------------------------------------------------------- Para cancelar a subscri��o, envie mensagem para: [EMAIL PROTECTED] Para comandos adicionais, envie mensagem para: [EMAIL PROTECTED]

Responder a