terça-feira, 23 de junho de 2009

Convenções no/de código Java

Talvez por isso Java tenha ganhado tanto destaque nas empresas... porque você tem que ser um programador muito ruim mesmo para conseguir bagunçar um programa em Java. A linguagem, as IDE's é tudo muito regrado, tem forma especificada para tudo, isso de certa forma é muito bom.

Existe então padrão para como codificar, como escrever um programa, se uma variável deve ser minúscula, maiúscula, se for palavra composta devo usar "OutraPavara" ou "outra_palavra"? Enfim, muitas questões que são subjetivas ao programador, em java não são.

Confesso que tinha rascunhado um artigo sobre isso, mas achei outros muito melhor elaborados do que meu planejamento, então não vou escrever nada e vou passar os links.

Se você ainda tem dúvida de como fazer, quais prática adotar, não deixe de ler, é um tempo que vale a pena gastar.

Convenções de codificação em Java

Convenções de codificação em Java - parte 2


Convenções de codificação em Java - parte 3


Convenções de codificação em Java - parte 4

Até mais.

segunda-feira, 22 de junho de 2009

Tipos de dados em Java: int, Double e String

Olá novamente.

Neste texto veremos como fazer uma classe em Java (bem simples) e como manipular 3 tipos de dados, o int e o Double e String, esses dois últimos são classes. Lembre de identificar e seguir as normas, uma classe (declaração) sempre deve iniciar com letra maiúscula, sendo assim "int" é um tipo primitivo de dados, String e Double são classes.

Veja o código e comentamos depois.

public class Sistema {
private String nome;
private int idade;
private Double peso;

public void setNome(String nome) {
this.nome = nome;
}

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

public void setIdade(Integer idade) {
this.idade = idade;
}

public int getIdade() {
return this.idade;
}

public void setPeso(Double peso) {
this.peso = peso;
}

public Double getPeso() {
return this.peso;
}

public static void main(String[] args) {
Sistema sistema = new Sistema();

sistema.setIdade(10);
sistema.setNome("Teste");
sistema.setPeso(3.14);
System.out.println(""+sistema.getIdade()+"\n");
System.out.println(""+sistema.getPeso()+"\n");
System.out.println(sistema.getNome());
}
}

Logo no início declaramos nome, idade e peso, com seus respectivos tipos. Em seguida implementamos os métodos assessores (get's e set's) para os atributos.

Dentro do main, criamos um objeto do tipo "Sistema" (instanciamos a classe que é o nosso programa) e setamos dados aos atributos. No fim usamos os get's para exibir na tela o valor que tem em cada atributo.

Observações gerais sobre o código:

- Você deve fornecer os dados no formato que o método está esperando. No caso o Double espera um valor do tipo decimal ou inteiro. O System.out.println espera uma string, como os atributos idade e peso não são, com a conactenação (que só é possível com strings) convertemos os valores para serem exibidos pelo método.

terça-feira, 9 de junho de 2009

Antes de programar: Análise Orientada a Objetos

Vamos recordar como pensar na solução computacional de um problema pelo ponto de vista da orientação a objetos. Este texto não é específico para Java, vale para qualquer linguagem que lhe possibilite programar OO (orientado a objetos).

Linguagens de programação orientadas a objeto assim como C++ e Java nos forçam a desenvolver em outro paradigma. Mais que desenvolver, esse novo paradigma provoca também modificações na análise de um software, oferecendo as diversas "visões" do mesmo problema, cada visão busca identificar e de certa forma representar os artefatos do software a ser desenvolvido.

O que é um objeto?

Objeto é a unidade base desse paradigma de análise e programação. Um objeto é uma abstração da realidade de tal forma que lhes restem apenas as características que interessam no mundo computacional. Não necessariamente um objeto computacional tenha que ser um objeto real.

Ao definir um objeto (e chamamos isso de classe, pois descreve uma "categoria", "conjunto de objetos"), nos perguntamos o que ele tem, e o que ele faz (os atributos e os métodos).

