Академический Документы
Профессиональный Документы
Культура Документы
Gustavo Motta
Departamento de Informática - UFPB
3. Classes, objetos & Cia. em Java
► Java
Linguagem de programação concorrente de propósito
geral, baseada em classes e orientada a objetos
► Especificamente projetada para ser o mais independente possível
de ambientes e hardware e software
Portável – tanto o código-fonte, quanto o código objeto, desde que
haja compilador e máquina virtual Java disponíveis, respectivamente,
no ambiente operacional escolhido
► Linux, Windows, PDAs, etc.
► Robustez – gerência automática de memória, tratamento erros
eficaz em tempo de execução
► Sem custos de licenciamento
► Grande variedade de bibliotecas para diversas áreas de aplicação
Interfaces gráficas, internet, jogos, bancos de dados, realidade virtual,
telefonia
(C) 2008 Gustavo Motta 2
3. Classes, objetos & Cia. em Java
► Java
Processamento de programas
Programa fonte
Máquina virtual (MV) Java
Interpretação
Có
des
d igo
eco
de
má
b yt
qu
ina
Compilação
Compilador Java
Código objeto
(C) Java bytecodes
2008 Gustavo Motta 3
3. Classes, objetos & Cia. em Java
► Java
Processamento de programas
► Compilador Java
Traduz um programa fonte em Java num código objeto expresso numa linguagem
intermediária denominada de Java bytecodes
► Arquivos .Java sempre são os arquivos de programas em código fonte de classes
Java
► Arquivos .Class sempre são os arquivos de programas em bytecode Java
resultante da compilação de código fonte de classes Java
Após uma compilação bem sucedida, o programa objeto resultante pode ser executado
sucessivas vezes pelo interpretador da máquina virtual Java
► Máquina Virtual Java
Interpreta as instruções expressas em Java bytecodes e as traduz e executa como
instruções de máquina do ambiente operacional local real
Java bytecodes podem ser executados em qualquer ambiente onde haja uma
máquina virtual Java disponível, independente do local onde o código fonte foi
compilado
A disponibilidade de MV Java em múltiplas plataformas torna os programas objeto Java
multiplataforma
Compilador
Compilador
Editar
Editaroocódigo
código
Corrigir
Corrigirerros
erros fonte
fontededeuma
uma Corrigir
Corrigirerros
erros
classe
classeJava
Java
Lista de erros de
Lista de encontrados
falhas em tempo de
erros em tempo Compilar
Compilar
de compilação execução
sucesso
falhas
Executa
Executaprograma
programa
Código
Códigoobjeto
objeto na
naMV
MVJava
Java
(C) 2008 Gustavo Motta 6
3. Classes, objetos & Cia. em Java
► Java
Plataformas de desenvolvimento e de execução
► Java 2 SDK (Software Development Kit)
Compilador Java
Editores
Documentação das classes dasde programas
bibliotecas Java
básicas
► API (Application Programming Interface ) básica da plataforma Java
Compilador Javac Outras ferramentas Depurador Java
Depurador Java
► Auxilia a entender o funcionamento passo-a-passo de um programa visando
Compilador
detectar erros em tempo de execução
“on-the-fly”
► Java 2 JRE (Java Runtime
APIs Environment)
Máquina
Máquina Virtual Java – interpretador
Java Virtual
API
Java de componentes de software prontos para uso
► Coleção
class
GUI – Graphical User Interface, funções matemáticas, comunicação, etc.
► Composta de classes afins agrupadas em pacotes Java ( Java Packages)
Isola a execução do programa objeto Java
Java ( Java bytecode) da plataforma de
JRE
hardware
► Acesse http://java.sun.com/javase/6/download.jsp para baixar o ambiente das
plataformas Java SDK e Java JRE
(C) 2008 Gustavo Motta 7
3. Classes, objetos & Cia. em Java
► Java
Categorias de software em Java
► Classes para representação de modelos
Usadas para representar, em linguagem de programação, modelos e abstrações
de dados
Não podem ser executadas diretamente
► Classes como conjuntos de operações, mas sem estado
Atuam como bibliotecas de operações afins que não compartilham um estado,
como as funções matemáticas de trigonometria
► Aplicações Java
Podem ser executadas diretamente em uma máquina virtual após a compilação
► Applets Java
Aplicação Java que pode ser embutida em páginas HTML para serem carregados
e executados via Internet
Mais informações
► http://java.sun.com/docs/books/tutorial/index.html
/**
* A menor classe em Java não precisa de
* variáveis, nem de operações, embora possa ser
* compilada.
*/
class MenorClasseEmJava {
► Declaração de operações
/**
Estilo
* A classe
• O tipo void indica que a operação não
'Lampada' implementa um modelo para
* controlar o acendimento-apagamento de uma lâmpada.
► Nomes de operações refletem ações que são efetuadas sobre o
*/ retorna nenhum
Comando valor quando
de inicialização executada
da variável (opcional)
estado de um objeto, portanto
Declaração
Tipo da variável de variável de instância (ou campo da classe)
declarada
class Lampada { Devem ser verbos na voz imperativa ou então no infinitivo
/** •ÉEla
uma variável
apenas de instância
consulta (ou campo
ou modifica o estado
► Recomenda-se que comecem
indicacom caracteres minúsculos
* Variável
* se ela está
dadoclasse)
objeto!
do tipo lógico
porque
que
é declarada
o estado
em algum
da lâmpada,
acessa ou apagada. Inicialmente ela está apagada.
isto é,
Após
*/ lugara dentro
primeira palavra, as seguintes devem começar com o
do corpo da classe, mas não
primeiro caractere maiúsculo
•dentro
Void
boolean aceso = false;
TipoCabeçalho
de retorno da
da do
em corpo
inglês de
operação
operação
► Exemplo:
uma operação!
significa “vazio”, “nulo”
Terminador da declaração de variável
apagarRegistroDeNota, incluiNotaAluno, etc.
/** Nome da variável declarada
Nome da operação
Exemplo
* Aoperação 'apaga' apaga a lâmpada Lista de parâmetros da operação
• Logo, o tipo void é um tipo que não
* alterando o seu estado para apagado.() indica lista vazia
► Implementação em Java do modelo de Lampada visto em sala de
*/ tem nenhum valor, sendo formado pelo
aula{
void apaga()
conjunto vazio
aceso = false; //Apaga a lâmpada
} Corpo da operação
(C) 2008 Gustavo Motta 17
...
Declaração de operação
3. Classes, objetos & Cia. em Java
...
/**
► • Neste caso, a operação deve ter em seu corpo a palavra-
Declaração de operações
* A operação 'acende' acende a lâmpada
chave
* alterando estadoseguida
return
o seu de um valor ou variável com
para aceso.
*/ mesmo tipo que o tipo de retorno da operação
void acende() {
aceso = true; //Acende a lâmpada
}
• No caso específico da operação ‘estaApagada’, o tipo do
valor de retorno é boolean
/** Tipo de retorno da operação de void
• A execução
* A operação do return
‘estaApagada’ retorna resulta
o valorno encerramento da
verdadeiro (true)
execução
* se a lâmpada da operação
estiver apagada, isto é,
* o valor da variável ‘aceso’ for falso (false). Caso contrário,
* a operação retorna falso (false) porque a lâmpada está acesa.
*/ • Operações com tipo de retorno void não precisam de um
return, mas{ podem usá-lo para encerrar arbitrariamente
boolean estaApagada()
if (acesoa ==
execução
false) a{ sua execução
return true;
• No caso, o return não precisa ser seguido de valor ou
}
variável,
else { // caso poisanão
em que retornaestá
lâmpada nada,acesa,apenasisto
encerra
é, a‘aceso
operação
== true’
return false;
}
(C) 2008 Gustavo Motta 18
}
} //Fim da classe lâmpada
3. Classes, objetos & Cia. em Java
► Referências e criação de objetos
Referência
► Variável cujo conteúdo (valor) é um endereço de uma
posição de memória onde reside um objeto, ou então o valor nulo –
null em Java
Lampada lamp1;
► Quando declarada sem inicialização, o seu valor default é nulo, isto é,
não está apontando – referenciando – nenhum objeto
► A declaração de referência anterior é equivalente a seguinte declaração
• Ou seja, o valor armazenado em lamp1 corresponde ao endereço de memória do objeto recém cria
• Agora, quando manipulamos lamp1, estamos, de fato, manipulando o objeto armazenado na posiç
► Referências e criação de objetos
memória 2, isto é, o objeto referenciado por lamp1
• A execução da operação acende() provoca um erro porque não há objeto referenciado por lamp1
Criação de objetos
• Antes, é preciso criar um objeto para atribuí-lo a lamp1
1 lamp1 null2
por exemplo, na operação main, caso exista
lamp1.acende();
lamp1 = new Lampada(); 2 aceso false
true
lamp1.acende(); 3 lamp2
lamp2 42
Lampada lamp2 = lamp1;
4 aceso false
true
lamp2.apaga();
lamp2 = new Lampada();
lamp2.acende();
► Modificadores de acesso
Exemplo
► Considere o seguinte problema: um cartão de crédito
simplificado
Representar um cartão de crédito que mantém informações sobre
o saldo do cartão, seu limite máximo e o total de pontos de bônus,
que poderão ser trocados posteriormente por prêmios
No cartão poderão ser realizadas operações de compra (aumento
do saldo) e de pagamento do cartão (dedução no saldo)
O limite do cartão é fixado em 10.000
A cada compra realizada, o valor da compra é adicionado ao saldo,
desde que não ultrapasse o limite do cartão
(C) 2008 Gustavo Motta 24
3. Classes, objetos & Cia. em Java
► Modificadores de acesso
Exemplo
► Considere o seguinte problema: um cartão de crédito simplificado
Cada real de compras vale um ponto de bônus, sendo portanto, o
valor comprado adicionado ao total de pontos de bônus
A cada pagamento realizado, o valor do pagamento é deduzido do
saldo.
Cada real pago vale um ponto de bônus, sendo portanto, o valor
pago adicionado ao total de pontos de bônus
O total de bônus é limitado ao limite de crédito, ou seja, 10.000
pontos
(C) 2008 Gustavo Motta 25
3. Classes, objetos & Cia. em Java
► Modificadores de acesso
Exemplo
► Considere o seguinte problema: um cartão de crédito
simplificado
Deve-se ter operações para retornar o saldo do cartão e o total de
bônus
Os valores do saldo e o total de pontos de bônus somente podem
ser alterados através das operações para compra e pagamento
► Nenhum usuário de objetos da classe “CartaoDeCredito” pode
alterar diretamente o saldo ou o total de pontos do bônus
► Modificadores de acesso
Exemplo
► Cartão de crédito simplificado – propriedade essenciais
Comportamento
► Determinado pela execução das seguintes operações –
apenas os cabeçalhos são mostrados
public void compra(int valor)
public void paga(int valor)
public int retornaSaldo()
public int retornaBonus()
►e pela operação auxiliar abaixo
private void creditaBonus(int valor)
(C) 2008 Gustavo Motta 28
3. Classes, objetos & Cia. em Java
► Modificadores de acesso
Exemplo
► Cartão de crédito simplificado
As operações que foram declaradas como públicas respeitam as
regras estipuladas para o cartão de crédito. Mais do que isso,
devem ser visíveis, isto é, poder ser acessada externamente à
classe para que possamos dispor de sua funcionalidade essencial
A operação creditaBonus foi definida como privada porque é
utilizada internamente na classe, para auxiliar na implementação
das operações compra e paga
► Caso fosse definida como pública, seria possível alterar o valor
do total de bonus sem precisar efetuar uma compra ou um
pagamento, violando, portanto, as regras especificadas para o
cartão de crédito
(C) 2008 Gustavo Motta 29
3. Classes, objetos & Cia. em Java
• Tal tentativa de acesso provoca um erro em
tempo de compilação porque a variável bonus foi
► Modificadores de acesso declarada como privada (private), só podendo
ser acessada, portanto, dentro da classe onde foi
declarada, ou seja, a classe CartaoDeCredito
Exemplo • O mesmo vale para as outras variáveis ou
operações declaradas como privadas
► Cartão de crédito simplificado
Considere uma outra classe qualquer que usa a classe
CartaoDeCredito
Memória
CartaoDeCredito cartao = new CartaoDeCredito();
saldo 100
600
200
350
0
cartao.compra(100);
cartao.compra(500); 1 limite 10000
cartao.paga(400); bonus 1000
1150
100
600
0
cartao.compra(150);
cartao.bonus = 20000 2
• Recomendação 3
• Toda variável ou operação de uma
classe que não precise ser pública
4
deve ser declarada como privada
(C) 2008 Gustavo Motta 30
• O objetivo é evitar a violação das
regras especificadas para a classe