SlideShare ist ein Scribd-Unternehmen logo
1 von 262
Downloaden Sie, um offline zu lesen
www.labes.ufpa.br
Programação Orientada a Objetos na
Linguagem Java
Prof. Adailton Magalhães Lima
adailton@ufpa.br
www.labes.ufpa.br
Parte I
Introdução
www.labes.ufpa.br
3
JAVA TIMELINE
www.labes.ufpa.br
4
•  1991 - Criado projeto ‘Oak’, linguagem precedente do
Java criada para o mercado de sistemas embarcados
•  1994 - Depois de frustradas tentativas de embutir ‘Oak’
em Set-top box de TV, a linguagem é revisada e têm
seu compilador mudado de C para ‘Oak’
•  1995 - ‘Oak’ é rebatizada para Java e tem o
lançamento oficial
•  1998 - Lançado o Java 2: versão 1.2 batizada de Java
2
•  1999 - Lançada versão beta de J2EE
•  2000 - Lançado o J2SE 1.3
Cronologia
www.labes.ufpa.br
5
•  2001 - Lançamento do projeto Eclipse e do J2EE 1.3
•  2002 - Lançado Hibernate 1.0
•  2004 - Lançamento do Java 1.5 (Tiger)
•  2006 – Lançado o Java 6
•  2007 – Lançado JDK completo como Open Source
•  2008 – Java 7
•  2014 – Java 8
Cronologia
www.labes.ufpa.br
6
•  A motivação inicial para Java
–  “A necessidade de uma plataforma independente de
linguagem que possa ser embutida em vários produtos
eletrônicos de consumo como torradeiras e
refrigeradores”
–  Um dos primeiros projetos utilizando Java foi um controle
remoto pessoal para hand-held chamado Star 7.
–  Nesta mesma época a World Wide Web e a Internet vinham
ganhando popularidade.
–  James Gosling e companhia “sacaram” que Java poderia
ser também utilizada para programação na Internet.
–  Lançaram aí a tecnologia dos Applets Java.
Motivação
www.labes.ufpa.br
7
•  JavaScript é uma versão simplificada de Java? Não!!
–  JavaScript é uma linguagem de script que pode
ser inserida dentro de páginas web
–  Foi inventada pela Netscape e originalmente
chamada de LiveScript, que tem uma sintaxe
parecida (mas que no fundo não tem relação
direta com Java)
–  Em particular, um programa JavaScript pode
modificar um documento no qual está exibido (a
página web).
Java VS JavaScript
www.labes.ufpa.br
8
•  Com a API Java Advanced Imaging são capturadas as
imagens panorâmicas para fotografar a superfície marciana
•  Em várias partes do sistema de controle existem
aplicações Java que ajudam a comunicação e controle do
robô da NASA em Marte
•  Em várias partes existem dispositivos embarcados
utilizando Java
•  Em http://mars.telascience.org pode-se baixar o software
Maestro (versão free de parte do código Java em Marte)
Java em Marte
www.labes.ufpa.br
9
PLATAFORMA JAVA
• O	
  que	
  é	
  Java?	
  
1	
  
• Distribuições	
  
2	
  
• Ambiente	
  de	
  Desenvolvimento	
  
3	
  
• Funcionalidades	
  Java	
  
4	
  
• Fases	
  de	
  um	
  programa	
  Java	
  
5	
  
www.labes.ufpa.br
10
•  A tecnologia Java pode ser
vista como :
– Uma linguagem de programação
– Um ambiente de desenvolvimento
– Um ambiente para aplicações
– Um ambiente de implantação
O que é Java?
www.labes.ufpa.br
11
•  Java é uma linguagem de programação
Orientada a Objetos com uma sintaxe
semelhante a C/C++ e que gera programas
multiplataformas.
•  Java pode criar qualquer tipo de aplicação
que se pode criar com uma linguagem de
programação convencional.
O que é Java?
www.labes.ufpa.br
12
•  Java permite o desenvolvimento de aplicações para
uma série de plataformas.
•  É possível ter software Java desde de dispositivos
como telefones celulares, até computadores de
grande porte, como os mainframes.
•  Devido a essa característica, a linguagem Java conta
com três conhecidas distribuições para ambientes de
desenvolvimento:
–  JSE (antigamente J2SE)
–  JEE (antigamente J2EE)
–  JME (antigamente J2ME)
Distribuições
www.labes.ufpa.br
13
JSE (Java Standard Edition)
•  É o ambiente de desenvolvimento com uso voltado a
micros e servidores
•  Essa é a plataforma principal, já que, de uma forma
ou de outra, o JEE e o JME têm no JSE sua base.
•  Assim, os outros ambientes de desenvolvimento são
versões aprimoradas do JSE para as aplicações a
que se propõem.
•  Por ser a plataforma mais abrangente do Java, o
JSE é a mais indicada para quem quer aprender a
linguagem.
Distribuições
www.labes.ufpa.br
14
JEE (Java Enterprise Edition)
•  Contém bibliotecas especialmente desenvolvidas para o
acesso a servidores, a sistemas de e-mail, a banco de
dados, etc.
•  Contém uma série de especificações, cada uma com
funcionalidades distintas. Entre elas, tem-se:
–  JDBC (Java Database Connectivity), utilizado no acesso a banco
de dados;
–  Servlets, uma API para o desenvolvimento de aplicações Web.
Este recurso "estende" o funcionamento dos servidores Web,
permitindo a geração de conteúdo dinâmico nos sites.
–  JSP (Java Server Pages), permite script para criação de páginas
dinâmicas como uma abstração sobre a tecnologia de Servlets
Distribuições
www.labes.ufpa.br
15
JME (Java Micro Edition)
•  É o ambiente de desenvolvimento para dispositivos
móveis ou portáteis, como telefones celulares e palmtops.
•  Como a linguagem Java já era conhecida e a adaptação
ao JME não é complicada, logo surgiram diversos tipos de
aplicativos para tais dispositivos, como jogos e agendas
eletrônicas.
•  As empresas saíram ganhando com isso porque, desde
que seus dispositivos tenham uma JVM (Máquina Virtual
Java), é possível, com poucas modificações,
implementar os aplicativos em qualquer aparelho, sendo
o único limite a capacidade do hardware.
Distribuições
www.labes.ufpa.br
16
•  Em seu ambiente de desenvolvimento, Java provê
algumas ferramentas:
– Um compilador (javac)
– Um interpretador (java)
– Um gerador de documentação (javadoc)
– Um aplicativo para empacotamento de classes
(jar)
– Um registro e compilador para aplicações
distribuídas (rmiregistry e rmic)
– Entre outras funcionalidades
Ambiente de Desenvolvimento
www.labes.ufpa.br
17
•  Tecnologias de aplicação Java são tipicamente
programas de propósito geral que executam em
qualquer máquina onde haja uma ambiente de
execução Java (JRE- Java Runtime Environment)
•  Existem dois ambientes principais de instalação:
1.  A JRE contém todos os arquivos de classes
para os pacotes Java, incluindo classes básicas
da linguagem, componentes de GUI, entre outras.
2.  O Web Browser, onde muitos provêem um
interpretador Java e um ambiente de execução.
Ambiente de Desenvolvimento
www.labes.ufpa.br
18
•  Algumas funcionalidades do Java:
– Máquina Virtual
– Coletor de Lixo (Garbage Collection)
– Segurança de Código
Funcionalidades Java
www.labes.ufpa.br
19
•  Máquina Virtual ou Java Virtual Machine (JVM)
–  É uma máquina abstrata que é implementada pela
emulação de software em tempo real
–  Provê a especificação da plataforma de hardware para
compilação do código Java
•  A JVM interpreta Bytecode
–  Bytecode é uma linguagem de máquina especial que
pode ser entendida pela JVM
–  Esta linguagem é independente de qualquer hardware
particular de computador, de tal forma que qualquer
computador com um interpretador Java possa
executar o programa não importando a máquina em que
o código foi compilado.
Funcionalidades Java
www.labes.ufpa.br
20
•  Coletor de Lixo ou Garbage Collector (GC):
–  A linha de execução do GC é responsável pela liberação
de qualquer memória não mais utilizada por programas
Java.
–  Isto acontece automaticamente durante o tempo de
execução do programa Java
» VANTAGEM: O programador fica livre da
tarefa de alocar e desalocar memória
manualmente
Funcionalidades Java
www.labes.ufpa.br
21
•  Segurança de Código:
•  Segurança de código é provida na implementação da
JRE.
•  Desta forma, para executar o código, a JRE utiliza o
ClassLoader para carregar o código e verifica o
código(através do verificador de bytecode)
•  O ClassLoader carrega todas as classes, onde determina
o layout de memória em tempo de execução, para
protegê-la de acesso desautorizado.
•  O Verificador de Bytecode procura no formato dos
fragmentos do código acessos ilegais que possam violar
direitos de acesso aos objetos
Funcionalidades Java
www.labes.ufpa.br
22
Editor
disco
Programa é criado em um
editor e armazenado no
disco
Compilador
disco
Compilador gera os
bytecodes e os armazena
no disco
Carregador de
classes
disco
O carregador de classes
– Class Loader – coloca
os bytecodes na
memória
_______
_______
_______
_______
__
memória
Verificador de
bytecodes
O verificador de bytecodes
– Bytecodes Verifier –
confirma se todos os
bytecodes estão corretos e
não violam as restrições
de segurança da
linguagem Java
________
________
________
______
memória
Interpretador
O interpretador lê os
bytecodes e executa o
programa
________
________
________
______
memória
FasesdeumprogramaJava
Tempo
+
www.labes.ufpa.br
23
INSTALAÇÃO E
CONFIGURAÇÃO
www.labes.ufpa.br
24
O procedimento de instalação do Java consiste em
3 passos principais:
Instalação
Instalação	
  do	
  JDK	
   Configuração	
  do	
  PATH	
  
Teste	
  usando	
  linha	
  de	
  
comando	
  
www.labes.ufpa.br
25
•  Instalação do JDK
–  Execute o instalador e siga os passos até o fim
Instalação
www.labes.ufpa.br
26
Instalação
www.labes.ufpa.br
27
•  Configuração do PATH
•  Após a instalação do JDK, é preciso realizar as
seguintes etapas adicionais:
– Adicionar o diretório bin do jdk no PATH de
execução do SO (Sistema Operacional)
– Tais etapas variam de acordo com o SO
•  A seguir serão apresentados os passos nos
sistemas Windows® e Linux
Instalação
www.labes.ufpa.br
28
•  Configuração do PATH (LINUX)
•  Em Linux, o procedimento para edição do PATH de
execução depende do shell que está usando.
•  Se está utilizando o Bourne Again shell (que é o default do
Linux), adicione a seguinte linha ao final do arquivo
~/.bashrc ou ~/.bash_profile:
–  export PATH=/usr/local/jdk/bin:$PATH
–  onde ”/usr/local/jdk” pode variar de acordo com a
opção de instalação
–  DICA: Se está no MacOSX, edite o arquivo
~/.profile com o mesmo comando Linux
Instalação
www.labes.ufpa.br
29
•  Configuração do PATH (Windows)
•  No Windows, é preciso fazer login como administrador.
•  Basta: 1 - iniciar o “Painel de Controle”; 2 - selecionar o
ícone “Sistema”; 3 – selecionar a aba “Avançado”
Instalação
www.labes.ufpa.br
30
•  Configuração do PATH (Windows)(cont.)
4 - clique no botão “Variáveis de Ambiente”; 5 - navegue até
encontrar a propriedade PATH, onde deve-se editar e
adicionar o caminho completo do diretório; 6- salvar as
configurações.
Instalação
Editar
Para editar o path, basta colocar
um “;” ao final do conteúdo e
adicionar o caminho do diretório
bin do jdk
Exemplo: “; C:Arquivos de
programasJava
jdk1.6.0_03bin”
Obs: Sem as aspas
www.labes.ufpa.br
31
•  Teste usando linha de comando
•  Independente do SO, em um shell aberto digite:
–  java -version
•  Pressione ENTER. Você deve visualizar algo
parecido com:
Instalação
www.labes.ufpa.br
32
PROGRAMA JAVA “HELLO
WORLD”
www.labes.ufpa.br
33
Programa “Hello World”
public class Hello
{
/**
* Meu primeiro programa Java
*/
public static void main(String[]args){
//escreve a string “Hello World” na tela
System.out.println(“Hello
world”);
}
}
www.labes.ufpa.br
34
●  Indica o nome da classe que é Hello
●  Em Java, todo código deve ser colocado dentro de
uma declaração de classe
●  A classe utiliza o identificador de acesso public, que
indica que esta classe é acessível a outras classes de
outros pacotes.
Definição de Classe
public class Hello
{
/**
* Meu primeiro programa Java
*/
www.labes.ufpa.br
35
●  As linhas destacadas indicam comentários Java
●  Um comentário:
-  U)lizado	
  para	
  documentar	
  uma	
  parte	
  de	
  código	
  
-  É	
  uma	
  boa	
  prá)ca	
  de	
  programação	
  adicionar	
  comentários	
  ao	
  
código.	
  
