O documento apresenta informações sobre a certificação Sun Certified Associate for the Java 2 Platform. Ele descreve os objetivos da certificação, como conceitos de orientação a objetos, modelagem UML, implementação de código Java e projeto de algoritmos. Também define o perfil dos candidatos, que inclui programadores de nível médio e estudantes interessados em se tornar desenvolvedores Java.
2. Magno A. Cavalcante
2
Desmistificando aDesmistificando a
SCPJ 5.0 (Tiger)SCPJ 5.0 (Tiger)
Sun Certified Programmer for the Java 2 Platform,
Standard Edition 5.0
Magno A. Cavalcante
(RioJUG Leader)
Janeiro/2006
3. Magno A. Cavalcante
3
O Que é Tecnologia Java?
Java é uma linguagem de programação de computadores de alto
nível, com sintaxe extremamente similar à do C++, e com
diversas características herdadas de outras linguagens, como
Smalltalk e Modula-3, criada pela Sun Microsystems.
É antes de tudo uma linguagem simples, fortemente tipada,
portável e independente de arquitetura de hardware, robusta,
segura, extensível, bem estruturada, distribuída, com suporte
nativo a processamento paralelo e desalocação automática de
memória por processo de coletor de lixo.
Inicialmente elaborada para ser a linguagem-base de projetos de
software para produtos eletrônicos, hoje a tecnologia se estende
aos mais diversos equipamentos e componentes eletrônicos que
tenham processador e área de memória, mesmo que bem
pequenos.
4. Magno A. Cavalcante
4
O Que é Tecnologia Java?
Atualmente chamamos Java de tecnologia ou plataforma, e não
simplesmente de linguagem por causa de seu amplo suporte aos
mais diversos tipos de sistemas de processamento.
A tecnologia Java divide-se em blocos de APIs (Application
Program Interfaces) para diferentes níveis de capacidade de
processamento.
Como requisito básico temos a JSE – Java Standard Edition,
destinada a computadores pessoais e pequenos servidores.
Em função das necessidades do usuário, existem:
JEE – Java Enterprise Edition, para sistemas de grande porte e
servidores;
JME – Java Micro Edition, para sistemas de pequeno porte e
embarcados;
JavaCard, para operação de SIM Cards ou chips passivos.
7. Magno A. Cavalcante
7
Tecnologia Java –
Histórico de Versões
1.0 – 1995: versão inicial;
1.1 – 1997: AWT, Inner Classes, JavaBeans, JDBC, RMI;
1.2 (Playground) – 1998: Reflection, Swing, compilador JIT,
Java Plug-in, Java IDL for CORBA, Collections;
1.3 (Kestrel) – 2000: HotSpot JVM, RMI for CORBA,
JavaSound, JNDI, Platform Debugger;
1.4 (Merlin) – 2002: expressões regulares, Exception Chaining,
New I/O, Logger, XML parser, XSLT processor, extensões de
criptografia e segurança (JCE, JSSE, JAAS);
5.0 (Tiger) – 2004: generics, autoboxing/unboxing,
metadados, enumerações, loop for estendido;
6.0 (Mustang) – 2006 ou 2007: projeto GlassFish, Java
Compiler API, Pluggable Annotation Processing API, XML Digital
Signatures, melhorias no diagnóstico de OutOfMemoryError,
melhorias na JVM e no Debugger.
7.0 (Dolphin) – 2008 ou 2009
8. Magno A. Cavalcante
8
Contexto Atual Sobre
Tecnologia Java
Desde seu lançamento, em maio de 1995, a plataforma Java foi
adotada mais rapidamente do que qualquer outra linguagem de
programação na história da computação.
Em 2003 Java atingiu a marca de 4 milhões de desenvolvedores
em todo mundo. Java continuou e continua crescendo, e hoje é
com certeza um padrão para o mercado oferecendo qualidade,
performance e segurança ainda sem nenhum competidor a
altura.
Java tornou-se popular pelo seu uso na Internet e hoje possui
seu ambiente de execução presente em web browsers,
mainframes, diversos Sistemas Operacionais, celulares,
PalmTops, PDAs, automóveis, aviões, robôs e cartões
inteligentes.
9. Magno A. Cavalcante
9
Contexto Atual Sobre
Tecnologia Java
Em 2005 comemorou-se 10 anos do surgimento oficial da
tecnologia Java.
Java está presente em mais da metade do mercado mundial de
desenvolvimento de software.
Hoje é a principal linguagem utilizada em pesquisas relacionadas
a software ou que utilizem software, em todo o mundo.
É a linguagem preferida da NASA para controle dos novos robôs
de exploração espacial.
Está sendo utilizada pela Boeing para os novos sistemas de
controle de vôo autônomo.
10. Magno A. Cavalcante
10
Contexto Atual Sobre
Tecnologia Java
Apesar de Índia e China serem pólos de desenvolvimento de
software mundial, muitas empresas estrangeiras estão montando
fábricas de software no Brasil por causa da estabilidade
econômica e política de uma região sem conflitos e da baixa
ocorrência de desastres naturais.
Isso também estimula a concorrência entre as empresas
nacionais, gerando mais oportunidades para os profissionais
qualificados.
O profissional Java é mais valorizado porque para dominar a
tecnologia ele precisa conhecer conceitos acadêmicos do ciclo de
vida de software.
Ainda hoje existe muita carência de profissionais qualificados,
dados os amplos conhecimentos exigidos dos candidatos.
11. Magno A. Cavalcante
11
Contexto Atual Sobre
Tecnologia Java
“As empresas estão procurando profissionais que saibam muito,
sejam bem capacitados, experientes e com conhecimento sólido
da plataforma. A razão é simples: os investimentos em TI estão
cada vez mais curtos e sendo medidos milimetricamente. Sabe-
se exatamente o que se quer e com que tipo de retorno.
Desperdícios não são mais tolerados.” *
“Para se capacitar, o profissional tem várias alternativas: cursos,
livros, revistas, sites, e, sem dúvida alguma, o auto-aprendizado
(toda a especificação do Java é pública e está disponível a
qualquer pessoa). Além disso, há também uma outra maneira
interessante de penetrar nesse mercado de trabalho:
participando, como voluntário, em grupos de usuários e em
projetos de desenvolvimento de software livre em Java, o
profissional pode iniciar sua rede de contatos e, ao mesmo
tempo, ganhar experiência real de trabalho.” *
* por Eduardo Ramos, colunista do TI Master, outubro/2003.
12. Magno A. Cavalcante
12
Certificações Java
Dos vários caminhos existentes para melhorar o seu fator de
empregabilidade, o mais objetivo de todos é a busca por possuir
o maior número de certificações internacionais que for possível.
Porém, é muito importante ressaltar que o profissional também
deverá ter cursado um curso de graduação de tecnologia em uma
universidade que seja reconhecida pelo mercado.
Em Java, as duas certificações “de entrada” para o profissional
são a Sun Certified Associate for the Java 2 PlatformSun Certified Associate for the Java 2 Platform
e a Sun Certified Programmer for the Java 2Sun Certified Programmer for the Java 2
Platform, Standard EditionPlatform, Standard Edition, já que as mesmas não têm
outras certificações como pré-requisito.
Mas antes de estudar para uma certificação em Java você deve
fortalecer seus conhecimentos de programação estruturada,
construção de compiladores e construção de sistemas
operacionais. Invista tempo com isso, e sua capacidade de
entendimento da tecnologia vai aumentar muito.
14. Magno A. Cavalcante
14
Um grupo de cientistas colocou cinco macacos em uma jaula. No meio, uma
escada e, sobre ela, um cacho de bananas.
Quando um macaco subia na escada para pegar as bananas, os cientistas
jogavam um jato de água fria com uma mangueira de incêndio nos que estavam
no chão. Depois de certo tempo, quando algum macaco ia subir a escada, os
outros o pegavam e o enchiam de pancada. Com mais algum tempo, nenhum
macaco subia mais a escada, apesar da tentação de comer as bananas.
Então, os cientistas substituíram um dos macacos por um outro novo. A
primeira coisa que ele fez foi subir a escada, dela sendo retirado pelos outros, que
o surraram. Depois de algumas surras, o novo integrante do grupo não subia mais
a escada.
Um segundo foi substituído e o mesmo ocorreu, tendo o primeiro substituto
participado com entusiasmo na surra ao novato.
Um terceiro foi trocado e o mesmo ocorreu. Um quarto, e afinal, o último dos
veteranos foi substituído.
Os cientistas então ficaram com um grupo de cinco macacos que, mesmo nunca
tendo tomado um banho frio, continuavam batendo naquele que tentasse pegar
as bananas.
Se possível fosse perguntar a algum deles porque eles batiam em quem
tentasse subir a escada, com certeza a resposta seria: "Não sei, mas as coisas
sempre foram assim por aqui". (autor desconhecido)
Mudanças no Cotidiano, Os Macacos
16. Magno A. Cavalcante
16
Sun Certified Associate
for the Java 2 Platform
Destina-se a programadores de nível médio ou a profissionais da indústria
de software que trabalhem em projetos utilizando a plataforma Java.
O candidato deverá ter experiência com HTML, JavaScript, XML, SQL,
TCP-IP.
O candidato deverá ter experiência com UML e conceitos e modelagem
com orientação a objetos.
O candidato deverá ter experiência com programação em Java, APIs Java
SE, Java EE, Java ME e Web Services.
A Quem Se Destina
17. Magno A. Cavalcante
17
Sun Certified Associate
for the Java 2 Platform
Programadores de nível médio;
Programadores oriundos de outras tecnologias;
Estudantes que queiram tornar-se programadores Java;
Gerentes de projetos que trabalham com a tecnologia Java;
Gerentes de TI.
Perfil dos Candidatos
18. Magno A. Cavalcante
18
Sun Certified Associate
for the Java 2 Platform
Descrever e comparar tipos primitivos (inteiros, ponto flutuante, booleanos
e caracteres), tipos enumerados e objetos;
Descrever e comparar classes concretas, classes abstratas, interfaces e
como se aplica a herança a estes elementos;
Descrever e comparar composições de classes, associações (incluindo
multiplicidades um-para-um, um-para-muitos e muitos-para-muitos) e
navegação pelas associações;
Descrever o ocultamento de informações (usando atributos privados e
métodos), encapsulamento e exposição da funcionalidade dos objetos
utilizando métodos públicos;
Objetivos – Conceitos Fundamentais de Orientação
a Objetos
19. Magno A. Cavalcante
19
Sun Certified Associate
for the Java 2 Platform
Descrever as convenções para JavaBeans, como os métodos pré-fixados
“setter”, “getter” e “is”;
Descrever como se aplica o polimorfismo a classes e interfaces;
Descrever e aplicar o princípio da “programação para interfaces”.
Objetivos – Conceitos Fundamentais de Orientação
a Objetos
20. Magno A. Cavalcante
20
Sun Certified Associate
for the Java 2 Platform
Reconhecer a representação UML para classes, incluindo atributos e
operações, classes abstratas e interfaces;
Reconhecer a representação UML para herança (implementação concreta,
abstrata e interfaces);
Reconhecer a representação UML para modificadores de visibilidades dos
atributos da classes (private, default, protected e public);
Reconhecer a representação UML para associações de classes,
composições, indicadores de multiplicidade da associação e navegação
pelos indicadores das associações.
Objetivos – Representação UML para Conceitos de
Orientação a Objetos
21. Magno A. Cavalcante
21
Sun Certified Associate
for the Java 2 Platform
Verificar exemplos de código utilizando o operador “new”;
Desenvolver código que utilize tipos primitivos; tipos enumerados,
referências a objetos e reconhecer literais para estes tipos;
Desenvolver código que declare classes concretas, classes abstratas,
interfaces; código que suporte implementação e herança de interfaces;
que declare atributos de instância e métodos; que utilize modificadores de
acesso;
Desenvolver código que implemente associações simples de classes; que
implemente multiplicidade usando arrays e coleções;
Objetivos – Implementação Java para os Conceitos
de Orientação a Objetos
22. Magno A. Cavalcante
22
Sun Certified Associate
for the Java 2 Platform
Reconhecer código que implemente composições em contraste com
associações simples; que implemente corretamente navegação pelas
associações.
Desenvolver código que utilize polimorfismo para classes e interfaces; e
reconhecer código que utilize o princípio da “programação para
interfaces”.
Objetivos – Implementação Java para os Conceitos
de Orientação a Objetos
23. Magno A. Cavalcante
23
Sun Certified Associate
for the Java 2 Platform
Descrever e comparar 3 tipos de instruções básicas: atribuição, condições
booleanas e iterações. E dada a descrição de um algoritmo, selecionar o
tipo apropriado de instrução para o projeto do algoritmo;
Dado um algoritmo como pseudo-código, determinar o escopo correto
para uma variável utilizada. Desenvolver código que declare variáveis em
um dos seguintes escopos: variáveis de instância, parâmetros de métodos
e variáveis locais
Dado um algoritmo como pseudo-código, desenvolver código de método
que implemente instruções de acesso condicional (if, switch), de iterações
(for, for-each, while, do-while), de atribuição, instruções break e continue
para controle de fluxo dentro de blocos swith e blocos de iterações;
Objetivos – Projeto e Implementação de
Algoritmos
24. Magno A. Cavalcante
24
Sun Certified Associate
for the Java 2 Platform
Dado um algoritmo com múltiplas entradas e uma saída, desenvolver
código de método que implemente usando parâmetros de método, um tipo
de retorno e uma instrução de retorno. Reconhecer os efeitos quando
referências a objetos ou primitivos são passados como parâmetros para
métodos que os modificam.
Dado um algoritmo como pseudo-código, desenvolver código que aplique
os operadores apropriados, incluindo operações de atribuição (limitado a:
=, +=, -=), operadores aritméticos (limitado a: +, -, *, /, %, ++, --),
operadores relacionais (limitado a: <, <=, >, >=, ==, !=), operadores lógicos
(limitado a:!, &&, ||) para produzir o resultado esperado. Escrever código
que determine a igualdade entre 2 objetos e entre 2 primitivos;
Desenvolver código que utilize o operador de concatenação (+), e os
seguintes métodos da classe String: charAt, indexOf, trim, substring,
replace, length, startsWith, endsWith.
Objetivos – Projeto e Implementação de
Algoritmos
25. Magno A. Cavalcante
25
Sun Certified Associate
for the Java 2 Platform
Descrever o propósito dos pacotes na linguagem Java, e reconhecer o uso
apropriado das instruções import e package;
Demonstrar o uso apropriado do comando “javac” (incluindo as opções de
linha de comando –d e –classpath);
Demonstrar o uso apropriado do comando “java” (incluindo as opções de
linha de comando –classpath, -D e –version);
Descrever o propósito e tipos de classes para os seguintes pacotes Java:
java.awt, javax.swing, java.io, java.net, java.util.
Objetivos – Fundamentos de Desenvolvimento em
Java
26. Magno A. Cavalcante
26
Sun Certified Associate
for the Java 2 Platform
Distinguir as características básicas das 3 plataformas Java: JSE, JME,
JEE. E dada a finalidade de uma arquitetura de alto nível, selecionar a
apropriada plataforma ou plataformas Java que se aplicam;
Descrever os benefícios e características básicas de RMI e
processamento paralelo com multithreading;
Descrever os benefícios e características básicas de JDBC, SQL e
tecnologias de SGBD e persistência de dados;
Descrever os benefícios e características básicas de JNDI, sistemas de
mensagens assíncronas e tecnologias JMS.
Objetivos – Plataformas Java e Integração de
Tecnologias
27. Magno A. Cavalcante
27
Sun Certified Associate
for the Java 2 Platform
Descrever as características básicas, benefícios e desvantagens da
criação de clientes leves usando HTML e JavaScript, e soluções para
configuração e publicação dos recursos relacionados;
Descrever as características básicas, benefícios, desvantagens e soluções
para configuração e publicação dos recursos relacionados a criação de
clientes com JME midlets;
Descrever as características básicas, benefícios, desvantagens e soluções
para configuração e publicação dos recursos relacionados a criação de
clientes pesados usando Applets;
Descrever as características básicas, benefícios, desvantagens e soluções
para configuração e publicação dos recursos relacionados a criação de
clientes pesados usando Swing.
Objetivos –Tecnologias para o Lado Cliente
28. Magno A. Cavalcante
28
Sun Certified Associate
for the Java 2 Platform
Descrever as características de uso, benefícios e desvantagens de: EJB,
servlets, JSP, JMS, JNDI, SMTP, JAX-RPC, Web Services (incluindo
SOAP, UDDI, WSDL, e XML), e JavaMail;
Descrever as características de uso, benefícios e desvantagens de
Servlets e JSP no suporte a clientes leves com HTML;
Descrever as características de uso, benefícios e desvantagens de EJBs:
session, entity e message-driven beans;
Descrever as características básicas de uso, benefícios e desvantagens
ao utilizar tecnologias JEE no lado servidor, descrevendo e comparando a
camada web (web-tier), a camada de negócios (business-tier) e a camada
de integração de sistemas (EIS tier).
Objetivos –Tecnologias para o Lado Servidor
29. Magno A. Cavalcante
29
Sun Certified Associate
for the Java 2 Platform
Código: 310-019
Preço: US$ 100.00
Pré-requisitos: Não Tem
Tipo de Exame: Questões de Múltipla Escolha e de Arrastar e Soltar
Número de Questões: 51
Pontuação Mínima: 68% (35 questões)
Duração: 115 minutos (média de 2 minutos por questão)
O Exame
30. Magno A. Cavalcante
30
Sun Certified Associate
for the Java 2 Platform
Sedimente os seus conhecimentos de HTML, JavaScript, XML, SQL e
TCP-IP estudando através de livros e apostilas;
Adquira um bom livro sobre tecnologia Java para ser o seu livro de
“cabeceira”, e estude-o do início ao fim, implementando em código-fonte
todos os exercícios;
Estude conceitos de análise e modelagem orientada a objetos utilizando
UML, seja através de um livro ou de apostilas capturadas na Internet;
Estude o tutorial do Java Standard versão 5.0, que pode ser capturado
direto do website da Sun Microsystems;
Não esqueça que RMI e JNDI são recursos nativos do Java Standard;
Como se Preparar
31. Magno A. Cavalcante
31
Sun Certified Associate
for the Java 2 Platform
Estude o tutorial do J2EE, disponível para download no website da Sun.
Procure na Internet tutoriais sobre Web Services em Java;
Leia mensalmente as revistas Java Magazine e Mundo Java;
Se puder pagar, faça uma formação completa de desenvolvedor Java em
algum dos centros de treinamento existentes;
Troque idéias com seus colegas de trabalho sobre tópicos da certificação;
Estude sobre a evolução dos sistemas de 1, 2, 3 e n camadas, e sobre
quais são as tecnologias presentes atualmente em cada camada;
Estude sobre padrões de projeto (design patterns);
Participe de um fórum de discussões sobre Java;
Faça muitos simulados e exercícios práticos do tipo “E se eu fizer isso...”
Como se Preparar
33. Magno A. Cavalcante
33
Java SE 5.0 – Novos
Recursos
Autoboxing/Unboxing
Type-safe enumerations
Varargs
Static import
Loop “for” estendido (“foreach”)
Generics
34. Magno A. Cavalcante
34
Java SE 5.0 - Autoboxing
public class AutoboxingUnboxing {
public static void main(String[] args) {
semAutoboxingUnboxing();
comAutoboxingUnboxing();
}
private static void semAutoboxingUnboxing() {
Integer fator1 = new Integer(15);
int fator2 = 10;
int produto = fator1.intValue() * fator2;
System.out.println("Sem autoboxing/unboxing:");
System.out.printf("%d x %d = %dnn", fator1, fator2,
produto);
}
35. Magno A. Cavalcante
35
Java SE 5.0 - Autoboxing
private static void comAutoboxingUnboxing() {
Integer fator1 = 15; // Autoboxing
int fator2 = 10;
int produto = fator1 * fator2; // Unboxing
System.out.println("Com autoboxing/unboxing:");
System.out.printf("%d x %d = %dnn", fator1, fator2,
produto);
}
}
36. Magno A. Cavalcante
36
Java SE 5.0 - Autoboxing
public class BoxingCompare {
public static void main(String... args) {
int x = 3, y=3;
Integer z = new Integer(3);
Integer k = new Integer(3);
testWrapperFirst(x, y); // true
testWrapperSecond(z, y); // true
testWrapperFirst(z, k); // false
}
static void testWrapperFirst(Integer a, Integer b){
System.out.print("Integer a = " + a);
System.out.println("tInteger b = " + b);
System.out.println((a == b) ? true : false);
}
37. Magno A. Cavalcante
37
Java SE 5.0 - Autoboxing
static void testWrapperSecond(int a, Integer b){
System.out.print("int a = " + a);
System.out.println("tInteger b = " + b);
System.out.println((a == b) ? true : false);
}
}
38. Magno A. Cavalcante
38
Java SE 5.0 - Enums
import java.text.NumberFormat;
import static java.lang.System.out;
public class Premiacao {
private enum Medalha {
OURO ("Ouro"),
PRATA ("Prata"),
BRONZE ("Bronze");
final String s;
Medalha(String s) {
this.s = s;
}
public String toString() {
return this.s;
}
}
39. Magno A. Cavalcante
39
Java SE 5.0 - Enums
private static void imprimirResultado(Medalha medalha) {
String colocacao = "";
double premio = 0.0;
switch (medalha) {
case OURO:
colocacao = "Primeiro";
premio = 5000.0;
break;
case PRATA:
colocacao = "Segundo";
premio = 2000.0;
break;
case BRONZE:
colocacao = "Terceiro";
premio = 1000.0;
}
40. Magno A. Cavalcante
40
Java SE 5.0 - Enums
out.printf("%s colocadonMedalha de %snPremio de %snn",
colocacao, medalha,
NumberFormat.getCurrencyInstance().format(premio));
}
public static void main(String[] args) {
imprimirResultado(Medalha.OURO);
imprimirResultado(Medalha.PRATA);
imprimirResultado(Medalha.BRONZE);
}
}
41. Magno A. Cavalcante
41
Java SE 5.0 - Varargs
public class SemVarargs {
static String calcula(String s, int a) {
return s + " = " + (a);
}
static String calcula(String s, int a, int b) {
return s + " = " + (a + b);
}
static String calcula(String s, int a, int b, int c) {
return s + " = " + (a + b + c);
}
public static void main(String[] riojug) {
System.out.print(" Valor -> " +
calcula("var", 2, 5));
}
}
42. Magno A. Cavalcante
42
Java SE 5.0 - Varargs
public class ComVarargs {
static String calcula(String s, int... a) {
int total = 0;
for (int i : a) {
total += i;
}
return s + " = " + total;
}
public static void main(String... riojug) {
System.out.print(" Valor -> " +
calcula("var", 2, 5));
}
}
43. Magno A. Cavalcante
43
Java SE 5.0 – Static
import
import static java.lang.Math.*;
public class StaticMath {
private double getCosseno(){
double r = cos(PI / 2.5);
return r;
}
public static void main(String... args){
StaticMath sm = new StaticMath();
System.out.println(sm.getCosseno());
}
}
45. Magno A. Cavalcante
45
Java SE 5.0 – Generics
public class SimpleGeneric {
public <E> void metodoSimples(E value) {
System.out.println(" Elemento Generico: " +
value.getClass().getName() + " => " + value);
}
public static void main(String... riojug) {
SimpleGeneric t = new SimpleGeneric();
t.metodoSimples(" riojug e scpj 5.0 ");
t.metodoSimples(new Integer(7));
t.metodoSimples((new float[] {1.2F, 2.3F, 3.4F}));
t.metodoSimples(3.1415);
}
}
46. Magno A. Cavalcante
46
Java SE 5.0 – Generics
public class ArrayTestGenerics {
public static <E> void printArray(E... inputArray) {
for (E element : inputArray) {
System.out.printf("%s ", element);
}
System.out.println();
}
public static void main(String... args) {
Integer[] integerArray = {1, 2, 3, 4, 5, 6};
Double[] doubleArray = {1.1, 2.2, 3.3, 4.4, 5.5, 6.6};
Character[] characterArray = {'H', 'E', 'L', 'L', 'O'};
printArray(integerArray);
printArray(doubleArray);
printArray(characterArray);
}
}
47. Magno A. Cavalcante
47
Java SE 5.0 – Generics
public class ColecoesSemGenerics {
public static void main(String[] args) {
colecoesSemGenerics();
}
private static void colecoesSemGenerics() {
List nomes = new ArrayList();
// Runtime Fail by ClassCastException
// nomes.add(new StringBuffer("Joaquim"));
nomes.add("Joaquim");
nomes.add("Joao");
nomes.add("Maria");
String primeiroNome = null;
primeiroNome = ((String) nomes.get(0)).toUpperCase();
System.out.println(primeiroNome);
}
}
48. Magno A. Cavalcante
48
Java SE 5.0 – Generics
public class ColecoesComGenerics {
public static void main(String[] args) {
colecoesComGenerics();
}
private static void colecoesComGenerics() {
List<String> nomes = new ArrayList<String>();
/* Compilation Fail: The method add(String) in the
* type List<String> is not applicable
* for the arguments (StringBuffer)
*/
// nomes.add(new StringBuffer("Joaquim"));
nomes.add("Joaquim"); nomes.add("Joao");
nomes.add("Maria");
String primeiroNome = nomes.get(0).toUpperCase();
System.out.println(primeiroNome);
}
}
49. Magno A. Cavalcante
49
Java SE 5.0 – Generics
class SequenciaStrings {
public void semGenerics(List seq, char primChar) {
for (Iterator i = seq.iterator(); i.hasNext();) {
if (((String) i.next()).charAt(0) != primChar) {
i.remove();
}
}
}
public void comGenerics(List<String> seq, char primChar) {
for (Iterator<String> i = seq.iterator(); i.hasNext();) {
if (i.next().charAt(0) != primChar) {
i.remove();
}
}
}
50. Magno A. Cavalcante
50
Java SE 5.0 – Generics
public void comForeach(List<String> seq, char primChar) {
for (String i : seq) {
if (i.charAt(0) != primChar) {
seq.remove(i);
}
}
}
}
51. Magno A. Cavalcante
51
Java SE 5.0 – Generics
public class ColecaoNumber<T extends Number> {
List<T> cj;
public ColecaoNumber() {
cj = new ArrayList<T>();
}
public void loadNumber(T number) {
cj.add(number);
}
52. Magno A. Cavalcante
52
Java SE 5.0 – Generics
public void extractNumbers() {
for (Number n : cj) {
System.out.printf("%ft", n.doubleValue());
}
}
public static void main(String... var) {
ColecaoNumber cn = new ColecaoNumber();
cn.loadNumber(new Integer(2));
cn.loadNumber(4.1357);
cn.loadNumber(7L);
cn.extractNumbers();
}
}
53. Magno A. Cavalcante
53
Java SE 5.0 – Generics
public class StackGeneric<T> implements Cloneable {
private ArrayList<T> items;
private int top = 0;
public StackGeneric() {
items = new ArrayList<T>();
}
public StackGeneric(T... ts ) {
items = new ArrayList<T>();
for (T a : ts) {
items.add(a);
}
}
public void push(T item) {
items.add(item);
top++;
}
54. Magno A. Cavalcante
54
Java SE 5.0 – Generics
public T pop() {
if (items.size() == 0) {
throw new EmptyStackException();
}
T obj = items.get(--top);
return obj;
}
public boolean isEmpty() {
if (items.size() == 0)
return true;
else
return false;
}
55. Magno A. Cavalcante
55
Java SE 5.0 – Generics
protected StackGeneric<T> clone() {
try {
StackGeneric<T> s = (StackGeneric<T>) super.clone();
s.items = (ArrayList<T>) items.clone();
return s;
} catch (CloneNotSupportedException e) {
throw new InternalError();
}
}
56. Magno A. Cavalcante
56
Java SE 5.0 – Generics
public static void main(String[] args) {
StackGeneric<String> s = new StackGeneric<String>();
s.push("1o.");
s.push("2o.");
s.push("3o.");
StackGeneric<String> s2 = s.clone();
System.out.printf("%s t %s t %s t %s",
s.pop(), s.pop(), s.pop(), s2.pop());
//3o. 2o. 1o. 3o.
}
}
58. Magno A. Cavalcante
58
Sun Certified Programmer
for the Java 2 Platform,
Standard Edition 5.0
Programadores experientes que utilizam a linguagem Java.
Esta certificação fornece claras evidências que o programador entende a
sintaxe básica e a estrutura da linguagem Java e que pode criar
aplicações Java que serão executadas tanto em sistemas servidores
quanto em sistemas desktops, utilizando o JSE 5.0.
A Quem Se Destina
59. Magno A. Cavalcante
59
Sun Certified Programmer
for the Java 2 Platform,
Standard Edition 5.0
Desenvolver código que declare classes (incluindo classes abstratas e
todas as formas de classes aninhadas/nested), interfaces, enums,
incluindo o uso apropriado das instruções package e import (incluindo
static imports);
Desenvolver código que declare uma interface. Desenvolver código que
implemente ou estenda uma ou mais interfaces. Desenvolver código que
declare uma classe abstrata. Desenvolver código que declare estenda
uma classe abstrata;
Desenvolver código que declare, inicialize e utilize tipos primitivos, arrays,
enums e objetos, suportando variáveis estáticas, de instância e locais,
utilizando identificadores corretos para os nomes das variáveis;
Objetivos – Declaração, Inicialização e Escopo
60. Magno A. Cavalcante
60
Sun Certified Programmer
for the Java 2 Platform,
Standard Edition 5.0
Desenvolver código que declare métodos estáticos e não-estáticos
simultaneamente, e – se for o caso – que utilizem nomes de métodos
aderentes ao padrão JavaBeans. Desenvolver código que declare e utilize
uma lista de argumentos de tamanho variável;
Dado um código de exemplo, determine se um método está
sobrescrevendo ou sobrecarregando outro método, além de identificar
valores de retorno corretos (incluindo valores covariantes) para o método;
Dado um conjunto de classes e superclasses, desenvolver construtores
para uma ou mais classes. Dada uma declaração de classe, determinar se
um construtor default vai ser criado, e se for, determinar o comportamento
daquele construtor. Dada uma lista de classes aninhadas e não-
aninhadas, escrever código que instancie estas classes.
Objetivos – Declarações, Inicialização e Escopo
61. Magno A. Cavalcante
61
Sun Certified Programmer
for the Java 2 Platform,
Standard Edition 5.0
Desenvolver código que implemente uma instrução if ou switch; e
identificar tipos de argumentos corretos para estas instruções;
Desenvolver código que implemente todas as formas de loops e iterações,
incluindo o uso de for, o loop for estendido (for-each), do, while, labels,
break, continue; e interpretar os valores tratados pelo contador do loop
durante e depois da execução do loop;
Desenvolver código que faça uso de assertions, e distinguir
apropriadamente o uso incorreto de assertions;
Desenvolver código que faça uso de exceptions e clausulas que tratam
exceptions (try, catch, finally). Declarar métodos e sobrescrita de métodos
que lançam exceptions;
Objetivos – Controle de Fluxo
62. Magno A. Cavalcante
62
Sun Certified Programmer
for the Java 2 Platform,
Standard Edition 5.0
Reconhecer o efeito que uma exception produz em um ponto específico
dentro de um pedaço de código-fonte;
Reconhecer as diferenças entre Runtime Exception, Checked Exception,
ou Error;
Reconhecer situações que poderão acabar em um dos seguintes casos de
lançamento de exceptions ou errors: ArrayIndexOutOfBoundsException,
ClassCastException, IllegalArgumentException, IllegalStateException,
NullPointerException, NumberFormatException, AssertionError,
ExceptionInInitializerError, StackOverflowError, NoClassDefFoundError.
Entender quais destes são lançados pela JVM e reconhecer situações em
que outros devem ser lançados programaticamente.
Objetivos – Controle de Fluxo
63. Magno A. Cavalcante
63
Sun Certified Programmer
for the Java 2 Platform,
Standard Edition 5.0
Desenvolver código que utilize classes wrapper (como Boolean,
Character, Double, Integer, etc.) e condições de ocorrência de autoboxing
e unboxing.
Discutir as diferenças entre as classes String, StringBuilder e StringBuffer.
Dado um cenário envolvendo navegação pelo sistema de arquivos, leitura
ou escrita de arquivos, desenvolver a solução adequada usando as
seguintes classes (algumas vezes em combinação) do pacote java.io:
BufferedReader,BufferedWriter, File, FileReader, FileWriter, PrintWriter;
Desenvolver código que serialize e/ou de-serialize objetos usando as
seguintes classes (algumas vezes em combinação) do pacote java.io:
DataInputStream, DataOutputStream,FileInputStream, FileOutputStream,
ObjectInputStream, ObjectOutputStream, Serializable;
Objetivos – Conteúdo da API
64. Magno A. Cavalcante
64
Sun Certified Programmer
for the Java 2 Platform,
Standard Edition 5.0
Desenvolver código que utilize as APIs do pacote java.text corretamente
para formatar e transformar datas, números e valores monetários para
uma localidade específica. Dado um cenário, determinar os métodos
apropriados para utilizar se você quer exibir dados com a localidade
padrão ou para uma específica localidade. Descrever o propósito e o uso
da classe java.util.Locale;
Escrever código que utilize APIs dos pacotes java.util e java.util.regex para
formatar e transformar strings ou streams de dados. Para strings, escrever
código que utilize as classes Pattern e Matcher e o método String.split;
Objetivos – Conteúdo da API
65. Magno A. Cavalcante
65
Sun Certified Programmer
for the Java 2 Platform,
Standard Edition 5.0
Reconhecer e utilizar padrões de expressões regulares para combinações
de strings (limitado a: . (dot), * (star), + (plus), ?, d, s, w, [], ()). O uso de
*, +, e ? estará limitado a quantificadores e o operador () somente vai ser
usado como um mecanismo de agrupamento, enão para captura de
conteúdo nas combinações. Para streams, escrever código que use as
classes Formatter e Scanner e os métodos PrintWriter.format/printf.
Reconhecer e utilizar parâmetros de formatação (limitado a: %b, %c, %d,
%f, %s) para formatar strings.
Objetivos – Conteúdo da API
66. Magno A. Cavalcante
66
Sun Certified Programmer
for the Java 2 Platform,
Standard Edition 5.0
Escrever código que define, instancia e inicia novas threads usando
java.lang.Thread e/ou java.lang.Runnable;
Reconhecer os estados em que uma thread pode existir, e identificar
caminhos em que uma thread pode transitar entre um estado e outro;
Dado um cenário, escrever código que faça uso correto de “object locking”
para proteger variáveis estáticas ou de instância contra problemas de
acesso concorrente;
Dado um cenário, escrever código que faça uso correto de wait, notify,
notifyAll.
Objetivos – Concorrência
67. Magno A. Cavalcante
67
Sun Certified Programmer
for the Java 2 Platform,
Standard Edition 5.0
Desenvolver código que implemente encapsulamento compacto, baixo
acoplamento e alta coesão em classes, descrevendo os respectivos
benefícios;
Dado um cenário, desenvolver código que demonstre o uso de
polimorfismo. Determinar quando a conversão (casting) de tipos será
necessária e reconhecer erros do compilador versus erros de tempo de
execução relacionados ao casting da referência de objetos;
Expor o efeito dos modificadores de acesso, na herança de objetos, com
respeito a construtores, variáveis estáticas ou de instância e métodos
estáticos ou de instância;
Dado um cenário, desenvolver código que declare e/ou invoque
sobrescrita ou sobrecarga de métodos; e código que declare e/ou invoque
superclasse, sobrescrita ou sobrecarga de construtores;
Desenvolver código que implemente relacionamentos entre classes do tipo
“is-a” e/ou “has-a”.
Objetivos – Conceitos de Orientação a Objetos
68. Magno A. Cavalcante
68
Sun Certified Programmer
for the Java 2 Platform,
Standard Edition 5.0
Dado um cenário de projeto, determinar quais classes de coleções e/ou
interfaces devem ser usadas para implementar corretamente aquele
projeto, incluindo o uso da interface Comparable;
Distinguir entre a forma correta e a incorreta de sobrescrever os métodos
correspondentes hashCode e equals, e explicar a diferença entre o
operador == e o método equals;
Escrever código que utilize as versões genéricas da API de Collections,
em particular as interfaces Set, List, Queue, Map e as classes que as
implementam;
Reconhecer as limitações dos elementos não-genéricos da API de
Collections e como fazer para modificar o código para utilizar as versões
genéricas;
Objetivos – Coleções e Generics
69. Magno A. Cavalcante
69
Sun Certified Programmer
for the Java 2 Platform,
Standard Edition 5.0
Desenvolver código que faça uso apropriado de parâmetros de tipo
genéricos na declaração de classes ou interfaces, variáveis de instância,
argumentos de métodos e tipos de retorno. Escrever métodos genéricos
ou métodos que façam uso de marcadores de tipos e entender as
similaridades e diferenças entre estas duas abordagens;
Utilizar as capacidades do pacote java.util para escrever código que
manipule uma lista para ordenação, execução de busca binária, ou
conversão de um array para uma lista;
Utilizar as interfaces java.util.Comparator e java.lang.Comparable para
modificar a forma de ordenação de listas e de arrays. Além disso,
reconhecer o efeito da “ordenação natural” de classes wrapper para
primitivos e da classe java.lang.String na ordenação.
Objetivos – Coleções e Generics
70. Magno A. Cavalcante
70
Sun Certified Programmer
for the Java 2 Platform,
Standard Edition 5.0
Dado um exemplo de código e um cenário, escrever código que utilize os
modificadores de acesso apropriados, declarações de pacotes e
instruções de importação para interagir (acesso direto ou por herança)
com o código no exemplo;
Dado um exemplo de classe e uma linha de comando, determinar o
comportamento esperado em tempo de execução;
Determinar o efeito a respeito de referências de objetos e valores
primitivos quando eles são passados como parâmetros para métodos que
realizam atribuições e outras operações de modificação sobre os
parâmetros;
Dado um exemplo de código, reconhecer o ponto no qual um objeto torna-
se elegível para a coleta automática de lixo (garbage collection), e
determinar o que é e o que não é garantido pelo sistema de coleta
automática de lixo;
Objetivos – Fundamentos
71. Magno A. Cavalcante
71
Sun Certified Programmer
for the Java 2 Platform,
Standard Edition 5.0
Reconhecer os comportamentos de System.gc e finalization;
Dado um nome completo de uma classe que é publicada dentro e/ou fora
de um arquivo JAR, construir a estrutura de diretórios apropriada para
aquela classe;
Dado um exemplo de código e um CLASSPATH, determinar se o
CLASSPATH vai ser compatível para a compilação completa e correta do
código;
Escrever código que aplique corretamente os operadores apropriados,
incluindo operadores de atribuição (limitado a: =, +=, -=), operadores
aritméticos (limitado a: +, -, *, /, %, ++, --), operadores relacionais (limitado
a: <, <=, >, >=, ==, !=), o operador instanceof, operadores lógicos(limitado
a: &, |, ^, !, &&,||), ) e o operador condicional ( ? : ), para produzir o
resultado desejado;
Escrever código que determine a igualdade entre dois objetos e dois
primitivos.
Objetivos – Fundamentos
72. Magno A. Cavalcante
72
Sun Certified Programmer
for the Java 2 Platform,
Standard Edition 5.0
Código: 310-055
Preço: US$ 150.00
Pré-requisitos: Não Tem
Tipo de Exame: Questões de Múltipla Escolha e de Arrastar e Soltar
Número de Questões: 73
Pontuação Mínima: 59% (44 questões)
Duração: 175 minutos (média de 2 minutos por questão)
O Exame
73. Magno A. Cavalcante
73
Sun Certified Programmer for the
Java 2 Platform, Standard
Edition 5.0 Upgrade Exam
Código: 310-056
Preço: US$ 100.00
Pré-requisitos: versão anterior (1.4) do exame Sun Certified Programmer
for Java 2 Platform
Tipo de Exame: Questões de Múltipla Escolha e de Arrastar e Soltar
Número de Questões: 46
Pontuação Mínima: 59% (28 questões)
Duração: 105 minutos (média de 2 minutos por questão)
O Exame de Upgrade
74. Magno A. Cavalcante
74
Sun Certified Programmer
for the Java 2 Platform,
Standard Edition 5.0
Estude os fundamentos da linguagem por um livro em português, fazendo
todos os exercícios recomendados;
Peça emprestado outros livros diferentes para seus colegas e estude-os;
Faça o download do Java Standard Tutorial e estude os tópicos que estão
relacionados diretamente com o exame, implementando todos os
exemplos. Faça variações sobre os exemplos;
Estude os artigos técnicos escritos por Rogério Moraes de Carvalho sobre
os novos recursos do Java 5.0 (Tiger) nos boletins do DFJUG do primeiro
semestre de 2005;
Procure por artigos sobre o Java 5.0 nas revistas Java Magazine e Mundo
Java de 2005 e de 2006;
Como se Preparar
75. Magno A. Cavalcante
75
Sun Certified Programmer
for the Java 2 Platform,
Standard Edition 5.0
Leia especialmente os artigos escritos pelo colunista Osvaldo Pinali
Doederlein, na revista Java Magazine. Ele é membro individual do Java
Community Proccess e participa ativamente das definições do JSE;
Estude o artigo de Gilad Bracha, com o nome “Generics in the Java
Programming Language”, de 5 de julho de 2004;
Estude e implemente os exemplos do artigo “J2SE 5.0 in a Nutshell”;
Estude o “White Paper Java Platform Migration Guide, Version 1.3 to 5.0”,
disponível no website da Sun Microsystems;
Estude o artigo “The All-New Java 2 Platform, Standard Edition (J2SE) 5.0
Platform: Programming with the New Language Features in J2SE 5.0”;
Importante: utilize fortemente em sua preparação todo material que você
conseguir sobre a certificação anterior (J2SE 1.4);
Como se Preparar
76. Magno A. Cavalcante
76
Sun Certified Programmer
for the Java 2 Platform,
Standard Edition 5.0
Faça o download dos códigos-fontes do livro “Java Como Programar – 6a.
Edição”, a partir do website do Deitel, e estude os capítulos que se
enquadram nos objetivos da certificação.
Sempre procure exercitar a prática dos exemplos, variando as opções com
curiosidade, aplicando a técnica do “E se eu fizer esta alteração...”;
Procure por simulados do exame na Internet, tanto do 1.4 quanto do 5.0.
Repita os testes até o ponto em que você estiver obtendo uma média de
acertos superior a 90% na maioria deles;
Não se esqueça: as certificações se baseiam no fato de que o
profissional tem disponível apenas um editor de texto tipo MS Notepad ou
VI, e nada além disso.
Como se Preparar
77. Magno A. Cavalcante
77
Adquirindo um Voucher
No Brasil, telefone para 0800-557863 durante o horário comercial;
Ao ser atendido, informe que deseja adquirir um voucher para realizar
prova de certificação;
Informe os três primeiros números do código da certificação (em geral é
310);
O valor atual do voucher é R$ 330,00
Após pagar o boleto bancário que você vai receber por e-mail, você
receberá em sua casa um envelope com a documentação sobre aquele
voucher;
Você terá um ano, a partir da data de emissão do voucher, para usá-lo
antes que ele perca a validade.
Contactando os Serviços Educacionais da Sun
Microsystems do Brasil
78. Magno A. Cavalcante
78
Fazendo o Exame
Cadastre-se no website de certificações da Prometric.com;
Procure por centros de exame autorizados na sua cidade;
Visite pessoalmente os centros autorizados para selecionar o que melhor
se enquadra nas suas expectativas;
No website, selecione um local de realização, o código e nome do exame,
escolha uma data e informe o código do voucher;
No dia do exame, procure chegar com 30 minutos de antecedência ao
local de realização;
Dê preferência em resolver primeiro às questões mais simples. Procure
deixar questões tipo Drag & Drop e sobre threads para o final;
Após o exame, verifique seus pontos obtidos.
Registrando-se na Prometric.com
81. Magno A. Cavalcante
81
Referências
Java Como Programar; 6a. Edição; Deitel; Editora Pearson Education.
UML – Guia do Usuário; Booch, Rumbauch, Jacobson; Editora Campus.
Tutorial do J2EE (tradução); Bodoff; Editora Ciência Moderna.
Core J2EE Patterns; Dan Malks, Deepak Alur, John Crupi; Editora
Campus.
Head First Java, 2nd Edition; Kathy Sierra, Bert Bates; Editora O'Reilly &
Associates.
Livros
82. Magno A. Cavalcante
82
Referências
Sun Java Technology Certification Paths (www.sun.com/training/
certification/java/index.html)
Java Ranch's (www.javaranch.com/certfaq.jsp)
UML for the Java Associate (www.hfoobook.com/pdf/hfoo-associateuml.pdf
)
Marcus Green's Certification (www.jchq.net)
Java Enterprise Edition Specification (jcp.org/aboutJava/
communityprocess/pr/jsr244/index.html)
Java Micro Edition Documentation (java.sun.com/j2me/docs/)
DEITEL Online (www.deitel.com)
Internet
83. Magno A. Cavalcante
83
Referências
J2SE 5.0 in a Nutshell (java.sun.com/developer/technicalArticles/releases
/j2se15/)
The All-New Java 2 Platform, Standard Edition (J2SE) 5.0 Platform:
Programming with the New Language Features in J2SE 5.0 (java.sun.com/
developer/technicalArticles/releases/j2se15langfeat/)
Using and Programming Generics in J2SE 5.0 (java.sun.com/developer/
technicalArticles/J2SE/generics/index.html)
Java Community Process (www.jcp.org)
RioJUG (www.riojug.org)
DFJUG (www.dfjug.org)
SouJava (www.soujava.org.br)
Internet
84. Magno A. Cavalcante
84
Referências
JavaFree (www.javafree.com.br)
GUJ (www.guj.com.br)
Serviços Educacionais da Sun Microsystems do Brasil (www.sun.com.br/
service/educacao/certificacoes)
Thomson Prometric (www.prometric.com)
TI Master (www.timaster.com.br)
Internet
85. Magno A. Cavalcante
85
Desmistificando aDesmistificando a
SCPJ 5.0 (Tiger)SCPJ 5.0 (Tiger)
O RioJUG agradece a sua participação.
Obrigado!
Magno A. Cavalcante
magno@riojug.org
RioJUG Leader
riojug-owner@yahoogroups.com
RioJUG Leaders
Janeiro/2006