Este documento fornece uma agenda para um curso de certificação Java OCA. A agenda inclui 10 macrotemas como introdução à certificação Java, tipos de dados, classes, herança e exceções. Cada macrotema será dividido em tópicos específicos como tecnologia Java, orientação a objetos, tipos de aplicações Java e estrutura de um arquivo Java.
Oracle Certified Associate - Java Programmer I - aula 2
1. Java Certified Associate
Jose Berardo
www.especializa.com.br/curso/oca-javaassociate
sábado, 9 de março de 13
2. Agenda
Macrotemas do curso:
1. Introdução às certificações Java
2. Iniciando com Java
3. Tipos de dados e seus detalhes
4. Expressões e construções
5. Usando arrays e coleções
6. Construções de laço
7. Classes, construtores e métodos
8. Herança e polimorfirsmo
9. Manipulação de exceções
10. Aplicações Java
sábado, 9 de março de 13
3. Agenda
2. Iniciando com Java
2.1. Tecnologia Java
2.2. Orientação a objetos
2.3. Tipos de aplicações Java
2.4. Programando em Java no console
2.5. Estrutura de um .java
2.6. Estrutura do SDK
“O basicão do basicão...”
sábado, 9 de março de 13
4. Em meados dos anos 90, Patrick Naughton, Mike Sheridan e James Gosling
criaram a linguagem Java com foco na então pouco difundida orientação a objetos
“Java is a full-fledged object-oriented programming language”
Baseada em C/C++, Java trazia muitas novidades para as linguagens da época:
threading, rede, segurança, GUI, gestão automática de memória (ponteiros)
Desenhada para ser multiplataforma, interpretada pela Java Virtual Machine
sábado, 9 de março de 13
5. Orientação a objetos
OOA - Object Oriented Analysis
Determina a funcionalidade do sistema. O que ele será capaz de fazer
OOD - Object Oriented Design
Modelagem que determina como a arquitetura suporta a funcionalidade da
aplicação
OOP - Object Oriented Programming
Abrange a implementação da aplicação
UML - Unified Modeling Language
Técnica de representação gráfica para design e documentação
sábado, 9 de março de 13
6. Modelagem de classes
Diagrama UML mais adotado na
prática
Caixas separadas em três seções:
A primeira reserva o nome da classe
A segunda lista as variáveis que
serão atributos de seus objetos.
Determina o estado (state) dos
objetos.
A terceira declara os métodos
Determina o comportamento
sábado, 9 de março de 13
7. Modelagem de classes
Terminologia:
-: Membros privados
+: Membros públicos
#: Membros protected (público entre
classes de uma hierarquia)
sábado, 9 de março de 13
8. Princípios OO
Objects:
Estrutura de dados
Pré-moldada em uma classe
Coleciona atributos, que determinam seu estado
Carregam comportamento declarado através de métodos
Possuem referência
Ponteiro interno que resolve o endereçamento físico do objeto em
memória
Variáveis nunca recebem o binário do objeto, mas o inteiro desta
referência
sábado, 9 de março de 13
9. Princípios OO
Classes:
Artefato que descreve as características de seus objetos
Abstrações do estado e das funcionalidades dos objetos
Podem possuir estado
static variables - alocação estática
Cada classe está totalmente escrita em um único e distinto arquivo
Relações entre classes são refletidas em seus objetos:
dependências, associações ou hierarquias
sábado, 9 de março de 13
10. Princípios OO
Data encapsulation (encapsulamento):
Consiste em esconder dos usuários da classe, informações irrelevantes e
expor as informações relevantes.
A premissa básica é diminuir o nível de complexidade aparente da classe
É conseguido através dos modificadores de visibilidade
É usado também para proteger o estado interno dos objetos
A técnica é esconder a variável que representa o estado e liberar
métodos de acesso para leitura e escrita quando necessário e impondo
as regras definidas na própria classe
sábado, 9 de março de 13
11. Princípios OO
Inheritance (herança):
Técnica que permite derivação em classes filhas. Estas vão herdar o que
for definido em suas classes mães
Utilizada para promover reuso de código
É importante ter cuidado com o alto acoplamento gerado entre essas
classes
Certos casos devem ser implementados via composições
Ex.:
public class Pessoa { ... }
public class PessoaFisica extends Pessoa { ... }
public class PessoaJuridica extends Pessoa { ... }
sábado, 9 de março de 13
12. Princípios OO
Polymorphism (polimorfismo):
Técnica que permite receber mais de um tipo de objeto a partir de
relações hierárquicas esperadas
Ex.:
Pessoa p1 = new PessoaFisica();
Pessoa p2 = new PessoaJuridica();
Subclasses podem sobrescrever comportamentos de classes mães de
forma transparente
p1.validarAtributos(); p2.validarAtributos();
É necessário ter cuidado em manter a relação é-um
Se um método de subclasse “nega” o comportamento da mãe, esta
deveria ser abstrata
sábado, 9 de março de 13
13. Tipos de aplicações Java
Aplicações básicas para o console
package cap1;
public class RelouOOrde {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("Ela caiu e relou o ôrde!");
}
}
sábado, 9 de março de 13
14. Tipos de aplicações Java
Aplicações de janelas (GUI)
package cap1;
import javax.swing.JFrame;
public class MinhaJanela extends JFrame {
private static final long serialVersionUID = 1L;
public MinhaJanela() {
this.setSize(500, 500);
this.setTitle("Essa é a minha Janela");
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
MinhaJanela mj = new MinhaJanela();
mj.setVisible(true);
}
}
sábado, 9 de março de 13
15. Tipos de aplicações Java
Aplicações servidoras na Web (Servlets)
package cap1;
public class MinhaServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html");
// then get the writer and write the response data
PrintWriter out = res.getWriter();
out.println("<HEAD><TITLE>Minha Servlet</TITLE></HEAD><BODY>");
out.println("<h1> Vooti! </h1>");
out.println("<P>É o que, hein?");
out.println("</BODY>");
out.close();
}
}
sábado, 9 de março de 13
16. Tipos de aplicações Java
Templates Web (JSP)
<html>
<head>
<title>Minha pagininha marromenos</title>
</head>
<body>
<%
Date hoje = new Date();
out.println(hoje);
%>
<hr>
<jsp:useBean id="namebean" class="packt.NameBean" scope="session" >
<jsp:setProperty name="namebean" property="name" value=" Hello world"" />
</jsp:useBean>
<h1> <jsp:getProperty name="namebean" property="name" /></h1>
</body>
</html>
sábado, 9 de março de 13
17. Tipos de aplicações Java
Java Beans (POJOs - Plain Old Java Objects)
package cap1;
public class Pessoa {
private String nome;
private String email;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
sábado, 9 de março de 13
18. Tipos de aplicações Java
EJBs 3.1 (não caem na prova)
package cap1;
@javax.ejb.Stateless
public class Pessoa {
private String nome;
private String email;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
sábado, 9 de março de 13
19. Tipos de aplicações Java
CDI Beans (também não caem em prova)
package cap1;
@javax.inject.Named
@javax.enterprise.context.SessionScoped
public class PessoasBean {
private Pessoa pessoaAtual;
private java.util.List<Pessoa> listaPessoas;
public PessoasBean() {
this.listaPessoas = new ArrayList<Pessoa>();
}
}
sábado, 9 de março de 13
20. Java no console
public class RelouOOrde {
public static void main(String[] args) {
System.out.println("Ela caiu e relou o ôrde!");
}
}
Compilação: javac RelouOOrde.java
RelouOOrde.class - bytecode ela caiu e
relou o
ôrde
Interpretação:
java RelouOOrde
Ela caiu e relou o ôrde
sábado, 9 de março de 13
21. Java no console
Aplicativos Java podem se valer de uma série de variáveis de ambiente:
Nome Propósito Exemplo
CLASSPATH Caminhos onde encontrar classes .:/novo/caminho
PATH Caminhos onde encontrar comandos do sistema
JAVA_VERSION Versão do Java a ser utilizada 1.7.0_17
JAVA_HOME Caminho para o diretório onde o Java foi instalado /usr/jdk/
OS_NAME Nome do sistema operacional
OS_VERSION Versão do sistema operacional
OS_ARCH Arquitetura do sistema operacional
sábado, 9 de março de 13
22. Estrutura de um .java
class
Declaração que origina o arquivo .class. Seu nome será necessariamente o
nome do arquivo
package
Determinação do diretório físico onde deverá ser salvo o arquivo
Promove a organização de código
import
Resolução de nomes de classes (de outros pacotes)
import não é include
Não há conceito de subpacote
Ordem das declarações: package import class
sábado, 9 de março de 13
23. Estrutura de um .java
Variáveis de instância
Atributos de objeto - alocação dinâmica de memória
Variáveis de classe
Atributos com declaração static - alocação estática de memória
Métodos
Rotinas reutilizáveis que determinam o comportamento de um objeto
Promovem encapsulamento e reuso de código
Construtores
Métodos chamados no ato do new
Devem possuir o mesmo nome da classe, sem declarar tipo de retorno
Úteis para inicializar os objetos
sábado, 9 de março de 13
24. Estrutura de um .java
Mais sobre Métodos
modificadores retorno nome (Tipo1 var1, Tipo2 var2, ...)
throws PossivelException {
Corpo do método
Possíveis variáveis automáticas
} c()
Estruturas que determinam a pilha de chamadas b()
a()
A ordem dos modificadores não interfere
main()
O tipo de retorno deve ser compatível com a cláusula
return interior ao método
A assinatura de um método é diferenciada por:
Seu nome, seu número, tipos e ordem de parâmetros
sábado, 9 de março de 13
25. Estrutura de um .java
O método main
Método principal da aplicação como um todo
Representa toda a execução do “processo” principal do aplicativo Java
Início da pilha de chamadas
public static void main (String elefantes[])
Público
Método de classe
Não retorna nada
Declara que recebe um array de String passado em tempo de
chamada
java PrimeiraClasse parametro1 parametro2
sábado, 9 de março de 13
26. Estrutura de um .java
Retornando o resultado da aplicação como um todo
O main é void, ou seja, não retorna nada ao sistema que o chamou
Em certos tipos de sistema, pode ser interessante informar um código
indicando se o programa encerrou de modo normal ou não
Útil em chamadas no console ou operações em lote, com chamadas a
vários outros programas de uma vez só
System.exit(0);
Encerra todas as operações (threads) do programa
É uma medida extrema que deve ser evitada
Interrompe o programa abruptamente, sem dar chance de realizar
operações de encerramento
O zero é justamente o código de retorno que você pode informar
sábado, 9 de março de 13
27. Estrutura de um .java
Modificadores de visibilidade de membros de classes
Escopo Palavra chave Descrição
Privado private Visível apenas no interior da própria classe que o definiu
Visível ao pacote Visível a todas as classes pertencentes ao mesmo pacote
Hieráquico protected Herdado pelas subclasses mesmo estando em outro pacote
Público public Visível a toda e qualquer classe do sistema
Classe Pacote Subclasses Outras
private
“default”
protected
public
sábado, 9 de março de 13
28. Estrutura de um .java
Comentários e documentação
Comentário podem vir:
// - Em uma única linha
/* Agrupando mais de
uma linha de código */
Comentários sobre declarações de classes, atributos e métodos podem ser
interpretados pelo executável javadoc
Docblocks (blocos javadoc) devem iniciar com /** e ter um * por linha
Podem possuir tags (iniciadas por @):
@author, @version, @param, @see, @return, @throws ou @exception
Como criar javadocs:
Javadoc -d /meus_docs -sourcepath /MeusFontesJava -classpath /
MinhasLibJars
sábado, 9 de março de 13
29. Estrutura de um .java
Convenções de nomenclatura:
Parte-se do princípio de que tudo é minúsculo.
Elemento Convenção Exemplo
Package tudo minúsculo package meu.belopacote;
Classe Iniciais maiúsculas por palavra class MinhaClasse
Interface Mesma regra das classes interface NegocinhoCoisavel
Variáveis Iniciais maiúsculas a partir da segunda palavra String meuNome;
Atributos Mesma regra das variáveis
Métodos Mesma regra das classes public void coisarNegocio()
Constantes Todas letras maiúsculas separadas por underscore MINHA_CONSTANTE
sábado, 9 de março de 13
30. Estrutura de um .java
Annotations
Meta-informações sobre o programa
Não são código, uma vez que seguem outra sintaxe e não executam
nenhum comando
Também não são comentários uma vez que o compilador vai exigir sua
escrita correta
Sintaxe:
@MinhaAnnotation
Ex.:
@Override
public String toString() {
return super.toString();
}
sábado, 9 de março de 13
31. Estrutura de um .java
Como criar uma Annotation
package cap1;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.FIELD})
public @interface CodigoBebo {
boolean bebeuCerveja() default true;
boolean bebeuVinho() default true;
boolean bebeuVodka() default true;
}
sábado, 9 de março de 13
32. Estrutura de um .java
RetentionPolicy
RUNTIME - A annotation será compilada junto com a classe que a
utilizar e será possível usar introspecção (reflection) para
descobrirmos seu valor
CLASS - A annotation será compilada junto com a classe que a
utilizar, mas não será acessível via Reflection API
SOURCE - A annotation é ignorada pelo compilador como se fosse um
mero comentário
Mesmo assim o comportamento dela não é igual ao de um
comentário, o compilador sempre exigirá que ela seja escrita
corretamente
sábado, 9 de março de 13
33. Estrutura de um .java
Target
Restringe os locais onde poderemos utilizar a annotation criada:
ElementType:
TYPE - Sobre outra annotation, classes, enums ou interfaces
FIELD - Sobre atributos (de objeto ou de classe)
METHOD - Declarações de métodos
PARAMETER - Declarações de parâmetros
CONSTRUCTOR - Apenas sobre construtores
LOCAL_VARIABLES - Sobre variáveis locais a métodos
ANNOTATION_TYPE - Apenas sobre declarações de annotations
PACKAGE - Sobre pacotes
A sintaxe para mais de um valor por annotation é agrupar com chaves
e separar por vírgulas
sábado, 9 de março de 13
34. Estrutura de um .java
Annotation Attributes
Annotations podem ou não declarar atributos
Estranhamente sua sintaxe parece com a de métodos, uma vez que a
declaração da própria annotation se confunde com a de uma interface
Podem declarar valores default
Comumente, declaram valores de tipos Enum
Podem declarar arrays de determinado tipo, mesmo que isso ocorra,
tanto o valor default quanto o valor utilizado pela classe não é
obrigado a ser um array daquele tipo
boolean[] bebeuCerveja() default true;
Ou pode:
boolean[] bebeuCerveja() default {true, true, false, true};
sábado, 9 de março de 13
35. Estrutura de um .java
Annotations em classes
@Override
@CodigoBebo(bebeuCerveja=true, bebeuVodka=false)
public String toString() {
return super.toString();
}
Annotations são normalmente usadas por uma aplicação de terceiros, no
entanto o próprio compilador reconhece algumas:
@Deprecated - Informa que o código está depreciado, não deve ser usado
@Override - O compilador vai exigir que o método que o declare
realmente sobrescreva algum em sua hierarquia
@SuppressWarnings - Utilizado para suprimir warnings de compilação
sábado, 9 de março de 13
36. Estrutura do SDK
Diretórios do Java SE SDK - Standard Development Kit:
bin: Diretório que traz as ferramentas que precisamos (javac, javadoc,
java, jar ...)
db: Diretório utilizado pelo Java DB, banco de dados open source
portado pela Sun do projeto Apache Derby
demo: Séries de arquivos de demonstração
include: Arquivos de cabeçalho úteis em integrações com aplicações C
jre: Java Runtime Environment - Ambiente de execução
sample: Exemplos de código de várias features do Java
sábado, 9 de março de 13
37. Estrutura do SDK
Pacotes básicos da API:
java.lang: Traz os tipos mais elementares da linguagem. Único pacote
que não requer sua declaração totalmente qualificada (não precisa de
import)
java.io: Inclui funcionalidades relativas a arquivos e diretórios
java.net: Traz recursos de comunicação em rede (Sockets, URLs, etc)
java.util: Carrega classes e interfaces utilitárias quase tão presentes
quanto as do pacote java.lang.
java.awt: Carrega componentes de interface gráfica
sábado, 9 de março de 13
38. Objetivos cobertos
Define the structure of a Java class (in the Exploring the structure of a class
section)
Create an executable Java application with a main method (in the Exploring
the structure of a Java console program section)
Introdução geral a diversos outros objetivos
sábado, 9 de março de 13