• Nenhum resultado encontrado

Introdução ao Java. Programação Orientada a Objetos Java. Prof. Anselmo Cardoso Paiva Prof. Geraldo Braz Junior

N/A
N/A
Protected

Academic year: 2021

Share "Introdução ao Java. Programação Orientada a Objetos Java. Prof. Anselmo Cardoso Paiva Prof. Geraldo Braz Junior"

Copied!
67
0
0

Texto

(1)

Programação Orientada a Objetos

Java

Introdução ao Java

Prof. Anselmo Cardoso Paiva Prof. Geraldo Braz Junior

(2)

Tecnologia Java

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

 Aplicações locais, centralizadas e distribuídas  Aplicações cliente/servidor que executam em

browsers

Java como ambiente de execução

 Ambiente neutro (JRE – Java Runtime

Environment) para diferentes plataformas: SOs, browsers, celulares, palmtops,

(3)

Características Java

 Linguagem de programação orientada a objetos

 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

(4)

Características Java

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

(5)

SIMULA 1967 SmallTalk 1980 ALGOL 1960 Java 1995 C++ 1985 C 1972 Pascal 1973 ADA 1983 ADA 1995

Linguagens OO: genealogia

(6)

código

fonte

processador

da linguagem

código

objeto

linking

código

executável

Desenvolvimento de programas

(7)

Implementação de LP

Compilação

geração de código executável

dependente da plataforma de execução

tradução lenta X execução rápida

Interpretação pura

sem geração de código

execução lenta, independente de plataforma

Híbrida

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

(8)

fonte

Compilador

bytecode

Interpretador

JAVA

Browser

{HTML}

interpretador

JAVA

INTERNET

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

(9)

Compilação x Interpretação

Problema:

 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)

 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

(10)

Ambientes de execução e

desenvolvimento

Java 2 System Development Kit (J2SDK)

 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

Java Runtime Environment (JRE)

 Ambiente mínimo para executar aplicações Java  Faz parte do J2SDK e das principais distribuições

(11)

Interfaces de Programação

de Aplicações – APIs

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 de execução (JRE) e de

desenvolvimento (SDK)

As principais APIs são distribuídas juntamente

com os produtos para desenvolvimento de

aplicações:

 Java 2 Standard Edition (J2SE)  Java 2 Enterprise Edition (J2EE)  Java 2 Micro Edition (J2ME)

(12)

Ambientes Integrados de

Desenvolvimento – IDEs

Existem diversos IDEs construídos a partir

das ferramentas básicas de

desenvolvimento:

ambientes baseados em janelas

editores, visualizadores de classes,

prototipação ...

Exemplos: Eclipse, NetBeans (Sun), Visual

Studio (Microsoft), JBuilder (Borland),

Visual Café (Symantec), JCreator, BlueJ,

jGRASP...

(13)

CLASSE

Nome

CLASSE Nome1

CLASSE

Nome2

CLASSE

Nome1

Nome.java

Nome1.java

Um arquivo pode conter

várias classes

mesmo Nome

Programa Java: Classe

Uma classe é um arquivo fonte (texto)

(14)

Arquivo fonte

:

Escola.java

public class Escola {

{

class Aluno {

bytecodes

bytecodes

Escola.class

Aluno.class

Arquivos executáveis:

class

(15)

Convenção para Nomes

Java, como C/C++, distingue entre letras

maiúsculas e minúsculas

 Exemplo: escola é diferente de Escola

Nomes de classes iniciam com maiúscula

 Exemplo: class Bemvindo

Nomes de variáveis iniciam com minúsculas

 Exemplo: int peso;

Nomes de métodos são verbos que iniciam

com minúscula e depois usam maiúsculas

 Exemplo: alteraPeso

Representação: Unicode (16 bits - 65.536

caracteres)

(16)

Compilação e Execução:

SDK – linha de comando

Compilação: javac

A partir do

diretório local:

javac Nome.java

Vai produzir:

Arquivos .class

separados para

cada classe no

arquivo .java

coloca arquivos no

diretório corrente

Execução: java

A partir do

diretório local:

java Nome 

sendo Nome =

nome do arquivo

.class que contém

o main()

Executa a partir de

main():

java Nome

arg1,arg2, ...

(17)

HelloWorld.jav a

javac

Execução de programas Java

(18)

Verificação de bytecode

Etapa que antecede a execução do código em

classes carregadas através da rede

