Java – przykładowa aplikacja

advertisement
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)
Download