Programação Orientada a Objetos* Pacotes Prof. Isabel Cafezeiro [email protected] http://www.dcc.ic.uff.br/~isabel *Baseado no livro Introdução à Programação Orientada a Objetos usando JAVA – Rafael Santos – Editora Campus – Série SBC Pacotes Aplicações em java envolvem múltiplas classes Classes fornecedoras de serviços Classe de aplicação Classes com propósito relacionado devem ser agrupadas Pacotes = estrutura de diretório + .java (com a declaração do pacote) + .class + cláusula de importação na classe usuária Pacotes Pacotes e Modificadores de acesso private protected ausente (default) public + restritivo - restritivo Pacotes Um nome declarado com o modificador ... ... private: só é acessível na própria classe; ... protected: só é acessível na própria classe e subclasses; ... ausente (default): só é acessível nas classes do pacote; ... public: acesso irrestrito. Classe sem declaração de pacote: pertencem a um pacote padrão. Até o momento vínhamos declarando classes e construtores sem modificadores: visíveis no pacote padrão !!! Pacotes Exemplo: Data, Hora, DataHora serviço data serviço hora combina serviços data e hora Pacote DataHora 1. 2. 3. Criar diretório DataHora (mesmo nome do pacote) contendo todas as classes do pacote O diretório deve ser criado no caminho de procura de classes java Hierarquia em muitos níveis, refletindo o nome do domínio da instituição em ordem reversa: UFF.graduaçãoComputação.POO nome do pacote UFF\graduaçãoComputação\POO diretório do pacote Pacotes package DataHora; public class Data { byte dia; byte mês; short ano; Declaração do pacote DataHora: Primeira declaração da classe; public Data(byte d,byte m,short a) dia = d; mês = m; ano = a; } public String toString() { return dia+"/"+mês+"/"+ano; } // fim da classe Data } { Colocar a classe Data dentro do diretório DataHora; Public: qq outra classe (do pacote ou não) pode usar esta classe; Construtor Public: caso contrário não seria possível criar instâncias desta classe aplicando o construtor; Campos sem modificador: visíveis em todo pacote. DataHora/Data.java Pacotes package DataHora; public class Hora { byte hora; byte minuto; byte segundo; public Hora(byte h,byte m,byte s) { hora = h; minuto = m; segundo = s; } public String toString() { return hora+":"+minuto+":"+segundo; } } // fim da classe Hora DataHora/Hora.java Pacotes package DataHora; Não há conflito: pacote e classe com o mesmo nome. public class DataHora { Data estaData; Usa diretamente as classes do pacote. Hora estaHora; public DataHora(byte h,byte min,byte s,byte d,byte m,short a) { estaData = new Data(d,m,a); estaHora = new Hora(h,min,s); } public String toString() .... } { } // fim da classe DataHora DataHora/DataHora.java Pacotes import DataHora.*; class DemoDataHora { Usa o pacote DataHora: não precisa estar no mesmo diretório Importa todas as classes do pacote public static void main(String[] argumentos){ Hora meiodia = new Hora((byte)12,(byte)00,(byte)00); Data hoje = new Data((byte)11,(byte)5,(short)2001); DataHora agora = new DataHora((byte)22,(byte)35,(byte)00, (byte)11,(byte)5,(short)2001); System.out.println(meiodia); System.out.println(hoje); System.out.println(agora); .... } // fim do método main } // fim da classe DemoDataHora DemoDataHora.java Pacotes Diretório DataHora, contendo os códigos java: F:\AULAS\POO\aula13\DataHora>dir O volume na unidade F é isabel O número de série do volume é 043F-09CB Pasta de F:\AULAS\POO\aula13\DataHora 20/06/2006 15:28 <DIR> . 20/06/2006 15:26 <DIR> .. 19/06/2006 16:25 2.815 DataHora.java 19/06/2006 16:18 1.339 Data.java 19/06/2006 16:25 1.377 Hora.java 3 arquivo(s) 5.531 bytes 2 pasta(s) 10.900.996.096 bytes disponíveis Pacotes A compilação das classes do pacote: F:\AULAS\POO\aula13\DataHora>cd .. F:\AULAS\POO\aula13>javac DataHora\Data.java F:\AULAS\POO\aula13>javac DataHora\Hora.java F:\AULAS\POO\aula13>javac DataHora\DataHora.java F:\AULAS\POO\aula13> Pacotes A compilação da classe usuária do pacote: F:\AULAS\POO\aula13>javac DemoDataHora.java F:\AULAS\POO\aula13> A execução da classe usuária do pacote: F:\AULAS\POO\aula13>java DemoDataHora 12:0:0 11/5/2001 22:35:0 de 11 de Maio de 2001 F:\AULAS\POO\aula13> Pacotes Exercício: 1. 2. 3. Criar pacotes: figuras Geométricas, classes do estacionamento; Colocar aplicações em diretórios diferentes; Testa o uso dos pacotes.