Grupo Haw

sábado, 10 de outubro de 2009

COMO CONFIGURAR VÁRIAVEIS DE AMBIENTE PARA USAR O JAVA?


Olá caros amigos leitores usuários do WINDOWS XP, venho em caráter urgente para dar uma explicação de como configurar variáveis de ambiente para rodar o Java no prompt do MS-DOS.

Sabe aquele probleminha quando você digita javac no DOS e ele não reconhece?? Esse é o primeiro obstáculo para o autodidata... e abaixo estará a fantástica e mágica solução em 10 passos...

1 – CLIQUE com o botão direito do mouse em “MEU COMPUTADOR”

2 – CLIQUE no item “PROPRIEDADES”

3 – CLIQUE na guia (aba) “AVANÇADO”

4 – CLIQUE no botão “VARIÁVEIS DE AMBIENTE”

5 – Na parte “Váriáveis de ambiente” procure a variável “JAVA_HOME”...se você não localizou crie clicando no botão “NOVA”

6 – Coloque o nome da variável com ---> JAVA_HOME <--- em maiúsculo e o valor da variável como C:\Arquivos de programas\Java\jdk1.6.0_11 ( é o caminho de onde está sua pasta “jdk1.6.0_11” que foi gerada quando você instalou o JDK, por padrão o caminho é este que acabei de informar)


7 – Conclua com um OK

8 - Localize a variável “Path” e informe ou simplesmente acrescente o seguinte valor no campo “valor da variável” --- > %JAVA_HOME%\bin < ---


9 – Conclua com um OK nesta janela e dê um outro OK na janela VARIÁVEIS DE AMBIENTE

10 –PÉÉÉÉÉÉÉÉNNNNN você acaba de concluir a configuração das variáveis de ambiente para utilização do Java no prompt do DOS...


Um abraço a todos vocês autodidatas e bons estudos!


Eduardo Gomes da Silva


quinta-feira, 8 de outubro de 2009

Orientação a Objetos em Cinco Minutos

Olá amigos leitores tentarei ser o mais breve e preciso no conceito orientação a objetos.

Pra que usamos orientação a objetos? Simplesmente para resolvermos problemas que tínhamos com a programação estruturada, como por exemplo, a dificuldade de realizar manutenções no código devido presença de um código macarrônico e de difícil compreensão de Ideia do programador.

Pensando nisso, foi criado este conceito de orientação de objetos, que nada mais é do que refletir a maneira de programar com a vida real, para isso basta abstrair idéias reais.

Baseando-se nisso pensemos que tudo seja objeto, por exemplo carro, telefone, maça, cachorro, teste de inglês, batata, quadro... parece confuso mas observe, tudo que nós faz pensar em algo unitariamente isto chama-se objeto.

Vou citar um exemplo para prosseguirmos em todo o texto... bom pensemos que temos que criar um sistema em JAVA para construir de carros possantes... bem, eu ainda não sei onde você vai usar esse sistema, mas use a imaginação.... como devemos pensar para este caso???

Bom, pense na vida real.... vamos criar carros ... carro para nós é um objeto... mas para este sistema não basta saber que carro é um objeto, precisamos saber o que estes carros contém...temos que definir o que compõe o carro, falamos que temos que definir os atributos que um carro pode ter.

Neste caso os itens que compõe o carro são: nome, marca, velocidade máxima, quantidade de marchas, aro do pneu e tamanho das asas...sempre sonhei em construir um carro que voa... mas é claro que dependendo do que você vá fazer essa idéia muda radicalmente.

E por fim falaremos o que um carro pode fazer.. acelera, freia, troca marcha, decola (você achou que as asas eram para quê?)e.. ..e... acho que só né ?

Tudo o que o carro pode fazer chama-se métodos

Vamos dar uma resumida, temos atributos e métodos definidos para construirmos carros... Repare que os atributos e métodos se referem a qualquer carro que nós queiramos criar..ou seja, é tudo genérico.

Temos que colocar os atributos e métodos num lugar que seja genérico também para podermos num futuro próximo criar um carro... chamamos esse lugar de classe

