Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes [email protected] Aulas 15 e 16 - Pacotes em Java http://www.ufpa.br/sampaio/bd2003/lpoo Elaborado com base no Material do Prof. Alexandre Mora (Cin-UFPE) e Prof. Ricardo Santos(IESAM) Marco Fagundes 1 de 23 Tipos de Módulos em Java Classes • agrupam definições de métodos, atributos, inicializadores, etc. • definem tipos Pacotes • agrupam definições de classes relacionadas • estruturam sistemas de grande porte, facilitando a localização das classes • oferece um nível mais alto de abstração – há mais classes do que pacotes 2 de 23 Declaração de Classes Uma classe pode ser declarada da seguinte maneira: class Teste{ } Porém, existem algumas observações que devem ser levadas em consideração no momento de declarar uma classe. 3 de 23 Declaração de Classes Somente podemos ter uma única classe public por arquivo .java O nome do arquivo deve coincidir com o nome da classe public Se uma classe faz parte de um package, a declaração do package deve ser a primeira linha da classe Comandos import devem aparecer entre a declaração package e a declaração de classe 4 de 23 Pacotes e Diretórios As classes de um pacote são definidas em arquivos com o mesmo cabeçalho: package nomeDoPacote; Cada pacote é associado a um diretório do sistema operacional: • os arquivos .class das classes do pacote são colocados neste diretório • é recomendável que o código fonte das classes do pacote também esteja neste diretório 5 de 23 Nomeando Pacotes O nome de um pacote é parte do nome do seu diretório associado appAcad.turmas deve estar no diretório ...\appAcad\turmas assumindo que o compilador Java foi informado, através da variável de ambiente (CLASSPATH) para procurar classes em .../ 6 de 23 Pacotes e Subdiretórios Subdiretórios não correspondem a “subpacotes”, são pacotes como outros quaisquer Por exemplo, não existe nenhuma relação, além de lógica, entre appAcad.turmas e appAcad.disciplinas: package appAcad.turmas; public class /*...*/ package appAcad.disciplinas; public class /*...*/ 7 de 23 Pacotes e Visibilidade de Declarações public • atributos, métodos e classes • declaração pode ser utilizada (é visível) em qualquer lugar private • atributos e métodos • declaração só pode ser utilizada na classe onde ela é introduzida 8 de 23 Pacotes e Visibilidade de Declarações protected • atributos e métodos • declaração só pode ser utilizada no pacote onde ela é introduzida, ou nas subclasses da classe onde ela é introduzida Default (Ausência de modificador) • atributos, métodos e classes • declaração só pode ser utilizada no pacote onde ela é introduzida 9 de 23 Modificadores de Acesso Destacam-se inicialmente os seguintes modificadores de acesso que podem ser utilizados com as classes são: • public • default 10 de 23 Modificadores de Acesso Estes modificadores podem ser utilizados com as classes, métodos e membros de dados. Porém, devemos nos preocupar primeiramente com a visibilidade da classe. De nada adianta termos um método public se a classe não for visível para outra classe. 11 de 23 Acesso Default Para declarar uma classe com acesso default, basta não utilizar um modificador de acesso. Se uma classe possui acesso default, somente uma classe que está no mesmo pacote poderá acessá-la. 12 de 23 Acesso Default O que significa acessar uma classe? • Criar uma instância da classe. • Criar um relacionamento de herança com a classe. • Acessar métodos e variáveis da classe. 13 de 23 Acesso Default package appAcad.turmas; class Turma{ } package appAcad.disciplinas; import appAcad.turmas; class Disciplina{ } 14 de 23 Acesso Default ../appAcad /turmas Turma.java Turma.class /disciplinas Disciplina.class Disciplina.java 15 de 23 Acesso Public O Modificador de acesso public, permite que a classe seja visualizada a partir de qualquer package existente Desta forma, qualquer classe em qualquer package é capaz de “enxergar” a classe declarada como public 16 de 23 Acesso Public package appAcad.turmas; public class Turma{ } package appAcad.disciplinas; import appAcad.turmas; class Disciplina{ } 17 de 23 Acesso Public ../appAcad /turmas Turma.java Turma.class /disciplinas Disciplina.class Disciplina.java 18 de 23 Testando o Acesso Default e Public ../appAcad /turmas Turma.java Turma.class /disciplinas Disciplina.class Disciplina.java TesteApp.Java TesteApp.class 19 de 23 Reuso de Declarações As declarações feitas em um arquivo são visíveis em qualquer outro arquivo do mesmo pacote, a menos que elas sejam privadas Qualquer arquivo de um pacote pode usar as definições visíveis de outros pacotes, através do mecanismo de importação de pacotes... 20 de 23 Estruturando Aplicações com Pacotes Agrupar classes relacionadas, com dependência (de implementação ou conceitual) entre as mesmas Evitar dependência mútua entre pacotes: package a.b; import c.d.*; /*...*/ package c.d; import a.b.*; /*...*/ Sugere problemas de modelagem! 21 de 23 Estruturando Aplicações com Pacotes Estruturação típica de um sistema de informação: • um pacote para cada coleção de negócio, incluindo as classes básicas, coleções de dados, interfaces, e exceções associadas • um pacote sistema.util contendo classes auxiliares de propósito geral 22 de 23 Pacotes da Biblioteca de Java Acesso a Internet e WWW (java.net) Applets (java.applet) Definição de interfaces gráficas (java.awt) Suporte a objetos distribuídos (java.rmi) Interface com Banco de Dados (java.sql) Básicos: threads e manipulação de strings (java.lang), arquivos (java.io), utilitários de propósito geral (java.util) 23 de 23