Περιγραφή συστήματος «BankAccount» Οι κλάσεις Το σύστημα Τραπεζικών Λογαριασμών «BankAccount» αποτελείται από τρεις κλάσεις: BankAccount (Τραπεζικός Λογαριασμός) Person (Άτομο ή δικαιούχος) Permissions ( ικαιώματα επί Λογαριασμού) Ακόμη, απαιτείται µία κλάση, την ονοµάζουμε συνήθως Main, η οποία περιέχει την μέθοδο main(), µε την κλήση της οποίας αρχίζει κάθε φορά η εκτέλεση του συστήματος. Οι συσχετίσεις Η λογική του συστήματος, µέσω της οποίας ορίζονται και οι συσχετίσεις μεταξύ των κλάσεων, είναι ότι µια τράπεζα, μετά από αίτηση ατόμου ή ατόμων, ανοίγει κάποιον λογαριασμό. Ένας λογαριασμός (BankAccount), μπορεί επομένως να ανήκει σε ένα Ατομο ή σε περισσότερα τους ενός άτομα. Η σχέση μεταξύ των δύο κλάσεων επομένως είναι του είδους συναρµολόγηση (aggregation) µε πολλαπλότητα «Μ:Ν». Στο παράδειγμά µας ωστόσο, εξετάζουμε την σχέση μεταξύ των δύο κλάσεων, για λόγους απλούστευσης, ως «1:Ν». Ένας λογαριασμός δηλαδή μπορεί να ανήκει σε 1 ή Ν άτομα. Ο λόγος που ορίζουμε τη σχέση της συναρμολόγησης είναι ότι τα αντικείμενα των δύο αυτών κλάσεων μπορούν να συνυπάρχουν σε ομάδες αλλά και μεμονωμένα. Η τράπεζα έχει τη δυνατότητα να ορίζει διαφορετικά δικαιώματα σε κάθε άτομοδικαιούχο ενός λογαριασμού. Για την υλοποίηση της δυνατότητας αυτής ορίζεται µία ξεχωριστή κλάση, η «Permissions», η οποία όμως πρέπει να ανήκει αποκλειστικά σε κάθε δικαιούχο. Υπ αυτή την έννοια, η σχέση της κλάσης Person µε αυτής της Permissions θα πρέπει να είναι ισχυρή, δηλαδή σύνθεση (composition). Σε περίπτωση δηλαδή που για κάποιο λόγο διαγραφεί από το σύστημα ένα άτομο να διαγράφονται αυτομάτως και τα δικαιώματά του. Ερωτήματα Αφού κατανοήσετε τον τρόπο λειτουργίας του κώδικα πηγής (source code) που σας παρέχεται να υλοποιήσετε: Τη μέθοδο BankAccount.addPerson(String id, String name, Permissions per) η οποία προσθέτει σ ένα λογαριασμό ένα πρόσωπο με τα στοιχεία id, name, per. Να προσθέσετε έναν έλεγχο για το μέγιστο επιτρεπόμενο αριθμό προσώπων πάντα στη μέθοδο BankAccount.addPerson() Τη μέθοδο BankAccount.withdraw() σύμφωνα με τη BankAccount.deposit() 1
Στη μέθοδο main() θα πρέπει: να προσθέσετε μία εντολή η οποία θα δημιουργεί ένα λογαριασμό μετά τη δημιουργία του λογαριασμού να προσθέσετε εντολές που να προσθέτουν τρία πρόσωπα δικαιούχους του λογαριασμού με δυνατότητα για διαφορετικές ενέργειες να προσθέσετε μία πράξη κατάθεσης κάποιου ποσού στο λογαριασμό που δημιουργήθηκε 2
Source code public class Person { String id; String name; Permissions per; public Person(String id, String name, Permissions per) { this.id = id; this.name = name; this.per = per; public String getid(){ return id; public String getname(){ return name; public Permissions getpermissions(){ return per; public class Permissions { boolean candeposit, canwithdraw, canclose; public Permissions(boolean candeposit, boolean canwithdraw, boolean canclose) { this.candeposit = candeposit; this.canwithdraw = canwithdraw; this.canclose = canclose; public boolean candeposit(){ return candeposit; public boolean canwithdraw(){ return canwithdraw; public boolean canclose(){ return canclose; public void print(){ System.out.println("Can Deposit = "+candeposit+", Can Withdraw = "+canwithdraw+", Can Close = "+canclose); 3
public class BankAccount { long accountnumber; long balance; Person[] persons; final int MAX = 10; int currentemptypos = 0; String lastaction = ""; public BankAccount(long accountnumber, long initialamount) { this.accountnumber = accountnumber; this.balance = initialamount; persons = new Person[MAX]; public void addperson(string id, String name, Permissions per){ /* Να συμπληρωθεί το σώμα της μεθόδου */ public void deposit(string id, long amount){ if (p == null) have the permissions to deposit!"); if (p.getpermissions().candeposit){ balance = balance + amount; lastaction = "DEPOSIT"; else{ have the permissions to deposit!"); /* Να συμπληρωθούν τα ορίσματα και το σώμα της μεθόδου */ public void withdraw(){ public void close(string id){ if (p == null) have the permissions to close the account!"); if (p.getpermissions().canclose){ lastaction = "CLOSE"; balance = 0; else{ have the permissions to close the account!"); 4
public Permissions permissionsfor(string id){ if (p!= null) return p.per; System.out.println("No person with id: "+id+" exist!!"); return null; public Person findperson(string id){ for (int i=0; i < persons.length; i++) if (persons[i].getid().equals(id)) return persons[i]; return null; public void printstatus(){ System.out.println("Balance: "+balance); System.out.println("Last Action: "+lastaction); public void printpersons(){ System.out.println("Persons"); for (int i=0; i < persons.length; i++){ if (persons[i]!= null) System.out.println("ID: "+persons[i].id +", NAME: "+persons[i].name); public static void main(string[] args) { /* Να προσθέσετε μία εντολή που να δημιουργεί ένα λογαριασμό με έναν κωδικό και αρχικό ποσό της επιλογής σας*/ /* Να βάλετε εντολές που να προσθέτουν τρία άτομα στο λογαριασμό που δημιουργήθηκε */ // Print the permissions for these persons Permissions p = bankaccount.permissionsfor("p153251"); System.out.println("Permissions for person P153251"); p.print(); /* Να κάνετε εδώ μία πράξη κατάθεσης κάποιου ποσού στο λογαριασμό που δημιουργήθηκε */ // Print the status and persons. bankaccount.printstatus(); bankaccount.printpersons(); 5