domingo, 30 de junho de 2013

Dicas de Programação: Qual é a diferença entre métodos public, protected, private e "default" no Java?

Dúvida de um pessoal aqui, que vou tentar (eu disse "tentar" :P ) explicar.

No Java, existem quatro tipos de "permissões" de acesso a métodos (isso também vale para classes e propriedades, com algumas exceções...) que, dependendo de sua escolha, parte do seu código-fonte vai ou não "enxerga-la" durante a execução/compilação deste. São elas:

- public : A mais fácil de explicar, pois todo código tem acesso a ela! :)
Exemplo:

Arquivo: Util.java

package teste.util;


public class Util {
           public void nothing() {
                    System.out.printf("Estou fazendo %s\n","Nada");
           }
}

Arquivo: Main.java

package teste.main;

import teste.util.Util;

public class Main {
           public static void main(String... args) {
                      Util util = new Util();
                      util.nothing();
           }
}

- private : A mais restrita das quatro, onde somente a classe que a declarou tem acesso:

Arquivo: Util.java

package teste.util;

public class Util {
            //Este método é chamado somente dentro desta classe
           private void privateNothing() {
                    System.out.printf("Estou fazendo %s\n","Nada");
           }

           public void publicNothing() {
                    System.out.println("Será que chamo?");
                    this.privateNothing();
           }
}

Arquivo: Main.java

package teste.main;

import teste.util.Util;

public class Main {
           public static void main(String... args) {
                      Util util = new Util();
                      //util.privateNothing(); //NÃO FUNCIONA
                      util.publicNothing();
           }
}

(Até aqui, foi bem simples explicar. Mas a partir de agora que vem o problema... :P)

- protected : Este "acesso" é meio estranho, mas vamos lá: a classe que declarou, as classes que estão no mesmo pacote e a classe que herdou desta, tem acesso a ela.
Putz... Confuso não? Melhor pedir ajuda ao exemplo. (universitários? nem pensar!) :P

Arquivo: Util.java

package teste.util;

public class Util {
           protected void protectedNothing() {
                    System.out.printf("Estou fazendo %s\n","Nada");
           }
}

Arquivo: Inutil.java

package teste.util;

//Não herdou mas esta no mesmo pacote (isto funciona!)
public class Inutil {
           public void nothing() {
                   Util util = new Util();
                   util.protectedNothing();
           }
}

Arquivo: HerancaUtil.java

package teste.heranca;
import teste.util.Util;

//Herdou, mas não esta no mesmo pacote (isto funciona!)
public class HerancaUtil extends Util {
           public void nothing() {
                   super.protectedNothing();
           }
}

Arquivo: Main.java

package teste.main;

import teste.heranca.HerancaUtil;
import teste.util.Inutil;
import teste.util.Util;

public class Main {
           public static void main(String... args) {
                      Util util = new Util();
                      //util.protectedNothing(); //NÃO FUNCIONA
                      Inutil inutil = new Inutil();
                      inutil.nothing();
                      HerancaUtil herancaUtil = new HerancaUtil();
                      herancaUtil.nothing();
           }
}

(Só falta uma... :) )

- default : O acesso é restrito as classes que estão no mesmo pacote, ou seja, classes que não estejam no mesmo pacote, mesmo as que herdam da que declarou o método, não o acessam.

Arquivo: Util.java

package teste.util;

public class Util {
           void defaultNothing() {
                    System.out.printf("Estou fazendo %s\n","Nada");
           }
}

Arquivo: Inutil.java

package teste.util;

//Não herdou mas esta no mesmo pacote (isto funciona!)
public class Inutil {
           public void nothing() {
                   Util util = new Util();
                   util.defaultNothing();
           }
}

Arquivo: HerancaUtil.java

package teste.heranca;
import teste.util.Util;

//Herdou, mas não esta no mesmo pacote (NÃO funciona!)
public class HerancaUtil extends Util {
           public void nothing() {
                   //super.defaultNothing(); //NÃO FUNCIONA
           }
}

Arquivo: Main.java

package teste.main;

import teste.heranca.HerancaUtil;
import teste.util.Inutil;
import teste.util.Util;

public class Main {
           public static void main(String... args) {
                      Util util = new Util();
                      //util.defaultNothing(); //NÃO FUNCIONA
                      Inutil inutil = new Inutil();
                      inutil.nothing();
           }
}

(Ufa, terminou! :) )

Espero que alguém compreenda o que esta escrito... :P

Até mais!

domingo, 23 de junho de 2013

Dragon Quest Caboclo

Quem já jogou Dragon Quest? E quem já ouviu Faroeste Caboclo de Renato Russo?

Se você já jogou e já ouviu e gosta dos dois, que tal ver um amálgama (mistura) feita por Marcos Castro  e seu irmão:



Bem bacana! Mas precisa ter paciência, pois é tão comprido quanto o som original. :P

