terça-feira, 26 de novembro de 2013

[Tutorial] [Android] Primeiros Passos

Olá pessoal,

Pretendo começar aqui algum tutorial sobre aplicações em Android. Para um projeto Android vamos utilizar o software Eclipse. Não que não exista uma maneira de realizar aplicações Android no NetBeans, mas o Google oferece maior suporte e facilidade ao software Eclipse.

Inicialmente acesse http://developer.android.com/sdk/index.html e baixe o SDK, extrai-a o arquivo para a pasta desejada, ele virá com o eclipse e o SDK, ambos já configurados, para iniciar o software basta abrir o eclipse.exe na pasta Eclipse. E temos nosso Eclipse:



Agora podemos desenvolver uma aplicação Android, mas antes de mais nada ATENÇÃO a pior parte ( na minha opinião ) é testar aplicativos direto no SDK com o Eclipse. É lento e não tão prático e funcional.

Sugestão para resolver isso?
Simples, baixe a ISO do Android de sua preferência. Instale via VirtualBox. Talvez eu faça um tutorial desse procedimento caso vocês precisem! O importante é que feito isso e configuração sua aplicação será testada direto em um Android de Máquina Virtual, tornando muuuuuuuito mais rápido a etapa de testes. Nas próximas semanas vou ensinar a vocês uma primeira aplicação Android, já baseada em Modelo MVC!

sábado, 16 de novembro de 2013

[Tutorial] [Java] Aplicação com Banco de Dados embutido [Parte 1]

Olá pessoal,

Hoje vou apresentar um MEGA BIG GIGANTE tutorial, dividido em partes ( mas que graças a Deus já fiz todas partes, só preciso postar hahahaha ). Esse tutorial abordará sobre um desenvolvimento de aplicação com banco de dados embutido.
Está se perguntando pra que isso? Simples, uma aplicação para usuário comum, não precisa ter uma estrutura externa de banco de dados, como MySQL por exemplo, basta tem um banco de dados acoplado. Existem vários bancos que fazem isso, mas neste caso vamos usar o SQLite (ótimo para aplicações android também).

Vamos lá! Inicialmente baixe o jdbc do SQLite no link: https://bitbucket.org/xerial/sqlite-jdbc/downloads

Abre o NetBeans, crie um novo projeto com o nome Agenda e classe Principal em br.com.agenda.Principal ( YEAHHHHHHH vamos desenvolver uma pequena Agenda porque é mais prático para iniciantes, inclusive ). Posteriormente siga os passos abaixo:

1 Clique com o botão direito em Bibliotecas.



2 Clique em Criar.
3 Defina o nome SQLite.



4 Abre o arquivo *.jar do SQLite que salvou anteriormente e clique em okay.



PRONTO! A biblioteca está adicionada. Agora criem as classe conforme a estrutura abaixo:


Como observado acima, vamos trabalhar com o modelo MVC, se não tem conhecimento do funcionamento dê uma olhada em http://papeldiario.blogspot.com.br/2013/11/programacao-tutorial-modelo-mvc.html

CLASSE
Principal - Inicia a aplicação

CONTROLE
InicialControle - Controla o inicio da aplicação
TelaPrincipalControle - Controla a TelaPrincipal.

MODELO
ConnectionFactory - Gerencia o banco de dados e nossa conexão.
ContatoDAO - Gerencia a manipulação do Contato em nosso banco de dados.
Contato - Objeto que representa o Contato.

VISÃO
TelaPrincipal - Tela exibida para o usuário.

Nos próximos tutoriais vamos começar a desenvolver cada uma dessas classes. Ate lá :)

sexta-feira, 15 de novembro de 2013

[Programação] [Tutorial] Modelo MVC

Olá, pessoal!

Hoje estou aqui para falar de um modelo de design de aplicações o MVC. Me deparei recentemente com ele e muitos materiais presentes na web não vão direto ao ponto e não explicam diretamente. Vou tentar demostrar como esse modelo é simples e facilita muito o desenvolvimento de aplicações. Primeiro vamos entender sua teoria.

M - MODELO
Representa o objetos. Classe de dados, comunicações com banco e retorno de informações e parâmetros.

V - VISÃO
A tela propriamente dita, com recursos gráficos para exibição aos usuários.

C - CONTROLE
Funciona como uma ponte, entre o MODELO e a VISÃO.

ESQUEMA DE FLUXO
A VISÃO solicita ou executa uma ação. O CONTROLE recuperá essa informação processa e solicita respostas do MODELO. O MODELO processa o resultado e retorna para o CONTROLE que por sua vez retorna à VISÃO.

