ΟΣΣ Δεκεμβρίου 2004 Σχεδιασμός Λογισμικού Γλώσσες Προγραμματισμού ΙΙ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ
Υλικό Βιβλία Εισαγωγή στη 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): ειδική μέθοδος κάθε κλάσης που εκτελείται κάθε φορά που δημιουργείται ένα αντικείμενο της κλάσης
Εφαρμογή: Τραπεζικοί Λογαριασμοί Να δημιουργούνται πρόσωπα Να δημιουργούνται λογαριασμοί Να συνδέονται λογαριασμοί με πρόσωπα Να γίνονται αναλήψεις και καταθέσεις χρημάτων
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() }
public static void main(String[] args) { BankAccount bankAccount = new BankAccount( , 10000); bankAccount.addPerson("P455211", "Kameas Achilles", new Permissions(true, true, true)); bankAccount.addPerson("P153251", "Drossos Nicolas", new Permissions(true, false, false)); bankAccount.addPerson("Z113271", "Zaharakis John", new Permissions(false, true, false)); Permissions p = bankAccount.permissionsFor("P153251"); System.out.println("Permissions for person P153251"); p.print(); bankAccount.deposit("P153251", 2000); bankAccount.printStatus(); bankAccount.printPersons(); }
Καθορισμός τύπου μεταβλητής - Type Casting Γενικά μπορούμε να αναθέσουμε αριθμητικές τιμές ενός τύπου σε μεταβλητές ‘μεγαλύτερου’ τύπου, π.χ. μια τιμή int σε μεταβλητή long Για το αντίθετο χρησιμοποιείται type casting, π.χ. float kilograms; double estimate = 45; kilograms = (float) (estimate * 1.2);
Κλάση Math Περιέχεται στο πακέτο java.lang που αυτόματα εισάγεται (imported) σε κάθε πρόγραμμα Παρέχει αριθμητικές συναρτήσεις (μεθόδους)
Παραδείγματα μεθόδων της Math final double PI // η σταθερά π double sqrt(double) double random() long round(double) value max(value, value) –value μπορεί να είναι int, long, float, double
Παράδειγμα χρήσης της Math class RandomInvestigation { RandomInvestigation () { double random1, random2; random1 = Math.random(); random2 = Math.random(); System.out.println("The numbers are: " + random1 + " and " + random2); System.out.println("Max is " + Math.max (random1, random2)); } public static void main (String [] args) { new RandomInvestigation (); }