InMoST, 2007-04-26 Java – przykładowa aplikacja Bartosz.Michalik [email protected] Agenda Wstępny szkic Podejścia Bonusy ;) Java (2) Dokąd zmierzamy ? Java (3) Pierwsze kroki • Bank • Konto • Bank może zawierać konta Java (4) Zakodujmy to • Prosta klasa banku public class Bank { private String name; private Set accounts; public Bank(...) { ... } public Collection getAccounts() { return ....; } } Java (5) Zakodujmy to • Klasa konta bankowego public class Account { private double balance; private int id; private String ownerName; private String ownerSurname; private Date creationTime; public void deposit(double amount) { balance ?? } public void withdraw(double amount) { balance ?? } } Java (6) Jak tego użyć ? Bank bank = new Bank("ulubiony"); Account account1 = new Account("Jan", "Kowalski"); Account account2 = new Account("Adaś", "Miałczyński"); account1.deposit(2000); account1.withdraw(1000); account1.deposit(-500); account2.deposit(1000); account2.withdraw(2000); account2.deposit(-500); System.out.println("zawartość: " + account1.getBalance()); System.out.println("zawartość: " + account2.getBalance()); Java (7) Dyskusja • Czy czegoś tutaj nie brakuje ? – Czy operacje przelania pieniędzy są bezpieczne? – Konto bez banku ? Java (8) Modyfikacja • Konto może być używane tylko jeżeli jest częścią jakiegoś banku • Operacje wpłaty i wypłaty nie powinny być wykonywane dla wartości mniejszych od zera Java (9) Punkt kontrolny • Konto public void deposit(double amount) throws BankException { checkInBank(); if(amount < 0) throw new BankException("ilość mniejsza od zera"); balance += amount; } public void withdraw(double amount) throws BankException { checkInBank(); if(amount < 0) throw new BankException("ilość mniejsza od zera"); if(balance < amount) throw new BankException("nie ma śro dków na koncie"); balance -= amount; } Java (10) Nowe wyzwanie • Możliwość cofania operacji na koncie • Logowanie operacji bankowych Java (11) Budujemy dalej ?? • W jaki sposób umożliwić bezpieczne transakcje pomiędzy bankami ?? Java (12) Ostatnie pociągnięcia Java (13) Nowa klasa • Transaction public class Transaction { private Account out; private Account in; private double amount; ... private boolean exec(Account f, Account s) { if(f == s) return false; try { f.withdraw(amount); public Transaction(Account in, Account out, double amount) { ??? } public boolean execute() { ... executed = exec(in, out); return executed; } public boolean rollback() { ... return exec(out, in); } } } } catch (BankException e) { return false; } try { s.deposit(amount); } catch (BankException e) { f.rollbackLastOperation(); return false; } return true; Java (14) Bonus • Znajdź konta o największej aktywności • Znajdź konta o największych wypłatach w ciągu ostatnich N operacji • Stwórz klasę klienta banku • Zapisywanie do pliku Java (15)