Curso: Técnico em Informática Campus: Ipanguaçu José Maria Monteiro Pontifícia Universidade Católica do Rio de Janeiro PUC-Rio Departamento Clayton Maciel de Informática Costa clayton.maciel@ifrn.edu.br monteiro@inf.puc-rio.brrio.br 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) 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
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 de desenvolvimento (SDK) são fornecidos por fabricantes de hardware e software; 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; 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
Plataformas Java AWT Swing Applets Threads Collections Files Java Development Kit (JDK) Enterprise APIs Plataformas Java 5
Plataformas Java Source: Sun Microsystems, Inc. Plataformas Java 6
Orientada a Objetos; Orientada a Eventos; C++ like (sem ponteiros explícitos) Distribuída; Compilada/Interpretada; Robusta; Segura; Portável; Código Móvel; Multi-Threaded; Garbage Collected; Case Sensitive; Trat. de Exceções; Linguagem Concorrente; Ambientes Visuais; Programação com Componentes; Java é um padrão suportado por várias indústrias; 7
Orientada a Objetos Objetos; Classes (abstratas e concretas); Encapsulamento; Proteção (public, private, protected, default); Herança (simples e quase múltipla ); Polimorfismo; C++ Like class Complex float real, imag; boolean isreal () ( return (imag==0); 8
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; 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
Compilada/Interpretada HelloWorldApp.class Compilada/Interpretada HelloWorldApp.java 10
Compilada/Interpretada Bytecode / API Interpretador Java Virtual Machine bytecodes Browser Servidor HTTP Obs: 5% de C compilado (Desempenho) 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
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++. Portável Planejada para sistemas embutidos: hardware muito heterogêneo; Bytecode portável; Escreva uma vez e rode em qualquer lugar ; Bytescodes (.class) JavaVM JavaVM JavaVM IBM / Aix PC / Windows Sun / Solaris 12
Portável HelloWorldApp.class A JVM é específica para cada SO e Hardware. (JVM) (JVM) (JVM) 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
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. 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
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; 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
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 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
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 Tipos Primitivos Têm tamanho fixo. Têm sempre um valor default. Armazenados na pilha (acesso rápido). Não são objetos. 17
Tipos Primitivos boolean char byte short int long float double true ou false caracteres ( Unicode ) inteiro ( 8 bits ) inteiro (16 bits) inteiro ( 32 bits ) inteiro ( 64 bits) ponto flutuante ( 32 bits ) ponto flutuante (64 bits ) Operadores Operadores Relacionais: > >= < <= ==!= Operadores Lógicos: && ( and) (or)! ( not ) Precedência: Unários, aritméticos, relacionais, lógicos ( primeiro && e depois ) 18
Strings String não é um tipo primitivo e sim uma classe; Literais:, Hello, World ; Concatenação: Hello + World = HelloWorld ; Conversão Implícita: Hello + 2001 = Hello2001 ; Comparação de Strings: a.equals(b) ; Tamanho de uma String: a.length() ; 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
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. Estrutura Condicional EXEMPLO:... int x = 5; int y = 10; if (x == y) System.out.println( x = y ); else System.out.println( x!= y );... 20
Estrutura Condicional Exemplo: maior entre dois números... int x, y; 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 );... Estrutura Condicional... if (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!!! System.out.println (x); else if (y > x) System.out.println (y); else System.out.println ( x = y );... 21
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); Estrutura de Repetição: While FORMA GERAL: while ( < EXPRESSÃO > ) < BLOCO DE COMANDOS > 22
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);... Estrutura de Repetição: Do While FORMA GERAL: do < BLOCO DE COMANDOS > while ( < EXPRESSÃO > ); 23
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); Estrutura de Repetição: For FORMA GERAL: for ( < INICIALIZAÇÃO >; < TESTE >; < ATUALIZAÇÃO >; ) < BLOCO DE COMANDOS > 24
Estrutura de Repetição: For EXEMPLO: int soma = 0 ; for ( int i =1 ; i <= 100 ; i ++ ) soma = soma + i ;... Estrutura de Repetição: For EXEMPLO: int soma = 0 ; for ( int i =1, j =2; i <= 100 ; i ++, j ++ ) soma = soma + i + j ;... 25
Estrutura de Repetição: For EXEMPLO: int soma = 0 ; for ( int i =1, j =2, System.out.println(i); i <= 100 ; i ++, j ++ )... soma = soma + i + j ; Erro de compilação. Código feio. 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
Estrutura de Repetição: For EXEMPLO: int soma = 0 ; int i = 1; for (;;) soma = soma + i ; System.out.println(soma); i++;... Estrutura Case FORMA GERAL: switch ( < EXPRESSÃO > ) case x: < BLOCO DE COMANDOS > case y: case z: case w : < BLOCO DE COMANDOS > default: < BLOCO DE COMANDOS > 27
Estrutura Case char, byte, short ou int. switch ( i % 35 ) case 0: < BLOCO DE COMANDOS 1 > case 5: case 10: case 15 : < BLOCO DE COMANDOS 2 > default: < BLOCO DE COMANDOS 3 > Onde: % operador resto da divisão. Constant Expression. Opcional. Estrutura Case Saída: Case 0. 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"); 28
Estrutura Case Saída: Case 5, 10 ou 15. int i = 10; 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"); Estrutura Case Saída: Case Default. int i = 1; 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"); 29
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"); Saída: Case 0. Estrutura Case int i = 1; switch (i) case 0: System.out.println("Case 0"); case 5: case 10: case 15 : System.out.println("Case 5, 10 ou 15"); Saída: 30
Estrutura Case Saída: Case 5, 10 ou 15. 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"); 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
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. 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
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. 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
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 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
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. 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
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