Buscar

javaP

Prévia do material em texto

Java 
Prof. Marco Túlio Valente 
Prof. César Francisco de Moura Couto 
Prof. Pedro Felipe 
 
2 
Introdução 
§  Desenvolvida por James Gosling e equipe (Sun, 1995)‏ 
§  Linguagem compilada e posteriormente interpretada 
§  bytecode: linguagem intermediária 
§  Assembly de uma máquina hipotética 
§  Máquina Virtual Java: interpretador de bytecodes 
§  Não é novidade: Pascal-P (Wirth, década de 70)‏ 
§  Mesma estratégia em C#: CLR e CIL (ou MSIL)‏ 
§  Vantagem: portabilidade 
 
 
 COMPILADOR
MÁQUINA VIRTUAL
JAVA - JVM
(INTERPRETADOR)
prog1.class
(bytecodes)
prog1.java
(fonte)
3 
Primeiro Programa 
// arquivo HelloWorld.java 
 
public class HelloWorld { 
 public static void main(String[ ] args){ 
 System.out.println (“Hello, world”); 
 } 
} 
§  Todo arquivo deve ter uma classe pública com o mesmo 
nome do arquivo 
§  Execução começa pelo método main desta classe 
§  Observações: 
§  Programa em Java é um conjunto de classes 
§  Implementação dos métodos sempre dentro da classe 
4 
Classes 
§  Exemplo: 
class Data { 
 private int dia, mes, ano; 
 .... 
 Data(int dia, int mes, int ano) { // metodo construtor 
 this.dia= dia; this.mes= mes; this.ano= ano; 
 } 
 ...... 
 
 } 
§  Método construtor: usado para inicializar objeto 
§  Construtor tem o mesmo nome da classe 
§  this: variável automaticamente declarada em um método 
§  Referencia o objeto alvo da chamada 
 
5 
Classes 
§  Encapsulamento de membros: 
§  public: em qualquer lugar onde a classe for acessível 
§  private: apenas dentro dos métodos da classe 
§  protected: dentro dos métodos da classe, de suas 
subclasses e de classes do mesmo pacote (package)‏ 
§  vazio: por métodos de classes do mesmo pacote 
6 
Objetos 
§  Operador new: usado para instanciar um objeto 
§  Exemplo: 
 Data d1= new Data(1,2,2008); // instanciação 
 Data d2= new Data(25,12,2007); 
 d1.imprime(); // chamada de método 
§  Programas em Java possuem duas áreas de memória: 
§  Heap: onde são alocados objetos criados via new 
§  Stack: onde são alocadas variáveis locais de métodos 
ativados 
§  Dois tipos de valores podem ser armazenados no stack: 
§  Primitivos: byte,short,int,long,float,double,boolean,char 
§  Referências (ou “ponteiros”) para objetos 
§  No exemplo, d1 referencia um objeto do tipo Data 
7 
Coleta de Lixo 
§  Objetivo: Evitar que programador tenha que se preocupar 
com a liberação de memória alocada no heap 
§  Programador aloca, mas não precisa liberar memória 
§  Tarefa normalmente sujeita a diversos erros 
§  Funcionamento: 
§  Existe na JVM um processo, chamado coletor de lixo, 
que fica continuamente procurando por objetos que não 
estão sendo mais referenciados 
§  Quando encontra um objeto inacessível, o coletor de 
lixo libera a área de memória alocada para o mesmo 
§  Não se tem controle sobre o momento em que o coletor 
de lixo roda 
§  Não é uma novidade em LP: LISP, 1960 
8 
Exemplo de Coleta de Lixo 
class BigClasse { 
 private int x; 
 private int bigvetor [ ]; // vetor de inteiros 
 public BigClasse (int x1) { // construtora 
 System.out.println ("Criando " + x1); 
 x= x1; 
 bigvetor= new int [1024*1024]; 
 } 
 protected void finalize () { 
 System.out.println("Eliminando " + x); 
 } 
} // BigClasse 
9 
Exemplo de Coleta de Lixo 
public class Exemplo2 { 
 public static void main(String[] args) { 
 BigClasse p; 
 for (int i= 0; i < 100; i++) ‏ 
 p= new BigClasse (i); 
 } 
} 
§  Método finalize(): chamado automaticamente pelo coletor 
antes de liberar a área de memória de um objeto 
§  Utilidade: liberar outros recursos (que não memória)‏ 
§  Exemplo: fechar arquivos, fechar conexões etc 
§  Chamado no máximo uma vez por objeto, mesmo que sua 
execução “ressucite” o objeto 
§  Não se garante que o método finalize será executado 
10 
Atributos Estáticos 
§  Pertencem à classe e não a cada objeto individualmente 
§  Exemplo: 
 class Conta { ...... 
double saldo; 
 static double saldoMinimo= 500; ..... 
} 
§  Externamente, são acessados via nome da classe 
§  Exemplo: System.out.prinln(Conta.saldoMinimo); 
§  Atributos estáticos e finais: são constantes 
§  Não podem ser alterados, após terem sido inicializados 
§  Exemplo: 
 class Math { ...... 
 public static final double PI = 3.1415; 
} 
11 
Métodos Estáticos 
§  Pertencem à classe e, portanto, não são invocados sobre 
um objeto alvo 
§  Exemplo: 
 class Math { ... 
 public static double sin (double x) { ... } 
 } ..... 
 double x= Math.sin (90); 
