27
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 3 – Introdução às classes Capitulo 3 Introdução às classes

Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/2002 1 Capitulo 3 – Introdução às classes Capitulo 3 Introdução às classes

Embed Size (px)

Citation preview

Page 1: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/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

1

Capitulo 3 – Introdução às classes

Capitulo 3

Introdução às classes

Page 2: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/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

Page 3: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/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

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);

Page 4: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/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

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);

Page 5: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/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

5

Capitulo 3 – Introdução às classes

Criando um novo objecto

BankAccount

balance

new BankAccount();

Page 6: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/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

6

Capitulo 3 – Introdução às classes

Inicializando uma variável objecto

BankAccount

balance 0

harrysChecking

BankAccount harrysChecking = new BankAccount();

Page 7: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/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

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

Page 8: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/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

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.

Page 9: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/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

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

Page 10: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/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

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

Page 11: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/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

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– ...

Page 12: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/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

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;}

Page 13: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/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

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;

Page 14: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/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

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;//...

}

}

Page 15: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/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

15

Capitulo 3 – Introdução às classes

Construtores múltiplospublic class BankAccount

{

public BankAccount( double inicialbalance){

balance = inicialbalance;}//...

}

BankAccount bAccount = new BankAccount(5000);

Page 16: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/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

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

Page 17: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/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

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

}

Page 18: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/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

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; }

Page 19: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/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

19

Capitulo 3 – Introdução às classes

public void withdraw(double amt) {

balance = balance - amt; } public double getBalance() {

return balance; }

private double balance;

}

Page 20: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/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

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()

Page 21: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/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

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

Page 22: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/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

22

Capitulo 3 – Introdução às classes

Cópia de números

balance1

balance2

1000

1000

Page 23: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/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

23

Capitulo 3 – Introdução às classes

Cópia de referencias para objectos

BankAccount account1 = new BankAccount(1000);

BankAccount account2 = account1;

account2.deposit(500);

Page 24: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/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

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.

Page 25: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/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

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

Page 26: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/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

26

Capitulo 3 – Introdução às classes

Uma referencia a null

BankAccount

balance 0

nullaccount1

account2

Page 27: Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/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

27

Capitulo 3 – Introdução às classes

Referencias para Strings

String“Hello”

cumprimento

mensagem

String“”

nullcomentario