SOLID – Princípio da Responsabilidade Única

segunda-feira, 14 de maio de 2012 por Alexandre Gama

Olá Pessoal!

Muito se tem falado sobre boas práticas e bom design de código. Se você gosta de trabalhar profissionalmente no seu código e se gosta de facilitar a manutenção do seu código, com toda certeza já precisou aprender sobre alguns padrões e técnicas para isso.

Muitos destes padrões e técnicas são antigos, datados desde 2000 mas infelizmente ainda encontramos grande parte dos códigos com preocupação alguma de manutenibilidade, facilidade de reuso, com bom desempenho, etc.

Isso me motivou a falar um pouco sobre um dos princípios S.O.L.I.D. Este é um acrônimo para Single responsibility, Open-closed, Liskov substitution, Interface segregation e Dependency inversion. Este termo foi criado por Robert C. Martin(Uncle Bob) para unir alguns padrões muito utilizados no Design Orientado a Objetos, que visam facilitar a manutenção, legibilidade e vida do nosso código.

É quase uma arte desenvolver utilizando alguns desses padrões e com toda certeza a próxima equipe a modificar o seu código(inclusive você mesmo!) vai agradecer.

Hoje falaremos sobre o Single Responsiblity Principle, que é um padrão extremamente simples e muitas vezes absurdamente ignorado. A regra é simples: Uma classe só deve ter uma, e somente uma, razão para ser modificada. Simples assim!

Então isso quer dizer que se eu criar somente um método para a minha classe, com toda certeza ela só terá uma responsabilidade certo? Não é por aí. Na verdade o princípio nos diz o que uma classe deve fazer e não como ela deve fazer. Assim, uma classe poderá ser responsável por uma funcionalidade que pode precisar de 5 métodos para tal realização.

Mas vamos analisar um pequeno código para visualizarmos com mais facilidade este princípio:

public class Departamento {

	public void calculaNotaFiscal() {
		// seu código para calculo da nota fiscal
	}

	public void calculaPagamentoDeFuncionarios() {
		// seu código para cálculo do pagamento
	}

	public void verificaInadimplenciaDeClientes() {
		// seu código para a verificação de inadimplência
	}
}

O que esta classe faz? Bom, ela calcula nota fiscal calcula pagamento verifica inadimplência. Estes “es” não estão aí atoa. Eles indicam fortemente que a nossa classe tem mais de uma razão para ser modificada, contrariando a nossa simples regra!

Caso o cálculo da nota fiscal precise ser atualizado, modificaremos a classe Departamento. E se o cálculo de pagamento precisar ser melhorado? A classe Departamento também precisará ser modificada.

Observamos aqui que a classe Departamento possui pelo menos 3 motivos para ser modificada e isso não é nada legal. Não será nada divertido modificarmos a classe Departamento toda ver que um requisito for atualizado.

Então para respeitarmos o nosso princípio, poderíamos criar uma classe para cada responsabilidade. Um exemplo seria:

public class NotaFiscal {

	public void calculaNotaFiscal() {
		// seu código para cálculo da nota fiscal
	}

}
public class CalculadoraDePagamento {

	public void calculaPagamentoDeFuncionarios() {
		// seu código para cálculo do pagamento
	}

}
public class VerificadorDeInadimplencia {

	public void verificaInadimplenciaDeClientes() {
		// seu código para a verificação de inadimplência
	}

}

Agora o nosso código ficou muito mais interessante. Cada classe agora tem uma, e somente uma, razão para ser modificada. Lembrando que cada classe poderá conter quantos métodos forem necessários para que a sua funcionalidade seja satisfeita.

Observe também que com Testes de Unidade você tem uma facilidade muito maior para identificar possíveis quebras do Single Responsibility Principle.

Muitas vezes com um simples princípio e com um simples refactoring conseguimos elevar o nível do nosso código e trabalhar de forma muito mais profissional.

É isso pessoal!

Abraços!

Alexandre Gama.

Apostila Java e .NET – 300 mil downloads

segunda-feira, 14 de maio de 2012 por Marcelo Martins