Na literatura você pode encontrar a definição de classe como: “classe é uma estrutura que abstrai um conjunto de objetos com características similares.

Talvez esse conceito não tenha ficado muito claro, então dá uma conferida no post do Gabriel “Programação Orientada a Objetos

Vamos visualizar isso em Java, abaixo estará uma classe com o nome Carro com os atributos e métodos que falamos até aqui:

class Carro{

String nome;

String marca;

int velocidadeMaxima;

int quantidadeDeMarchas;

int marchaAtual=0;

double velocidadeAtual=0;

boolean estaVoando;

void trocarMarcha(){

if (marchaAtual < this.quantidadeDeMarchas){

this.marchaAtual = this.marchaAtual + 1;

System.out.println("marcha = " + this.marchaAtual);

}else {

System.out.println("As marchas já estão no limiteee!!! uhuuuu");

}

}

void acelerar(){

if(this.velocidadeAtual<=this.velocidadeMaxima){

int velocidadePorMarcha = this.velocidadeMaxima / this.quantidadeDeMarchas;

this.velocidadeAtual = velocidadePorMarcha * this.marchaAtual;

System.out.println("VRUUMMM ... velocidade atual é: " + this.velocidadeAtual);

}else{

System.out.println("Não mais pra acelerar...aaaaa!!!");

}

}

void freiar(){

this.velocidadeAtual = 0;

System.out.println("RSSSSHHHHHHHH que freiada");

}

void decola(){

if(this.velocidadeAtual==this.velocidadeMaxima){

this.estaVoando = true;

System.out.println("UHUU DECOLAMOS.. iiii caramba não dá pra pousar..");

}else{

this.estaVoando = false;

System.out.println("Para decolar você deve atingir a velocidade máxima!!!");

}

}

}

Esta é a classe Carro da qual falei, claro que ela está super básica, faltou citar muitas outras coisas como por exemplo o encapsulamento, da qual postarei em breve..e também falta te explicar alguns detalhes do código...

Esta classe possui alguns problemas que ainda não conteplamos pois na segunda parte deste post continuarei este exemplo explicando o código, implementando-o e corrigindo-o...

Os componentes que compõe a orientação a objetos básica são:

Atributos, Métodos, Classes, Encapsulamento, Polimorfismo, Casting, Herança e Interface... vamos tentar usar todos estes no exemplo do carro, nós vimos somente os 3 primeiros.... acho que não eu pra explicar tudo em cinco minutos vou precisar de mais algum tempinho pra te explicar tudo sobre, ok..

Aaaaa já ia me esquecendo... para você testar esta maluquice aí... tem que criar uma outra classe que chamaremos de Teste.. (poderia ser qualquer nome)

class Teste() {

public static void main(String[] args) {

Carro carro1 = new Carro();

carro1.nome = "duds race";

carro1.marca= "edu company";

carro1.velocidadeMaxima=700;

carro1.quantidadeDeMarchas=5;

carro1.trocarMarcha();

carro1.acelerar();

carro1.acelerar();

carro1.decola();

carro1.trocarMarcha();

carro1.acelerar();

carro1.trocarMarcha();

carro1.acelerar();

carro1.trocarMarcha();

carro1.acelerar();

carro1.trocarMarcha();

carro1.acelerar();

carro1.trocarMarcha();

carro1.acelerar();

carro1.decola();

}

}

Teste como desejar... e analise o código para melhor compreensão...

Bons estudos galera!!!


Eduardo Gomes da Silva

quarta-feira, 7 de outubro de 2009

Variáveis no JAVA

Bom, depois de algum tempo sem postar no Grupo Haw, cá estamos...

Já tivemos introdução à orientação a objetos, formas normais e convenções de código. Então nada mais justo que falarmos das variáveis do JAVA. Conhecer o que são e como são tratadas pelo compilador.

O que são variáveis?

São nada mais que espaços, de tamanho definido, alocados na memória no qual pode se armazenar um “valor” que pode ou não variar (variáveis, sacou?) no decorrer do seu programa. Ou como diz no Use a cabeça, uma xícara de diversas formas e tamanhos, um container para se guardar algo dentro.

