Vous êtes sur la page 1sur 30

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, 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

de s
d igo

eco
de

b yt
qu
i na

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

(C) 2008 Gustavo Motta 4


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
Compilador

Interpretador Interpretador Interpretador

(C) 2008 Gustavo Motta 5


Linux
3. Classes, objetos & Cia. em Java
► Java
 Processamento de programas – Ciclo básico

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 de programas Java
 Documentação das classes das bibliotecas 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
Virtual
 Java API
Java de componentes de software prontos para uso
► Coleção
GUI – Graphical class
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 bytecode) da plataforma de
hardware Java JRE
► 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

(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 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
abstract boolean break byte case catch
char class const continue default do
double else extends false final finally
float for goto if implements import
instanceof int interface long native new
null package private protected public return
short static strictfp super
(C) 2008 Gustavo Motta
switch synchronized 10
this throw throws transient true try
void volatile while
3. Classes, objetos & Cia. em Java
► Estrutura básica de classes em Java
 Caracteres maiúsculos e minúsculos são diferentes
/**
► As palavras Class, ClAss, ClaSs e class são distintas
* A menor classe em Java não precisa de
 Somente a nem
* variáveis, últimade
opção pode ser usada
operações, para declarar
embora possaumaserclasse
 As outras provocam erros em tempo de compilação
* compilada.
*/ Nome
Início doda classe
corpo da classe
 O corpo da classe é delimitado pelos caracteres abre chave {
e fecha
class chave }
MenorClasseEmJava {
Corpo da classe

► Todo trecho delimitado por abre chave { e fecha chave } define um


/*bloco
Corpo da classe, onde se definem variáveis e
de programa
operações
 A cada caractere { que abre um bloco, deve haver um correspondente }
*/ Fim do corpo da classe
para fechá-lo
 }Não existem
//Fim regras especiais
da declaração da classe para‘MenorClasseEmJava’
o espaçamento vertical ou
horizontal, mas o bom estilo de programação facilita o
entendimento e a modificação de programas
(C) 2008 Gustavo Motta 11
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: Contas_a_Pagar, Contas_a_Receber
► Devem 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 classe seguido da extensão .java

(C) 2008 Gustavo Motta 12


3. Classes, objetos & Cia. em Java
► Estrutura básica de classes em Java
Comentários
/**
* ►ATexto
menorescrito
classepelo
em programador para documentar
Java não precisa de o programa
* variáveis, nem de operações, embora possa ser
fonte, mas que é ignorado pelo compilador, podendo ser
* compilada. Início do bloco de comentário
*/  Numa única linha, iniciado a partir de duas barras inclinadas // e
Fim do bloco de comentário
finalizado ao término da linha
class MenorClasseEmJava {
► Útil para comentários breves junto ao código que fica à

/* Corpo esquerda
da classe, onde se definem variáveis e
operações */
 Bloco de comentário, com múltiplas linhas, delimitado pelo conjunto
de caracteres /* bloco de comentário */
} //Fim da declaração
► Tudo entre /* da eclasse
*/ é‘MenorClasseEmJava’
considerado comentário pelo
compilador, sendo, portanto,
Início do comentário ignorado
de linha única
(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!'
*/
Cabeçalho da operação especial main
class AloMundo { 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
 Não podem existir métodos isolados!

(C) 2008 Gustavo Motta 16


3. Classes, objetos & Cia. em Java
► Declaração de operações
/**
 Estilo
* A classe
* controlar
• O tipo void indicadeque
'Lampada' implementa um modelo para
o acendimento-apagamento uma
alâmpada.
operação não
► 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
Tipo da Declaração de variável de instância (ou campo da classe)
variável declarada
class Lampada  { Devem ser verbos na voz imperativa ou então no infinitivo
/** •ÉElauma variável
apenas de instância
consulta (ou campo
ou modifica o estado
► Recomenda-se que que
comecem
indicacom caracteres minúsculos
* Variável
dadoclasse)
objeto!
do tipo lógico
porque é declarada
o estado
em algum
da lâmpada, isto é,
 Após
* se ela está a primeira
acessa palavra,
ou apagada. as seguintesela
Inicialmente devem
está começar
apagada.com o
*/ lugar dentro
primeiro caracteredo corpo da classe, mas não
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
apagarRegistroDeNota“vazio”, “nulo”
Terminador da declaração de variável
, incluiNotaAluno , etc.
/** Nome
Nome da operação da variável declarada
 Exemplo
* A operação 'apaga' apaga a lâmpada Lista de parâmetros da operação
* alterando
•o Logo,
seu
o tipo
estado
void
para
é um
apagado.() tipo que
indica lista não
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
...
/**
► Declaração de operações
• Neste caso, a operação deve ter em seu corpo a palavra-
* 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

► Qualquer tentativa de uso de uma referência apontando para null


Lampada
resulta lamp1 = null;
num erro
 Antes, deve-se inicializar a referência com o endereço de um objeto
existente

(C) 2008 Gustavo Motta 19


• Agora, tanto lamp1, quanto lamp2 estão apontando (referenciando) para um mesmo obje

3. Classes, objetos & Cia. em Java



posição 2 de memória
O objeto na posição 2 também pode ser manipulado através da referência lamp2

• 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

► Objetos são criados (instanciados) com o uso do operador new


 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,


Lampada lamp1 = null; 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();

(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
► Interagindo com objetos
* paraSystem.out.println();
testar a implementação da classe
* 'Lampada'
*/  Uma vez declarada
lamp1.apaga(); uma aclasse,
//Apaga lâmpadaé1 recomendável definir
uma outra classe para
System.out.print("lamp1 estatestar sua");
apagada? 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();

System.out.print("lamp1 esta apagada? ");


System.out.println(lamp1.estaApagada());
(C) 2008 Gustavo Motta 21
System.out.println();
...
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 de acesso
 Tipos
► 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 valor do saldo, do limite ou do bônus para cometer
uma fraude, por exemplo.
(C) 2008 Gustavo Motta 27
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
• Tal tentativa de acesso provoca um erro em
► Modificadores de acesso tempo de compilação porque a variável bonus foi
declarada como privada (private), só podendo
ser acessada, portanto, dentro da classe onde foi
 Exemplo •
declarada, ou seja, a classe CartaoDeCredito
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