A K19 disponibiliza, gratuitamente, em seu site, o material utilizado nos cursos de Java e .NET. Hoje, ultrapassamos a marca de 300 mil downloads das apostilas de Java e .NET. A marca de 300 mil downloads é consequência do reconhecimento da qualidade do material que constantemente é atualizado e revisado por nossos instrutores. E este número crescerá cada vez mais. Em breve, a K19 disponibilizará as apostilas dos seus três novos cursos:

Curso de Android

Curso de HTML, CSS e Javascript

Curso de SQL

Fiquem atentos para as novidades e para quem ainda não conhece o nosso material confira:

Apostilas de Java e .NET

Curso de Android – K19

terça-feira, 17 de abril de 2012 por Marcelo Martins

A K19 lança novo curso para desenvolvimento de aplicativos para celulares e tablets: Curso Android. Este curso tem como foco preparar os alunos a desenvolverem aplicativos para a plataforma Android, sistema operacional mais popular entre os celulares e tablets atualmente.

Os smartphones estão mudando cada vez mais o nosso cotidiano e tornam-se o principal meio de comunicação e acesso a internet. Segundo previsões, os acessos a internet através de aparelhos móveis irão superar os acessos através de computadores em 2013.[Mobile Trends]

Junto com este crescimento da presença de smartphones e tablets em nosso cotidiano, cria-se novas oportunidades tanto no mercado de trabalho quanto nos negócios. E para aproveitar estas oportunidades, a K19 lança o curso de Android para preparar as empresas e desenvolvedores a construir aplicativos utilizando todos os recursos e ferramentas do Android SDK do Google.

Os aplicativos Android são desenvolvidos utilizando a linguagem Java e para quem quer aprofundar-se nesta linguagem e nos conceitos de Orientação a Objetos, temos o curso de java da K19, o curso K11, Orientação a Objetos em Java. Este curso juntamente com o Curso Android, fazem parte da nova formação da K19, a Formação Desenvolvedor Android.

Para maiores informações, acesse os cursos da K19:

http://www.k19.com.br/cursos/

 

 

GitHub e Git – Colaboração e Organização

terça-feira, 10 de abril de 2012 por Alexandre Gama

Olá Pessoal!

Recentemente precisei migrar alguns projetos que utilizavam SVN para o Git e resolvi fazer um post falando um pouquinho sobre o Git e seu amigão GitHub. Então vamos lá!

Git
Hoje dificilmente um projeto não possui um controle de versão. Se o seu projeto de produção não possui um controle de versão, de verdade, corra para criar um! Sobreviver sem um controle é realmente assustador, digno de um herói, ainda mais com equipes grandes e distribuídas.

Durante muito tempo foi usado o CVS e, em seguida, o SVN veio para corrigir algumas falhas do CVS e adicionar interessantes funcionalidades. Diversos são os motivos para a adoção do Git:

- Branches facilitados e independentes
- Merges facilitados (quem já usou CVS sabe o quão sofrível é realizar merges)
- Mais rápido
- Distribuído
- Pode ocupar menos espaço que um checkout SVN
- Integração com o GitHub

Não entrarei em detalhes sobre estes pontos pois renderiam diversos outros artigos, mas entraremos em detalhes sobre a sua instalação logo mais.

GitHub
O GitHub é a rede para programadores. Nele podemos criar repositórios (públicos e privados) para os  nossos projetos, seguir outros desenvolvedores, baixar projetos, modificar projetos, receber atualizações de modificações de projetos, etc.

Diversos projetos grandes já estão no GitHub e você já pode até dar uma olhadinha no código fonte deles! Dentre os projetos encontramos o JQuery, Eclipse, VRaptor, Twitter e muito mais! Abaixo listei alguns repositórios:

VRaptor
JQuery
Eclipse

E qual a relação do Git com o GitHub?
A relação é simples: os dois se integram de forma bem simples! Podemos criar um repositório no GitHub e simplesmente “commitar” as alterações do nosso projeto git, tornando-o público!
Como exemplo vamos criar um pequeno projeto e torná-lo público no GitHub, utilizando o Git.

Instalando o Git
Como o meu dia a dia é desenvolvendo com Linux (Ubuntu), faremos a instalação neste ambiente. Vamos lá:

