A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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.

Apresentações semelhantes


Apresentação em tema: "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."— Transcrição da apresentação:

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 que pode ser consultado em qualquer altura. É possível efectuar operações de depósito e levantamento sobre contas bancárias. As contas devem ter um atributo que 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 uma conta à ordem mas não suporta levantamentos superiores a um limite de levantamento fixo (estipulado para todas as contas).

2 UML e Java, Introdução AB,20002 Diagrama de Classes UML e JAVA Conta ContaOrdem ContaMulti Diagrama de Classes

3 UML e Java, Introdução AB,20003 Diagrama de Classes UML e JAVA Conta saldo: double mensagemOperacao: String Deposita(valor: double): boolean Levanta(valor: double): boolean Saldo():double MensagemOperacao(msg: String) MensagemOperacao():String Diagrama de Classes (com detalhe) ContaOrdem Levanta(valor: double): boolean ContaMulti limiteLevantamento: double Levanta(valor: double): boolean LimiteLevantamento()

4 UML e Java, Introdução AB,20004 Diagrama de Classes UML e JAVA Conta saldo: double mensagemOperação: String Deposita(valor: double): boolean Levanta(valor: double): boolean Saldo():double MensagemOperacao(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 que a classe é abstracta (não vai ter instâncias) construtor

5 UML e Java, Introdução AB,20005 Diagrama de Classes UML e 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 o encapsulamento do atributo saldo. O “mundo exterior” não pode aceder... Métodos públicos, o “mundo exterior” pode aceder...

6 UML e Java, Introdução AB,20006 Diagrama de Classes UML e 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)

7 UML e Java, Introdução AB,20007 Diagrama de Classes UML e 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)

8 UML e Java, Introdução AB,20008 Diagrama de Classes UML e 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

9 UML e Java, Introdução AB,20009 Diagrama de Classes UML e JAVA public class ContaOrdem extends Conta ContaOrdem.java Conta ContaOrdem herança

10 UML e Java, Introdução AB,200010 Diagrama de Classes UML e JAVA ContaOrdem.java public ContaOrdem() { super(); } public ContaOrdem(double valor) { super(valor); } Opção: 2 construtores Será possível criar contas à Ordem com saldo a zero através do construtor por defeito ou com saldo inicial através do segundo construtor

11 UML e Java, Introdução AB,200011 Diagrama de Classes UML e 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 construtor da classe base que recebe o argumento valor e efectua a atribuição de saldo inicial

12 UML e Java, Introdução AB,200012 Diagrama de Classes UML e 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 manipular o objecto Criar o novo objecto e atribuir à refª minhaConta construtor

13 UML e Java, Introdução AB,200013 Diagrama de Classes UML e JAVA Criar objectos do tipo ContaOrdem a partir do 2º construtor Ex: ContaOrdem minhaConta; minhaConta = new ContaOrdem(1000); A nova conta é criada com saldo 1000.

14 UML e Java, Introdução AB,200014 Diagrama de Classes UML e 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 ao saldo da conta então invoca-se o método “Levanta” da classe base

15 UML e Java, Introdução AB,200015 Diagrama de Classes UML e 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étodos dos objectos

16 UML e Java, Introdução AB,200016 Diagrama de Classes UML e JAVA ContaOrdem minhaConta; ContaOrdem tuaConta; minhaConta = new ContaOrdem(); tuaConta = new ContaOrdem(); minhaConta.Deposita(1000); tuaConta.Deposita(500); double v; v = minhaConta.Saldo(); // “v” recebe 1000 v = minhaConta.Saldo(); // “v” recebe 500 Os objectos partilham comportamento mas têm valores de dados próprios

17 UML e Java, Introdução AB,200017 Diagrama de Classes UML e 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

18 UML e Java, Introdução AB,200018 Diagrama de Classes UML e 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ível para o “mundo exterior” pois é privado. Apenas a classe o utiliza.

19 UML e Java, Introdução AB,200019 Diagrama de Classes UML e 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

20 UML e Java, Introdução AB,200020 Diagrama de Classes UML e JAVA Novo Problema O banco necessita de um novo tipo de conta: ordenado. No fundo, as contas ordenado são contas à ordem mas permitem levantamentos superiores ao saldo desde que estes não ultrapassem o crédito estabelecido… Nos casos de saldo insuficiente, é efectuado um crédito ao 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?

21 UML e Java, Introdução AB,200021 Diagrama de Classes UML e JAVA Conta ContaOrdem ContaMulti ContaOrdenado Diagrama de classes, ContaOrdenado herda de ContaOrdem

22 UML e Java, Introdução AB,200022 Diagrama de Classes UML e JAVA “Todas as contas têm um número de conta” Conta saldo: double mensagemOperação: String numero: int Deposita(valor: double): boolean Levanta(valor: double): boolean Saldo():double MensagemOperacao(msg: String) MensagemOperacao():String Ao adicionar o número à classe Conta, todas as contas passam a ter este atributo

23 UML e Java, Introdução AB,200023 Diagrama de Classes UML e JAVA Conta saldo: double mensagemOperação: String numero: int Deposita(valor: double): boolean Levanta(valor: double): boolean Saldo():double MensagemOperacao(msg: String) MensagemOperacao():String double e int são tipos de dados intrínsecos (não são classes). No entanto, String é uma classe. Podemos então dizer que as contas têm ou usam Strings. Como ficará o diagrama de classes?

24 UML e Java, Introdução AB,200024 Diagrama de Classes UML e JAVA Conta ContaOrdem ContaMulti ContaOrdenado String


Carregar ppt "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."

Apresentações semelhantes


Anúncios Google