UML e Java, Introdução AB,20001 Diagrama de Classes UML e JAVA Problema Existem diversos tipos de...

24
UML e Java, Introdução AB ,2000 1 Diagrama de Classes UML e JAVA ema diversos tipos de contas bancárias. Todas as contas atributo saldo que pode ser consultado em qualquer É possível efectuar operações de depósito e mento sobre contas bancárias. As contas devem ter um atribut iste a última operação efectuada (ex: “levantamento efectuad as à ordem devem verificar nas operações de levantamento te saldo suficiente para tal… um tipo de conta multibanco que se comporta como uma ordem mas não suporta levantamentos superiores a um limite ntamento fixo (estipulado para todas as contas).

Transcript of UML e Java, Introdução AB,20001 Diagrama de Classes UML e JAVA Problema Existem diversos tipos de...

Page 1: UML e Java, Introdução AB,20001 Diagrama de Classes UML e JAVA Problema Existem diversos tipos de contas bancárias. Todas as contas têm um atributo saldo.

UML e Java, Introdução AB,2000 1

Diagrama de Classes UMLe JAVA

Problema

Existem diversos tipos de contas bancárias. Todas as contastêm um atributo saldo que pode ser consultado em qualqueraltura. É possível efectuar operações de depósito e levantamento sobre contas bancárias. As contas devem ter um atributoque registe a última operação efectuada (ex: “levantamento efectuado” ).

As contas à ordem devem verificar nas operações de levantamento se existe saldo suficiente para tal…

Existe um tipo de conta multibanco que se comporta como umaconta à ordem mas não suporta levantamentos superiores a um limitede levantamento fixo (estipulado para todas as contas).

Page 2: UML e Java, Introdução AB,20001 Diagrama de Classes UML e JAVA Problema Existem diversos tipos de contas bancárias. Todas as contas têm um atributo saldo.

UML e Java, Introdução AB,2000 2

Diagrama de Classes UMLe JAVA

Conta

ContaOrdem

ContaMulti

Diagrama de Classes

Page 3: UML e Java, Introdução AB,20001 Diagrama de Classes UML e JAVA Problema Existem diversos tipos de contas bancárias. Todas as contas têm um atributo saldo.

UML e Java, Introdução AB,2000 3

Diagrama de Classes UMLe JAVA

Conta

saldo: doublemensagemOperacao: String

Deposita(valor: double): booleanLevanta(valor: double): booleanSaldo():doubleMensagemOperacao(msg: String)MensagemOperacao():String

Diagrama de Classes(com detalhe)

ContaOrdem

Levanta(valor: double): boolean

ContaMulti

limiteLevantamento: double

Levanta(valor: double): booleanLimiteLevantamento()

Page 4: UML e Java, Introdução AB,20001 Diagrama de Classes UML e JAVA Problema Existem diversos tipos de contas bancárias. Todas as contas têm um atributo saldo.

UML e Java, Introdução AB,2000 4

Diagrama de Classes UMLe JAVA

Conta

saldo: doublemensagemOperação: String

Deposita(valor: double): booleanLevanta(valor: double): booleanSaldo():doubleMensagemOperacao(msg: String)MensagemOperacao():String

public abstract class Conta{

private double m_saldo;

public Conta() { m_saldo = 0; }

public boolean Deposita(double valor){ m_saldo+=valor; return true;}

public boolean Levanta(double valor){ m_saldo-=valor; return true;}

public double Saldo() { return m_saldo; }

}

O nome da classe em itálico significa quea classe é abstracta(não vai ter instâncias)

construtor

Page 5: UML e Java, Introdução AB,20001 Diagrama de Classes UML e JAVA Problema Existem diversos tipos de contas bancárias. Todas as contas têm um atributo saldo.

UML e Java, Introdução AB,2000 5

Diagrama de Classes UMLe JAVA

public abstract class Conta{

private double m_saldo;

public Conta() { m_saldo = 0; }

public boolean Deposita(double valor){ m_saldo+=valor; return true;}

public boolean Levanta(double valor){ m_saldo-=valor; return true;}

public double Saldo() { return m_saldo; }

}

“private” garante oencapsulamentodo atributo saldo.O “mundo exterior”não pode aceder...

Métodos públicos,o “mundo exterior”pode aceder...

Page 6: UML e Java, Introdução AB,20001 Diagrama de Classes UML e JAVA Problema Existem diversos tipos de contas bancárias. Todas as contas têm um atributo saldo.

UML e Java, Introdução AB,2000 6

Diagrama de Classes UMLe JAVA

public abstract class Conta{

private double m_saldo;private String m_mensagemOperacao;

public Conta(){ m_saldo = 0; m_mensagemOperacao = new String("Conta criada com saldo zero");}

public Conta(double valor){ m_saldo = valor; m_mensagemOperacao = new String("Conta criada com saldo inicial");}

// isto é um comentário, a classe Conta continua no próximo slide...

Conta.java (1/2)

Page 7: UML e Java, Introdução AB,20001 Diagrama de Classes UML e JAVA Problema Existem diversos tipos de contas bancárias. Todas as contas têm um atributo saldo.

UML e Java, Introdução AB,2000 7

Diagrama de Classes UMLe JAVA

public double Saldo() { m_mensagemOperacao = new String("Consulta de saldo"); return m_saldo;}

public String MensagemOperacao() { return m_mensagemOperacao; }

public void MensagemOperacao(String mensagem) { m_mensagemOperacao = mensagem; }

public boolean Deposita(double valor) { m_saldo+=valor; m_mensagemOperacao = new String("Deposito efectuado"); return true;}

public boolean Levanta(double valor){ m_saldo-=valor;

m_mensagemOperacao = new String("Levantamento efectuado"); return true;}

}

Conta.java (2/2)

Page 8: UML e Java, Introdução AB,20001 Diagrama de Classes UML e JAVA Problema Existem diversos tipos de contas bancárias. Todas as contas têm um atributo saldo.

UML e Java, Introdução AB,2000 8

Diagrama de Classes UMLe JAVA

ContaOrdem

Levanta(valor: double): boolean

public class ContaOrdem extends Conta{

public ContaOrdem() { super(); }

public ContaOrdem(double valor){ super(valor);}

public boolean Levanta(double valor){

boolean levantou = false;

if ( valor <= Saldo() ) { levantou = super.Levanta(valor);} else {

MensagemOperacao(new String("O seu saldo não permite esta operação"));}return levantou;

}}

ContaOrdem.java

Page 9: UML e Java, Introdução AB,20001 Diagrama de Classes UML e JAVA Problema Existem diversos tipos de contas bancárias. Todas as contas têm um atributo saldo.

UML e Java, Introdução AB,2000 9

Diagrama de Classes UMLe JAVA

public class ContaOrdem extends Conta

ContaOrdem.java

Conta

ContaOrdem

herança

Page 10: UML e Java, Introdução AB,20001 Diagrama de Classes UML e JAVA Problema Existem diversos tipos de contas bancárias. Todas as contas têm um atributo saldo.

UML e Java, Introdução AB,2000 10

Diagrama de Classes UMLe JAVA ContaOrdem.java

public ContaOrdem() { super();}

public ContaOrdem(double valor){ super(valor);}

Opção: 2 construtoresSerá possível criarcontas à Ordem comsaldo a zero através doconstrutor por defeito

ou

com saldo inicial atravésdo segundo construtor

Page 11: UML e Java, Introdução AB,20001 Diagrama de Classes UML e JAVA Problema Existem diversos tipos de contas bancárias. Todas as contas têm um atributo saldo.

UML e Java, Introdução AB,2000 11

Diagrama de Classes UMLe JAVA ContaOrdem.java

public Conta(double valor){ m_saldo = valor; m_mensagemOperacao = new String("Conta criada com saldo inicial");}

public ContaOrdem(double valor){ super(valor);}

Ex: comportamento do 2º construtor

É invocado o construtorda classe base que recebeo argumento valor e efectuaa atribuição de saldo inicial

Page 12: UML e Java, Introdução AB,20001 Diagrama de Classes UML e JAVA Problema Existem diversos tipos de contas bancárias. Todas as contas têm um atributo saldo.

UML e Java, Introdução AB,2000 12

Diagrama de Classes UMLe JAVA

Criar objectos do tipo ContaOrdem a partir do construtor por defeito

Ex:ContaOrdem minhaConta;

minhaConta = new ContaOrdem();

ou

ContaOrdem minhaConta = new ContaOrdem();

Refª para manipularo objecto

Criar o novo objecto e atribuir à refª minhaConta

construtor

Page 13: UML e Java, Introdução AB,20001 Diagrama de Classes UML e JAVA Problema Existem diversos tipos de contas bancárias. Todas as contas têm um atributo saldo.

UML e Java, Introdução AB,2000 13

Diagrama de Classes UMLe JAVA

Criar objectos do tipo ContaOrdem a partir do 2º construtor

Ex:ContaOrdem minhaConta;

minhaConta = new ContaOrdem(1000);

A nova conta é criada comsaldo 1000.

Page 14: UML e Java, Introdução AB,20001 Diagrama de Classes UML e JAVA Problema Existem diversos tipos de contas bancárias. Todas as contas têm um atributo saldo.

UML e Java, Introdução AB,2000 14

Diagrama de Classes UMLe JAVA

public boolean Levanta(double valor){ boolean levantou = false;

if ( valor <= Saldo() ) {

levantou = super.Levanta(valor);

} else {

MensagemOperacao(new String("O seu saldo não permite esta operação")); }

return levantou;}

ContaOrdem.java

O método “Levanta” é redefinido.Se o valor a levantar for menor ou igual aosaldo da conta então invoca-se o método “Levanta” da classe base

Page 15: UML e Java, Introdução AB,20001 Diagrama de Classes UML e JAVA Problema Existem diversos tipos de contas bancárias. Todas as contas têm um atributo saldo.

UML e Java, Introdução AB,2000 15

Diagrama de Classes UMLe JAVA

ContaOrdem minhaConta;

minhaConta = new ContaOrdem();

minhaConta.Deposita(1000);minhaConta.Deposita(2500);minhaConta.Levanta(500);

double v;v = minhaConta.Saldo();

3000

Mensagens a Objectos

Invocar métodosdos objectos

Page 16: UML e Java, Introdução AB,20001 Diagrama de Classes UML e JAVA Problema Existem diversos tipos de contas bancárias. Todas as contas têm um atributo saldo.

UML e Java, Introdução AB,2000 16

Diagrama de Classes UMLe JAVA

ContaOrdem minhaConta;ContaOrdem tuaConta;

minhaConta = new ContaOrdem();tuaConta = new ContaOrdem();

minhaConta.Deposita(1000);tuaConta.Deposita(500);

double v;v = minhaConta.Saldo(); // “v” recebe 1000v = minhaConta.Saldo(); // “v” recebe 500

Os objectos partilham comportamento mas têm valores de dados próprios

Page 17: UML e Java, Introdução AB,20001 Diagrama de Classes UML e JAVA Problema Existem diversos tipos de contas bancárias. Todas as contas têm um atributo saldo.

UML e Java, Introdução AB,2000 17

Diagrama de Classes UMLe JAVA ContaMulti.java

public class ContaMulti extends ContaOrdem{ private double m_limiteLevantamento;

public ContaMulti() { super(); LimiteLevantamento(); }

public ContaMulti(double valor) { super(valor); LimiteLevantamento(); }

public boolean Levanta(double valor) { boolean levantou = false;

if ( valor <= m_limiteLevantamento ) { levantou = super.Levanta(valor); }else { MensagemOperacao(new String("O limite de levantamento não permite esta operação")); } return levantou; }

private void LimiteLevantamento() { m_limiteLevantamento = 40000; }}

ContaOrdem

ContaMulti

Page 18: UML e Java, Introdução AB,20001 Diagrama de Classes UML e JAVA Problema Existem diversos tipos de contas bancárias. Todas as contas têm um atributo saldo.

UML e Java, Introdução AB,2000 18

Diagrama de Classes UMLe JAVA

ContaMulti minhaConta;

minhaConta = new ContaMulti();

minhaConta.Deposita(1000);minhaConta.Deposita(2500);minhaConta.Levanta(500);

minhaConta.LimiteLevantamento(); // Erro!!!

O método LimiteLevantamento não está disponívelpara o “mundo exterior” pois é privado. Apenas a classe o utiliza.

Page 19: UML e Java, Introdução AB,20001 Diagrama de Classes UML e JAVA Problema Existem diversos tipos de contas bancárias. Todas as contas têm um atributo saldo.

UML e Java, Introdução AB,2000 19

Diagrama de Classes UMLe JAVA

Conta c;

ContaOrdem co;ContaMulti cm;

co = new ContaOrdem();cm = new ContaMulti();

// (…)

Um exemplo de polimorfismo:

c = co;

c.Levanta(200);

c = cm;

c.Levanta(100);

É invocado o método “Levanta” da conta ordem

É invocado o método “Levanta” da conta multi

Page 20: UML e Java, Introdução AB,20001 Diagrama de Classes UML e JAVA Problema Existem diversos tipos de contas bancárias. Todas as contas têm um atributo saldo.

UML e Java, Introdução AB,2000 20

Diagrama de Classes UMLe JAVA

Novo Problema

O banco necessita de um novo tipo de conta: ordenado.

No fundo, as contas ordenado são contas à ordem maspermitem levantamentos superiores ao saldo desde queestes não ultrapassem o crédito estabelecido…Nos casos de saldo insuficiente, é efectuado um créditoao saldo, para se concretizar o levantamento posterior.O crédito é atribuído em função do salário do titular de conta.

Como ficará o diagrama de classes?

Page 21: UML e Java, Introdução AB,20001 Diagrama de Classes UML e JAVA Problema Existem diversos tipos de contas bancárias. Todas as contas têm um atributo saldo.

UML e Java, Introdução AB,2000 21

Diagrama de Classes UMLe JAVA

Conta

ContaOrdem

ContaMulti ContaOrdenado

Diagrama declasses,ContaOrdenadoherda deContaOrdem

Page 22: UML e Java, Introdução AB,20001 Diagrama de Classes UML e JAVA Problema Existem diversos tipos de contas bancárias. Todas as contas têm um atributo saldo.

UML e Java, Introdução AB,2000 22

Diagrama de Classes UMLe JAVA

“Todas as contas têm um número de conta”

Conta

saldo: doublemensagemOperação: Stringnumero: int

Deposita(valor: double): booleanLevanta(valor: double): booleanSaldo():doubleMensagemOperacao(msg: String)MensagemOperacao():String

Ao adicionar o número à classe Conta,todas as contas passama ter este atributo

Page 23: UML e Java, Introdução AB,20001 Diagrama de Classes UML e JAVA Problema Existem diversos tipos de contas bancárias. Todas as contas têm um atributo saldo.

UML e Java, Introdução AB,2000 23

Diagrama de Classes UMLe JAVA

Conta

saldo: doublemensagemOperação: Stringnumero: int

Deposita(valor: double): booleanLevanta(valor: double): booleanSaldo():doubleMensagemOperacao(msg: String)MensagemOperacao():String

double e int são tipos de dadosintrínsecos (não são classes).

No entanto, String é uma classe.

Podemos então dizer que ascontas têm ou usam Strings.

Como ficará o diagrama declasses?

Page 24: UML e Java, Introdução AB,20001 Diagrama de Classes UML e JAVA Problema Existem diversos tipos de contas bancárias. Todas as contas têm um atributo saldo.

UML e Java, Introdução AB,2000 24

Diagrama de Classes UMLe JAVA

Conta

ContaOrdem

ContaMulti ContaOrdenado

String