A Tecnologia Java 1 Introdução à linguagem Origens do JAVA Projecto “Green”, programação para a electrónica de Consumo (Dezembro 1990): Primeira abordagem: Em C++ Pouca memória disponível Processadores fracos Arquitecturas muito diferentes Baixos requisitos computacionais a linguagem era inadequada demasiada complexa não era multi-plataforma Segunda abordagem: Criar uma nova linguagem multiplataforma com o melhor do C++, mas mais simples. Nasceu o OAK. 2 Introdução à Linguagem (cont.) O projecto foi um fracasso, a electrónica de consumo não precisava de algo tão sofisticado. Primeiros anos da WWW Páginas estáticas todos os programas eram corridos no lado do servidor. Massificação da WWW correr os programas do lado do cliente Problemas: Diversos tipos de máquinas ligados á rede Problemas de segurança Independente da plataforma A Sun viu a oportunidade e adaptou o OAK à WWW Surgiu assim o JAVA (1995). 3 Arquitectura Java Write once, Run anywhere ! 4 Arquitectura JAVA (cont.) Independente da arquitectura computacional Simples e Poderosa: portável Derivada do C++ Segura: Não existem chamadas directas ao SO para esse feito usa-se o Java Native Interface (JNI) Não existem ponteiros explícitos Robusta: Gestão automática de memoria. 5 Arquitectura JAVA (cont.) Orientada a Objectos: Linguagem Orientada a Objectos pura (quase…). Multitarefa Permite fazer coisas diferentes ao mesmo tempo (Threads) 6 Plataformas JAVA J2ME – Java 2 Micro Edition J2SE – Java 2 Standard Edition Java para Paltops e Telemóveis Java para desktops / workstations J2EE - Java 2 Enterprise Edition Java para servidores 7 8 Linguagem Java 9 Hello World public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } } Todo o código é escrito dentro de classes Uma Classe Executável (Main Class) tem o método Class HelloWorld public static void main(String[] args) System.out.println Escrita de mensagens no monitor 10 Executar um programa Compilar o programa Java compiler (javac) Javac HelloWorld.java HelloWorld.class Correr o programa Java Virtual Machine (java) Java HelloWorld “ola mundo” 11 Definição da linguagem 12 Tipos de dados básicos Números Inteiros: byte – 8 bits, short – 16 bits float – 32 bits -3.40292347E+38 a +3.40292347E+38 double – 64 bits -1.79769313486231570E+308 a +1.79769313486231570E+308 Caracteres: char – 16 bits -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 Números Reais: -2.147.483.648 a 2.147.483.647 long – 64 bits, -32.768 a 32.767 int – 32 bits 128 a 127 '\u0000' a '\uFFFF' (Valores em unicode) Booleanos: boolean – 1 bit true ou false 13 Operadores Aritméticos: + Adição - Subtracção * Multiplicação / Divisão % Resto da Divisão Comparação: Atribuição: = Atribuição += , -= , *= , /= , %= Lógicos: Incremento e Decremento: ++ , -- == igualdade != diferença < menor que > maior que <= menor ou igual >= maior ou igual && ( e ) || ( ou ) ! (não) Bit a bit >> , << &|^ 14 Precedência e Associatividade dos Operadores Prioridade Operador Associatividade Alta () da esquerda para a direita ++ -- + - ! unários; da direita para a esquerda */% da esquerda para a direita +- da esquerda para a direita < <= > >= da esquerda para a direita == != da esquerda para a direita & da esquerda para a direita ^ da esquerda para a direita | da esquerda para a direita && da esquerda para a direita || da esquerda para a direita Baixa = += -= *= /= %= da direita para a esquerda 15 Símbolos – declaração e inicialização Exemplos de declarações de variáveis: int x; int x = 10; int x = 20, y, z = 30; int a = x+y; char um = ‘1’; char c = ‘A’; char newline = ‘\n’; boolean fim; boolean fechado = true; long diametro; long raio = -1.7E+5 double j = .000000123 double pi = 3.141559273269 Caso Geral id_tipo id_variavel [ = valor ]; id_tipo id_variavel [ = valor ] , [id_variavel [ = valor ] … ]; 16 Simbolos (cont.) Constantes: final id_tipo id_variavel = valor [, id_variavel [ = valor ] … ]; NOTA: As constantes têm de ser inicializadas quando são declaradas final double PI = 3.14; Conversões entre tipos (Casting): int x = 12; double d; d = (double) x; // d = 12.0 double x = 12; int i; i = (int) x; // i = 12 double x = 12.5; int i; i = (int) x; // i = 12 char c1 = ‘a’ c1 = (char) ((int) c1 + 1) // c1 = ‘b’ 17 Funções matemáticas Biblioteca Java.lang.Math double s = java.lang.math.sin(3.14) Seno de PI double r = java.lang.math.random() Aleatorio ente 0..1 18 Input / output Output System.out.println(“mensagem”) System.out.print(“mensagem”) JOptionPane.showMessageDialog(null,"Este é um diálogo simples"); Input System.in.read(); JOptionPane.showInputDialog("Digite o seu nome"); Teclado.java readInteger() readLong() readDouble() readFloat() readString(); int i; i = Teclado.readInteger() 19 Comentários Comentar uma linha de código: // int x; //int x = 10; int x = 20, y, z = 30; int a = x+y; Comentar um bloco de código: /* */ int x; /*int x = 10; int x = 20, y, z = 30;*/ int a = x+y; 20 Estruturas de Controlo Condicionais: if/else if (numer %2 == 0) System.out.println(“numero par”); else System.out.println(“numero impar”); if ( expressão booleana) instruções; [else instruções;] 21 Estruturas de Controlo (cont.) switch switch (expressão inteira) { case valor_1: instruções; break; case valor_2: instruções; break; case valor_3: instruções; break; … case valor_n: instruções; break; default: instruções; }; switch (mes) { case 2: dias = 28; break; case 4: case 6: case 9: case 11: dias = 30; break; default: dias = 31; } 22 Estruturas de Controlo (cont.) Repetitivas: for ( inicialização; condição_de_saída; iteração ) instruções int a = 0; for (int i = 0; i <= 10; i++) a = a + i; 23 Estruturas de Controlo (cont.) while while ( condição_de_iteração ) { instruções } int a = 0; int i = 0; while (i <= 10) { a = a + i; i++; } 24 Estruturas de Controlo (cont.) do/while do { instruções } while ( condição_de_iteração ) ; int a = 0; int i = 0; do { a = a + i; i++; } while (i < 10); 25 Estruturas de Controlo (cont.) break/continue A instrução break força a saída do ciclo. A instrução continue avança para a proxima iteração do cliclo. 26 Estruturas de Controlo (cont.) int i = 0; While (true) { i++; if (i % 2 == 0 ) continue; if (i > 10) break; System.out.print(i); } 27 Exercício Construa um programa que imprima seis números inteiros, aleatórios entre 1 e 49. Construa um programa que solicite ao utilizador dois números inteiros, um operador e apresente o resultado do operador sobre os dois números 28 Referencias 29 Referencia e objectos Objectos Exemplo (todas os simbolos que não são do tipo básico) Point p1; p1 = new Point(); Point P2; P2 = p1; Point p3 = new Point(1,2); p2 p1 p3 0,0 Operadores new = == != Todas as variaveis de tipos primitivos contêm valores Todas as variaveis do tipo “Object” contêm referência 1,2 30 Garbage Collector Em C++: // Cria um objecto TObject *Objecto = new TObject; … // Liberta o espaço ocupado em memória // ocupado por esse objecto delete Objecto; Em Java: // Cria um objecto Object Objecto = new Object(); … Chamar o Garbage Collector: System.gc(); 31 Garbage Collector (Cont.) public void Cria() { Object Objecto1 = new Object(); Object Objecto2 = new Object(); Object Objecto3 = new Object(); } Objecto1 Objecto2 Objecto3 Objecto1 Objecto2 Objecto3 public void Funcao() { Cria(); System.gc(); } A linguagem Java possui recolha automática de Lixo System.gc() Forçar a recolha de Lixo 32 Métodos public [static] <tipo_retorno> nome_método ( <lista_parametros> ) { instruções; } public class HelloWorld { public static void mostraMensagem(String s) { System.out.println(s) } public static int soma(int n1, int n2) { int n = n1+n2; return n; } public static void main(String[] args) { mostraMensagem ("Hello Word"); System.out.println(soma(2,3)); } } NOTA: • Todos os parâmetros do tipo básico são passados por valor •Todos os objectos são passados com referencia 33 Strings 34 Strings Classe String Objectos imutaveis s1 String s1 = “uma string” String s2 = “Outra string” String s3 =s2 Uma string s2 Outra string s3 35 Strings - concatenação Operador de concatenação + e += String s1 = “uma string” String s2 = “Outra string” String s3 =s2 S2 += “ concatenada” + “!” s2 s1 Uma string s2 Outra string Concatenada! Outra string s3 36 Conversão entre numeros e string Para String Classe StringValueOf(…) Expressões que calculam Strings String s = String.valueOf(10); String s = 2 + “” String s = 2 + 3 + “!” De String Classe Integer int i = Integer.parseInt("2"); Classe Double double i = Double.parseDouble(“1.7"); 37 Métodos de String lenght() equals() equalsToIgnoreCase compareTo compareToIgnoreCase indexOf hashCode() substring() startsWith() endsWith() toUpperCase() toLowerCase() replace() concat charAt() trim String.java 38 Exercício Construa um programa que solicite o nome e o apelido de uma pessoa e de seguida escreva o nome completo de forma invertida. Construa uma função que transforme uma string para minúsculas utilizando o alfabeto português. Construa um programa que solicite ao utilizador um número real, uma função apresente o resultado da função sobre o numero 39 Arrays 40 Arrays São objectos Declaração Int [] v2 = { 1,2,3,4}; Método lenght() v1 = new int[9]; 0 0 0 0 0 0 0 0 0 Inicialização int [] v1 Construção v1 1 2 3 v2 Retorna a dimensão do array Acesso indexado V[0] = 10 41 Arrays Arrays Unidimensionais int[] lista = {1, 2, 3, 4}; lista[3] = lista[1]; // {1, 2, 3, 1} int lista[] = new int[4]; lista[0] = 1; lista[1] = 2; int lista[4]; // erro int lista[4] = {1, 2, 3, 4}; // erro int lista[]; lista[0] = 1; // erro 42 Arrays (cont.) Arrays Bidimensionais (matrizes) char galo[][]={{‘ ’,‘ ’,‘ ’}, {‘ ’,‘ ’,‘ ’}, {‘ ’,‘ ’,‘ ’}}; galo[1][1]=‘X’; // {{‘ ’,‘ ’,‘ ’}, // {‘ ’,‘X’,‘ ’}, // {‘ ’,‘ ’,‘ ’}} galo[0][0]=‘O’; // {{‘O’,‘ ’,‘ ’}, {‘ ’,‘X’,‘ ’}, {‘ ’,‘ ’,‘ ’}} Arrays de dimensão n int array[][][]…[n]= new int[10][10][10]…[10]; array[1][3][2]…[6] = 1; 43 Arrays (cont.) Calcular o tamanho de um array; int a[] = new int[4]; System.out.println(a.length); // mostra 4 int a[][] = new int[4][2]; System.out.println(a.length); // mostra 4 System.out.println(a[1].length); // mostra 2 44 Exercício Construa um programa que calcule imprima uma chave de totoloto. 45