Curso: Técnico em Informática Campus: Ipanguaçu José Maria Monteiro Pontifícia Universidade Católica do Rio de Janeiro – PUC PUC--Rio Departamento de Informática Clayton Maciel Costa [email protected] [email protected] [email protected] “Nada existe no mundo tão poderoso quanto uma idéia cujo tempo chegou”. Victor Hugo 1 Unidade II: Introdução à Linguagem Java Introdução à Linguagem Java O nome “java” é usado para referir-se a: – Uma linguagem de programação orientada a objetos; – Uma coleção de APIs (classes, componentes, frameworks) para o desenvolvimento de aplicações multiplataforma; – Um ambiente de execução presente em browsers, eletrodomésticos, mainframes, SOs, celulares, palmtops, cartões inteligentes, … James Gosling, sun microsystems, 1995; – Linguagem projetada para eletrodomésticos 2 Introdução à Linguagem Java Origem e Evolução – 1991 (Green Project/Oak) - SW p/ dispositivos de eletrônicos em rede. Requisitos: • suporte a diferentes plataformas • distribuição de software via rede • garantia de confiabilidade de código • baixos requisitos de memória • código pequeno – 1994 - HotJava - browser 100% Java – 1995 - lançada no SunWorld (voltada à Web) A Linguagem Java Origem e Evolução – Ideal para a Internet; • Os applets são colocados em páginas html • Servlets/JSP – Independente da Internet; • Pode ser usada para o desenvolvimento de aplicações standalone – Aplicações de Console (DOS) – Aplicações Desktop (Windows Forms) • E muito mais … 3 A Linguagem Java Tecnologia e Conceitos – A evolução da linguagem é controlada pelo Java Community Process (www.jcp.org) formado pela Sun e usuários Java; – Ambientes de execução (JRE) e desenvolvimento (SDK) são fornecidos fabricantes de hardware e software; de por – Java possui uma coleção de APIs (bibliotecas) padrão que podem ser usadas para construir aplicações • Organizadas em pacotes (java.*. Javax.* e extensões); • Usadas pelos ambientes JRE e SDK; A Linguagem Java Terminologia – JDK - Java Development Kit: Terminoligia utilizada até a versão 1.1 para identificar a plataforma Java. – Java 2: Terminologia utilizada a partir da versão 1.2 da plataforma Java, atualmente na versão 1.4. – J2SDK – Java 2 Software Development Kit: Ambiente completo para o desenvolvedor Java. Inclui compilador e a Virtual Machine. – J2RE – Java 2 Runtime Environment: Ambiente apenas para execução de aplicações Java, utilizada em ambientes de produção. Não contém o compilador. – JVM – Máquina Virtual Java. Máquina imaginária implementada como uma aplicação de software em uma máquina real. 4 A Linguagem Java Plataformas Java AWT Threads Swing Collections Applets Files Java Development Kit (JDK) Enterprise APIs A Linguagem Java Plataformas Java 5 A Linguagem Java Plataformas Java Source: Sun Microsystems, Inc. A Linguagem Java Plataformas Java 6 A Linguagem Java Orientada a Objetos; Segura; Orientada a Eventos; Portável; C++ like (sem ponteiros explícitos) Código Móvel; Distribuída; Compilada/Interpretada; Robusta; Multi-Threaded; Garbage Collected; Case Sensitive; Trat. de Exceções; A Linguagem Java Linguagem Concorrente; Ambientes Visuais; Programação com Componentes; Java é um padrão suportado por várias indústrias; 7 A Linguagem Java Orientada a Objetos Objetos; Classes (abstratas e concretas); Encapsulamento; Proteção (public, private, protected, default); Herança (simples e “quase múltipla”); Polimorfismo; A Linguagem Java C++ Like class Complex { float real, imag; boolean isReal () ( return (imag==0); } } 8 A Linguagem Java Distribuída Pacote de classes para programação em rede (java.Net): sockets, urls, http, datagrama, etc; Rmi; Integração com Corba (Objetos Distribuídos); Excelente para o desenvolvimento de aplicações Cliente/Servidor; A Linguagem Java Compilada/Interpretada Compilada (bytecodes) Interpretação (máquina virtual, jvm) Portável - “write once run anywhere” AloMundo.java compilador (javac) AloMundo.class interpretador (JVM) Execução 9 A Linguagem Java Compilada/Interpretada HelloWorldApp.class A Linguagem Java Compilada/Interpretada HelloWorldApp.java 10 A Linguagem Java Compilada/Interpretada Bytecode / API Interpretador Java Virtual Machine bytecodes Browser Servidor HTTP Obs: 5% de C compilado (Desempenho) A Linguagem Java Código Nativo JIT Compiler Bytecode / API Java Virtual Machine bytecodes Browser Servidor HTTP Obs: JIT (Just-in-Time compiler, 50% de C compilado (Desempenho) 11 A Linguagem Java Compilada/Interpretada Código Nativo Compilador Convencional Código Fonte Bibliotecas/API Ex: Excelsior JET (http://www.excelsior-usa.com/products.html) “Excelsion JET: Transforms Java applications into native Win32 executables that run ate the speed of C++ applications” Obs: Ganha desempenho, mas, perde portabilidade. Desempenho similar a C++. A Linguagem Java Portável Planejada para sistemas hardware muito heterogêneo; embutidos: Bytecode portável; “Escreva uma vez e rode em qualquer lugar”; Bytescodes (.class) JavaVM JavaVM JavaVM IBM / Aix PC / Windows Sun / Solaris 12 A Linguagem Java Portável HelloWorldApp.class (JVM) (JVM) (JVM) A JVM é específica para cada SO e Hardware. A Linguagem Java Robusta Não permite acesso direto à memória; – (não utiliza ponteiros explícitos); Possui coletor de lixo (garbagge collector); Possui tratamento de exceções; Fortemente tipada; Implementa o conceito de cast’s; Verificações obrigatórias (ex: arrays); 13 A Linguagem Java Segura Não possui ponteiros explícitos; Acesso controlado aos recursos do sistema – ram, sistema de arquivos; Gerenciador de segurança – classe securitymanager ; Verificação dos bytecodes que trafegam na rede; Existem ferramentas para encriptação de applets; Obs: os applets podem ser interceptados através da rede e decompilados com ferramentas de engenharia reversa, como o mocha. A Linguagem Java Multi-Threaded Implementa threads de forma bastante simples e segura; O suporte é dado pela própria linguagem, faz parte do pacote padrão de java (pacote java.Lang); É portável, até mesmo em plataformas sem threads; 14 A Linguagem Java Tratamento de Exceções Permite o tratamento de situações excepcionais; Sintaxe apropriada: – try, catch, finally, throw, throws; Exceções embutidas; Permite a criação de novas exceções – definição de situações excepcionais; A Linguagem Java Estrutura de um Programa Java class <nome_da_classe> { public static void main ( < parâmetros > ) { < declarações > < comandos > } } main: método por onde se inicia a execução do programa. public: é o qualificador do método, indica que este método é acessível a objetos de classes externas. static: qualificador, os métodos statics podem ser invocados mesmo sem existir um objeto instanciado da classe. void: indica que o método não tem valor de retorno. 15 A Linguagem Java O Primeiro Programa Java public class HelloWorld { public static void main ( String args[ ] ) { System.out.println(“Hello World!”); } } Salvar o arquivo com o nome da classe: HelloWorld.java Para Compilar: javac HelloWorld.java Para Executar: java HelloWorld A Linguagem Java Literais e Tipos Tipos representam um valor, uma coleção de valores ou coleção de outros tipos. Podem ser: – Tipos básicos, ou primitivos: quando representam unidades indivisíveis de informação (de tamanho fixo). – Tipos complexos: quando representam informações que podem ser decompostas em tipos “menores” (primitivos ou outros tipos complexos). 16 A Linguagem Java Literais e Tipos Literais: São valores representáveis literalmente: – Números: 1, 2.14, 1.6e-23, etc Unidimensionais – Valores booleanos: true e false – Caracteres individuais: ‘a’, ‘u0041’,’\n’, etc – Seqüências de caracteres: “aaa”, “Java” – Vetores de números, booleanos ou strings: {”a”,”b”} Compostos A Linguagem Java Tipos Primitivos Têm tamanho fixo. Têm sempre um valor default. Armazenados na pilha (acesso rápido). Não são objetos. 17 A Linguagem Java Tipos Primitivos boolean true ou false char caracteres ( Unicode ) byte inteiro ( 8 bits ) short inteiro (16 bits) int inteiro ( 32 bits ) long inteiro ( 64 bits) float ponto flutuante ( 32 bits ) double ponto flutuante (64 bits ) A Linguagem Java Operadores Operadores Relacionais: > >= < <= == != Operadores Lógicos: && ( and) || (or) ! ( not ) Precedência: Unários, aritméticos, relacionais, lógicos ( primeiro && e depois ||) 18 A Linguagem Java Strings “String” não é um tipo primitivo e sim uma classe; Literais: “”, “Hello”, “World”; Concatenação: “Hello” + “World” = “HelloWorld”; Conversão Implícita: “Hello2001”; “Hello” + 2001 = Comparação de Strings: a.equals(b) ; Tamanho de uma String: a.length() ; A Linguagem Java Atribuição < IDENTIFICADOR> = < EXPRESSÃO> Ex: idade = 23; sexo = “M”; tem_filhos = false; Incremento e Decremento idade = idade + 1; ou idade + = 1; ou idade ++; idade = idade - 1; ou idade - = 1; ou idade --; 19 A Linguagem Java Estrutura Condicional FORMA GERAL: if ( < EXPRESSÃO > ) { < BLOCO DE COMANDOS > } else { < BLOCO DE COMANDOS > } Onde: <bloco-de-comandos> é uma seqüência de comandos entre { e }. A Linguagem Java Estrutura Condicional EXEMPLO: ... int x = 5; int y = 10; if (x == y) { System.out.println( “x = y” ); } else { System.out.println( “x != y”); } ... 20 A Linguagem Java Estrutura Condicional ... Exemplo: int x, y; maior entre dois números Scanner s = new Scanner(System.in); x = s.nextInt (); y = s.nextInt (); if (x > y ) System.out.println (x); else if (y > x) System.out.println (y); else System.out.println (“x = y”); ... A Linguagem Java Estrutura Condicional ... if (x > y ) System.out.println (x); else if (y > x) System.out.println (y); else System.out.println (“x = y”); ... ... if (x > y ) { System.out.println (x); } else { if (y > x) { System.out.println (y); } else { System.out.println (“x = y”); } } ... PS: Escreva com clareza!!! 21 A Linguagem Java Estrutura Condicional Exemplo: maior entre três números ... if ((x > y) && (x > z)) System.out.println (x); else if ((y > x) && (y > z)) System.out.println (y); else System.out.println (z); ... A Linguagem Java Estrutura de Repetição: While FORMA GERAL: while ( < EXPRESSÃO > ) { < BLOCO DE COMANDOS > } 22 A Linguagem Java Estrutura de Repetição: While EXEMPLO: Soma de 1 a N ... Scanner s1 = new Scanner(System.in); int i, n, s; n = s1.nextInt (); i = 1; s = 0; while (i < = n) { s = s + i; i = i + 1; } System.out.println(s); ... A Linguagem Java Estrutura de Repetição: Do…While FORMA GERAL: do { < BLOCO DE COMANDOS > } while ( < EXPRESSÃO > ); 23 A Linguagem Java Estrutura de Repetição: Do…While EXEMPLO: Soma de 1 a N ... int i, n, s; n = Util.readInt (); i = 1; s = 0; do { s = s + i; i = i + 1; } while (i < = n); System.out.println(s); ... A Linguagem Java Estrutura de Repetição: For FORMA GERAL: for ( < INICIALIZAÇÃO >; < TESTE >; < ATUALIZAÇÃO >; ) { < BLOCO DE COMANDOS > } 24 A Linguagem Java Estrutura de Repetição: For EXEMPLO: … int soma = 0 ; for ( int i =1 ; i <= 100 ; i ++ ) { soma = soma + i ; } ... A Linguagem Java Estrutura de Repetição: For EXEMPLO: … int soma = 0 ; for ( int i =1 , j =2; i <= 100 ; i ++, j ++ ) { soma = soma + i + j ; } ... 25 A Linguagem Java Estrutura de Repetição: For EXEMPLO: … Erro de compilação. Código feio. int soma = 0 ; for ( int i =1 , j =2, System.out.println(i); i <= 100 ; i ++, j ++ ) { soma = soma + i + j ; } ... A Linguagem Java Estrutura de Repetição: For EXEMPLO: Código feio. … int soma = 0 ; int i, j; for ( i =1 , j =2, System.out.println(i); i <= 100 ; i ++, j ++ ) { soma = soma + i + j ; } ... 26 A Linguagem Java Estrutura de Repetição: For EXEMPLO: … int soma = 0 ; int i = 1; for (;;) { soma = soma + i ; System.out.println(soma); i++; } ... A Linguagem Java Estrutura Case FORMA GERAL: switch ( < EXPRESSÃO > ) { case x: < BLOCO DE COMANDOS > break ; case y: case z: case w : < BLOCO DE COMANDOS > break ; default: < BLOCO DE COMANDOS > break ; } 27 A Linguagem Java Estrutura Case char, byte, short ou int. switch ( i % 35 ) { case 0: < BLOCO DE COMANDOS 1 > Constant break ; Expression. case 5: case 10: case 15 : < BLOCO DE COMANDOS 2 > break ; Opcional. default: < BLOCO DE COMANDOS 3 > break ; } Onde: % operador resto da divisão. A Linguagem Java Estrutura Case int i = 0; switch (i) { case 0: System.out.println("Case 0"); break ; case 5: case 10: case 15 : System.out.println("Case 5, 10 ou 15"); break ; default: System.out.println("Case Default"); break ; } Saída: “Case 0”. 28 A Linguagem Java Estrutura Case int i = 10; switch (i) { case 0: System.out.println("Case 0"); break ; case 5: case 10: case 15 : System.out.println("Case 5, 10 ou 15"); break ; default: System.out.println("Case Default"); break ; } Saída: “Case 5, 10 ou 15”. A Linguagem Java Estrutura Case Saída: “Case Default”. int i = 1; switch (i) { case 0: System.out.println("Case 0"); break ; case 5: case 10: case 15 : System.out.println("Case 5, 10 ou 15"); break ; default: System.out.println("Case Default"); break ; } 29 A Linguagem Java Estrutura Case int i = 0; switch (i) { case 0: System.out.println("Case 0"); break ; case 5: case 10: case 15 : System.out.println("Case 5, 10 ou 15"); break ; } Saída: “Case 0”. A Linguagem Java Estrutura Case int i = 1; switch (i) { case 0: System.out.println("Case 0"); break ; case 5: case 10: case 15 : System.out.println("Case 5, 10 ou 15"); break ; } Saída: 30 A Linguagem Java Estrutura Case int i = 5; switch (i) { case 0: System.out.println("Case 0"); break ; default: System.out.println("Case Default"); break ; case 5: case 10: case 15 : System.out.println("Case 5, 10 ou 15"); break ; } Saída: “Case 5, 10 ou 15”. A Linguagem Java Estrutura Case int i = 0; switch (i) { case 0: System.out.println("Case 0"); case 5: case 10: case 15 : System.out.println("Case 5, 10 ou 15"); default: System.out.println("Case Default"); } Saída: “Case 0” “Case 5, 10 ou 15” “Case Default”. 31 A Linguagem Java Estrutura Case int i = 0; switch (i) { case 0: System.out.println("Case 0"); default: System.out.println("Case Default"); case 5: case 10: case 15 : System.out.println("Case 5, 10 ou 15"); } Saída: “Case 0” “Case Default” “Case 5, 10 ou 15”. A Linguagem Java Estrutura Case int i = 5; switch (i) { case 0: System.out.println("Case 0"); case 5: case 10: case 15 : System.out.println("Case 5, 10 ou 15"); default: System.out.println("Case Default"); } Saída: “Case 5, 10 ou 15” “Case Default”. 32 A Linguagem Java Estrutura Case int i = 5; switch (i) { case 0: System.out.println("Case 0"); default: System.out.println("Case Default"); case 5: case 10: case 15 : System.out.println("Case 5, 10 ou 15"); } Saída: “Case 5, 10 ou 15”. A Linguagem Java Estrutura Case int i = 0; switch (i) { case 0: System.out.println("Case 0"); case 5: case 10: case 15 : System.out.println("Case 5, 10 ou 15"); break; default: System.out.println("Case Default"); } Saída: “Case 0” “Case 5, 10 ou 15”. 33 A Linguagem Java Estrutura Case int i = 0; switch (i) { default: System.out.println("Case Default"); break; case 0: System.out.println("Case 0"); case 5: case 10: case 15 : System.out.println("Case 5, 10 ou 15"); break; } Saída: “Case 0” “Case 5, 10 ou 15”. Estudo de Caso 34 “A diferença entre problemas e dificuldades é que os primeiros têm solução.” Roberto Civita A Linguagem Java Exercícios A série de fibonacci é formada pela seqüência: 1, 1, 2, 3, 5, 8, 13, … etc. Escreva um programa que gera a série de fibonacci até o vigésimo termo. Faça um programa para calcular o fatorial de um número lido do teclado. Faça um programa que recebe uma frase (várias strings) como parâmetro e a imprime no vídeo. 35 A Linguagem Java Desafio Escreva um programa que faça o seguinte teste para os números entre 1 e 100: – Se for múltiplo de 5 imprima: “fizz”; – Se for múltiplo de 7 imprima: “buzz”; – Se múltiplo de ambos imprima: “fizzbuzz”; Use: • args[ i ] , para se referir a um valor passado como parâmetro. • BufferedReader in = new BufferedReader (new InputStreamReader (System.in)); e String line = in.readLine( ); para ler uma string do teclado. A Linguagem Java Exemplo public class Fibonacci { public static void main(String[] args) { int current, prev = 1, prevprev = 0; System.out.print(prev + " "); for(int i = 0; i < 19; i++) { current = prev + prevprev; System.out.print(current + " "); prevprev = prev; prev = current; } } } 36 A Linguagem Java Exemplo public class Factorial { public static void main(String args[]) { int fact = 1; int numero; System.out.println("Digite um numero: "); numero = Util.readInt(); for(int i = 2; i <= numero; i++) fact *= i; System.out.println("O fatorial de " + numero + " e " + fact); } } 37