Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
1
ProgramaProgramaççãoão OrientadaOrientadaa a ObjetosObjetos
Alexandre César Muniz de Oliveira
2
Sumário do Curso
1. Evolução das linguagens2. A plataforma java3. A linguagem java: operadores, instruções
e funções básicas 4. Orientação a objetos usando java: classes,
objetos, métodos, polimorfismo, encapsulação, implementação
5. Aplicações
3
Etapas
1. Introdução à linguagem java2. Conceitos básicos de POO3. Herança e reuso4. Aplicações
4
Colaboração
w Rafael Fernandes Lopes– http://www.deinf.ufma.br/~rafaelf/
w Helder da Rocha – http://www.argonavis.com.br/cursos/java/j100
/index.html
w Programação Orientada a Objetos com Java – David J. Barnes & Michael Kölling
5
Software de apoio
w API Java:– http://java.sun.com/j2se/1.3/docs/api/
w Eclipse:– http://www.eclipse.org/downloads/index.php
6
Programação ModularPrograma Principal
Dados
módulo 1
Dados + Dados1
Proc 1
módulo 2
Dados + Dados2
Proc 2 Proc 3
Evolução das Linguagens
2
Evolução das Linguagens
w Topologias
8
Objeto 1
Dados
Objeto 4
Dados
Objeto 3
Dados
Objeto 2
Dados
Evolução das Linguagens
w Linguagem orientada a objetos
9
Evolução das Linguagens
10
A plataforma Java
w Java é uma plataforma de software que possibilita que um mesmo programa execute em diversas arquiteturas de hardware/softwarew Bytecodes gerados pela compilação não
são específicos de uma determinada máquinaw Bytecode é um código intermediário
interpretável por uma máquina virtual java(JVM)
11
A plataforma Java
Programa Java
Máquina Virtual Java
Windows
Máquina 1
Programa Java
Máquina Virtual Java
Linux
Máquina 2
12
A plataforma Java
w Java Development Kit– Compilador Java
(javac)
– Interpretador Java -JVM (java)
3
13
A plataforma Java
14
A plataforma Java
w Compilação just- in- time (tradução dinâmica)– Tradução de bytecode em código nativo em tempo de
execução.– Sistemas que usam bytecode, tais como Perl, GNU
CLISP, e as primeiras versões de Java, o bytecode éinterpretado e executado em uma máquina virtual.
– Na compilação dinâmica, o compilador pode ser usado em tempo de execução, traduzindo bytecode em código nativo e melhorando o desempenho do sistema.
– Compilações de bytecode para código de máquina são fáceis de serem escritos, pois o compilador javac jáfez muito do trabalho necessário.
15
A plataforma Java
w Applets
16
A plataforma Java
w Java Development Kit (JDK)– AppletViewer (appletviewer)– Java Debugger (jdb)– Gerador Automático de Documentos (javadoc)– Compilador Just- in-Time (JIT)– Java Virtual Machine (JVM)
17
A plataforma Java
w Software Development Kit (SDK=JDK) – Java versão 1.2+ = Java 2 – Java versão 1.5+ = Java 5.
w Java Runtime Environments (JRE) – responsávelpor criar a JVMw Java 2 Standard Edition J2SE se refere aos JDK
ou JRE. w Java 2 Enterprise Edition (J2EE) permite
escrever código servidor mais facilmentew Java 2 Micro Edition (J2ME) – versão “enxuta”
da JRE para ambientes com poucos recursos
18
A plataforma Java
4
19
HelloWorld Java
class HelloWorld {public static void main (String args[]) {System.out.println (“Alô Mundo Cruel”);}
}
20
HelloWorld Java
w Assinatura do método:– public static void main(String args[])
• public - qualificador de acessibilidade do método • static - qualificador de compartilhamento• void - valor de retorno• main - nome do método• (String args[]) - argumento do método. Vetor de
Strings que representam os argumentos de linha de comando
21
HelloWorld Javaimport javax.swing.*;
public class HelloJava {public static void main( String[] args ) {JFrame frame = new JFrame( "Hello Java!" );JLabel label = new JLabel("Hello Java!", JLabel.CENTER );frame.getContentPane( ).add( label );frame.setSize( 300, 300 );frame.setVisible( true );
}}
22
HelloWorld Java
23
Operadores
w Operadores Aritméticos
Função Sinal ExemploAdição + X + YSubtração - X - YMultiplicação * X * YDivisão / X / YResto da divisão inteira % X % YSinal negativo - -XSinal positivo + +XIncremento unitário ++ ++X ou X++Decremento unitário -- --X ou X--
24
Operadoresw Operadores Aritméticosclass Teste {
public static void main (String args[]) {int x = 10; int y = 3; // declaração de variáveisSystem.out.println (“X = ” + x);System.out.println (“Y = ” + y);System.out.println (“-X = ” + (-x));System.out.println (“X/Y = ” + (x/y));System.out.println (“Resto de X por Y = ” + (x%y));System.out.println (“Divisão inteira de X por Y = ” +(int)(x/y));System.out.println (“X + 1 = ” + (++x));
}}
5
25
Operadores
w Operadores Relacionais
Função Caractere(s) utilizado(s) ExemploIgual == X == YDiferente != X != YMaior que > X > YMaior ou igual a >= X >= YMenor que < X < YMenor ou igual a <= X <=Y
26
Operadores
w Operadores Lógicos
Função Caractere utilizado ExemploE lógico ou AND && X && YOu lógico ou OR || X || YNegação ou NOT ! !X
27
Conversão de Tipos
w Conversão de Tipos
Supondo a variável x Converter em A variável y recebe o valor convertidoint x = 10 float float y = (float) xint x = 10 double double y = (double) xfloat x = 10.5 int int y = (int) xString x = "10" int int y = Integer.parseInt(x)String x = "20.54" float float y = Float.parseFloat(x)String x = "20.54" double double y = Double.parseDouble(x)String x = "Java" Vetor de bytes byte b[] = x.getBytes()int x = 10 String String y = String.valueOf(x)float x = 10.35 String String y = String.valueOf(x)double x = 254.34 String String y = String.valueOf(x)byte x[] - (x é um vetor de bytes) String String y = new String(x)
28
Vetores
29
Exceções
w Fornecem capacidade de tratamento de eventos que interrompam o fluxo normal de instruçõesw Eventos esperados ou inesperados que podem
ocorrer durante a execução de um programaw Vantagens:
– Tratamento de erro em separado – Propagação de erros– Agrupamento de erros
30
Exceções
w Programação defensiva– Antecipar o que pode sair errado
w Erros surgem freqüentemente do ambiente:– URL incorreto inserido; e– interrupção da rede.
w Processamento de arquivos é particularmente propenso a erros:– arquivos ausentes; e– falta de permissões apropriadas.
6
31
Exceçõesw Vantagens
– Nenhum valor de retorno ‘especial’ necessário.– Erros não podem ser ignorados no cliente.
• O fluxo normal de controle é interrompido.
– Ações específicas de recuperação são encorajadas.
w Um objeto de exceção é construído:– new ExceptionType("...");
w O objeto exceção é lançado:– throw ...
32
Exceçõesw Lançamento:/*** Pesquisa um nome ou um número de telefone e retorna* os detalhes do contato correspondentes.* @param key O nome ou número a ser pesquisado.* @return Os detalhes correspondentes à chave,ou null * se não houver nenhuma correspondência.* @throws NullPointerException se a chave for null.*/
public ContactDetails getDetails(String key){
if(key == null){throw new NullPointerException(
“Chave nula em getDetails");}return (ContactDetails) book.get(key);
}
33
Exceções
classes da biblioteca-padrão
classes definidas pelo usuário
34
Exceçõesw Exceções verificadas:
– subclasse de Exception;– utilizadas para falhas iniciais; e– onde a recuperação talvez seja possível.
w Exceções não-verificadas:– subclasse de RuntimeException;– utilizadas para falhas não-antecipadas; e– onde a recuperação não é possível.
35
Exceçõesw O método de lançamento termina
prematuramente.w Nenhum valor de retorno é retornado.w Controle não retorna ao ponto da chamada do
cliente.– Portanto, o cliente não pode prosseguir de qualquer
maneira.
w Um cliente pode apenas ‘capturar’ uma exceção.
36
Exceçõesw Não-verificadas
– A utilização dessas exceções ocorre de forma ‘não-verificada’ pelo compilador.
– Causam o término do programa se não capturadas.
• Essa é a prática normal.– IllegalArgumentException é um
exemplo típico.
7
37
Exceções
public void ContactDetails getDetails(String key){if(key == null) {
throw new NullPointerException(“Chave nula em getDetails");
}if(key.trim().length() == 0) {
throw new IllegalArgumentException(“Chave vazia em getDetails");
}return (ContactDetails) book.get(key);}
38
Exceções
w Exceções verificadas devem ser capturadas.w O compilador assegura que a utilização
dessas exceções seja fortemente controlada.w Se utilizadas apropriadamente, é possível
recuperar-se das falhas.
39
ExceçõeswMétodos que lançam uma exceção
verificada devem incluir uma cláusula throws (!= throw):
public void saveToFile(String destinationFile)throws IOException
40
Exceçõesw Clientes que capturam uma exceção devem
proteger a chamada com um bloco try:try {
Proteja uma ou mais instruções aqui.}catch(Exception e) {
Informe da exceção e recuperação aqui.}
41
Exceções
try{addressbook.saveToFile(filename);tryAgain = false;
}catch(IOException e) {
System.out.println("Unable to save to " + filename);tryAgain = true;
}
1. Exceção lançada a partir daqui.
2. Controle transferido para cá.
42
ExceçõeswMúltiplas exceções
try {...ref.process();...
}catch(EOFException e) {
// Toma a ação apropriada para uma exceção // de final de arquivo alcançado....
}catch(FileNotFoundException e) {
// Toma a ação apropriada para uma exceção // de final de arquivo alcançado....
}
8
43
Exceçõesw Múltiplas exceções
public class Excecao {try {
int num1 = Integer.parseInt (args[0]);int num2 = Integer.parseInt (args[1]);System.out.println (“Soma = ” + (num1 + num2));System.out.println (“Subtração = ” + (num1 - num2));System.out.println (“Multiplicação = ” + (num1 * num2));System.out.println (“Soma = ” + (num1 / num2));
} catch (ArithmeticException e) {System.out.println (“Erro de divisão por zero”);
} catch (ArrayIndexOutOfBoundsException e) {System.out.println (“Número de argumentos inválido”);
} catch (NumberFormatException e) {System.out.println (“Digite apenas valores inteiros”);
} }
44
Exceções
try {Proteja uma ou mais instruções aqui.
}catch(Exception e) {
Informe e recupere a partir da exceção aqui.}finally {
Realize quaisquer ações aqui comuns quer ou nãouma exceção seja lançada.
}
45
Exceções
46
Exceçõesw Múltiplas exceções
try {
} catch (fileOpenFailed) { fazAlgo1();} catch (sizeDeterminationFailed){fazAlgo2();} catch (memoryAllocationFailed){fazAlgo3();} catch (readFailed) {fazAlgo4();} catch (fileCloseFailed) {throw new Substitue();}finally {fazAlgo5();}
// abre o arquivo// determina o seu tamanho// aloca a memória necessária// lê o arquivo para a memória// fecha o arquivo
47
Exceçõesw Uma clásula finally é executada mesmo se
uma instrução de retorno for executada nas cláusulas try ou catch.w Ainda há uma exceção não-capturada ou
propagada via a cláusula finally.w Pode ser usado manter códigos de
liberação de recursos
48
Exceções
w Definição de novas execeções– Estenda Exception ou Runtime-Exception.
– Defina novos tipos para fornecer melhores informações diagnósticas.
– Inclua informações sobre a notificação e/ou recuperação.
9
49
Entrada de Dados
w Leitura de caracteres:– System.in.read()– System.in.read(byte[] b)– System.in.read(byte[] b, int off, int len)
w Polimorfismo: – Primeiro contato
wHelp: – http://java.sun.com/j2se/1.3/docs/api/
50
Entrada de Dados
w System.in.read(byte[] b, int off, int len)– public abstract int read(char[] cbuf, int off, int len)
throws IOException• Read characters into a portion of an array . This method will
block until some input is available, an I/O error occurs, or theend of the stream is reached.
• Parameters:– cbuf - Destination buffer – off - Offset at whichto start storingcharacters– len - Maximum number of charactersto read
• Returns:– The number of charactersread, or -1 if the endof the stream
has been reached• Throws:
– IOException - If an I/O erroroccurs
51
Entrada de Dadosimport java.io.*;class LeTeclado {
public static void main (String args[]) {String s = “”;DataInputStream dado;try { // NECESSÁRIO!!!
dado = new DataInputStream (System.in);s = dado.readLine();System.out.println (“Texto: ” + s);
} catch (Exception e) {System.out.println (“Houve um erro !”);
}}
} 52
Comandos de decisão public class NumArgs {public static void main (String args[]) {
if (args.length == 1) {try {
float x = Float.parseFloat(args[0]);if (x <= 10 && x >= 0) {
System.out.println (“Nota = ” + x + “valor válido”);} else { System.out.println (“Nota = ” + x + “valor inválido”); }
} catch (NumberFormatException e) {System.out.println (“Digite apenas valores numéricos”);
}} else {
System.out.println (“Número de argumentos inválidos”);}}
}
53
Comandos de decisão
switch (<expressão>) {case 1: instruções; break;case 2: instruções; break;case 3: instruções; break;default: instruções;
}
54
Comandos de decisãopublic class NumArgs2 {public static void main (String args[]) {
if (args.length == 1) {int x = Integer.parseInt (args[0]);switch (x) {
case 0: System.out.println (“zero”); break;case 1: System.out.println (“um”); break;case 2: System.out.println (“dois”); break;default: System.out.println (“Numero desconhecido”);
}} else { System.out.println (“Numero de argumentos inválido”); }
}}
10
55
Laços de repetição
w Forçam a repetição da execução de um bloco de código até uma determinada condição ocorraw São eles:
– For– While– Do-while
56
Laços de repetição
for (inicialização; condição; inc/decremento){
<conjunto de instruções>}
57
Laços de repetição
public class LacoFor {public static void main(String args[]) {
for (int i = 10; i > 0; i--) {System.out.print (i + “ ”);
}System.out.println (“Acabou!”);
}}
58
Laços de repetição
while (<condição>) {<conjunto de instruções>
}//------------------------------------do {
<conjunto de instruções>} while (<condição>);
59
Laços de repetição
public class LacoWhile {public static void main(String args[]) {
int i = 10;while (i > 0) {
System.out.print (i + “ ”);i--;
}System.out.println (“Acabou!”);
}}
60
Laços de repetição
w Recuperação de exceção// Tenta salvar o catálogo de endereços.boolean successful = false;int attempts = 0;do {
try {addressbook.saveToFile(filename);successful = true;
}catch(IOException e) {
System.out.println(“Impossível salvar em " + filename);attempts++;if(attempts < MAX_ATTEMPTS) {
filename = “nome_alternativo”;}
}} while(!successful && attempts < MAX_ATTEMPTS);if(!successful) {System.out.println(“Desisto de salvar em " + filename);
}
11
61
Funções Matemáticas
w Permitem efetuar diversos tipos de cálculos matemáticosw Classe Math
– Math.<nome do método> (argumentos)– Constantes Matemáticas:
• Math.PI - valor de pi• Math.E - valor da base dos logaritmos naturais
62
Funções Matemáticasw Método ceil()
– Arredondar um Double para o seu próximo inteiro– Math.ceil (<valor do tipo double>)– Exemplo:class Arred1 {
public static void main (String args[]) {double A = 5.2, B = 5.6, C = -5.8;System.out.println (“Arredondando 5.2 = ” + Math.ceil (A));System.out.println (“Arredondando 5.6 = ” + Math.ceil (B));System.out.println (“Arredondando -5.8 = ” + Math.ceil (C));
}}
63
Funções Matemáticas
wMétodo floor()– Arredondar um Double para o seu inteiro
anterior– Math.floor (<valor do tipo double>)
class Arred2 {public static void main (String args[]) {
double A = 5.2, B = 5.6, C = -5.8;System.out.println (“Arredondando 5.2 = ”
+ Math.floor(A));System.out.println (“Arredondando 5.6 = ”
+ Math.floor(B));System.out.println (“Arredondando -5.8 = ”
+ Math.floor(C));}} 64
Funções Matemáticas
wMétodo max()– Retorna o maior valor entre dois números
(double, float, int ou long)– Math.max (<valor1>, <valor2>)class Compara1 {
public static void main (String args[]) {double A = 10, B = -5.9;System.out.println (“O maior entre 10 e –5.9 é:”
+ Math.max (A, B));}}
65
Funções Matemáticas
w Método min()– Retorna o menor valor entre dois números (double,
float, int ou long)– Math.min (<valor1>, <valor2>)class Compara2 {
public static void main (String args[]) {double A = 10, B = -5.9;System.out.println (“O maior entre 10 e –5.9 é:”
+Math.min (A, B));}}
66
Funções Matemáticas
wMétodo sqrt()– Raiz quadrada de um determinado número– Math.sqrt (<valor do tipo double>)class Raiz {
public static void main (String args[]) {double A = 900;System.out.println (“A raiz quadrada de 900 é:”
+ Math.sqrt (A));}}
12
67
Funções Matemáticas
wMétodo pow()– Elevar um número a uma potência– Math.pow (<valor da base>, <valor da
potência>)class Potencia {
public static void main (String args[]) {double base = 5.5, potencia = 2;System.out.println (“5.5 elevado a 2 é:”
+ Math.pow (base, potencia));}}
68
Funções Matemáticas
wMétodo random()– Geração de valores randomicos (0 – 1)– Math.random ()
class Randomico {public static void main (String args[]) {
System.out.println (“Número randômico de 0 a 99:”+ (int) (Math.random() * 100) );
}}
69
Funções de String
w String = União de um conjunto de caracteresw Instâncias da classe Stringw Cadeia de caracteres entre “”w Sintaxe:
– <nome da string>.<nome do método> (argumentos)
70
Funções de String
wMétodo length()– Retorna o tamanho de uma String– <string>.length ()class TamanhoStr {
public static void main (String args[]) {String A = “Aprendendo Java”;System.out.println (“String: ” + A);System.out.println (“O tamanho da string é:
” + a.length());}}
71
Funções de String
wMétodo charAt()– Retorna o caractere de uma determinada
posição de uma String– <string>.charAt (<índice>)class StrPosicao {
public static void main (String args[]) {String A = “Aprendendo Java”;System.out.println (“String: ” + A);System.out.println (“Caractere 5: ” +
a.charAt(5));}}
72
Funções de String
w Métodos toUpperCase e toLowerCase()– Retorna uma string com caracteres maiúsculos ou
minúsculos– <string>.toUpperCase () e <string>.toLowerCase ()class StrMaiMin {
public static void main (String args[]) {String A = “ARROZ”, B = “batata”;System.out.println (“ARROZ em minúscula: ” +
A.toLowerCase());System.out.println (“batata em maiúscula: ” +
B.toUpperCase());}}
13
73
Funções de Stringw Método substring()
– Retorna uma parte de uma string– <string>.substring (<índice inicial>, [<índice final>])
class StrSub {public static void main (String args[]) {
String A = “Aprendendo Java”;System.out.println (“Do 3º caractere até o fim: ” +
A.substring(2));System.out.println (“Do 1º caractere até o 10º: ” +
A.substring(0, 10));System.out.println (“Do 12º caractere até o 15º: ” +
A.substring(11, 15));}
}74
Funções de String
wMétodo trim()– Remove os espaços em branco do início e do
final de uma string– <string>.trim ()class LimpaEspacos {
public static void main (String args[]) {String frase = “ Cristo: o rei dos reis ”;System.out.println (“Com espaços: *”
+ frase + “*”);System.out.println (“Sem espaços: *”
+ frase.trim() + “*”);}}
75
Funções de String
wMétodo replace()– Substitui caracteres individuais em uma
determinada string– <string>.replace (<caractere a ser
substituído>, <substituição>)
76
Funções de String
wMétodo replace()class Substituicao {
public static void main (String args[]) {String A = “banana nanica”;System.out.println (“Troca caractere ‘a’ por ‘u’: ”
+ A.replace(‘a’, ‘u’));System.out.println (“Troca caractere ‘n’ por ‘N’: ”
+ A.replace(‘n’, ‘N’));System.out.println (“Troca espaço por ‘_’: ”
+ A.replace(‘ ’, ‘_’)); }}
77
Funções de Stringw Método String.valueOf()
– Converte diversos tipos de dados em strings– String.valueOf (<nome da variável a ser convertida>)class Substituicao {
public static void main (String args[]) {int a = 11; long b = 222; float c = 3333; double d = 4.444;String s = String.valueOf (a) + “ ”+ String.valueOf (b) + “ ”+ String.valueOf (c) + “ ”+ String.valueOf (d);System.out.println (“Conteúdo de s: ” + s);}}