Exemplos:
Conexão com o banco de dados
- (tem) usuário
- (tem) senha
- (tem) endereço do servidor de BD
- (tem) nome do banco de dados
- (faz) Conectar
- (faz) Desconectar

Aqui basicamente definimos o objeto "conexão", que não é um objeto do mundo real, mas existe no mundo computacional.

Livro
- (tem) Título
- (tem) Autor
- (tem) Editora
- (tem) Nro de páginas
- (faz) ???

O que um livro faz? Quais são as ações de um livro? Aqui chegamos a mais um ponto interessante. As características e ações (atributos e métodos) de UM MESMO OBJETO DO MUNDO REAL podem ser diferentes para problemas distintos. Cada análise usa apenas o que é necessário daquele objeto na resolução do problema. Sendo assim, para uma transportadora, pouco importa o título do livro, importa qual o seu peso e volume (volume de quantidade de espaço), características essas que são dispensáveis para o caso de uma biblioteca.

Conclusão 1: A representação de um objeto no mundo computacional é menos complexa do que no mundo real, pois no mundo computacional usa-se apenas o que convém para a resolução de um problema epecífico. Faz-se uma abstração.

Isso nos leva a segunda conclusão.
Conclusão 2: A análise orientada a objetos torna as coisas mais simples, porque cada objeto é uma entidade simples, tendo de forma organizada seus atributos e métodos.

Para finalizar esse tópico, um objeto é representado, documentado, descrito através de uma Classe. O objeto é uma instância de uma classe, é um exemplar dentre os vários objetos que são do tipo de uma determinada classe.

Qual o problema de programar ou analisar estruturado?

Na verdade não há problema que não possa ser contornado, programadores e analistas experientes que nunca pensaram "orientado a objetos" tem em geral soluções elegantes para seus sotwares. O que acontece é que cada um tem uma, e cada um gasta um bom tempo até chegar a melhor solução, e a minha solução pode não se aplicar a outra pessoa, outro problema computacional.

Orientação a objeto é um padrão de como fazer as coisas de modo que todos o façam daquela forma, objetivando nenhum retrabalho, total reaproveitamento de códigos e análises já feitas anteriormente e ainda que isso se aplique a uma ampla gama de problemas computacionais.

Quem programa/analisa estrutural, pensa em que funções o software como um todo deverá ter. Orientado a objetos, pensa-se que dados e que ações cada objeto deverá ter. Pensando assim, em fragmentos mais pequenos e menos complexos há menos risco de esquecer ou menosprezar algum detalhe que no futuro (em uma análise/programação) estruturada poderia aparecer apenas durante um estágio avançado do desenvolvimento e complicar o projeto todo.

Em geral costuma-se dizer que os dados possuem maior integridade quando tratados por um programa OO, porque cada objeto é responsável apenas por SEUS métodos e seus dados, podendo apenas o objeto fazer sua manipulação, e isso de forma especializada.

Quem programa procedural/estruturado programa errado?

Não, em geral programas pequenos e de baixa complexidade não precisam de muito trabalho de análise para que possam ser desenvolvidos. A regra do custo/benefício da POO e análise OO é conforme o "tamanho do problema", quanto maior o programa, maiores serão os benefícios de uma análise OO.

Porém é mais trabalhoso no processo inicial a análise OO em comparação da estruturada, e na estruturada, os resultados em forma de "programa executável" (quando é um problema pequeno) tendem a aparecer antes. Como tanto para analisar como para programar OO há muitas regras, demora mais até que a "burocracia" seja resolvida e possa-se programar efetivamente. Ressalto que esse trabalho adicional de análise é muito valho, uma análise mal feita é um projeto fracassado.

Ok, e como eu analiso um problema "pelo ponto de vista da orientação a objetos" ?