 Class Loader distingue classes locais (seguras) de

classes remotas (potencialmente inseguras) 

Verificação garante:

 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

(19)

Editor

disco Programa é criado em um editor e

armazenado no disco

Compilador

disco Compilador gera os bytecodes e os

armazena no disco Carregador de classes disco O carregador de classes – Class Loader – coloca os bytecodes na memória _______ _______ _______ _______ __ memória 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 O interpretador lê os bytecodes e executa o programa _______ _______ _______ _______ __ memória

Proce

sso

de E

xecuç

ão

19

(20)

Programas JAVA

Aplicações (puras)

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++)

(21)

Programas Cliente/Servidor

Applets: cliente

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

executados sob o controle do servidor

classe carregada dinamicamente por

requisição de um cliente

(22)

Applets Java X JavaScript

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

(23)
(24)

class Bemvindo {

public static void

main

(String[]

args) {

System.out.println(“Bem-vindo!”);

}

}

Atenção a maiúsculas

e minúsculas!

Classe Java: apenas o

método main()

(25)

System.out.

println

(“Bem-vindo!”);

objeto

método

parâmetro

System.out.

print

(“Bem-vindo!”);

objeto

método

parâmetro

Exemplo de chamada de

métodos

(26)

class Bemvindo {

public static void

main

(String[] args) {

System.out.println(“Bem-vindo ” +

args[0]);

}

}

Método main(): aceita argumentos para execução

(27)

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

Classe Java: dois métodos

(28)

class Bemvindo3 {

void imprime(){

System.out.println(“Bem-vindo!”);

}

public static void

main

(String[] args) {

Bemvindo3 obj = new

Bemvindo3();

// imprime();

// erro!

obj.imprime();

}

Classe Java: instanciando um

objeto

(29)

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(); } // main } // Bemvindo3 class Bemvindo3{ imprime() main(...) } class Welcome{ imprime() } class Welcome{ void imprime(){ System.out.println("Welcome!"); }} // Welcome

Duas classes: composição

(30)

Streams de entrada/saída

Em um programa, dados são lidos/gravados

através de streams (fluxos) de E/S

Fontes e destinos: console, arquivos, rede...

(31)

Chamada Parametrizada X

Entrada/Saída via Console

Chamada parametrizada:

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:

System.in - standard input (teclado)

System.out - standard output (vídeo)

System.err - standard error (vídeo)

