Clerison C. A - Empreendedorismo e Desenvolvimento de Software.


quinta-feira, 22 de março de 2012

Conceito de Polimorfismo



O termo polimorfismo é originário do grego e significa "muitas formas" (poli = muitas, morphos = formas).


A melhor definição que li sobre polimorfismo de uma forma simples e prática foi a da apostila de Ruby da Caelum, o texto diz:


"Na orientação a objetos a chamada de um método é análoga ao envio de uma mensagem ao objeto. Cada objeto pode reagir de uma forma diferente à mesma mensagem, ao mesmo estímulo. Isso é o polimorfismo."

 Uma reflexão no texto acima torna fácil a compreensão de polimorfismo, vale ressaltar a seguinte frase:


"Na orientação a objetos a chamada de um método é análoga ao envio de uma mensagem ao objeto. Cada objeto pode reagir de uma forma diferente à mesma mensagem, ao mesmo estímulo. Isso é o polimorfismo."

No exemplo da imagem acima, podemos fazer uma chamada do tipo arara.emitesom() e cascavel.emitesom(), ambas tem o mesmo método (emitesom()), mas trazem reações diferentes.

Isto (assim como outros aspectos) demonstra a importância estudar várias linguagens diferentes, com isso é possível entender a forma como diferentes autores explicam os conceitos de uma forma bem específica. Lembro que o melhor texto que me ajudou a compreeder a orientação a objetos foi um que li em uma apostila de python.

quinta-feira, 1 de março de 2012

O Santo Graal da energia limpa e barata


 O inventor John Kanzius estava tentando realizar uma proeza aparentemente inalcançável – construir uma máquina que cura o câncer com ondas de rádio – quando ele inadvertidamente conseguiu outra: fez água salina pegar fogo, criando uma chama de até 1.650ºC.
O fenômeno com a água salgada ocorreu quando um assistente seu estava bombardeando, com ondas de rádio, um tubo de ensaio cheio de água salgada e bateu no tubo, causando um pequeno flash. Curioso, Jonh acendeu um fósforo. “A água pegou fogo como propano”, ele recorda.
 O cientista de materiais da Penn State University, Rustum Roy, visitou Jonh em seu laboratório depois de ver seu feito no Google Video. e constatou que a descoberta era real.
John Kanzius morreu de pneumonia em fevereiro de 2009.
Como funciona:
1. Um gerador emite ondas de rádio de 14 megahertz;
2. As ondas bombardeiam uma solução de água salgada (a água pode ser retirada do próprio mar);
3. Exatamente o que ocorre ainda é um mistério, mas uma teoria diz que o cloreto de sódio enfraquece as ligações entre os átomos de hidrogênio e oxigênio na água. As ondas de rádio quebrariam a ligação liberando gás hidrogênio inflamável;
4. Um fósforo acende o hidrogênio, gerando uma intensa chama de até 1.650ºC;
5. O calor resultante consegue propelir um motor simples.
Fontes: 


http://groups.tecnocientista.info/nd.asp?cod=6239


quinta-feira, 16 de fevereiro de 2012

Site de fernandinho

O site de fernandinho, o último trabalho que fiz antes do sige2, desenvolvido em flash, tem também uma galeria de imagens feito com action script 2.0



A galeria de imagens é infinita (teoricamente), basta dar o upload de arquivos jps e com o seguinte nome 1.jpg, 2.jpg, 3.jpg e etc
Para dividir em galerias o criei três pastas distintas no host: masculino, feminino e oriental

O design foi implementado por Bruno Santos, a idéia da estrela ninja no menu veio do próprio cliente (Fernandinho)

Foi desenvolvido no final do ano passado.


quarta-feira, 21 de dezembro de 2011

Instalando o plugin do firefox no Linux




1) no site de download do plugin, baixe o arquivo tar.gz (http://get.adobe.com/br/flashplayer/)

2) descompacte o arquivo, copie o arquivo libflashplayer.so

3) cole este arquivo na pasta /opt/firefox/plugins

Reinicie o firefox e pronto.

Eu descompactei o tar.gz na pasta Documentos, se fizer o meso digite o código abaixo no terminal:

sudo cp home/casa/Documentos/libflashplayer.so /opt/firefox/plugins

Lembre-se de reiniciar o firefox

quinta-feira, 15 de dezembro de 2011

Nested static Class e Inner Class em Java




Nested classes são classes construídas dentro de outras classes, diferentemente de uma classe normal ou top-level que é um membro direto do pacote (package).
São divididas em dois grupos: estáticas e não estáticas, as classes estáticas são chamadas static nested class, e as que não são declaradas como static são as chamadas inner classes.


A nested static class - por ser estática interage com a classe externa e com qualquer outra classe top-level.
para acessar a nested static class deve-se utilizar o nome da classe externa (ex: classeExterna.NestedClass)

Instanciando uma nested static class:
Main.Inner2 objeto1 = new Main.Inner2();

Esta classe não pode acessar os membros da classe externa.


A inner class, pode ser moldada como os modificadores (public, private, protected, abstract e final) pode ser instanciada apenas pela classe externa que a contém.
Para instanciar uma inner class é necessário primeiramente instanciar a classe externa:
Main objMain = new Main();
Main.Interna objetoInner = objMain.new Interna();


Código-Exemplo:

