engenharia informática programação i & estruturas de dados e algoritmos 2001/2002 1 capitulo...
TRANSCRIPT
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
1
Capitulo 3 – Introdução às classes
Capitulo 3
Introdução às classes
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
2
Capitulo 3 – Introdução às classes
Comportamento do objecto
Operações disponíveis sobre uma conta bancária– Depositar dinheiro
– Levantar dinheiro
– Obter o extracto actual
Métodos (implementam operações)
deposit
withdraw
getBalance
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
3
Capitulo 3 – Introdução às classes
Utilizando os métodos
• Transferir uma quantia de uma conta para outra
double amt = 500;
momsSavings.withdraw(amt);
harrysChecking.deposit(amt);
• Adicionar juros
final double RATE = 5.0; // 5%double amt = account.getBalance() * RATE / 100.0;account.deposit(amt);
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
4
Capitulo 3 – Introdução às classes
Construindo objectos
• Construção de um objectonew BankAccount();
• Guardar referência para o objectoBankAccount harrysChecking =
new BankAccount();
• Aplicar os métodosaccount.deposit(1000);
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
5
Capitulo 3 – Introdução às classes
Criando um novo objecto
BankAccount
balance
new BankAccount();
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
6
Capitulo 3 – Introdução às classes
Inicializando uma variável objecto
BankAccount
balance 0
harrysChecking
BankAccount harrysChecking = new BankAccount();
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
7
Capitulo 3 – Introdução às classes
Definição da classe(métodos)• class BankAccount {
public void deposit(double amt) { //implementação do método
} public void withdraw(double amt) { //implementação do método } public double getBalance() { //implementação do método } }
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
8
Capitulo 3 – Introdução às classes
Características dos métodos
• Especificação do tipo acesso. Por exemplo: public• Tipo de retorno. Por exemplo double, int, void• Nome do método. Por exemplo: withdraw.• Lista de parâmetros. Por exemplo: amt.
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
9
Capitulo 3 – Introdução às classes
Atributos (variáveis membro)
• class BankAccount
{ ...
private double balance;
}
• Visibilidade do atributo: private• Tipo do atributo double.• Nome do atributo: balance
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
10
Capitulo 3 – Introdução às classes
Atributos (variáveis membro)
BankAccount
balance 0
harrysChecking
BankAccount
balance 7500
momsSavings
Objecto
Objecto
Referência para objecto
Referência para objecto
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
11
Capitulo 3 – Introdução às classes
Atributos privados
• Não é possível aceder a atributos declarados como privadosharrysChecking.balance = 1000;//ERRO
• Utiliza-se o interface público para todos os acessos harrysChecking.deposit(1000);
• Implementação escondida – encapsulation– Segura– Torna fácil alterar a implementação– ...
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
12
Capitulo 3 – Introdução às classes
A implementação dos métodos
• class BankAccount { public void deposit(double amt) { balance = balance + amt; } public void withdraw(double amt) { balance = balance - amt; } public double getBalance() { return balance; } private double balance;}
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
13
Capitulo 3 – Introdução às classes
Parâmetro implícito• public void withdraw(double amt){
balance = balance - amt;}
• balance é o saldo do objecto à esquerda do ponto:momsSavings.withdraw(500)significa momsSavings.balance = momsSavings.balance - amt;
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
14
Capitulo 3 – Introdução às classes
Construtores
• O construtor inicializa uma variável membro da instância
• Nome do construtor = nome da classepublic class BankAccount{
public BankAccount(){
balance = 0;//...
}
}
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
15
Capitulo 3 – Introdução às classes
Construtores múltiplospublic class BankAccount
{
public BankAccount( double inicialbalance){
balance = inicialbalance;}//...
}
BankAccount bAccount = new BankAccount(5000);
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
16
Capitulo 3 – Introdução às classes
Dicas
• Declare todos os atributos como private• Declare os métodos utilizados “fora da classe”
como públicos. Os restantes como private.• Alguns atalhos de teclado úteis
Ctrl+C, Ctrl+V, Ctrl+X
Alt+Tab, Ctrl+Esc
Alt+letter
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
17
Capitulo 3 – Introdução às classes
Programa para testar
• A classe BankAccount implementa uma conta bancária
• É necessário uma classe distinta para efectuarmos operações sobre uma conta bancária
• public class BankAccountTest {
Escreva alguns métodos para testar a classe BankAccount
}
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
18
Capitulo 3 – Introdução às classes
Class BankAccount.java
class BankAccount {
public BankAccount() {
balance = 0; }
public BankAccount(double initialbalance) {
balance = initialbalance; } public void deposit(double amt) {
balance = balance + amt; }
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
19
Capitulo 3 – Introdução às classes
public void withdraw(double amt) {
balance = balance - amt; } public double getBalance() {
return balance; }
private double balance;
}
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
20
Capitulo 3 – Introdução às classes
À descoberta das classes
• Substantivos – candidatos a classes• Verbos – candidatos a métodos• Exemplo: Desejamos obter o número de um
aluno:• Classe: Student• Método: getNumber()
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
21
Capitulo 3 – Introdução às classes
Copiando números
• double balance1 = 1000;double balance2 = balance1;balance2 = balance2 + 500;
• Alterações no valor do balance2 não afectam o valor do balance1
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
22
Capitulo 3 – Introdução às classes
Cópia de números
balance1
balance2
1000
1000
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
23
Capitulo 3 – Introdução às classes
Cópia de referencias para objectos
BankAccount account1 = new BankAccount(1000);
BankAccount account2 = account1;
account2.deposit(500);
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
24
Capitulo 3 – Introdução às classes
Copiando referencias a objectos
BankAccount
balance 0
account1
account2
Alterações efectuadas na account2 são visíveis através da account1
Variáveis de objectos contém referências e não os objectos em si.
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
25
Capitulo 3 – Introdução às classes
Referencia a null
• account1 = null;• A account1 não se refere a nenhuma conta• Não é possível chamar métodos associados a
uma variável a apontar para null• null não é o mesmo que zero• Erro comum: “A null string is not the same as
the empty string ""
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
26
Capitulo 3 – Introdução às classes
Uma referencia a null
BankAccount
balance 0
nullaccount1
account2
Engenharia InformáticaProgramação I & Estruturas de Dados e Algoritmos2001/2002
27
Capitulo 3 – Introdução às classes
Referencias para Strings
String“Hello”
cumprimento
mensagem
String“”
nullcomentario