 Podem ser redirecionados para disco, por exemplo

(32)

Entrada via Console

Classe BufferedReader

usada para leitura de um stream de

caracteres para um buffer

definida no pacote java.io

Método readLine()

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

(33)

72 101 108 108 111 13

String msg = stdin.readLine();

InputStream

72 101 108 108 111 13

leitura de bytes InputStreamReader

H e l l o \n

buffer de caracteres BufferedReader

H e l l o

msg String

Entendendo Entrada via

Console

(34)

L i n h a i n f o r m a d a = H e l l o

System.out.println(“Linha informada = ”+ msg);

PrintStream

(35)

Entrada via Console: String

1. import java.io.*;

2. class Leitura {

3. public static void main(String[] args) throws

4. IOException{

5. BufferedReader stdin = new BufferedReader(

6. new InputStreamReader(System.in));

7. System.out.println(“Entre uma linha:”); 8. String msg = stdin.readLine();

9. System.out.println(“Linha informada = ”+ msg); 10. }

11. }

(36)

Entrada via Console: int

1. import java.io.*;

2. class Leitura {

3. public static void main(String[] args) throws

4. IOException{

5. BufferedReader stdin = new BufferedReader(

6. new InputStreamReader(System.in));

7. System.out.println(“Entre um número:”); 8. int i = Integer.parseInt(stdin.readLine()); 9. System.out.println(“Número = ”+ i);

(37)

Usando Scanner() e printf()

JDK 1.5

1. import java.io.*;

2. import java.util.Scanner; 3. public class LeScanner {

4. public static void main(String[] args) {

5. Scanner input = new Scanner(System.in); 6. System.out.print("Digite seu nome: ");

7. String nome = input.next();

8. System.out.print("Digite sua idade: "); 9. int idade = input.nextInt();

10. System.out.printf("%s tem %d anos\n", nome, idade);

11. } }

(38)
(39)

Estruturas de Controle

Estruturas de

seleção

if, if-else, switch

Estruturas de

repetição

for, while, do-while

Desvios

(somente em estruturas de repetição)continue, break, rótulos

Java não possui um comando goto, porém “goto” é uma palavra reservada

(40)

Expressões Booleanas

Uma condição usa

operadores relacionais

e

resulta em um valor booleano (

true

ou

false

):

== equal to

!= not equal to < less than

> greater than

<= less than or equal to

(41)

O operador condicional

? :

Mesma semântica da estrutura if-else

 Único operador ternário da linguagem Java

 o primeiro operando é uma expressão booleana

 retorna o segundo operando se a expressão condicional

for true ou o terceiro operando se for false

 Exemplos:

System.out.println( (media >= 7) ? “Aprovado” : “Reprovado” ); int x = (y != 0) ? 50 : 500;

String titulo = (sex == 'f') ? "Sra." : "Sr.“ ;

(42)

Sintaxe da instrução switch

switch(expr1) { case expr2: instruções; break; case expr3: instruções; break; default: instruções; }

Na instrução switch (expr1), expr1 deve ser compatível com atribuições do tipo int, sendo permitidos os tipos de dados

short, int, byte ou char, pois pode ser feita a coerção (cast) para o tipo int, o que não é possível com os tipos long ou de ponto flutuante.

(43)

Exemplos while/do-while

int x = 0; while (x < 10) { System.out.println ("item " + x); x++; } int x = 0; do { System.out.println ("item " + x); x++; } while (x < 10); // loop infinito while ( true ) { ... } 43

(44)

Exemplos for

for ( int x = 0; x < 10; x++ ) { System.out.println ("item " + x); }

for ( int x = 0, int y = 25; x < 10 && (y % 2 == 0); x++, y = y - 1 ) { System.out.println (x + y); } // loop infinito for ( ; ; ) { ... }

(45)

45

Comandos de desvio:

break e continue

break: interrompe a execução do bloco de repetição  Continua com a próxima instrução após o bloco

continue: interrompe a iteração atual

 Ignora as instruções restantes no bloco, testa a condição e reinicia com a próxima iteração

(46)

Usando rótulos

break e continue sempre atuam sobre o bloco de repetição onde são chamados

 Em blocos de repetição contidos em outros blocos, pode-se usar rótulos para fazer break e continue atuarem em blocos externos

 Os rótulos só podem ser usados antes de do, while e

for

 As chamadas só podem ocorrer dentro de blocos de repetição

(47)

Tipos, Operadores e Literais

(48)

Identificadores

São palavras utilizadas para nomear variáveis, métodos e classes

 Na linguagem Java, o identificador sempre

começa por letra, sublinhado(_) ou cifrão ($)

 Não podem começar por números  São “case sensitive”

 Do segundo caractere em diante, pode conter

qualquer seqüência de letras, dígitos, sublinhados ou cifrões

(49)

Identificadores

Exemplos de identificadores válidos:

nomeAluno

saldo

lâmpada // não recomendável

User_name // fora do padrão

_sys_var1

Class // não recomendável

Java utiliza o padrão Unicode (16 bits)

(50)

Palavras reservadas em Java

abstract boolean break byte case

catch char class continue default

do double else extends

final finally float for if

implements import instanceof int interface

long native new return package

private protected public synchronized short

static super switch this try

throw throws transient void volatile

while enum

(51)

Palavras reservadas

Modificadores de Acesso

 private, protected, public

Modificadores de classe, método e

variável

 abstract, class, extends, final, implements,

interface, native, new, static, synchronized, transient, volatile

Controle de fluxo

 break, case, continue, default, do, else, for, if,

instanceof, return, switch, while

(52)

Palavras reservadas

Tratamento de Erros

 catch, finally, throw, throws, try, assert

Controle de Pacotes

 import, package

Tipos de Dados

 boolean, byte, char, double, float, int, long, short,

(53)

Tipos primitivos em Java

 Armazenados na pilha (acesso rápido)

 Não são objetos. Classe 'wrapper' faz transformação, se necessário (encapsula valor em um objeto)

(54)
(55)

Operadores

(56)
(57)

Atribuição

(58)
(59)

Incremento e Decremento

(60)
(61)

instanceof

(62)
(63)

Conversão de tipos primitivos

(64)
(65)

Coerção (cast)

 As variáveis podem ser convertidas em tipos maiores

de maneira automática, mas não em tipos menores

 Desta forma, uma expressão int pode ser tratada como

long, mas uma expressão long não poderá ser tratada como int sem que haja uma coerção explicita

 Uma coerção é utilizada para persuadir o compilador a

reconhecer uma atribuição

 Esse procedimento pode ser adotado, por exemplo,

para “comprimir” um valor long em uma variável int

 Na coerção, o programador assume os riscos da

conversão de dados

(66)

public class Test {

public static void main(String args[]) {

int i = 16777473;

short s = (short) i;

byte b = (byte) i;

System.out.println(“Valor int:” + i); System.out.println(“Valor short:” + s); System.out.println(“Valor byte:” + b); } } A execução de código provoca duas conversões. Em ambas ocorre perda de informação

Coerção - Exemplo

i = 00000001 00000000 00000001 00000001 (int (4 bytes) - valor: 16777473)

(67)

Coerção – Exemplo com

objetos

Array v = new Array( ); v.add(“Hello”);

String s = (String)v.get(0);

 Como o método get sempre retorna um elemento do tipo Object, que não pode ser atribuído a uma String, torna-se necessário fazer o cast antes da

atribuição

 Caso fosse feita a atribuição direta, teríamos um erro de compilação:

String s = v.get(0); // erro

Referências

Documentos relacionados

estudantes e crie um método que calcule e retorne a somatória das notas de todos os estudantes. Imprima o valor no console... 2) Crie um outro método no programa que liste as notas

• Algumas classes são utilizadas para representar tipos primitivos sob forma de objeto, estas são denominadas classes Wrappers.... Tipos Primitivos

• Existem tags específicas que podem ser colocadas dentro dos

– Não precisa saber como a classe foi escrita, apenas quais seus métodos, quais os parâmetros (quantidade, ordem e tipo) e os valores que são retornados.. – Usa apenas a

 Programas Java consistem em partes chamadas classes.  Classes consistem em partes

Retorna o índice da primeira ocorrência do caracter ou substring, caso contrário retorna -1;. int

11.1.1 Será acrescido ao valor da arrematação, e pago juntamente com os percentuais devidos ao Leiloeiro, itens 10.1 e 11.1, taxa administrativa calculada à razão de 1% (um por

classe derivada, esta permanece como uma classe abstrata mesmo que não tenha sido assim declarada explicitamente.... 10