Comentários
public class Hello
{
/**
* Meu primeiro programa Java
*/
…
//escreve a string “Hello world” na tela
www.labes.ufpa.br
36
●  Indica o nome do método Hello que é o principal de um
programa Java.
●  O método main é o ponto de partida de um programa Java
●  Todos os programas, exceto pelos Applets, iniciam a partir
de um método main.
●  É necessário que a assinatura esteja correta (com um
array de string passado como parâmetro).
Método main
public class Hello
{
/**
* Meu primeiro programa Java
*/
public static void main( String[] args ){
www.labes.ufpa.br
37
● O comando System.out.println() escreve o texto
passado como parâmetro entre aspas.
Comando de escrita
public class Hello
{
/**
* My first Java program
*/
public static void main( String[] args ){
//prints the string “Hello world” on screen
System.out.println(“Hello world”);
www.labes.ufpa.br
38
INSTALAÇÃO DE UMA IDE
www.labes.ufpa.br
39
Definição de IDE
IDE vem do inglês Integrated Development
Environment ou Ambiente Integrado de
Desenvolvimento
É um programa de computador que reúne
características e ferramentas de apoio ao
desenvolvimento de software com o objetivo de
agilizar este processo.
Geralmente facilitam a técnica RAD (de Rapid
Application Development, ou "Desenvolvimento Rápido
de Aplicativos"), que visa a maior produtividade dos
desenvolvedores.
www.labes.ufpa.br
40
•  As características e ferramentas mais comuns
encontradas nos IDEs são:
–  Editor
–  Compilador
–  Linker
–  Depurador (debugger)
–  Modelagem (modelling)
–  Geração de código
–  Distribuição (deploy)
–  Testes Automatizados (automated tests)
–  Refatoração (refactoring)
Definição de IDE
www.labes.ufpa.br
41
•  Dentre as várias IDES existentes,
pode-se destacar as seguintes IDEs que dão apoio ao
desenvolvimento em Java:
•  IntelliJ IDEA - paga
•  Eclipse - livre
•  NetBeans - livre
•  JBuilder - paga
•  Sun Java Studio Enterprise
•  Jedit
•  BlueJ
•  OptimalJ
IDEs Java Existentes
www.labes.ufpa.br
42
•  De forma resumida:
•  Em geral comparar IDEs é algo polêmico, pois
depende muito da necessidade atual de cada
desenvolvedor
•  Dentre as IDEs pagas, IntelliJ e JBuilder se
destacam por oferecer diversos componentes
“pré-fabricados” para apoio ao desenvolvimento
RAD.
•  Dentre as IDEs livres, Eclipse e NetBeans são
líderes de mercado
IDEs Java Existentes
www.labes.ufpa.br
43
•  A seguir neste curso serão apresentados de
forma resumida o processo de instalação do
NetBeans e do Eclipse.
•  Neste curso, a utilização de uma IDE é
necessária para simplificar o processo de
c o m p i l a ç ã o e t e s t e d o s c ó d i g o s
desenvolvidos
IDEs Java Existentes
www.labes.ufpa.br
44
Instalando NetBeans
1- execute o instalador
2- defina componentes
4- confirme instalação
3- confirmar local
de instalação
5- feche instalador
www.labes.ufpa.br
45
•  Após instalar, basta executar o aplicativo e terá
acesso à interface do usuário:
Instalando NetBeans
www.labes.ufpa.br
46
Instalando Eclipse
1- inicie instalação
2- defina local de instalação
3- Aguarde e finalize
www.labes.ufpa.br
47
Instalando Eclipse
Após instalar, basta executar o aplicativo e terá acesso à interface
do usuário:
www.labes.ufpa.br
Parte II
Programação Básica
www.labes.ufpa.br
49
Partes básicas de um programa
Java • Sentenças	
  e	
  Blocos	
  1	
  
• IdenHficadores	
  2	
  
• Palavras	
  Reservadas	
  3	
  
• Variáveis	
  4	
  
• Literais	
  5	
  
• Tipos	
  PrimiHvos	
  6	
  
www.labes.ufpa.br
50
•  Sentença
– Uma ou mais linhas de código terminado por
um ponto e vírgula
– Exemplo:
System.out.println(“Hello world”);
Sentenças e Blocos
www.labes.ufpa.br
51
•  Bloco
–  É uma ou mais sentenças circundada por uma abertura e
fechamento de chaves que agrupam as sentenças como
uma unidade.
–  Blocos de sentenças podem ser encadeados
infinitamente.
–  É permitida qualquer quantidade de espaços em branco.
–  Exemplo:
public static void main( String[] args ){
System.out.println("Hello");
System.out.println("world”);
}
Sentenças e Blocos
www.labes.ufpa.br
52
1. Na criação de blocos, é permitido colocar a
chave junto com a sentença. Por exemplo:
public static void main( String[]
args ){
ou é permitida a chave na próxima linha,
como,
public static void main( String[]
args )‫‏‬
{
2. É recomendada a identacão das sentenças
após o início de um bloco. Por exemplo:
public static void main( String[]
Sentenças e Blocos
www.labes.ufpa.br
53
•  Identificadores
–  São tokens que representam nomes de variáveis,
métodos, classes, etc.
–  Exemplos de identificadores são: Hello, main, System,
out.
•  Da mesma forma que C e C++, identificadores Java são
sensíveis ao caso.
–  Isto significa que o identificador Hello não é o mesmo
que hello.
Identificadores
www.labes.ufpa.br
54
•  Identificadores podem iniciar com uma letra,
underscore “_”, ou um sinal de “$”.
•  Letras podem ser minúsculas ou MAIUSCULAS
•  Caracteres subseqüentes podem ser números de 0 a 9.
•  Identificadores não podem utilizar palavras chave do
Java, como class, public, void, etc.
Identificadores
www.labes.ufpa.br
55
1. Para nomes de classes, recomenda-se por a primeira
letra da palavra como maiúsculo:
ExemploDeNomeParaClasse
2. Para nomes de métodos e variáveis, a primeira letra
deve ser minúscula:
esteNomeDeMetodoExemplo
Identificadores
www.labes.ufpa.br
56
3. No caso de identificadores com várias
palavras, use maiúsculo para iniciar cada
palavra exceto a primeira:
charArray, fileNumber, ClassName.
4. Evite o uso de underscores no início de
identificador como em _read ou _write.
Identificadores
www.labes.ufpa.br
57
•  Palavras reservadas são identificadores pré-
definidos reservados pelo Java para um propósito
específico.
•  Não é permitido utilizar palavras chave como
nomes de variáveis, classes, métodos, etc.
•  A seguir é mostrada uma tabelas com as palavras
reservadas do Java
Palavras Reservadas
www.labes.ufpa.br
58
Palavras Reservadas
*- const e goto são palavras reservadas, mas não são
utilizadas atualmente pelo Java
www.labes.ufpa.br
59
•  Uma variável representa um item de dado que é
utilizado para armazenar estado de objetos.
•  Uma variável contém:
–  Tipo de dado
•  O tipo de dado indica o tipo de valores que a
variável pode possuir.
–  Nome
•  O nome da variável segue as regras para
identificadores.
Variáveis
www.labes.ufpa.br
60
•  A declaração de variáveis segue a seguinte
estrutura:
<tipo de dado> <nome> [=valor inicial];
•  Nota: Valores entre <> são obrigatórios,
enquanto valores entre [] são opcionais.
Variáveis
www.labes.ufpa.br
61
Variáveis
package br.eln.java;
public class ExemploDeVariaveis {
 
public static void main( String[] args ){
//declara um tipo de dado com o nome da variável
// result é do tipo de dado boolean
boolean result;
 
//declara um tipo de dado com o nome da variável
// option é do tipo de dado char
char option;
option = 'C'; //atribui 'C' em option
 
//declara um tipo de dado com o nome da variável
/*grade é do tipo de dado double que é inicializado para 0.0
*/
double grade = 0.0;
}
}
www.labes.ufpa.br
62
1. É sempre bom inicializar variáveis na sua declaração.
2. Declare uma variável por linha de código. Por
exemplos, a declaração de variáveis a seguir
double exam=0;
double quiz=10;
double grade = 0;
é preferível ao invés da seguinte,
double exam=0, quiz=10, grade=0;
Variáveis
www.labes.ufpa.br
63
Variáveis
Tipo de dado Valor Default
byte/short/int 0
long 0L
float 0.0F
double 0.0
boolean false
char ‘u0000’
Object null
Tabela que mostra os valores default de tipos de variáveis Java:
www.labes.ufpa.br
64
•  Literais são tokens que não são modificados, ou
seja, são constantes.
•  Diferentes tipos de literais em Java são:
–  Literais Inteiros
–  Literais de Ponto Flutuante
–  Literais Booleanos
–  Literais Caracteres
–  Literais String
Literais
www.labes.ufpa.br
65
Literais Inteiros
•  Podem ser definidos em diferentes formatos:
–  Decimal (base 10)
•  Sem notação especial
•  exemplo: 12
–  Hexadecimal (base 16)
•  Precedido por 0x ou 0X (zero)
•  Exemplo:
–  Octal (base 8)
•  Precedido por 0 (zero)
•  Exemplo:
Literais
int octal = 014;
int octal2= 08;
int hexadecimal =
0XC;
int hexadecimal2 =
0xD;
valor excede escala octal que vai até “07”
www.labes.ufpa.br
66
Literais de Ponto Flutuante
•  Representam decimais com partes fracionárias:
–  Exemplo: 3.1416
•  Podem ser expressados segundo duas notações:
–  Padrão
–  Científica‫‏‬
Literais
double pFlutuante1 = 583.45;
double pFlutuante2 =
58345e-2; // 583.45
double pFlutuante3 =
58345E-2; // 583.45
long pFlutuante4 = 583.45;
Java não permite literal de ponto flutuante para long, que não
possui ponto flutuantes
O uso de “e” e “E” na notação não muda o resultad
double ou
float
www.labes.ufpa.br
67
Literais Booleanos
•  Podem possuir somente dois valores:
–  true ou false.
Literais
boolean bool1 =
true;
boolean bool2 =
false;
boolean bool3 = 1;
Diferente de outras linguagens, como C/C++, variáveis
booleanas podem receber apenas valores booleanos(true/
false), não sendo permitida a utilização de atribuição e testes
utilizando números inteiros
www.labes.ufpa.br
68
Literais Caracteres
•  No Java, literais caracteres representam um único código
Unico de caracteres
Caracter Unicode:
–  Um caracter com conjunto de 16-bits que substitui o antigo
conjunto ASCII de 8-bits
–  O Unicode permite a inclusão de símbolos e caracteres
especiais de outras linguagens além do inglês.
Literais
www.labes.ufpa.br
69
Literais Caracteres
•  Por exemplo:
–  A letra a é representada como ‘a’.
•  Caracteres Especiais
Literais
Função Caracter
Line break ‘n’
Carriage return ‘r’
Backspace ‘b’
www.labes.ufpa.br
70
Literais String
•  Literais String representam múltipos caracteres e
são cercados por aspas duplas (“ ”)
•  Um exemplo de literal string podem ser “Hello
World”.
Literais
www.labes.ufpa.br
71
•  A linguagem Java define 8 tipos de dados primitivos:
–  boolean
–  char
–  byte
–  short
–  int
–  long ‫‏‬
–  double
–  float
Tipos Primitivos
www.labes.ufpa.br
72
Booleano
•  Um tipo de dado booleano representa dois estados:
verdadeiro e falso (true e false).
•  Um exemplo é :
boolean result = true;
•  O exemplo acima declara uma variável chamada
result como boolean e atribui o valor true.
Tipos Primitivos
www.labes.ufpa.br
73
Caracter
•  Um tipo de dado caracter (char) representa um único
código de caracter Unicode.
•  Seus literais devem estar entre aspas simples (’ ’).
•  Por exemplo,
‘a’ //Uma letra a
‘t’ //Tab
•  Para representar caracteres especial como ' (aspas
simples) ou " (aspas duplas), utilize o caracter  (barra
invertida). Por exemplo:
''' //Para aspas simples
'"' //Para aspas duplas
Tipos Primitivos
www.labes.ufpa.br
74
Caracter – Caso String
•  Apesar da String não ser um tipo de dado primitivo (é uma
Classe), alguns comentários podem ser feitos:
–  Uma String representa um tipo de dado que contém
múltiplos caracteres. No Java, String é representado por
uma classe, não é um tipo de dado primitivo.
–  Possui seus literais dentro de aspas duplas (“ ”).
–  Por exemplo,
String message=“Hello world!”;
Tipos Primitivos
www.labes.ufpa.br
75
•  Inteiros – byte, short, int e long
•  Tipos de dados inteiros em Java são de 3 formas:
2 //Valor Decimal 2
077 // 0 (zero) indica um valor octal
0xBACC //O 0x (zero e x) indica um valor hexadecimal
Tipos inteiros possuem int como tipo de dado
default.
•  É possível atribuir um valor long adicionando a
letra l ou L.
•  Por exemplo:
10L
Tipos Primitivos
Na definição de um valor long, é preferível utilizar
L (maiúsculo) ao invés de l (minúsculo), para não
confundir com o dígito 1
www.labes.ufpa.br
76
•  Tipos inteiros tem as seguintes
escalas de valores:
Tipos Primitivos
Tipo Tamanho Range
byte 8 bits - até -1
short 16 bits - até -1
int 32 bits - até -1
long 64 bits - até -1
7
2 7
2
15
2
15
2
31
2
31
2
63
2
63
2
www.labes.ufpa.br
77
Ponto Flutuante: float e double
•  Tipos de ponto flutuante possuem double como tipo
de dado default.
•  Literais de ponto flutuante incluem decimais:
E ou e //(adiciona valor exponencial)
F ou f //(atribui valor para float)
D ou d //(atribuir valor para double)
•  Exemplos são,
3.14 //A simples valor de ponto flutuante (double)
6.02E23 //um grande valor de ponto flutuante
2.718F //um valor float simples
123.4E+306D//um grande valor double com o D
redundante
Tipos Primitivos
www.labes.ufpa.br
78
Ponto Flutuante: float e double
•  Valores de ponto flutuante possuem as
seguintes escalas de valores:
Tipos Primitivos
Tipo Tamanho Range
float 32 bits - até -1
double 64 bits - até -1
31
2
63
2
31
2
63
2
www.labes.ufpa.br
79
CLASSES, PACOTES,
ATRIBUTOS E MÉTODOS
• Definição	
  de	
  Classes	
  1	
  
• Atributos	
  2	
  
• Métodos	
  3	
  
• Construtores	
  4	
  
• Referência	
  “this”	
  5	
  
• Modificadores	
  de	
  Acesso	
  6	
  
• Pacotes	
  7	
  
www.labes.ufpa.br
80
•  Para definir uma classe, escreve-se:
<modificador> class <nome> {
<declaracaoDeAtributo>*
<declaracaoConstrutor>*
<declaracaoMetodo>*
}
–  Onde:
•  <modificador> é um modificador de acesso,
onde pode ser combinado com outros tipos
de modificadores.
Definição de Classes
www.labes.ufpa.br
81
public class RegistroCompra {
//mais códigos serão adicionados depois
}
–  Onde:
•  public – significa que a classe é acessível
por outras classes fora do mesmo pacote
•  class - usado para definir uma classe em
Java
•  RegistroCompra – um identificador único que
descreve a classe
Definição de Classes
www.labes.ufpa.br
82
• Pense em um nome apropriado para a
classe. Nunca defina nomes como XYZ ou
outro nome aleatório.
• Recomenda-se que nomes de classes
iniciem com uma letra maiúscula
• O nome do arquivo da classe deve ter o
mesmo nome da classe Java.
• Defina um arquivo para cada classe Java
definida
Definição de Classes
www.labes.ufpa.br
83
•  Atributos em classes Java podem ser de
representados por variáveis de 2 tipos:
– Tipos de dados primitivos (long, char, int,...)
– Referencias para Objetos (String, Pessoa,
Carro, etc.)
•  Os atributos de uma classe podem ser
especificados como:
– Variáveis de instância
– Variáveis de classe
Atributos
www.labes.ufpa.br
84
•  Variáveis de Instância
– Pertencem a uma instância de objeto
– Valor de um atributo para um objeto é
diferente das instâncias para outros objetos
•  Variáveis de classes (também chamadas de
variáveis membros estáticas)‫‏‬
– Variáveis que pertencem a toda a classe.
– Isto significa que eles possuem o mesmo
valor para todas as instâncias da mesma
classe
Atributos
www.labes.ufpa.br
85
Variáveis de Instância
public class RegistroCompra {
// variáveis de instância
private String nomeProduto;
private long codigo;
private Date validade;
private double precoCusto;
private double precoVenda;
}
–  Onde:
•  private agora significa que as variáveis são
acessadas somente dentro da classe. Outros
objetos não podem acessar as variáveis
diretamente.
Atributos
www.labes.ufpa.br
86
Variáveis de classes (estáticas)
public class RegistroCompra {
// variáveis de instância
private String nomeProduto;
private long codigo;
private Date validade;
private double precoCusto;
private double precoVenda;
private static int quantidaComprasFechadas;
}
–  É utilizado o modificador static para indicar
que a variável é estática.
Atributos
www.labes.ufpa.br
87
• Declare todas as variáveis de instância logo no
início da definição da classe
• Declare uma variável em cada linha
• Use tipos de dados adequados para cada variável
• Declare variáveis de instância como privadas e
defina métodos de acesso para cada.
•  Conceito de encapsulamento
Atributos
www.labes.ufpa.br
88
•  Para declarar métodos em Java:
<modificador> <tipoDeRetorno> <nome>(<parametros>*) {
<sentencas>*
}
–  onde,
•  <modificador> pode assumir diferentes modificadores
•  <tipoDeRetorno> pode ser de qualquer tipo (incluindo
void)‫‏‬
•  <nome> pode ser qualquer identificador válido
•  <parametro> ::= <tipo_parametro> <nome_parametro>[,]
Métodos
www.labes.ufpa.br
89
public static int getQuantidaComprasFechadas() {
return quantidaComprasFechadas;
}
 
public static void setQuantidaComprasFechadas(int
quantidaComprasFechadas) {
RegistroCompra.quantidaComprasFechadas =
quantidaComprasFechadas;
}
 
public long getCodigo() {
return codigo;
}
public void setCodigo(long codigo) {
Métodos
www.labes.ufpa.br
90
• Recomenda-se que nomes de métodos
devem iniciar com minúsculo.
• Recomenda-se que nomes de métodos
representem ações
Métodos
www.labes.ufpa.br
91
•  Sobrescrevendo métodos
–  Permite um método com mesmo nome mas com parâmetros
diferentes, para ter implementação e retorno diferentes
–  Pode ser utilizado quando diferentes operações possuem
diferentes implementações.
•  Sempre lembre que sobrescrever métodos tem as
seguintes propriedades:
–  O mesmo nome de método
–  Diferentes para ou diferente número de parâmetros
–  Tipo de retorno pode ser diferente ou o mesmo
Métodos
www.labes.ufpa.br
92
•  Construtores são chamados na instanciação de
um objeto.
•  Os construtores possuem as seguintes
propriedades:
–  Possuem o mesmo nome da classe
–  Aceita modificador de acesso
–  Não possuem tipo de retorno
–  Não se pode acessar o construtor diretamente,
somente através do operador new.
Construtores
www.labes.ufpa.br
93
public class RegistroCompra {
.....
public RegistroCompra() {
//adicionar codigo de inicializacao
}
……….
Construtores
www.labes.ufpa.br
94
•  A referência this
–  refere-se à instância do objeto corrente
–  utilizado para acessar variáveis de instância.
–  Só é permitido acesso para variáveis de
instância e NÃO para variáveis de classe
(estáticas)
Referência “this”
www.labes.ufpa.br
95
public class RegistroCompra {
.....
private long codigo;
public void setCodigo(long
codigo) {
this.codigo = codigo;
}
……….
Referência “this”
www.labes.ufpa.br
96
•  Existem quatro diferentes tipos de
modificadores de acesso em Java:
–  public (Menos restritivo)‫‏‬
–  protected
–  private (Mais restritivo)‫‏‬
–  default
•  Os três primeiros modificadores de acesso são
explicitamente escritos em código para indicar o
tipo de acesso, o quarto que é default não
necessita ser utilizado obrigatoriamente.
Modificadores de Acesso
www.labes.ufpa.br
97
Modificadores de Acesso
private default/package protected public
Mesma Classe Sim Sim Sim Sim
Mesmo Pacote Não Sim Sim Sim
Pacote diferente
(sub-classe)
Não Não Sim Sim
Pacote diferente (não
é sub-classe)
Não Não Não Sim
www.labes.ufpa.br
98
•  Um pacote é um agrupamento de tipos
relacionados provendo gerência de proteção
de acesso e espaço de nomes
– Note que tipos refere-se a classes,
interfaces, enumerações e tipos de
anotações (os dois últimos são novos
recursos a partir de Java 5).
Pacotes
www.labes.ufpa.br
99
Benefícios:
•  Facilita a identificação de classes e interfaces
relacionados.
•  Os nomes de pacotes devem ser diferentes de
existentes, para evitar conflito de espaços de
nomes.
•  É possível permitir dentro do pacote acesso
irrestrito de fora assim como restringir acesso
de outros pacotes externos.
Pacotes
www.labes.ufpa.br
100
•  Para definir uma classe em um pacote, basta
escrever o seguinte na primeira linha do código:
package br.java.meupacote;
public class MinhaClasse{
…….
}
Pacotes
www.labes.ufpa.br
101
Importando Pacotes:
•  Para estar habilitado a utilizar classes fora do mesmo
pacote que a classe atual pertence é necessário
importar explicitamente o pacote das classes.
•  Por default, todos os programas Java importam o
pacote java.lang.*, o que permite a utilização de
String e Integer dentro do programa sem ter importado
qualquer pacote.
•  A sintaxe de import é:
import br.java.meuPacote.*;
import br.java.novoPacote.UmaClasse;
Pacotes
www.labes.ufpa.br
102
• O pacote java.lang.* é composto por aquelas
classes que encapsulam os tipos primitivos
da linguagem (Wrapper Classes)
Pacotes
Boolean - encapsula um primitivo boolean
Character - encapsula um primitivo char
Double - encapsula um primitivo double
Float - encapsula um primitivo float
Integer - encapsula um primitivo int
Long - encapsula um primitivo long
String - encapsula uma cadeia de caracteres
www.labes.ufpa.br
103
HERANÇA, INTERFACES E
CASTING
• Herança	
  1	
  
• Classes	
  Abstratas	
  2	
  
• Interfaces	
  3	
  
• CasHng	
  de	
  Tipos	
  4	
  
www.labes.ufpa.br
104
•  Herança é o conceito aplicado quando um filho para
uma classe (também chamado de sub classe)
automaticamente herda variáveis e métodos da classe
pai (super classe).
•  É uma das funcionalidades principais da
programação orientada a objetos
•  Como benefício, permite o reuso de métodos e
atributos, que são automaticamente compartilhados
entre classes e subclasses
•  Cada subclasse fica responsável por estender e
modificar o comportamento herdado
Herança
www.labes.ufpa.br
105
•  A palavra chave extends permite a herança em Java
•  A sub classe herda todos os membros “public” e
“protected” (atributos e métodos) do pai, não
importando a qual pacote a sub classe pertence
•  Se a sub classe está no mesmo pacote que o pai, ela
também herda os membros ”private” (atributos e
métodos) do pai
Herança
public class Funcionario extends Pessoa {
private String nomeEmpresa;
protected int cargaHoraria;
. . . .
}
www.labes.ufpa.br
106
•  Os atributos herdados podem ser utilizados
diretamente, assim como qualquer atributo.
•  É permitido declarar novos atributos na sub classe
que não existam na super classe
•  É permitido declarar um atributo com o mesmo
nome do que existe na super classe, dessa forma
escondendo o atributo original (não recomendado).
•  A sub classe não tem acesso aos membros privados
da classe pai. Mesmo assim, se a super classe tem
método público ou protegido para acessar o atributo
privados a sub classe poderá ter acesso aos dados.
Herança
www.labes.ufpa.br
107
•  Em Java , a classe Object é a “mãe” de todas as
classes
–  Todas as classes estendem da super classe Object
–  A classe Object é a única classe que não tem super classe
•  Object define e implementa comportamento comum
para todas as classes:
–  getClass()‫‏‬
–  equals()‫‏‬
–  toString()‫‏‬
–  …
Herança
Object	
  
ClasseA	
   ClasseB	
   ClasseC	
  
www.labes.ufpa.br
108
Classes Final
–  Classes que não podem ser estendidas
–  Para declarar uma classe final:
public final NomeClasse {
. . .
}
Métodos Final
–  Métodos que não podem ser sobrescritos
–  Basta colocar o termo final na definição do método
•  Métodos static são automaticamente final
Herança
www.labes.ufpa.br
109
•  Uma classe abstrata é uma classe que contém
um ou mais métodos abtsratos
•  Uma classe abstrata não pode ser instanciada
// O seguinte código vai dar erro de compilação
MinhaClasseAbstrata a1 = new MinhaClasseAbstrata();
•  Qualquer outra classe (classe concreta) deve
prover a implementação dos métodos abstratos
Classes Abstratas
www.labes.ufpa.br
110
Classes Abstratas
public abstract class SerVivo {
public void respira() {
System.out.println("Ser vivo respirando...");
}
public void come() {
System.out.println("Ser vivo comendo...");
}
/**
* Método abstrato anda()
* Este método deve ser implementado por uma classe concreta
*/
public abstract void anda();
}
www.labes.ufpa.br
111
•  Quando uma classe concreta estende a classe
abstrata SerVivo, deve implementar o método
abstrato anda(), ou então a subclasse também deve
ser uma classe abstrata (e não poderá ser
instanciada)
Classes Abstratas
public class Homem extends SerVivo {
 
@Override
public void anda() {
System.out.println("Homem andando ... ");
}
 
}
www.labes.ufpa.br
112
•  Define um modo padrão e público de
especificar o comportamento de classes (como
um contrato)
•  Todos os métodos de uma interface são
abstratos
•  Uma classe concreta deve implementar a
interface
•  Isto permite que diferentes classes
implementam um comportamento em comum
Interfaces
www.labes.ufpa.br
CapacitaçãoEletronorte–2007-2008
113
l  Como exemplo, a interface Relacao é definida para
representar os métodos que representam a relação
natural entre objetos
Interfaces
public interface Relacao {
public boolean maior(Object a, Object b);
 
public boolean menor(Object a, Object b);
 
public boolean igual(Object a, Object b);
}
www.labes.ufpa.br
CapacitaçãoEletronorte–2007-2008
114
Interfaces
public boolean igual(Object a, Object b) {
double aLen = ((Linha) a).getTamanho();
double bLen = ((Linha) b).getTamanho();
return (aLen == bLen);
}
 
public boolean maior(Object a, Object b) {
double aLen = ((Linha) a).getTamanho();
double bLen = ((Linha) b).getTamanho();
return (aLen > bLen);
}
 
public boolean menor(Object a, Object b) {
double aLen = ((Linha) a).getTamanho();
double bLen = ((Linha) b).getTamanho();
return (aLen < bLen);
}
}
public class Linha implements
Relacao {
 
private double x1;
private double x2;
private double y1;
private double y2;
 
public Linha(double x1, double
x2,
double y1, double y2) {
this.x1 = x1;
this.x2 = x2;
this.y1 = y1;
this.y2 = y2;
}
 
public double getTamanho() {
double length = Math.sqrt((x2
- x1) *
(x2 - x1) + (y2 - y1) * (y2
- y1));
return length;
}
 
www.labes.ufpa.br
CapacitaçãoEletronorte–2007-2008
115
Relacionamento com Classes
l  Uma classe concreta pode ter somente uma super
classe, mas por outro lado pode implementar várias
interfaces
-  Java não permite herança múltipla, mas
interfaces fornecem uma alternativa.
l  Todos os métodos abstratos de todas as interfaces
devem ser implementados por uma classe concreta
Interfaces
www.labes.ufpa.br
116
Herança entre Interfaces
•  Interfaces não fazem parte da hierarquia de classes
•  Porém, interface podem ter relacionamentos de
herança entre si
Interfaces
public interface RelacaoAmpliada extends Relacao{
public boolean diferenca(Object a, Object b);
 
}
www.labes.ufpa.br
117
•  Quando uma instância de objeto é criada de
uma classe, pode-se afirmar que o objeto é do
“tipo”da classe e das super classes
•  Uma instância de objeto de um tipo em
particular pode ser utilizada em qualquer lugar
onde seu tipo e os super tipos são invocados
(incluindo interfaces implementadas)
Casting de Tipos
www.labes.ufpa.br
118
•  Exemplo:
–  contaCorrente1 é um objeto do tipo de ContaBancaria
–  O objeto contaCorrente1 pode ser chamado em qualquer
lugar onde uma instância de ContaBancaria é chamada
•  Isto permite o chamado polimorfismo
Casting de Tipos
www.labes.ufpa.br
119
Casting Implícito
•  Uma instância de uma sub classe pode ser atribuída
a uma variável de uma super classe através do
casting implícito
•  Exemple
ContaCorrente contCorrente = new ContaCorrente();
Poupanca poupanca = new Poupanca();
ContaBancaria conta = contCorrente; // Casting implícito
ContaBancaria conta2 = poupanca; // Casting implícito
Object objeto = poupanca; // Casting implícito
Casting de Tipos
www.labes.ufpa.br
120
Casting Explícito
•  Uma instância de objeto de uma super classe deve ser
atribuída a uma variável de uma classe filha através do
casting explícito (se não fizer isso é lançado erro de
compilação)
•  Exemplo:
Casting de Tipos
ContaBancaria conta = new ContaCorrente();
ContaCorrente contaCorrente = (ContaCorrente) conta;
ContaBancaria conta = new Poupanca();
ContaCorrente contaCorrente = (ContaCorrente) conta;
Não lança erro de compilação, mas lança erro em tempo de execução
www.labes.ufpa.br
121
Operador instanceof
•  É possível checar o tipo de uma instância de objeto
utilizando instanceof antes do casting de tipos
•  Exemplo
ContaBancaria conta1 = new ContaCorrente();
ContaBancaria conta2 = new Poupanca();
if( conta2 instanceof ContaCorrente ) {
ContaCorrente contaCorrente = (ContaCorrente) conta2;
}
Casting de Tipos
www.labes.ufpa.br
122
Exercício
www.labes.ufpa.br
123
– Dado o modelo UML anterior:
– Crie classes Java e Atributos
• Quando necessário, considere classes
abstratas e herança
• Diferencie varáveis de instância e de
classe
• Organize as classes em pacotes Java
Exercício
www.labes.ufpa.br
124
ESTRUTURAS DE CONTROLE
•  Estruturas	
  de	
  Decisão	
  
1	
  
•  Estruturas	
  de	
  RepeHção	
  
2	
  
•  Estruturas	
  de	
  
Redirecionamento	
  3	
  
www.labes.ufpa.br
125
•  Em Java existem 3 tipos de estruturas de
controle
–  Estruturas de controle de decisão
•  Permitem selecionar seções específicas do código para serem
executadas (if-then-else, swicth)
–  Estruturas de controle de repetição
•  Permitem executar seções específicas um número repetido de
vezes (while, for, do-while)
–  Estruturas de controle de redirecionamento
•  Permitem redirecionar o fluxo de execução de comandos (break,
continue, return );
Estruturas de Controle
www.labes.ufpa.br
126
•  Estruturas de Decisão podem ser dos
seguintes tipos:
– Sentenças if
– Sentenças if-else
– Sentenças If-else-if
– Sentenças switch
Estruturas de Decisão
www.labes.ufpa.br
127
●  Sentenças if
–  Especificam que a sentença (ou bloco de código) será
executada somente se uma certa expressão booleana
for verdadeira.
if( expre_booleana )
sentença;
ou
if( expre_booleana ){
sentença;
sentença;
}
–  Onde,
•  expre_booleana representa uma expressão
Estruturas de Decisão
www.labes.ufpa.br
128
Estruturas de Decisão
Sentença
true false
●  Sentenças if
www.labes.ufpa.br
129
Sentenças if-else
–  Utilizadas quando se deseja executar algo quando
a sentença é verdadeira, e algo diferentes quando
é falsa.
if( expre_booleana ){
sentença;
} else{
sentença;
}
Estruturas de Decisão
www.labes.ufpa.br
130
Estruturas de Decisão
Sentença
true false
●  Sentenças if-else
Sentença
www.labes.ufpa.br
131
●  Sentenças If-else-If
•  A sentença em uma cláusula else pode ser outra estrutura if-
else.
•  Este encadeamento de estruturas permite a
criação de seleções mais complexas.
if( expre_booleana ){
sentença;
} else if( expre_booleana ) {
sentença;
} else if( expre_booleana ) {
sentença;
} else {
sentença;
Estruturas de Decisão
www.labes.ufpa.br
132
Estruturas de Decisão
Sentença
true false
●  Sentenças if-else-if
Sentença
true false
www.labes.ufpa.br
133
Erros Comuns
1. Não utilizar uma expressão booelana no if. Por exemplo
//ERRADO
int number = 0;
if( number ){
//alguma sentença
}
A variável number não possui um valor booleano (Este caso
difere Java de C/C++, onde este exemplo acima estaria
correto).
2. Escrever elseif (junto) ao invés de else if (separado).
Estruturas de Decisão
www.labes.ufpa.br
134
Erros Comuns
3. Utilizar = ao invés de == para comparação.
O correto é utilizar:
int number = 0;
if( number == 0 ){
//alguma sentença
}
Estruturas de Decisão
www.labes.ufpa.br
135
Sentenças switch
–  Permitem múltiplos testes simultâneos.
•  Setenças switch possuem a seguite forma:
switch( expres_switch){
case seletor1:
sentença;
break;
case seletor2:
sentença;
break;
.....
default:
sentença;
}
Estruturas de Decisão
Onde:
express_switch: pode ser um valor inteiro ou
caracter
seletor1..n: um valor inteiro único ou uma
constante caracter
www.labes.ufpa.br
136
Estruturas de Decisão
break
true
Sentença
false
break
true
Sentença
false
break
true
Sentença
false
Bloco default
www.labes.ufpa.br
137
•  Estruturas de decisão podem ser dos
seguintes tipos:
– Loop while
– Loop do-while
– Loop for
Estruturas de Repetição
www.labes.ufpa.br
138
Loop while
–  É uma sentença ou bloco que é repetido enquanto
alguma condição é satisfeita.
while( expre_booleana ){
sentença1;
sentença2;
. . .
}
–  Enquanto expre_booleana é verdadeira as sentenças
do loop são executadas.
Estruturas de Repetição
www.labes.ufpa.br
139
Loop do-while
–  similar ao loop while
–  A principal diferença é:
•  Os comandos dentro do loop do-while são executados no mínimo
uma vez.
do{
sentença1;
sentença2;
. . .
}while( boolean_expression );
Estruturas de Repetição
www.labes.ufpa.br
140
Loop for
–  Permite a execução do mesmo código um número
específico de vezes.
for(expressaoDeInicializacao;condLoop;expressaoEmCadaPasso)
{
sentença1;
sentença2;
. . .
}
Onde:
•  expressaoDeInicializacao –inicializa variável de loop.
•  condLoop – compara a variável de loop com algum valor limite.
•  expressaoEmCadaPasso - atualiza a variável de loop.
Estruturas de Repetição
www.labes.ufpa.br
141
•  O código acima é equivalente ao seguinte loop while
Estruturas de Repetição
int i;
for( i = 0; i < 10; i++ ){
System.out.println(i);
}
int i = 0;
while( i < 10 ){
System.out.print(i);
i++;
}
Loop for: Exemplo
www.labes.ufpa.br
142
•  Java possui 3 tipo de estruturas de
redirecionamento:
– break
– continue
– return
Estruturas de Redirecionamento
www.labes.ufpa.br
143
Break sem marcador
–  Finaliza o comando switch atual, e segue o fluxo
de controle para a sentença imediatamente
posterior ao switch.
–  Isto pode também ser aplicado para finalizar um
loop for, while ou do-while
Estruturas de Redirecionamento
for (int i = 0; i < nomes.length; i++) {
if (nomeBusca.equals(nomes[i]) {
achou=true
break;
}
}
www.labes.ufpa.br
144
•  Break com marcador
–  Finalizar um comando externo ao contexto atual,
que é identificado por um marcador no comando
break.
–  O fluxo de controle é transferido para a sentença
imediatamente após a sentença marcada.
–  O trecho de programa a seguir representa uma
busca em um array de duas dimensões. Dois loops
encadeados varrem o array. Quando o valor é
encontrado o break com marcador finaliza o
comando “marcacaoBusca”, que é um loop
externo
Estruturas de Redirecionamento
www.labes.ufpa.br
145
int[][] numeros = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
int numeroBusca = 5;
boolean encontrouNumero = false;
marcacaoBusca:
for (int i = 0; i < numeros.length; i++) {
for (int j = 0; j <
numeros[i].length; j++) {
if (numeroBusca == numeros[i][j]) {
encontrouNumero = true;
break marcacaoBusca;
}
}
}
if (encontrouNumero)
Estruturas de Redirecionamento
Break com marcador: Exemplo
Finaliza o for externo marcado
www.labes.ufpa.br
146
•  Continue sem marcador
–  Simplesmente pula a iteração atual de um loop
Estruturas de Redirecionamento
String	
  nomes[]	
  =	
  {	
  "Java",	
  "C",	
  "C++",	
  "Java"	
  };	
  
	
   	
  int	
  quan)dade	
  =	
  0;	
  
	
  	
  
	
   	
  for	
  (int	
  i	
  =	
  0;	
  i	
  <	
  nomes.length;	
  i++)	
  {	
  
	
   	
   	
  if	
  (nomes[i].equals("Java"))	
  {	
  
	
   	
   	
   	
  conHnue;	
  //	
  pula	
  o	
  proximo	
  comando	
  
	
   	
   	
  }	
  
	
   	
   	
  quan)dade++;	
  
	
   	
  }	
  
	
  System.out.println("Existem	
  "	
  +	
  quan)dade	
  +	
  "	
  nomes	
  Java	
  na	
  lista");	
  
www.labes.ufpa.br
147
•  Continue com marcador
–  Pula a iteração corrente e continua o fluxo para um
loop externo devidamente marcado
Estruturas de Redirecionamento
loopExterno:
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
System.out.println("Dentro do for j"); // mensagem1
if (j == 2)
continue loopExterno;
}
System.out.println("Dentro do for i"); // mensagem2
} Nunca chega exibir a mensagem2
Quantas vezes a mensagem1 é exibida?
www.labes.ufpa.br
148
Return
–  Utilizado para sair do método corrente
–  Fluxo de controle retorna ao comando que invocou
o método originalmente.
Estruturas de Redirecionamento
public String ComandoReturn(){
return "TextoQualquer";
}
Em método void, basta colocar return;
www.labes.ufpa.br
149
TRATAMENTO DE EXCEÇÕES
• O	
  que	
  é	
  uma	
  Exceção?	
  
1	
  
• Tratamento	
  de	
  exceções	
  
com	
  try/catch	
  2	
  
• Criando	
  e	
  Lançando	
  
Exceções	
  3	
  
• Asserções	
  
4	
  
www.labes.ufpa.br
150
•  Evento não esperado
•  Erro que ocorre em tempo de execução
•  Causa ruptura do fluxo normal do programa
•  Exemplos
–  Erros de divisão por zero
–  Acessar elementos de um array além do tamanho
–  Entrada inválida
–  Pane no disco rígido
–  Abertura de arquivo não existente
–  Estouro do Heap de memória
O que é uma Exceção?
www.labes.ufpa.br
151
O que é uma Exceção?
class DivisaoPorZero {
public static void main(String args[]) {
System.out.println(3/0);
System.out.println("me escreva");
}
}
O código abaixo
Gera a seguinte saída:
www.labes.ufpa.br
152
•  Tratador default de exceções:
–  Provido pelo runtime Java
–  Imprime uma descrição da exceção
–  Imprime a pilha de exceções
•  Hierarquia de métodos onde a exceção ocorreu
–  Faz o programa finalizar
•  Quando uma exceção ocorre em um método, o
método cria um objeto exceção e lança ao sistema de
execução
–  Criar um objeto exceção e lançar no sistema de execução é
chamado “throwing an exception”
–  Objetos de exceção contém informações sobre o erro,
incluindo o tipo e o estado do programa quando o erro
ocorreu
O que é uma Exceção?
www.labes.ufpa.br
153
•  O sistema de execução busca pela pila
de chamadas um método que trate a
exceção
O que é uma Exceção?
Método	
  onde	
  
ocorreu	
  erro	
  
Método	
  sem	
  um	
  
tratador	
  de	
  exceção	
  
Método	
  com	
  um	
  
tratador	
  de	
  exceção	
  
main	
  
Chamada de
método
Chamada de
método
Chamada de
método
www.labes.ufpa.br
154
•  Buscando um tratador de exceção
O que é uma Exceção?
Método	
  onde	
  
ocorreu	
  erro	
  
Método	
  sem	
  um	
  
tratador	
  de	
  
exceção	
  
Método	
  com	
  um	
  
tratador	
  de	
  
exceção	
  
main	
  
Procura tratador
apropriado
Procura tratador
apropriado
Lança exceção
Encaminha exceção
Captura exceção
www.labes.ufpa.br
155
Tratamento de exceções com try/catch
•  U m m é t o d o p o d e
organizar suas exceções
lançando-as para que
um método posterior
possa tratá-las.
•  Assim, somente métodos
que “se importam” com
os erros precisam tratá-
los
•  Q u a l q u e r e x c e ç ã o
lançada deve estar
explicitamente estar na
assinatura do método
(utilizando o throws).
metodo1 (){
try {
metodo2();
} catch (exception e) {
processaErro();
}
}
metodo2 () throws exception
{
metodo3();
}
metodo3 () throws exception
{
leituraArquivo();
}
www.labes.ufpa.br
156
Tratamento de exceções com try/catch
class	
  DivisaoPorZeroComTry	
  {	
  
	
  	
  
	
  public	
  staHc	
  void	
  main(String	
  args[])	
  {	
  
	
   	
   	
  try	
  {	
  
	
   	
   	
   	
  System.out.println(3	
  /	
  0);	
  
	
   	
   	
  System.out.println("me	
  escreva");	
  
	
   	
  }	
  catch	
  (Arithme)cExcep)on	
  exc)	
  {	
  
	
   	
   	
  //	
  Divissao	
  por	
  zero	
  é	
  uma	
  Arithme)cExcep)on	
  
	
   	
   	
  System.out.println(exc);	
  
	
   	
  }	
  finally{	
  
	
   	
   	
  //	
  Codigo	
  a	
  ser	
  excutado	
  antes	
  do	
  bloco	
  try	
  terminar	
  
	
   	
   	
  System.out.println(“passou	
  pelo	
  finally	
  ");	
  
	
   	
  }	
  
	
   	
  System.out.println("Apos	
  excecao.");	
  
	
  }	
  
}	
  
●  Exemplo
www.labes.ufpa.br
157
•  Java permite ao programador lançar
exceções
throw <ObjetoExcecao>;
•  Um exceção é um objeto
–  É necessário criar uma objeto exceção da mesma
forma como se cria qualquer objeto Java
•  Exemplo:
throw new ArithmeticException(“teste...”);
Criando e Lançando Exceções
www.labes.ufpa.br
158
Criando Exceções Próprias
•  Criar exceções próprias para um programa cria um
mecanismo específico para tratar as exceções no
escopo do próprio sistema
•  Passos para seguir
–  Criar uma classe que estenda a RuntimeException ou a
classe Exception
–  Customize a classe
•  Membros e construtores podem ser adicionados à classe
•  Exemplo:
class ExcecaoExemplo extends RuntimeException {
/* algum codigo */
}
Criando e Lançando Exceções
www.labes.ufpa.br
159
Criando e Lançando Exceções
class TesteNegaString {
public static void main(String args[]) {
String input = "entrada invalida";
try {
if (input.equals("entrada invalida")) {
throw new ExcecaoExemplo();
}
System.out.println("Aceitou string.");
} catch (ExcecaoExemplo e) {
System.out.println("Negou string!");
}
}
}
Lança exceção
Captura exceção
www.labes.ufpa.br
160
•  Permitem que o programador verifique se uma
condição foi alcançada na execução do programa
•  Estende os comentários de tal forma que uma
asserção indica ao leitor do código que uma
condição particular deve sempre acontecer
–  O programa informa se as asserções são verdadeiras ou
falsas
–  Se uma asserção não é verdadeira, uma AssertionError é
lançada
•  O usuário tem a opção de desligar a execução da
checagem de asserções
Asserções
www.labes.ufpa.br
161
Habilitando e Desabilitando Asserções
•  Programa com asserções não funciona corretamente
em clientes que não habilitam tal propriedade
•  Compilação
–  Código deve ser compilado com java 1.4 ou superior
•  Habilitando asserções:
–  Ao invocar o interpretador, utilize a tag ”–enableassertions”
ou “–ea”.
java –enableassertions MeuPrograma
Asserções
www.labes.ufpa.br
162
•  Habilitando e Desabilitando Asserções
Asserções
Eclipse
NetBeans
Propriedades
www.labes.ufpa.br
163
Asserções
Sintaxe:
class AssercaoDeIdade {
public static void main(String args[]) {
int idade= 0;
assert (idade > 0); // : String de saida
/* se idade é válida (i.e., idade>0) */
if (idade >= 18) {
System.out.println("Você é um adulto! =)");
}
}
}
www.labes.ufpa.br
164
Exercício
www.labes.ufpa.br
165
– Dado o modelo UML anterior, considere
uma operação que lê dados de entrada
do usuário e cadastra em banco os
dados:
– Defina e codifique no mínimo 3 exceções
Java que tenha significado ao contexto
citado
Exercício
www.labes.ufpa.br
166
OPERAÇÕES
MATEMÁTICAS E
OPERADORES
www.labes.ufpa.br
167
•  Provê constantes e métodos pré-definidos para
realizar diferentes operações matemáticas
•  Métodos e Constantes são variáveis de classe
(estáticas), permitindo o acesso sem
necessidade de instanciar a classe
•  Constantes:
•  Math.E à 2.718281828459045
•  Math.PI à 3.141592653589793
java.lang.Math
www.labes.ufpa.br
168
•  Métodos:
•  Absoluto de -5 = Math.abs(-5)
•  Número randômico (máximo é 10) = Math.random() * 10
•  Número máximo e mínimo entre 3.5 e 1.2 = Math.max(3.5,1.2),Math.min(3.5,1.2)
•  Funções teto e piso = Math.ceil(3.5), Math.floor(3.5)
•  Número de Euler elevado a 1 = Math.exp(1)
•  log 10 = Math.log(10)
•  10 elevado a 3 = Math.pow(10, 3)
•  Arrondamento do PI = Math.round(Math.PI)
•  Raiz quadrada de 5 = Math.sqrt(5)
•  10 radianos transformados em graus = Math.toDegrees(10) + " graus")
•  Seno de 90 = Math.sin(Math.toRadians(90))
java.lang.Math
www.labes.ufpa.br
169
Operadores Aritméticos
Operador Uso Descrição
+ op1+op2 Soma op1 e op2
* op1*op2 Multiplica op1 por op2
/ op1/op2 Divide op1 por op2
% op1%op2 Computa o resto da divisão de op1 por op2
- op1-op2 Subtrai op1 por op2
www.labes.ufpa.br
170
Operadores Aritméticos
Operador Uso Descrição
++ op++ Incrementa op em 1; avalia o valor de op
antes de ser incrementado
++ ++op Incrementa op em 1; avalia o valor de op
depois de ser incrementado
-- op-- Subtrai op em 1; avalia o valor de op antes
de ser incrementado
-- --op1 Subtrai op em 1; avalia o valor de op
depois de ser incrementado
Operadores de incremento e decremento
www.labes.ufpa.br
171
Operadores Aritméticos
int i = 10;
int j = 3;
int k = 0;
k = ++j + i; //resulta em k = 4+10 = 14
Operadores de incremento e decremento
int i = 10;
int j = 3;
int k = 0;
k = j++ + i; //resulta em k = 3+10 = 13
www.labes.ufpa.br
172
•  Comparam dois valores e determinam o
relacionamento entre estes valores
•  A saída da avaliação é true ou false.
Operadores Relacionais
Operador Uso Descrição
> op1>op2 op1 é maior que op2
>= op1>=op2 op1 é maior ou igual a op2
< op1<op2 op1 é menor que op2
<= pp1<=op2 op1 é menor ou igual a op2
== op1==op2 op1 é igual a op2
!= op1!=op2 op1 é diferente de op2
www.labes.ufpa.br
173
•  Possuem um ou dois operandos booleanos que
produzem um resultado booleano.
•  Estes são os 6 operadores lógicos:
–  && (AND lógico)‫‏‬
–  & (AND lógico booleano)‫‏‬
–  || (OR lógico) ‫‏‬
–  | (OR lógico booleano inclusivo)‫‏‬
–  ^ (OR lógico booleano exclusivo)‫‏‬
–  ! (NOT lógico)‫‏‬
Operadores Lógicos
www.labes.ufpa.br
174
● Operadores Lógicos && e &
●  Diferença básica:
-  &&	
  permite	
  avaliações	
  de	
  curto-­‐circuito	
  (ou	
  avaliações	
  parciais),	
  enquanto	
  &	
  
não.	
  	
  
●  Dada a expressão:
exp1 && exp2
-  &&	
   irá	
   avaliar	
   a	
   expressão	
   exp1,	
   e	
   imediatamente	
  
retornar	
  false	
  se	
  o	
  valor	
  de	
  exp1	
  for	
  falso.	
  	
  
-  Em	
  contraste,	
  o	
  operador	
  &	
  sempre	
  avaliar	
  ambos	
  exp1	
  
e	
  exp2	
  antes	
  de	
  retornar	
  a	
  resposta.	
  	
  
Operadores Lógicos
www.labes.ufpa.br
175
public class TestAND {
public static void
main( String[] args ){
int i = 0;
int j = 10;
boolean test= false;
//demonstra &&
test = (i > 10) && (j++ > 9);
System.out.println(i);
System.out.println(j);
System.out.println(test);
//demonstra &
test = (i > 10) & (j++ > 9);
System.out.println(i);
System.out.println(j);
System.out.println(test);
}
}
Operadores Lógicos
●  Operadores Lógicos && e &
Qual saída este programa gera no console?
www.labes.ufpa.br
176
● Operadores Lógicos || e |
●  Seguem a mesma lógica dos operadores && e &, ou seja:
-  ||	
  permite	
  avaliações	
  de	
  curto-­‐circuito	
  (ou	
  avaliações	
  parciais),	
  enquanto	
  |	
  
não.	
  
●  Dada a expressão:
exp1 || exp2
-  ||	
  irá	
  avaliar	
  a	
  expressão	
  exp1,	
  e	
  imediatamente	
  
retornar	
  true	
  se	
  exp1	
  é	
  verdadeiro	
  
-  Em	
  contrastes,	
  o	
  operador	
  |	
  sempre	
  avaliar	
  as	
  duas	
  
expressões	
  antes	
  de	
  retornar	
  a	
  resposta.	
  	
  	
  
Operadores Lógicos
www.labes.ufpa.br
177
•  O resultado de uma operação de OU
exclusivo é verdadeiro, se e um dos
operandos é verdadeiro e o outro é falso
•  Sempre os dois operandos serão
avaliadospara calcular o resultado.
Operadores Lógicos
●  Operador Lógico ^ (OU exclusivo)
●  Operador Lógico ! (NÃO lógico)
●  O resultado de uma operação de NÃO lógico é a negação
do valor avaliada
●  Se é verdadeiro o resultado é falso, se é falso o resultado é
verdadeiro
www.labes.ufpa.br
178
•  Operador Lógico condicional ? :
–  É uma operador ternário.
•  Isto significa que recebe três argumentos de expressão condicional.
–  A estrutura de uma expressão utilizando o operador
condicional é:
exp1?exp2:exp3
onde,
exp1 – é um expressão booleana que pode resultar em true ou false
–  Resultado:
Se exp1 é true, exp2 é o valor retornado.
Se for false, então exp3 é retornada.
Operadores Lógicos
www.labes.ufpa.br
179
Operadores Lógicos
●  Operador Lógico condicional ? :
public class OperadorCondicional {
public static void main( String[] args ){
String status = "";
int grade = 80;
//pega status do estudante
status = (grade >= 60)?"Passou":"Falhou";
//escreve status
System.out.println( status );
}
}	
  
www.labes.ufpa.br
180
Precedência de Operadores
Posição Operador
1 [] . ()
2 ! ~ ++ - +(unario) –(unario) () (cast) new
3 * / %
4 + -
5 < <= > >= instanceof
6 == !=
7 &
8 ^
9 |
10 &&
11 ||
12 ?:
www.labes.ufpa.br
181
•  Dada a seguinte expressão,
6%2*5+4/2+88-10
Pode-se re-escrever com alguns parentes
baseado na precedência de operadores,
((6%2)*5)+(4/2)+88-10
Precedência de Operadores
www.labes.ufpa.br
Parte III
Programação Avançada
www.labes.ufpa.br
183
COLEÇÕES JAVA
www.labes.ufpa.br
184
O que é uma Coleção?
•  Um objeto coleção — algumas vezes chamados de
“container” — é simplesmente um objeto que agrupa
múltiplos elementos em uma unidade
•  Coleções são utilizadas para armazenar, recuperar,
manipular e comunicar dados agregados
–  Tipicamente, representam itens de dados que
formam um grupo natural, como uma pasta de
email (uma coleção de cartas), ou um diretório de
telefones (um mapeamento entre nomes e números
de telefones).
Framework de Coleções
www.labes.ufpa.br
185
•  O framework de coleções é uma arquitetura
unificada para representar e manipular coleções
•  O framework de coleções possui:
–  Interfaces
–  Implementações
–  Algoritmos
Framework de Coleções
www.labes.ufpa.br
186
Benefícios:
•  Reduz esforço de programação
•  Incrementa velocidade e qualidade dos programas
•  Permite interoperabilidade entre APIS não
relacionadas
–  As interfaces de coleções são padrão na troca de dados
entre APIS
•  Reduz tempo de aprendizagem de novas APIS
•  Reduz esforço para projetar novas APIS
•  Promove o reuso de software
–  Novas estruturas de dados que esteja de acordo com as
interfaces padrão de coleção são naturalmente
reutilizáveis
Framework de Coleções
www.labes.ufpa.br
187
•  Interfaces Collection são tipos de dados
abstratos que estão definidas na forma de
interfaces Java
•  Interfaces definem como coleções são
manipuladas independentemente dos seus
detalhes de implementação internos
–  Comportamento polimórfico
•  Em Java (e em outras linguagens orientadas a
objetos), interfaces genericamente formam
uma hierarquia
Interfaces e Implementações
www.labes.ufpa.br
188
•  Hierarquia Básica de Interfaces
Interfaces e Implementações
www.labes.ufpa.br
189
•  Implementações são objetos utilizados para
armazenar coleções, implementando as
interfaces do framework
•  Cada implementação de propósito geral provê
os operadores das interfaces que
implementam
•  O framework de coleções Java também provê
várias implementações para situações
específicas
Interfaces e Implementações
www.labes.ufpa.br
190
Interfaces Implementações
HashTable ResizableArray Árvore Linked List HashTable +
LinkedList
Set HashSet TreeSet LinkedHashSet
List ArrayList LinkedList
Map HashMap TreeMap LinkedHashMa
p
●  Implementações de Propósito geral
Interfaces e Implementações
www.labes.ufpa.br
191
•  Nas últimas versões do Java, algumas classes
que tratam de coleções foram consideradas
“legadas”:
–  Vector
–  Stack
–  Hashtable
–  Properties
Interfaces e Implementações
www.labes.ufpa.br
192
•  É a raiz para a hierarquia de coleções
•  É o último denominador comum que as coleções
implementam
–  Todo objeto coleção é um tipo da interface Collection
•  É utilizado para passar objetos de coleção e
manipular quando generalização máxima é desejada
–  Utilize a interface Collection como um tipo
•  JDK não provê implementação direta desta
interface, mas prove implementações mais específicos
como Set e List
Interface Collection
www.labes.ufpa.br
193
public interface Collection {
boolean add(Object o);
boolean addAll(Collection c);
void clear();
boolean contains(Object o);
boolean containsAll(Collection c);
boolean equals(Object o);
int hashCode();
boolean isEmpty();
Iterator iterator();
boolean remove(Object o);
boolean removeAll(Collection c);
boolean retainAll(Collection c);
int size();
Object[] toArray();
Object[] toArray(Object[] a);
}
Interface Collection
www.labes.ufpa.br
194
Métodos de adição e remoção
•  O método add() é definido genericamente o suficiente
para admitir a adição de itens duplicados ou não, o que
depende das implementações da interface Collection
•  Isto garante que a coleção irá conter o elemento
passado como parâmetro após a invocação do método.
add(Object obj) e remove(Object obj)
Operações em Coleções
…
conjuntoA.add(new Integer(1));
conjuntoA.remove(new Integer(1));
…
Adiciona objeto
Remove objeto
www.labes.ufpa.br
195
Navegação
Para navegar entre os elementos de uma coleção
existem o for each e Iterator:
•  for each (a partir do Java 5)
–  O construtor for each permite que se navegue por um array
ou collection de forma concisa
Operações em Coleções
…
Collection<String> nomes = new ArrayList<String>();
nomes.add("a");
nomes.add("b");
nomes.add("c");
for (String umNome: nomes)
System.out.println(umNome.charAt(0));
…
www.labes.ufpa.br
196
Navegação
•  Iterator
–  Um Iterator é um objeto que permite a navegação em uma
coleção e remover elementos da coleção de forma seletiva,
caso desejado
Operações em Coleções
…
Collection<String> nomes = new ArrayList<String>();
nomes.add("a");
nomes.add("b");
nomes.add("c");
for (Iterator it=nomes.iterator();it.hasNext();)
System.out.println(String(it.next())s);
…
Obtém iterator
Testa se ainda
existem elementos
Obtém a referência
do próximo objeto
www.labes.ufpa.br
197
…
for (Iterator it=nomes.iterator();it.hasNext();
if(it.next()!=null){
it.remove();
}
…
•  Iterator e for each
–  O construtor do for each escondo o Iterator, o que não
permite invocar o método remove();
–  Use explicitamente o Iterator caso queira navegar e filtrar os
dados da coleção
Operações em Coleções
Remove o objeto atual na
navegação da coleção
www.labes.ufpa.br
198
Outras operações
•  containsAll(Collection entrada) — retorna true se a coleção alvo
contém todos os elementos da coleção passada como
parâmetro.
•  addAll(Collection entrada) — adiciona todos os elementos da
coleção passada como parâmetro na coleção alvo.
•  removeAll(Collection entrada) — remove todos os elementos
da coleção passada como parâmetro que também pertençam à
coleção alvo.
•  retainAll(Collection entrada) — contrário do anterior, pois
remove todos os elementos que não estejam em comum na
coleção passada como parâmetro
•  clear() — remove todos os elementos da coleção
Operações em Coleções
www.labes.ufpa.br
199
•  Representa uma coleção que não pode ter
elementos duplicados
•  Modela a abstração matemática de conjunto:
–  Matérias de um curso de graduação
–  Conjunto de pessoas em uma sala
•  Esta interface possui apenas os mesmos métodos
herdados da interface Collection.
•  Apenas nas implementações desta interface são
adicionadas operações para garantir que não
conterá elementos repetidos
•  Não existe restrição nenhuma em relação a ordem
em que os elementos são agrupados
Interface Set
www.labes.ufpa.br
200
Implementações da Interface Set
•  HashSet – conjunto genérico e não ordenado que armazena
por valor hash
•  TreeSet – árvore não balanceada cujos elementos estão
ordenados (garante tempo log(n) para operações básicas - add,
remove and contains)
•  LinkedHashSet – um conjunto HashSet que amazena também
a ordem de inserção
Interface Set
HashSet
1
3
2
LinkedHashSet
www.labes.ufpa.br
201
HashSet, TreeSet e LinkedHashSet
•  HashSet é mais rápido que TreeSet em várias
operações (tempo constante versus tempo log para
as operações), mas não oferece nenhuma garantia de
ordenamento
•  HashSet é a implementação mais comumente
utilizada
•  LinkedHashSet provê quase o mesmo tempo de
acesso de HashSet e não possui o custo de log
como TreeSet.
Interface Set
www.labes.ufpa.br
202
•  Representa uma coleção ordenada (algumas vezes
chamada de seqüência )‫‏‬
•  Lista pode conter elementos duplicados em sua
definição
•  O usuário da lista geralmente tem controle preciso
sobre a posição onde está cada elemento da lista
•  Pode acessar os elementos pelo valor inteiro de sua
posição
•  Provê operações adicionais à interface Collection,
que possuem as seguintes funções: acesso pela
posição, busca, iteração e listagens por range
Interface List
www.labes.ufpa.br
203
public interface List<E> extends
Collection<E> {
 
E get(int index);
E set(int index, E element);
void add(int index, E element);
E remove(int index);
boolean addAll(int index, Collection c);
int indexOf(Object o);
int lastIndexOf(Object o);
ListIterator<E> listIterator();
ListIterator<E> listIterator(int index);
List<E> subList(int from, int to);
}	
  
Interface List
www.labes.ufpa.br
204
Implementações
•  ArrayList
–  Oferece tempo constante de acesso, utiliza um array como
representação interna e é a implementação de lista mais
utilizada
•  LinkedList
–  Utilizado para freqüentemente adicionar elementos ao topo
da lista, navegar e apagar elementos no interior da lista
Interface List
ArrayList
remove
LinkedList
www.labes.ufpa.br
205
•  Em relacionamentos entre objetos onde pode haver mais de
um objeto envolvido, podem ser utilizados arrays ou coleções
•  Pela flexibilidade e facilidade de uso, naturalmente utilizam-se
coleções Java para representar relacionamentos do lado “n”.
Coleção como Atributo
Relacionamentos n-ários
www.labes.ufpa.br
206
•  Codificação
Coleção como Atributo
public class Funcionario {
private String nome;
private String cpf;
private Date dataAdmissao;
private String tipo;
private Date dataNascimento;
 
private Funcionario chefe;
private Collection subordinados;
  private Divisao lotacao;
}
www.labes.ufpa.br
207
•  Codificação
Coleção como Atributo
public class Regional {
private String nome;
private String sigla;
private String endereco;
 
private Collection divisoe
}
www.labes.ufpa.br
208
– Dado o modelo de súmulas de futebol:
– Codifique os relacionamentos entre as
classes
– Considere a cardinalidade e a direção
– Quando determinado, defina o tipo de
ordenação (List ou Set)
Exercício
www.labes.ufpa.br
209
JAVA I/O – ACESSANDO
ARQUIVOS
www.labes.ufpa.br
210
•  Representa as operações de entrada e saída de dados
para um destino
•  Pode ser representado por diferentes tipos de fontes e
destinos
–  Arquivos em disco, aparelhos, outros programas, um socket
de rede, arrays em memória, entre outros.
•  Pode operar com diferentes tipos de dados
–  Bytes simples, tipos de dados primitivos, caracteres
específicos e objetos
•  Um programa Java utiliza a abstração de Stream para
criar um canal de comunicação entre fonte e destino
O que é Java I/O
www.labes.ufpa.br
211source:java.sun.com
O que é Java I/O
Input stream
Fonte	
  
Stream	
  
DesHno	
  
www.labes.ufpa.br
212
O que é Java I/O
Output stream
source:java.sun.com
DesHno	
  
Stream	
  
Fonte	
  
www.labes.ufpa.br
213
•  Representa uma abstração sobre os
arquivos e diretórios verdadeiros
armazenados no SO
•  Não é uma stream Java
•  É muito importante I/O Java, pois streams
Java manipulam objetos da classe File
•  P o s s u i o p e r a ç õ e s p a r a a c e s s a r
propriedades do arquivo ou diretório, tais
como permissões de leitura, escrita,
tamanho, etc.
Classe File
www.labes.ufpa.br
214
Classe File
 
public class FileInfoClass {
public static void main(String args[]) {
String nomeArquivo = "arquivo.txt";//mude aqui o nome para o diretorio
que queira testar
File arquivoRef = new File(nomeArquivo);
System.out.println("Nome: " + arquivoRef.getName());
if (!arquivoRef.exists()) {
System.out.println(nomeArquivo + " nao existe");
/* Cria um diretorio temporario */
System.out.println("Criando diretorio temporario...");
nomeArquivo = "temp";
arquivoRef = new File(nomeArquivo);
arquivoRef.mkdir();
System.out.println(nomeArquivo + (arquivoRef.exists() ? "existe" :
"nao existe"));
System.out.println("Deleting temp directory...");
arquivoRef.delete();
System.out.println(nomeArquivo + " e um " + (arquivoRef.isFile() ?
"arquivo ." : "diretorio ."));
}
…
	
  
Cria objeto arquivo
Verifica se arquivo já existe
Cria um diretório temp
Apaga arquivo
www.labes.ufpa.br
215
…
if (arquivoRef.isDirectory()) {
String content[] = arquivoRef.list();
System.out.println("O conteudo do diretorio");
for (int i = 0; i < content.length; i++) {
System.out.println(content[i]);
}
}
System.out.println(nomeArquivo + " tem tamanho = " +
arquivoRef.lastModified() );
if (!arquivoRef.canRead()) {
System.out.println(nomeArquivo + " nao pode ser lido");
return;
}
System.out.println(nomeArquivo + " tem tamanho " +
arquivoRef.lastModified());
if (!arquivoRef.canWrite()) {
System.out.println(nomeArquivo + " nao pode ser escrito");
}
}
 }	
  
Verifica se é diretório
Imprime nome do arquivo
Classe File
www.labes.ufpa.br
216
Leitura e Escrita de Arquivos
Hierarquia
www.labes.ufpa.br
217
Leitura e Escrita de Arquivos
Programa
Fluxo de dados
www.labes.ufpa.br
218
•  Streams de Byte
–  Streams de dados binários
–  Classes raiz para streams de bytes:
•  Classe InputStream
•  Classe OutputStream
•  Ambas são classes abstratas
•  Streams de Character
–  Para caracteres Unicode
–  Classes raiz para streams de caracteres:
•  Classe Reader
•  Classe Writer
•  Ambas são abstratas
Leitura e Escrita de Arquivos
www.labes.ufpa.br
219
public class CopyBytes {
public static void main(String[] args) throws IOException {
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream("eln.txt");
out = new FileOutputStream("saidaeln.txt");
int c;
while ((c = in.read()) != -1) {
out.write(c);
}
}
// mais codigo
finally {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
}
}
Leitura e Escrita de Arquivos
FileInputStream e FileOutputStream
Cria referências
Lê da entrada e escreve na saída
Fecha referências aos arquivos
www.labes.ufpa.br
220
•  Leitura de Linhas
•  Entrada e Saída baseada em caracteres é uma
operação muito “baixo nível”
•  Entrada e Saída usualmente utiliza unidades
maiores que um simples caracter
–  Uma unidade comum é uma linha: uma string
com um caracter terminador no final
–  Um terminador de linha pode ser um retorno de
carro seguido de nova linha ("rn"), um único
retorno de carro ("r"), ou uma única nova linha
("n").
Leitura e Escrita de Arquivos
www.labes.ufpa.br
221
public static void main(String[] args) {
 
File inputFile = new File("eln.txt");
File outputFile = new File("saidaeln.txt");
FileReader in;
FileWriter out;
try {
in = new FileReader(inputFile);
out = new FileWriter(outputFile);
 
BufferedReader inputStream = new
BufferedReader(in);
PrintWriter outputStream = new
PrintWriter(out);
String l;
while ((l = inputStream.readLine()
System.out.println(l);
outputStream.println(l);
}
 
in.close();
out.close();
 
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
Leitura e Escrita de Arquivos
●  Leitura de Linhas
www.labes.ufpa.br
222
•  Uma operação de I/O sem buffer significa que cada chamada de
leitura ou escrita é capturada diretamente pelo SO
–  Isto pode fazer os programas ficarem ineficientes, a partir de
que cada requisição geralmente representa um acesso a
disco, atividade de rede, ou alguma operação geralmente
custosa.
•  Para reduzir este tipo de overhead, a plataforma Java
implementa streams com buffer de I/O
–  Streams com buffer de entrada lêem dados de área de
memória conhecida como buffer; a API nativa é chamada
quando o buffer está vazio
–  Similarmente, Streams com buffer de saída escrevem dados
para o buffer, e a API nativa é chamada quando o buffer
estiver cheio.
Buffer de I/O
www.labes.ufpa.br
223
•  Um programa pode converter uma stream
sem buffer em uma stream com buffer
utilizando o “empacotamento”:
–  Uma stream sem buffer é passada como
parâmetro no construtor de classe stream com
buffer
•  Exemplo
inputStream = new BufferedReader(new
FileReader(”entra.txt"));
outputStream =new BufferedWriter(new
FileWriter(”sai.txt"));
Buffer de I/O
www.labes.ufpa.br
224
•  Geralmente não faz sentido enviar dados do buffer
em pontos críticos, sem esperar pelo preenchimento
do mesmo. Isto é conhecido como “flush” do buffer.
•  Alguns buffers permitem flush automático, que é
especificado por um parâmetro opcional no construtor.
–  Quando flush automático está habilitado, certos eventos
chave fazem com o buffer seja descarregado
–  Por exemplo, um objeto PrintWriter com flush automático
descarrega os dados em toda invocação de println().
•  Para realizar o “flush” de arquivos manualmente, é
necessário invocar o método flush().
Buffer de I/O
www.labes.ufpa.br
225
•  Em Java existem três tipos de stream padrão:
–  Entrada Padrão, acessada por System.in
–  Saída Padrão, acessada por System.out
–  Erro Padrão, acessada por System.err
•  Estes objetos são definidos automaticamente e
não precisam ser instanciados
•  System.out e System.err são definidas como
objetos PrintStream (streams de escrita)
Entrada e Saída Padrão
www.labes.ufpa.br
CapacitaçãoEletronorte–2007-2008
226
Entrada e Saída Padrão
public class LeituraEntradaPadrao {
 
public static void main(String[] args) throws IOException {
DataOutputStream output = new DataOutputStream(System.out
DataInputStream in = new DataInputStream(System.in);
 
int c;
while ((c = in.read()) != -1)
output.write(c);
in.close(); //sempre fechar antes de terminar
output.close();//sempre fechar antes de terminar
}
 
}
MacLima:bin adailton$ java br.eln.java.io.LeituraEntradaPadrao < ../eln.txt
***************
inicio do arquivo
linha 1
linha 2
linha3
fim do arquivo
**************
MacLima:bin adailton$
www.labes.ufpa.br
227
•  Geralmente ler o conteúdo de entrada a partir da linha
comando e com sigilo exige a definição de alguma
classe utilitária para tal tarefa.
•  O Java SE 6 introduziu a classe Console
especificamente para facilitar esta tarefa.
•  Para ler uma senha, utilize o seguinte código:
– Console cons = System.console();
– String username = cons.readLine(“Nome Usuario: ");
– char[] passwd = cons.readPassword(“Senha: ");
Java 6: Classe Console
www.labes.ufpa.br
228
– Considere um arquivo de texto com o
conteúdo no seguinte formato:
Exercício
Fulano 89 n
Fulano 23 n
Fulano 45 n
Beltrano 33 n
EOF
Nome Jogador
Minuto do jogo em
que marcou golLinha
www.labes.ufpa.br
229
– Codifique um método que receba como
entrada o nome do arquivo, e processa
o texto escrevendo na tela quantos gol
cada jogador fez e o minuto do primeiro
gol
Exercício
www.labes.ufpa.br
230
NOVAS FUNCIONALIDADES
www.labes.ufpa.br
231
Recentes Evoluções do Java
Loop for each
Import Estático
Autoboxing
Generics
Java Web Start
Annotations
Java 5
www.labes.ufpa.br
232
Recentes Evoluções do Java
SplashScreen
SystemTray
JDBC 4.0
Scripting (JavaScript, JavaFX e JRuby)
JAX-WS (Web Services)
Melhorias de I/O (Console, Permissões)
Java 6
www.labes.ufpa.br
233
•  De maneira geral, a versão 5 do Java incluiu
novas estruturas para a linguagem em si
•  A versão 6 adicionou várias melhorias de
performance e funcionalidades relacionadas à
plataforma, como acesso a banco, apoio a
scripts, etc.
•  A versão 7 está no forno ainda, mas pretende
adicionar novas estruturas para linguagem, como
por exemplo tipagem dinâmica
Recentes Evoluções do Java
www.labes.ufpa.br
234
•  Permite que uma classe tenha acesso a membros
estáticos (atributos e métodos) sem necessitar digitar
explicitamente a classe originária, como em:
double r = Math.cos(Math.PI * valor);
•  O import estático permite acesso a membros
estáticos sem necessariamente utilizar herança.
Assim, o programa importa somente os membros
individualmente:
import static java.lang.Math.PI;
•  ou
import static java.lang.Math.*;
Import Estático
www.labes.ufpa.br
235
•  Uma vez importados, os membros estáticos podem ser
utilizados diretamente:
double r = cos(PI * theta);
•  A declaração de import estático é análogo ao import
normal, pois permite acesso sem necessitar explicitar o
path completo
Import Estático
import static java.lang.Math.PI;
import static java.lang.Math.round; 
 
public class ImportMathEstatico {
 
public static void main(String args[]){
System.out.println(" Valor de PI = "+PI);
System.out.println(" Valor de -5 arredondado =
"+round(-5));
} 
}
www.labes.ufpa.br
236
•  Utilize quando precisar ter acesso freqüente a
membros estáticos de uma ou duas classes.
•  Se utilizar mal a funcionalidade de import estático,
pode fazer o programa perder legibilidade e
manutenibilidade, poluindo o código com todos os
membros estáticos importados.
•  Se utilizado apropriadamente, o import estático
pode fazer o programa mais legível (pois remove
toda a repetição de nomes de classes)
Import Estático
www.labes.ufpa.br
237
•  Esse processo de empacotamento entre primitivos e
objetos é algo intediante.
•  A partir do Java 5, o recurso de autoboxing faz esse
empacotamento sozinho:
•  No Java 1.4 o código acima é inválido. No Java 5 ele
compila perfeitamente.
Autoboxing
Integer inteiro1= new Integer(1);
int valInteiro1 = inteiro1.intValue(); 
Integer inteiro2= 1;
int valInteiro2 = inteiro1; 
www.labes.ufpa.br
238
•  Este caso se aplica a todos os tipos primitivos e seus
correspondentes wrappers (float e Float, double e
Double, etc.)
•  Isso não quer dizer que tipos primitivos e referências
agora são a mesma coisa, isso é simplesmente um
“adocicamento sintático” para facilitar a codificação.
•  Pode-se fazer o autoboxing diretamente para Object
também, possibilitando passar um tipo primitivo para
um método que recebe Object como argumento:
Autoboxing
Object val1 = 5;
Object val2 = 5.0F;
Internamente val1 e val2 são empacotados no mesmo tipo de objeto?
www.labes.ufpa.br
239
Como são utilizadas?
•  Annotations, ou simplesmente ”anotações”, são
utilizadas para afetar o modo como os programas
são tratados por ferramentas e bibliotecas
•  Annotations são utilizados por ferramentas para
produzir arquivos derivados
–  Ferramentas: Compilador, IDE
–  Arquivos derivados: Novo código Java, descritor
de implantação, arquivos .class
Annotations
www.labes.ufpa.br
240
Porquê Annotations?
•  Habilitam o estilo de “programação declarativa”
–  Menor codificação, já que uma ferramenta pode
gerar arquivos derivados automaticamente
–  Fácil modificar configurações
•  Elimina a necessidade de manter “arquivos
dependentes” que precisam ser alterados sempre para
estar sincronizado com o código fonte
–  Informação é mantida no arquivo fonte
Annotations
www.labes.ufpa.br
241
•  A definição do tipo Annotation é similar ao modo
de definir Interfaces Java
–  Um “arroba” (@) precede a palavra reservada interface
–  Cada,método define um elemento da Annotation
–  Declaração de métodos não pode ter parâmetros e nem
lançar exceções
–  Tipos de retorno são restritos a primitivos, String, Class,
enums, annotations, e arrays dos tipos anteriores
–  Métodos podem ter valores default
Annotations
Definindo uma Annotation
www.labes.ufpa.br
242
public @interface RequerMelhoria {
int id();
 
String resumo();
 
String analista() default "[naoDefinid
 
String data() default "[naoImplementad
}
Definindo uma Annotation
Annotations
Item definido como método
Define valor default
www.labes.ufpa.br
243
•  Depois de definida, é possível utilizar uma Annotation
na declaração de:
–  classes, métodos, atributos
•  Uma é um tipo especial de modificador, e pode ser
utilizado em qualquer lugar que outros modificadores
(como public, static, ou final) podem ser utilizados
–  Por convenção, Annotations precedem outros
modificadores
–  Annotations consistem em um arroba (@) seguido
de parêntesis com os elementos listados
Annotations
Como utilizar uma Annotation
www.labes.ufpa.br
244
public interface InterfaceTeste {
 
@RequerMelhoria(
id = 123,
resumo = "Permitir Jogo Adiado",
analista = "Fulano de Tal",
data = "4/1/2010"
)
public void definirDataJogo(Date data);
 
}	
  
Como utilizar uma Annotation
Annotations
www.labes.ufpa.br
245
Restrições de Escopo em Annotations
•  De maneira geral as anotações podem ser
restringidas de duas maneiras:
–  Escopo de uso: restringem a qual contexto a
Annotation estará disponível para ser acessada
por ferramentas (código fonte, código .class, JRE,
etc.)
–  Escopo de definição: restringem a quais
elementos Java a Annotation pode ser aplicada
(classe, atributo, método, etc.)
Annotations
www.labes.ufpa.br
246
•  Utiliza-se a meta-annotation @Retention, que possui 3
níveis:
–  SOURCE: indica que a informação da Annotation será
colocada apenas no código fonte, mas não estará
disponível no arquivo .class
–  CLASS (Default): indica que a informação da
Annotation será colocada no arquivo .class, mas não
estará disponível em tempo de execução (não será
carregado pela JRE)
–  RUNTIME – indica que a informação será armazenada
no arquivo .class e carregada pela JRE
Annotations
Escopo de Uso
www.labes.ufpa.br
247
Escopo de Uso
Annotations
@Retention(RetentionPolicy.RUNTIME)
public @interface RequerMelhoria {
int id();
 
String resumo();
 
String analista() default
"[naoDefinido]";
 
String data() default
"[naoImplementado]";
}
Define Escopo de Uso
www.labes.ufpa.br
248
•  Definição similar ao escopo de uso
•  Utiliza-se a meta-annotation @Target, que possui vários
níveis, tais como:
•  TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR,
LOCAL_VARIABLE, ANNOTATION_TYPE, PACKAGE
Annotations
Escopo de Definição
@Target(ElementType.FIELD)
public @interface RequerMelhoria {
int id();
 
String resumo();
 
String analista() default "[naoDefinido]";
 
String data() default "[naoImplementado]";
}
www.labes.ufpa.br
249
@Target(ElementType.FIELD)
public @interface RequerMelhoria {
int id();
 
String resumo();
 
String analista() default "[naoDefinido]";
 
String data() default "[naoImplementado]";
}
public interface InterfaceTeste {
 
@RequerMelhoria(
id = 123,
resumo = "Permitir Jogo Adiado",
analista = "Fulano de Tal",
data = "4/1/2010"
)
public void definirDataJogo(Date data);
 
}	
  
§ The annotation @RequerMelhoria is disallowed for this location
Annotations
www.labes.ufpa.br
250
•  Provêem abstração aos tipos
–  Classes, Interfaces e Métodos podem ser parametrizados por
tipos ( este recurso é conhecido por programadores C++)
•  Generics permite código seguro para uso de tipos
–  Se o código compila sem erros ou advertências, não irá
acontecer nenhuma ClassCastException inesperado em
tempo de execução
Generics
…
Collection<String> nomes = new
ArrayList<String>();
nomes.add("a");
for (String umNome: nomes)
System.out.println(umNome.charAt(0));
Esta definição já apresentada é
permitida pelo uso de Generics
§ Não precisa fazer
Casting para String
www.labes.ufpa.br
251
Definição de uma classe genérica:
•  Definição: LinkedList<E> tem um parâmetro tipo E que
representa o tipo do elemento armazenado no interior
da lista
Generics
public interface LinkedList<E> extends
AbstractSequentialList<E>
implements List<E>,Queue<E>, Clonable,
java.io.Serializable {
…
… 
 
}
§ O uso de “E” como parâmetro é
apenas uma convenção
§ Este parâmetro segue a mesma
r e g r a p a r a d e f i n i ç ã o d e
identificadores para a linguagem
J a v a ( p . e x : T, T I P O , t i P o ,
TIPO1,etc...)
www.labes.ufpa.br
252
•  Substituir o parâmetro tipo <E> pelo tipo concreto no
argumento, como <Integer> ou <String> ou <MeuTipo>
–  LinkedList<Integer> pode armazenar somente
Integer ou sub tipos deste
Generics
Uso de uma classe genérica:
…
LinkedList<Integer> valores = new LinkedList<Integer>();
valores.add(new Integer(1));
valores.add(23);
valores.add(“142”);
String valor = valores.get(1);
…
Não é permitido adicionar um valor String
Permitido pelo
Autoboxing
Acesso a valor é verificado
www.labes.ufpa.br
253
•  Problema: Tipos de elementos em Collection
–  Compilador não consegue verificar tipos de elementos (pois tudo é
Object)
–  Atribuição com casting de tipos
–  Podem ocorrer ClassCastException em tempo de execução do
programa
•  Solução: Generics
–  Diz ao compilador o tipo da coleção
–  Deixa o compilador fazer o casting
–  Permite a detecção em tempo de compilação
Generics
Porquê usar Generics?
www.labes.ufpa.br
254
•  Você pode codificar isto:
–  Object o = new Integer(5);
•  Você pode codificar também:
–  Object[] or = new Integer[5];
•  Então é esperado que permitido o seguinte código: (Que na
verdade NÃO pode!)
–  ArrayList<Object> ao = new ArrayList<Integer>();
•  Isto poderia causar ClassCastException em tempo de
execução
Generics
Generics e Sub Tipos
www.labes.ufpa.br
255
Generics
Generics e Sub Tipos
ArrayList<Integer> ai = new ArrayList<Integer>();
ArrayList<Object> ao = ai; // permitido em compilação
ao.add(new Object());
Integer i = ai.get(0);
ArrayList<Number> an = new ArrayList<Number>();
an.add(new Integer(5));
an.add(new Long(1000L));
No seguinte caso, Long e Integer são subclasses de Number:
Introdução a Linguagem Java
Introdução a Linguagem Java
Introdução a Linguagem Java
Introdução a Linguagem Java
Introdução a Linguagem Java
Introdução a Linguagem Java
Introdução a Linguagem Java

Weitere ähnliche Inhalte

Was ist angesagt?

01 Introdução à programação web
01 Introdução à programação web01 Introdução à programação web
01 Introdução à programação webCentro Paula Souza
 
Introdução a Linguagem de Programação C
Introdução a Linguagem de Programação CIntrodução a Linguagem de Programação C
Introdução a Linguagem de Programação CGercélia Ramos
 
Aula 1 - Introdução ao Mobile
Aula 1 - Introdução ao MobileAula 1 - Introdução ao Mobile
Aula 1 - Introdução ao MobileCloves da Rocha
 
Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01   Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01 Léo Dias
 
Introdução ao desenvolvimento Web
Introdução ao desenvolvimento WebIntrodução ao desenvolvimento Web
Introdução ao desenvolvimento WebSérgio Souza Costa
 
Desenvolvimento de Sistemas Web - Conceitos Básicos
Desenvolvimento de Sistemas Web - Conceitos BásicosDesenvolvimento de Sistemas Web - Conceitos Básicos
Desenvolvimento de Sistemas Web - Conceitos BásicosFabio Moura Pereira
 
Introdução à Programação
Introdução à ProgramaçãoIntrodução à Programação
Introdução à ProgramaçãoMario Sergio
 
Apresentação HTML e CSS
Apresentação HTML e CSSApresentação HTML e CSS
Apresentação HTML e CSSledsifes
 
Lógica de Programação - Estrutura condicional
Lógica de Programação - Estrutura condicionalLógica de Programação - Estrutura condicional
Lógica de Programação - Estrutura condicionalWesley R. Bezerra
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesOziel Moreira Neto
 
Banco de Dados - Introdução - Projeto de Banco de Dados - DER
Banco de Dados - Introdução - Projeto de Banco de Dados - DERBanco de Dados - Introdução - Projeto de Banco de Dados - DER
Banco de Dados - Introdução - Projeto de Banco de Dados - DERRangel Javier
 
Introdução sobre desenvolvimento web
Introdução sobre desenvolvimento webIntrodução sobre desenvolvimento web
Introdução sobre desenvolvimento webRodrigo Rodrigues
 

Was ist angesagt? (20)

01 Introdução à programação web
01 Introdução à programação web01 Introdução à programação web
01 Introdução à programação web
 
Java - Primeiros passos
Java - Primeiros passosJava - Primeiros passos
Java - Primeiros passos
 
Introdução a Linguagem de Programação C
Introdução a Linguagem de Programação CIntrodução a Linguagem de Programação C
Introdução a Linguagem de Programação C
 
Padrões MVC
Padrões MVCPadrões MVC
Padrões MVC
 
Aula 1 - Introdução ao Mobile
Aula 1 - Introdução ao MobileAula 1 - Introdução ao Mobile
Aula 1 - Introdução ao Mobile
 
Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01   Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01
 
Node.js e Express
Node.js e ExpressNode.js e Express
Node.js e Express
 
Introdução ao desenvolvimento Web
Introdução ao desenvolvimento WebIntrodução ao desenvolvimento Web
Introdução ao desenvolvimento Web
 
Desenvolvimento de Sistemas Web - Conceitos Básicos
Desenvolvimento de Sistemas Web - Conceitos BásicosDesenvolvimento de Sistemas Web - Conceitos Básicos
Desenvolvimento de Sistemas Web - Conceitos Básicos
 
Introdução à Programação
Introdução à ProgramaçãoIntrodução à Programação
Introdução à Programação
 
Apresentação HTML e CSS
Apresentação HTML e CSSApresentação HTML e CSS
Apresentação HTML e CSS
 
Lógica de Programação - Estrutura condicional
Lógica de Programação - Estrutura condicionalLógica de Programação - Estrutura condicional
Lógica de Programação - Estrutura condicional
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Algoritmo 06 - Array e Matrizes
Algoritmo 06 - Array e MatrizesAlgoritmo 06 - Array e Matrizes
Algoritmo 06 - Array e Matrizes
 
Javascript aula 01 - visão geral
Javascript   aula 01 - visão geralJavascript   aula 01 - visão geral
Javascript aula 01 - visão geral
 
Introdução a php
Introdução a phpIntrodução a php
Introdução a php
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
 
Html Básico
Html BásicoHtml Básico
Html Básico
 
Banco de Dados - Introdução - Projeto de Banco de Dados - DER
Banco de Dados - Introdução - Projeto de Banco de Dados - DERBanco de Dados - Introdução - Projeto de Banco de Dados - DER
Banco de Dados - Introdução - Projeto de Banco de Dados - DER
 
Introdução sobre desenvolvimento web
Introdução sobre desenvolvimento webIntrodução sobre desenvolvimento web
Introdução sobre desenvolvimento web
 

Andere mochten auch

Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)Luis Borges Gouveia
 
Linguagem Java - Conceitos e Técnicas
Linguagem Java - Conceitos e TécnicasLinguagem Java - Conceitos e Técnicas
Linguagem Java - Conceitos e TécnicasBreno Vitorino
 
Conhecendo A Linguagem de Programação Java
Conhecendo A Linguagem de Programação JavaConhecendo A Linguagem de Programação Java
Conhecendo A Linguagem de Programação JavaMicael Coutinho
 
Semana 3: Introdução à linguagem de programação Java
Semana  3: Introdução à linguagem de programação Java Semana  3: Introdução à linguagem de programação Java
Semana 3: Introdução à linguagem de programação Java Manuel Menezes de Sequeira
 
Construtores em Java
Construtores em JavaConstrutores em Java
Construtores em JavaEderson Lima
 
WebAPSEE-PRO
WebAPSEE-PROWebAPSEE-PRO
WebAPSEE-PROUFPA
 
Startup weekend belém - 2014 preliminar
Startup weekend   belém - 2014 preliminarStartup weekend   belém - 2014 preliminar
Startup weekend belém - 2014 preliminarUFPA
 
Introducao a projetos de desenvolvimento distribuído de software
Introducao a projetos de desenvolvimento distribuído de softwareIntroducao a projetos de desenvolvimento distribuído de software
Introducao a projetos de desenvolvimento distribuído de softwareUFPA
 
Zimya | Design Thinking 2ª Edição | aula 2
Zimya | Design Thinking 2ª Edição | aula 2Zimya | Design Thinking 2ª Edição | aula 2
Zimya | Design Thinking 2ª Edição | aula 2Carolina Poll
 
Oficina de Criacao e Validacao de Ideias
Oficina de Criacao e Validacao de IdeiasOficina de Criacao e Validacao de Ideias
Oficina de Criacao e Validacao de IdeiasUFPA
 
Zimya | Design thinking | aula 2
Zimya | Design thinking | aula 2Zimya | Design thinking | aula 2
Zimya | Design thinking | aula 2Carolina Poll
 
Telma Teixeira-OEI-escolas-bilingues
Telma Teixeira-OEI-escolas-bilinguesTelma Teixeira-OEI-escolas-bilingues
Telma Teixeira-OEI-escolas-bilinguesEventos COPESBRA
 
Inovação com Design Thinking
Inovação com Design ThinkingInovação com Design Thinking
Inovação com Design ThinkingUFPA
 
Introducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareIntroducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareUFPA
 
Design Thinking - Prototipação
Design Thinking  - PrototipaçãoDesign Thinking  - Prototipação
Design Thinking - PrototipaçãoUFPA
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao javaArmando Daniel
 

Andere mochten auch (20)

Introdução a java
Introdução a javaIntrodução a java
Introdução a java
 
Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)
 
Linguagem Java - Conceitos e Técnicas
Linguagem Java - Conceitos e TécnicasLinguagem Java - Conceitos e Técnicas
Linguagem Java - Conceitos e Técnicas
 
Fundamentos do java
Fundamentos do javaFundamentos do java
Fundamentos do java
 
Conhecendo A Linguagem de Programação Java
Conhecendo A Linguagem de Programação JavaConhecendo A Linguagem de Programação Java
Conhecendo A Linguagem de Programação Java
 
JAVA - Tratamento de Erros
JAVA - Tratamento de ErrosJAVA - Tratamento de Erros
JAVA - Tratamento de Erros
 
Semana 3: Introdução à linguagem de programação Java
Semana  3: Introdução à linguagem de programação Java Semana  3: Introdução à linguagem de programação Java
Semana 3: Introdução à linguagem de programação Java
 
Construtores em Java
Construtores em JavaConstrutores em Java
Construtores em Java
 
WebAPSEE-PRO
WebAPSEE-PROWebAPSEE-PRO
WebAPSEE-PRO
 
Startup weekend belém - 2014 preliminar
Startup weekend   belém - 2014 preliminarStartup weekend   belém - 2014 preliminar
Startup weekend belém - 2014 preliminar
 
Design thinking
Design thinkingDesign thinking
Design thinking
 
Introducao a projetos de desenvolvimento distribuído de software
Introducao a projetos de desenvolvimento distribuído de softwareIntroducao a projetos de desenvolvimento distribuído de software
Introducao a projetos de desenvolvimento distribuído de software
 
Zimya | Design Thinking 2ª Edição | aula 2
Zimya | Design Thinking 2ª Edição | aula 2Zimya | Design Thinking 2ª Edição | aula 2
Zimya | Design Thinking 2ª Edição | aula 2
 
Oficina de Criacao e Validacao de Ideias
Oficina de Criacao e Validacao de IdeiasOficina de Criacao e Validacao de Ideias
Oficina de Criacao e Validacao de Ideias
 
Zimya | Design thinking | aula 2
Zimya | Design thinking | aula 2Zimya | Design thinking | aula 2
Zimya | Design thinking | aula 2
 
Telma Teixeira-OEI-escolas-bilingues
Telma Teixeira-OEI-escolas-bilinguesTelma Teixeira-OEI-escolas-bilingues
Telma Teixeira-OEI-escolas-bilingues
 
Inovação com Design Thinking
Inovação com Design ThinkingInovação com Design Thinking
Inovação com Design Thinking
 
Introducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareIntroducao a Arquitetura de Software
Introducao a Arquitetura de Software
 
Design Thinking - Prototipação
Design Thinking  - PrototipaçãoDesign Thinking  - Prototipação
Design Thinking - Prototipação
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao java
 

Ähnlich wie Introdução a Linguagem Java

Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01Daniel Alves
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01rollbackpt
 
Programação Desktop: Uma abordagem com Java
Programação Desktop: Uma abordagem com JavaProgramação Desktop: Uma abordagem com Java
Programação Desktop: Uma abordagem com JavaRosicleia Frasson
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java FundamentosWilson Lima
 
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaÁlvaro Farias Pinheiro
 
Aula 01 O que é java
Aula 01   O que é javaAula 01   O que é java
Aula 01 O que é javaSergio Silva
 
Conhecendo Java
Conhecendo JavaConhecendo Java
Conhecendo JavaTI Infnet
 
Java 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral DetalhadoJava 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral DetalhadoRegis Magalhães
 
Slides 04 - A Linguagem Java.pdf
Slides 04 - A Linguagem Java.pdfSlides 04 - A Linguagem Java.pdf
Slides 04 - A Linguagem Java.pdfJadna Almeida
 
Aula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem JavaAula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem JavaDaniel Brandão
 
Java: Muito mais que uma linguagem!
Java: Muito mais que uma linguagem!Java: Muito mais que uma linguagem!
Java: Muito mais que uma linguagem!Aécio Costa
 

Ähnlich wie Introdução a Linguagem Java (20)

Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01
 
Java basico modulo_01
Java basico modulo_01Java basico modulo_01
Java basico modulo_01
 
Programação Desktop: Uma abordagem com Java
Programação Desktop: Uma abordagem com JavaProgramação Desktop: Uma abordagem com Java
Programação Desktop: Uma abordagem com Java
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java Fundamentos
 
Java20141215 17[1]
Java20141215 17[1]Java20141215 17[1]
Java20141215 17[1]
 
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com Java
 
Aula 01 o que é java
Aula 01  o que é javaAula 01  o que é java
Aula 01 o que é java
 
Aula 01 O que é java
Aula 01   O que é javaAula 01   O que é java
Aula 01 O que é java
 
Java e Software Livre
Java e Software LivreJava e Software Livre
Java e Software Livre
 
POO - Aula 1 introducao
POO - Aula 1   introducaoPOO - Aula 1   introducao
POO - Aula 1 introducao
 
Conhecendo Java
Conhecendo JavaConhecendo Java
Conhecendo Java
 
Java 01 Java Visao Geral
Java 01 Java Visao GeralJava 01 Java Visao Geral
Java 01 Java Visao Geral
 
Java 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral DetalhadoJava 01 Java Visao Geral Detalhado
Java 01 Java Visao Geral Detalhado
 
Slides 04 - A Linguagem Java.pdf
Slides 04 - A Linguagem Java.pdfSlides 04 - A Linguagem Java.pdf
Slides 04 - A Linguagem Java.pdf
 
Aula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem JavaAula 2 - POO: Fundamentos da linguagem Java
Aula 2 - POO: Fundamentos da linguagem Java
 
01 introducao ao java
01   introducao ao java01   introducao ao java
01 introducao ao java
 
Java Seminar
Java SeminarJava Seminar
Java Seminar
 
Java: Muito mais que uma linguagem!
Java: Muito mais que uma linguagem!Java: Muito mais que uma linguagem!
Java: Muito mais que uma linguagem!
 

Mehr von UFPA

Design Thinking em Projetos de Engenharia de Software
Design Thinking em Projetos de Engenharia de Software 	Design Thinking em Projetos de Engenharia de Software
Design Thinking em Projetos de Engenharia de Software UFPA
 
Inovação com Software usando a metodologia Lean Startups
Inovação com Software usando a metodologia Lean StartupsInovação com Software usando a metodologia Lean Startups
Inovação com Software usando a metodologia Lean StartupsUFPA
 
Pensando seu modelo de negócio como uma Plataforma: da mercearia ao Über
Pensando seu modelo de negócio como uma Plataforma: da mercearia ao ÜberPensando seu modelo de negócio como uma Plataforma: da mercearia ao Über
Pensando seu modelo de negócio como uma Plataforma: da mercearia ao ÜberUFPA
 
Painel Ecossistema de Empreendedorismo e Startups / ERIN 2014
Painel Ecossistema de Empreendedorismo e Startups / ERIN 2014Painel Ecossistema de Empreendedorismo e Startups / ERIN 2014
Painel Ecossistema de Empreendedorismo e Startups / ERIN 2014UFPA
 
Lean Startup - Como Validar Ideias de Negocios
Lean Startup - Como Validar Ideias de NegociosLean Startup - Como Validar Ideias de Negocios
Lean Startup - Como Validar Ideias de NegociosUFPA
 
Design Thinking -Análise e Síntese
Design Thinking -Análise e SínteseDesign Thinking -Análise e Síntese
Design Thinking -Análise e SínteseUFPA
 
Fase de Imersão com Design Thinking
Fase de Imersão com Design ThinkingFase de Imersão com Design Thinking
Fase de Imersão com Design ThinkingUFPA
 

Mehr von UFPA (7)

Design Thinking em Projetos de Engenharia de Software
Design Thinking em Projetos de Engenharia de Software 	Design Thinking em Projetos de Engenharia de Software
Design Thinking em Projetos de Engenharia de Software
 
Inovação com Software usando a metodologia Lean Startups
Inovação com Software usando a metodologia Lean StartupsInovação com Software usando a metodologia Lean Startups
Inovação com Software usando a metodologia Lean Startups
 
Pensando seu modelo de negócio como uma Plataforma: da mercearia ao Über
Pensando seu modelo de negócio como uma Plataforma: da mercearia ao ÜberPensando seu modelo de negócio como uma Plataforma: da mercearia ao Über
Pensando seu modelo de negócio como uma Plataforma: da mercearia ao Über
 
Painel Ecossistema de Empreendedorismo e Startups / ERIN 2014
Painel Ecossistema de Empreendedorismo e Startups / ERIN 2014Painel Ecossistema de Empreendedorismo e Startups / ERIN 2014
Painel Ecossistema de Empreendedorismo e Startups / ERIN 2014
 
Lean Startup - Como Validar Ideias de Negocios
Lean Startup - Como Validar Ideias de NegociosLean Startup - Como Validar Ideias de Negocios
Lean Startup - Como Validar Ideias de Negocios
 
Design Thinking -Análise e Síntese
Design Thinking -Análise e SínteseDesign Thinking -Análise e Síntese
Design Thinking -Análise e Síntese
 
Fase de Imersão com Design Thinking
Fase de Imersão com Design ThinkingFase de Imersão com Design Thinking
Fase de Imersão com Design Thinking
 

Introdução a Linguagem Java

  • 1. www.labes.ufpa.br Programação Orientada a Objetos na Linguagem Java Prof. Adailton Magalhães Lima adailton@ufpa.br
  • 4. www.labes.ufpa.br 4 •  1991 - Criado projeto ‘Oak’, linguagem precedente do Java criada para o mercado de sistemas embarcados •  1994 - Depois de frustradas tentativas de embutir ‘Oak’ em Set-top box de TV, a linguagem é revisada e têm seu compilador mudado de C para ‘Oak’ •  1995 - ‘Oak’ é rebatizada para Java e tem o lançamento oficial •  1998 - Lançado o Java 2: versão 1.2 batizada de Java 2 •  1999 - Lançada versão beta de J2EE •  2000 - Lançado o J2SE 1.3 Cronologia
  • 5. www.labes.ufpa.br 5 •  2001 - Lançamento do projeto Eclipse e do J2EE 1.3 •  2002 - Lançado Hibernate 1.0 •  2004 - Lançamento do Java 1.5 (Tiger) •  2006 – Lançado o Java 6 •  2007 – Lançado JDK completo como Open Source •  2008 – Java 7 •  2014 – Java 8 Cronologia
  • 6. www.labes.ufpa.br 6 •  A motivação inicial para Java –  “A necessidade de uma plataforma independente de linguagem que possa ser embutida em vários produtos eletrônicos de consumo como torradeiras e refrigeradores” –  Um dos primeiros projetos utilizando Java foi um controle remoto pessoal para hand-held chamado Star 7. –  Nesta mesma época a World Wide Web e a Internet vinham ganhando popularidade. –  James Gosling e companhia “sacaram” que Java poderia ser também utilizada para programação na Internet. –  Lançaram aí a tecnologia dos Applets Java. Motivação
  • 7. www.labes.ufpa.br 7 •  JavaScript é uma versão simplificada de Java? Não!! –  JavaScript é uma linguagem de script que pode ser inserida dentro de páginas web –  Foi inventada pela Netscape e originalmente chamada de LiveScript, que tem uma sintaxe parecida (mas que no fundo não tem relação direta com Java) –  Em particular, um programa JavaScript pode modificar um documento no qual está exibido (a página web). Java VS JavaScript
  • 8. www.labes.ufpa.br 8 •  Com a API Java Advanced Imaging são capturadas as imagens panorâmicas para fotografar a superfície marciana •  Em várias partes do sistema de controle existem aplicações Java que ajudam a comunicação e controle do robô da NASA em Marte •  Em várias partes existem dispositivos embarcados utilizando Java •  Em http://mars.telascience.org pode-se baixar o software Maestro (versão free de parte do código Java em Marte) Java em Marte
  • 9. www.labes.ufpa.br 9 PLATAFORMA JAVA • O  que  é  Java?   1   • Distribuições   2   • Ambiente  de  Desenvolvimento   3   • Funcionalidades  Java   4   • Fases  de  um  programa  Java   5  
  • 10. www.labes.ufpa.br 10 •  A tecnologia Java pode ser vista como : – Uma linguagem de programação – Um ambiente de desenvolvimento – Um ambiente para aplicações – Um ambiente de implantação O que é Java?
  • 11. www.labes.ufpa.br 11 •  Java é uma linguagem de programação Orientada a Objetos com uma sintaxe semelhante a C/C++ e que gera programas multiplataformas. •  Java pode criar qualquer tipo de aplicação que se pode criar com uma linguagem de programação convencional. O que é Java?
  • 12. www.labes.ufpa.br 12 •  Java permite o desenvolvimento de aplicações para uma série de plataformas. •  É possível ter software Java desde de dispositivos como telefones celulares, até computadores de grande porte, como os mainframes. •  Devido a essa característica, a linguagem Java conta com três conhecidas distribuições para ambientes de desenvolvimento: –  JSE (antigamente J2SE) –  JEE (antigamente J2EE) –  JME (antigamente J2ME) Distribuições
  • 13. www.labes.ufpa.br 13 JSE (Java Standard Edition) •  É o ambiente de desenvolvimento com uso voltado a micros e servidores •  Essa é a plataforma principal, já que, de uma forma ou de outra, o JEE e o JME têm no JSE sua base. •  Assim, os outros ambientes de desenvolvimento são versões aprimoradas do JSE para as aplicações a que se propõem. •  Por ser a plataforma mais abrangente do Java, o JSE é a mais indicada para quem quer aprender a linguagem. Distribuições
  • 14. www.labes.ufpa.br 14 JEE (Java Enterprise Edition) •  Contém bibliotecas especialmente desenvolvidas para o acesso a servidores, a sistemas de e-mail, a banco de dados, etc. •  Contém uma série de especificações, cada uma com funcionalidades distintas. Entre elas, tem-se: –  JDBC (Java Database Connectivity), utilizado no acesso a banco de dados; –  Servlets, uma API para o desenvolvimento de aplicações Web. Este recurso "estende" o funcionamento dos servidores Web, permitindo a geração de conteúdo dinâmico nos sites. –  JSP (Java Server Pages), permite script para criação de páginas dinâmicas como uma abstração sobre a tecnologia de Servlets Distribuições
  • 15. www.labes.ufpa.br 15 JME (Java Micro Edition) •  É o ambiente de desenvolvimento para dispositivos móveis ou portáteis, como telefones celulares e palmtops. •  Como a linguagem Java já era conhecida e a adaptação ao JME não é complicada, logo surgiram diversos tipos de aplicativos para tais dispositivos, como jogos e agendas eletrônicas. •  As empresas saíram ganhando com isso porque, desde que seus dispositivos tenham uma JVM (Máquina Virtual Java), é possível, com poucas modificações, implementar os aplicativos em qualquer aparelho, sendo o único limite a capacidade do hardware. Distribuições
  • 16. www.labes.ufpa.br 16 •  Em seu ambiente de desenvolvimento, Java provê algumas ferramentas: – Um compilador (javac) – Um interpretador (java) – Um gerador de documentação (javadoc) – Um aplicativo para empacotamento de classes (jar) – Um registro e compilador para aplicações distribuídas (rmiregistry e rmic) – Entre outras funcionalidades Ambiente de Desenvolvimento
  • 17. www.labes.ufpa.br 17 •  Tecnologias de aplicação Java são tipicamente programas de propósito geral que executam em qualquer máquina onde haja uma ambiente de execução Java (JRE- Java Runtime Environment) •  Existem dois ambientes principais de instalação: 1.  A JRE contém todos os arquivos de classes para os pacotes Java, incluindo classes básicas da linguagem, componentes de GUI, entre outras. 2.  O Web Browser, onde muitos provêem um interpretador Java e um ambiente de execução. Ambiente de Desenvolvimento
  • 18. www.labes.ufpa.br 18 •  Algumas funcionalidades do Java: – Máquina Virtual – Coletor de Lixo (Garbage Collection) – Segurança de Código Funcionalidades Java
  • 19. www.labes.ufpa.br 19 •  Máquina Virtual ou Java Virtual Machine (JVM) –  É uma máquina abstrata que é implementada pela emulação de software em tempo real –  Provê a especificação da plataforma de hardware para compilação do código Java •  A JVM interpreta Bytecode –  Bytecode é uma linguagem de máquina especial que pode ser entendida pela JVM –  Esta linguagem é independente de qualquer hardware particular de computador, de tal forma que qualquer computador com um interpretador Java possa executar o programa não importando a máquina em que o código foi compilado. Funcionalidades Java
  • 20. www.labes.ufpa.br 20 •  Coletor de Lixo ou Garbage Collector (GC): –  A linha de execução do GC é responsável pela liberação de qualquer memória não mais utilizada por programas Java. –  Isto acontece automaticamente durante o tempo de execução do programa Java » VANTAGEM: O programador fica livre da tarefa de alocar e desalocar memória manualmente Funcionalidades Java
  • 21. www.labes.ufpa.br 21 •  Segurança de Código: •  Segurança de código é provida na implementação da JRE. •  Desta forma, para executar o código, a JRE utiliza o ClassLoader para carregar o código e verifica o código(através do verificador de bytecode) •  O ClassLoader carrega todas as classes, onde determina o layout de memória em tempo de execução, para protegê-la de acesso desautorizado. •  O Verificador de Bytecode procura no formato dos fragmentos do código acessos ilegais que possam violar direitos de acesso aos objetos Funcionalidades Java
  • 22. www.labes.ufpa.br 22 Editor disco Programa é criado em um editor e armazenado no disco Compilador disco Compilador gera os bytecodes e os armazena no disco Carregador de classes disco O carregador de classes – Class Loader – coloca os bytecodes na memória _______ _______ _______ _______ __ memória Verificador de bytecodes O verificador de bytecodes – Bytecodes Verifier – confirma se todos os bytecodes estão corretos e não violam as restrições de segurança da linguagem Java ________ ________ ________ ______ memória Interpretador O interpretador lê os bytecodes e executa o programa ________ ________ ________ ______ memória FasesdeumprogramaJava Tempo +
  • 24. www.labes.ufpa.br 24 O procedimento de instalação do Java consiste em 3 passos principais: Instalação Instalação  do  JDK   Configuração  do  PATH   Teste  usando  linha  de   comando  
  • 25. www.labes.ufpa.br 25 •  Instalação do JDK –  Execute o instalador e siga os passos até o fim Instalação
  • 27. www.labes.ufpa.br 27 •  Configuração do PATH •  Após a instalação do JDK, é preciso realizar as seguintes etapas adicionais: – Adicionar o diretório bin do jdk no PATH de execução do SO (Sistema Operacional) – Tais etapas variam de acordo com o SO •  A seguir serão apresentados os passos nos sistemas Windows® e Linux Instalação
  • 28. www.labes.ufpa.br 28 •  Configuração do PATH (LINUX) •  Em Linux, o procedimento para edição do PATH de execução depende do shell que está usando. •  Se está utilizando o Bourne Again shell (que é o default do Linux), adicione a seguinte linha ao final do arquivo ~/.bashrc ou ~/.bash_profile: –  export PATH=/usr/local/jdk/bin:$PATH –  onde ”/usr/local/jdk” pode variar de acordo com a opção de instalação –  DICA: Se está no MacOSX, edite o arquivo ~/.profile com o mesmo comando Linux Instalação
  • 29. www.labes.ufpa.br 29 •  Configuração do PATH (Windows) •  No Windows, é preciso fazer login como administrador. •  Basta: 1 - iniciar o “Painel de Controle”; 2 - selecionar o ícone “Sistema”; 3 – selecionar a aba “Avançado” Instalação
  • 30. www.labes.ufpa.br 30 •  Configuração do PATH (Windows)(cont.) 4 - clique no botão “Variáveis de Ambiente”; 5 - navegue até encontrar a propriedade PATH, onde deve-se editar e adicionar o caminho completo do diretório; 6- salvar as configurações. Instalação Editar Para editar o path, basta colocar um “;” ao final do conteúdo e adicionar o caminho do diretório bin do jdk Exemplo: “; C:Arquivos de programasJava jdk1.6.0_03bin” Obs: Sem as aspas
  • 31. www.labes.ufpa.br 31 •  Teste usando linha de comando •  Independente do SO, em um shell aberto digite: –  java -version •  Pressione ENTER. Você deve visualizar algo parecido com: Instalação
  • 33. www.labes.ufpa.br 33 Programa “Hello World” public class Hello { /** * Meu primeiro programa Java */ public static void main(String[]args){ //escreve a string “Hello World” na tela System.out.println(“Hello world”); } }
  • 34. www.labes.ufpa.br 34 ●  Indica o nome da classe que é Hello ●  Em Java, todo código deve ser colocado dentro de uma declaração de classe ●  A classe utiliza o identificador de acesso public, que indica que esta classe é acessível a outras classes de outros pacotes. Definição de Classe public class Hello { /** * Meu primeiro programa Java */
  • 35. www.labes.ufpa.br 35 ●  As linhas destacadas indicam comentários Java ●  Um comentário: -  U)lizado  para  documentar  uma  parte  de  código   -  É  uma  boa  prá)ca  de  programação  adicionar  comentários  ao   código.   Comentários public class Hello { /** * Meu primeiro programa Java */ … //escreve a string “Hello world” na tela
  • 36. www.labes.ufpa.br 36 ●  Indica o nome do método Hello que é o principal de um programa Java. ●  O método main é o ponto de partida de um programa Java ●  Todos os programas, exceto pelos Applets, iniciam a partir de um método main. ●  É necessário que a assinatura esteja correta (com um array de string passado como parâmetro). Método main public class Hello { /** * Meu primeiro programa Java */ public static void main( String[] args ){
  • 37. www.labes.ufpa.br 37 ● O comando System.out.println() escreve o texto passado como parâmetro entre aspas. Comando de escrita public class Hello { /** * My first Java program */ public static void main( String[] args ){ //prints the string “Hello world” on screen System.out.println(“Hello world”);
  • 39. www.labes.ufpa.br 39 Definição de IDE IDE vem do inglês Integrated Development Environment ou Ambiente Integrado de Desenvolvimento É um programa de computador que reúne características e ferramentas de apoio ao desenvolvimento de software com o objetivo de agilizar este processo. Geralmente facilitam a técnica RAD (de Rapid Application Development, ou "Desenvolvimento Rápido de Aplicativos"), que visa a maior produtividade dos desenvolvedores.
  • 40. www.labes.ufpa.br 40 •  As características e ferramentas mais comuns encontradas nos IDEs são: –  Editor –  Compilador –  Linker –  Depurador (debugger) –  Modelagem (modelling) –  Geração de código –  Distribuição (deploy) –  Testes Automatizados (automated tests) –  Refatoração (refactoring) Definição de IDE
  • 41. www.labes.ufpa.br 41 •  Dentre as várias IDES existentes, pode-se destacar as seguintes IDEs que dão apoio ao desenvolvimento em Java: •  IntelliJ IDEA - paga •  Eclipse - livre •  NetBeans - livre •  JBuilder - paga •  Sun Java Studio Enterprise •  Jedit •  BlueJ •  OptimalJ IDEs Java Existentes
  • 42. www.labes.ufpa.br 42 •  De forma resumida: •  Em geral comparar IDEs é algo polêmico, pois depende muito da necessidade atual de cada desenvolvedor •  Dentre as IDEs pagas, IntelliJ e JBuilder se destacam por oferecer diversos componentes “pré-fabricados” para apoio ao desenvolvimento RAD. •  Dentre as IDEs livres, Eclipse e NetBeans são líderes de mercado IDEs Java Existentes
  • 43. www.labes.ufpa.br 43 •  A seguir neste curso serão apresentados de forma resumida o processo de instalação do NetBeans e do Eclipse. •  Neste curso, a utilização de uma IDE é necessária para simplificar o processo de c o m p i l a ç ã o e t e s t e d o s c ó d i g o s desenvolvidos IDEs Java Existentes
  • 44. www.labes.ufpa.br 44 Instalando NetBeans 1- execute o instalador 2- defina componentes 4- confirme instalação 3- confirmar local de instalação 5- feche instalador
  • 45. www.labes.ufpa.br 45 •  Após instalar, basta executar o aplicativo e terá acesso à interface do usuário: Instalando NetBeans
  • 46. www.labes.ufpa.br 46 Instalando Eclipse 1- inicie instalação 2- defina local de instalação 3- Aguarde e finalize
  • 47. www.labes.ufpa.br 47 Instalando Eclipse Após instalar, basta executar o aplicativo e terá acesso à interface do usuário:
  • 49. www.labes.ufpa.br 49 Partes básicas de um programa Java • Sentenças  e  Blocos  1   • IdenHficadores  2   • Palavras  Reservadas  3   • Variáveis  4   • Literais  5   • Tipos  PrimiHvos  6  
  • 50. www.labes.ufpa.br 50 •  Sentença – Uma ou mais linhas de código terminado por um ponto e vírgula – Exemplo: System.out.println(“Hello world”); Sentenças e Blocos
  • 51. www.labes.ufpa.br 51 •  Bloco –  É uma ou mais sentenças circundada por uma abertura e fechamento de chaves que agrupam as sentenças como uma unidade. –  Blocos de sentenças podem ser encadeados infinitamente. –  É permitida qualquer quantidade de espaços em branco. –  Exemplo: public static void main( String[] args ){ System.out.println("Hello"); System.out.println("world”); } Sentenças e Blocos
  • 52. www.labes.ufpa.br 52 1. Na criação de blocos, é permitido colocar a chave junto com a sentença. Por exemplo: public static void main( String[] args ){ ou é permitida a chave na próxima linha, como, public static void main( String[] args )‫‏‬ { 2. É recomendada a identacão das sentenças após o início de um bloco. Por exemplo: public static void main( String[] Sentenças e Blocos
  • 53. www.labes.ufpa.br 53 •  Identificadores –  São tokens que representam nomes de variáveis, métodos, classes, etc. –  Exemplos de identificadores são: Hello, main, System, out. •  Da mesma forma que C e C++, identificadores Java são sensíveis ao caso. –  Isto significa que o identificador Hello não é o mesmo que hello. Identificadores
  • 54. www.labes.ufpa.br 54 •  Identificadores podem iniciar com uma letra, underscore “_”, ou um sinal de “$”. •  Letras podem ser minúsculas ou MAIUSCULAS •  Caracteres subseqüentes podem ser números de 0 a 9. •  Identificadores não podem utilizar palavras chave do Java, como class, public, void, etc. Identificadores
  • 55. www.labes.ufpa.br 55 1. Para nomes de classes, recomenda-se por a primeira letra da palavra como maiúsculo: ExemploDeNomeParaClasse 2. Para nomes de métodos e variáveis, a primeira letra deve ser minúscula: esteNomeDeMetodoExemplo Identificadores
  • 56. www.labes.ufpa.br 56 3. No caso de identificadores com várias palavras, use maiúsculo para iniciar cada palavra exceto a primeira: charArray, fileNumber, ClassName. 4. Evite o uso de underscores no início de identificador como em _read ou _write. Identificadores
  • 57. www.labes.ufpa.br 57 •  Palavras reservadas são identificadores pré- definidos reservados pelo Java para um propósito específico. •  Não é permitido utilizar palavras chave como nomes de variáveis, classes, métodos, etc. •  A seguir é mostrada uma tabelas com as palavras reservadas do Java Palavras Reservadas
  • 58. www.labes.ufpa.br 58 Palavras Reservadas *- const e goto são palavras reservadas, mas não são utilizadas atualmente pelo Java
  • 59. www.labes.ufpa.br 59 •  Uma variável representa um item de dado que é utilizado para armazenar estado de objetos. •  Uma variável contém: –  Tipo de dado •  O tipo de dado indica o tipo de valores que a variável pode possuir. –  Nome •  O nome da variável segue as regras para identificadores. Variáveis
  • 60. www.labes.ufpa.br 60 •  A declaração de variáveis segue a seguinte estrutura: <tipo de dado> <nome> [=valor inicial]; •  Nota: Valores entre <> são obrigatórios, enquanto valores entre [] são opcionais. Variáveis
  • 61. www.labes.ufpa.br 61 Variáveis package br.eln.java; public class ExemploDeVariaveis {   public static void main( String[] args ){ //declara um tipo de dado com o nome da variável // result é do tipo de dado boolean boolean result;   //declara um tipo de dado com o nome da variável // option é do tipo de dado char char option; option = 'C'; //atribui 'C' em option   //declara um tipo de dado com o nome da variável /*grade é do tipo de dado double que é inicializado para 0.0 */ double grade = 0.0; } }
  • 62. www.labes.ufpa.br 62 1. É sempre bom inicializar variáveis na sua declaração. 2. Declare uma variável por linha de código. Por exemplos, a declaração de variáveis a seguir double exam=0; double quiz=10; double grade = 0; é preferível ao invés da seguinte, double exam=0, quiz=10, grade=0; Variáveis
  • 63. www.labes.ufpa.br 63 Variáveis Tipo de dado Valor Default byte/short/int 0 long 0L float 0.0F double 0.0 boolean false char ‘u0000’ Object null Tabela que mostra os valores default de tipos de variáveis Java:
  • 64. www.labes.ufpa.br 64 •  Literais são tokens que não são modificados, ou seja, são constantes. •  Diferentes tipos de literais em Java são: –  Literais Inteiros –  Literais de Ponto Flutuante –  Literais Booleanos –  Literais Caracteres –  Literais String Literais
  • 65. www.labes.ufpa.br 65 Literais Inteiros •  Podem ser definidos em diferentes formatos: –  Decimal (base 10) •  Sem notação especial •  exemplo: 12 –  Hexadecimal (base 16) •  Precedido por 0x ou 0X (zero) •  Exemplo: –  Octal (base 8) •  Precedido por 0 (zero) •  Exemplo: Literais int octal = 014; int octal2= 08; int hexadecimal = 0XC; int hexadecimal2 = 0xD; valor excede escala octal que vai até “07”
  • 66. www.labes.ufpa.br 66 Literais de Ponto Flutuante •  Representam decimais com partes fracionárias: –  Exemplo: 3.1416 •  Podem ser expressados segundo duas notações: –  Padrão –  Científica‫‏‬ Literais double pFlutuante1 = 583.45; double pFlutuante2 = 58345e-2; // 583.45 double pFlutuante3 = 58345E-2; // 583.45 long pFlutuante4 = 583.45; Java não permite literal de ponto flutuante para long, que não possui ponto flutuantes O uso de “e” e “E” na notação não muda o resultad double ou float
  • 67. www.labes.ufpa.br 67 Literais Booleanos •  Podem possuir somente dois valores: –  true ou false. Literais boolean bool1 = true; boolean bool2 = false; boolean bool3 = 1; Diferente de outras linguagens, como C/C++, variáveis booleanas podem receber apenas valores booleanos(true/ false), não sendo permitida a utilização de atribuição e testes utilizando números inteiros
  • 68. www.labes.ufpa.br 68 Literais Caracteres •  No Java, literais caracteres representam um único código Unico de caracteres Caracter Unicode: –  Um caracter com conjunto de 16-bits que substitui o antigo conjunto ASCII de 8-bits –  O Unicode permite a inclusão de símbolos e caracteres especiais de outras linguagens além do inglês. Literais
  • 69. www.labes.ufpa.br 69 Literais Caracteres •  Por exemplo: –  A letra a é representada como ‘a’. •  Caracteres Especiais Literais Função Caracter Line break ‘n’ Carriage return ‘r’ Backspace ‘b’
  • 70. www.labes.ufpa.br 70 Literais String •  Literais String representam múltipos caracteres e são cercados por aspas duplas (“ ”) •  Um exemplo de literal string podem ser “Hello World”. Literais
  • 71. www.labes.ufpa.br 71 •  A linguagem Java define 8 tipos de dados primitivos: –  boolean –  char –  byte –  short –  int –  long ‫‏‬ –  double –  float Tipos Primitivos
  • 72. www.labes.ufpa.br 72 Booleano •  Um tipo de dado booleano representa dois estados: verdadeiro e falso (true e false). •  Um exemplo é : boolean result = true; •  O exemplo acima declara uma variável chamada result como boolean e atribui o valor true. Tipos Primitivos
  • 73. www.labes.ufpa.br 73 Caracter •  Um tipo de dado caracter (char) representa um único código de caracter Unicode. •  Seus literais devem estar entre aspas simples (’ ’). •  Por exemplo, ‘a’ //Uma letra a ‘t’ //Tab •  Para representar caracteres especial como ' (aspas simples) ou " (aspas duplas), utilize o caracter (barra invertida). Por exemplo: ''' //Para aspas simples '"' //Para aspas duplas Tipos Primitivos
  • 74. www.labes.ufpa.br 74 Caracter – Caso String •  Apesar da String não ser um tipo de dado primitivo (é uma Classe), alguns comentários podem ser feitos: –  Uma String representa um tipo de dado que contém múltiplos caracteres. No Java, String é representado por uma classe, não é um tipo de dado primitivo. –  Possui seus literais dentro de aspas duplas (“ ”). –  Por exemplo, String message=“Hello world!”; Tipos Primitivos
  • 75. www.labes.ufpa.br 75 •  Inteiros – byte, short, int e long •  Tipos de dados inteiros em Java são de 3 formas: 2 //Valor Decimal 2 077 // 0 (zero) indica um valor octal 0xBACC //O 0x (zero e x) indica um valor hexadecimal Tipos inteiros possuem int como tipo de dado default. •  É possível atribuir um valor long adicionando a letra l ou L. •  Por exemplo: 10L Tipos Primitivos Na definição de um valor long, é preferível utilizar L (maiúsculo) ao invés de l (minúsculo), para não confundir com o dígito 1
  • 76. www.labes.ufpa.br 76 •  Tipos inteiros tem as seguintes escalas de valores: Tipos Primitivos Tipo Tamanho Range byte 8 bits - até -1 short 16 bits - até -1 int 32 bits - até -1 long 64 bits - até -1 7 2 7 2 15 2 15 2 31 2 31 2 63 2 63 2
  • 77. www.labes.ufpa.br 77 Ponto Flutuante: float e double •  Tipos de ponto flutuante possuem double como tipo de dado default. •  Literais de ponto flutuante incluem decimais: E ou e //(adiciona valor exponencial) F ou f //(atribui valor para float) D ou d //(atribuir valor para double) •  Exemplos são, 3.14 //A simples valor de ponto flutuante (double) 6.02E23 //um grande valor de ponto flutuante 2.718F //um valor float simples 123.4E+306D//um grande valor double com o D redundante Tipos Primitivos
  • 78. www.labes.ufpa.br 78 Ponto Flutuante: float e double •  Valores de ponto flutuante possuem as seguintes escalas de valores: Tipos Primitivos Tipo Tamanho Range float 32 bits - até -1 double 64 bits - até -1 31 2 63 2 31 2 63 2
  • 79. www.labes.ufpa.br 79 CLASSES, PACOTES, ATRIBUTOS E MÉTODOS • Definição  de  Classes  1   • Atributos  2   • Métodos  3   • Construtores  4   • Referência  “this”  5   • Modificadores  de  Acesso  6   • Pacotes  7  
  • 80. www.labes.ufpa.br 80 •  Para definir uma classe, escreve-se: <modificador> class <nome> { <declaracaoDeAtributo>* <declaracaoConstrutor>* <declaracaoMetodo>* } –  Onde: •  <modificador> é um modificador de acesso, onde pode ser combinado com outros tipos de modificadores. Definição de Classes
  • 81. www.labes.ufpa.br 81 public class RegistroCompra { //mais códigos serão adicionados depois } –  Onde: •  public – significa que a classe é acessível por outras classes fora do mesmo pacote •  class - usado para definir uma classe em Java •  RegistroCompra – um identificador único que descreve a classe Definição de Classes
  • 82. www.labes.ufpa.br 82 • Pense em um nome apropriado para a classe. Nunca defina nomes como XYZ ou outro nome aleatório. • Recomenda-se que nomes de classes iniciem com uma letra maiúscula • O nome do arquivo da classe deve ter o mesmo nome da classe Java. • Defina um arquivo para cada classe Java definida Definição de Classes
  • 83. www.labes.ufpa.br 83 •  Atributos em classes Java podem ser de representados por variáveis de 2 tipos: – Tipos de dados primitivos (long, char, int,...) – Referencias para Objetos (String, Pessoa, Carro, etc.) •  Os atributos de uma classe podem ser especificados como: – Variáveis de instância – Variáveis de classe Atributos
  • 84. www.labes.ufpa.br 84 •  Variáveis de Instância – Pertencem a uma instância de objeto – Valor de um atributo para um objeto é diferente das instâncias para outros objetos •  Variáveis de classes (também chamadas de variáveis membros estáticas)‫‏‬ – Variáveis que pertencem a toda a classe. – Isto significa que eles possuem o mesmo valor para todas as instâncias da mesma classe Atributos
  • 85. www.labes.ufpa.br 85 Variáveis de Instância public class RegistroCompra { // variáveis de instância private String nomeProduto; private long codigo; private Date validade; private double precoCusto; private double precoVenda; } –  Onde: •  private agora significa que as variáveis são acessadas somente dentro da classe. Outros objetos não podem acessar as variáveis diretamente. Atributos
  • 86. www.labes.ufpa.br 86 Variáveis de classes (estáticas) public class RegistroCompra { // variáveis de instância private String nomeProduto; private long codigo; private Date validade; private double precoCusto; private double precoVenda; private static int quantidaComprasFechadas; } –  É utilizado o modificador static para indicar que a variável é estática. Atributos
  • 87. www.labes.ufpa.br 87 • Declare todas as variáveis de instância logo no início da definição da classe • Declare uma variável em cada linha • Use tipos de dados adequados para cada variável • Declare variáveis de instância como privadas e defina métodos de acesso para cada. •  Conceito de encapsulamento Atributos
  • 88. www.labes.ufpa.br 88 •  Para declarar métodos em Java: <modificador> <tipoDeRetorno> <nome>(<parametros>*) { <sentencas>* } –  onde, •  <modificador> pode assumir diferentes modificadores •  <tipoDeRetorno> pode ser de qualquer tipo (incluindo void)‫‏‬ •  <nome> pode ser qualquer identificador válido •  <parametro> ::= <tipo_parametro> <nome_parametro>[,] Métodos
  • 89. www.labes.ufpa.br 89 public static int getQuantidaComprasFechadas() { return quantidaComprasFechadas; }   public static void setQuantidaComprasFechadas(int quantidaComprasFechadas) { RegistroCompra.quantidaComprasFechadas = quantidaComprasFechadas; }   public long getCodigo() { return codigo; } public void setCodigo(long codigo) { Métodos
  • 90. www.labes.ufpa.br 90 • Recomenda-se que nomes de métodos devem iniciar com minúsculo. • Recomenda-se que nomes de métodos representem ações Métodos
  • 91. www.labes.ufpa.br 91 •  Sobrescrevendo métodos –  Permite um método com mesmo nome mas com parâmetros diferentes, para ter implementação e retorno diferentes –  Pode ser utilizado quando diferentes operações possuem diferentes implementações. •  Sempre lembre que sobrescrever métodos tem as seguintes propriedades: –  O mesmo nome de método –  Diferentes para ou diferente número de parâmetros –  Tipo de retorno pode ser diferente ou o mesmo Métodos
  • 92. www.labes.ufpa.br 92 •  Construtores são chamados na instanciação de um objeto. •  Os construtores possuem as seguintes propriedades: –  Possuem o mesmo nome da classe –  Aceita modificador de acesso –  Não possuem tipo de retorno –  Não se pode acessar o construtor diretamente, somente através do operador new. Construtores
  • 93. www.labes.ufpa.br 93 public class RegistroCompra { ..... public RegistroCompra() { //adicionar codigo de inicializacao } ………. Construtores
  • 94. www.labes.ufpa.br 94 •  A referência this –  refere-se à instância do objeto corrente –  utilizado para acessar variáveis de instância. –  Só é permitido acesso para variáveis de instância e NÃO para variáveis de classe (estáticas) Referência “this”
  • 95. www.labes.ufpa.br 95 public class RegistroCompra { ..... private long codigo; public void setCodigo(long codigo) { this.codigo = codigo; } ………. Referência “this”
  • 96. www.labes.ufpa.br 96 •  Existem quatro diferentes tipos de modificadores de acesso em Java: –  public (Menos restritivo)‫‏‬ –  protected –  private (Mais restritivo)‫‏‬ –  default •  Os três primeiros modificadores de acesso são explicitamente escritos em código para indicar o tipo de acesso, o quarto que é default não necessita ser utilizado obrigatoriamente. Modificadores de Acesso
  • 97. www.labes.ufpa.br 97 Modificadores de Acesso private default/package protected public Mesma Classe Sim Sim Sim Sim Mesmo Pacote Não Sim Sim Sim Pacote diferente (sub-classe) Não Não Sim Sim Pacote diferente (não é sub-classe) Não Não Não Sim
  • 98. www.labes.ufpa.br 98 •  Um pacote é um agrupamento de tipos relacionados provendo gerência de proteção de acesso e espaço de nomes – Note que tipos refere-se a classes, interfaces, enumerações e tipos de anotações (os dois últimos são novos recursos a partir de Java 5). Pacotes
  • 99. www.labes.ufpa.br 99 Benefícios: •  Facilita a identificação de classes e interfaces relacionados. •  Os nomes de pacotes devem ser diferentes de existentes, para evitar conflito de espaços de nomes. •  É possível permitir dentro do pacote acesso irrestrito de fora assim como restringir acesso de outros pacotes externos. Pacotes
  • 100. www.labes.ufpa.br 100 •  Para definir uma classe em um pacote, basta escrever o seguinte na primeira linha do código: package br.java.meupacote; public class MinhaClasse{ ……. } Pacotes
  • 101. www.labes.ufpa.br 101 Importando Pacotes: •  Para estar habilitado a utilizar classes fora do mesmo pacote que a classe atual pertence é necessário importar explicitamente o pacote das classes. •  Por default, todos os programas Java importam o pacote java.lang.*, o que permite a utilização de String e Integer dentro do programa sem ter importado qualquer pacote. •  A sintaxe de import é: import br.java.meuPacote.*; import br.java.novoPacote.UmaClasse; Pacotes
  • 102. www.labes.ufpa.br 102 • O pacote java.lang.* é composto por aquelas classes que encapsulam os tipos primitivos da linguagem (Wrapper Classes) Pacotes Boolean - encapsula um primitivo boolean Character - encapsula um primitivo char Double - encapsula um primitivo double Float - encapsula um primitivo float Integer - encapsula um primitivo int Long - encapsula um primitivo long String - encapsula uma cadeia de caracteres
  • 103. www.labes.ufpa.br 103 HERANÇA, INTERFACES E CASTING • Herança  1   • Classes  Abstratas  2   • Interfaces  3   • CasHng  de  Tipos  4  
  • 104. www.labes.ufpa.br 104 •  Herança é o conceito aplicado quando um filho para uma classe (também chamado de sub classe) automaticamente herda variáveis e métodos da classe pai (super classe). •  É uma das funcionalidades principais da programação orientada a objetos •  Como benefício, permite o reuso de métodos e atributos, que são automaticamente compartilhados entre classes e subclasses •  Cada subclasse fica responsável por estender e modificar o comportamento herdado Herança
  • 105. www.labes.ufpa.br 105 •  A palavra chave extends permite a herança em Java •  A sub classe herda todos os membros “public” e “protected” (atributos e métodos) do pai, não importando a qual pacote a sub classe pertence •  Se a sub classe está no mesmo pacote que o pai, ela também herda os membros ”private” (atributos e métodos) do pai Herança public class Funcionario extends Pessoa { private String nomeEmpresa; protected int cargaHoraria; . . . . }
  • 106. www.labes.ufpa.br 106 •  Os atributos herdados podem ser utilizados diretamente, assim como qualquer atributo. •  É permitido declarar novos atributos na sub classe que não existam na super classe •  É permitido declarar um atributo com o mesmo nome do que existe na super classe, dessa forma escondendo o atributo original (não recomendado). •  A sub classe não tem acesso aos membros privados da classe pai. Mesmo assim, se a super classe tem método público ou protegido para acessar o atributo privados a sub classe poderá ter acesso aos dados. Herança
  • 107. www.labes.ufpa.br 107 •  Em Java , a classe Object é a “mãe” de todas as classes –  Todas as classes estendem da super classe Object –  A classe Object é a única classe que não tem super classe •  Object define e implementa comportamento comum para todas as classes: –  getClass()‫‏‬ –  equals()‫‏‬ –  toString()‫‏‬ –  … Herança Object   ClasseA   ClasseB   ClasseC  
  • 108. www.labes.ufpa.br 108 Classes Final –  Classes que não podem ser estendidas –  Para declarar uma classe final: public final NomeClasse { . . . } Métodos Final –  Métodos que não podem ser sobrescritos –  Basta colocar o termo final na definição do método •  Métodos static são automaticamente final Herança
  • 109. www.labes.ufpa.br 109 •  Uma classe abstrata é uma classe que contém um ou mais métodos abtsratos •  Uma classe abstrata não pode ser instanciada // O seguinte código vai dar erro de compilação MinhaClasseAbstrata a1 = new MinhaClasseAbstrata(); •  Qualquer outra classe (classe concreta) deve prover a implementação dos métodos abstratos Classes Abstratas
  • 110. www.labes.ufpa.br 110 Classes Abstratas public abstract class SerVivo { public void respira() { System.out.println("Ser vivo respirando..."); } public void come() { System.out.println("Ser vivo comendo..."); } /** * Método abstrato anda() * Este método deve ser implementado por uma classe concreta */ public abstract void anda(); }
  • 111. www.labes.ufpa.br 111 •  Quando uma classe concreta estende a classe abstrata SerVivo, deve implementar o método abstrato anda(), ou então a subclasse também deve ser uma classe abstrata (e não poderá ser instanciada) Classes Abstratas public class Homem extends SerVivo {   @Override public void anda() { System.out.println("Homem andando ... "); }   }
  • 112. www.labes.ufpa.br 112 •  Define um modo padrão e público de especificar o comportamento de classes (como um contrato) •  Todos os métodos de uma interface são abstratos •  Uma classe concreta deve implementar a interface •  Isto permite que diferentes classes implementam um comportamento em comum Interfaces
  • 113. www.labes.ufpa.br CapacitaçãoEletronorte–2007-2008 113 l  Como exemplo, a interface Relacao é definida para representar os métodos que representam a relação natural entre objetos Interfaces public interface Relacao { public boolean maior(Object a, Object b);   public boolean menor(Object a, Object b);   public boolean igual(Object a, Object b); }
  • 114. www.labes.ufpa.br CapacitaçãoEletronorte–2007-2008 114 Interfaces public boolean igual(Object a, Object b) { double aLen = ((Linha) a).getTamanho(); double bLen = ((Linha) b).getTamanho(); return (aLen == bLen); }   public boolean maior(Object a, Object b) { double aLen = ((Linha) a).getTamanho(); double bLen = ((Linha) b).getTamanho(); return (aLen > bLen); }   public boolean menor(Object a, Object b) { double aLen = ((Linha) a).getTamanho(); double bLen = ((Linha) b).getTamanho(); return (aLen < bLen); } } public class Linha implements Relacao {   private double x1; private double x2; private double y1; private double y2;   public Linha(double x1, double x2, double y1, double y2) { this.x1 = x1; this.x2 = x2; this.y1 = y1; this.y2 = y2; }   public double getTamanho() { double length = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); return length; }  
  • 115. www.labes.ufpa.br CapacitaçãoEletronorte–2007-2008 115 Relacionamento com Classes l  Uma classe concreta pode ter somente uma super classe, mas por outro lado pode implementar várias interfaces -  Java não permite herança múltipla, mas interfaces fornecem uma alternativa. l  Todos os métodos abstratos de todas as interfaces devem ser implementados por uma classe concreta Interfaces
  • 116. www.labes.ufpa.br 116 Herança entre Interfaces •  Interfaces não fazem parte da hierarquia de classes •  Porém, interface podem ter relacionamentos de herança entre si Interfaces public interface RelacaoAmpliada extends Relacao{ public boolean diferenca(Object a, Object b);   }
  • 117. www.labes.ufpa.br 117 •  Quando uma instância de objeto é criada de uma classe, pode-se afirmar que o objeto é do “tipo”da classe e das super classes •  Uma instância de objeto de um tipo em particular pode ser utilizada em qualquer lugar onde seu tipo e os super tipos são invocados (incluindo interfaces implementadas) Casting de Tipos
  • 118. www.labes.ufpa.br 118 •  Exemplo: –  contaCorrente1 é um objeto do tipo de ContaBancaria –  O objeto contaCorrente1 pode ser chamado em qualquer lugar onde uma instância de ContaBancaria é chamada •  Isto permite o chamado polimorfismo Casting de Tipos
  • 119. www.labes.ufpa.br 119 Casting Implícito •  Uma instância de uma sub classe pode ser atribuída a uma variável de uma super classe através do casting implícito •  Exemple ContaCorrente contCorrente = new ContaCorrente(); Poupanca poupanca = new Poupanca(); ContaBancaria conta = contCorrente; // Casting implícito ContaBancaria conta2 = poupanca; // Casting implícito Object objeto = poupanca; // Casting implícito Casting de Tipos
  • 120. www.labes.ufpa.br 120 Casting Explícito •  Uma instância de objeto de uma super classe deve ser atribuída a uma variável de uma classe filha através do casting explícito (se não fizer isso é lançado erro de compilação) •  Exemplo: Casting de Tipos ContaBancaria conta = new ContaCorrente(); ContaCorrente contaCorrente = (ContaCorrente) conta; ContaBancaria conta = new Poupanca(); ContaCorrente contaCorrente = (ContaCorrente) conta; Não lança erro de compilação, mas lança erro em tempo de execução
  • 121. www.labes.ufpa.br 121 Operador instanceof •  É possível checar o tipo de uma instância de objeto utilizando instanceof antes do casting de tipos •  Exemplo ContaBancaria conta1 = new ContaCorrente(); ContaBancaria conta2 = new Poupanca(); if( conta2 instanceof ContaCorrente ) { ContaCorrente contaCorrente = (ContaCorrente) conta2; } Casting de Tipos
  • 123. www.labes.ufpa.br 123 – Dado o modelo UML anterior: – Crie classes Java e Atributos • Quando necessário, considere classes abstratas e herança • Diferencie varáveis de instância e de classe • Organize as classes em pacotes Java Exercício
  • 124. www.labes.ufpa.br 124 ESTRUTURAS DE CONTROLE •  Estruturas  de  Decisão   1   •  Estruturas  de  RepeHção   2   •  Estruturas  de   Redirecionamento  3  
  • 125. www.labes.ufpa.br 125 •  Em Java existem 3 tipos de estruturas de controle –  Estruturas de controle de decisão •  Permitem selecionar seções específicas do código para serem executadas (if-then-else, swicth) –  Estruturas de controle de repetição •  Permitem executar seções específicas um número repetido de vezes (while, for, do-while) –  Estruturas de controle de redirecionamento •  Permitem redirecionar o fluxo de execução de comandos (break, continue, return ); Estruturas de Controle
  • 126. www.labes.ufpa.br 126 •  Estruturas de Decisão podem ser dos seguintes tipos: – Sentenças if – Sentenças if-else – Sentenças If-else-if – Sentenças switch Estruturas de Decisão
  • 127. www.labes.ufpa.br 127 ●  Sentenças if –  Especificam que a sentença (ou bloco de código) será executada somente se uma certa expressão booleana for verdadeira. if( expre_booleana ) sentença; ou if( expre_booleana ){ sentença; sentença; } –  Onde, •  expre_booleana representa uma expressão Estruturas de Decisão
  • 129. www.labes.ufpa.br 129 Sentenças if-else –  Utilizadas quando se deseja executar algo quando a sentença é verdadeira, e algo diferentes quando é falsa. if( expre_booleana ){ sentença; } else{ sentença; } Estruturas de Decisão
  • 130. www.labes.ufpa.br 130 Estruturas de Decisão Sentença true false ●  Sentenças if-else Sentença
  • 131. www.labes.ufpa.br 131 ●  Sentenças If-else-If •  A sentença em uma cláusula else pode ser outra estrutura if- else. •  Este encadeamento de estruturas permite a criação de seleções mais complexas. if( expre_booleana ){ sentença; } else if( expre_booleana ) { sentença; } else if( expre_booleana ) { sentença; } else { sentença; Estruturas de Decisão
  • 132. www.labes.ufpa.br 132 Estruturas de Decisão Sentença true false ●  Sentenças if-else-if Sentença true false
  • 133. www.labes.ufpa.br 133 Erros Comuns 1. Não utilizar uma expressão booelana no if. Por exemplo //ERRADO int number = 0; if( number ){ //alguma sentença } A variável number não possui um valor booleano (Este caso difere Java de C/C++, onde este exemplo acima estaria correto). 2. Escrever elseif (junto) ao invés de else if (separado). Estruturas de Decisão
  • 134. www.labes.ufpa.br 134 Erros Comuns 3. Utilizar = ao invés de == para comparação. O correto é utilizar: int number = 0; if( number == 0 ){ //alguma sentença } Estruturas de Decisão
  • 135. www.labes.ufpa.br 135 Sentenças switch –  Permitem múltiplos testes simultâneos. •  Setenças switch possuem a seguite forma: switch( expres_switch){ case seletor1: sentença; break; case seletor2: sentença; break; ..... default: sentença; } Estruturas de Decisão Onde: express_switch: pode ser um valor inteiro ou caracter seletor1..n: um valor inteiro único ou uma constante caracter
  • 137. www.labes.ufpa.br 137 •  Estruturas de decisão podem ser dos seguintes tipos: – Loop while – Loop do-while – Loop for Estruturas de Repetição
  • 138. www.labes.ufpa.br 138 Loop while –  É uma sentença ou bloco que é repetido enquanto alguma condição é satisfeita. while( expre_booleana ){ sentença1; sentença2; . . . } –  Enquanto expre_booleana é verdadeira as sentenças do loop são executadas. Estruturas de Repetição
  • 139. www.labes.ufpa.br 139 Loop do-while –  similar ao loop while –  A principal diferença é: •  Os comandos dentro do loop do-while são executados no mínimo uma vez. do{ sentença1; sentença2; . . . }while( boolean_expression ); Estruturas de Repetição
  • 140. www.labes.ufpa.br 140 Loop for –  Permite a execução do mesmo código um número específico de vezes. for(expressaoDeInicializacao;condLoop;expressaoEmCadaPasso) { sentença1; sentença2; . . . } Onde: •  expressaoDeInicializacao –inicializa variável de loop. •  condLoop – compara a variável de loop com algum valor limite. •  expressaoEmCadaPasso - atualiza a variável de loop. Estruturas de Repetição
  • 141. www.labes.ufpa.br 141 •  O código acima é equivalente ao seguinte loop while Estruturas de Repetição int i; for( i = 0; i < 10; i++ ){ System.out.println(i); } int i = 0; while( i < 10 ){ System.out.print(i); i++; } Loop for: Exemplo
  • 142. www.labes.ufpa.br 142 •  Java possui 3 tipo de estruturas de redirecionamento: – break – continue – return Estruturas de Redirecionamento
  • 143. www.labes.ufpa.br 143 Break sem marcador –  Finaliza o comando switch atual, e segue o fluxo de controle para a sentença imediatamente posterior ao switch. –  Isto pode também ser aplicado para finalizar um loop for, while ou do-while Estruturas de Redirecionamento for (int i = 0; i < nomes.length; i++) { if (nomeBusca.equals(nomes[i]) { achou=true break; } }
  • 144. www.labes.ufpa.br 144 •  Break com marcador –  Finalizar um comando externo ao contexto atual, que é identificado por um marcador no comando break. –  O fluxo de controle é transferido para a sentença imediatamente após a sentença marcada. –  O trecho de programa a seguir representa uma busca em um array de duas dimensões. Dois loops encadeados varrem o array. Quando o valor é encontrado o break com marcador finaliza o comando “marcacaoBusca”, que é um loop externo Estruturas de Redirecionamento
  • 145. www.labes.ufpa.br 145 int[][] numeros = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; int numeroBusca = 5; boolean encontrouNumero = false; marcacaoBusca: for (int i = 0; i < numeros.length; i++) { for (int j = 0; j < numeros[i].length; j++) { if (numeroBusca == numeros[i][j]) { encontrouNumero = true; break marcacaoBusca; } } } if (encontrouNumero) Estruturas de Redirecionamento Break com marcador: Exemplo Finaliza o for externo marcado
  • 146. www.labes.ufpa.br 146 •  Continue sem marcador –  Simplesmente pula a iteração atual de um loop Estruturas de Redirecionamento String  nomes[]  =  {  "Java",  "C",  "C++",  "Java"  };      int  quan)dade  =  0;          for  (int  i  =  0;  i  <  nomes.length;  i++)  {        if  (nomes[i].equals("Java"))  {          conHnue;  //  pula  o  proximo  comando        }        quan)dade++;      }    System.out.println("Existem  "  +  quan)dade  +  "  nomes  Java  na  lista");  
  • 147. www.labes.ufpa.br 147 •  Continue com marcador –  Pula a iteração corrente e continua o fluxo para um loop externo devidamente marcado Estruturas de Redirecionamento loopExterno: for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { System.out.println("Dentro do for j"); // mensagem1 if (j == 2) continue loopExterno; } System.out.println("Dentro do for i"); // mensagem2 } Nunca chega exibir a mensagem2 Quantas vezes a mensagem1 é exibida?
  • 148. www.labes.ufpa.br 148 Return –  Utilizado para sair do método corrente –  Fluxo de controle retorna ao comando que invocou o método originalmente. Estruturas de Redirecionamento public String ComandoReturn(){ return "TextoQualquer"; } Em método void, basta colocar return;
  • 149. www.labes.ufpa.br 149 TRATAMENTO DE EXCEÇÕES • O  que  é  uma  Exceção?   1   • Tratamento  de  exceções   com  try/catch  2   • Criando  e  Lançando   Exceções  3   • Asserções   4  
  • 150. www.labes.ufpa.br 150 •  Evento não esperado •  Erro que ocorre em tempo de execução •  Causa ruptura do fluxo normal do programa •  Exemplos –  Erros de divisão por zero –  Acessar elementos de um array além do tamanho –  Entrada inválida –  Pane no disco rígido –  Abertura de arquivo não existente –  Estouro do Heap de memória O que é uma Exceção?
  • 151. www.labes.ufpa.br 151 O que é uma Exceção? class DivisaoPorZero { public static void main(String args[]) { System.out.println(3/0); System.out.println("me escreva"); } } O código abaixo Gera a seguinte saída:
  • 152. www.labes.ufpa.br 152 •  Tratador default de exceções: –  Provido pelo runtime Java –  Imprime uma descrição da exceção –  Imprime a pilha de exceções •  Hierarquia de métodos onde a exceção ocorreu –  Faz o programa finalizar •  Quando uma exceção ocorre em um método, o método cria um objeto exceção e lança ao sistema de execução –  Criar um objeto exceção e lançar no sistema de execução é chamado “throwing an exception” –  Objetos de exceção contém informações sobre o erro, incluindo o tipo e o estado do programa quando o erro ocorreu O que é uma Exceção?
  • 153. www.labes.ufpa.br 153 •  O sistema de execução busca pela pila de chamadas um método que trate a exceção O que é uma Exceção? Método  onde   ocorreu  erro   Método  sem  um   tratador  de  exceção   Método  com  um   tratador  de  exceção   main   Chamada de método Chamada de método Chamada de método
  • 154. www.labes.ufpa.br 154 •  Buscando um tratador de exceção O que é uma Exceção? Método  onde   ocorreu  erro   Método  sem  um   tratador  de   exceção   Método  com  um   tratador  de   exceção   main   Procura tratador apropriado Procura tratador apropriado Lança exceção Encaminha exceção Captura exceção
  • 155. www.labes.ufpa.br 155 Tratamento de exceções com try/catch •  U m m é t o d o p o d e organizar suas exceções lançando-as para que um método posterior possa tratá-las. •  Assim, somente métodos que “se importam” com os erros precisam tratá- los •  Q u a l q u e r e x c e ç ã o lançada deve estar explicitamente estar na assinatura do método (utilizando o throws). metodo1 (){ try { metodo2(); } catch (exception e) { processaErro(); } } metodo2 () throws exception { metodo3(); } metodo3 () throws exception { leituraArquivo(); }
  • 156. www.labes.ufpa.br 156 Tratamento de exceções com try/catch class  DivisaoPorZeroComTry  {        public  staHc  void  main(String  args[])  {        try  {          System.out.println(3  /  0);        System.out.println("me  escreva");      }  catch  (Arithme)cExcep)on  exc)  {        //  Divissao  por  zero  é  uma  Arithme)cExcep)on        System.out.println(exc);      }  finally{        //  Codigo  a  ser  excutado  antes  do  bloco  try  terminar        System.out.println(“passou  pelo  finally  ");      }      System.out.println("Apos  excecao.");    }   }   ●  Exemplo
  • 157. www.labes.ufpa.br 157 •  Java permite ao programador lançar exceções throw <ObjetoExcecao>; •  Um exceção é um objeto –  É necessário criar uma objeto exceção da mesma forma como se cria qualquer objeto Java •  Exemplo: throw new ArithmeticException(“teste...”); Criando e Lançando Exceções
  • 158. www.labes.ufpa.br 158 Criando Exceções Próprias •  Criar exceções próprias para um programa cria um mecanismo específico para tratar as exceções no escopo do próprio sistema •  Passos para seguir –  Criar uma classe que estenda a RuntimeException ou a classe Exception –  Customize a classe •  Membros e construtores podem ser adicionados à classe •  Exemplo: class ExcecaoExemplo extends RuntimeException { /* algum codigo */ } Criando e Lançando Exceções
  • 159. www.labes.ufpa.br 159 Criando e Lançando Exceções class TesteNegaString { public static void main(String args[]) { String input = "entrada invalida"; try { if (input.equals("entrada invalida")) { throw new ExcecaoExemplo(); } System.out.println("Aceitou string."); } catch (ExcecaoExemplo e) { System.out.println("Negou string!"); } } } Lança exceção Captura exceção
  • 160. www.labes.ufpa.br 160 •  Permitem que o programador verifique se uma condição foi alcançada na execução do programa •  Estende os comentários de tal forma que uma asserção indica ao leitor do código que uma condição particular deve sempre acontecer –  O programa informa se as asserções são verdadeiras ou falsas –  Se uma asserção não é verdadeira, uma AssertionError é lançada •  O usuário tem a opção de desligar a execução da checagem de asserções Asserções
  • 161. www.labes.ufpa.br 161 Habilitando e Desabilitando Asserções •  Programa com asserções não funciona corretamente em clientes que não habilitam tal propriedade •  Compilação –  Código deve ser compilado com java 1.4 ou superior •  Habilitando asserções: –  Ao invocar o interpretador, utilize a tag ”–enableassertions” ou “–ea”. java –enableassertions MeuPrograma Asserções
  • 162. www.labes.ufpa.br 162 •  Habilitando e Desabilitando Asserções Asserções Eclipse NetBeans Propriedades
  • 163. www.labes.ufpa.br 163 Asserções Sintaxe: class AssercaoDeIdade { public static void main(String args[]) { int idade= 0; assert (idade > 0); // : String de saida /* se idade é válida (i.e., idade>0) */ if (idade >= 18) { System.out.println("Você é um adulto! =)"); } } }
  • 165. www.labes.ufpa.br 165 – Dado o modelo UML anterior, considere uma operação que lê dados de entrada do usuário e cadastra em banco os dados: – Defina e codifique no mínimo 3 exceções Java que tenha significado ao contexto citado Exercício
  • 167. www.labes.ufpa.br 167 •  Provê constantes e métodos pré-definidos para realizar diferentes operações matemáticas •  Métodos e Constantes são variáveis de classe (estáticas), permitindo o acesso sem necessidade de instanciar a classe •  Constantes: •  Math.E à 2.718281828459045 •  Math.PI à 3.141592653589793 java.lang.Math
  • 168. www.labes.ufpa.br 168 •  Métodos: •  Absoluto de -5 = Math.abs(-5) •  Número randômico (máximo é 10) = Math.random() * 10 •  Número máximo e mínimo entre 3.5 e 1.2 = Math.max(3.5,1.2),Math.min(3.5,1.2) •  Funções teto e piso = Math.ceil(3.5), Math.floor(3.5) •  Número de Euler elevado a 1 = Math.exp(1) •  log 10 = Math.log(10) •  10 elevado a 3 = Math.pow(10, 3) •  Arrondamento do PI = Math.round(Math.PI) •  Raiz quadrada de 5 = Math.sqrt(5) •  10 radianos transformados em graus = Math.toDegrees(10) + " graus") •  Seno de 90 = Math.sin(Math.toRadians(90)) java.lang.Math
  • 169. www.labes.ufpa.br 169 Operadores Aritméticos Operador Uso Descrição + op1+op2 Soma op1 e op2 * op1*op2 Multiplica op1 por op2 / op1/op2 Divide op1 por op2 % op1%op2 Computa o resto da divisão de op1 por op2 - op1-op2 Subtrai op1 por op2
  • 170. www.labes.ufpa.br 170 Operadores Aritméticos Operador Uso Descrição ++ op++ Incrementa op em 1; avalia o valor de op antes de ser incrementado ++ ++op Incrementa op em 1; avalia o valor de op depois de ser incrementado -- op-- Subtrai op em 1; avalia o valor de op antes de ser incrementado -- --op1 Subtrai op em 1; avalia o valor de op depois de ser incrementado Operadores de incremento e decremento
  • 171. www.labes.ufpa.br 171 Operadores Aritméticos int i = 10; int j = 3; int k = 0; k = ++j + i; //resulta em k = 4+10 = 14 Operadores de incremento e decremento int i = 10; int j = 3; int k = 0; k = j++ + i; //resulta em k = 3+10 = 13
  • 172. www.labes.ufpa.br 172 •  Comparam dois valores e determinam o relacionamento entre estes valores •  A saída da avaliação é true ou false. Operadores Relacionais Operador Uso Descrição > op1>op2 op1 é maior que op2 >= op1>=op2 op1 é maior ou igual a op2 < op1<op2 op1 é menor que op2 <= pp1<=op2 op1 é menor ou igual a op2 == op1==op2 op1 é igual a op2 != op1!=op2 op1 é diferente de op2
  • 173. www.labes.ufpa.br 173 •  Possuem um ou dois operandos booleanos que produzem um resultado booleano. •  Estes são os 6 operadores lógicos: –  && (AND lógico)‫‏‬ –  & (AND lógico booleano)‫‏‬ –  || (OR lógico) ‫‏‬ –  | (OR lógico booleano inclusivo)‫‏‬ –  ^ (OR lógico booleano exclusivo)‫‏‬ –  ! (NOT lógico)‫‏‬ Operadores Lógicos
  • 174. www.labes.ufpa.br 174 ● Operadores Lógicos && e & ●  Diferença básica: -  &&  permite  avaliações  de  curto-­‐circuito  (ou  avaliações  parciais),  enquanto  &   não.     ●  Dada a expressão: exp1 && exp2 -  &&   irá   avaliar   a   expressão   exp1,   e   imediatamente   retornar  false  se  o  valor  de  exp1  for  falso.     -  Em  contraste,  o  operador  &  sempre  avaliar  ambos  exp1   e  exp2  antes  de  retornar  a  resposta.     Operadores Lógicos
  • 175. www.labes.ufpa.br 175 public class TestAND { public static void main( String[] args ){ int i = 0; int j = 10; boolean test= false; //demonstra && test = (i > 10) && (j++ > 9); System.out.println(i); System.out.println(j); System.out.println(test); //demonstra & test = (i > 10) & (j++ > 9); System.out.println(i); System.out.println(j); System.out.println(test); } } Operadores Lógicos ●  Operadores Lógicos && e & Qual saída este programa gera no console?
  • 176. www.labes.ufpa.br 176 ● Operadores Lógicos || e | ●  Seguem a mesma lógica dos operadores && e &, ou seja: -  ||  permite  avaliações  de  curto-­‐circuito  (ou  avaliações  parciais),  enquanto  |   não.   ●  Dada a expressão: exp1 || exp2 -  ||  irá  avaliar  a  expressão  exp1,  e  imediatamente   retornar  true  se  exp1  é  verdadeiro   -  Em  contrastes,  o  operador  |  sempre  avaliar  as  duas   expressões  antes  de  retornar  a  resposta.       Operadores Lógicos
  • 177. www.labes.ufpa.br 177 •  O resultado de uma operação de OU exclusivo é verdadeiro, se e um dos operandos é verdadeiro e o outro é falso •  Sempre os dois operandos serão avaliadospara calcular o resultado. Operadores Lógicos ●  Operador Lógico ^ (OU exclusivo) ●  Operador Lógico ! (NÃO lógico) ●  O resultado de uma operação de NÃO lógico é a negação do valor avaliada ●  Se é verdadeiro o resultado é falso, se é falso o resultado é verdadeiro
  • 178. www.labes.ufpa.br 178 •  Operador Lógico condicional ? : –  É uma operador ternário. •  Isto significa que recebe três argumentos de expressão condicional. –  A estrutura de uma expressão utilizando o operador condicional é: exp1?exp2:exp3 onde, exp1 – é um expressão booleana que pode resultar em true ou false –  Resultado: Se exp1 é true, exp2 é o valor retornado. Se for false, então exp3 é retornada. Operadores Lógicos
  • 179. www.labes.ufpa.br 179 Operadores Lógicos ●  Operador Lógico condicional ? : public class OperadorCondicional { public static void main( String[] args ){ String status = ""; int grade = 80; //pega status do estudante status = (grade >= 60)?"Passou":"Falhou"; //escreve status System.out.println( status ); } }  
  • 180. www.labes.ufpa.br 180 Precedência de Operadores Posição Operador 1 [] . () 2 ! ~ ++ - +(unario) –(unario) () (cast) new 3 * / % 4 + - 5 < <= > >= instanceof 6 == != 7 & 8 ^ 9 | 10 && 11 || 12 ?:
  • 181. www.labes.ufpa.br 181 •  Dada a seguinte expressão, 6%2*5+4/2+88-10 Pode-se re-escrever com alguns parentes baseado na precedência de operadores, ((6%2)*5)+(4/2)+88-10 Precedência de Operadores
  • 184. www.labes.ufpa.br 184 O que é uma Coleção? •  Um objeto coleção — algumas vezes chamados de “container” — é simplesmente um objeto que agrupa múltiplos elementos em uma unidade •  Coleções são utilizadas para armazenar, recuperar, manipular e comunicar dados agregados –  Tipicamente, representam itens de dados que formam um grupo natural, como uma pasta de email (uma coleção de cartas), ou um diretório de telefones (um mapeamento entre nomes e números de telefones). Framework de Coleções
  • 185. www.labes.ufpa.br 185 •  O framework de coleções é uma arquitetura unificada para representar e manipular coleções •  O framework de coleções possui: –  Interfaces –  Implementações –  Algoritmos Framework de Coleções
  • 186. www.labes.ufpa.br 186 Benefícios: •  Reduz esforço de programação •  Incrementa velocidade e qualidade dos programas •  Permite interoperabilidade entre APIS não relacionadas –  As interfaces de coleções são padrão na troca de dados entre APIS •  Reduz tempo de aprendizagem de novas APIS •  Reduz esforço para projetar novas APIS •  Promove o reuso de software –  Novas estruturas de dados que esteja de acordo com as interfaces padrão de coleção são naturalmente reutilizáveis Framework de Coleções
  • 187. www.labes.ufpa.br 187 •  Interfaces Collection são tipos de dados abstratos que estão definidas na forma de interfaces Java •  Interfaces definem como coleções são manipuladas independentemente dos seus detalhes de implementação internos –  Comportamento polimórfico •  Em Java (e em outras linguagens orientadas a objetos), interfaces genericamente formam uma hierarquia Interfaces e Implementações
  • 188. www.labes.ufpa.br 188 •  Hierarquia Básica de Interfaces Interfaces e Implementações
  • 189. www.labes.ufpa.br 189 •  Implementações são objetos utilizados para armazenar coleções, implementando as interfaces do framework •  Cada implementação de propósito geral provê os operadores das interfaces que implementam •  O framework de coleções Java também provê várias implementações para situações específicas Interfaces e Implementações
  • 190. www.labes.ufpa.br 190 Interfaces Implementações HashTable ResizableArray Árvore Linked List HashTable + LinkedList Set HashSet TreeSet LinkedHashSet List ArrayList LinkedList Map HashMap TreeMap LinkedHashMa p ●  Implementações de Propósito geral Interfaces e Implementações
  • 191. www.labes.ufpa.br 191 •  Nas últimas versões do Java, algumas classes que tratam de coleções foram consideradas “legadas”: –  Vector –  Stack –  Hashtable –  Properties Interfaces e Implementações
  • 192. www.labes.ufpa.br 192 •  É a raiz para a hierarquia de coleções •  É o último denominador comum que as coleções implementam –  Todo objeto coleção é um tipo da interface Collection •  É utilizado para passar objetos de coleção e manipular quando generalização máxima é desejada –  Utilize a interface Collection como um tipo •  JDK não provê implementação direta desta interface, mas prove implementações mais específicos como Set e List Interface Collection
  • 193. www.labes.ufpa.br 193 public interface Collection { boolean add(Object o); boolean addAll(Collection c); void clear(); boolean contains(Object o); boolean containsAll(Collection c); boolean equals(Object o); int hashCode(); boolean isEmpty(); Iterator iterator(); boolean remove(Object o); boolean removeAll(Collection c); boolean retainAll(Collection c); int size(); Object[] toArray(); Object[] toArray(Object[] a); } Interface Collection
  • 194. www.labes.ufpa.br 194 Métodos de adição e remoção •  O método add() é definido genericamente o suficiente para admitir a adição de itens duplicados ou não, o que depende das implementações da interface Collection •  Isto garante que a coleção irá conter o elemento passado como parâmetro após a invocação do método. add(Object obj) e remove(Object obj) Operações em Coleções … conjuntoA.add(new Integer(1)); conjuntoA.remove(new Integer(1)); … Adiciona objeto Remove objeto
  • 195. www.labes.ufpa.br 195 Navegação Para navegar entre os elementos de uma coleção existem o for each e Iterator: •  for each (a partir do Java 5) –  O construtor for each permite que se navegue por um array ou collection de forma concisa Operações em Coleções … Collection<String> nomes = new ArrayList<String>(); nomes.add("a"); nomes.add("b"); nomes.add("c"); for (String umNome: nomes) System.out.println(umNome.charAt(0)); …
  • 196. www.labes.ufpa.br 196 Navegação •  Iterator –  Um Iterator é um objeto que permite a navegação em uma coleção e remover elementos da coleção de forma seletiva, caso desejado Operações em Coleções … Collection<String> nomes = new ArrayList<String>(); nomes.add("a"); nomes.add("b"); nomes.add("c"); for (Iterator it=nomes.iterator();it.hasNext();) System.out.println(String(it.next())s); … Obtém iterator Testa se ainda existem elementos Obtém a referência do próximo objeto
  • 197. www.labes.ufpa.br 197 … for (Iterator it=nomes.iterator();it.hasNext(); if(it.next()!=null){ it.remove(); } … •  Iterator e for each –  O construtor do for each escondo o Iterator, o que não permite invocar o método remove(); –  Use explicitamente o Iterator caso queira navegar e filtrar os dados da coleção Operações em Coleções Remove o objeto atual na navegação da coleção
  • 198. www.labes.ufpa.br 198 Outras operações •  containsAll(Collection entrada) — retorna true se a coleção alvo contém todos os elementos da coleção passada como parâmetro. •  addAll(Collection entrada) — adiciona todos os elementos da coleção passada como parâmetro na coleção alvo. •  removeAll(Collection entrada) — remove todos os elementos da coleção passada como parâmetro que também pertençam à coleção alvo. •  retainAll(Collection entrada) — contrário do anterior, pois remove todos os elementos que não estejam em comum na coleção passada como parâmetro •  clear() — remove todos os elementos da coleção Operações em Coleções
  • 199. www.labes.ufpa.br 199 •  Representa uma coleção que não pode ter elementos duplicados •  Modela a abstração matemática de conjunto: –  Matérias de um curso de graduação –  Conjunto de pessoas em uma sala •  Esta interface possui apenas os mesmos métodos herdados da interface Collection. •  Apenas nas implementações desta interface são adicionadas operações para garantir que não conterá elementos repetidos •  Não existe restrição nenhuma em relação a ordem em que os elementos são agrupados Interface Set
  • 200. www.labes.ufpa.br 200 Implementações da Interface Set •  HashSet – conjunto genérico e não ordenado que armazena por valor hash •  TreeSet – árvore não balanceada cujos elementos estão ordenados (garante tempo log(n) para operações básicas - add, remove and contains) •  LinkedHashSet – um conjunto HashSet que amazena também a ordem de inserção Interface Set HashSet 1 3 2 LinkedHashSet
  • 201. www.labes.ufpa.br 201 HashSet, TreeSet e LinkedHashSet •  HashSet é mais rápido que TreeSet em várias operações (tempo constante versus tempo log para as operações), mas não oferece nenhuma garantia de ordenamento •  HashSet é a implementação mais comumente utilizada •  LinkedHashSet provê quase o mesmo tempo de acesso de HashSet e não possui o custo de log como TreeSet. Interface Set
  • 202. www.labes.ufpa.br 202 •  Representa uma coleção ordenada (algumas vezes chamada de seqüência )‫‏‬ •  Lista pode conter elementos duplicados em sua definição •  O usuário da lista geralmente tem controle preciso sobre a posição onde está cada elemento da lista •  Pode acessar os elementos pelo valor inteiro de sua posição •  Provê operações adicionais à interface Collection, que possuem as seguintes funções: acesso pela posição, busca, iteração e listagens por range Interface List
  • 203. www.labes.ufpa.br 203 public interface List<E> extends Collection<E> {   E get(int index); E set(int index, E element); void add(int index, E element); E remove(int index); boolean addAll(int index, Collection c); int indexOf(Object o); int lastIndexOf(Object o); ListIterator<E> listIterator(); ListIterator<E> listIterator(int index); List<E> subList(int from, int to); }   Interface List
  • 204. www.labes.ufpa.br 204 Implementações •  ArrayList –  Oferece tempo constante de acesso, utiliza um array como representação interna e é a implementação de lista mais utilizada •  LinkedList –  Utilizado para freqüentemente adicionar elementos ao topo da lista, navegar e apagar elementos no interior da lista Interface List ArrayList remove LinkedList
  • 205. www.labes.ufpa.br 205 •  Em relacionamentos entre objetos onde pode haver mais de um objeto envolvido, podem ser utilizados arrays ou coleções •  Pela flexibilidade e facilidade de uso, naturalmente utilizam-se coleções Java para representar relacionamentos do lado “n”. Coleção como Atributo Relacionamentos n-ários
  • 206. www.labes.ufpa.br 206 •  Codificação Coleção como Atributo public class Funcionario { private String nome; private String cpf; private Date dataAdmissao; private String tipo; private Date dataNascimento;   private Funcionario chefe; private Collection subordinados;   private Divisao lotacao; }
  • 207. www.labes.ufpa.br 207 •  Codificação Coleção como Atributo public class Regional { private String nome; private String sigla; private String endereco;   private Collection divisoe }
  • 208. www.labes.ufpa.br 208 – Dado o modelo de súmulas de futebol: – Codifique os relacionamentos entre as classes – Considere a cardinalidade e a direção – Quando determinado, defina o tipo de ordenação (List ou Set) Exercício
  • 209. www.labes.ufpa.br 209 JAVA I/O – ACESSANDO ARQUIVOS
  • 210. www.labes.ufpa.br 210 •  Representa as operações de entrada e saída de dados para um destino •  Pode ser representado por diferentes tipos de fontes e destinos –  Arquivos em disco, aparelhos, outros programas, um socket de rede, arrays em memória, entre outros. •  Pode operar com diferentes tipos de dados –  Bytes simples, tipos de dados primitivos, caracteres específicos e objetos •  Um programa Java utiliza a abstração de Stream para criar um canal de comunicação entre fonte e destino O que é Java I/O
  • 211. www.labes.ufpa.br 211source:java.sun.com O que é Java I/O Input stream Fonte   Stream   DesHno  
  • 212. www.labes.ufpa.br 212 O que é Java I/O Output stream source:java.sun.com DesHno   Stream   Fonte  
  • 213. www.labes.ufpa.br 213 •  Representa uma abstração sobre os arquivos e diretórios verdadeiros armazenados no SO •  Não é uma stream Java •  É muito importante I/O Java, pois streams Java manipulam objetos da classe File •  P o s s u i o p e r a ç õ e s p a r a a c e s s a r propriedades do arquivo ou diretório, tais como permissões de leitura, escrita, tamanho, etc. Classe File
  • 214. www.labes.ufpa.br 214 Classe File   public class FileInfoClass { public static void main(String args[]) { String nomeArquivo = "arquivo.txt";//mude aqui o nome para o diretorio que queira testar File arquivoRef = new File(nomeArquivo); System.out.println("Nome: " + arquivoRef.getName()); if (!arquivoRef.exists()) { System.out.println(nomeArquivo + " nao existe"); /* Cria um diretorio temporario */ System.out.println("Criando diretorio temporario..."); nomeArquivo = "temp"; arquivoRef = new File(nomeArquivo); arquivoRef.mkdir(); System.out.println(nomeArquivo + (arquivoRef.exists() ? "existe" : "nao existe")); System.out.println("Deleting temp directory..."); arquivoRef.delete(); System.out.println(nomeArquivo + " e um " + (arquivoRef.isFile() ? "arquivo ." : "diretorio .")); } …   Cria objeto arquivo Verifica se arquivo já existe Cria um diretório temp Apaga arquivo
  • 215. www.labes.ufpa.br 215 … if (arquivoRef.isDirectory()) { String content[] = arquivoRef.list(); System.out.println("O conteudo do diretorio"); for (int i = 0; i < content.length; i++) { System.out.println(content[i]); } } System.out.println(nomeArquivo + " tem tamanho = " + arquivoRef.lastModified() ); if (!arquivoRef.canRead()) { System.out.println(nomeArquivo + " nao pode ser lido"); return; } System.out.println(nomeArquivo + " tem tamanho " + arquivoRef.lastModified()); if (!arquivoRef.canWrite()) { System.out.println(nomeArquivo + " nao pode ser escrito"); } }  }   Verifica se é diretório Imprime nome do arquivo Classe File
  • 216. www.labes.ufpa.br 216 Leitura e Escrita de Arquivos Hierarquia
  • 217. www.labes.ufpa.br 217 Leitura e Escrita de Arquivos Programa Fluxo de dados
  • 218. www.labes.ufpa.br 218 •  Streams de Byte –  Streams de dados binários –  Classes raiz para streams de bytes: •  Classe InputStream •  Classe OutputStream •  Ambas são classes abstratas •  Streams de Character –  Para caracteres Unicode –  Classes raiz para streams de caracteres: •  Classe Reader •  Classe Writer •  Ambas são abstratas Leitura e Escrita de Arquivos
  • 219. www.labes.ufpa.br 219 public class CopyBytes { public static void main(String[] args) throws IOException { FileInputStream in = null; FileOutputStream out = null; try { in = new FileInputStream("eln.txt"); out = new FileOutputStream("saidaeln.txt"); int c; while ((c = in.read()) != -1) { out.write(c); } } // mais codigo finally { if (in != null) { in.close(); } if (out != null) { out.close(); } } } } Leitura e Escrita de Arquivos FileInputStream e FileOutputStream Cria referências Lê da entrada e escreve na saída Fecha referências aos arquivos
  • 220. www.labes.ufpa.br 220 •  Leitura de Linhas •  Entrada e Saída baseada em caracteres é uma operação muito “baixo nível” •  Entrada e Saída usualmente utiliza unidades maiores que um simples caracter –  Uma unidade comum é uma linha: uma string com um caracter terminador no final –  Um terminador de linha pode ser um retorno de carro seguido de nova linha ("rn"), um único retorno de carro ("r"), ou uma única nova linha ("n"). Leitura e Escrita de Arquivos
  • 221. www.labes.ufpa.br 221 public static void main(String[] args) {   File inputFile = new File("eln.txt"); File outputFile = new File("saidaeln.txt"); FileReader in; FileWriter out; try { in = new FileReader(inputFile); out = new FileWriter(outputFile);   BufferedReader inputStream = new BufferedReader(in); PrintWriter outputStream = new PrintWriter(out); String l; while ((l = inputStream.readLine() System.out.println(l); outputStream.println(l); }   in.close(); out.close();   } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } Leitura e Escrita de Arquivos ●  Leitura de Linhas
  • 222. www.labes.ufpa.br 222 •  Uma operação de I/O sem buffer significa que cada chamada de leitura ou escrita é capturada diretamente pelo SO –  Isto pode fazer os programas ficarem ineficientes, a partir de que cada requisição geralmente representa um acesso a disco, atividade de rede, ou alguma operação geralmente custosa. •  Para reduzir este tipo de overhead, a plataforma Java implementa streams com buffer de I/O –  Streams com buffer de entrada lêem dados de área de memória conhecida como buffer; a API nativa é chamada quando o buffer está vazio –  Similarmente, Streams com buffer de saída escrevem dados para o buffer, e a API nativa é chamada quando o buffer estiver cheio. Buffer de I/O
  • 223. www.labes.ufpa.br 223 •  Um programa pode converter uma stream sem buffer em uma stream com buffer utilizando o “empacotamento”: –  Uma stream sem buffer é passada como parâmetro no construtor de classe stream com buffer •  Exemplo inputStream = new BufferedReader(new FileReader(”entra.txt")); outputStream =new BufferedWriter(new FileWriter(”sai.txt")); Buffer de I/O
  • 224. www.labes.ufpa.br 224 •  Geralmente não faz sentido enviar dados do buffer em pontos críticos, sem esperar pelo preenchimento do mesmo. Isto é conhecido como “flush” do buffer. •  Alguns buffers permitem flush automático, que é especificado por um parâmetro opcional no construtor. –  Quando flush automático está habilitado, certos eventos chave fazem com o buffer seja descarregado –  Por exemplo, um objeto PrintWriter com flush automático descarrega os dados em toda invocação de println(). •  Para realizar o “flush” de arquivos manualmente, é necessário invocar o método flush(). Buffer de I/O
  • 225. www.labes.ufpa.br 225 •  Em Java existem três tipos de stream padrão: –  Entrada Padrão, acessada por System.in –  Saída Padrão, acessada por System.out –  Erro Padrão, acessada por System.err •  Estes objetos são definidos automaticamente e não precisam ser instanciados •  System.out e System.err são definidas como objetos PrintStream (streams de escrita) Entrada e Saída Padrão
  • 226. www.labes.ufpa.br CapacitaçãoEletronorte–2007-2008 226 Entrada e Saída Padrão public class LeituraEntradaPadrao {   public static void main(String[] args) throws IOException { DataOutputStream output = new DataOutputStream(System.out DataInputStream in = new DataInputStream(System.in);   int c; while ((c = in.read()) != -1) output.write(c); in.close(); //sempre fechar antes de terminar output.close();//sempre fechar antes de terminar }   } MacLima:bin adailton$ java br.eln.java.io.LeituraEntradaPadrao < ../eln.txt *************** inicio do arquivo linha 1 linha 2 linha3 fim do arquivo ************** MacLima:bin adailton$
  • 227. www.labes.ufpa.br 227 •  Geralmente ler o conteúdo de entrada a partir da linha comando e com sigilo exige a definição de alguma classe utilitária para tal tarefa. •  O Java SE 6 introduziu a classe Console especificamente para facilitar esta tarefa. •  Para ler uma senha, utilize o seguinte código: – Console cons = System.console(); – String username = cons.readLine(“Nome Usuario: "); – char[] passwd = cons.readPassword(“Senha: "); Java 6: Classe Console
  • 228. www.labes.ufpa.br 228 – Considere um arquivo de texto com o conteúdo no seguinte formato: Exercício Fulano 89 n Fulano 23 n Fulano 45 n Beltrano 33 n EOF Nome Jogador Minuto do jogo em que marcou golLinha
  • 229. www.labes.ufpa.br 229 – Codifique um método que receba como entrada o nome do arquivo, e processa o texto escrevendo na tela quantos gol cada jogador fez e o minuto do primeiro gol Exercício
  • 231. www.labes.ufpa.br 231 Recentes Evoluções do Java Loop for each Import Estático Autoboxing Generics Java Web Start Annotations Java 5
  • 232. www.labes.ufpa.br 232 Recentes Evoluções do Java SplashScreen SystemTray JDBC 4.0 Scripting (JavaScript, JavaFX e JRuby) JAX-WS (Web Services) Melhorias de I/O (Console, Permissões) Java 6
  • 233. www.labes.ufpa.br 233 •  De maneira geral, a versão 5 do Java incluiu novas estruturas para a linguagem em si •  A versão 6 adicionou várias melhorias de performance e funcionalidades relacionadas à plataforma, como acesso a banco, apoio a scripts, etc. •  A versão 7 está no forno ainda, mas pretende adicionar novas estruturas para linguagem, como por exemplo tipagem dinâmica Recentes Evoluções do Java
  • 234. www.labes.ufpa.br 234 •  Permite que uma classe tenha acesso a membros estáticos (atributos e métodos) sem necessitar digitar explicitamente a classe originária, como em: double r = Math.cos(Math.PI * valor); •  O import estático permite acesso a membros estáticos sem necessariamente utilizar herança. Assim, o programa importa somente os membros individualmente: import static java.lang.Math.PI; •  ou import static java.lang.Math.*; Import Estático
  • 235. www.labes.ufpa.br 235 •  Uma vez importados, os membros estáticos podem ser utilizados diretamente: double r = cos(PI * theta); •  A declaração de import estático é análogo ao import normal, pois permite acesso sem necessitar explicitar o path completo Import Estático import static java.lang.Math.PI; import static java.lang.Math.round;    public class ImportMathEstatico {   public static void main(String args[]){ System.out.println(" Valor de PI = "+PI); System.out.println(" Valor de -5 arredondado = "+round(-5)); }  }
  • 236. www.labes.ufpa.br 236 •  Utilize quando precisar ter acesso freqüente a membros estáticos de uma ou duas classes. •  Se utilizar mal a funcionalidade de import estático, pode fazer o programa perder legibilidade e manutenibilidade, poluindo o código com todos os membros estáticos importados. •  Se utilizado apropriadamente, o import estático pode fazer o programa mais legível (pois remove toda a repetição de nomes de classes) Import Estático
  • 237. www.labes.ufpa.br 237 •  Esse processo de empacotamento entre primitivos e objetos é algo intediante. •  A partir do Java 5, o recurso de autoboxing faz esse empacotamento sozinho: •  No Java 1.4 o código acima é inválido. No Java 5 ele compila perfeitamente. Autoboxing Integer inteiro1= new Integer(1); int valInteiro1 = inteiro1.intValue();  Integer inteiro2= 1; int valInteiro2 = inteiro1; 
  • 238. www.labes.ufpa.br 238 •  Este caso se aplica a todos os tipos primitivos e seus correspondentes wrappers (float e Float, double e Double, etc.) •  Isso não quer dizer que tipos primitivos e referências agora são a mesma coisa, isso é simplesmente um “adocicamento sintático” para facilitar a codificação. •  Pode-se fazer o autoboxing diretamente para Object também, possibilitando passar um tipo primitivo para um método que recebe Object como argumento: Autoboxing Object val1 = 5; Object val2 = 5.0F; Internamente val1 e val2 são empacotados no mesmo tipo de objeto?
  • 239. www.labes.ufpa.br 239 Como são utilizadas? •  Annotations, ou simplesmente ”anotações”, são utilizadas para afetar o modo como os programas são tratados por ferramentas e bibliotecas •  Annotations são utilizados por ferramentas para produzir arquivos derivados –  Ferramentas: Compilador, IDE –  Arquivos derivados: Novo código Java, descritor de implantação, arquivos .class Annotations
  • 240. www.labes.ufpa.br 240 Porquê Annotations? •  Habilitam o estilo de “programação declarativa” –  Menor codificação, já que uma ferramenta pode gerar arquivos derivados automaticamente –  Fácil modificar configurações •  Elimina a necessidade de manter “arquivos dependentes” que precisam ser alterados sempre para estar sincronizado com o código fonte –  Informação é mantida no arquivo fonte Annotations
  • 241. www.labes.ufpa.br 241 •  A definição do tipo Annotation é similar ao modo de definir Interfaces Java –  Um “arroba” (@) precede a palavra reservada interface –  Cada,método define um elemento da Annotation –  Declaração de métodos não pode ter parâmetros e nem lançar exceções –  Tipos de retorno são restritos a primitivos, String, Class, enums, annotations, e arrays dos tipos anteriores –  Métodos podem ter valores default Annotations Definindo uma Annotation
  • 242. www.labes.ufpa.br 242 public @interface RequerMelhoria { int id();   String resumo();   String analista() default "[naoDefinid   String data() default "[naoImplementad } Definindo uma Annotation Annotations Item definido como método Define valor default
  • 243. www.labes.ufpa.br 243 •  Depois de definida, é possível utilizar uma Annotation na declaração de: –  classes, métodos, atributos •  Uma é um tipo especial de modificador, e pode ser utilizado em qualquer lugar que outros modificadores (como public, static, ou final) podem ser utilizados –  Por convenção, Annotations precedem outros modificadores –  Annotations consistem em um arroba (@) seguido de parêntesis com os elementos listados Annotations Como utilizar uma Annotation
  • 244. www.labes.ufpa.br 244 public interface InterfaceTeste {   @RequerMelhoria( id = 123, resumo = "Permitir Jogo Adiado", analista = "Fulano de Tal", data = "4/1/2010" ) public void definirDataJogo(Date data);   }   Como utilizar uma Annotation Annotations
  • 245. www.labes.ufpa.br 245 Restrições de Escopo em Annotations •  De maneira geral as anotações podem ser restringidas de duas maneiras: –  Escopo de uso: restringem a qual contexto a Annotation estará disponível para ser acessada por ferramentas (código fonte, código .class, JRE, etc.) –  Escopo de definição: restringem a quais elementos Java a Annotation pode ser aplicada (classe, atributo, método, etc.) Annotations
  • 246. www.labes.ufpa.br 246 •  Utiliza-se a meta-annotation @Retention, que possui 3 níveis: –  SOURCE: indica que a informação da Annotation será colocada apenas no código fonte, mas não estará disponível no arquivo .class –  CLASS (Default): indica que a informação da Annotation será colocada no arquivo .class, mas não estará disponível em tempo de execução (não será carregado pela JRE) –  RUNTIME – indica que a informação será armazenada no arquivo .class e carregada pela JRE Annotations Escopo de Uso
  • 247. www.labes.ufpa.br 247 Escopo de Uso Annotations @Retention(RetentionPolicy.RUNTIME) public @interface RequerMelhoria { int id();   String resumo();   String analista() default "[naoDefinido]";   String data() default "[naoImplementado]"; } Define Escopo de Uso
  • 248. www.labes.ufpa.br 248 •  Definição similar ao escopo de uso •  Utiliza-se a meta-annotation @Target, que possui vários níveis, tais como: •  TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, ANNOTATION_TYPE, PACKAGE Annotations Escopo de Definição @Target(ElementType.FIELD) public @interface RequerMelhoria { int id();   String resumo();   String analista() default "[naoDefinido]";   String data() default "[naoImplementado]"; }
  • 249. www.labes.ufpa.br 249 @Target(ElementType.FIELD) public @interface RequerMelhoria { int id();   String resumo();   String analista() default "[naoDefinido]";   String data() default "[naoImplementado]"; } public interface InterfaceTeste {   @RequerMelhoria( id = 123, resumo = "Permitir Jogo Adiado", analista = "Fulano de Tal", data = "4/1/2010" ) public void definirDataJogo(Date data);   }   § The annotation @RequerMelhoria is disallowed for this location Annotations
  • 250. www.labes.ufpa.br 250 •  Provêem abstração aos tipos –  Classes, Interfaces e Métodos podem ser parametrizados por tipos ( este recurso é conhecido por programadores C++) •  Generics permite código seguro para uso de tipos –  Se o código compila sem erros ou advertências, não irá acontecer nenhuma ClassCastException inesperado em tempo de execução Generics … Collection<String> nomes = new ArrayList<String>(); nomes.add("a"); for (String umNome: nomes) System.out.println(umNome.charAt(0)); Esta definição já apresentada é permitida pelo uso de Generics § Não precisa fazer Casting para String
  • 251. www.labes.ufpa.br 251 Definição de uma classe genérica: •  Definição: LinkedList<E> tem um parâmetro tipo E que representa o tipo do elemento armazenado no interior da lista Generics public interface LinkedList<E> extends AbstractSequentialList<E> implements List<E>,Queue<E>, Clonable, java.io.Serializable { … …    } § O uso de “E” como parâmetro é apenas uma convenção § Este parâmetro segue a mesma r e g r a p a r a d e f i n i ç ã o d e identificadores para a linguagem J a v a ( p . e x : T, T I P O , t i P o , TIPO1,etc...)
  • 252. www.labes.ufpa.br 252 •  Substituir o parâmetro tipo <E> pelo tipo concreto no argumento, como <Integer> ou <String> ou <MeuTipo> –  LinkedList<Integer> pode armazenar somente Integer ou sub tipos deste Generics Uso de uma classe genérica: … LinkedList<Integer> valores = new LinkedList<Integer>(); valores.add(new Integer(1)); valores.add(23); valores.add(“142”); String valor = valores.get(1); … Não é permitido adicionar um valor String Permitido pelo Autoboxing Acesso a valor é verificado
  • 253. www.labes.ufpa.br 253 •  Problema: Tipos de elementos em Collection –  Compilador não consegue verificar tipos de elementos (pois tudo é Object) –  Atribuição com casting de tipos –  Podem ocorrer ClassCastException em tempo de execução do programa •  Solução: Generics –  Diz ao compilador o tipo da coleção –  Deixa o compilador fazer o casting –  Permite a detecção em tempo de compilação Generics Porquê usar Generics?
  • 254. www.labes.ufpa.br 254 •  Você pode codificar isto: –  Object o = new Integer(5); •  Você pode codificar também: –  Object[] or = new Integer[5]; •  Então é esperado que permitido o seguinte código: (Que na verdade NÃO pode!) –  ArrayList<Object> ao = new ArrayList<Integer>(); •  Isto poderia causar ClassCastException em tempo de execução Generics Generics e Sub Tipos
  • 255. www.labes.ufpa.br 255 Generics Generics e Sub Tipos ArrayList<Integer> ai = new ArrayList<Integer>(); ArrayList<Object> ao = ai; // permitido em compilação ao.add(new Object()); Integer i = ai.get(0); ArrayList<Number> an = new ArrayList<Number>(); an.add(new Integer(5)); an.add(new Long(1000L)); No seguinte caso, Long e Integer são subclasses de Number: