Programação de Computadores II
TCC-00.309 | Turma A-1
Programação de Computadores II
TCC-00.309 | Turma A-1
Professor Leandro Augusto Frata Fernandes
laffernandes@ic.uff.br
Professor Leandro Augusto Frata Fernandes
laffernandes@ic.uff.br
Material disponível em
http://www.ic.uff.br/~laffernandes/teaching/2015.1/tcc-00.309
Conteúdo
Introdução ao Java
Partiremos de onde paramos
na aula passada
Partiremos de onde paramos
na aula passada
•
Um programa Java muito simples, mas que dá o
pontapé inicial para o desenvolvimento
public class HelloWorld {
public static void main (String[] args) { System.out.println(“Olá mundo!”); } } Classe principal da aplicação Método principal Argumentos passados por linha de comando
Pacotes
Pacotes
Introdução ao Java TCC-00.309 Programação de Computadores II 3Organização em Pacotes
Organização em Pacotes
•
Arquivos Java são armazenados fisicamente em uma
hierarquia de pastas, chamadas pacotes (
packages
)
•
No exemplo, os arquivos
estão na pasta
meusistema
•
Cada arquivo representa
uma classe ou interface
Java
•
Cada pasta representa
um pacote ou subpacote
Identificação de Pacote
Identificação de Pacote
•
Para indicar que as definições de um arquivo fonte Java
fazem parte de um determinado pacote, a primeira linha de
código deve ser a declaração de pacote:
package nomedopacote;
•
Caso tal declaração não esteja presente, as classes farão
parte do “pacote default”, que está mapeado para o
diretório corrente
O uso do pacote default não é uma boa prática
TCC-00.309 Programação de Computadores II 5
Importação de Classes e Interfaces
Importação de Classes e Interfaces
•
É possível importar classes e interfaces de outros
pacotes incluindo o comando import antes da
declaração de sua classe ou interface:
import nomedopacote.NomeDaClasse
ou simplesmente
import nomedopacote.*
onde * indica que todas as classes do pacote serão
importadas
•
Classes do pacote java.lang não precisam ser
importados
Variável de Ambiente CLASSPATH
Variável de Ambiente CLASSPATH
•
O ambiente Java normalmente utiliza a
variável de ambiente CLASSPATH
•
CLASSPATH define uma
lista de diretórios
que
contém os pacotes, classes e interfaces Java
•
Exemplo
Se o arquivo MeuSistemaApp.class estiver no
diretório /home/java/meusistema, então o diretório
/home/java
deve estar incluído na lista de diretórios
definida por CLASSPATH
TCC-00.309 Programação de Computadores II 7
Tipos de Dados
Tipos de Dados
Introdução ao JavaTipos de Dados
Tipos de Dados
•
Organização da memória
•
Tipos primitivos
Tipos numéricos inteiros
Tipos numéricos para ponto flutuante
Tipo caractere
Tipo lógico
•
Tipos enumerados
•
Referências
TCC-00.309 Programação de Computadores II 9Organização da Memória
Fundamentos de Arquitetura de Computadores
Organização da Memória
Fundamentos de Arquitetura de Computadores
•
Bit
Menor unidade de memória
Armazena 0 ou 1
•
Byte
Sequência de 8 bits
•
Word
Sequência de bits usada
como unidade natural por
cada tipo de computador
0 1 2 3 4 5 6 7 0 0 1 1 1 0 0 1 0 1 1 1 0 0 1 1 1 0 2 0 1 1 1 0 0 1 0 3 0 0 0 0 0 0 0 0 4 1 1 1 0 1 0 1 0 5 0 0 0 0 0 0 0 0 6 1 1 1 1 1 1 1 1 7 0 0 0 0 0 0 0 0 ** Revisão **
Tipos Primitivos Inteiros
Tipos Primitivos Inteiros
•
Permitem a representação de
valores inteiros
TCC-00.309 Programação de Computadores II 11 O valor padrão de inicialização de todos é 0 (zero) Tipo
(palavra reservada)
Tamanho
e Formato Faixa de Valores
byte 1 byte com sinal -128 a+127 short 2 bytes com sinal -32.768 a+32.767 int 4 bytes com sinal -2.147.483.648 a+2.147.483.647 long 8 bytes com sinal -9.223.372.036.854.775.808 a +9.223.372.036.854.775.807
Organização da Memória
Fundamentos de Arquitetura de Computadores
Organização da Memória
Fundamentos de Arquitetura de Computadores
•
Tipos inteiros com e sem sinal
Byte Valor 00000000 00000001 00000010 00000011 … … 11111100 11111101 11111110 11111111Todos os tipos inteiros do Java são ___________.
** Revisão ** Byte Valor 00000000 00000001 00000010 00000011 … … 11111100 11111101 11111110 11111111 S em s in al C om s in al
Tipos Primitivos para Ponto Flutuante
Tipos Primitivos para Ponto Flutuante
•
Permitem a representação de um
subconjunto de
valores reais
, além de valores especiais (±∞, NaN)
TCC-00.309 Programação de Computadores II 13 O valor padrão de inicialização de ambos é 0 (zero) Tipo
(palavra reservada)
Tamanho
e Formato Faixa de Valores float 4 bytes IEEE 754 ±1,40129846432481707 × 10 -45a ±3,40282346638528860 × 10+38 double 8 bytes IEEE 754 ±4,94065645841246544 × 10 -324a ±1,79769313486231570 × 10+308
Organização da Memória
Fundamentos de Arquitetura de Computadores
Organização da Memória
Fundamentos de Arquitetura de Computadores
•
IEEE Standart 754 Floating Point
** Revisão **
s
eeee…eeee mmmmmmmmm…mmmmmm
0 51 52 62 63Precisão Dupla (double)
s
eeeeeeee
mmmmmmmm…mmmmmm
0 22 23 30 31Precisão Simples (float)
Tipo Primitivo Caractere
Tipo Primitivo Caractere
•
Permite a representação de
caracteres individuais
Delimitado por aspas simples. Exemplo: ‘A’
•
Caracteres de controle devem ser usados
precedidos por \
TCC-00.309 Programação de Computadores II 15 Tipo
(palavra reservada)
Tamanho
e Formato Valores Assumidos
char 2 bytes
UNICODE Qualquer um dos 32.768 caracteres da tabela UNICODE O valor padrão de inicialização é o caractere de índice 0 (zero)
Tipo Primitivo Caractere
Tipo Primitivo Caractere
•
Alguns caracteres especiais
Codificação Significado
\b Retrocesso de caractere (backspace) \t Tabulação horizontal (tab)
\n Quebra de linha (new line) \f Quebra de página (form feed)
\r Retorno de carro de impressão (carriage return) \” Aspas duplas
\’ Aspas simples \\ Contrabarra
\uxxxx O caráter com código de valor hexadecimal xxxx, que pode assumir valores entre 0000 e ffff
Tipo Primitivo Lógico
Tipo Primitivo Lógico
•
Permite a representação de
valores lógicos
,
utilizados em operações lógicas
•
Note que em Java o tipo boolean ocupa 1 bit
Em C, o tipo bool ocupa 1 byte!
TCC-00.309 Programação de Computadores II 17 Tipo
(palavra reservada) Tamanho
Valores Assumidos (palavras reservadas) boolean 1 bit falsee true
O valor padrão de inicialização é false
Tipos Enumerados
Tipos Enumerados
•
Permite a restrição dos valores de uma variável a
um conjunto de
valores constantes pré-definidos
•
Enumeradores
não são tipos primitivos
Estendem implicitamente a classe java.lang.Enum
•
Declarados com auxílio da palavra reservada enum
•
Podem ser declarados separadamente ou no
escopo de uma classe, mas nunca dentro de um
método
Regra de Declaração
Regra de Declaração
•
Sintaxe
modificador enum NomeDoTipo {VALOR1 [, VALOR2 [..., VALORN]]};
•
Exemplos
public enum Direcao {NORTE, SUL, LESTE, OESTE}; enum TamanhoDoCafe {GRANDE, GIGANTE, SUPER_GIGANTE};
•
Convenções
O nome do tipo segue a convenção de nomenclatura de classes e interfaces: palavras concatenadas iniciadas por letras maiúsculas Os valores seguem a convenção de constantes: palavras separadas por underscore e com todas as letras maiúsculas
TCC-00.309 Programação de Computadores II 19
Referências
Referências
•
Uma referência é usada para identificar de forma única
um objeto, para acessar seus atributos e acionar seus
métodos
•
Em Java, se não for tipo primitivo então é referência
•
A palavra reservada null
indica que nenhum objeto
está sendo referenciado (referência nula)
null
é o valor padrão de inicialização de referências
•
Exemplos de variáreis que armazenam referências
serão vistos a seguir. Definições mais precisas serão
vistas junto com conceitos de orientação a objetos
Declaração de Variáveis
Declaração de Variáveis
Introdução ao Java TCC-00.309 Programação de Computadores II 21Regra de Declaração
Regra de Declaração
•
Palavras reservadas da linguagem não podem ser
utilizadas como nome de variável
•
O nome não pode iniciar com caracteres
numéricos, mas eles podem ser utilizados após o
primeiro caractere
•
O nome pode iniciar com letras, underscore ou por
cifrão
•
Símbolos especiais ou espaços não podem ser
utilizados
Regra de Declaração
Regra de Declaração
•
Sintaxe
tipo nome1 [= valor] [, nome2 [= valor] [..., nomeN [= valor]]];
•
Exemplos
int i;
float total, preco = 0.0; double valorMedio = 10.0;
Aluno alguem = new Aluno(“Pedro”);
•
Note que variáveis podem ser inicializadas no
momento da declaração
TCC-00.309 Programação de Computadores II 23 Variável que armazena referência Variáveis que armazenam valores de tipos primitivosConvenções de Nomenclatura
Convenções de Nomenclatura
•
Variáveis, atributos e argumentos
Palavras concatenadas, onde a primeira palavra inicia com letra minúscula e as demais iniciam com letra maiúscula
•
Constantes
Palavras separadas por underscore e com todas as letras maiúsculas
•
Classes, interfaces e enumerações
Palavras concatenadas iniciadas por letras maiúsculas
•
Métodos
Palavras concatenadas, onde a primeira palavra inicia com letra minúscula e as demais iniciam com letra maiúscula
.
Atributo, Variável e Argumento
Atributo, Variável e Argumento
TCC-00.309 Programação de Computadores II 25 class NomeDaClasse {
int atributo1; // Declaração de atributos acontece
int atributo2; // no escopo da classe [...]
// Argumentos fazem parte da assinatura do método
int metodo(int argumento1, int argumento2) {
int variavel1; // Declaração de variáveis acontece
int variavel2; // em escopo interno ao método if (argumento1 == 0) { int variavel3; [...] } [...] } }
Operadores
Operadores
Introdução ao JavaOperadores
Operadores
•
Operadores aritméticos
•
Operadores relacionais
•
Operadores lógicos
•
Operadores de manipulação binária
•
Operador de concatenação
•
Operadores de atribuição
TCC-00.309 Programação de Computadores II 27
Operadores Aritméticos
Operadores Aritméticos
Símbolo Operação Exemplo
+ Adição a + b
- Subtração a - b
* Multiplicação a * b
/ Divisão a / b
% Resto da divisão inteira a % b + Expressão numérica positiva +a - Negação de expressão numérica -a
++ Incremento ++aou a++
-- Decremento --aou
Operadores Relacionais
Operadores Relacionais
TCC-00.309 Programação de Computadores II 29
Símbolo Operação Exemplo
== Igual a
(atenção ao usar com referências) a == b != Diferente de
(atenção ao usar com referências) a != b
> Maior que
(apenas para valores numéricos) a > b >= Maior ou igual a
(apenas para valores numéricos) a >= b
< Menor que
(apenas para valores numéricos) a < b <= Menor ou igual a
(apenas para valores numéricos) a <= b
Operam sobre par de valores de mesma natureza e retornam valor lógico
Operadores Lógicos
Operadores Lógicos
Símbolo Operação Exemplo
&& E lógico (and) a && b
|| OU lógico (or) a || b
! Negação (not) !a
Operadores de Manipulação Binária
Operadores de Manipulação Binária
TCC-00.309 Programação de Computadores II 31 Operam sobre bits de valores inteiros e retornam valores do mesmo tipo
Símbolo Operação Exemplo
& E binário (bitwise and) a & b | OU binário (bitwise or) a | b ^ OU EXCLUSIVO binário (bitwise xor) a ^ b
~ Complemento binário ~a
<< Deslocamento aritmético de bits à
esquerda (preserva sinal) a << 1 <<< Deslocamento lógico de bits à
esquerda (não preserva sinal) a <<< 1 >> Deslocamento aritmético de bits à
direita (preserva sinal) a >> 1 >>> Deslocamento lógico de bits à
esquerda (não preserva sinal) a >>> 1
Operador de Concatenação
Operador de Concatenação
•
Em Java, texto estático é representado pela classe
String, presente no pacote java.lang
Note que String é uma classe e não um tipo primitivo
•
Existe um operador próprio para auxiliar a
concatenação de texto
Símbolo Operação Exemplo
+ Concatenhação de String “Texto” + aa + “Texto”
Opera sobre uma instância de String e outro tipo qualquer, retornando outra instância de String
Operadores de Atribuição
Operadores de Atribuição
TCC-00.309 Programação de Computadores II 33
Símbolo Operação Exemplo
= Atribuição simples a = b;
+=
Atribuição composta, um atalho para operações como
a = a + b a += b; -= *= /= >>= <<= etc.
Operam sobre e retornam valores numéricos
Fluxo de Execução
Fluxo de Execução
Introdução ao JavaEstruturas de Controle de Fluxo
Estruturas de Controle de Fluxo
•
Desvios condicionais
if .. else ...
switch ... case ... default ...
•
Repetições ou laços
while ...
do ... while
for ...
TCC-00.309 Programação de Computadores II 35Desvio Condicional
Desvio Condicional
•
Desvio em caso de condição verdadeira
•
Desvio em caso de condição verdadeira ou falsa
if (expressão lógica) { bloco de comandos } else { bloco de comandos } if (expressão lógica) { bloco de comandos }
Exemplo
Exemplo
TCC-00.309 Programação de Computadores II 37 public class ExemploIf {
public static void main(String[] args) { if (args.length > 0) {
int count = Integer.parseInt(args[0]); for (int i = 0; i < count; i++) {
System.out.println(“i = ” + i); } System.out.println(“Fim da contagem.”); } System.out.println(“Fim do programa.”); } }
Desvio Condicional
Desvio Condicional
•
A
notação ternária do if
é utilizada para deixar o
código compacto
•
Exemplo
(expressão lógica) ? ação caso verdadeiro : ação caso falso
equivale a
String txt = (x == 0.0) ? “Zero” : “Não zero”;
String txt; if (x == 0.0) {
txt = “Zero”; }
Desvio Condicional
Desvio Condicional
•
Desvio condicionado ao caso
TCC-00.309 Programação de Computadores II 39 switch (expressão) {
case valor 1: bloco de comandos
[break;]
case valor 2: bloco de comandos
[break;]
case valor N: bloco de comandos
[break;] default: bloco de comandos
}
Exemplo
Exemplo
public class ExemploSwitch {
public static void main(String[] args) { switch (args.length) { case 0: System.out.println(“Nenhum.”); break; case 1: System.out.println(“Um.”); break; case 2: System.out.println(“Dois.”); break;
default: System.out.println(“Mais que dois.”); }
} }
Repetição Condicional
Repetição Condicional
•
Teste de condição antes da execução do bloco de
comandos
•
Teste de condição após a execução do bloco de
comandos
TCC-00.309 Programação de Computadores II 41 while (expressão lógica) {
bloco de comandos
}
do {
bloco de comandos
} while (expressão lógica);
Exemplo
Exemplo
import java.util.Scanner public class ExemploWhile {
public static void main(String[] args) { Scanner teclado = new Scanner(System.in); String linha = teclado.nextLine();
while (!linha.equals(“fim”)) { System.out.println(“Linha = ” + linha); linha = teclado.nextLine(); } } }
Exemplo
Exemplo
TCC-00.309 Programação de Computadores II 43 import java.util.Scanner
public class ExemploDoWhile {
public static void main(String[] args) { Scanner teclado = new Scanner(System.in); String linha; do { linha = teclado.nextLine(); System.out.println(“Linha = ” + linha); } while (!linha.equals(“fim”)); } }
Repetição Contável
Repetição Contável
•
Uma maneira enxuta de fazer repetições que
dependem de valores sequenciais
for (inicialização; expressão lógica; (in/de)cremento) {
bloco de comandos
}
Exemplo
Exemplo
TCC-00.309 Programação de Computadores II 45 public class ExemploFor {
public static void main(String[] args) { for (int i = 0; i < args.length; i++) {
System.out.println(args[i]); }
System.out.println(“Fim do programa.”); }
}
Arrays de Tipos Primitivos
Arrays de Tipos Primitivos
Introdução ao JavaArrays
Arrays
•
Permitem armazenamento e manipulação de uma
mesma quantidade de
dados de mesmo tipo
Exemplos: notas de alunos, coleção de nomes
•
Mapeia um conjunto finito de índices inteiros
(de tamanho constante) em um conjunto qualquer
de elementos de mesmo tipo
TCC-00.309 Programação de Computadores II 47
Arrays Unidimensionais de
Tipos Primitivos
Arrays Unidimensionais de
Tipos Primitivos
•
Declaração e inicialização de variáveis
tipo[] nome1
[
= {
[
valor1
[
, valor2,
[
...
]]]
}
]
;
tipo[] nome2
[
= new tipo[quantidade]
]
;
•
Consulta de tamanho
Atributo length
•
Exemplo
double[] notas = {8.0, 7.0, 9.0};
int qtd = notas.length;
Arrays Unidimensionais de
Tipos Primitivos
Arrays Unidimensionais de
Tipos Primitivos
•
Leitura do elemento com determinado índice
tipo valor = nome1[indice];
•
Escrita na posição com determinado índice
nome1[indice] = valor;
TCC-00.309 Programação de Computadores II 49
Cópia Eficiente entre Arrays
Cópia Eficiente entre Arrays
•
Utilize o comando System.arraycopy para fazer
cópia eficiente entre arrays
System.arraycopy(Object src, int srcPos,
Object dest, int destPos, int length);
•
Outras rotinas interessantes são encontradas em
java.util.Arrays
Comentários
Comentários
Introdução ao Java TCC-00.309 Programação de Computadores II 51Comentários em Java
Comentários em Java
•
Comentar o código é uma
boa prática
de
desenvolvimento
•
Três tipos de comentários
// Comentário de uma linha. /* Comentário de
* múltiplas linhas. */
/** Comentário de documentação. Também pode * possuir múltiplas linhas e é utilizado * para gerar arquivos hipertexto de ajuda */
Exemplo
Exemplo
TCC-00.309 Programação de Computadores II 53
/** Classe que representa a entidade cliente do sistema. * <p> É utiliza sempre no contexto de venda de
* mercadorias para pessoa física. *
* @author O estagiário * @see meusistema.Venda */
public class Cliente extends PessoaFisica {
/** Construtor padrão. */
public Cliente() {
super(); // Invocar construtor padrão da superclasse.
} }
Palavras Reservadas
Palavras Reservadas
Introdução ao JavaRelação de Palavras Reservadas
Relação de Palavras Reservadas
TCC-00.309 Programação de Computadores II 55
•
Palavras
usadas
pela linguagem
abstract default for null switch
assert do if package synchronized
boolean double implements private this
break else import protected throw
byte enum instanceof public throws
case extends int return transient
catch false interface short true
char final long static try
class finally native strictfp void
continue float new super while
Relação de Palavras Reservadas
Relação de Palavras Reservadas
•
Palavras
não usadas
pela linguagem
São comuns em outras linguagens de programação
const generic inner outer var