Se leu até aqui já deve ter notado. O primeiro passo é identificar quem seão os objetos do problema. Vamos a um exemplo que fica mais fácil. Queremos fazer um software que é um dicionário, então um dos objetos é "o dicionário", um outro objeto poderiam ser "as palavras". Temos dois objetos, agora temos que descobrir dos nossos objetos quais atributos nos interessam.

Objeto dicionário:
Nro de palavras
Idioma

Objeto palavra
TextoPalavra
TextoSignificado

O segundo passo é identificar que ações correspondem a cada objeto. No caso o objeto "dicionário" teria os métodos "abrir", "fechar" e "procurar palavra". temos aqui mais um tópico interessante, o dicionário "procura palavras" ou seja, as palavras tem uma "relação" com o objeto "dicionário.

Mapeando as relações entre as classes podemos montar um diagrama de classes, que é um dos principais artefatos da análise pelo padrão UML.

UML? Quer dizer que tem um padrão para produzir uma especificação de análise orientada a objetos?

Exato, UML é um padrão para criar documentos de análise de software OO.

UML (Unified Modeling Language), de acordo com Rumbaugh e Jacobson (2000), é uma linguagem para especificar, visualizar e construir os artefatos de sistemas de software. Ela é um sistema de notação (incluindo a semântica para suas notações) dirigida à modelagem de sistemas, usando conceitos orientados a objetos.

Nossa! Mas isso é complicado de mais. Não teria como resumir isso tudo "ao essencial" ?


Muita coisa é essencial, tem que ler muito e praticar, não teria como resumir não.

Justamente por ser muitas regras, precisar ter uma "base de conhecimento" pelo menos "meio boa" é que a maioria ainda prefere analisar e programar de forma estruturada (cada um cria seus padrões), e que os quem programa e analisa OO se destaca, se fosse "comum" não teria porque fazer um blog falando de Java, que é uma linguagem voltada para programação OO.

Ok, me de alguns links então ...

Pesquise no google sobre "orientação a objeto", "análise orientada a objetos"... vá seguindo as pistas.

É interessante ler também algum livro (ou apostila) sobre UML, seja UML 1 ou 2.

Vamos aos softwares:

Jude Comunnity - Um programa free para criar documentos UML de análise de software.

Umbrello - É o software usado pelo pessoal que faz análise do KDE. Na documentação do KDE tem o help completíssimo. Eu particularmente aprendi mais sobre OO lendo essa documentação do que em livros. É claro, o conjunto é quem compõe a obra, talvez sem os livros o que diz na documentação não faria sentido nenhum.

Em futuras postagens que envolvam algum documento UML, usarei o Umbrello por preferência própria.

É isso! Até mais ver.

Referências:

RUMBAUGH, James; JACOBSON, Ivar; BOOCH, Grady. UML : Guia do Usuário. Rio de Janeiro, Campus, 2000.

RITTER, Helton. PACHECO, Jonas R. Gestão Financeira para Propriedades Rurais na Perspectiva de Análise Orientada a Objetos. Relatório de Prática Profissional Direcionada III do curso Bacharelado do Sistemas de Informação. Três de Maio, SETREM: novembro de 2008.

Rodada 01: Where is the bug?

Olá pessoal! queremos que os Javaneses que leem esse blog participem! Por isso criamos os posts "where is the bug" onde serão cometidos todos os tipos de atrocidades programando em java.

A gente posta um código ou alguma coisa COM ERRO(S) e vocês respondem nos comentáios tentando solucionar. Quem responder mais coisas certas nos comentários GANHA fama de ser "o bom (ou a boa)" do "where is the bug?" aqui do blog.

Se ninguém postar solução, a solução oficial encontrada aqui pela equipe é postada duas semanas após lançado o desafio. O post do blog com o problema é atualizado, contendo aí a solução.

Entendidas as regras do jogo?

Well... play now!

O primeiro problema é um código de "Hello World" (para ver que até nisso da para errar). Segue o código na figura abaixo:


O código está no arquivo "teste.java" e não compila!

O que devo fazer?

--> SOLUCIONADO por Dalvan: veja nos comentários.

