Slide 1 - Departamento de Informática — UFPB

Propaganda
Introdução à Programação
Um enfoque orientado a construção de
modelos em programas baseados em objetos
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,(C) internet,
jogos, bancos de dados, realidade2
2008 Gustavo Motta
virtual, telefonia
3. Classes, objetos & Cia. em Java
►
Java
 Processamento de programas
Programa fonte
Máquina virtual (MV) Java
Interpretação
Compilação
Compilador Java
Código objeto
(C) Java
2008 Gustavo
Motta
bytecodes
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 programas4
(C) 2008 Gustavo Motta
objeto Java multiplataforma
3. Classes, objetos & Cia. em Java
►
Java
 Processamento de programas
► Plataforma
é o ambiente de hardware e software no qual um programa
é executado
► Ilustração de um programa Java executado em múltiplas plataformas
Programa fonte Java
Compilador
Interpretador
(C) 2008 Gustavo Motta
Interpretador
Linux
Interpretador
5
3. Classes, objetos & Cia. em Java
►
Java
 Processamento de programas – Ciclo básico
Editar o código
fonte de uma
classe Java
Corrigir erros
Lista de
erros em tempo
de compilação
falhas
Compilar
sucesso
Código objeto
(C) 2008 Gustavo Motta
Corrigir erros
Lista de erros de
encontrados
em tempo de
execução
falhas
Executa programa
na MV Java
6
3. Classes, objetos & Cia. em Java
►
Java
 Plataformas de desenvolvimento e de execução
► Java
2 SDK (Software Development Kit)
 Compilador Java Editores de programas Java
 Documentação das classes das bibliotecas básicas
► API (Application
Interface) básica
da plataforma
Java
Compilador
Javac Programming
Depurador
Java
Outras ferramentas
 Depurador Java
Compilador
►
Auxilia a entender o funcionamento passo-a-passo de um programa
“on-the-fly”
visando detectar erros em tempo de execução
► Java
APIs
2 Máquina
JRE (Java Runtime
Environment)
 Máquina
VirtualVirtual Java – interpretador
 JavaJava
API
► Coleção de class
componentes de software prontos para uso
GUI – Graphical User Interface, funções matemáticas, comunicação, etc.
► Composta de classes afins agrupadas em pacotes Java (Java Packages)
Java JRE
 Isola a execução do programa objeto Java (Java bytecode) da plataforma de
hardware
► Acesse
http://java.sun.com/javase/6/download.jsp para baixar o
ambiente das plataformas
Java
SDK
(C) 2008
Gustavo
Mottae Java JRE
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
(C) 2008 Gustavo Motta
8
3. Classes, objetos & Cia. em Java
► Estrutura
básica de classes em Java
/**
* A menor classe em Java não precisa de
* variáveis, nem de operações, embora possa ser
* compilada.
*/
class MenorClasseEmJava {
/* Corpo da classe, onde se definem variáveis e
operações
*/
} //Fim da declaração da classe ‘MenorClasseEmJava’
(C) 2008 Gustavo Motta
9
3. Classes, objetos & Cia. em Java
► Estrutura
básica de classes em Java
 Uma classe é declarada com a palavra-reservada class
seguida do nome da classe e de seu corpo entre chaves
class NomeDaClasse { ... }
► Regras





abstract
char
double
float
instanceof
null
short
this
void
para nomes de classes
Não podem conter espaços
Deve ser iniciado por uma letra ou ‘_’ ou ‘$’
Recomenda-se não utilizar acentos
Pode conter números
Não pode ser uma palavra reservada da linguagem Java abaixo
boolean
class
else
for
int
package
static
throw
volatile
break
const
extends
goto
interface
private
strictfp
throws
while
byte
continue
false
if
long
protected
super
(C) 2008 Gustavo Motta
transient
case
default
final
implements
native
public
switch
true
catch
do
finally
import
new
return
synchronized
try
10
3. Classes, objetos & Cia. em Java
► Estrutura
básica de classes em Java
 Caracteres maiúsculos e minúsculos são diferentes
Corpo da classe
/**
► As palavras Class, ClAss, ClaSs e class são distintas
* A menor classe em Java não precisa de
 Somentenem
a última
opção pode serembora
usada para
declarar
* variáveis,
de operações,
possa
ser uma classe
* compilada.
 As outras provocam erros em tempo de compilação
Nome
classe
*/
Início
doda
corpo
da classe
 O corpo da classe é delimitado pelos caracteres abre