Para a instalação basta abrirmos o terminal e digitar:

sudo apt-get install git-core

Ele mostrará o espaço necessário para a instalação e mostrará quais os pacotes que serão instalados. Basta confirmar que todos os pacotes serão baixados e instalados.
Pronto! Nosso Git está instalado. Agora vamos configurá-lo. Nesta etapa você indicará o seu Nome e o seu Email. Ainda no Terminal digite:

git config --global user.name "Seu nome aqui"
git config --global user.email "seuemail@seudominio.com"

Para verificar se deu tudo certo basta digitar no Terminal:

git config --global --list

Assim serão listadas as configurações recém criadas.

Agora vamos criar um repositório lá no GitHub. Entre no GitHub, entre no seu perfil e clique em New Repository, colocando o nome do seu projeto, no nosso caso “my-first-project-git”. O projeto criado será público mas é possível criar repositórios privados.

Com o nosso repositório criado no GitHub vamos criar o nosso projeto agora localmente. No Terminal vamos criar um diretório para o nosso projeto e iniciar o repositório do Git:

mkdir my-first-project-git
cd my-first-project-git
git init

Agora vamos criar um arquivo Readme e adicionar um repositório ao git. Repare que o origin é apenas um apelido para o nosso projeto.

git remote add origin git@github.com:seuloginnogithub/my-first-project-git.git
touch  README

Tudo certo até aqui. Criamos o nosso projeto no GitHub, criamos o nosso projeto localmente com o Git e agora vamos subir o nosso projeto para o GitHub. Mas antes de subirmos o projeto, precisamos gerar uma chave ssh. Podemos gerar uma chave com o seguinte comando no Terminal:

ssh-keygen -t rsa -C "seu comentario"

Ele mostrará o diretório onde será salva a nossa chave e você também informará uma senha. Pronto! Chave criada! Agora precisamos acessar a nossa conta no GitHub, clicar em SSH Keys e inserir o conteúdo exato que foi gerado na chave. Para pegar o conteúdo basta digitar o seguinte comando:

cat ~/.ssh/id_rsa.pub

Desta forma já podemos acessar o nosso GitHub!

Para adicionar o nosso arquivo Readme e “comitá-lo” basta digitarmos os seguintes comandos:

git add README
git commit -m "aqui vai seu comentario"

Repare que neste momento fizemos o commit localmente mas ainda não enviamos para o GitHub. Para enviar basta digitar o seguinte comando:

git push -u origin master

Pronto! Agora você pode acessar o seu GitHub e ver o projeto que acabamos de criar. Simples, prático e divertido!

No próximo artigo avançaremos sobre os comandos mais utilizados pelo Git e como podemos modificar projetos já existentes no GitHub.

Não poderei disponibilizar os projetos privados mas disponibilizarei alguns outros projetos públicos no meu GitHub para podermos compartilhar conhecimento e experiência. Podem seguir =)

Até mais!

JSON Simples e Prático, Parte II

terça-feira, 28 de fevereiro de 2012 por Alexandre Gama

Fala pessoal!

Seguindo a ideia do post anterior sobre JSON, hoje vamos a um exemplo mais palpável, real e divertido: Simular uma integração com o famoso Facebook!

O Facebook, assim como diversos sistemas, disponibiliza acesso aos seus recursos através de alguns métodos. A este conjunto de métodos, damos o nome de API.
Como visto no artigo anterior, JSON é um documento com uma estrutura bem bacana de se trabalhar.

Veja o JSON que o Facebook retorna quando chamamos certo método:

{
   "id": "19292868552",
   "name": "Facebook Platform",
   "likes": 4190683,
   "category": "Product/service",
   "is_published": true,
   "website": "http://developers.facebook.com",
   "username": "platform",
   "founded": "2007",
   "mission": "To make the web more open and social.",
   "talking_about_count": 98577
}

Interessante não? Muito fácil de ler e encontrar os dados que precisamos. Temos o id, name, likes e muitas outras informações.

