Eu não achei uma razão prática disso… alguém podia dá um exemplo???
Obrigado desde já!!!
Eu não achei uma razão prática disso… alguém podia dá um exemplo???
Obrigado desde já!!!
talvez para evitar o uso de variaveis com nome iguais… afetar depois o sistema…
se ao evoluir o sistema, usa a variavel de novo, pode mudar tudo… sei la…
tb nao costumo usar private, nem protected, nos programas que crio. e tento até colocar tudo na mesma classe quando dá.
Em Java não faz muito sentido dizer que temos variáveis globais, já que o conceito mais próximo disso seriam os atributos da classe.
E acredito que, se você entende bem OO, é muito claro o uso de atributos, que não tem nada a ver com a idéia, relacionada a programação estruturada (não OO), de “evitar variáveis globais”.
Em Java não faz muito sentido dizer que temos variáveis globais, já que o conceito mais próximo disso seriam os atributos da classe.E acredito que, se você entende bem OO, é muito claro o uso de atributos, que não tem nada a ver com a idéia, relacionada a programação estruturada (não OO), de “evitar variáveis globais”.
aahhh tah… então vc quer dizer de evitar variavéis globais é coisa de programação estruturada??? =s
Em Java não faz muito sentido dizer que temos variáveis globais, já que o conceito mais próximo disso seriam os atributos da classe.E acredito que, se você entende bem OO, é muito claro o uso de atributos, que não tem nada a ver com a idéia, relacionada a programação estruturada (não OO), de “evitar variáveis globais”.
aahhh tah… então vc quer dizer de evitar variavéis globais é coisa de programação estruturada??? =s
Não. O que ele quis dizer é que em Java não existem variáveis globais. Qualquer variável em Java ou tem escopo de classe ou tem escopo de método. Mas existem outras linguagens OO que permitem o uso de variáveis globais, como C++ e Delphi por exemplo.
Existe uma divergência sobre o uso de variáveis globais. Por exemplo, segundo as práticas de Software Craftmanship, variáveis globais não são boas porque qualquer parte do programa pode alterá-la. Isso é ruim porque ao dar manutenção é difícil saber onde ele é inicializada, para que serve, etc. Isso fica pior ainda se pensarmos em um ambiente multi-thread. Você pode simplesmente ler um valor em uma linha e na linha seguinte obter um valor completamente diferente.
Já o eXtreme Go Horse prega que se variáveis globais resolvem o seu problema, use-as. Mesmo que você crie +10 outros problemas, e dane-se quem vai dar manutenção depois.
Oi,
Acrescentando, variáveis globais ocupam a memória durante todo o tempo de execução do programa, não apenas quando necessário.
Prezados,
Evitar == Reduzir a utilização
Imaginem as classes de persistencias sem as variáveis globais. Gostei que a Anime comentou mas… isso não quer dizer que nunca iremos utilizar as variáveis globais.
É como meu dentista sempre diz “EVITE de comer doces” porém não é por isso que vou deixar de come-los (afinal a páscoa está chegando ai complica rs).
Um bom motivo para evitar variáveis globais além delas ocuparem um espaço permanente na memória, é a “Orientação a gambiarra”.
Todas as pessoas que me mostraram este tipo de uso, estavam de certa forma com dificuldades de trabalhar na composição de classes das respectivas aplicações, ou seja, usavam as variáveis globais justamente para suprir uma dificuldade com o padrão de projeto adotado. Nada que surja para dar um “jeitinho” em um problema estrutural pode ser coisa boa.
Claro que existem casos e casos, como é o das constantes.
O pior caso que já vi foi o de variáveis estáticas não finais em uma classe que trabalhavam como uma junção de informações entre as classes :D.
Att. paulo
Prezados,Evitar == Reduzir a utilização
Imaginem as classes de persistencias sem as variáveis globais. Gostei que a Anime comentou mas… isso não quer dizer que nunca iremos utilizar as variáveis globais.
É como meu dentista sempre diz “EVITE de comer doces” porém não é por isso que vou deixar de come-los (afinal a páscoa está chegando ai complica rs).
Você está falando de que linguagem ? Por que se for Java não há problema algum, mesmo porque não existem variáveis globais em Java!!!.
Prezados,Evitar == Reduzir a utilização
Imaginem as classes de persistencias sem as variáveis globais. Gostei que a Anime comentou mas… isso não quer dizer que nunca iremos utilizar as variáveis globais.
É como meu dentista sempre diz “EVITE de comer doces” porém não é por isso que vou deixar de come-los (afinal a páscoa está chegando ai complica rs).
Você está falando de que linguagem ? Por que se for Java não há problema algum, mesmo porque não existem variáveis globais em Java!!!.
Caro,
O conceito que tenho de variável global é toda variável que estão fora do métodos é podem ser utilizada em qualquer parte da classe. Acredito que vc está muito engano em sua afirmação java tem variáveis globais.
att.
Variáveis globais tendem a fugir do controle. Como o pessoal já falou, elas são alteradas em qualquer ponto do código, e isso não só peca contra seu encapsulamento, como também potencializa as chances de um programador fazer isso de maneira errada. Dependendo do que ela controle, ela gera acoplamento entre locais que não deveriam ser acoplados, e quando o sistema cresce, pode ficar difícil descobrir quem depende daquela variável e para que. Variáveis globais também são naturalmente difíceis de sincronizar e, no caso do java, por nunca saírem de contexto, dificilmente serão coletadas pelo garbage collector.
Também acho uma simplificação grosseira dizer que o java não tem variáveis globais. Uma variável publica e estática numa classe é uma variável global. Ela pode ser acessada por qualquer classe, em qualquer contexto, desde que a classe seja importada (da mesma forma que tinhamos no C uma variável que poderia ser acessada em qualquer lugar, desde que o arquivo .h fosse incluído). Não vejo onde uma variável publica e estática não seja global, até porque os problemas de uma variável assim existem, e são os mesmos.
Quando queremos dizer “evite” o uso de variáveis globais, queremos dizer “não use”. Faz muitos anos que não crio uma variáve desse tipo, e posso afirmar com 100% de certeza que não faz a menor falta. Ela também não simplifica o desenvolvimento, só complica.
Variáveis globais tendem a fugir do controle. Como o pessoal já falou, elas são alteradas em qualquer ponto do código, e isso não só peca contra seu encapsulamento, como também potencializa as chances de um programador fazer isso de maneira errada. Dependendo do que ela controle, ela gera acoplamento entre locais que não deveriam ser acoplados, e quando o sistema cresce, pode ficar difícil descobrir quem depende daquela variável e para que. Variáveis globais também são naturalmente difíceis de sincronizar e, no caso do java, por nunca saírem de contexto, dificilmente serão coletadas pelo garbage collector.Também acho uma simplificação grosseira dizer que o java não tem variáveis globais. Uma variável publica e estática numa classe é uma variável global. Ela pode ser acessada por qualquer classe, em qualquer contexto, desde que a classe seja importada (da mesma forma que tinhamos no C uma variável que poderia ser acessada em qualquer lugar, desde que o arquivo .h fosse incluído). Não vejo onde uma variável publica e estática não seja global, até porque os problemas de uma variável assim existem, e são os mesmos.
Quando queremos dizer “evite” o uso de variáveis globais, queremos dizer “não use”. Faz muitos anos que não crio uma variáve desse tipo, e posso afirmar com 100% de certeza que não faz a menor falta. Ela também não simplifica o desenvolvimento, só complica.
Concordo com o descrito, ´porém se este tipo de variável não faz falta por nao retiram os comandos para evitar este tipo de variavel que complica o desenvolvimento
Bem meu dentista nao entede nada de java mas… concordo que e evitar é reduzir a utilização. No caso da variavei globais o correto seria nao usar mesmo.
att.
Concordo com o descrito, ´porém se este tipo de variável não faz falta por nao retiram os comandos para evitar este tipo de variavel que complica o desenvolvimentoBem meu dentista nao entede nada de java mas… concordo que e evitar é reduzir a utilização. No caso da variavei globais o correto seria nao usar mesmo.
Tá aí uma ótima pergunta. Acho que hoje não retiram pq já colocaram.
Prezados,Evitar == Reduzir a utilização
Imaginem as classes de persistencias sem as variáveis globais. Gostei que a Anime comentou mas… isso não quer dizer que nunca iremos utilizar as variáveis globais.
É como meu dentista sempre diz “EVITE de comer doces” porém não é por isso que vou deixar de come-los (afinal a páscoa está chegando ai complica rs).
Você está falando de que linguagem ? Por que se for Java não há problema algum, mesmo porque não existem variáveis globais em Java!!!.
Caro,
O conceito que tenho de variável global é toda variável que estão fora do métodos é podem ser utilizada em qualquer parte da classe. Acredito que vc está muito engano em sua afirmação java tem variáveis globais.
att.
Atributos de classe não são variáveis globais. Variáveis globais são variáveis que são declaradas fora de qualquer método ou classe, de forma que elas podem ser usadas em qualquer ponto do programa. Isso são variáveis globais. Você pode usar variáveis assim em Delphi, C++, mas não em Java. O que o Vini disse, e isso é verdade, é que especificamente, atributos de classe públicos, estáticos e não-finais são tão prejudiciais quanto variáveis globais, mas não são a mesma coisa, pois de qualquer maneira , ele ainda está no escopo da classe.
Em todo caso, variáveis públicas, estáticas e não-finais no caso do Java, ou variáveis globais para outras linguagens não devem ser usadas. Por experiência própria digo que é um verdadeiro inferno dar manutenção em código que as usam, você simplesmente não consegue saber quem escreve o quê nessa variável. E como todo mundo pode alterar, é um prato cheio para a introdução de bugs no programa.
Pois é, mas mesmo nessas linguagens que você citou, essas variáveis estão no escopo de um módulo, ou de um namespace.
Global, global não existe em lugar nenhum.
O que difere um namespace variável estática e publica? Nada. A classe vira o namespace da variável e hoje, com o import static, nada diferirá uma variável de classe public static de uma variável global típica.
Mas enfim, o que fica claro é que escopos super abrangentes, seja no contexto de uma classe, namespace, ou num contexto ainda mais global, são sempre péssimos.
Só para expressar a minha raiva com relação ao assunto: abra um fonte PL/SQL com as ditas variáveis globais…dá vontade de matar o indivíduo que produziu tal pérola da programação, com requintes de crueldade.
Bom dia a todos.
Pelo que pude perceber, o que muda aqui é somente o nome do conceito, (variáveis globais ou públicas e estáticas), isto porque o Java não permite voce criar variáveis e métodos fora do escopo de classes, porém a finalidade do processamento é o mesmo.
No Object Pascal do Delphi permite voce criar variáveis e métodos estáticos globais fora do escopo de classes, declarados em uma Unit, e acredito que no C seja idêntico, onde basta voce acrescentar a Unit a uma outra Unit de classe e utilizá-la.
Confesso que utilizei muito variáveis globais no Delphi, e constatei que a medida que o programa cresce, fica complicado mesmo, além é claro de aumentar o número de kbytes no executável e ocupação da memória.
Ainda assim este conceito quebra um pouco as regras de Orientação a Objetos, onde variáveis deixam de ser atributos de classe e métodos ficam engessados a um mesmo tipo e lugar.
Qualquer manutenção q tenha variáveis globais na aplicação se torna um inferno… uma linguagem q tem variável global é o JavaScript, nesta linguagem é possivel fazer as variaveis brotar de qualquer lugar q possa ter o script, bizarro !! já passei por altos problemas a ponte de ter q refazer o código de JS!!
No Java, eu costumo usar as constantes publicas, porem sempre finais, geralmente em pouquíssimo lugar. tentando sempre evitar o uso desnecessário. Exemplo: preciso saber o id da entidade que representa o status inativo, neste caso crio uma constante constante publica final, ou então as queries que o sistema vai usar eu costumo guardar em constantes, porem sem finais e costumo centralizar o local destas constantes!!