public class Main {


public static void main(String[] args) {

// instanciando uma inner class
Main objMain = new Main();
Main.Interna objInner = objMain.new Interna();


//instanciando classe estática - nested static class
Main.Estatica objStatic = new Main.Estatica();
objStatic.getNome();

}



//inner class
public class Interna{

String id;

//construtor da inner class
Interna(){
System.out.println("inner class instanciada");
}


public void getNome(){

System.out.println("Interna");
//acessando o método da classe main
metodo1();
}

}




// nested static class

static class Estatica{
String id;


//construtor da nested static class
Estatica(){
System.out.println("nested static class instanciada");
}


public static void getNome(){
System.out.println("Estatica");
}

}



//metodo da classe main

public void metodo1(){

System.out.println("metodo da classe main acessado");

}

}



Para quê usar classes internas?

1) agrupar as classes logicamente - Se uma classe é usada apenas para apoio a outra classe, é melhor incorporar as classes.

2) Aprimora o encapsulamento - Imagine uma classe X que precisa acessar alguns membros da classe Z (declarados como private), escodendo a classe X dentro da classe Z, a classe X pode acessar os membros da classe Z mesmo estes sendo declarados como private.

3) Aprimora a manutenção e facilita a leitura de código - Escondedo classes internas as classes de alto nível, deixa o código perto de onde ele é realmente utilizado.

Ainda há dois tipos de inner classes que explicarei posteriormente.
Local inner classes
Anonymous inner classes

terça-feira, 13 de dezembro de 2011

DAO - Data Access Object, exemplo com Java e PostgreSQL

A função do DAO é colocar o código de acessao ao banco de dados numa classe isolada, para não misturar com o código da lógica de negócio, melhorando a manutenção do mesmo.

Anteriormente eu utilizei uma exemplo de conexão com o seguinte statement:

Statement st = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);

Agora usaremos algo mais elegante :

String sql ="insert into cliente (nome,endereco,telefone,info) values (?,?,?,?)";
PreparedStatement stmt = con.prepareStatement(sql);


O SQL para a criação da tabela:

CREATE TABLE cliente
(
codigo serial NOT NULL,
nome character varying(40),
endereco character varying(60),
telefone character varying(40),
info character varying(300)
)
WITH (
OIDS=FALSE
);
ALTER TABLE cliente OWNER TO postgres;


import java.sql.*;

public class Banco {

private String url;
private String banco;
private String senha;
private String driver;
private Connection con;


//construtor - toda vez que esta classe é instanciada cria uma conexão
public Banco() {

driver = "org.postgresql.Driver";
url = "jdbc:postgresql://localhost:5432/mpf";
banco = "postgres";
senha = "1";

try {

Class.forName(driver);
con = DriverManager.getConnection(url, banco, senha);

} catch (ClassNotFoundException objErroDriver) {
System.out.println("Erro no carregamento do driver JDBC");

} catch (SQLException objErroConexao) {

System.out.println("Erro na Conexao");

}

}

public void adiciona(Cliente cliente) throws SQLException {

String sql ="insert into cliente (nome,endereco,telefone,info) values (?,?,?,?)";
PreparedStatement stmt = con.prepareStatement(sql);

stmt.setString(1,cliente.getNome());
stmt.setString(2,cliente.getEndereco());
stmt.setString(3,cliente.getTelefone());
stmt.setString(4,cliente.getInfo());

stmt.execute();
stmt.close();
}
}



//-------------------------------------------------------------------------



public class Cliente {

private String nome,endereco,telefone,info;


public Cliente(String nome,String endereco,String telefone,String info){

this.nome = nome;
this.endereco = endereco;
this.telefone = telefone;
this.info= info;

}

public String getNome(){
return this.nome;
}

public String getEndereco(){
return this.endereco;
}

public String getTelefone(){
return this.telefone;
}

public String getInfo(){
return this.info;
}
}


//-------------------------------------------------------------------------


import java.sql.SQLException;


public class Main {

public static void main(String[] args) throws SQLException {

Banco banco;
banco = new Banco();

Cliente cliente;
cliente = new Cliente("Jose","rua primavera n353","32988888","nome ficticio");

banco.adiciona(cliente);

}
}

sexta-feira, 9 de dezembro de 2011

Exemplos HashMap - Java






Aí vai dois trechos de código utilizando o HashMap


import java.util.HashMap;

public class Hash {

public static void main(String args[]){

// hashmap não aceita valores duplicados ele susbstitui o valor
//hash map= classe mas, map = interface
HashMap container = new HashMap();

container.put(1, "codigo1");
container.put(2, "codigo2");
container.put(3, "codigo3");
container.put(4, "codigo4");
container.put(5, 2.5);

//remove o valor do segundo
container.remove(2);

//duplicando um valor
container.put(1, "codigo111");

System.out.println("apenas o terceiro valor = "+container.get(3));
System.out.println("teste1 = "+container);

}
}




import java.util.HashMap;


public class Hash2 {

public static void main(String args[]){

objeto ob1,ob2,ob3;

ob1 = new objeto();
ob2 = new objeto();
ob3 = new objeto();

// estabelece o tipo de dado que vai receber
HashMap<String, objeto> hash = new HashMap<String, objeto>();

hash.put("primeiro",ob1);
hash.put("segundo",ob2);
hash.put("terceiro",ob3);

System.out.println("apenas o terceiro valor = "+hash.get("terceiro"));

}

}


HashMap container = new HashMap(); cria o objeto container a partir da classe HashMap

container.put(3, "codigo3"); associa o valor 3 a string "codigo3", o 3 se torna a chave e a String é o conteúdo do registro, para capturar o valor registrado utiliza-se a chave como no exemplo abaixo:

System.out.println("apenas o terceiro valor = "+container.get(3));