Post on 21-Apr-2015
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).
UML e Java, Introdução AB,2000 2
Diagrama de Classes UMLe JAVA
Conta
ContaOrdem
ContaMulti
Diagrama de Classes
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()
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
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...
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)
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)
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
UML e Java, Introdução AB,2000 9
Diagrama de Classes UMLe JAVA
public class ContaOrdem extends Conta
ContaOrdem.java
Conta
ContaOrdem
herança
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
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
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
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.
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
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
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
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
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.
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
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?
UML e Java, Introdução AB,2000 21
Diagrama de Classes UMLe JAVA
Conta
ContaOrdem
ContaMulti ContaOrdenado
Diagrama declasses,ContaOrdenadoherda deContaOrdem
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
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?
UML e Java, Introdução AB,2000 24
Diagrama de Classes UMLe JAVA
Conta
ContaOrdem
ContaMulti ContaOrdenado
String