quinta-feira, 9 de outubro de 2008

SCJP: Você é o compilador

Apesar de existir o Sun Certified Java Associate (SCJA) a primeira certificação que a maioria dos programadores da linguagem Java considera é a Sun Certified Java Programmer (SCJP).

A Sun descreve o SCJP como uma certificação para os programadores que desejam demonstrar seus conhecimentos nos fundamentos da linguagem Java. Mas, o mercado de trabalho está seguindo uma linha de exigir/desejar essa certificação para seu futuros desenvolvedores.

image

Os assuntos que fazem partes dos requisitos para a prova do SCJP são:

  1. Declaração iniciação e escopo
  2. Controle de fluxo, Exceções e Assertivas
  3. Conceitos de Orientação a Objetos
  4. Fundamentos
  5. APIs fundamentais
  6. Concorrência
  7. Generics / Collections

O importante é que todo o assunto é coberto pelo livro Certificação Sun para Programador Java 5 de Kathy Sierra e Bert Bates cobrem todos os assuntos da prova.

Passos para obter a certificação:

  1. Possuir conhecimento na linguagem Java – não aconselho que a preparação para certificação seja o primeiro contato com a linguagem Java, o ideal é que o candidato tenha um conhecimento prévio. O conhecimento pode ser obtido através de um livro (aconselho Use a Cabeça Java de Kathy Sierra e Bert Bates) ou através de um curso (existe a possibilidade de fazer uso do curso da Iniciativa JEDI);
  2. Estudar o livro Certificação Sun para Programador Java 5 – o livro da Kathy é referência obrigatória e é o mais indicado por todos. Leia um capítulo faça o exercício e solicite a outra pessoa que corrija, se sua média for menor do que sete leia capítulo novamente;
  3. Compre o livro Certificação Java 5 – Guia Preparatório Exame CX 310-055 – esse livro é uma coletânea de perguntas com as respostas comentadas.
  4. Faça quantos simulados puder – quanto maior for a quantidade de simulados melhor (fiz apenas dois dos três disponíveis no livro do passo 3, mas aconselho que faça vários inclusive os web).
  5. Compre o voucher e marque a prova – compre o voucher na Sun pelo número: 0800-55-7863, marque a prova no site da Prometric e boa sorte.

Já era desenvolvedor a quase três anos quando resolvi fazer a prova, mas acredito que estudar para a certificação foi mais importante do que obter o título.

Referências:

SIERRA, Kathy e BATES, Bert. Certificação Sun para Programador Java 5. Alta Books. 2006. Referência obrigatória para todos aqueles que desejam fazer a prova do SCJP.
SERSON, Roberto. Certificação Java 5 – Guia Preparatório Exame CX 310-055. Brasport. 2006. Esse livro possui uma sequência de perguntas com as resposta comentadas e 3 simulados. Depois de ler o ligro da Kathy esse livro ajuda bastante.

quinta-feira, 2 de outubro de 2008

Por que alguns desenvolvedores Java não sabem o que é passagem por referência?

Por que é muito comum observar discussões se Java é passagem por valor ou se é passagem por referência? Será que toda essa dúvida é justificável? Existe na arquitetura da linguagem Java alguma característica que ajude a provocar essa dúvida? Vou tentar explicar esse assunto novamente.

Para entender corretamente esse assunto é necessário o conhecimento de alguns fundamentos:

Valor de uma variável: toda variável representa um espaço de memória onde é possível armazenar alguma informação e esse é o valor da variável. A forma mais comum de atribuir valor a uma variável em Java é através do operador de atribuição =.

Exemplo:

int x = 35; // o valor 35 foi atribuído a variável x
char y = 'u'; // o valor 'u' foi atribuído a variável y

Referência de uma variável: referência é um endereço de memória, logo, referência de uma variável é o endereço de memória onde a variável está alocada.

Em Java não existe um comando para pegar a referência de uma variável. Em C existe o operador & que tem essa função.

Exemplo 01:

int main(int argc, char *argv[]) {
int a = 25;
printf("Valor de a: %d e da referência de a: %d\n", a, &a);
return 0;
}

Ok, em Java não existe uma forma de obter o endereço de memória de uma variável, ou seja, não existe como pegar uma referência de uma variável. Então de onde vem a dúvida? O grande vilão dessa história é o comando new.

O comando new: serve para criar instâncias de classes, os famosos objetos. O que gera dúvida é a seguinte sintaxe do comando new:

ObjetoQualquer x = new ObjetoQualquer();

Observando a linha acima o desenvolvedor pode acreditar que a variável x armazena uma instância da classe ObjetoQualquer, na verdade, na linha acima, o comando new cria uma instancia da classe ObjetoQualquer e armazena o endereço de memória, dessa instância na variável x.

Ainda com dúvidas? Lembre-se do modificador final: esse modificador tem a função de não permitir que o valor (lembre-se eu disse VALOR) de uma variável seja modificado. Observe o exemplo:

Exemplo 02:

public class TesteFinal {
public static void main(String args[]) {
final int x = 55;
x = 40;
}
}

Nesse exemplo vamos observar um erro, pois tentamos alterar o valor da variável x de 55 para 40. Vamos a outro exemplo.

Exemplo 03:

classe ArmazenaInteiro {
int x = 55;
}

public class TesteFinal {
public static void main(String args[]) {
final ArmazenaInteiro a = new ArmazenaInteiro();
a.x = 40;
a.x = 990;
a.x = 312;
}
}

Pode testar... Não será encontrado nenhum erro, nos alteramos o objeto que está armazenado em a, mas não alteramos o valor de a.

Para finalizar a contraprova do exemplo 03, vamos agora alterar o valor de a:

Exemplo 04:

classe ArmazenaInteiro {
int x = 55;
}

public class TesteFinal {
public static void main(String args[]) {
final ArmazenaInteiro a = new ArmazenaInteiro();
a = new ArmazenaInteiro();
}
}

Erro na certa.

Não tenho a pretensão de achar que esse post vai eliminar com as gigantescas dúvidas sobre passagem por valor X passagem por referência em Java, mas, tentei fazer a minha parte, usei uma abordagem diferente.