§  Podem acessar apenas atributos e métodos estáticos 
§  Não podem acessar a referência this 
 
 
12 
Passagem de Parâmetros e Sobrecarga 
§  Passagem de parâmetros: 
§  Sempre por valor 
§  Mesmo que o parâmetro seja uma referência para um 
objeto (e essa referência seja usada no corpo do 
método para alterar o estado do objeto no heap)‏ 
§  Métodos (e construtores) sobrecarregados: 
§  Mesmo nome 
§  Número e tipos de parâmetros diferentes 
§  Para fins de sobrecarga, não se considera o tipo de retorno 
e as exceções levantadas pelo método 
§  Sobrecarga: polimorfismo ad-hoc 
13 
Herança 
§  Java possui Herança Simples 
 class Figura { 
 .... 
 } 
 class Quadrado extends Figura { 
 ... 
 } 
§  Classe Object: raiz da hierarquia de classes de Java 
§  Toda classe (diretamente ou indiretamente) é subclasse de 
Object 
§  Utilidade: variável do tipo Object pode se referir a qualquer 
objeto (de qualquer classe)‏ 
§  Exemplo: void push(Object item) 
14 
Redefinição de Métodos 
§  Quando uma subclasse reimplementa um método herdado 
da superclasse 
§  Reimplementação deve manter assinatura da superclasse 
(regra da invariância)‏ 
§  Exemplo: 
 
public class Superclass { 
 public void printMethod() { 
 System.out.println("Printed in Superclass."); 
 } 
} 
 
 
15 
Redefinição de Métodos 
public class Subclass extends Superclass { 
 public void printMethod() { // redefinição 
 super.printMethod(); // acesso a método da superclasse 
 System.out.println("Printed in Subclass"); 
 } 
 public static void main(String[] args) { 
 Subclass s = new Subclass(); 
 s.printMethod(); 
 } 
} 
 
16 
Classes e Métodos final 
§  Evitando herança: 
final class Senha { ... } 
class MinhaSenha extends Senha { ... } // Erro ! 
 
§  Evitando redefinição de métodos: 
class Senha { ...... 
 public final bool validarSenha () { ..... } 
 .... 
 } 
 class MinhaSenha extends Senha { ...... 
 bool validarSenha () { ...... } // Erro ! 
 ..... 
 } 
 
17 
Chamada Dinâmica de Métodos 
§  Métodos são chamados utilizando o tipo dinâmico de uma 
referência. 
§  Exemplo: 
 Figura p; 
if ( .... )‏ 
 p= new Quadrado (4); // atribuição polimórfica 