Agora imagine que a nossa aplicação precisa buscar os dados de um post específico que foi colocado no Facebook. Podemos imaginar também que precisaríamos persistir esses dados em um banco pra futuras comparações, pesquisas, etc.

No nosso caso usaremos este post para estudo: www.facebook.com/98423808305.

Nao vou prolongar sobre a API do Facebook, mas para usá-la podemos usar o Graph API que o Facebook disponibiliza. Aqui temos o core da API, onde podemos ter diversos métodos para as diversas chamadas que precisamos. Caso você precise desenvolver uma app para o Face, este será o local mais odiado visitado por você! = )

Agora que você já sabe sobre a existência do Graph API, vamos usá-la!

Para o nosso exemplo vamos usar a seguinte URL:
https://graph.facebook.com/98423808305

Repare que ao clicar na URL, já temos o retorno em JSON! Isso mesmo, simples assim! Para o nosso projeto vamos precisar do Id e dos dados do From (Name e Category).

A primeira classe que criaremos é muito simples, somente para conseguirmos fazer uma chamada GET na url acima e receber o seu retorno.


package br.com.artigo.json;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;

public class Http {

    public String chamaUrl(String url) throws IOException {
      URL facebook = new URL(url);
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(facebook.openStream()));

      String retornoJson;

      StringBuilder builder = new StringBuilder();
      while ((retornoJson = bufferedReader.readLine()) != null)
        builder.append(retornoJson);

      bufferedReader.close();

      return builder.toString();
    }
}

A segunda classe criada será um POJO que conterá as informações que precisamos (id, name e category) vindas do facebook. Repare que esta classe facilmente poderia ser persistida, bastando inserir as anotações do JPA por exemplo! = )

package br.com.artigo.json;

public class Facebook {

	private String id;

	private String name;

	private String category;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getCategory() {
		return category;
	}

	public void setCategory(String category) {
		this.category = category;
	}

	@Override
	public String toString() {
		return "Facebook [id=" + id + ", name=" + name + ", category="
				+ category + "]";
	}

}

A terceira classe é a ArtigoJson que será a classe principal. Ela usará a classe Http para fazer a chamada simples da API e trabalhará com o retorno JSON.

package br.com.artigo.json;

import java.io.IOException;
import java.util.Map;
import net.sf.json.JSONObject;

public class ArtigoJson {

	private static final String HTTPS_GRAPH_FACEBOOK = "https://graph.facebook.com/98423808305";

	@SuppressWarnings("unchecked")
	public static void main(String[] args) throws IOException {
		//Retorno JSON
		JSONObject object = chamadaHttp();
		System.out.println(object);

		//Retorno dos dados que precisamos
		String id = (String) object.get("id");
		Map map = (Map) object.get("from"); //Que interessante! Um cast para um Map!
		String name = map.get("name");
		String category = map.get("category");

		//Populando o objeto facebook para persistencia
		Facebook facebook = new Facebook();
		facebook.setId(id);
		facebook.setName(name);
		facebook.setCategory(category);

		//Impressão do objeto
		System.out.println(facebook);
	}

	private static JSONObject chamadaHttp() throws IOException {
		Http http = new Http();
		String retornoJson = http.chamaUrl(HTTPS_GRAPH_FACEBOOK);
		JSONObject objetoJson = JSONObject.fromObject(retornoJson);

		return objetoJson;
	}
}

Ao fazer a chamada, podemos ver um trecho do retorno:

{"id":"98423808305",
   "from":
      {"name":"Coca-Cola","category":"Food/beverages","id":"40796308305"}
}

Olha que simples! Temos neste trecho as informações que precisamos! = )
Como no artigo anterior, podemos fazer uma chamada usando uma chave. Repare que fizemos a primeira chamada usando a chave id:

//Retorno dos dados que precisamos
String id = (String) object.get("id");

Mas o mais interessante nas chamadas é o cast para um Map!

Map map = (Map) object.get("from");

Agora podemos obter os nossos dados pelo próprio Map e popular o nosso objeto facebook!

É isso pessoal! Artigo bem simples para o pessoal que está começando, somente pra mostrar uma das formas de utilização do JSON.

Você também pode encontrar este código no meu Gist Público.