domingo, 7 de junho de 2009

Hello World com NetBeans

Nesse rápido passo a passo para inaugurar nossa nova IDE instalada, vamos fazer um "Hello World".

NetBeans é simples, maioria das coisas até mais intuitivo que o JDeveloper. Era desenvolvido pela Sun, e JDeveloper pela Oracle, agora que a Oracle comprou a Sun, acho que os dois projetos vão acabar virando um só. Espero eu que vá para o lado do NetBeans, que é Open Source, não apenas Free como o JDeveloper.

Abra o NetBeans, vá em "arquivo > Novo Projeto". Escolha "aplicativo java".



Nome do projeto, perceba que o nome da classe principal do aplicativo vai ficar com o nome do projeto que inserimos. E "finalizar".


Escrevendo o código (ctrl + espaço para abrir a ajuda). Aqui também, conforme formos "navegando nas classes" ele vai mostrando uma curta documentação sobre aquela classe ou método. Lendo isso da para aprender muito.


E clique em "executar Main project" (o botão tipo um play), ou tecla F6 no seu teclado. Na parte inferior da janela aparece a saída do programa com o nosso "hello" (clique para ver maior essa tela).


De momento é isso. Divirta-se!

sábado, 6 de junho de 2009

Instalando NetBeans em Linux

NetBeans é um ambiente de desenvolvimento completo, muito usado e veja mais na wikipedia. Nas palavras do site oficial "The only IDE you need! Runs on Windows, Linux, Mac OS X and Solaris. NetBeans IDE is open-source and free."

Baixe ele aqui: http://www.netbeans.org

A instalação não tem mistério, você baixa do site o pacote mais adequado para o seu uso (beixei o completo), abre o terminal (com root) e manda executar o ".sh" de instalação. Um assistente gráfico lhe ajudará daqui por diante.

Veja que aqui entrei como root e mandei executar o instalador.


Interface abre, e aí dou sequência a instalação.


Aqui estou instalando a IDE completa, suporte a Java, PHP, Ruby, C/C++ ...


Leio e aceito a licença.


Para mim, ao chegar nessa tela não deixava avançar porque não tinha encontrado onde estavam os arquivos do JDK (dentre outras coisas aqui está o compilador para Java), então como eu já tenho o JDeveloper instalado, indiquei o diretório do JDK que vem com o JDeveloper. Enfim, caso o botão "próximo" não esteja abilitado, você terá que instalar ou indicar onde está o JDK.


Guarde essas informações (ou salve essa figura aqui do blog) para caso precisar.


Siga em "próximo"


E "Instalar".


Vá fazer um cafézinho, assistir a propaganda na novela ou assistir um episódio do Chapolin Colorado, navegue no orkut, facebook, twitte alguma coisa ... (aguarde)


Conforme quiser, desmarque os checkedboxes e vá em "terminar".


Pronto! Instalado! O NetBeans provavelmente está no grupo "Desenvolvimento" no menu do seu computador.


Como instalei completo, vai demorar um pouco para abrir, mas vale a pena, é uma ótima IDE, a maioria dos tutoriais de Java na internet são usando NetBeans, porque realmente é a "IDE padrão".


Aqui mandei abrir um exemplo. Componentes, eventos e propriedades dos objetos no painel a direita, artefatos do software a direita. Bem familiar não (clique na figura para ampliar)?


Para executar/compilar aperte o "play".


Aqui também a IDE é bem carregada, muitos componentes, um pouco diferente de trabalhar em relação ao JDeveloper, mas é coisa pouca, ainda falaremos sobre isso aqui no blog.

E aí pessoal, precisa fazer um "Hello world!" com NetBeans?

Qual IDE você prefere? Confesso que ainda não tenho opinião plenamente formada.

Até o próximo!

quarta-feira, 3 de junho de 2009

Hello World com Jdeveloper

Novamente Olá!

Vamos fazer um "olá mundo" em Java usando a ferramenta que instalamos no post passado. Não vai ser "explicado" porque das coisas, é mais para "inaugurar" o novo programa instalado.

