pacotes - IC/UFF

Propaganda
Pacotes, Classes Básicas,
Acessibilidade
Carlos Bazilio
Depto de Ciência e Tecnologia
Pólo Universitário de Rio das Ostras
Universidade Federal Fluminense
Organização das Classes
●
●
●
Como podemos organizar nossas classes e
interfaces de forma mais lógica?
Por exemplo, como separar classes que
acessam uma base de dados das classes que
preparam uma interface com o usuário?
Em Java, fazemos isso com o uso de pacotes
Sintaxe de Pacotes
// Arquivo ClienteConta.java
package contas;
public class ClienteConta {
…
}
// Arquivo ClienteCC.java
package contas;
public class ClienteCC extends ClienteConta {
…
}
// Arquivo ClientePoupanca.java
package contas;
public class ClientePoupanca extends ClienteConta {
…
}
Pacotes
// Arquivo ClienteConta.java
package contas;
public class ClienteConta {
…
}
●
●
Para a máquina virtual de Java, a classe
ClienteConta passa a ser referenciada como
contas.ClienteConta
Ou seja, o pacote funciona com um espaço de
nomes (namespaces) para a identificação de
uma classe
Pacotes
●
Num ambiente de aplicações integrado, de
forma a facilitar a identificação de classes, os
pacotes costumam ter lei de formação inversa
das urls:


●
●
<codigo-pais>.<codigoatividade>.<entidade>.<setor>...
Ex.: br.com.sirius.gerspool
Pacotes também podem ser aninhados
Fisicamente (sistema de arquivos), pacotes são
manipulados como diretórios
Acesso a outros Pacotes
●
Uma classe declarada num pacote pode
acessar a classe de outro de 2 formas básicas:

1ª. Através do comando import
// Arquivo ClienteConta.java
package contabasica;
public class ClienteConta {
…
}
// Arquivo ClienteCC.java
package contas;
import contabasica.ClienteConta;
public class ClienteCC extends ClienteConta {
…
}
Acesso a outros Pacotes
●
Uma classe declarada num pacote pode
acessar a classe de outro de 2 formas básicas:

2ª. Colocando a referência completa à classe
// Arquivo ClienteConta.java
package contabasica;
public class ClienteConta {
…
}
// Arquivo ClienteCC.java
package contas;
public class ClienteCC
extends contabasica.ClienteConta {
…
}
Acesso a outros Pacotes
●
●
●
Um arquivo pode importar quantas classes
forem necessárias
O 2 métodos de referência a pacotes externos
podem ser combinados
Uma variante do import (import <nomepacote>.*) permite que todas as classes deste
pacote sejam importadas

P. ex.: import contabasica.*;
Acesso a outros Pacotes
●
●
●
Para o caso de classes homônimas, a distinção
pode ser feita pelo uso do nome completo da
classe
Por exemplo, os pacotes java.util e java.sql
possuem uma classe chamada Date
Para diferenciarmos, basta colocarmos o nome
completo da classe (prefixá-la com o nome do
pacote)
Importação Estática
●
●
●
À partir da versão 5 (JDK 5.0 http://en.wikipedia.org/wiki/Java_version_histor
y), o import foi aprimorado para permitir
importação estática
Por exemplo, se precisamos construir uma
equação matemática, como:
Math.sqrt(Math.pow(x,2) + Math.pow(y,2))
Podemos reescrevê-la da seguinte forma:
import static java.lang.Math.*;
...
sqrt(pow(x,2) + pow(y,2))
...
Visibilidade de Acesso
●
Java possui 4 possíveis formas de definição de
visibilidade de acesso a recursos (atributos e
métodos):

public: acesso permitido a método localizado em qualquer
classe

protected: acesso permitido a método localizado na classe
onde o recurso ocorre, nas especializações e no mesmo
pacote

private: acesso permitido a método localizado apenas na
classe onde o recurso ocorre

default (implícito): acesso permitido a método localizado no
mesmo pacote do recurso
Visibilidade de Acesso
Access Levels
Modifier
●
Class
Package
Subclass
World
public
Y
Y
Y
Y
protected
Y
Y
Y
N
no modifier
Y
Y
N
N
private
Y
N
N
N
http://java.sun.com/docs/books/tutorial/java/javaOO/accesscont
rol.html
Visibilidade de Acesso
●
●
A definição da visibilidade de acesso permite
que encapsulemos a estrutura de nossas
classes
Com isso, conseguimos garantir a manipulação
correta de elementos chave da nossa aplicação
Visibilidade de Acesso
public class ClienteBanco {
private String nome;
private int conta;
private float saldo;
public void RealizaSaque (float s) {
if (s < this.saldo)
this.saldo = this.saldo – s;
}
public class Principal {
}
public static void main (String arg[]) {
ClienteBanco cliente1;
cliente1 = new ClienteBanco (“eu”, 0001, 500);
cliente1.saldo = cliente1.saldo – 100;
cliente1.RealizaSaque(100);
}
}
Biblioteca de Java
●
A linguagem Java possui uma biblioteca extensa de
classes organizadas em pacotes:



java.lang: contém classes da definição básica da linguagem
(String, Math, System, ... http://java.sun.com/javase/6/docs/api/java/lang/packagesummary.html), portanto, não precisa ser importado
java.util: contém classes úteis para construção de
aplicações diversas (classes de coleções – pilhas, filas,
conjuntos, ... – classes para manipulação de datas, horas, ...
– http://java.sun.com/javase/6/docs/api/java/util/packagesummary.html)
java.io: contém classes para manipulação de entrada e
saída
(http://java.sun.com/javase/6/docs/api/java/io/packagesummary.html)
Biblioteca de Java
●
A linguagem Java possui uma biblioteca extensa de
classes organizadas em pacotes:




java.net: implementação de aplicações de acesso à rede
(http://java.sun.com/javase/6/docs/api/java/net/packagesummary.html)
java.sql: classes para manipulação de bancos de dados
javax.sql: extensão para manipulação de bancos no lado do
servidor
(http://java.sun.com/javase/6/docs/technotes/guides/jdbc/ind
ex.html)
etc ... (http://java.sun.com/javase/6/docs/api/index.html)
Exercício
●
Implementação do método extrato utilizando
alguma coleção para armazenar as operações
e data/hora para indicar o momento da
operação

Dica: classes disponíveis no pacote java.util
Download