Até mais!

Apostila de JSF 2 e JPA 2 Atualizada

terça-feira, 31 de janeiro de 2012 por Marcelo Martins

A K19 disponibilizou a nova versão da apostila de JSF 2 e JPA 2 utilizada no curso de Desenvolvimento Web com JSF 2 e JPA2 que faz parte da Formação Desenvolvedor Java.

Foram acrescentadas diversas imagens e diversos exercícios num layout novo para tornar o aprendizado ainda mais fácil.

O material está disponível junto com os outros materiais utilizados nos cursos Java da K19. Para baixá-la, acesse:

Apostilas Java

Segue o sumário da apostila:

1 Banco de dados
1.1 Sistemas Gerenciadores de Banco de Dados
1.2 MySQL Server
1.3 Bases de dados (Databases)
1.4 Criando uma base de dados no MySQL Server
1.5 Tabelas
1.6 Criando tabelas no MySQLServer
1.7 Operações Básicas
1.8 Chaves Primária e Estrangeira
2 JDBC
2.1 Driver
2.2 JDBC
2.3 Instalandoo Driver JDBC do MySQL Server
2.4 Criando uma conexão
2.5 Inserindo registros
2.8 SQL Injection
2.14 Connection Factory
3 JPA 2 e Hibernate 39
3.1 Múltiplas sintaxes da linguagem SQL
3.2 Orientação a Objetos VS Modelo Relacional
3.3 Ferramentas ORM
3.4 O que é JPA e Hibernate?
3.5 Bibliotecas
3.6 Configuração
3.7 Mapeamento
3.8 Gerando Tabelas
3.10 Manipulando entidades
3.12 Repository
4 Web Container
4.1 Necessidades de uma aplicação web
4.2 WebContainer
4.3 Servlet e JavaEE
4.5 Aplicação Web Java
4.7 Processando requisições
4.8 Servlet
4.10 Frameworks
5 Visão Geral do JSF 2
5.1 MVC e FrontController
5.2 Configurando uma aplicação JSF
5.3 ManagedBeans
5.4 Processamento de uma requisição
6 Componentes Visuais 77
6.1 Estrutura Básica de uma Página JSF
6.2 Formulários
6.3 Caixas de Texto
6.4 Campos Ocultos
6.5 Caixas de Seleção
6.6 Botões e Links
6.9 Textos e Imagens
6.11 Componentes de Organização
6.12 Tabelas
6.15 Mensagens
6.16 Adicionando JavaScript e CSS
6.17 Outros Componentes
7 Templates e Modularização
7.1 Templates
7.3 Modularização
8 Navegação
8.1 Navegação Implícita
8.2 Navegação Explícita
8.4 Navegações Estática e Dinâmica
9 Escopos
9.1 Request
9.2 View
9.3 Session
9.4 Application
10 Conversão e Validação
10.1 Conversão
10.2 Conversores Padrão
10.5 Mensagens de Erro
10.7 Validação
10.8 Validadores Padrão
10.11 Bean Validation
10.13 Criando o seu Próprio Conversor
10.16 Criando o seu Próprio Validador
10.19 Criando o seu Próprio BeanValidator
11 Eventos
11.1 FacesEvent
11.3 PhaseEvent
11.5 SystemEvent
11.7 Immediate
12 Ajax
12.1 Fazendo requisições AJAX
12.2 Processando uma parte específica da tela
12.3 Recarregando parte da tela
12.4 Associando um procedimento a uma requisição AJAX
12.5 Palavras especiais
13 Integração JSF e JPA
13.1 Bibliotecas
13.2 Configuração
13.3 Mapeamento
13.4 Inicialização e Finalização
13.5 Transações
13.6 Recuperando o Entity Manager da Requisição
13.8 Otimizando o número de consultas ao SGDB
A Autenticação
B Páginas de Erro
C Projeto Futebol K19
C.1 Integração JSF e JPA
C.3 Modelo
C.5 ManagedBeans
C.7 Telas
C.9 Autenticação

Boas Festas a todos!

sábado, 24 de dezembro de 2011 por Marcelo Martins