Bom, primeira coisa então, abrir o JDeveloper. Vale lembrar que quem usa em Windows ou outro sistema operacional, o procedimento é o mesmo, já que esse texto é focado na ferramenta.


JDeveloper aberto, vá no menu em "file>new". Na tela que se apresenta escolha "Generic Application".


Agora ele nos pede onde salvar os arquivos do nossa aplicação, criei aqui uma pasta qualquer e indiquei esse caminho. Avançe em "next".


A próxima tela é a do projeto. Uma aplicação no conceito do JDeveloper pode ter vários projetos, esse projeto se chama "teste" e vai ser salvo na pasta "teste" (dentro de /home/helton2/javatestes/). Aqui também podemos adicionar "quais tecnologias" o nosso programa vai usar. No nosso caso nenhuma, só o "core" da linguagem em sí. Avançe em "finish".


Perceba que na lateral foi criado "teste", que é o nosso projeto, agora temos que efetivamente dizer "do que é composto" esse nosso aplicativo. Então como botão direito em cima de "teste" (lateral direita), clique em "new". Na tela que se abre escolha "Java Class". Siga em "ok".


Hora de criar a classe principal de nosso programa. Perceba que o nome de uma classe, segundo a nomenclatura padrão do Java deve iniciar com uma letra maiúscula, e se aplicam aqui todas aquelas regras de nomes de variáveis das outras linguagens de programação. Criamos então a classe "Hello", marque a opção "generate Main method" e de "ok". Aqui o conceito é igual em C, main é a função (no caso de java método) principal, ela que chama, execute, invoca todo o restante do programa. Todo programa deve ter uma "main".


Agora o JDeveloper criou um pouco de código para nós, a declaração do pacote (qualquer dia falamos disso), a declaração da classe pública "main" que se chama "Hello" e dentro dela o método construtor, e abaixo ainda o método estático (qualquer dia falamos disso) main.


É dentro da main que entra nosso código de "olá mundo". o comando é o seguinte:
System.out.print("Ola mundo");

Clique e veja a figura abaixo um pouco maior. Para executar tem um botão verde, um "play". Clique lá, vai compilar e executar nosso teste. A saída do nosso programa é na parte inferior do programa. Veja que está destacado na tela "Hello World! Java is Here!".


Missão cumprida, Hello word em Java com JDeveloper não é mais mistério!

Até o próximo.

terça-feira, 2 de junho de 2009

Instalando JDeveloper 11 em Linux

Neste primeiro post útil vou mostrar como instalar o famoso ambiente de desenvolvimento para Java da Oracle, o JDeveloper.

Antes ainda da Oracle comprar a Sun (que produz o Java) a Oracle comprou os fontes do JBuilder que era da Borland e transformou no que é hoje o JDeveloper. A Wikipedia esclarece um pouco mais. Eu particularmente não gosto de IDE escrita em Java porque ela geralmente é lenta! Ainda não tive nenhuma experiência que me provasse o contrário.

O JDeveloper é free, pode ser baixado no site da Oracle neste link. Você só precisa se cadastrar antes. Como é feito em Java, roda em Windows, Linux, Mac OS e outra possível plataforma que roda Java. Precisa do JDK, mas vem junto com o pequeno pacote a ser baixado, normalmente algo como 700MB.

Em Windows a princípio não haverá um post de "como instalar", pois segue o padrão NNF (next, next, finish).

Baixadado o pacote (o ".bin") que é mais fácil. Abri uma tela no terminal, loguei como root porque a instalação vai precisar criar diretórios, arquivos em locais que só o root tem acesso por padrão. Em seguida é só mandar executar o instalador, no nosso caso "./jdevstudio11110install.bin".



Ele vai descompactar em algum lugar temporário e abrirá uma tela gráfica para darmos continuidade a instalação. Nesta primeira tela apenas "next".