Confuso? Vamos entender na prática. Desenvolvi um pequeno app em Java que solicita o e-mail para o usuário, e insere em uma lista. Teremos quatro classes: Principal, Visão, Modelo, Objeto e Controle. Coloquei estes nomes para facilitação de compreensão.

Crie um novo projeto com o nome MVC no Netbeans (ou outro editor JAVA de sua preferência). Crie a classe principal como br.com.mvc.Principal. Posteriormente crie as seguintes classes nos seguintes pacotes:

Classe - Pacote
Modelo - br.com.mvc.modelo
Objeto - br.com.mvc.modelo
Visao - br.com.mvc.visao
Controle - br.com.mvc.controle

Esse procedimento facilitará o nosso desenvolvimento.

CLASSE OBJETO

Uma classe simples, que somente representa os atributos e seus métodos GET/SET. É o modelo de dados do OBJETO.

package br.com.mvc.modelo;

/**
 *
 * @author Caique Monteiro Araujo
 * Classe: Objeto - Representa o objeto do nosso projeto, neste caso
 *         o e-mail do usuário.
 */
public class Objeto 
{
    // Definição do atributo e-mail
    private String email;
    
    // Método para obter o e-mail
    public String getEmail ()
    {
        return email;
    }

    // Método para setar o e-mail
    public void setEmail (String email)
    {
        this.email = email;
    }
}

CLASSE MODELO

O objetivo desta classe é manipular o OBJETO com operações que podem ser realizadas para ele. Neste caso, ele permite adicionar um e-mail e obter a lista de e-mails.

package br.com.mvc.modelo;

import java.util.ArrayList;

/**
 *
 * @author Caique Monteiro Araujo
 * Classe: Modelo, representa as operações de processamentos que podemos
 *         utilizar neste caso para a classe Objeto.
 */
public class Modelo 
{
    // Definição da lista de objetos do modelo
    private ArrayList<Objeto> objetos = new ArrayList<Objeto>();
    
    // Método para adicionar um objeto a lista
    public void adicionar (Objeto novo)
    {
        objetos.add(novo);
    }
    
    // Método para obter a lista
    public ArrayList<Objeto> obterLista ()
    {
        return objetos;
    }

}

CLASSE CONTROLE

A classe CONTROLE manipula as interações entre a VISÃO e o MODELO. Ela opera em construir os procedimentos e tratamentos de dados para enviar informações e receber respostas do MODELO e posteriormente enviar respostas à VISÃO.

package br.com.mvc.controle;

import br.com.mvc.modelo.*;
import br.com.mvc.visao.Visao;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import java.util.ArrayList;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Caique Monteiro Araujo
 * Classe: Controle, realiza os processamentos, se comunica com o Modelo
 *         e responde à Visão
 */
public class Controle 
{
    // Definição do atributo da Visão
    private Visao gui = null;
    // Definição do atributo do Modelo
    Modelo m = new Modelo();
    
    // Método construtor para iniciar Visão e adicionar controle de botões
    public Controle ()
    {
        // Nova instância da Visão
        gui = new Visao();
        // Adicionando a classe de controle de botões
        gui.adicionarControle(new VisaoController());
    }
    
    // Processar os dados da lista recebida pelo Modelo
    public void exibirLista ()
    {
        // Recebendo a lista de dados do Modelo
        ArrayList<Objeto> tabela = m.obterLista();
        
        // Cria um modelo de tabela
        DefaultTableModel preencher = new DefaultTableModel();
        // Define as colunas da tabela
        preencher.setColumnIdentifiers(new String[] {"E-MAIL"});
            
        // Para cada objeto da linha de dados do Modelo adiciona uma nova linha
        // no modelo da tabela
        for (Objeto o : tabela)
        {
            preencher.addRow(new String[] {o.getEmail()});
        }
        
        // Manipula a tabela da Visão para exibir os resultados
        gui.tabela.setModel(preencher);
    }
    
    // Extra-classa para definir controles de botões
    class VisaoController implements ActionListener 
    {
        