Basicamente existem 2 tipos de variáveis no JAVA, as variáveis Primitivas, ou seja, que contêm valores básicos primitivos (int, short, long e etc..) e as variáveis de referência que guardam um endereço de memória para um objeto criado, ou seja, indicam através de um endereço de memória, onde está localizado o objeto.

Para declarar variáveis dos tipos primitivos devemos informar o tipo seguido do nome, podendo ainda atribuir (ou não) um valor no momento da declaração. O tamanho do espaço de memória alocado (reservado!?) para cada variável é definido no momento em que o tipo é declarado.

Ex.:

int x = 1;

ou

int x;

A declaração de variáveis segue alguns padrões estabelecidos pelo JavaDoc como informado no post “Convenções de Código” e também não permite o uso de palavras reservadas do Java.

Os tipos primitivos existentes no Java são:

boolean

char

byte

short

int

long

float

double

true ou false

16 bits

8 bits

16 bits

32 bits

64 bits

32 bits

64 bits

Uma forma de lembrá-los é criando uma frase com as iniciais:

B – C – B – S – I – L – F – D

Opa, espera aí... Está faltando algo nessa tabela de tipos primitivos, cadê o tipo String?

Não, não está faltando String nenhuma, uma String não é um tipo primitivo, em Java uma String é um objeto, que merece TAMBÉM (sim, acredite) um post só sobre isso, mas agora vamos voltar aos primitivos.

Aqui vai um exemplo do nosso co-piloto Gabriel para declarações:

class Primitivo {

public static void main(String args[]){

boolean flag = false;

char character = 'X';

char ascii = 65; // pode receber valores da tabela ASCII (65 = A)

byte b = 10;

short pequeno = 100;

int contador = 0;

long desciGoncalves = 100000L; //o long deve terminar com L

float fatura = 100.9F; // o float deve terminar com F

double media = 75.5;

System.out.println(flag);

System.out.println(character);

System.out.println(ascii);

System.out.println(b);

System.out.println(pequeno);

System.out.println(contador);

System.out.println(desciGoncalves);

System.out.println(fatura);

System.out.println(media);

}

}

A saída será:

false

X

A

10

100

0

100000

100.9

75.5

Uma variável só pode receber valor de variáveis de tipos com tamanho menor que o tipo que ela foi declarada. Assim os valores sempre caberão. É isso que importa para o compilador, pois mesmo que você tenha um valor do tipo double que caiba dentro de um int ele não permitirá a atribuição, já que não conhece o valor que você vai inserir. Ele somente deixará se você informar que sabe o que está fazendo. Utilizando um “cast”, mas isso é assunto para mais adiante.

A declaração de variáveis de referência basicamente é a mesma coisa. Declara-se o tipo do Objeto a referenciar e o nome da variável (não necessariamente precisa criar o objeto no momento da declaração). A diferença é que o tamanho do espaço alocado para uma variável de referência é sempre fixo, porque se trata de um endereço de memória que mostra como chegar ao objeto que se refere.

Exemplex(!?)

class DeclaraVariavelReferencia {

public static void main(String args[]){

HotDog dogao;

dogao = new HotDog();

}

}

A variável de referência serve para guardar um endereço de um determinado objeto e acessar seus métodos (post, uno más). Para acessar os métodos utilizamos o nome da referência + “.” + método.

Exemplo:

dogao.montarDog();

Uma variável de referência somente aponta para UM objeto e duas variáveis de referência podem apontar para o mesmo objeto.

O Java possui restrições quanto a referenciar objetos iguais as do tipo primitivo. Por exemplo, uma variável referência do objeto Carro não poderá se referenciar a um objeto do tipo Caminhão. Somente fazendo o tal do “cast” como nas variáveis primitivas.

Então, eu vou ficando por aqui... tentei explicar de cabeça (menos os valores que não lembrava) e caso tenha esquecido de algo peço que complementem nos comentários para que eu estude também...

Valeu galera,

Hasta la vista.

