Escolar Documentos
Profissional Documentos
Cultura Documentos
A Linguagem
O que é Java?
Variáveis primitivas
Controle de fluxo
Orientação a objetos
Arrays
Modificadores de acesso
3
Agenda
Enumerados
Controlando os Erros com Exceções
O pacote java.lang
A API de Coleções
O pacote java.io
Threads
4
Agenda
O que é Java?
5
O que é Java?
de computadores pessoais e
em bilhões de dispositivos
em todo o mundo, inclusive
telefones celulares e
dispositivos de televisão.
7
O que é Java?
8
O que é Java?
9
O que é Java?
Convenções de Código
Classes e Interfaces
▪ Devem começar com a primeira letra maiúscula.
▪ Exemplos: Coil, Slab, SlabFurnace.
Métodos
▪ Devem começar com a primeira letra minúscula.
▪ Exemplos: getSlab, setCoil, processSlab.
10
O que é Java?
Convenções de Código
Variáveis
▪ Devem começar com a primeira letra minúscula.
▪ Exemplos: coil, slab, slabCode.
Constantes
▪ Devem começar com TODAS as letras maiúsculas.
▪ Exemplos: SLAB_WIDTH, COIL_MAX_WITH.
11
O que é Java?
Comentários em Java:
/* */ Comentário em bloco;
// Comentário em linha;
/** */ Comentário de Javadoc.
Javadoc é o recurso de
documentação do Java.
12
O que é Java?
13
Agenda
Variáveis primitivas
14
Variáveis primitivas
tipoDaVariavel nomeDaVariavel;
int idade;
idade = 15;
15
Variáveis primitivas
16
Variáveis primitivas
Inteiros:
Diferem nas precisões e podem ser
positivos ou negativos.
Byte: 1 byte.
Short: 2 bytes.
Int: 4 bytes.
Long: 8 bytes.
17
Variáveis primitivas
18
Variáveis primitivas
Momento de reflexão:
Isto funciona?
▪ int valor = 10;
▪ short valor2 = valor;
Isto funciona?
▪ float valor = 10;
▪ double valor2 = valor;
19
Variáveis primitivas
Casting e promoção:
Precisamos que um número quebrado seja
arredondado e armazenado num número inteiro.
Para fazer isso sem que haja erro de compilação, é
preciso dizer ao programa que o número
quebrado seja moldado (casted) como um
número inteiro.
Esse processo recebe o nome de casting.
20
Variáveis primitivas
Exemplos de casting:
▪ int valor = 10;
▪ short valor2 = (short)valor;
Conversão Implícita
21
Variáveis primitivas
22
Variáveis primitivas
23
Variáveis primitivas
24
Agenda
Controle de Fluxo
25
Controle de Fluxo
27
Controle de Fluxo
if-else
if ([condição]) {
[comando] // Executado se a condição for aceita.
}
if ([condição 1])
[comando 1]
else if ([condição 2])
[comandos 2])
....
else
[comando n]
28
Controle de Fluxo
if-else (exemplo)
if (condicao) {
System.out.println(“Merece aumento”);
}
else {
System.out.println(“Merece trabalhar mais!”);
}
29
Controle de Fluxo
switch-case
switch([expressão]) {
case [constante 1]:
[comando 1]
break;
...
case [constante n]:
[de comando n]
break;
default:
[comando]
}
30
Controle de Fluxo
switch-case (exemplo)
int opcao = 2;
System.out.print("valor de op eh: "+opcao);
switch (opcao) {
case 1:
System.out.println("case 1: op="+opcao);
break;
…
default:
System.out.println("default: opcao não está no limite 1..3");
}
31
Controle de Fluxo
for
32
Controle de Fluxo
for (exemplo)
while
[expressão 1]
while ([condição]) {
[comando]
[expressão 2]
}
34
Controle de Fluxo
while (exemplo)
do-while
do
{
[comando]
} while([condição]);
36
Controle de Fluxo
do-while
int i =0;
do {
System.out.println(”o valor da variável i: " + i);
i++;
} while (i < 5);
37
Controle de Fluxo
break
O comando break é usado para interromper a execução de um dos
laços de iteração vistos abaixo ou de um comando switch.
38
Controle de Fluxo
continue
O comando continue tem a função de pular direto para final do
laço, mas em vez de interromper o laço como no break, ele
continua executando o próximo passo do laço.
return
O comando return tem a função de retornar o valor de uma
variável ou a referência de um objeto quando um método exige
algum tipo de retorno.
Podemos utilizá-lo para finalizar a execução imediata de um bloco.
X 41
Agenda
Orientação a Objetos
42
Orientação a Objetos
Encapsulamento
46
Orientação a Objetos
47
Orientação a Objetos
52
Orientação a Objetos
Apresentação
Modelo
Negócio
Acesso à Dados
53
Orientação a Objetos
54
Orientação a Objetos
Herança
Enquanto programamos em Java, há a necessidade de
trabalharmos com várias classes.
Muitas vezes, classes diferentes tem características
comuns, então, ao invés de criarmos uma nova classe
com todas essas características usamos as
características de um objeto ou classe já existente.
Ou seja, herança é, na verdade, uma classe derivada de
outra classe.
55
Orientação a Objetos
Herança
Super-classe
Conta (classe-base ou classe-pai)
É um(a)
Subclasse
ContaCorrente ContaPoupanca (classe-derivada ou classe-filha)
56
Orientação a Objetos
Herança
A herança no código fonte Java é representada pelo uso do
termo extends.
Exemplificando, temos:
57
Orientação a Objetos
Dica importante!
Utilize os temos this e super para acesssar e
ser mais seletivo para com os métodos
disponíveis na classe pai ou filha.
Sobrescrevendo métodos
Muitas vezes não queremos utilizar o comportamento implementado
em um método encontrado na super-classe, logo sobrescrevemos
este método na subclasse.
Super-classe
Conta (classe-base ou classe-pai)
É um(a)
Subclasse
ContaCorrente ContaPoupanca (classe-derivada ou classe-filha)
59
Orientação a Objetos
Associação
É um vínculo que permite aos objetos de uma ou mais classes se
relacionem;
É possível que um objeto invoque comportamentos e estados de
outros objetos.
As associações podem ser:
▪ unárias – a associação ocorre entre objetos de uma mesma classe.
▪ binárias – a associação ocorre entre dois objetos de classes
distintas.
▪ múltiplas - a associação ocorre entre mais de dois objetos de
classes distintas.
61
Orientação a Objetos
Associação (exemplos)
Associação unária: Associação binária:
filho de
Pessoa
- pai 1
1
*
Pessoa 1
- filho
TipoPessoa
62
Orientação a Objetos
Associação (exemplos)
Associação múltipla:
Pessoa
1
1 1
1 * *
63
Orientação a Objetos
Agregação
Tipo de relacionamento com características todo-parte,
onde existe um grau de coesão entre o todo e as partes
menos intenso, podendo haver certo grau de
independência entre eles.
Pessoa TipoPessoa
Composição
Tipo de relacionamento com características todo-parte, onde
existe um alto grau de coesão entre o todo e as partes, com
total grau de dependência entre eles (todo e as partes).
Desta forma, se o todo não existir, as partes também não
existirão.
Um exemplo de composição é a mão:
▪ Uma mão é composta por dedos. Os dedos compõem a mão.
▪ Não há lógica em existir um dedo sem mão, porém pode-se
ter uma mão sem um ou mais dedos.
65
Orientação a Objetos
Composição
Podemos observar que a composição impõe
obrigatoriedade:
Pessoa TipoPessoa
Interfaces
Uma interface pode definir uma série de
métodos, mas nunca conter
implementação deles.
Ela só expõe o que o objeto deve fazer,
e não como ele faz, nem o que ele tem.
Como ele faz vai ser definido em uma
implementação dessa interface (classe).
68
Orientação a Objetos
Interfaces
<<interface>> Interface
(Não pode ser instanciada,
ObjetoGrafico somente implementada)
É um(a)
<<classe>> <<classe>>
Classe concreta
(classe que implementará
Pincel Caneta os métodos abstratos)
69
Orientação a Objetos
70
Orientação a Objetos
Dica importante!
Podemos identificar se um classe é uma
instância de um determinado tipo (classe
ou interface).
Exemplificando abaixo, temos:
ContaCorrente ContaPoupanca
72
Orientação a Objetos
73
Agenda
Arrays
74
Arrays
75
Arrays
//declaração
int[] idades;
ou
//declarando e construção de um objeto de array
int idades[] = new int[100];
76
Arrays
77
Arrays
78
Arrays
79
Arrays
numeros
Array de 1
dimensão
80
Arrays
Arrays Multidimensionais
do array declarado:
Array de 2
dimensões
82
Agenda
Modificadores de Acesso
83
Modificadores de Acesso
84
Modificadores de Acesso
O modificador private
O modificador de acesso private quando aplicado
a um atributo ou a um método indica que os
mesmos só podem ser acessados de dentro da
classe que os criou (encapsulamento).
85
Modificadores de Acesso
O modificador private
Uma classe que herde de uma superclasse com
atributos declarados como private só poderá ter
acesso a eles através dos métodos públicos da
própria superclasse, caso contrário, não haverá
acesso a estes atributos.
86
Modificadores de Acesso
public class Circulo {
private float raio;
Circulo() { setRaio( 3.0 ); }
void setRaio( float r ) { raio = r; }
}
public class Pneu extends Circulo {
public static void main(String[] args) {
Pneu p = new Pneu();
p.raio = 10.0; //Erro de compilação. O Atributo raio é privado da classe Circulo
p.setRaio(10.0);
}
} 87
Modificadores de Acesso
O modificador protected
A instrução protected indica que o método ou a
variável assim declarada possa ser acessada
somente dentro do pacote em que está contida
através de uma subclasse.
88
Modificadores de Acesso
O modificador public
A instrução public indica que a classe, método ou
variável assim declarada possa ser acessada em
qualquer lugar e a qualquer momento da
execução do programa.
89
Modificadores de Acesso
90
Modificadores de Acesso
O modificador static
A instrução static serve:
▪ Na declaração de uma variável dentro de uma classe,
para se criar uma variável que poderá ser acessada por
todas as instâncias de objetos desta classe como um
variável comum.
▪ A variável criada será a mesma em todas instâncias e
quando seu conteúdo é modificado numas das
instâncias, o será em todas instâncias;
▪ Na declaração de um método que deve ser acessado
diretamente na classe e não nas suas instâncias.
91
Modificadores de Acesso
O modificador static
public class Circulo Valor único para todas as
{ instâncias de uma classe.
Dica importante!
Se uma classe não necessita de ser
estendida use final.
Melhorará o tempo de performance
de programa referente a checagem
das subclasses da classe onde for a
aplicada o termo final.
93
Modificadores de Acesso
O modificador static
A sintaxe da chamada de qualquer atributo ou método é:
Circulo.raio = 10.4f;
Circulo.processaCalculoDiametro();
94
Modificadores de Acesso
O modificador abstract
A instrução abstract serve para:
▪ Declarar métodos abstratos, ou seja, métodos que deverão
ser desenvolvidos/implementados nas subclasses.
▪ Quando a classe que contiver métodos abstratos for herdada,
os referidos métodos deverão ser implementados, caso
contrário, a classe que extendeu deverá ser declarada como
abstrata.
▪ Declarar classes abstratas que se desenvolvem num(as)
subclasse(s).
95
Modificadores de Acesso
O modificador abstract
A instrução abstract serve para: (continuação)
▪ Classes abstratas são aquelas que não estão totalmente
implementadas/descritas.
▪ Uma classe abstrata não pode ser instanciada e é amplamente
usada nas interfaces.
▪ Uma classe é considerada abstrata se contiver pelo menos um
método abstrato. Um método abstrato tem a seguinte característica:
void getName( );
▪ Caso o método tenha as chaves características {}, o mesmo não
mas será considerado abstrato, embora não tenha código dentro
das chaves. 96
Orientação a Objetos
O modificador abstract
<<abstract>>
Classe abstrata
(não pode ser instanciada,
ObjetoGrafico somente estendida)
É um(a)
Classe concreta
<<concrete>> <<concrete>> (classe que realmente
Pincel Caneta implementará os métodos
abstratos)
97
Modificadores de Acesso
O modificador abstract
public abstract class ObjetoGrafico {
// declaração de campos
// declaração de métodos não abstratos
public abstract void desenhe();
} Ao estender a classe
abstratar a classe concreta
public class Princel extends ObjetoGrafico { deverá implementar todos
@Override os métodos abstratos.
public void desenhe() {
//executa a lógica de desenho
}
}
98
Modificadores de Acesso
O modificador final
A instrução final indica que a classe, método ou
variável assim declarada têm uma única atribuição
que se mantém constante, ou seja, não pode ser
alterada no decorrer do processamento.
Este modificador declara o que chamamos, em
programação, de constante.
99
Modificadores de Acesso
O modificador final
Classe final
<<final>>
(Somente pode ser instanciada,
ObjetoGrafico logo não pode ser extendida)
É um(a)
<<concrete>> <<concrete>>
Pincel Caneta
100
Modificadores de Acesso
101
Agenda
Enumerados
102
Enumerados
103
Enumerados
104
Enumerados
//declaração de um enumerado
public enum SituacaoMotorEnum {
LIGADO,
DESLIGADO,
STANDBY;
}
105
Enumerados
108
Agenda
Controlando os Erros
com Exceções
109
Controlando os Erros com Exceções
110
Controlando os Erros com Exceções
Hierarquia de exceções
111
Controlando os Erros com Exceções
Exceções checadas
São consideradas exceções checadas todas as classes que
extendem de java.lang.Exception;
São chamadas de checadas, pois o compilador verificará a
sua aplicabilidade ao longo do código fonte.
Exceções não-checadas
São consideradas exceções checadas todas as classes que
extendem de java.lang.RuntimeException ou
java.lang.Error.
Este tipo de exceção não é checado pelo compilador.
112
Controlando os Erros com Exceções
Lançando Exceções
{
throw new Exception(“O valor é maior que o limite máximo!”);
}
Lança a exceção.
}
113
Controlando os Erros com Exceções
try {
declarações; Exceção mais específica
} catch (tipoExcecao1 identificador1) {
declarações;
} catch (tipoExcecao2 identificador2) {
declarações;
}
Exceção menos específica
...
} finally {
declarações;
}
114
Controlando os Erros com Exceções
try {
// cria reader, processa arquivo e tudomais
}
catch (Exception e) {
// oooops
} finally {
if (reader != null) {
try {
reader.close();
}
catch (Exception e) {
// outro ooops
}
}
} 116
Controlando os Erros com Exceções
Vantagens de Exceções
Separação do gerenciamento de erro do código “regular”.
Propagação dos erros ao longo da pilha de chamadas (Call
Stack);
Agrupamento e diferenciação dos tipos de erro;
Melhora a qualidade do código tornando a leitura do código
fonte mais natural.
Desvantagens de Exceções
117
Controlando os Erros com Exceções
main
Chamada
ao método
Método com um
gerenciador de exceção
Chamada
ao método
Método sem um
gerenciador de exceção
Chamada
Método onde ao método
ocorreu o erro
118
Controlando os Erros com Exceções
main
É um
<<classe>>
com.acme.AppException
É um É um
<<classe>> <<classe>>
com.acme.DAOException com.acme.ControlException
120
Controlando os Erros com Exceções
121
Controlando os Erros com Exceções
122
Agenda
O pacote java.lang
123
O pacote java.lang
124
O pacote java.lang
A classe System:
A classe System possui uma série de atributos e métodos
estáticos.
Já usamos o atributo System.out, para imprimir conteúdo.
Ela também possui o atributo in, que lê da entrada padrão,
porém só consegue captar bytes:
int i = System.in.read();
125
O pacote java.lang
A classe System:
Temos outros métodos interessantes como:
System.exit(0);
A classe Runtime
126
O pacote java.lang
127
O pacote java.lang
int i = 100;
String s = "" + i;
System.out.println(s); Ao concatenar um valor
numérico com uma
String.
double d = 1.2;
String s2 = "" + d;
System.out.println(s2);
128
O pacote java.lang
132
O pacote java.lang
Usando java.lang.String
Variáveis do tipo String guardam referências a objetos, e
não um valor, como acontece com os tipos primitivos.
Podemos criar uma String utilizando o termo new:
String x = new String(”programa");
String y = new String(”prog java 01");
133
O pacote java.lang
if (x == y)
{
System.out.println("referência para o mesmo objeto");
} else {
System.out.println("referências para objetos diferentes!");
}
134
O pacote java.lang
if (x.equals(y))
{
System.out.println("consideramos iguais no critério de
igualdade");
} else {
System.out.println("consideramos diferentes no
critério de igualdade");
}
135
O pacote java.lang
136
O pacote java.lang
137
O pacote java.lang
A class java.lang.Math
Na classe Math, existe uma série de métodos estáticos
que fazem operações com números como, por exemplo:
▪ Arredondar(round);
▪ Tirar o valor absoluto (abs);
▪ Tirar a raiz(sqrt);
▪ Calcular o seno(sin).
138
O pacote java.lang
A class java.lang.Math
Exemplificando o seu uso, temos:
double d = 4.6;
Arredondar um valor
long i = Math.round(d); para cima.
int x = -4;
int y = Math.abs(x); Obter o valor absoluto.
139
O pacote java.lang
A class java.lang.Math
No Java 5.0, podemos tirar proveito do import static aqui:
double d = 4.6;
long i = round(d);
Observe que não é necessário mais
mencionar o nome da classe, somente
int x = -4; seus métodos estáticos.
int y = abs(x);
140
O pacote java.lang
141
Agenda
A API de Coleções
142
A API de Coleções
143
A API de Coleções
145
A API de Coleções
146
A API de Coleções
Listas
Uma lista é uma coleção que permite elementos duplicados e
mantém uma ordenação específica entre os elementos.
Em outras palavras, você tem a garantia de que, quando
percorrer a lista, os elementos serão encontrados em uma
ordem pré-determinada, definida na hora da inserção dos
mesmos.
Ela resolve todos os problemas que levantamos em relação ao
array (busca, remoção, tamanho “infinito”,...). Esse código já
está pronto!
147
A API de Coleções
Listas
A API de Collections traz a interface java.util.List, que especifica o
que uma classe deve ser capaz de fazer para ser uma lista.
Há diversas implementações disponíveis, cada uma com uma
forma diferente de representar uma lista.
A implementação mais utilizada da interface List é a ArrayList,
que trabalha com um array interno para gerar uma lista.
Ela é mais rápida na pesquisa do que sua concorrente, a LinkedList,
que é mais rápida na inserção e remoção de itens nas pontas.
148
A API de Coleções
Obtém o tamanho
de uma lista
Obtém o item contido na lista
dado o índice informado
150
A API de Coleções
153
A API de Coleções
155
A API de Coleções
Utilizando uma estrutura Map:
if (dicionario.containsKey(“www.usp.br”)
{
//executa rotina se verdadeiro
}
156
A API de Coleções
Utilizando uma estrutura Map com Generics:
if (dicionario.containsKey(“www.usp.br”)
{
//executa rotina se verdadeiro
}
157
A API de Coleções
159
A API de Coleções
160
A API de Coleções
Utilizando uma estrutura Set:
Ordenação em Coleções
A classe Collections traz um método estático sort que recebe um
List como argumento e o ordena por ordem crescente.
165
A API de Coleções
167
A API de Coleções
169
Agenda
O pacote java.io
170
O pacote java.io
A parte de controle de entrada e saída de dados (conhecido como
I/O) é orientada a objetos e usa os principais conceitos mostrados
até agora: interfaces, classes abstratas e polimorfismo.
A idéia atrás do polimorfismo no pacote java.io é de utilizar fluxos de
entrada (InputStream) e de saída (OutputStream) para toda e
qualquer operação, seja ela relativa:
A um arquivo;
Um campo blob do banco de dados;
A uma conexão remota via sockets, ou;
Até mesmo às entrada e saída padrão de um
programa(normalmente o teclado e o console).
171
O pacote java.io
Hierarquia de Classes de Java IO (Entrada)
172
O pacote java.io
Hierarquia de Classes de Java IO (Saída)
173
O pacote java.io
Hierarquia de Classes de Java IO (Leitores / Escritores)
174
O pacote java.io
Como ler o conteúdo de um arquivo .txt?
class TestaEntrada {
public static void main(String[] args) throws IOException {
InputStream is = new FileInputStream(”c:\\arquivo.txt");
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String s = br.readLine();
while (s != null) {
String linha = br.readLine();
}
}
}
175
O pacote java.io
Como escrever um conteúdo em um arquivo .txt?
class TestaSaida {
176
O pacote java.io
If (arquivo.exists())
{
arquivo.delete();
}
177
O pacote java.io
178
O pacote java.io
179
Agenda
Threads
180
Programação Concorrente com
Threads
A necessidade de se fazer várias coisasde forma
simultânea, ao mesmo tempo, paralelamente, aparece
frequentemente na computação.
Para vários programas distintos, normalmente o próprio
181
Programação Concorrente com
Threads
Em Java, usamos a classe Thread do pacote java.lang para
criarmos linhas de execução paralelas.
Existem basicamente duas abordagens para a implementação
182
Programação Concorrente com
Threads
Quais são estados de uma Thread?
new
w
sleep
interval
a ck
expires
lo
waiting terminated
time
waiting
183
Programação Concorrente com
Threads
Como definir uma Thread?
Uma tarefa, para ser excutada em uma nova Thread, deve
implementar a interface Runnable.
<<interface>>
java.lang.Runnable
184
Programação Concorrente com
Threads
@Override
public void run() {
System.out.println("tarefa executada!");
System.out.println("Id Thread:" + Thread.currentThread().getId());
}
}
185
Programação Concorrente com
Threads
Criado um grupo
Como executar uma Thread? de Threads
System.out.println(Thread.currentThread().getId());
Criação deum
for(int i = 0; i < 100; i++) nova Thread
{
Thread t = new Thread(tg, new Tarefa());
t.start();
} Inicia a Thread
Instância da classe que
implementa Runnable
186
Programação Concorrente com
Threads
Vamos colocar nossas Threads para correr?
187
Java
A Linguagem