        // Reescreve o método actionPerformed do ActionListener
        public void actionPerformed (ActionEvent e) 
        {
            // Recebe a fonte/origem de chamada do evento
            JButton fonte = (JButton) e.getSource();

            // Se a fonte for o botão da Visão para adionar e-mails
            if (fonte == gui.botao) 
            {
                // Valida o email para constar presença do @
                if (!gui.text.getText().contains("@"))
                {
                    // Exibe mensagem de e-mail inválido
                    JOptionPane.showMessageDialog(null, "E-mail inválido!");
                }
                else
                {
                    // Cria um novo objeto
                    Objeto email = new Objeto();

                    // Seta o e-mail do objeto
                    email.setEmail(gui.text.getText());
                    
                    // Envia o objeto manipulado para o Modelo
                    m.adicionar(email);

                    // Chama o método para exibir resposta na tela
                    exibirLista();

                    // Limpa a tela
                    gui.limparCampos();
                    
                    // Informa que o e-mail foi cadastrado
                    JOptionPane.showMessageDialog(null, "E-mail cadastrado!");
                }
            }

        }
   }

}

CLASSE VISÃO

Está classe será a exibida para o usuário, nela só serão montados os elementos gráficos e nada mais além disso.

package br.com.mvc.visao;

import javax.swing.*;

import java.awt.*;
import java.awt.event.ActionListener;

import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Caique Monteiro Araujo
 * Classe: Visão, cria o ambiente a ser exibido pelo usuário
 */
public class Visao extends JFrame
{
    // Definição de objetos gráficos a serem utilizados
    public JPanel painel_form;
    public JButton botao;
    public JTextField text;
    public JLabel label;
    
    public JPanel painel_tabela;
    public JTable tabela;
    
    public JScrollPane tabela_view;
    
    // Método construtor inicializa a Visão
    public Visao ()
    {
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(350, 300);
        
        this.setTitle("MVC Exemplo");
        
        Toolkit toolkit = Toolkit.getDefaultToolkit();  
        Dimension tamanho = toolkit.getScreenSize();  
        
        this.setLocation((tamanho.width/2) - 175, (tamanho.height/2) - 150);
        this.setResizable(false);
                
        montarLayout();
        
        this.setVisible(true);
    }
    
    // Método para inicializar e montar os objetos gráficos a serem utilizados
    public void montarLayout()
    {
        this.setLayout(new BorderLayout());
        
        painel_form = new JPanel();
        botao = new JButton("Adicionar");
        label = new JLabel("E-mail: ");
        text = new JTextField();
        
        painel_tabela = new JPanel();
        tabela = new JTable();
        tabela_view = new JScrollPane();
        
        text.setPreferredSize(new Dimension(150, 25));
        
        painel_form.setLayout(new FlowLayout());
        
        painel_form.add(label);
        painel_form.add(text);
        painel_form.add(botao);
        
        painel_tabela.setLayout(new FlowLayout());
        
        DefaultTableModel preencher = new DefaultTableModel();
        preencher.setColumnIdentifiers(new String[] {"E-MAIL"});
        tabela.setModel(preencher);
        
        tabela_view.setViewportView(tabela);
        tabela_view.setPreferredSize(new Dimension(330, 200));
        
        painel_tabela.add(tabela_view);
        
        this.add("North", painel_form);
        this.add("South", painel_tabela);
    }
    
    // Método para limpar campos
    public void limparCampos ()
    {
        text.setText("");
    }
    
    // Método para setar o Controle à Visão
    public void adicionarControle (ActionListener controle) 
    {
        this.botao.addActionListener(controle);
    }

}

CLASSE PRINCIPAL

A classe fará a chamada para o CONTROLE que manipulará a VISÃO a partir de sua construção.

package br.com.mvc;

import br.com.mvc.controle.Controle;

/**
 *
 * @author Caique Monteiro Araujo
 * Classe: Princial, inicia a aplicação a partir do CONTROLE principal
 */
public class Principal 
{

    public static void main(String[] args)
    {
        new Controle();
    }

}

CONCLUSÕES

Ao observar esses códigos, vocês observaram o quanto ficou mais fácil o desenvolvimento e até para uma possível futura manutenção? Resumindo: a VISÃO manipula somente os gráficos, o CONTROLE manipula as ações do usuário, o MODELO manipula os dados da aplicação. Esperam que tenham gostado, até a próxima pessoal!

sexta-feira, 8 de novembro de 2013

[Blog] Esclarecimentos

Bom dia pessoal,

Eu sei que estamos tendo muitas solicitações no blog, escrevo esse blog sozinho e estou lotado de projetos para fazer, vou ter um grande espaço para atender todas solicitações aqui nos meses de novembro, dezembro e janeiro. Peço que sejam pacientes! Sei o quanto todos estão ansiosos para a parte 4 do tutorial com XNA e agradeço muito por isso! Vou trabalhar para resolver todos tutoriais pendentes, e a expectativa é um lançamento por semana.

Agradeço pela compreensão e logo mais, um novo layout para o blog estará saindo!