Obs.: Não citei variáveis primitivas como variáveis de instância de tipo primitivo como em alguns livros para não confundir com as variáveis de referência.

terça-feira, 6 de outubro de 2009

Regras de Interfaces Java

Olá pessoal... Hoje estou aqui pra falar sobre as famosas interfaces Java!

Não interface gráfica (GUI, Swing e AWT), mas as classes 100% abstratas, que são declaradas com a palavra-chave interface.

Ainda me lembro do dia em que eu tive o meu primeiro contato com as interfaces (estudando). Eu tinha acabado de entender como funcionava a herança em Java... Tinha descoberto que boa parte dos meus problemas havia acabado naquele momento, afinal, eu tinha aprendido que poderia economizar centenas de linhas de código nos meus programinhas herdando tudo.

Aí veio a decepção, quando eu comecei a aprender sobre as interfaces... Eu descobri que o que eu estava fazendo era herdando por preguiça, e a herança não foi feita pra isso, a herança tem que fazer sentido. Mas, isso vai ficar pra outro post, porque o assunto de hoje é sobre a prova SCJP.

Vamos ao resumo para certificação...

Declaração de Interfaces

  • Uma interface é como uma classe 100% abstrata;
  • As interfaces são implicitamente abstract, colocar esse modificador é opcional;
  • Uma interface só pode ser public ou default;
  • Uma interface NÂO pode ter o modificador private ou protected;
  • Uma interface pode estender várias interfaces (isso mesmo, a palavra usada é extends);
  • Uma interface NÂO pode implementar outra interface ou classe (parece estranho, mas uma interface estende outras interfaces);

Classes que Implementam

  • Uma classe concreta (não abstract) que implementa uma interface deve fornecer implementações para todos os seus métodos;
  • Uma classe abstract quem implementa uma interface não é obrigada a implementar seus métodos, mas a primeira classe concreta da arvore de herança deve implementá-los;
  • Uma classe que implementa uma interface não pode declarar nenhuma exceção nova, ou mais abrangente, mas pode declarar exceções de tempo de execução em qualquer método;

Regras dos Métodos

  • Todos os métodos de uma interface são implicitamente public e abstract;
  • E já que os métodos são abstract eles devem terminam com ponto-e-vírgula (;);
  • Os métodos declarados em uma interface não podem ser static;
  • Os métodos da interface não podem ser marcados com final, native, strictfp ou synchronized;

Regras das Variáveis (Constantes)

  • Todas as variáveis de uma interface são public, static e final, sendo assim, todas as variáveis são constantes (toda constante deve ser inicializada);
  • As declarações public, static e final são opcionais;
Como de costume, agora vamos a alguns exemplos em código:

Um ponto que pode confundir, é que uma interface estende outra, então a seguinte interface não é válida:

interface B implements A{

            // Uma interface estende outra interface

}

interface C extends A, B{

/* Como podemos ver, uma interface pode estender várias interfaces*/  

}

Como dito anteriormente, todos os método de uma interface são public e abstract implicitamente, e colocar esses modificadores fica opcional.

Todo método que é declarado desse modo:

interface TesteInterface {

            int getExemplo();

            void setExemplo();

}

É lido pelo compilador assim:

interface TesteInterface {

            public abstract int getExemplo();

            public abstract void setExemplo();

}

Abaixo segue alguns exemplos de métodos que não são válidos:

int getExemplo(){

            // O método deve terminar com ponto-e-vírgula

}

static int getExemplo(){

            // O método não pode ser static

}

final int getExemplo(){

            // O método não pode ser final, native, strictfp ou synchronized

}

Todas as variáveis são constantes, então devem ser inicializadas na declaração:

interface A {

            int TAMANHO; // Declaração inválida

            double MEDIA = 1.5; // Declaração válida

}

Todas as variáveis são implicitamente marcadas como public, static e final, sendo assim a seguinte declaração:

int VALOR = 20;

É lido dessa maneira pelo compilador:

public static final int VALOR = 20;

Bom, os exemplos de códigos vão ficando por aqui (está tarde, eu tenho uma semana de prova, e tenho que estudar!!!)... rsrs