A K19 deseja a todos boas festas neste final de ano. Agradecemos aos alunos e comunidade pelo reconhecimento dos nossos materiais e qualidade dos nossos cursos. Reconhecimento que venho através dos milhares de downloads das nossas apostilas, referências e adoção das mesmas em universidades públicas e privadas.

As críticas e sugestões são muito importantes pra gente e isto nos ajuda e ajudou aprimorar ainda mais os nossos materiais.

Agrademos a todos que tiveram, de alguma forma, uma participação, seja através de um simples download ou através do envio de críticas e sugestões.

Desejamos a todos vocês boas festas =)

JSON Simples e Prático, Parte I

quinta-feira, 22 de dezembro de 2011 por Alexandre Gama

Fala pessoal!

Esta semana percebi que muitos ainda não conhecem ou continuam na dúvida sobre o que é JSON e resolvi contribuir com mais um artigo.

Afinal, o que é JSON?
JSON é basicamente um formato leve de troca de informações/dados entre sistemas. Mas JSON significa JavaScript Object Notation, ou seja, só posso usar com JavaScript correto? Na verdade não e alguns ainda caem nesta armadilha.

O JSON além de ser um formato leve para troca de dados é também muito simples de ler. Mas quando dizemos que algo é simples, é interessante compará-lo com algo mais complexo para entendermos tal simplicidade não é? Neste caso podemos comparar o JSON com o formato XML.

Vamos visualizar esta diferença?

  <?xml version="1.0" encoding="UTF-8"?>
    <id>1</id>
    <nome>Alexandre Gama</nome>
    <endereco>R. Qualquer</endereco>
  {"id":1,"nome":"Alexandre Gama", "endereco":"R. Qualquer"}

Bom, é notável a diferença. Visualmente o segundo trecho (em JSON) é mais fácil de ler. Mas só existe essa diferença entre os dois? Na verdade não. Podemos listar algumas outras vantagens:

Vantagens do JSON:
- Leitura mais simples

- Analisador(parsing) mais fácil

- JSON suporta objetos! Sim, ele é tipado!

- Velocidade maior na execução e transporte de dados

- Arquivo com tamanho reduzido

- Quem utiliza? Google, Facebook, Yahoo!, Twitter…

Estas são algumas das vantagens apresentadas pelo JSON. Agora vamos ao que interessa: Código! :)
Vamos fazer um exemplo extremamente simples nesta primeira parte e avançaremos no próximo artigo, inclusive falando sobre JSON em páginas Web.

Qual biblioteca usar?
Existem diversas bibliotecas para trabalharmos com JSON e Java. Usaremos no nosso estudo o json.jar que você pode baixar tranquilamente neste link

O nosso caso de estudo será simples: Teremos uma classe Carro que será a nossa classe POJO e a classe EstudoJSON que terá o nosso famoso método main.

Classe Carro

package br.com.json;

public class Carro {
	private Long id;
	private String modelo;
	private String placa;

	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getModelo() {
		return modelo;
	}
	public void setModelo(String modelo) {
		this.modelo = modelo;
	}
	public String getPlaca() {
		return placa;
	}
	public void setPlaca(String placa) {
		this.placa = placa;
	}

        //Aqui fizemos o Override do método toString() para visualizar a impressão com o System.out.println()
	@Override
	public String toString() {
		return "[id=" + id + ", modelo=" + modelo + ", placa=" + placa
				+ "]";
	}

}

Esta é uma classe simples, onde temos os atributos Id, Modelo e Placa.

Agora teremos a classe EstudoJSON

package br.com.json;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class EstudoJSON {
	public static void main(String[] args) throws JSONException {
		adicaoSimplesDeDados();
	}
}

Repare que criamos o método adicaoSimplesDeDados() que conterá o código de exemplo:

private static void adicaoSimplesDeDados() throws JSONException {
    //Criação do objeto carro e atribuição dos valores
	Carro carro = new Carro();
	carro.setId(1l);
	carro.setModelo("Celta");
	carro.setPlaca("AAA1234");

    //Criação do objeto carroJson
	JSONObject carroJson = new JSONObject();
    //Inserção dos valores do carro no objeto JSON
	carroJson.put("id", carro.getId());
	carroJson.put("Modelo", carro.getModelo());
	carroJson.put("Placa", carro.getPlaca());

    //Impressão do objeto JSON
	System.out.println(carroJson);
}