Como estamos logados como "root" (no console que iniciou essa instalação), ele sugere para instalar em "/root", achei que não era um bom local e troquei para "/usr/local", conforme figura a seguir. Fazendo esse ajuste clique em "next".


Nesta outra tela nos pede sobre a instalação, como eu não sei ainda o que vou precisar, escolho a instalação completa.


Agora ele nos dá a ultima chance de se arrepender, e nos pede para confirmar as configurações da instalação. É isso mesmo, aperte "next".


Mais informações sobre a instalação, vai verificar se minha máquina tem disco suficiente para a instalação escolhida. Na versão 11, instalação completa, como pode ver ele precisa de praticamente 1GB de disco! Siga no botão "next".


Se quiser fique lendo as propagandas que aparecem nas telas a seguir, ou vá buscar um cafézinho. Aguarde.... (bastante).


Pronto! Instalação feita! Agora vamos executar nossa IDE pela primeira vez! (lembre, estamos com root). Deixe o checkedbox marcado e clique em "done".


Agora vai abrir uma tela com algumas opções, que de momento não nos interessam. Escolha a primeira que deve começar a rodar o JDeveloper.


A primeira vez que um usuário abre o programa ele pede "como" ele deve organizar o layout da IDE (da para mudar depois). A maneira padrão que é como ele sugere é boa. Se você tiver um monitor grande ou dois monitores, melhor ainda, porque a IDE é bem "carregada" tem muita coisa. Desmarque o checkedbox que diz se é ou não para pedir toda vez ao iniciar essa configuração. Clique "ok".



Perceba que o instalador acabou (veja na tela de baixo, o cursor já foi liberado), e agora um novo processo está rodando. Se demorar a abrir, acalme-se, é a primeira vez que está abrindo o programa, depois demora um pouco menos.


Da mesma forma, como é a primeira vez, ele nos pede se queremos migrar as configurações de uma instalação antiga, neste caso como não temos uma instalação antiga, não tem porque (escolha "no").


Finalmente carregando a IDE! Aqui no meu computador (P4 HT 3.0 Ghz, 2 GB RAM) a IDE carrega MUITO mais rápido no linux (Mandriva 2009 Power Pack) que no Windows (xp sp3).


E.... rufem os tambores! Instalado!


Se você leu até aqui, obrigado pela persistência! mas temos mais alguns ajustes. Feche a tela da IDE, feche o terminal que tinha aberto antes. Agora vá procurar o JDeveloper nos menus [tempo]. Não achou? Eu também não!

Como resolver isso? Faça um atalho (onde quiser, eu fiz no Desktop) para o executável do JDeveloper. Para isso no gnome, clique com o direito em "novo lançador" e ajuste o caminho para "/usr/local/Oracle/Middleware/jdeveloper/jdev/bin/jdev" onde "/usr/local" é o caminho da instalação que escolhemos antes e "jdev" é o executável.


É isso pessoal! Instalação ok. Agora já da para começar a estudar Java e podemos praticar um pouco.

Até o próximo!

Sobre este blog

Olá, inaugura-se hoje 02/06/2009 mais um blog!

Este blog é dedicado a linguagem de programação Java, em suas diversas aplicações, mobile, na web, embarcado e desktop.

Serão postadas experiências com java, os primeiros códigos, como iniciar... ideal para quem está aprendendo (assim como nós). Conforme os conhecimentos vão sendo melhorados também avançaremos aqui no blog em complexidade.

Espero transformar esse blog num lugar de escrita entre amigos, vou sair convidando algumas pessoas que sabem ou estão aprendendo Java, para que elas também escrevam aqui.

E porque "Foo Java" ?
Bem, como está lá na explicação "foo" é o nome de uma variável, ou função, ou método, ou classe que os computólogos usam sempre que querem exemplificar alguma coisa. É uma função (metodo) que não faz nada de útil, apenas demonstra a funcionalidade daquele ítem em específico que pretende-se demonstrar.

Novas postagens em breve! Aguarde...