ΟΣΣ2 - 4 Δεκεμβρίου 2005 Σχεδιασμός Λογισμικού Γλώσσες Προγραμματισμού ΙΙ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ
Υλικό Βιβλία Εισαγωγή στη Java (Λιακέας) Thinking Like a Computer Scientist Thinking in Java … Άλλο υλικό στο CD (WebCasts, κλπ) Web Site
Περιεχόμενα Γενικά περί Java Αντ/φής Πρ/σμός Δομή προγράμματος Java Δομή κλάσης, δημιουργός, μέθοδος, πεδία Αντικείμενα, δημιουργία αντικειμένων Παραδείγματα
Χαρακτηριστικά της Java Εκτελέσιμος κώδικας (bytecode) που εκτελείται από την ειδική ‘μηχανή’ JVM (Java Virtual Machine): –ανεξαρτησία από το λειτουργικό σύστημα –ανεξαρτησία από το υλικό (hardware) Αξιόπιστη και εύχρηστη Αντικειμενοστρεφής και δομημένη Μεγάλη ποικιλία από έτοιμες βιβλιοθήκες κώδικα …
Τύποι προγραμμάτων Java Εφαρμογές –Προγράμματα standalone –Απαιτείται μια JVM (JDK) Applets –Εκτελούνται από το Internet –Απαιτείται κάποιος Java enabled WWW browser (περιέχει μια JVM)
Αντικειμενοστρεφής Προγραμματισμός Ιδιαίτερα διαδεδομένος σήμερα Επαναχρησιμοποίηση κώδικα (Code Re-use) Τα αντικείμενα (Objects) είναι στιγμιότυπα κατηγοριών (classes) και απεικονίζουν τον πραγματικό κόσμο Βιβλιοθήκες κλάσεων κάνουν τον προγραμματισμό να μοιάζει με συναρμολόγηση κώδικα
Γιατί Αντ/φής Πρ/σμός? Αδόμητος προγραμματισμός Main Program Data
Γιατί Αντ/φής Πρ/σμός? Αδόμητος προγραμματισμός Διαδικασιακός προγραμματισμός Main Program Data Procedure 1 Procedure 3Procedure 2
Γιατί Αντ/φής Πρ/σμός? Αδόμητος προγραμματισμός Δομημένος προγραμματισμός Module 1 Main Program Data Procedure 1 Procedure 3 Procedure 2 Module 1
Γιατί Αντ/φής Πρ/σμός? Αδόμητος προγραμματισμός Διαδικασιακός προγραμματισμός Δομημένος προγραμματισμός Αντ/φής πρ/σμός Object Data Object Data Object Data Object Data
Δομή ενός προγράμματος Java Πρόγραμμα: μια ή περισσότερες κλάσεις Κλάση: γενική κατηγορία που περιγράφει χαρακτηριστικά και μεθόδους που αφορούν μια οντότητα (αντικείμενο) του πραγματικού κόσμου Αντικείμενο: ένα στιγμιότυπο μιας κλάσης
Απλό πρόγραμμα JAVA class Welcome { /* Welcome program by J M Bishop Dec 1996 * Java 2 April 2000 * Illustrates a simple program displaying a message. */ Welcome () { System.out.println("Welcome to Java Gently!"); } public static void main (String [ ] args) { new Welcome(); }
Δομή μιας κλάσης Μεταβλητή: περιέχει την τιμή ενός χαρακτηριστικού ενός αντικειμένου, επί της οποίας μπορεί να γίνει κάποιου είδους επεξεργασία από μια μέθοδο -Παράδειγμα μεταβλητής: price, mugs Μέθοδος: ομάδα εντολών που συνεργάζονται για να εκτελέσουν μια λειτουργία του αντικειμένου -Παράδειγμα μεθόδου: main, write, paint
Δημιουργός Δημιουργός (constructor): ειδική μέθοδος κάθε κλάσης που εκτελείται κάθε φορά που δημιουργείται ένα αντικείμενο της κλάσης
Εφαρμογή: Τραπεζικοί Λογαριασμοί Να δημιουργούνται πρόσωπα Να δημιουργούνται λογαριασμοί Να συνδέονται λογαριασμοί με πρόσωπα Να γίνονται αναλήψεις και καταθέσεις χρημάτων
Υλοποίηση Εφαρμογής Διαχείρισης Τραπεζικών Λογαριασμών (BankAccount) Η εφαρμογή δημιουργεί έναν τραπεζικό λογαριασμό (με έναν κωδικό και ένα αρχικό ποσό) στον οποίο προσθέτει τα πρόσωπα που θα έχουν πρόσβαση σε αυτόν και τις ενέργειες που θα μπορούν να κάνουν επ’αυτού (ανάληψη, κατάθεση, κλείσιμο) Ο κώδικας περιέχεται στο αρχείο BankAccount.doc (ιστοσελίδα)
Οι κλάσεις της εφαρμογής Person (μέθοδοι Person(), getID(), getName(), getPermissions()) Permissions (μέθοδοι Permissions(), canDeposit(), canWithdraw(), canClose(), print()) BankAccount, (μέθοδοι BankAccount(), addPerson(), deposit(), withdraw(), permissionsFor(), findPerson(), printStatus(), printPersons() Main()
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); }
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) public void withdraw(String id, long amount) public void close(String id) public Permissions permissionsFor(String id) public Person findPerson(String id) public void printStatus() public void printPersons() }
Έρωτήματα (1) 1.Να σχεδιάσετε ένα διάγραμμα κλάσεων για την εφαρμογή (κλάσεις, πεδία, μέθοδοι) 2.Αφού κατανοήσετε τον τρόπο λειτουργίας του κώδικα να υλοποιήσετε Τη μέθοδο BankAccount.addPerson(String id, String name, Permissions per) η οποία προσθέτει σε ένα λογαριασμό ένα πρόσωπο με τα στοιχεία id, name, per. Να προσθέσετε έναν έλεγχο για το μέγιστο επιτρεπόμενο αριθμό προσώπων πάντα στη μέθοδο BankAccount.addPerson() Τη μέθοδο BankAccount.withdraw() σύμφωνα με τη BankAccount.deposit()
Έρωτήματα (2) Στη κλάση main να προσθέσετε μία εντολή η οποία θα δημιουργεί ένα λογαριασμό Μετά τη δημιουργία του λογαριασμού να προσθέσετε εντολές που να προσθέτουν τρία πρόσωπα με δυνατότητα για διαφορετικές ενέργειες Να προσθέσετε μία πράξη κατάθεσης κάποιου ποσού στο λογαριασμό που δημιουργήθηκε
public static void main(String[] args) { System.out.println("Permissions for person P153251"); p.print(); bankAccount.deposit("P153251", 2000); bankAccount.printStatus(); bankAccount.printPersons(); }