Introdução a Java

Propaganda
Introdução a Java
Mário Meireles Teixeira
UFMA – DEINF
Tecnologia Java
z
z
Java é tanto uma linguagem de programação de
alto nível quanto uma plataforma de desenvolvimento de aplicações
Java como linguagem de programação
z
z
z
desenvolvimento de aplicações locais, centralizadas e
distribuídas
desenvolvimento de aplicações cliente/servidor que
executam em browsers
Java como ambiente de execução
z
ambiente neutro (JRE – Java Runtime Environment)
para diferentes plataformas: SOs, browsers, celulares,
palmtops, eletrodomésticos...
Introdução a Java
2
1
Linguagem Java
z
Linguagem de programação orientada a objetos
z
z
z
z
z
z
z
z
z
Familiar (sintaxe parecida com C)
Simples e robusta (minimiza bugs, aumenta produtividade)
Suporte nativo a threads (+ simples, maior portabilidade)
Dinâmica (módulos, acoplamento em tempo de execução)
Com coleta de lixo (menos bugs, mais produtividade)
Independente de plataforma
Segura (vários mecanismos para controlar segurança)
Código intermediário de máquina virtual interpretado
(compilação rápida, execução + “lenta”, + produtividade no
desenvolvimento)
Sintaxe uniforme, rigorosa quanto a tipos (código mais
consistente)
Introdução a Java
3
Linguagens OO: genealogia
ALGOL
1960
SIMULA
1967
Pascal
1973
SmallTalk
1980
ADA
1983
Introdução a Java
C
1972
C++
C++
1985
1985
ADA
ADA
1995
1995
Java
Java
1995
1995
4
2
Desenvolvimento de
programas
código
fonte
processador
da linguagem
código
objeto
código
executável
código
objeto
Introdução a Java
5
Implementação de LP
z
Compilação
z
z
z
z
Interpretação pura
z
z
z
geração de código executável
dependente da plataforma de execução
tradução lenta X execução rápida
sem geração de código
execução lenta, independente de plataforma
Híbrida
z
z
z
geração de código intermediário
independente de plataforma de execução
tradução rápida X execução não muito rápida
Introdução a Java
6
3
Ambiente de compilação e
execução
• Compilação: Programa Java é compilado para um código
intermediário conhecido como bytecode
• Execução: Bytecodes são interpretados pela JVM (Java
Virtual Machine) executada no ambiente hospedeiro –
arquitetura neutra
INTERNET
fonte
Compilador
JAVA
Introdução a Java
bytecode
Interpretador
JAVA
Browser
{HTML}
interpretador
JAVA
plataforma
local
plataforma
remota
7
Compilação x Interpretação
z
Problema:
z
z
z
Para ter flexibilidade e segurança, abre-se mão do tempo
de execução
Um programa Java típico roda 10 vezes mais lento que um
programa equivalente em linguagem nativa
Solução: JIT (Just-in-time compiling)
z
z
z
Compiladores JIT convertem programas Java para
linguagem de máquina nativa assim que os mesmos são
lidos
Penalidade: a leitura dos programas se torna mais lenta
Vantagem: execuções subseqüentes são mais rápidas
Introdução a Java
8
4
Ambientes de execução e
desenvolvimento
z
Java 2 System Development Kit (J2SDK)
z
z
z
Java Runtime Environment (JRE)
z
z
z
Coleção de ferramentas de linha de comando para, entre
outras tarefas, compilar, executar e depurar aplicações
Java
Para habilitar o ambiente via linha de comando é preciso
colocar o caminho $JAVA_HOME/bin no PATH do
sistema
Ambiente mínimo para executar aplicações Java
Faz parte do J2SDK e das principais distribuições Linux,
MacOS X, AIX, Solaris, Windows 98/ME/2000 (exceto XP)
Download: http://java.sun.com/javase/downloads/index.jsp
Introdução a Java
9
Interfaces de Programação de
Aplicações – APIs
z
Java possui uma coleção de APIs (bibliotecas) padrão que
podem ser usadas para construir aplicações:
z
z
z
Organizadas em pacotes (java.*, javax.* e extensões)
Usadas pelos ambientes de execução (JRE) e de
desenvolvimento (SDK)
As principais APIs são distribuídas juntamente com os
produtos para desenvolvimento de aplicações:
z
z
z
Java 2 Standard Edition (J2SE): ferramentas e APIs essenciais
para qualquer aplicação Java (inclusive gráficas)
Java 2 Enterprise Edition (J2EE): ferramentas e APIs para o
desenvolvimento de aplicações distribuídas
Java 2 Micro Edition (J2ME): ferramentas e APIs para o
desenvolvimento de aplicações para aparelhos portáteis
Introdução a Java
10
5
Ambientes Integrados de
Desenvolvimento – IDEs
z
Existem diversos IDEs construídos a partir das
ferramentas básicas de desenvolvimento:
z
z
z
ambientes baseados em janelas
editores, visualizadores de classes, prototipação ...
Exemplos: Visual J++ (Microsoft), JBuilder
(Borland), Visual Café (Symantec), JCreator,
Eclipse, BlueJ, jGRASP...
Introdução a Java
11
Programa Java: Classe
• Uma classe é um arquivo fonte (texto)
CLASSE Nome1
CLASSE
Nome
mesmo Nome
Nome.java
Um arquivo pode conter
várias classes
Introdução a Java
CLASSE
Nome1
CLASSE
Nome2
Nome1.java
12
6
Arquivos fonte e executáveis
Arquivo fonte : Escola.java
Arquivos executáveis: class
Escola.class
bytecodes
public class Escola {{
Aluno.class
class Aluno {
bytecodes
Introdução a Java
13
Convenção para Nomes
z
Java, como C/C++, distingue entre letras maiúsculas e
minúsculas
z
Nomes de classes iniciam com maiúscula
z
Nomes de variáveis iniciam com minúsculas
z
Nomes de métodos são verbos que iniciam com minúscula e
depois usam maiúsculas
z
Representação: Unicode (16 bits - 65.536 caracteres)
z
z
z
z
Exemplo: escola é diferente de Escola
Exemplo: class Bem-vindo
Exemplo: int peso;
Exemplo: alteraPeso
Introdução a Java
14
7
Compilação e Execução:
SDK – linha de comando
z
z
z
Compilação: javac
A partir do diretório local:
javac nome.java
Vai produzir:
z
z
z
arquivos .class separados para
cada classe no arquivo .java
coloca arquivos no diretório
corrente
z
z
sendo nome = nome do arquivo
.class que contém o main
z
z
Lembrete: Autoexec.bat
SET PATH=C:\jdk1.4\bin
Execução: java
A partir do diretório local:
java nome
z
Executa a partir de main()
ou com argumentos:
java nome arg1,arg2, ...
Lembrete: Autoexec.bat
SET CLASSPATH= C:\jdk1.4\lib
Introdução a Java
15
Execução de programas Java
HelloWorld.java
javac
Introdução a Java
16
8
Verificação de bytecode
z
Etapa que antecede a execução do código em
classes carregadas através da rede
z
z
Class Loader distingue classes locais (seguras) de classes
remotas (potencialmente inseguras)
Verificação garante:
z
z
z
z
z
z
Aderência à especificação da JVM
Não-violação de políticas de acesso estabelecidas pela
aplicação
Não-violação da integridade do sistema
Ausência de estouros de pilha
Tipos de parâmetros corretamente especificados
Ausência de conversões ilegais de tipos
Introdução a Java
17
Processo de Execução
Editor
Introdução a Java
Compilador
Carregador de
classes
disco
Programa é criado em um
editor e armazenado no
disco
disco
Compilador gera os
bytecodes e os armazena no
disco
________
________
________
______
O carregador de classes –
Class Loader – coloca os
bytecodes na memória
memória
disco
Verificador de
bytecodes
________
________
________
______
O verificador de bytecodes –
Bytecodes Verifier –
confirma se todos os
bytecodes estão corretos e
não violam as restrições de
segurança da linguagem
Java
memória
Interpretador
________
________
________
______
memória
O interpretador lê os
bytecodes e executa o
programa
18
9
Programas JAVA
z
Aplicações (puras)
z
z
z
z
são programas carregados e executados
localmente pelo interpretador Java
possuem acesso a todos os recursos do
ambiente local: diretórios, arquivos
sempre contêm um método principal (main), de
onde se inicia a execução do programa
podem fazer chamadas a programas em código
nativo (outras linguagens, como C, C++)
Introdução a Java
19
Programas Cliente/Servidor
z
Applets: cliente
z
z
z
z
são programas inseridos em páginas HTML e
executados pelo browser (interpretador Java)
programas (classes) podem ser carregados
remotamente
restrições de segurança: não podem acessar
recursos locais, só podem comunicar-se com o
servidor de onde foram “baixados”
Servlets: servidor
z
z
executados sob o controle do servidor
classe carregada dinamicamente por requisição de
um cliente
Introdução a Java
20
10
Applets Java X JavaScript
z
z
z
z
z
Ambos são códigos executáveis inseridos em
páginas HTML
Código Java: classes compiladas e carregadas
remotamente
Código JavaScript: instruções fisicamente
dispersas ao longo da página HTML
Java é uma LP de uso geral, orientada a objetos:
classes, objetos, encapsulamento, herança e
polimorfismo
JavaScript: linguagem script sem classes, sem
herança e sem polimorfismo
Introdução a Java
21
Primeiros passos
11
Classe Java: apenas o método
main()
Atenção a maiúsculas
e minúsculas!
class Bemvindo {
public static void main (String[] args) {
System.out.println(“Bem-vindo!”);
}
}
Método main(): onde se inicia a execução
Introdução a Java
23
Exemplo de chamada de
métodos
System.out.println (“Bem-vindo!”);
objeto
método
System.out.print
objeto
Introdução a Java
método
parâmetro
(“Bem-vindo!”);
parâmetro
24
12
Chamada parametrizada
class Bemvindo {
public static void main (String[] args) {
System.out.println(“Bem-vindo ” +
args[0]);
}
}
Método main(): aceita argumentos para execução
Linha de comando: java Bemvindo Pedro
Introdução a Java
25
Classe Java: dois métodos
class Bemvindo2 {
static void imprime() {
System.out.println(“Bem-vindo!”);
}
public static void main (String[] args) {
imprime();
}
}
método static: método de classe, não aplicável sobre objetos
Introdução a Java
26
13
Classe Java: instanciando um
objeto
class Bemvindo3 {
void imprime(){
System.out.println(“Bem-vindo!”);
}
public static void main (String[] args) {
Bemvindo3 obj = new Bemvindo3();
// imprime(); // erro!
obj.imprime();
}}
método de instância, somente aplicável sobre objetos
Introdução a Java
27
Duas classes: composição
class Bemvindo3{
void imprime(){
System.out.println("Bem-vindo!");
}
public static void main(String[] args){
Bemvindo3 obj=new Bemvindo3();
Welcome outro=new Welcome();
obj.imprime();
outro.imprime();
class Bemvindo3{
} // main
imprime()
} // Bemvindo3
main(...) }
Introdução a Java
class Welcome{
void imprime(){
System.out.println("Welcome!");
}} // Welcome
class Welcome{
imprime()
}
28
14
Streams de entrada/saída
z
z
z
Em um programa, dados são lidos/gravados através de
streams (fluxos) de E/S
Fontes e destinos: console, arquivos, rede...
Um programa pode gerenciar diversos streams
Introdução a Java
29
Chamada Parametrizada X
Entrada/Saída via Console
z
Chamada parametrizada:
z
z
z
programa inicia com valores armazenados em um array
de Strings
não é uma forma usual de entrada de dados
Ao iniciar a execução de um programa, são criados
automaticamente os seguintes streams:
z
z
z
z
System.in - standard input (teclado)
System.out - standard output (vídeo)
System.err - standard error (vídeo)
Podem ser redirecionados para disco, por exemplo
Introdução a Java
30
15
Entrada via Console
z
Classe BufferedReader
z
z
z
usada para leitura de um stream de caracteres para um
buffer
definida no pacote java.io
Método readLine()
z
z
z
definido em BufferedReader
faz a leitura de uma linha de texto até um caracter ‘\n’
causa uma exceção se ocorrer um erro enquanto lê os
dados da entrada
Introdução a Java
31
Entendendo Entrada via
Console
String msg = stdin.readLine();
72
101
108
108
111
13
InputStream
leitura de bytes
72
101
108
108
111
13
InputStreamReader
buffer de caracteres
H
e
l
msg
l
o
BufferedReader
Introdução a Java
\n
Hello
String
32
16
Entendendo Saída via Console
System.out.println(“Linha informada = ”+ msg);
L i n h a
i n f o r m a d a
= H e l l o
PrintStream
vídeo
Introdução a Java
33
Entrada via Console: String
import java.io.*;
class Leitura {
public static void main(String[] args) throws
IOException{
BufferedReader stdin = new BufferedReader(
new InputStreamReader(System.in));
System.out.println(“Entre uma linha:”);
String msg = stdin.readLine();
System.out.println(“Linha informada = ”+ msg);
}
}
Introdução a Java
34
17
Entrada via Console: int
import java.io.*;
class Leitura {
public static void main(String[] args) throws
IOException{
BufferedReader stdin = new BufferedReader(
new InputStreamReader(System.in));
System.out.println(“Entre um número:”);
int i = Integer.parseInt(stdin.readLine());
System.out.println(“Número = ”+ i);
}
}
Introdução a Java
35
Usando Scanner() e printf()
import java.io.*;
import java.util.Scanner;
public class LeScanner {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Digite seu nome: ");
String nome = input.next();
System.out.print("Digite sua idade: ");
int idade = input.nextInt();
System.out.printf("%s tem %d anos\n", nome, idade);
}}
Introdução a Java
36
18
Download