1 / 58

ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

2η ΟΣΣ – Σύγχρονες μέθοδοι προγραμματισμού - Java. ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα. Σχολή Θετικών Επιστημών & Τεχνολογίας Ελληνικό Ανοικτό Πανεπιστήμιο 201 3 -201 4. Πλάνο Παρουσίασης. 1 ο Μέρος – Βασικές Έννοιες

joel-dawson
Télécharger la présentation

ΠΛΣ60 – Εξειδ. Τεχνολογίας Λογισμικού ΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 2η ΟΣΣ – Σύγχρονες μέθοδοι προγραμματισμού - Java ΠΛΣ60 – Εξειδ. Τεχνολογίας ΛογισμικούΠΣ Εξειδικεύσεις στα Πληροφοριακά Συστήματα Σχολή Θετικών Επιστημών & Τεχνολογίας Ελληνικό Ανοικτό Πανεπιστήμιο 2013-2014

  2. Πλάνο Παρουσίασης • 1ο Μέρος – Βασικές Έννοιες • 2ο Μέρος – Τελεστές & Πίνακες • 3ο Μέρος – Αντικειμενοστραφείς Έννοιες, Κλάσεις ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  3. Επισκόπηση 1ου μέρους • Εισαγωγή στις έννοιες της Java και του αντικειμένου • Τύποι Δεδομένων, Μεταβλητές, Τελεστές • Οι δομές for, while,if, switch • Πίνακες • Εισαγωγή στο IDE: BlueJ ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  4. Χρήσιμα Links • Περιβάλλον BlueJ:http://www.bluej.org/download/download.html • Java Standard Edition 7 Download: http://www.oracle.com/technetwork/java/javase/downloads/index.html • Java SE 7 API Specification: http://docs.oracle.com/javase/7/docs/api/ • Java Platform SE 7 Documentation: http://docs.oracle.com/javase/7/docs/ ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  5. Κεντρική Έννοια: Αντικείμενα • Ένα αντικείμενο είναι μια σύλληψη/έννοια, αφαίρεση ή απτή οντότητα με συγκεκριμένα όρια και έννοια για μια εφαρμογή. • Διαθέτει: • Κατάσταση – State • Συμπεριφορά – Behaviour • Ταυτότητα - Identity nameΑ. Καθηγητής personID Κ00108 dateHired 22/08/2013 department InfSystems Α. Καθηγητής Αναθέτουμε σε τμήμα InfSystems του κ. Α. Καθηγητή Returns: Aνάληψη θέσης-Έναρξη διδασκαλίας Α. Καθηγητής Γραφείο Εκπαίδευσης Είναι άλλο από Α. Καθηγητής Α. Καθηγητής ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  6. Πώς λειτουργεί η Java • Βήματα προγραμματισμού με Java Πηγαίος Κώδικας (εντολές Java, σε σύνταξη ΟΟP - Java !) person.java Java Compiler Έξοδος (κώδικας) (bytecode) person.class Με κειμενογράφο συντάσσουμε τον πηγαίο κώδικα σε Java 1 2 O compiler ελέγχει το πρόγραμμα και ενημερώνει για λάθη εφόσον δεν ικανοποιούνται οι απαιτήσεις της γλώσσα Smart TV 3 Smartphone Android 4 Ο compiler δημιουργεί νέο αρχείο κωδικοποιημένο σύμφωνα με τη Java ώστε να μπορεί να το μεταγλωττίσει και τελικά να το εκτελέσει. O bytecode είναι ανεξάρτητος πλατφόρμας Χωρίς να απαιτείται φυσική μηχανή java αλλά με ένα εικονικό περιβάλλον εκτέλεσης Java είναι δυνατό να γίνεται εκτέλεση σε πολύ διαφορετικά συστήματα. Διαβάζει και εκτελεί τον bytecode. Άλλες γλώσσες/περιβάλλοντα το υποστηρίζουν αυτό; Είναι σημαντικό και πόσο; ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  7. Πώς λειτουργούμε την Java Compiled from "hello.java" public class hello { public hello(); Code: 0: aload_0 1: invokespecial #8 4: return public static void main(java.lang.String[]); Code: 0: getstatic #16 3: ldc #22 5: invokevirtual #24 8: return } public class hello { public static void main(String[] args) { System.out.println("Hello World!");} } Με κειμενογράφο συντάσσουμε τον πηγαίο κώδικα σε Javaκαι τον αποθηκεύουμε π.χ.: hello.java 1 2 Κάνουμε compile το hello.java με τη χρήση του javac (java compiler) και εφόσον δεν υπάρχουν λάθη παράγεται το αρχείο hello.class 3 4 Έξοδος To bytecode hello.class Σημαντικό: Το παραπάνω είναι απλώς μια κειμενική εκδοχή του (ενώ το κανονικό αρχείο έχει bytecode και όχι text) Εκτέλεση του προγράμματος με εκκίνηση της Java Virtual Machine με το αρχείο hello.class. H JVM μετατρέπει τον bytecode σε κάτι που η πλατφόρμα μπορεί να εκτελέσει στη συνέχεια. Ίδιο όνομα με την κλάση ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  8. Πρώτο Πρόγραμμα σε java public class Hello// The Hello class { public static void main(String[] args) //The main method { System.out.println("Hello World!"); //Print "Hello World!" } } • main – κάθε εφαρμογή πρέπει να περιέχει μία μέθοδο main • Είναι η μέθοδος που θα εκτελεστεί κατά τον χρόνο εκτέλεσης και μπορεί να καλεί τυχόν άλλες μεθόδους • public – φανερώνει ότι η μέθοδος μπορεί να κληθεί από οποιοδήποτε αντικείμενο • static – δηλώνει ότι πρόκειται για μέθοδο κλάσης • void – η μέθοδος δεν επιστρέφει κάποια τιμή • args – είναι ένας πίνακας τύπου Stringο οποίος αποθηκεύει τα command line ορίσματα: • Πρέπει να δηλωθεί ακόμα και αν ο χρήστης δεν επιδιώκει να δώσει κάποια command line ορίσματα • Η ιδιότητα args.lengthαντιπροσωπεύει τον αριθμό των ορισμάτων που δόθηκαν ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  9. Δήλωση Κλάσεων και Αντικειμένων • Απλή δήλωση κλάσης: class Student{ //field, constructor, and method declarations } • Δήλωση υποκλάσης που επιπλέον υλοποιεί μία διεπαφή: public class Student extends Person Implements Activities{ //field, constructor, and method declarations } • Δήλωση αντικειμένων/στιγμιοτύπων μιας κλάσης: Πλήρης αρχικοποίηση: new class ObjectExample{ Student s1 = new Student(); // Object of type Student Person s2 = new Person(); // Object of type Person } ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  10. Δήλωση Κλάσης - Παράδειγμα public class Student { //Fields static int id = 1; String firstName; String lastName; String email; String address; boolean status; String[] courseList; //Constructor public Student(){ id++; // For each Student object increment id } // method declarations follows public static void main(String[] args) { System.out.println("Student's name: " + firstName + " " + lastName); } } Σχόλια Για πολλαπλές σειρές χρήση του /* .. */ Το τέλος μιας πρότασης (statement)δηλώνεται με το ελληνικό ερωτηματικό (“;”) Τα ονόματα στη java είναι case sensitive: main(), Main(), MAIN()  είναι διαφορετικές μεταξύ τους μέθοδοι! ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  11. Ερώτημα 1 • Έστω το παρακάτω πρόγραμμα. Ποια είναι η έξοδος που παράγεται; (τι εκτυπώνεται ;) ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  12. Ερώτημα 2 int number; number = (1/4) * 4; System.out.println("(1/4) * 4 gives us " +number); • Έστω το παρακάτω κομμάτι ενός προγράμματος. Ποια είναι η έξοδος που παράγεται; (τι εκτυπώνεται ;) Tip: Προσέξτε τα εισαγωγικά ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  13. Τύποι Δεδομένων • Πρωτογενούς τύπου (primitive data types) • Σε μια μεταβλητή πρωτογενούς τύπου εκχωρείται τιμή συμβατή με αυτό που αντιπροσωπεύει ο εν λόγω τύπος • π.χ. σε μια μεταβλητή τύπου intανατίθεται ακέραιος αριθμός • Τύπου αναφοράς/αντικειμένου (reference/object data types) • Σε μια μεταβλητή τύπου αναφοράς μπορεί να εκχωρηθεί: • Η αναφορά null • Αναφορά σε κάποιο αντικείμενο το οποίο ανήκει σε κλάση συμβατή με τον τύπο της μεταβλητής ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  14. Ερώτημα 3 doublef= 120; doublec; c = (5/9) * (f- 32.0); • Έστω το παρακάτω κομμάτι ενός προγράμματοςγια την μετατροπήθερμοκρασίας Fahreneitσε Celcius. Γιατί δεν λειτουργεί σωστά; doublef= 120; doublec; c = (5.0/9.0) * (f- 32.0); Aρχικά η ακέραια διαίρεση έδινε πηλίκο 0. Ζητώντας double διαίρεση λαμβάνουμε double αποτέλεσμα (χρήση 5.0) ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  15. Primitive Wrapper Classes Integer • Περικλείουν («wrap»)αντικείμενα τα οποία αντιμετωπίζονται ως πρωτογενείς τύποι δεδομένων int class Rectangle{ int length, breadth; void show(int x, int y){ length = x; breadth = y; } int calculate(){ return(length * breadth); } } public class EnterValuesFromKeyboard{ public static void main(String[] args) { Rectangle rectangle = new Rectangle(); int a = Integer.parseInt(args[0]); // args[0] is converted to int int b = Integer.parseInt(args[1]); // args[1] is converted to int rectangle.show(a, b); System.out.println(" you have entered these values : " + a + " and " + b); int area = rectangle.calculate(); System.out.println(" area of a rectangle is : " + area); } } Double double ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  16. Κατηγορίες Μεταβλητών • Μεταβλητές μέλους (membervariables)ή πεδία (fields) • Μεταβλητέςστιγμιοτύπου (instance variables) • Μοναδική τιμή για καθένα στιγμιότυπο της κλάσης • Μεταβλητές κλάσης (class/static variables) • Μία τιμή για όλα τα στιγμιότυπα της κλάσης • Τοπικές μεταβλητές (local variables) • Δηλώνονται μέσα στο σώμα μιας μεθόδου • Είναι ορατές μόνο εντός της μεθόδου • Παράμετροι (parameters) • Είναι ορίσματα σε μεθόδους ΤΙP: Πρέπει να δηλωθούν προτού χρησιμοποιηθούν για πρώτη φορά Τα ονόματα είναι case sensitive Ο πρώτος χαρακτήρας του ονόματος μπορεί να είναι : γράμμα(προτείνεται),ή τα σύμβολα “$”, “_” // “args” is a parameterof the main method public static void main(String[] args) ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  17. Τύποι Μεταβλητών - Παράδειγμα public class Student{ public String name; // Instance variable public staticint id = 3333; // Class variable public static String status = "undergraduate"; // Class variable public void info(int age, intdurationOfStudies){ // Parameters intgraduationAge = age + durationOfStudies; // Local variable id = 1234; System.out.println("Age: " + age); System.out.println("Graduation age: " + graduationAge); System.out.println("ID number: " + id); } public static void main(String args[]){ Student maria = new Student(); maria.info(18,5); /* Age: 18 Graduation age: 23 ID number: 1234 */ System.out.println("Status: " + Student.status); // Status: undergraduate System.out.println("ID number: " + Student.id); // ID number: 1234 } } ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  18. Εισαγωγή στο BlueJ • To BlueJείναι ένα ακαδημαϊκό ολοκληρωμένο περιβάλλον ανάπτυξης λογισμικού. Ανήκει δηλαδή στην ευρύτερη κατηγορία των IDE (Integrated Development Environment) και περιλαμβάνει: • Kειμενογράφο (editor), για να γράφετε προγράμματα (σε Java) • Εκσφαλματωτή (debugger), για τον εντοπισμό λαθών • Χώρο προβολής (viewer), για να βλέπετε τα text αποτελέσματα των προγραμμάτων σας • Έναν εύκολο τρόπο για εκτέλεση προγραμμάτων Java • Έναν εύκολο τρόπο για να βλέπετε την τεκμηρίωση (documentation) ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  19. BlueJ: Νew Project ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  20. BlueJ: Create Class Το όνομα της κλάσης ξεκινά με κεφαλαία ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  21. BlueJ: Επεξεργασία με διπλό κλικ στην κλάση Οι γραμμές δείχνουν ότι η κλάση δεν έχει μεταφραστεί (compile) και άραδεν είναι εκτελέσιμη ακόμη ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  22. BlueJ: Εκτέλεση με διπλό κλικ στην κλάση Compile πριν την εκτέλεση Ανοίγει ο επεξεργαστής κειμένου με διπλό κλικ και μπορείτε να κάνετε τις μετατροπές που επιθυμείτε στο πρόγραμμά σας. ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  23. BlueJ: Δεξί κλικ στην κλάση για εκτέλεσηκαι ΟΚ Εδώ μπορείτε να δώσετε τιμή στο args[] ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  24. BlueJ: tips! • Όταν κάνετε compile το BlueJαποθηκεύει αυτόματα το πρόγραμμά σας! • Όταν κλείνετε το BlueJκαι το ανοίγετε ξανά μπορείτε να χρησιμοποιήσετε το Open Project για να συνεχίσετε το πρόγραμμά σας • Μπορείτε να βρείτε όλες τις λεπτομέρειες για το περιβάλλον BlueJστο: http://www.bluej.org/doc/documentation.html • Σε περίπτωση που έχετε ήδη το BlueJεγκατεστημένο παρακαλείστε να κάνετε αναβάθμιση στην πιο πρόσφατη έκδοση ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  25. Πλάνο Παρουσίασης • 1ο Μέρος – Βασικές Έννοιες • 2ο Μέρος – Τελεστές & Πίνακες • 3ο Μέρος – Αντικειμενοστραφείς Έννοιες, Κλάσεις ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  26. Επισκόπηση 2ου μέρους • Τελεστές, Αλφαριθμητικά • Δομές επανάληψης και ελέγχου • Πίνακες ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  27. Τελεστές ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  28. Αλφαριθμητικά • O τύπος του αλφαριθμητικού αναπαρίσταται με την κλάση String • Η λέξη κλειδί null • Ειδική τιμή που φανερώνει ότι η μεταβλητή δεν αναφέρεται σε κανένα αντικείμενο • Δεν μπορεί να θεωρηθεί 0 ούτε και να χρησιμοποιηθεί σε εκφράσεις με τους πρωτογενείς τύπους της java π.χ. • int i = null; // Μη αποδεκτή δήλωση • String s = null; // Αποδεκτή δήλωση ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  29. Ειδικοί Χαρακτήρες(Escape Sequences) ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  30. Ο Βρόχος “for” for (init-stmt; condition; next-stmt) { body } public class ForLoop{ public static void main(String[] args) { System.out.println("Let's count to 10:"); for (int i = 1; i <= 10; i++) { System.out.println(i); } } } • Ειδική μορφή του for (enhanced for): public class EnhancedForLoop { public static void main(String[] args) { int[] numbers = {1,2,3,4,5,6,7,8,9,10}; for (int counter : numbers) { System.out.println(counter); } } } ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  31. Ο Βρόχος “while” • Διαδικασία εκτέλεσης: • Εξετάζεται η συνθήκη στο “while” • Αν η συνθήκη είναι αληθής, εκτελείται το σώμα του βρόχου • Επιστροφή στο βήμα 1. init-stmt; while (condition) { body next-stmt; } public class WhileLoop{ public static void main(String[] args) { System.out.println("Let's count to 10 using while:"); int i = 1; while (i <= 10) { System.out.println(i); i++; } } } ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  32. Ερώτημα 4 int x = 1; while( x < 10 ) { System.out.println( x ); x += 2;// x = x + 2; } • Ποια είναι η έξοδος στο παρακάτω; ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  33. Ερώτημα 5 (1) int count = 0; while( count++ < 5 ) System.out.print( count + ", " ); (2) int count = 0; while ( ++count <5 ) System.out.print ( count + ", " ); • Ποια είναι η διαφορά στα παρακάτω προγράμματα; ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  34. Εμφωλευμένο“if” public class IfStatement { public static void main(String[] args){ String signColour = "blue"; if (signColour == "red") System.out.println("Program suitable only for adults"); else if (signColour == "purple") System.out.println("Program suitable for children above 15"); else { //nested "if-else" statement System.out.print("Program suitable for all:"); if (signColour == "green") System.out.println("No parental guidance is required"); else if (signColour == "blue") System.out.println("Parental guidance suggested"); else if (signColour =="orange") System.out.println("Parental guidance required"); else System.out.println("Without any special rating"); } } } ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  35. Ερώτημα 6 intMyMethod(int n) { if (n == 1) return 1; return n * MyMethod(n-1); } • Ποια είναι η λειτουργία στο παρακάτω πρόγραμμαγια n>0; Μια απλή αναδρομική μέθοδοςπου υπολογίζει το n παραγοντικό: n! = n × (n-1) × (n-2) × ... × 2 × 1 Tip: Δοκιμάστε το για το n=1 ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  36. Η Πρόταση“switch” – Παράδειγμα class SwitchStatement { public static void main(String[] args) { int month = 3; switch (month) { // Accepts byte, char, short, or int // It can also work with Strings (1.7), EnumTypes // and the wrapper classes Byte, Char, Short and Int case 1: System.out.println("January"); break; case 2: System.out.println("February"); break; case 3: System.out.println("March"); break; case 4: System.out.println("April"); break; case 5: System.out.println("May"); break; case 6: System.out.println("June"); break; case 7: System.out.println("July"); break; case 8: System.out.println("August"); break; case 9: System.out.println("September"); break; case 10: System.out.println("October"); break; case 11: System.out.println("November"); break; case 12: System.out.println("December"); break; default: System.out.println("Invalid month.");break; } } } Πώς θα ήταν η εναλλακτική υλοποίηση με nested if ; • Αποτέλεσμα εκτέλεσης : March ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  37. Εναλλακτική Υλοποίηση με “if” class SwitchStatement { public static void main(String[] args) { int month = 3; if(month == 1) System.out.println("January"); else if (month == 2) System.out.println("February"); else if (month == 3) System.out.println("March"); else if (month == 4) System.out.println("April"); else if (month == 5) System.out.println("May"); else if (month == 6) System.out.println("June"); else if (month == 7) System.out.println("July"); else if (month == 8) System.out.println("August"); else if (month == 9) System.out.println("September"); else if (month == 10) System.out.println("October"); else if (month == 11) System.out.println("November"); else if (month == 12) System.out.println("December"); else System.out.println("Invalid month!"); } } ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  38. Πίνακες (Arrays) • Δήλωση και αρχικοποίησηενός πίνακαακεραίων: • Άλλοι τύποι πινάκων: byte[] anArrayOfBytes; short[] anArrayOfShorts; long[] anArrayOfLongs; float[] anArrayOfFloats; double[] anArrayOfDoubles; boolean[] anArrayOfBooleans; char[] anArrayOfChars; String[] anArrayOfStrings; int[] anArray = new int[5]; anArray[0] = 10; anArray[1] = 20; anArray[2] = 30; anArray[3] = 40; anArray[4] = 50; • ή: int[] anArray = {10,20,30,40,50}; int[] anArray = new int[]{10,20,30,40,50}; ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  39. Πίνακες (Arrays) • Πίνακες αντικειμένων: Book[] arrayOfBooks = {new Book(5011,"Title1"), new Book(7490,"Title2") }; • Προσπέλαση στοιχείων πίνακα: int[] num = new int[3]; for (int i = 0; i < 3; i++) { System.out.println(num[i]); } … ή χρησιμοποιώντας την ιδιότητα length : int[] num = new int[3]; for (int i = 0; i < num.length; i++){ System.out.println(num[i]); } … ή χρησιμοποιώντας τη βελτιωμένη μορφή του for: int[] num = new int[3]; for (int elements: num) { System.out.println(elements);} ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  40. Πολυδιάστατοι Πίνακες • Δήλωση πολυδιάστατου πίνακα: dataype arrayName = new datatype[size1][size2] ... [sizeN]; π.χ: int[][] nums = new int[3][6]; nums • Είναι δυνατόν να αρχικοποιηθεί μόνο η μία διάσταση: 0 1 2 int[][] nums = new int[3][]; 0 1 2 3 4 5 nums 0 1 2 null null ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού null

  41. Πλάνο Παρουσίασης • 1ο Μέρος – Βασικές Έννοιες • 2ο Μέρος – Τελεστές & Πίνακες • 3ο Μέρος – Αντικειμενοστραφείς Έννοιες, Κλάσεις ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  42. Επισκόπηση • Βασικές έννοιες του αντικειμενοστραφούς προγραμματισμού • Κλάσεις, στιγμιότυπα, μέθοδοι • Δημιουργοί (constructors) ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  43. Βασικές Έννοιες Αντικειμενοστρέφειας • Κληρονομικότητα (Inheritance) • Η ιδιότητα μιας κλάσης (που καλείται υποκλάση) να μπορεί να χρησιμοποιεί τις ιδιότητες και τις μεθόδους μιας άλλης κλάσης (της υπερκλάσης) • Η υποκλάση μπορεί να υλοποιεί επιπλέον λειτουργικότητα • π.χ. Η κλάση Studentείναι υποκλάση της κλάσης Person • Αφαίρεση (Abstraction) • Η τεχνική να αναπαρίσταται η κοινή λειτουργικότητα μεταξύ ενός συνόλου κλάσεων • π.χ. Όλες οι υποκλάσεις της κλάσης Student (PostGraduateStudent και UnderGraduateStudent) έχουν την κοινή ιδιότητα ότι παρακολουθούν κάποιο πρόγραμμα σπουδών (attendCourse) χωρίς να είναι αναγκαίες οι λεπτομέρειες (θεωρούμε ότι η Studentδηλώνεται ως abstract) ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  44. Βασικές Έννοιες Αντικειμενοστρέφειας • Πολυμορφισμός (Polymorphism) • Κρύβουμε διαφορετικές υλοποιήσεις πίσω από την ίδια διεπαφή. Η ίδια μέθοδος προκαλεί την εκτέλεση διαφορετικού κώδικα ανάλογα με τον τύπο του αντικειμένου που την καλεί. • π.χ.η μέθοδος calculateArea(της υπερ-κλάσης Shape)υπολογίζει το εμβαδό με διαφορετικό τρόπο για ένα αντικείμενο Triangle και διαφορετικά για ένα αντικείμενο Rectangle (Triangle καιRectangle είναι υποκλάσεις της Shape) • Ενθυλάκωση(Encapsulation) • Η δυνατότητα να αποκρύπτονται δεδομένα (data hiding) της κλάσης (τα οποία δηλώνονται ως private) και να επιτρέπεται η προσπέλασή τους μέσω public μεθόδων (setters and getters) Τηλεόραση Α Τηλεόραση Β Τηλεόραση Γ Remote Control (ίδια διεπαφή – διαφορετικές υλοποιήσεις για κάθε τηλεόραση) ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  45. Κλάσεις • Οι κλάσεις είναι το πιο σημαντικό χαρακτηριστικό μιας γλώσσας που υποστηρίζει τον Αντικειμενοστραφή Προγραμματισμό • Ο προγραμματισμός στη Java συνίσταται στον ορισμό ενός αριθμού κλάσεων • Κάθε πρόγραμμα είναι μια κλάση • Όλο το βοηθητικό λογισμικό αποτελείται από κλάσεις • Όλοι οι τύποι που ορίζονται από τον προγραμματιστή είναι κλάσεις ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  46. Δήλωση Κλάσεων– Αντικειμένων class Student { //field, constructor, and method declarations } • Δήλωση στιγμιοτύπων μιας κλάσης: class ObjectExample{ Student maria = new Student(); // Object of type Student Person nikos = new Person(); // Object of type Person } ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  47. Μια κλάση είναι ένας τύπος … • Μια κλάση είναι ένας ειδικός τύπος δεδομένων ορισμένος από τον προγραμματιστή, και παρέχεται η δυνατότητα να ορίζουμε μεταβλητές αυτού του τύπου • Μια κλάση προσδιορίζει τους τύπους των δεδομένων που μπορεί να περιέχει ένα αντικείμενο, καθώς και τις ενέργειες που μπορεί να εκτελέσει ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  48. Δημιουργός (constructor) • Οι δημιουργοί (constructors) κατασκευάζουν στιγμιότυπα της κλάσης στην οποία ανήκουν • Μοιάζουν πολύ με μεθόδους, αλλά: • Δεν έχουν τύπο επιστροφής στον ορισμό τους (άρα δεν επιστρέφουν κάποια τιμή ή αναφορά)χωρίς void! • Το όνομά τους είναι ίδιο με το όνομα της κλάσης • Σε μια κλάση μπορεί να υπάρχουν περισσότεροι του ενός δημιουργοί – ο καθένας με διαφορετικό αριθμό ή/και τύπο ορισμάτων • O default constructor μπορεί να είναι implicit • Αν δεν υπάρχει κανένας, τότε εισάγει ο compiler public class Student{ String name; int age; // default constructor without arguments public Student() { } // constructor with two arguments public Student(String name, int age) { this.name = name; this.age = age; } } • Η λέξη-κλειδί this μπορεί να χρησιμοποιηθεί μέσα στους δημιουργούς και στις μεθόδους • Επιστρέφει την αναφορά στο τρέχον αντικείμενο • Μπορεί να χρησιμοποιηθεί από ένα δημιουργό προκειμένου να καλέσει έναν άλλο δημιουργό της ίδιας κλάσης Πρακτικά: Τρόπος να διαχωρίζουμε την τοπική μεταβλητή name & age από τις μεταβλητές μέλη ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  49. ΔημιουργοίΠαράδειγμα • Παράδειγμα Student.java (Student class) StudentExample.java (main class) ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

  50. Μέθοδοι (methods) • Οι ορισμοί των μεθόδων διαιρούνται σε δυο τμήματα: την επικεφαλίδα (heading) και το σώμα της μεθόδου (method body): • Οι μέθοδοι ενεργοποιούνται χρησιμοποιώντας το όνομα του καλούντος αντικειμένου και το όνομα της μεθόδου ως εξής: classVar.myMethod(); • Η ενεργοποίηση μιας μεθόδου είναι ισοδύναμη με την εκτέλεση του σώματος της μεθόδου Επιστρεφόμενος τύπος αντικειμένου ή void (καμία επιστροφή) // Instance Method public String getFullName() { String fullName = firstName + " " + lastName; // access instance variables return fullName; } ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού

More Related