InMoST, Java – przykładowa aplikacja Bartosz.Michalik
Java (2) Agenda Wstępny szkic Podejścia Bonusy ;)
Java (3) Dokąd zmierzamy ?
Java (4) Pierwsze kroki Bank Konto Bank może zawierać konta
Java (5) Zakodujmy to Prosta klasa banku public class Bank { private String name; private Set accounts; public Bank(...) {... } public Collection getAccounts() { return....; }
Java (6) 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 (7) 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 (8) Dyskusja Czy czegoś tutaj nie brakuje ? –Czy operacje przelania pieniędzy są bezpieczne? –Konto bez banku ?
Java (9) 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 (10) 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 (11) Nowe wyzwanie Możliwość cofania operacji na koncie Logowanie operacji bankowych
Java (12) Budujemy dalej ?? W jaki sposób umożliwić bezpieczne transakcje pomiędzy bankami ??
Java (13) Ostatnie pociągnięcia
Java (14) Nowa klasa Transaction public class Transaction { private Account out; private Account in; private double 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); } private boolean exec(Account f, Account s) { if(f == s) return false; try { f.withdraw(amount); } catch (BankException e) { return false; } try { s.deposit(amount); } catch (BankException e) { f.rollbackLastOperation(); return false; } return true; }
Java (15) 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