else p= new Circulo (3); // atribuição polimórfica 
double a= p.area (); 
18 
Classes Abstratas 
§  Exemplo: 
abstract class Figura { 
 public abstract double area (); 
 public abstract double perimetro (); 
} 
§  Implementação de area() e perimetro() ficará a cargo das 
subclasses de Figura. 
19 
Packages 
§  Recurso para modularização de programas Java 
§  Package: conjunto de arquivos 
§  Cada arquivo pode possuir, no máximo, uma classe 
pública 
§  O nome do arquivo é o mesmo de sua classe pública 
§  Todo pacotepossui um nome 
§  Exemplo: pacote figuras, com classes públicas Figura, 
Circulo, Quadrado 
§  Arquivo c:\temp\figuras\Figura.java: 
package figuras; 
public abstract class Figura { ...... } 
// outras classes (não-públicas)‏ 
20 
Packages 
§  Exemplo (continuação): 
§  Arquivo c:\temp\figuras\Circulo.java 
package figuras; 
public class Circulo { ...... } 
// outras classes (não-públicas)‏ 
§  Arquivo c:\temp\figuras\Quadrado.java 
package figuras; 
public class Quadrado { ...... } 
// outras classes (não-públicas)‏ 
§  Nome do pacote deve ser igual ao nome do diretório que 
contém seus arquivos 
§  Variável de ambiente CLASSPATH: deve conter o nome 
do diretório onde se encontra o diretório do pacote 
§  Exemplo: set CLASSPATH=%CLASSPATH%;c:\temp 
21 
Packages 
§  Classes públicas de um pacote podem ser usados fora do 
pacote da seguinte forma: 
§  Via qualificação com o nome do pacote: 
figuras.Figura fig; 
figuras.Circulo c; 
java.awt.Button btnOk; 
§  Via comando import no início doarquivo: 
import figuras.*; // importa todas classes do pacote figuras 
import java.awt.Button; // importa apenas classe Button 
.......... 
Figura fig; 
Circulo c; 
Button btnOk; 
22 
Interfaces 
§  Uma interface é um tipo (assim como uma classe)‏ 
§  Uma interface define apenas a assinatura de um conjunto 
de métodos (ou seja, são similares a classes abstratas) ‏ 
§  Uma classe pode declarar que implementa (implements) 
uma interface 
§  Neste caso, ela assume o compromisso de implementar 
todos os métodos desta interface 
§  Exemplo: 
interface Comparavel { 
 int compare(Comparavel obj); 
} 
23 
Interfaces 
§  Exemplo: 
class Aluno extends Pessoa implements Comparavel { 
 int compare(Comparavel obj) { 
 Aluno obj2= (Aluno) obj; 
 “compara this.matr com obj2.matr; retorna –1, 0 ou 1” 
 } 
} 
§  Exemplo: suponha um método de ordenação 
§  void ordena(Comparavel [] lista)‏ 
§  Qual a vantagem em relação a uma classe abstrata? 
§  Se Comparavel fosse uma classe abstrata, Aluno não 
poderia herdar de Pessoa 
§  Uma classe pode implementar mais de uma interface 
24 
Classes Genéricas 
§  Motivação: 
List v = new ArrayList(); // List é uma lista de Object 
v.add("test"); 
String a = (String) v.get(0); 
Integer b = (Integer) v.get(0); // erro em tempo de execução 
§  Usando classes genéricas: 
// List agora é uma lista de strings 
List <String> v = new ArrayList <String> (); 
v.add("test"); 
String a = v.get(0); 
Integer b = v.get(0); // errro em tempo de compilação 
 
25 
Classes Genéricas 
§  Declarando uma classe genérica: 
 
class Pair <T, S> { 
 private T first; 
 private S second; 
 public Pair(T f, S s) { 
 first = f; second = s; 
 } 
 public T getFirst() { return first; } 
 public S getSecond() { return second; } 
 public String toString(){ 
 return "("+first.toString()+", "+second.toString()+")"; 
 } 
} 
26 
Classes Genéricas 
§  Usando uma classe genérica: 
Pair<String, String> p1=new Pair<String, String>(“maria", "A"); 
Pair<String, Integer> p2=new Pair<String, Integer>(“maria", 100); 
System.out.println("P1:"+p1.toString()); 
System.out.println("P2:"+p2.toString()); 
27 
Classe Interna 
public class Swinggy extends JFrame { 
 public Swinggy() { 
 ... 
 JButton b1 = new JButton("Sair"); 
 ActionListener listener = new Eco(); 
 b1.addActionListener(listener); 
 } 
 //classe interna 
 class Eco implements ActionListener{ 
 public void actionPerformed(ActionPerformed e) { 
 tf.setText(e.getActionCommand()); 
 } 
 } 
} 
 
28 
Classe Anônima 
public class Swinggy extends JFrame { 
 public Swinggy() { 
 ... 
 JButton b1 = new JButton("Sair"); 
 b1.addActionListener(new ActionListener() { 
 public void actionPerformed(ActionEvent e) { 
 tf.setText(e.getActionCommand()); 
 } 
 }); 
}

Continue navegando