Se executarmos este código, veremos que foi impresso no console o seguinte:

{"id":1,"Modelo":"Celta","Placa":"AAA1234"}

Você desenvolvedor mais atento vai reparar que existe um objeto impresso: Um Long! Isso mesmo! Como vimos, o JSON consegue armazenar objetos! Podemos inclusive armazenar um objeto do tipo Carro mesmo:

Modificamos o nosso método main:

public class EstudoJSON {
	public static void main(String[] args) throws JSONException {
		adicaoSimplesDeDados();

        adicaoDeUmObjeto();
	}
}

E adicionamos o método adicaoDeUmObjeto():

private static void adicaoDeUmObjeto() throws JSONException {
	Carro carro = new Carro();
	carro.setId(1l);
	carro.setModelo("Celta");
	carro.setPlaca("AAA1234");

	JSONObject carroJson = new JSONObject();
    //Adição do objeto carro
	carroJson.put("Carro", carro);

	System.out.println(carroJson);
}

Neste caso foi impresso no console o seguinte:

{"Carro":"[id=1, modelo=Celta, placa=AAA1234]"}

Simples não?
Como o JSON trabalha com coleção de pares nome/valor, podemos imprimir um valor específico simplesmente chamando o nome que desejamos.

System.out.println(carroJson.get("Modelo"));

Veja que neste caso queremos somente o modelo do carro, bastando fazer a chamada get(“nome que desejamos”)!

Conclusão
É isso pessoal! Vimos as vantagens do JSON e vimos como é simples começar a trabalhar com ele. Nos próximos artigos veremos exemplos mais complexos e veremos algo mais real onde faremos chamadas à API do Facebook!

Você também pode encontrar este código no meu Gist Público.

Abraços!

Apostila de Design Patterns em Java

quarta-feira, 21 de dezembro de 2011 por Marcelo Martins

A K19 disponiliza uma nova apostila de Java, a apostila de Design Patterns. Nesta apostila serão encontrados exemplos práticos, diagramas UML e figuras que visam a um fácil entendimento dos padrões de projeto e, principalmente, a sua aplicação no cotidiano.

Para baixar, acesse:

Segue o conteúdo da apostila:

1 Introdução
1.1 Sistemas Corporativos
1.2 Orientação a Objetos
1.3 Padrões de Projeto
2 Padrões de criação
2.1 Factory Method
2.3 Abstract Factory
2.4 Abstract Factory + Factory Method
2.7 Builder
2.9 Prototype
2.11 Singleton
2.13 Multiton (não GoF)
2.15 Object Pool (não GoF)
3 Padrões Estruturais
3.1 Adapter
3.3 Bridge
3.5 Composite
3.7 Decorator
3.9 Facade
3.11 Front Controller (não GoF)
3.13 Flyweight
3.15 Proxy
3.17 Padrões Comportamentais
4 Padrões Comportamentais
4.1 Command
4.3 Iterator
4.5 Mediator
4.7 Observer
4.9 State
4.11 Strategy
4.13 Template Method
4.15 Visitor

Apostila de C# e Orientação a Objetos

terça-feira, 13 de dezembro de 2011 por Marcelo Martins

A K19 atualizou a apostila de C# e Orientação a Objetos, ela foi reformulada para um melhor aprendizado com a adição de novas imagens, exercícios e um novo layout. Esta apostila é utilizada no curso C# e Orientação a Objetos da K19, primeiro curso da Formação Desenvolvedor .NET.

Para baixar a nova apostila, acesse:

Apostila de C# e Orientação a Objetos

Todas os materiais utilizados nos cursos da K19 estão disponíveis gratuitamente, para baixá-las acesse:

Apostilas de Java e .NET

Para ver a relação de cursos da K19, acesse:

Cursos de Java e .NET

Dúvidas, críticas e/ou sugestões, entre em contato conosco através do nosso formulário, acesse:

Contato da K19