Alcione Benacchio Introdução a Linguagem Java. Bibliografia Java: Como Programar Harvey M. Deitel...
Transcript of Alcione Benacchio Introdução a Linguagem Java. Bibliografia Java: Como Programar Harvey M. Deitel...
Alcione Benacchio
Introdução a Linguagem Java
Bibliografia
Java: Como Programar Harvey M. Deitel - Paul J. Deitel
Java: O Guia Essencial Deivid Flanagan
3
Tecnologia Java
A tecnologia Java foi lançada em 1995, e desde então tem crescido em popularidade e se tornado uma plataforma muito estável e madura.
Ela é composta por uma gama de produtos, baseados na abrangência da internet e na idéia de que um software deveria ser capaz de rodar em diferentes máquinas, sistemas e dispositivos.
Estes dispositivos podem ser computadores, servidores, notebooks, handhelds, PDAs(Palm), celulares, TVs, geladeiras, entre outros.
Os programas feitos em Java rodam em diferentes ambientes graças a um componente da plataforma chamado JVM (Java Virtual Machine) – que é um tipo de tradutor de código Java para instruções específicas de cada sistema e dispositivo.
4
Tecnologia Java
A Tecnologia Java é basicamente dividida em: JSE – Java Standard Edition JEE – Java Enterprise Edition JME – Java Micro Edition
A tecnologia Java não é um produto, mas sim uma especificação definida pela Sun (www.java.sun.com).
Java é: uma completa plataforma de soluções para tecnologia um ambiente de desenvolvimento uma linguagem de programação
5
JSE - Java Standard Edition
JSE permite o desenvolvimento de aplicações Java para desktop ou cliente/servidor.
É composta por: JRE: provê a API Java, a Java Virtual Machine e outros
componentes necessários para rodar aplicações escritas na Linguagem Java.
JDK: contém tudo o que há na JRE além de ferramentas como compiladores e debugadores necessários para desenvolver as aplicações.
A versão mais recente é a JSE 6.
Download: http://java.sun.com/javase/downloads/index.jsp,link JDK 6.
6
JEE e JME
JEE: é o padrão para desenvolvimento de sistemas corporativos, voltada para aplicações multi-camadas, baseadas em componentes executados em servidores de aplicações. Contém bibliotecas para acesso a base de dados, RPC, CORBA, entre outras.
JME: é o padrão aplicado a dispositivos compactos, como celulares, PDAs, controles remotos, e uma gama de dispositivos. Permite o desenvolvimento de software embarcados, ou seja, aplicações que rodam em um dispositivo de propósito específico, desempenhando alguma tarefa que seja útil para o dispositivo.
7
IDEs
IDEs para o desenvolvimento em Java: Eclipse 3.2.1
www.eclipse.org
NetBeans 5.5 http://www.netbeans.org/index.html
8
Introdução à Linguagem Java
A linguagem Java foi designada para ser: Orientada a Objetos: permite a criação de classes,
herança e polimorfismo. A interação do sistema se dá pela interação dos objetos nele criados.
Distribuída: dá suporte a aplicações distribuídas (RMI, CORBA, URL)
Simples: não permite a manipulação direta da memória (ponteiros em C), possui o garbage collector para remover objetos não referenciados, possui o tipo básico boolean para manipular estados de verdade e falsidade.
9
Introdução à Linguagem Java
A linguagem Java foi designada para ser: Multithread: permite a execução de diversas tarefas ao
mesmo tempo.
Segura: possui medidas de segurança para proteger o código de ataques (não usa ponteiros, não permite que applets tenham acesso ao computador dos clientes).
Independente de plataforma: Write Once, Run Everywhere
10
Introdução à Linguagem Java
Dependência de Plataforma compilação de código na linguagem C, C++
Para rodar em diferentes plataformas, o código em C deve ser compilado em diferentes compiladores.
Código proprietário.
11
Introdução à Linguagem Java Independência de Plataforma
JAVA: processos de compilação e interpretação
Pode-se escrever o código em uma plataforma e executá-lo em outra, com poucas ou nenhuma alteração a ser feita.
12
Introdução à Linguagem Java
Independência de Plataforma: Com o compilador, primeiramente o programa é
convertido em bytecodes Java – um código independente de plataforma que é interpretado na plataforma Java. O interpretador lê e executa cada instrução em bytecode no computador.
O código é compilado uma única vez; a interpretação ocorre a cada execução da aplicação e é feita pela JVM.
13
Plataforma Java
A plataforma é o ambiente de hardware e software em que um programa é executado. A maioria das plataformas pode ser descrita como a combinação do sistema operacional e da arquitetura de hardware.
A plataforma Java difere das demais por ser apenas uma plataforma de software que roda sobre qualquer plataforma de hardware.
Possui dois componentes: Java Virtual Machine (JVM): base da plataforma Java e portável para
várias plataformas de hardware. Parte de software que executa código, tarefa normalmente efetuada pela CPU.
Java Application Programming Interface (Java API): grande coleção de componentes de software prontos que provêm diversas capacidades, como ambiente gráfico e funcionalidades específicas. A API é agrupada em bibliotecas de classes a interfaces, sendo estas bibliotecas conhecidas como pacotes.
14
JAVA API
http://java.sun.com/javase/6/docs/api/
A API é composta por diversas classes utilitárias Java, organizadas por pacotes.
Pacotes servem para agrupar classes com funcionalidades semelhantes.
pacotes ≈ diretórios classes ≈ arquivos
Na API são detalhadas todas as classes Java e há explicações sobre a funcionalidade das classes, a identificação de atributos e o detalhamento de métodos.
Tutorial: http://java.sun.com/docs/books/tutorial/getStarted/
Codificação
16
Detalhes iniciais
Java é uma linguagem fortemente tipada.
Não existem variáveis globais ou ponteiros.
Java é case-sensitive: variavel ≠ Variavel ≠ VARIAVEL
Boas práticas: tabular corretamente o código usar padrões de nomenclatura usar nomenclatura clara e inteligível comentar o código
17
Detalhes iniciais Regras de nomenclatura:
não iniciar nomes com números ou caracteres especiais classes: inicial maiúscula
String, Vector, AcervoGeral, ControleContas
atributos, métodos e variáveis: tudo em minúsculas; se houver mais de uma palavra, primeira palavra toda em minúsculas, demais palavras com inicial maiúscula
nome, anoNascimento, getNome( ), setSalarioInicial( )
pacotes: tudo em minúsculas java.util, java.lang, javax.swing
constantes: tudo em maiúsculas PI, E
Normalmente não se usam os caracteres “_” e “-” no nome de classes, variáveis ou métodos.
18
Detalhes iniciais
Blocos de código são delimitados por “{” e “}” e definem o escopo das variáveis.
O nome da classe deve ser idêntico ao nome do arquivo .java (considerando maiúsculas/minúsculas).
public class Livro { private String autor; private String titulo;
public Livro(String autor, setAutor(autor);setTitulo(titulo);
}}
public class Livro { private String autor; private String titulo;
public Livro(String autor, setAutor(autor);setTitulo(titulo);
}}
Arquivo: Livro.java
19
Primeiro programa
public class PrimeiroPrograma{
public static void main(String[] args){
// amostragem na tela
System.out.println(“Primeiro programa”);
}
}
Este código deve ser escrito no arquivo PrimeiroPrograma.java. Ao ser compilado, irá gerar o arquivo de bytecodes
PrimeiroPrograma.class. O arquivo .class é interpretado pela JVM e gera a execução do
programa.
Na tela, deve aparecer a mensagem “Primeiro Programa”.
define o início da classe
1º método a ser executado(deve ser mantida esta linha sem alterações)
20
Análise do Primeiro Programa
public class PrimeiroProgramapublic: modificador de acesso (acesso público)class: define o início da classePrimeiroPrograma: nome da classe
public static void main(String[] args)(este método é o ponto de partida do programa)public: modificador de acesso (acesso público)static: método pertence à classevoid: método não possui retornomain: nome do métodoString[] args: parâmetro de entrada do método, array de Strings
System.out.println(“Primeiro programa”);System.out.println: método de amostragem na tela“Primeiro programa”: mensagem a ser mostrada na tela
21
Análise do Primeiro Programa
A classe que inicia a execução de um programa stand-alone deve possuir o método main.
Comentários:// comentário de uma linha
/* bloco de
comentários com
mais de uma linha */
/** bloco de
* comentários
* formato javadoc **/
Fundamentos da Linguagem Java
23
Criação de variáveis
Variáveis são utilizadas nas linguagens em geral para armazenar um determinado valor.
Toda variável deve ser declarada e inicializada. a declaração define o tipo da variável
<tipo da variável> <nome da variável>;
a inicialização define o seu valor inicial <nome da variável> = valor; <tipo da variável> <nome da variável> = valor;
Uma vez criada uma variável, de acordo com um tipo definido, este tipo não pode ser alterado.
24
Tipos Básicos
Decimal
Inteiro
Caracter
Lógico
0.015 casas decimais64double
0.07 casas decimais32float
0263-1-26364long
0231-1-23132int
0215-1-21516byte
027-1-278short
x0216-1016char
xfalsetruefalse1/16boolean
Sem sinalDefaultMáximoMínimoTamanho (bits)
Tipo
Existem 8 tipos básicos (primitivos) em Java:
25
Tipos Básicos
public class TiposBasicos {public static void main(String[] args) {
//declaração (i não possui valor)int i;
//inicialização e apresentação na tela i = 5;System.out.println(“Valor de i: ” + i);
//declaração e inicializaçãodouble d = 15.2;
// caracterchar c = 'a';c = '\t';c = '\u0043'; // valor Unicode para A
// lógicoboolean b = true;b = false;
// demais tipos básicosfloat f = 5.2f;byte bb = 127;short s = 1024;long l = 1234567890;int x,y,z;
}}
Valores expressos no código são chamados literais.
Literais inteiros (5) são do tipo int; literais com ponto flutuante (15.2) são do tipo double.
Base octal: acrescentar 0 na frente do literalint a = 0164 (11610)
Base hexadecimal: acrescentar 0x na frente do literalint a = 0x164 (35610)
26
String
String não é um tipo básico, é uma classe do Java usada para representar textos (cadeias de caracteres).
A classe String possui métodos que permitem a manipulação da sua cadeia de caracteres.
public class TesteStrings {
public static void main(String[] args) {
// declaração (s vale null)
String s;
// inicialização
s = "Ana dos Santos";
// declaração e inicialização
String s2 = "Roberto Padilha";
System.out.println("Igual: " + s.equals(“Ana dos Santos”));System.out.println("Tamanho de s: " + s.length());
System.out.println("Caracter da posição 5 de s2: " + s.charAt(5));
}
}
27
Operadores
+ += ++
- -= --
* *=
/ /=
% %= (resto da divisão)
> >=< <=!===
! (negação)
&& (e) || (ou)
& (e)
| (ou)
^ (xor)
~ (negação lógica)
Aritméticos Relacionais Lógicos Bit a bit
int a = 5;
boolean b = (a = = 10);
System.out.println(!b);
int c = 10 % 3;
System.out.println(c);
double d = 15.3;
d += 10;
System.out.println(d);
boolean e = (d > 10 && d <= 50)
System.out.println(e);
int i = 1;
int j = 2;
int k = ++j;
System.out.println("K: " + k);
System.out.println("J: " + j);
int l = i++;
System.out.println("L: " + l);
System.out.println("I: " + i);
k++;
28
Conversões
As conversões podem ser implícitas: tipo menor para tipo maior explícitas: tipo maior para tipo menor. De ponto flutuante
para inteiro pode haver perda de informação.
8 16 32
64
byteshortchar
intfloat
longdouble
implícita
explícita
29
Conversões Entre tipos básicos
Se há tipos diferentes em uma expressão, é feita a conversão implícita para o maior tipo da expressão.
double a1 = 10 * 5.2 + 4 – 1.3f; a1 = 54.7
double a2 = 5 / 2; a2 = 2.0 double a3 = 5 / 2.0; a3 = 2.5
A conversão explícita é marcada no código (também chamada casting):
int a4 = (int) 10 * 5.2 + 4 – 1.3f; a4 = 54 int a5 = (int) 5 / 2.0; a5 = 2
30
Conversões
Entre String e valor numérico: como String não é um tipo básico, é necessário utilizar
classes do Java que fazem a conversão de um texto em um número.
Classes Wrapper: classes que representam os tipos básicos: Character Byte, Short, Integer, Long Float, Double
String s = 10;
int a1 = Integer.parseInt(s); a1 = 10
float a2 = Float.parseFloat(s); a2 = 10.0f
double a3 = Double.parseDouble(s) a3 = 10.0
31
Exemplo de Código
Elaborar uma classe que contenha métodos para: calcular a área de um retângulo calcular o perímetro de um retângulo.
Executar o código de modo que o área e o perímetro de um retângulo de base 7 e altura 5 sejam mostrados na tela.
base = 7
altura = 5
Área: base x altura
Perímetro: 2 x base + 2 x altura
32
Exemplo de Código
public class TesteRetangulo {public static double calculaArea(double base, double altura){
double area = base * altura;return area;
}
public static double calculaPerimetro(double base, double altura){return 2 * base + 2 * altura;
}
public static void main(String[] args){int b = 7;int h = 5;double a = calculaArea(b,h)
System.out.println("Area: " + a);System.out.println("Perimetro: " + calculaPerimetro(b,h));
}}
33
Análise do Código A classe TesteRetangulo é composta por 3 métodos:
calculaArea, calculaPerimetro, main
Assinatura de um método:<modificadorDeAcesso> <static> tipoDeRetorno nomeDoMetodo (<listaDeParâmetros>)
public static double calculaArea(double base, double altura)public static void main(String[] args)
modificadorDeAcesso: delimita visibilidade do método (opcional) static: não é necessário criar objeto para chamar o método, o método
pertence à classe (opcional) tipoDeRetorno: tipo básico, tipo abstrato (classe), ou void quando não há
retorno listaDeParâmetros: o que entra no método; cada parâmetro deve ter um tipo
associado (opcional)
34
Análise do Código Primeiramente é executado o método main onde são criadas as
variáveis b e h, que recebem os valores 7 e 5 respectivamente.
Ao chamar o método calculaArea(b, h), há um desvio para o método calculaArea, onde os parâmetros de entrada base e altura recebem os valores de b e h, respectivamente.
Ao entrar no método calculaArea, é criada a variável area que assume o valor da expressão base x altura (35). O valor desta variável é retornado à variável a do método main.
A variável a é apresentada na tela.
Processo semelhante ocorre na chamada do método calculaPerimetro(b,h).
35
Análise do Código Escopo:
as variáveis b, h e a são visíveis apenas no método main (variáveis locais do método main)
os parâmetros base e area e a variável area são visíveis somente no método calculaArea
os parâmetro base e area e a variável perímetro são visíveis somente no método calculaPerimetro.
ao término da execução de um métodos, seus parâmetros e variáveis locais são apagados da memória.
Por mais que haja dois métodos com parâmetros de nomes idênticos, os momentos de execução são diferentes. Por isso, não há confusão entre os parâmetros.
36
Análise do Código
Este tipo de codificação não envolve o conceito de orientação a objetos propriamente dito, uma vez que não são criados objetos, todos os métodos são estáticos, não há herança e polimorfismo.
Entretanto, representa uma classe utilitária que possui métodos de significado semelhante que podem ser utilizados futuramente por outras classes.
37
Exercício
Elaborar uma classe que possua as seguintes funcionalidades de uma calculadora:
somar dois números subtrair dois números multiplicar dois números dividir dois números
No método main, executar os métodos com valores definidos e mostrar o resultado na tela no seguinte formato:
Soma de 5 e 7: 12Multiplicação de 3 e 6: 18
38
Estruturas de Seleção
Uma estrutura de seleção permite a escolha de um grupo de ações (ou bloco de ações) a ser executado quando determinadas condições, representadas por expressões lógicas ou relacionais, são ou não satisfeitas.
As estruturas de seleção são: if/else (seleção simples) switch (seleção múltipla)
39
Estruturas de Seleção – if/else
public static boolean maior(int a, int b){ if (a > b){
return true;} else {
return false;}
public static boolean maior(int a, int b){return a > b ? true : false;
}
public static String categoria(int idade){ if (idade <= 12){
return “Infantil”;} else if (idade <= 18){
return “Adolescente”);} else if (idade <= 60){
return “Adulto”;} else if (idade > 60)
return “Idoso”;}
Método que retorna verdadeiro caso o 1º parâmetro seja maior que o 2º
Utilização do operador ? : para o mesmo problema
Método que testa intervalos por meio de ifs aninhados.
40
Estruturas de Seleção - switch
public static void mostraOpcao(int opcao){ switch (opcao){
case 1: System.out.println(“1: Incluir”);break;
case 2: System.out.println(“2: Alterar”);break;
case 3: System.out.println(“3: Excluir”);break;
case 4: System.out.println(“4: Imprimir”);break;
default:System.out.println(“Opcao invalida”);
}}
Método que mostra uma mensagem em função de um número.
A variável de teste (opcao) deve ser dos tipos char, byte, short ou int.
Neste método, a variável opcao pode assumir os valores 1, 2, 3 ou 4. Caso possua outro valor, a mensagem “Opção inválida” é apresentada na tela.
O comando break delimita o final de um case. Sempre deve ser utilizado em cases intermediários.
41
Estruturas de Repetição
Estrutura de controle de fluxo e execução que permite repetir diversas vezes um mesmo trecho de código.
Repetem um bloco de código enquanto uma determinada condição for veradeira.
As estruturas de repetição são: while do/while for
42
Estruturas de Repetição - while
Primeiro testa, depois executa.
Controle de parada associado a uma variável. Se a variável não for atualizada, gera-se um laço infinito.
public static void mostraPares(int valor){ int contador = 2;
while(contador <= valor){ System.out.println(contador); contador += 2;
}}
Método que mostra os número pares entre 2 e um valor passado como parâmetro.
A variável de controle é chamada contador.
A expressão contador += 2 é equivalente a contador = contador + 2
Para gerar um laço infinito, escreve-se while(true)
43
Estruturas de Repetição - do/while
Primeiro executa, depois testa. Executa pelo menos 1 vez.
Controle de parada associado a uma variável. Se a variável não for atualizada, gera-se um laço infinito.
public static void mostraPares(int valor){ int contador = 2;do{ System.out.println(contador);
contador += 2;} while(contador <= valor)
}
Método que mostra os número pares entre 2 e um valor passado como parâmetro.
Estrutura de repetição menos utilizada.
44
Estruturas de Repetição - for Primeiro testa, depois executa.
Normalmente utilizado em situações onde há contagem.
Variável de controle de parada associada à própria estrutura do for.
public static void mostraPares(int valor){ for(int i = 0; i <= valor; i+=2){ System.out.println(contador);}
}
Método que mostra os número pares entre 2 e um valor passado como parâmetro.
Comando composto por 3 partes separadas por “;” :
inicialização da variável de controle
condição de paradaatualização da variável de
controle
A variável de controle i pode ser declarada na linha do for. Neste caso, só é visível dentro do for (escopo da variável i).
45
Estruturas de Desvio
Dentro de uma estrutura de repetição, pode-se: continue: efetuar desvios para o teste da condição break: causar um encerramento forçado durante as
repetições.
public static void testeDesvio(int valor){
for(int i = 0; i <= valor; i++){
if (i >= valor / 2)
break;
if (i % 2 != 0)
continue;
System.out.print(i);
}
}
Método que mostra os número pares entre 2 e a metade de um valor passado como parâmetro.
Se a variável i for maior ou igual à metade do valor passado, encerra o laço.
Se a variável i for não par, volta para o incremento do for (i++).
46
Arrays
Um array é uma estrutura de dados composta por um número finito de componentes (ou elementos), todos eles do mesmo tipo, armazenado de forma contígua na memória, sendo que cada componente é identificado por um índice.
Seus elementos podem ser acessados diretamente sem a necessidade de acessar elementos anteriores ao desejado.
O tamanho de um array é correspondente à quantidade de componentes que possui.
Uma vez criado um array, pode-se alterar o seu conteúdo, mas não o seu tamanho. Ou seja, se for criado um array de 15 elementos, não há como aumentá-lo para 20 ou reduzi-lo para 10.
A primeira posição de um array é acessada pelo índice 0. Um array de 10 elementos terá índices variando entre 0 a 9.
47
Arrays Unidimensionais
Declaração e inicialização de um array unidimensional (vetor): definir o tipo definir a variável/identificador definir o tamanho ou os elementos iniciais
Array declarado mas não inicializado (null)int[] array;
Array de 10 inteiros:int[] arrayInt = new int[10];
Array de 5 doubles (valores definidos na criação)double[] arrayDouble = {2.0, .75, 1.5, 4.2, 9.7};
Captura do tamanho do array unidimensionalint tam = arrayInt.length;
0 1 2 3 4 5 6 7 8 9
vetor
48
Arrays Unidimensionais
Método que cria um vetor de qualquer tamanho, inicializa-o, apresenta-o na tela e o retorna ao final.
Enhanced for: melhoria do método for
(JAVA 5) sintaxe mais simplificada
para percorrer um array não se tem acesso direto
ao índice do elemento manipulado
public static int[] testeVetor(int tamanho){
int[] vetor = new int[tamanho];
for(int i = 0; i < vetor.length; i++){
if (i % 2 = = 0)
vetor[i] = 0;
else
vetor[i] = 1;
}
// amostragem na tela com o enhanced for
for(int elemento : vetor){
System.out.println(elemento);
}
return vetor;
}
49
Arrays Bidimensionais Declaração e inicialização de um array bidimensional (matriz):
definir o tipo definir a variável/identificador definir o tamanho (linhas e colunas) ou os elementos iniciais
Array declarado mas não inicializado (null)int[][] array;
Array de 10x2 inteiros:int[][] arrayInt = new int[10][2];
Array de 2x3 inteiros (valores definidos na criação)int[][] arrayInt = {{1, 2, 3}, {4, 5, 6}};int[][] arrayInt = {{1, 2, 3}, {4, 5, 6}};
Captura do tamanho do array bidimensionalint linhas = arrayInt.length;int colunas = arrayInt[0].length;
0 1 2 3
01
0 1 2 30 1 2 3
0 1
matriz
matriz
50
Arrays Bidimensionais Método que cria uma
matriz de qualquer tamanho, inicializa-a, apresenta-a na tela e a retorna ao final.
Enhanced for: como uma matriz é
um vetor dentro de vetores, o primeiro for captura um vetor e o segundo for captura os elementos deste vetor.
public static int[][] testeMatriz(int l, int c){
int[][] matriz = new int[l][c];
for(int i = 0; i < matriz.length; i++){
for(int j = 0; j < matriz[0].length; j++){
if (i % 2 = = 0)
matriz[i][j] = 0;
else
matriz[i][j] = 1;
}
// amostragem na tela com o enhanced for
for(int[] linha : matriz){
for(int elemento : linha){
System.out.println(elemento);
}
return matriz;
}
Exercícios