pacotes e encapsulamento

Download Pacotes e Encapsulamento

Post on 03-Jul-2015

114 views

Category:

Technology

3 download

Embed Size (px)

TRANSCRIPT

  • 1. Java 2 Standard EditionPacotes e Encapsulamento Helder da Rocha www.argonavis.com.br1

2. Assuntos abordados neste mdulo Este mdulo explora pacotes em Java, iniciando pelos pacotes da prpria API Java e terminando por mostrar como construir pacotes e guard-los em um arquivo JAR Assuntos API do Java 2 - viso geral dos principais pacotes Classes do java.lang: viso geral das principais classes Mtodos de java.lang.Object que devem ser implementados Pacotes em Java: como criar e como usar Arquivos JAR para bibliotecas e executveis 2 3. API Java 2 A API do Java 2 consiste de classes distribudas e organizadas em pacotes e subpacotes Pacotes bsicos java.lang: classes fundamentais - importado automaticamente java.util: classes utilitrias java.io: classes para entrada e sada java.net: classes para uso em rede (TCP/IP) java.sql: classes para acesso via JDBC java.awt: interface grfica universal nativa java.text: internacionalizao, transformao e formatao de textoVeja a documentao!3 4. java.lang importante conhecer bem as classes deste pacote Interfaces Cloneable RunnableClasses Boolean, Number (e subclasses), Character, Void Class Math Object Process, Thread, System e Runtime String e StringBuffer Throwable e Exception (e subclasses) 4 5. java.lang.Object Raiz da hierarquia de classes da API Java Toda classe estende Object, direta ou indiretamente Classes que no declaram estender ningum, estendem Object diretamente class Ponto {} o mesmo que class Ponto extends Object {}Classes que declaram estender outra classe, herdam de Object pela outra classe cuja hierarquia comea em ObjectTodos os mtodos de Object esto automaticamente disponveis para qualquer objeto Porm, as implementaes so default, e geralmente inteis para objetos especficos 5 6. Exerccio 1. Consulte no JavaDoc a pgina sobre java.lang.Object: veja os mtodos. 2. Utilize a classe TestaCirculo (exerccios anteriores) e teste os mtodos equals() e toString() de Object a) Crie dois Pontos e dois Circulos iguais (com mesmos raio e coordenadas) b) Teste se os crculos e pontos so iguais usando "==" c) Teste se so iguais usando equals(): if (p1.equals(p2)) {...}d) Imprima o valor retornado pelo mtodo toString() de cada um dos objetos 6 7. Classe java.lang.Object e interface Cloneable Principais mtodos de Object (todos os objetos tm) public boolean equals(Object obj) public String toString() public int hashCode() protected Object clone()por ser protected TEM que ser sobreposto para que possa ser usado em qualquer classethrows CloneNotSupportedException public void wait() throws InterruptedException public void notify()Cloneable Usada para permitir que um objeto seja clonado. No possui declarao de mtodos Como fazer: class SuaClasse implements Cloneable class SuaClasse extends SupClasse implements Cloneable7 8. Como estender Object H vrios mtodos em Object que devem ser sobrepostos pelas subclassesA subclasse que voc est estendendo talvez j tenha sobreposto esses mtodos mas, alguns deles, talvez precisem ser redefinidos para que sua classe possa ser usada de forma corretaMtodos que devem ser sobrepostosboolean equals(Object o): Defina o critrio deigualdade para seu objeto int hashCode(): Para que seu objeto possa ser localizado em Hashtables String toString(): Sobreponha com informaes especficas do seu objeto Object clone(): se voc desejar permitir cpias do seu objeto8 9. Como sobrepor equals() Determine quais os critrios (que propriedades do objeto) que podem ser usados para dizer que um objeto igual a outro O raio, em um objeto Crculo O nmero de srie, em um objeto genrico O nome, sobrenome e departamento, para um empregado A chave primria, para um objeto de negcioImplemente o equals(), testando essas condies e retornando true apenas se forem verdadeiras (false, caso contrrio) Verifique que a assinatura seja igual definida em Object 9 10. instanceof e exemplo com equals() instanceof um operador usado para comparar uma referncia com uma classe A expresso ser true se a referncia for do tipo de uma classe ou subclasse testada e false, caso contrrioExemplo: sobreposio de equals() class Point { private int x, y; public boolean equals(Object obj) { if (obj instanceof Point) { Point ponto = (Point) obj; if (ponto.x == this.x && ponto.y == this.y) { return true; } } return false; } }10 11. Como sobrepor toString() toString() deve devolver um String que possa representar o objeto quando este for chamado em uma concatenao ou representado como texto Decida o que o toString() deve retornar Faa chamadas super.toString() se achar conveniente Prefira retornar informaes que possam identificar o objeto (e no apenas a classe) toString() chamado automaticamente em concatenes usando a referncia do objeto11 12. Exerccio 1. Sobreponha toString() em Ponto e Circulo Faa toString retornar informaes que representem o objeto quando ele for impresso Se desejar, faa toString retornar o contedo de imprime() (se voc implementou este mtodo) Teste sua implementao imprimindo os objetos diretamente no System.out.println() sem chamar toString() explicitamente2. Sobreponha equals() em Circulo Um circulo igual a outro se estiver no mesmo ponto na origem e se tiver o mesmo raio. Rode a classe de teste e veja se o resultado o esperado Implemente, se necessrio, equals() em Ponto tambm! 12 13. Como sobrepor hashCode() hashCode() deve devolver um nmero inteiro que represente o objeto Use uma combinao de variveis, uma chave primria ou os critrios usados no equals() Nmero no precisa ser nico para cada objeto mas dois objetos iguais devem ter o mesmo nmero. O mtodo hashCode() chamado automaticamente quando referncias do objeto forem usadas em colees do tipo hash (Hashtable, HashMap) equals() usado como critrio de desempate, portanto, se implementar hashCode(), implemente equals() tambm. 13 14. Como sobrepor clone() clone() chamado para fazer cpias de um objeto Circulo c = new Circulo(4, 5, 6);cast necessrio porque clone() retorna ObjectCirculo copia = (Circulo) c.clone();Se o objeto apenas contiver tipos primitivos como seus campos de dados, preciso 1. Declarar que a classe implementa Cloneable 2. Sobrepor clone() da seguinte forma: preciso sobrepor clone() porque ele definido como protectedpublic Object clone() { try { return super.clone(); } catch (CloneNotSupportedException e) { return null; } }14 15. Como sobrepor clone() (2) Se o objeto contiver campos de dados que so referncias a objetos, preciso fazer cpias desses objetos tambm public class Circulo { private Point origem; private double raio; public Object clone() { try { Circulo c = (Circulo)super.clone(); c.origem = (Point)origem.clone(); // Point clonvel! return c; } catch (CloneNotSupportedException e) {return null;} } }clone() implementao do padro de projeto Prototype15 16. A classe java.lang.Math A classe Math uma classe final (no pode ser estendida) com construtor private (no permite a criao de objetos) Serve como repositrio de funes e constantes matemticas Para usar, chame a constante ou funo precedida do nome da classe: double distancia = Math.sin(0.566); int sorte = (int) (Math.random() * 1000); double area = 4 * Math.PI * raio;Consulte a documentao sobre a classe Math e explore as funes disponveis 16 17. Funes matemticas Algumas funes teis de java.lang.Math (consulte a documentao para mais detalhes) double random():retorna nmero aleatrio entre 0 e 1 int floor(double valor): trunca o valor pelo decimal (despreza as casas decimais) int ceil(double valor): retorna o prximo valor inteiro (arredonda para cima) int round(double valor): arredonda valor double pow(double valor, double valor): expoente double sqrt(double valor): raiz quadrada double sin(double valor), double cos(double valor), double tan(double valor): calculam seno, cosseno e tangente respectivamente Veja ainda: exp(), log(), ln(), E, PI, etc.17 18. As classes empacotadoras (wrappers) Classes que servem para embutir tipos primitivos para que possam ser manipulados como objetos Exemplo: Um vetor de tipos Object pode conter qualquer objeto mas no tipos primitivos Object[] vetor = new Object[5]; vetor[0] = new Ponto(); // OK vetor[1] = 15; // Errado!!Soluo: colocar os tipos dentro de wrappers vetor[1] = new Integer(15);Construtores aceitam literais ou Strings H mtodos para realizar converses entre tipos e de tipos para Strings e vice-versa Padro de projeto: Adapter pattern18 19. Classes empacotadoras VoidByteBooleanShortNumberIntegerLongCharacterFloatDoubleCriao e converso Integer n = new Integer(15); Integer m = Integer.valueOf(15); int q = n.intValue();Mais eficientePara converso de String em tipos primitivos int i = Integer.parseInt("15"); double i = Double.parseDouble("15.9"); boolean b = (new Boolean("true")).booleanValue();19 20. Controle e acesso ao sistema Classe System d acesso a objetos do sistema operacionalSystem.out - sada padro (java.io.PrintStream) System.err - sada padro de erro (java.io.PrintStream) System.in - entrada padro (java.io.InputStream)Runtime e Process permitem controlar processos externos (processos do S.O.) Runtime r = System.getRuntime(); Process p = r.exec("c:program~1micros~1msie.exe");Thread e Runnable lidam com processos internos (processos da aplicao - threads) 20 21. Excees Classes descendentes de java.lang.Throwable representam situaes de erro Erros graves irrecuperveis (descendentes da classe java.lang.Error) Excees de tempo de execuo (descendentes da classe java.lang.Exception)So usadas em blocos try-catch Sero tratadas em captulo a parteSo classes, portanto... ... podem ser estendidas ... podem ser usadas para criar objetos via construtor ... podem ter mtodos chamados 21 22. Identificao em tempo de execuo A classe Class contm mtodos que permitem enxergar a interface pblica de uma classe Saber quais mtodos existem para serem chamados Saber quais os parmetros e tipos dos parmetros dos mtodos Saber quais os construtores e campos pblicosComo obter um objeto class (ex: classe MinhaClasse): Class