class
chaveMenorClasseEmJava
{ e fecha chave {}
► Todo
delimitado
chave
{ e fecha
/*
Corpotrecho
da classe,
ondepor
se abre
definem
variáveis
e chave }
define
um bloco de programa
operações
*/ Fim
 Adocada
corpocaractere
da classe{ que abre um bloco, deve haver um
correspondente } para fechá-lo
} //Fim da declaração da classe ‘MenorClasseEmJava’
 Não existem regras especiais para o espaçamento
vertical ou horizontal, mas o bom estilo de programação
(C) 2008 Gustavo Motta
11
facilita o entendimento e a modificação de programas
3. Classes, objetos & Cia. em Java
► Estrutura
básica de classes em Java
 Estilo para nomes de classes
► As
palavras que formam o nome devem iniciar com caracteres
maiúsculos
 Exemplos: Lampada, ContaCorrente, RegistroAcademico,
NotaFiscalDeSupermercado, Figura
 Excepcionalmente pode-se usar o caractere ‘_’
► Exemplos:
► Devem
Contas_a_Pagar, Contas_a_Receber
preferencialmente ser substantivos
►O
nome da classe em Java deve corresponder ao nome do
arquivo texto onde é gravada
 Cada classe em Java deve ser gravada num arquivo separado cujo
nome é o nome da(C)classe
seguido
da extensão .java
2008 Gustavo
Motta
12
3. Classes, objetos & Cia. em Java
► Estrutura
básica de classes em Java
/**
Comentários
*
*
*
*/
A menor classe em Java não precisa de
►
Texto escrito
pelo
para documentar
variáveis,
nem
de programador
operações, embora
possa sero programa
compilada.
fonte, mas que é ignorado pelo
compilador,
ser
Início
do blocopodendo
de comentário
do de
bloco
comentário
 Numa única linha, iniciado aFim
partir
duasdebarras
inclinadas // e
finalizado ao término da
class MenorClasseEmJava
{ linha
► Útil para comentários breves junto ao código que fica à
/* Corpo da classe, onde se definem variáveis e
esquerda
operações
*/
 Bloco de comentário, com múltiplas linhas, delimitado pelo
de caracteres
/* bloco‘MenorClasseEmJava’
de comentário */
} //Fim conjunto
da declaração
da classe
► Tudo entre /* e */ é considerado comentário pelo
Início do comentário de linha única
compilador, sendo, portanto, ignorado
(C) 2008 Gustavo Motta
13
3. Classes, objetos & Cia. em Java
► Estrutura
básica de classes em Java
 Exemplo de classe executável diretamente
► Aplicação
Java
/**
* A classe 'AloMundo' implementa uma aplicação
* Java que simplesmente imprime na saída
* padrão (console) o texto 'Alô Mundo!'
*/
class AloMundo {
Cabeçalho da operação especial main
Início do corpo da operação
public static void main(String[] args) {
System.out.println("Alo Mundo!"); //Mostra o texto entre aspas.
}
}
Início do corpo da operação
(C) 2008 Gustavo Motta
14
3. Classes, objetos & Cia. em Java
► Estrutura
básica de classes em Java
 Exemplo de classe executável diretamente
► Aplicação
Java
 Caracteriza-se por possuir a operação especial (método) main
► Sempre
que a MV Java executa uma aplicação, ela procura
automaticamente a operação especial main para executar
► Caso
a operação main não esteja declarada, um erro em
tempo de execução é gerado pela MV Java
 O significado das palavras reservadas public, static e void e
do parâmetro args será definido mais adiante
(C) 2008 Gustavo Motta
15
3. Classes, objetos & Cia. em Java
► Declaração
de operações
 Operações executam ações sobre o estado de um
objeto
► São
também denominadas de métodos em Java
► Nomes
de operações seguem as mesmas regras de nomes de
classes
 Não podem conter espaços
 Deve ser iniciado por uma letra ou ‘_’ ou ‘$’
 Recomenda-se não utilizar acentos
 Pode conter números
 Não pode ser uma palavra reservada da linguagem Java
► Métodos
(operações) não podem ser criados dentro de outras
operações, nem fora do corpo da classe à que pertencem
(C) 2008 Gustavo Motta
 Não podem existir
métodos isolados!
16
3. Classes, objetos & Cia. em Java
► Declaração
de operações
/**
 Estilo
* A classe
'Lampada' implementa um modelo para
• O tipo void indica que a operação não
* controlar o acendimento-apagamento de uma lâmpada.
► Nomes de operações refletem ações que são efetuadas sobre
*/
retorna
nenhum
valor quando
executada
Comando
de inicialização
da variável
(opcional)
o
estado de um objeto, portanto
Declaração de variável de instância (ou campo da classe)
Tipo da
class Lampada
{ variável declarada
 Devem ser verbos na voz imperativa ou então no infinitivo
/**
uma
variável
de instância
(ou campo
•ÉEla
apenas
consulta
ou modifica
o estado
* Variável
do tipo lógico
que
indica com
o estado
da lâmpada,
isto é,
► Recomenda-se
que
comecem
caracteres
minúsculos
da
classe)
porque
é
declarada
em
algum
do
objeto!
* se ela está acessa ou apagada. Inicialmente ela está apagada.
 lugar
Após a dentro
primeira do
palavra,
seguintes
começar com o
*/
corpoasda
classe,devem
mas não
caractere maiúsculo
boolean aceso primeiro
= false;
Terminador da declaração de variável
do
corpo
uma operação!
•dentro
Voidda
em
inglês de
significa
“vazio”, “nulo”
TipoCabeçalho
de retorno
da
operação
operação
► Exemplo: apagarRegistroDeNota, incluiNotaAluno,
Nome da variável declarada
/**
Nome da operação
etc.
* A operaçã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
 Exemplo
*/
tem nenhum valor, sendo formado pelo
void apaga()
{
► Implementação
em
Java do modelo de Lampada visto em sala
conjunto
vazio
aceso = false; //Apaga a lâmpada
de aula
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►
* A operação 'acende' acende a lâmpada
chave
return
de um valor ou variável com
* alterando
o seu
estadoseguida
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
}
Declaração de operações
valor de retorno é boolean
Tipo de retorno da operação  de void
/**
• A execução
do return
resulta
no encerramento
da
* A operação
‘estaApagada’
retorna
o valor
verdadeiro (true)
* se a lâmpada
estiver
apagada, isto é,
execução
da operação
* 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 ==
false) a{sua execução
execução
return true;
• No caso, o return não precisa ser seguido de valor ou
}
variável,
poisanão
retornaestá
nada,acesa,
apenasisto
encerra
operação
else { // caso
em que
lâmpada
é, a‘aceso
== 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;
declarada sem inicialização, o seu valor default é nulo,
isto é, não está apontando – referenciando – nenhum objeto
► Quando
►A
declaração de referência anterior é equivalente a seguinte
declaração
Lampada lamp1 = null;
► Qualquer
tentativa de uso de uma referência apontando para
null resulta num erro
 Antes, deve-se inicializar
a referência com o endereço de um
(C) 2008 Gustavo Motta
19
objeto existente
3. Classes, objetos & Cia. em Java
quantoem
lamp2
estão
apontando
• •OuAgora,
seja, otanto
valorlamp1,
armazenado
lamp1
corresponde
ao
► Referências
edecriação
de
objetos
• endereço
A (referenciando)
execução
da
operação
acende()
provoca
erro 2 de
parado
um
mesmo
objeto,
na um
posição
memória
objeto
recém
criado
porque
não
há manipulamos
objeto referenciado
lamp1 de fato,
memória
• Agora,
quando
lamp1,por
estamos,
 Criação
de
objetos
• •manipulando
Antes,
é preciso
criar um
objeto para
a lamp1
O objeto
2 também
pode
ser
manipulado
oposição
objeto
armazenado
na atribuí-lo
posição
de
memórianew
► Objetos
sãona
criados
(instanciados)
com
o uso
do
operador
referência
lamp2 por lamp1
2, através
isto é, oda
objeto
referenciado
 new tem a capacidade de criar um objeto com base numa
classe existente
Memória
 Objetos
podem ser criados na própria
classe que o define,
2
1 lamp1
null
Lampada lamp1
= null;
por exemplo, na operação main, caso exista

lamp1.acende();
lamp1 = new Lampada();
2
aceso
false
true
lamp1.acende();
3
lamp2
lamp2
42
4
aceso
false
true
Lampada lamp2 = lamp1;
lamp2.apaga();
lamp2 = new Lampada();
lamp2.acende();
(C) 2008 Gustavo Motta
20
3. Classes, objetos & Cia. em Java
/**
...
* A lamp1.acende();
classe 'CriadorDeLampadas'
//Acende
criaa objetos
lâmpada que
1
* são
System.out.print("lamp1
instâncias da classe 'Lampada'
esta apagada?
para ");
* demonstrar
System.out.println(lamp1.estaApagada());
como manipulá-los e também
►para
*
System.out.println();
testar a implementação da classe
* 'Lampada'
lamp1.apaga();
Uma vez declarada
uma aclasse,
*/
//Apaga
lâmpada é1 recomendável definir
System.out.print("lamp1
estatestar
apagada?
uma outra classe para
sua");
funcionalidade
classSystem.out.println(lamp1.estaApagada());
CriadorDeLampadas {
► Por exemplo, para classe Lampada, pode-se definir a classe
System.out.println();
CriadorDeLampadas
public static
void main(String[] args) {
lamp2.apaga();
//Apaga a lâmpada 2
Lampada
System.out.print("lamp2
lamp1 = new Lampada(),
esta apagada? ");
System.out.println(lamp2.estaApagada());
lamp2 = new Lampada();
System.out.println();
System.out.println();
}
lamp2.acende();
//Acende a lâmpada 2
} //Fim
System.out.print("lamp2
da classe 'CriadorDeLampadas‘
esta apagada? ");
System.out.println(lamp2.estaApagada());
System.out.println();
Interagindo com objetos
System.out.print("lamp1 esta apagada? ");
System.out.println(lamp1.estaApagada());
(C) 2008 Gustavo Motta
System.out.println();
...
21
3. Classes, objetos & Cia. em Java
► Modificadores
de acesso
 Permitem que se controle a visibilidade externa das
variáveis e operações de um objeto
 Tipos
► public
 Uma variável ou operação declarada como pública pode ser
acessada no ambiente externo à classe onde está declarada
► public int saldo = 0;
► public int retornaSaldo();
► private
 Uma variável ou operação declarada como privada não pode ser
acessada no ambiente externo à classe onde está declarada, ou
seja, só pode ser acessada dentro da própria classe
► private int saldo = 0;
► private int(C) retornaSaldo();
2008 Gustavo Motta
22
3. Classes, objetos & Cia. em Java
► Modificadores
 Tipos
de acesso
► protected
 Uma variável ou operação declarada como protegida pode ser
acessada no ambiente externo à classe onde está declarada,
desde que o acesso seja feito a partir de uma classe declarada no
mesmo diretório que esta ou quando herdada por outra classe
► protected
int saldo = 0;
► protected
int retornaSaldo();
► default
(quando omitido, isto é, não especificado)
 Uma variável ou operação declarada sem modificador de acesso
(ou seja, o modificador de acesso default) pode ser acessada no
ambiente externo à classe onde está declarada, desde que o
acesso seja feito a partir de uma classe declarada no mesmo
diretório que esta
► int
saldo = 0;
► int
retornaSaldo();
(C) 2008 Gustavo Motta
23
3. Classes, objetos & Cia. em Java
► 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
(C) 2008 Gustavo Motta
26
3. Classes, objetos & Cia. em Java
► Modificadores
de acesso
 Exemplo
► Cartão
de crédito simplificado – propriedade essenciais
 Nome da classe: CartaoDeCredito
 Estado
► Três
variáveis do tipo inteiro para representar o saldo, o limite
e o total de pontos de bônus do cartão
private int saldo
= 0;
private int limite = 10000;
private int bonus
= 0;
► São
privadas
porque
somente
podem
ser
acessadas/modificadas dentro da classe, através de suas
operações, que respeitam as regras de limite de crédito e de
pontuação de bônus
► Caso
contrário, alguém, que não a classe, poderia modificar
diretamente o(C)valor
do saldo, do limite ou do bônus para
2008 Gustavo Motta
27
cometer uma fraude, por exemplo.
3. Classes, objetos & Cia. em Java
► 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
► Modificadores
de acesso
• Tal tentativa de acesso provoca um erro em tempo de
 Exemplo
compilação porque a variável bonus foi declarada como
►privada
Cartão
de crédito simplificado
(private),
só podendo ser acessada, portanto,
dentro
da classeuma
ondeoutra
foi declarada,
ou seja, aque
classe
 Considere
classe qualquer
usa a classe
CartaoDeCredito
CartaoDeCredito
• O mesmo vale para as outras variáveis ou operaçõesMemória
como
CartaoDeCredito
cartaovariável
= newprivadas
CartaoDeCredito();
•declaradas
Toda
ou operação de uma
•Recomendação
saldo
classe que não precise ser
limite
1 pública
cartao.paga(400);
deve ser declarada como privada
bonus
cartao.compra(150);
• O objetivo é evitar a violação das
cartao.bonus = 20000
cartao.compra(100);
cartao.compra(500);

100
600
200
350
0
10000
1000
1150
100
600
0
2
regras especificadas para a classe
3
4
(C) 2008 Gustavo Motta
30
Download