Title: Pacotes, Classes B
1Pacotes, Classes Básicas, Acessibilidade
- Carlos Bazilio
- Depto de Ciência e Tecnologia
- Pólo Universitário de Rio das Ostras
- Universidade Federal Fluminense
2Organizaçã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
3Sintaxe 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
4Pacotes
// 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
5Pacotes
- 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 - ltcodigo-paisgt.ltcodigo-atividadegt.ltentidadegt.ltsetor
gt... - Ex. br.com.sirius.gerspool
- Pacotes também podem ser aninhados
- Fisicamente (sistema de arquivos), pacotes são
manipulados como diretórios
6Acesso 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
7Acesso 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.ClienteCon
ta
8Acesso 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 ltnome-pacotegt.)
permite que todas as classes deste pacote sejam
importadas - P. ex. import contabasica.
9Acesso 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)
10Importação Estática
- À partir da versão 5 (JDK 5.0 -
http//en.wikipedia.org/wiki/Java_version_history)
, 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)) ...
11Visibilidade 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
12Visibilidade 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/javaO
O/accesscontrol.html
13Visibilidade 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
14Visibilidade de Acesso
public class ClienteBanco private String nome
private int conta private float
saldo public void RealizaSaque (float s) if
(s lt 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)
15Biblioteca 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/pa
ckage-summary.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/pa
ckage-summary.html) - java.io contém classes para manipulação de
entrada e saída (http//java.sun.com/javase/6/docs
/api/java/io/package-summary.html)
16Biblioteca 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/n
et/package-summary.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/doc
s/technotes/guides/jdbc/index.html) - etc ... (http//java.sun.com/javase/6/docs/api/ind
ex.html)
17Exercí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