josé maria monteiro - ifrn.edu.brclaytonmaciel/files/20111/peoo/aula 2... · completo para o...
TRANSCRIPT
1
José Maria Monteiro
Pontifícia Universidade Católica do Rio de Janeiro Pontifícia Universidade Católica do Rio de Janeiro –– PUCPUC--RioRioDepartamento de InformáticaDepartamento de Informática
[email protected]@inf.puc--rio.brrio.br
“Nada existe no mundo tão poderoso
quanto uma idéia cujo tempo chegou”.Victor Hugo
Clayton Maciel Costa
Campus: IpanguaçuCurso: Técnico em Informática
2
Unidade II: 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çõesmultiplataforma;
– 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
Introdução à Linguagem Java
3
� 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)
Introdução à Linguagem Java
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 …
4
A Linguagem Java
� Tecnologia e Conceitos
– A evolução da linguagem é controlada peloJava Community Process (www.jcp.org)formado pela Sun e usuários Java;
– Ambientes de execução (JRE) e dedesenvolvimento (SDK) são fornecidos porfabricantes de hardware e software;
– Java possui uma coleção de APIs (bibliotecas)padrão que podem ser usadas para construiraplicaçõ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.
A Linguagem Java
5
� Plataformas Java
Enterprise APIs
Java Development Kit (JDK)
AWTAWT SwingSwing AppletsApplets
ThreadsThreads CollectionsCollections FilesFiles
A Linguagem Java
� PlataformasJava
A Linguagem Java
6
Source: Sun Microsystems, Inc.
A Linguagem Java
� Plataformas Java
A Linguagem Java
� Plataformas Java
7
� Orientada a Objetos;
� Orientada a Eventos;
� C++ like (sem ponteirosexplícitos)
� Distribuída;
� Compilada/Interpretada;
� Robusta;
� Segura;
� Portável;
� Código Móvel;
� 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;
A Linguagem Java
8
� Objetos;
� Classes (abstratas e concretas);
� Encapsulamento;
� Proteção (public, private, protected, default);
� Herança (simples e “quase múltipla”);
� Polimorfismo;
Orientada a Objetos
A Linguagem Java
C++ Like
class Complex
{
float real, imag;
boolean isReal ()
(
return (imag==0);
}
}
A Linguagem Java
9
� 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;
Distribuída
A Linguagem Java
� Compilada (bytecodes)� Interpretação (máquina virtual, jvm)� Portável - “write once run anywhere”
Compilada/Interpretada
AloMundo.java
Execução
compilador (javac)
AloMundo.class
interpretador (JVM)
A Linguagem Java
10
HelloWorldApp.class
Compilada/Interpretada
A Linguagem Java
Compilada/Interpretada
HelloWorldApp.javaHelloWorldApp.java
A Linguagem Java
11
Bytecode / API
Interpretador
Java Virtual Machine
Browser
Servidor HTTP
bytecodes
Obs: 5% de C compilado (Desempenho)Obs: 5% de C compilado (Desempenho)
Compilada/Interpretada
A Linguagem Java
Código Nativo
JIT Compiler
Bytecode / API
Java Virtual Machine
Browser
Servidor HTTP
bytecodes
Obs: JIT (Just-in-Time compiler, 50% de C compilado (Desempenho)
A Linguagem Java
12
Código Nativo
Compilador Convencional
Código Fonte Bibliotecas/API
Compilada/Interpretada
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 embutidos:hardware muito heterogêneo;
� Bytecode portável;
� “Escreva uma vez e rode em qualquer lugar”;
IBM / Aix PC / Windows Sun / Solaris
JavaVM JavaVM JavaVM
Bytescodes (.class)
A Linguagem Java
13
HelloWorldApp.class
Portável
(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);
A Linguagem Java
14
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 simplese segura;
� O suporte é dado pela própria linguagem, fazparte do pacote padrão de java (pacotejava.Lang);
� É portável, até mesmo em plataformas semthreads;
A Linguagem Java
15
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.
A Linguagem Java
16
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 devalores ou coleção de outros tipos. Podem ser:
– Tipos básicos, ou primitivos: quando representamunidades indivisíveis de informação (de tamanhofixo).
– Tipos complexos: quando representam informaçõesque podem ser decompostas em tipos “menores”(primitivos ou outros tipos complexos).
A Linguagem Java
17
Literais e Tipos
� Literais: São valores representáveis literalmente:
– Números: 1, 2.14, 1.6e-23, etc
– 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
Unidimensionais
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.
A Linguagem Java
18
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 )
A Linguagem Java
Operadores
� Operadores Relacionais:
> >= < <= == !=
� Operadores Lógicos:
&& ( and) || (or) ! ( not )
� Precedência:
Unários, aritméticos, relacionais, lógicos( primeiro && e depois ||)
A Linguagem Java
19
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() ;
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 --;
A Linguagem Java
20
Estrutura Condicional
if ( < EXPRESSÃO > ) {< BLOCO DE COMANDOS >
}else {
< BLOCO DE COMANDOS >}
FORMA GERAL:
Onde: <bloco-de-comandos> é uma seqüência de comandos entre { e }.
A Linguagem Java
...
int x = 5;
int y = 10;
if (x == y) {
System.out.println( “x = y” );
}
else {
System.out.println( “x != y”);
}
...
EXEMPLO:
Estrutura Condicional
A Linguagem Java
21
...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”);...
Exemplo:
maior entre dois números
Estrutura Condicional
A Linguagem Java
...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 ){
System.out.println (x);}else {
if (y > x) {
System.out.println (y);}else{
System.out.println (“x = y”);}
} ...
PS: Escreva com clareza!!!
A Linguagem Java
22
Estrutura Condicional
...if ((x > y) && (x > z))
System.out.println (x);else if ((y > x) && (y > z))
System.out.println (y);else
System.out.println (z);...
Exemplo:
maior entre três números
A Linguagem Java
while ( < EXPRESSÃO > ) {
< BLOCO DE COMANDOS >
}
FORMA GERAL:
Estrutura de Repetição: While
A Linguagem Java
23
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: While
A Linguagem Java
do {
< BLOCO DE COMANDOS >
}
while ( < EXPRESSÃO > );
FORMA GERAL:
Estrutura de Repetição: Do…While
A Linguagem Java
24
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: Do…While
A Linguagem Java
for ( < INICIALIZAÇÃO >; < TESTE >; < ATUALIZAÇÃO >; ) {
< BLOCO DE COMANDOS >
}
FORMA GERAL:
Estrutura de Repetição: For
A Linguagem Java
25
…
int soma = 0 ;
for ( int i =1 ; i <= 100 ; i ++ ) {
soma = soma + i ;
}
...
EXEMPLO:
Estrutura de Repetição: For
A Linguagem Java
…
int soma = 0 ;
for ( int i =1 , j =2; i <= 100 ; i ++, j ++ ) {
soma = soma + i + j ;
}
...
EXEMPLO:
Estrutura de Repetição: For
A Linguagem Java
26
…
int soma = 0 ;
for ( int i =1 , j =2, System.out.println(i); i <= 100 ; i ++, j ++ ) {
soma = soma + i + j ;
}
...
EXEMPLO:
Estrutura de Repetição: For
Erro de compilação. Código feio.
A Linguagem Java
…
int soma = 0 ;
int i, j;
for ( i =1 , j =2, System.out.println(i); i <= 100 ; i ++, j ++ ) {
soma = soma + i + j ;
}
...
EXEMPLO:
Estrutura de Repetição: For
Código feio.
A Linguagem Java
27
…
int soma = 0 ;
int i = 1;
for (;;) {
soma = soma + i ;
System.out.println(soma);
i++;
}
...
EXEMPLO:
Estrutura de Repetição: For
A Linguagem Java
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 ;
}
Estrutura Case
A Linguagem Java
28
switch ( i % 35 ) {case 0:
< BLOCO DE COMANDOS 1 >break ;
case 5: case 10: case 15 :< BLOCO DE COMANDOS 2 >break ;
default:< BLOCO DE COMANDOS 3 >break ;
}
Estrutura Case
Onde: % operador resto da divisão.
char, byte, short ou int.
Constant Expression.
Opcional.
A Linguagem Java
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 ;
}
Estrutura Case
Saída: “Case 0”.
A Linguagem Java
29
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 ;
}
Estrutura Case
Saída: “Case 5, 10 ou 15”.
A Linguagem Java
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 ;
}
Estrutura Case
Saída: “Case Default”.
A Linguagem Java
30
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 ;
}
Estrutura Case
Saída: “Case 0”.
A Linguagem Java
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 ;
}
Estrutura Case
Saída:
A Linguagem Java
31
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 ;
}
Estrutura Case
Saída: “Case 5, 10 ou 15”.
A Linguagem Java
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");
}
Estrutura Case
Saída: “Case 0” “Case 5, 10 ou 15” “Case Default”.
A Linguagem Java
32
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");
}
Estrutura Case
Saída: “Case 0” “Case Default” “Case 5, 10 ou 15”.
A Linguagem Java
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");
}
Estrutura Case
Saída: “Case 5, 10 ou 15” “Case Default”.
A Linguagem Java
33
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
A Linguagem Java
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”.
Estrutura Case
A Linguagem Java
34
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”.
Estrutura Case
A Linguagem Java
Estudo de Caso
35
“A diferença entre problemas e
dificuldades é que os primeiros
têm solução.”Roberto Civita
� 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é ovigésimo termo.
� Faça um programa para calcular o fatorial de um númerolido do teclado.
� Faça um programa que recebe uma frase (várias strings)como parâmetro e a imprime no vídeo.
Exercícios
A Linguagem Java
36
� Escreva um programa que faça o seguinte teste para osnú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: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.
Desafio
A Linguagem Java
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;
}}
}
Exemplo
A Linguagem Java