Esse é um tipo de assunto que vale apena entender, não só pra certificação, é importante saber como é sua utilização na prática, e qual o motivo que fez o Joshua Bloch escrever em algumas partes do seu livro Effective Java fases do tipo "Prefira composição ao invés de herança", "Prefira interfaces a classes abstratas" e "Herança quebra o encapsulamento".

Não é difícil entender como declarar e implementar interfaces, difícil é saber qual é a hora de utilizá-la, e em que a sua utilização vai implicar no programa.

Uma ótima explicação para a utilização de interfaces está no livro Use a Cabeça! Java, em que a resposta é simples e direta, "Polimorfismo, polimorfismo, polimorfismo... As interfaces são a última palavra em flexibilidade...". Esse é um assunto que dever ser destrinchado além das explicações que são dadas no livro SCJP.

Com certeza as interfaces serão abordadas em outras postagens.

Até breve! ; )



sábado, 3 de outubro de 2009

Programação Orientada a Objetos

Depois de um tempo sem postar nada no Grupo Haw por causa da faculdade (provas e trabalhos), eu decidi escrever sobre um assunto bem básico, que é Orientação a Objetos. Pelo que eu vejo é Orientação a Objetos uma das maiores dificuldades de quem está iniciando em Java.
Eu mesmo tive certa dificuldade em entender Orientação a Objetos, e na minha cabeça sempre apareciam perguntas do tipo:
Pra que tantas classes?
• Por que eu não coloco todo o código na mesma classe?
• E essa lógica, eu tenho que usar três métodos pra fazer isso, mas eu poderia fazer em um método só.
Então eu resolvi escrever sobre orientação a objetos, um termo que antes de ser aprendido até parece um bicho de sete cabeças. Não que seja fácil, pois eu estou a cada dia aprendendo mais, e a cada artigo, blog e livro que eu leio, os conceitos vão se "clareando" mais na minha cabeça.
Mas, vamos ao que interessa...
O conceito de Programação Orientada a Objetos (POO) foi baseado na lógica da natureza, pois as coisas na natureza já existem por si só, muito antes de se pensar em computadores ou em sistemas. Na natureza não temos fatos isolados, as coisas interagem entre si, e todas essas coisas se comunicam através de mensagens.
A programação orientada a objetos tenta se aproximar ao máximo da natureza, trazendo o mundo real para os sistemas, onde tudo que na natureza nós chamamos de coisa passa a ser chamado de objetos. E é assim que chamaremos as coisas de agora em diante, tudo é objeto.
Todos os objetos (coisas na natureza) possuem características que os tornam únicos, e nos permite identificá-los. E é com essas características que vamos levá-los ao nosso sistema, tornando nosso programa mais parecido com o mundo real. Para exemplificar esse conceito vamos pensar em um veículo, como descreveríamos um veículo do mundo real?
O veículo é uma coisa que possui uma cor, uma marca, quantidade de portas, modelo, e assim por diante. E agora pensando nas coisas que um veículo faz, podemos dizer que um veículo acelera, freia e buzina.
E voltando a abordagem de programação orientada a objetos, no nosso sistema tudo que um veículo tem passa a ser chamado de atributos, e tudo que ele faz passa a ser chamado de métodos, assim essa coisa que no mundo real nós chamamos de veículo, será um objeto veículo, com atributos e propriedades:
Atributos:
• Cor
• Marca
• Quantidade de portas
• Modelo
Métodos:
• Acelerar
• Frear
• Buzinar
Pensando em um sistema para uma escola, podemos modelar uma sala de aula inteira de modo orientado a objetos, desse modo teríamos: O objeto professor, o objeto aluno, o objeto aula, objeto cadeira, assim por diante. E todos os objetos desse exemplo possuem características que nos permite identificá-los.
Existem ainda diversas vantagens na programação orientada a objetos que serão explicadas em outra postagem, como a herança, generalização, especialização, polimorfismo, etc. E outro conceito que será explicado em breve é o de classes.
Por enquanto é isso...
Gabriel Rubens