Putz... Deu uma saudade de jogar um RPG...

Parabéns aos dois! E muito obrigado. :)

Até mais!

terça-feira, 18 de junho de 2013

Alguém se lembra: Programa Enigma?

Quando eu era adolescente (tinha uns 11 anos, eu acho...), o único programa de auditório que assistia na TV, era um que passava no Sábado, ás 19:00hs., na TV Cultura.


Ele se chamava Enigma.

Não sei o porque, mas aquele programa, com aquele cenário temático do Antigo Egito, mais aquela música tema de Indiana Jones, me encantavam de uma maneira muito especial (vai ver, por que eu era muito fã do filme :P ).

Tão especial que, o que sei de "História Antiga", devo muito a este "Game Show". 

"Eu os desafio a descobrirem o meu Enigma. E não se esqueçam: A morte virá com asas ligeiras, para aquele que perturbar o sono do faraó"

Humm... Pensando bem, várias crianças devem ter tido pesadelo ao assisti-lo... :P

Até mais! 

segunda-feira, 17 de junho de 2013

Alguém se lembra: Alex Kidd in Shinobi World?

Não sei se eu disse isso, mas tive a primeira versão do Master System da Tec Toy. :P

Joguei muito Hang-On, Safari Hunt (aquele, que usava a pistola Light Phaser), Keisenden, Shinobi e Alex Kidd in Miracle World...

Falando nesses dois últimos, sabia que tinha um game que fazia "merge" (mesclava, em tradução livre do informatiquês para português) do mundo de Shinobi e dos personagens de Alex Kidd.

O jogo se chamava "Alex Kidd in Shinobi World"


Eu achava o jogo muito mais legal e ágil que o Shinobi original do Master System, mas sentia falta das fases de bônus (aquele onde a gente atirava shurikens).


Porém, o mais interessante, é que o chefe da primeira fase, nas primeiras versões do jogo, tinha a cara do Mário.


Hum... Por que será? :P

Até mais!

domingo, 16 de junho de 2013

OpenCola - Coca-Cola Open Source

Todo mundo sabe que o que vai na Coca-Cola é um dos maiores segredos industriais no mundo.

Mas o que poucos sabem, é que existe um refrigerante de Cola que possui a fórmula distribuída para quem quiser obte-la.

Ele se chama "OpenCola".


Bacana, não? :)

Se quiser saber mais sobre esta bebida e/ou pegar sua receita, entre no Wikipédia:
http://en.wikipedia.org/wiki/OpenCola_(drink)

Pena que as informações estão em inglês (mas nada que o "Google Translate" não possa resolver...).

Obs.: Se alguém resolver executar a receita, não me chame (afinal, sou muito "jovem" para morrer envenenado...) -- brincadeira, pessoal. :P

Até mais!

Alguém se lembra: Mandiopã?

Quando eu tinha 7 anos (faz o quê, uns 29 anos atrás...), eu comia uma coisa frita e muita gordurosa chamada Mandiopã.


Mandiopã é um salgadinho feito basicamente de mandioca (daí o nome :) ) que era frito na hora, antes de comer. Muito parecido com "Baconzitos" da Elma Chips, só que não tinha tanto sal/tempero quanto esta (ou seja, era meio sem gosto...).

Minha vó sabia fazer... Pena que o tempo é um pouco cruel...

Saudades daquela época...  :)

Obs.: Acabei de me lembrar que tinha sabores de "Bacon", "Camarão" e outros. Mas para mim, tinha tudo o mesmo gosto de "Isopor" e, mesmo assim, era um delícia! :P

Até mais!

Dicas de Programação: Exibindo/Escondendo uma DIV em Javascript

Poxa, desculpa pessoal, mas andei meio ocupado aqui no trabalho (normal, eu acho... :P ).

Como estou meio sem assunto, vou postar um dica bem simples de Javascript. :)

<div id="teste">Visivel</div>

Existem duas maneiras de exibir/esconder uma div:

- A primeira é usar a propriedade "visibility" do style de um elemento:

<script>
//Torna a div invisível
document.getElementById("teste").style.visibility = "hidden";
</script>

<script>
//Torna a div visível
document.getElementById("teste").style.visibility = "visible";
</script>

- A segunda é usar a propriedade "display" da mesma:

<script>
//Torna a div invisível
document.getElementById("teste").style.display = "none";
</script>

<script>
//Torna a div visível
document.getElementById("teste").style.display = "block";
</script>

Agora você deve perguntar: qual é a diferença entre os dois?

A propriedade "visibility" só deixa o elemento visível ou invisível, mas deixa o espaço que ele ocupa na tela.

A propriedade "display" faz com que o elemento desapareça, retirando-o inclusive (ou seja, o espaço que ocupa também "desaparece").

É isso aí, estou realmente sem assunto... 

Até mais!