Capítulo 4. Packages e interfaces 1/17
Índice Indice 4.1 - Package 4.2 - Interface 2/17
Índice 4.1 Package 4.1 - Package 4.2 -- Interface 3/17
4.1 Package Package ou pacote está para o Java como as directorias estão para os ficheiros Permitem arrumar classes e seus componentes além de controlar a sua visualização : Permite que os programadores dêem o mesmo nome a diferentes classes. (Colocando-as em pacotes diferentes) Critérios de arrumação: -Hierarquias de classes -Funcionais (Classes que trabalhem em conjunto) -Autor (pessoa ou empresa) -Uma mistura dos anteriores Ao conjunto de métodos disponibilizados por um pacote é chamado API Application programmer interface: A estrutura de directorias pode ser compactada num ficheiro.jar (algoritmo ZIP) Os packages agrupam interfaces e classes relacionadas num mesmo pacote que pode depois de ser disponibilizado num ficheiro jar, juntamente com o ficheiro MANIFEST.MF que descreve o pacote. 4/17
4.1 Package Como criar um package? 1 - Criar uma directoria com o nome do package exemplo p1 (No netbeans a directoria é criada através de New -> JavaPackage ) 2 - Criar a classe A1 dentro da directoria p1. 3 - Editar a classe A1 e adicionar a seguinte linha no início (antes da definição da classe) - package p1; 4 Compilar a classe dentro da directoria. -javac A1.java 5 Executar a classe fora da directoria. -cd.. -java p1.a1 Nota: O java é sensível a maiusculas e minusculas. O nome da directoria tem que ser exactamente igual ao do package Em c:\java\src\p1 package p1; public class A1 { A mesma classe num package diferente p2 seria identificada por p2.a1. 5/17
4.1 Package Hierarquia de packages Da mesma forma que uma directoria pode conter subdirectorias, um package pode conter outros packages Exemplo: -O package p3 está incluído em p2 que por sua vez está incluído em p1. package p1.p2.p3; public class A1 {. No sistema operativo deverá existir uma estrutura de directorias equivalente Se um tipo não for declarado como pertencendo a um package, é colocado num package sem nome. (Facilita o desenvolvimento de pequenos programas) 6/17
4.1 Package Importação simples e a pedido O pacote java.lang é importado automaticamente pelo compilador java. Sempre que se pretende utilizar uma classe pertencente a outro package, temos que a referenciar com o nome completo: fully qualified name O comando import evita as referências através do fully qualified name public class A1 { java.util.date d1 = new java.util.date(); import java.util.date; public class A1 { Date d1 = new Date(); Fully Qualified Name Com importação simples A importação simples importa apenas as definições da classe especificada no import. import java.util.date; A importação a pedido (on demand) indica que devem ser procuradas todas as classes do pacote import java.util.*; 7/17
4.1 Package Ambiguidades na importação Quando existem duas classes com o mesmo nome em packages diferentes -Exemplo: ambos os packages java.util e java.sql têm a classe Date. import java.util.*; import java.sql.*; public class A1 { Date d1 = new Date(); Date d2 = new Date(System.currentTimeMillis()); Erro ambiguidade: Duas classes com o mesmo nome -A ambiguidade só pode ser resolvida referenciando as classes pelo Fully Qualified Name import java.util.*; import java.sql.*; public class A1 { Ambiguidade resolvida java.util.date d1 = new java.util.date(); java.sql.date d2 = new java.sql.date(system.currenttimemillis()); 8/17
4.1 Package Variável ClassPath A variável classpath É uma variável de ambiente do sistema operativo -Por omissão, o compilador e JRE procuram as classes e packages na directoria actual -Esta variável informa o compilador e JRE onde estão localizadas as classes e packages O caminho das classes que desenvolvemos deve ser adicionado da seguinte forma no Windows - My computer -> properties -> advanced - Seleccionar environment variables - Fazer New para criar a variável ou Edit para editar o valor da existente Alternativamente podemos indicar à JVM, o caminho das classes com classpath ou cp na chamada da classe: c:\>java cp c:\progjava\src\testes p1.a1 9/17
Índice 4.2 Interface 4.1 -- Package 4.2 - Interface 10/17
4.2 Interface Interfaces Com os interfaces as classes especificam o que vão fazer e não como vão fazer -Uma interface pode ser implementada por várias classes -Uma classe pode implementar vários interfaces ao mesmo tempo As interfaces permitem simular a herança múltipla (como no C++ em que 1 subclasse pode herdar de mais do que uma superclasse). -Note que o Java apenas suporta herança simples Ao implementar o interface, a classe assume o compromisso de respeitar a norma definida pela interface (são obrigadas a implementar os métodos do interface) Um interface pode herdar as definições de outra interface -Interfaces podem utilizar polimorfismo Um interface não pode ser instanciado 11/17
4.2 Interface Interface: Sintaxe para definição da interface Qualificadores da interface: public abstract interface nome [ extends nomepai ]{ Campos Métodos opcional Herança Qualificadores da interface: -public: A interface pode ser publicamente acedida -abstract: a interface não pode ser instanciada (todas as interfaces são por definição abstract) Na omissão do qualificador public uma interface é apenas acedida no pacote onde está definida. 12/17
4.2 Interface Interface: Sintaxe para definição da interface A interface define-se indicando a assinatura dos seus métodos: -Não se podem definir variáveis -Podem ser definidas constantes que por omissão receberão public static final -Se a interface for public, todos os métodos serão public Exemplo: public interface SalarioDeEmpregado { public double calculosalario(double numhoras, double numfaltas, double salhora); public double calculoimposto(double salario, double taxairs); 13/17
4.2 Interface Interfaces Todas as interfaces são por definição abstract -O qualificador abstract é por convenção omitido. Todos os membros (constantes e métodos) são por definição public -O qualificador public pode ser omitido -Mesmo que o interface não seja declarado public as suas constantes e métodos são. Todas as constantes são por definição public static final -Os qualificadores public static final podem ser omitidos -Não podemos definir variáveis. Todas são constantes (temos obrigatoriamente que indicar o seu valor) Todos os métodos são por definição public abstract -Os qualificadores public abstract podem ser omitidos Um interface não admite nenhum outro qualificador para constantes e métodos 14/17
4.2 Interface Interfaces: Implementação Uma classe pode implementar vários interfaces Um interface pode ser implementado por várias classes Implementação de interfaces não impede que a classe possa estender outra (herança múltipla simulada) package Capitulo4; public interface Pilha { // métodos boolean vazia(); Object topo(); void remover(); Os métodos definidos na interface têm que ser implementados. Todos têm que ter o qualificador public, pois estes são-no por definição e o Java não permite redução da sua visibilidade package Capitulo4; public class Subpilha extends Pai implements Pilha{ // definição da classe // Implementação dos métodos do interface public boolean vazia(){ return true; public int topo(){ return 2; public void remover(){ System.out.println(); 15/17
4.2 Interface Herança de interfaces Herança de interfaces Uma interface pode estender mais que uma interface -As interfaces estendidas são denominadas superinterfaces. A nova interface é denominada subinterface -Uma subinterface herda todas as constantes declaradas nas suas superinterfaces. -Na subinterface a constante herdada é acedida apenas pelo nome qualificado: Superinterface.constante -Herança exemplo: Reescrita da constante 2 + 1 (Nome qualificado) Y extends x 16/17
FIM 17/17