Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

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

Παρόμοιες παρουσιάσεις


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

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

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

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

4 Χρήσιμα Links Περιβάλλον BlueJ: Java Standard Edition 7 Download: Java SE 7 API Specification: Java Platform SE 7 Documentation: ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού430/11/2013

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

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

7 Πώς λειτουργούμε την Java ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού730/11/2013 Με κειμενογράφο συντάσσουμε τον πηγαίο κώδικα σε Java και τον αποθηκεύουμε π.χ.: hello.java Κάνουμε compile το hello.java με τη χρήση του javac (java compiler) και εφόσον δεν υπάρχουν λάθη παράγεται το αρχείο hello.class Έξοδος To bytecode hello.class Σημαντικό: Το παραπάνω είναι απλώς μια κειμενική εκδοχή του (ενώ το κανονικό αρχείο έχει bytecode και όχι text) 1 Εκτέλεση του προγράμματος με εκκίνηση της Java Virtual Machine με το αρχείο hello.class. H JVM μετατρέπει τον bytecode σε κάτι που η πλατφόρμα μπορεί να εκτελέσει στη συνέχεια public class hello { public static void main(String[] args) { System.out.println("Hello World!");} } Ίδιο όνομα με την κλάση 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 }

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

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

10 public class Student { //Fields static int id = 1; String firstName; String lastName; String ; 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); } Δήλωση Κλάσης - Παράδειγμα ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού1030/11/2013 Σχόλια Για πολλαπλές σειρές χρήση του /*.. */ Το τέλος μιας πρότασης (statement) δηλώνεται με το ελληνικό ερωτηματικό (“;”) Τα ονόματα στη java είναι case sensitive: main(), Main(), MAIN()  είναι διαφορετικές μεταξύ τους μέθοδοι!

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

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

13 Τύποι Δεδομένων Πρωτογενούς τύπου (primitive data types) – Σε μια μεταβλητή πρωτογενούς τύπου εκχωρείται τιμή συμβατή με αυτό που αντιπροσωπεύει ο εν λόγω τύπος π.χ. σε μια μεταβλητή τύπου int ανατίθεται ακέραιος αριθμός Τύπου αναφοράς/αντικειμένου (reference/object data types) – Σε μια μεταβλητή τύπου αναφοράς μπορεί να εκχωρηθεί: Η αναφορά null Αναφορά σε κάποιο αντικείμενο το οποίο ανήκει σε κλάση συμβατή με τον τύπο της μεταβλητής ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού1330/11/2013 ΤύποςΜέγεθοςΕύρος byte 8-bit-128 … 127 short 16-bit …

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

15 Περικλείουν («wrap») αντικείμενα τα οποία αντιμετωπίζονται ως πρωτογενείς τύποι δεδομένων 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); } Primitive Wrapper Classes int Integer double Double ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού1530/11/2013

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

17 Τύποι Μεταβλητών - Παράδειγμα public class Student{ public String name; // Instance variable public static int id = 3333; // Class variable public static String status = "undergraduate"; // Class variable public void info(int age, int durationOfStudies){ // Parameters int graduationAge = 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: Εξειδ. Τεχνολογίας Λογισμικού1730/11/2013

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

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

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

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

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

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

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

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

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

27 ΤελεστέςΠαράδειγμα Τελεστής Ανάθεσης = Ανάθεση τιμής int x = 15, y=3, z=0; boolean bvar = true; Μοναδιαίοι Τελεστές ++ Αύξηση τιμής κατά 1 x++ ή ++x -- Μείωση τιμής κατά 1 x-- ή --x ! Αντιστροφή της τιμής ενός boolean !bvar Τελεστής Ελέγχου Τύπου instanceOf Έλεγχος του τύπου ενός αντικειμένου obj1 instanceOf Class (true or false) Τελεστές ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού2730/11/2013

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

29 ΣυμβολισμόςΧαρακτήρας που αναπαρίσταται \nNewline (0x0a) \rCarriage return (0x0d) \fFormfeed (0x0c) \bBackspace (0x08) \sSpace (0x20) \ttab \"Double quote \'Single quote \\backslash \dddOctal character (ddd) \uxxxxHexadecimal UNICODE character (xxxx) Ειδικοί Χαρακτήρες (Escape Sequences) ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού2930/11/2013

30 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” 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); } Ειδική μορφή του for (enhanced for): ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού3030/11/2013

31 Ο Βρόχος “while” 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++; } Διαδικασία εκτέλεσης: 1.Εξετάζεται η συνθήκη στο “while” 2.Αν η συνθήκη είναι αληθής, εκτελείται το σώμα του βρόχου 3.Επιστροφή στο βήμα 1. ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού3130/11/2013

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

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

34 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"); } Εμφωλευμένο“if” ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού3430/11/2013

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

36 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; } Η Πρόταση“switch” – Παράδειγμα Αποτέλεσμα εκτέλεσης : March ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού3630/11/2013 Πώς θα ήταν η εναλλακτική υλοποίηση με nested if ;

37 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!"); } } Εναλλακτική Υλοποίηση με “if” ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού3730/11/2013

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: Εξειδ. Τεχνολογίας Λογισμικού3830/11/2013

39 Πίνακες αντικειμένων: 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]); } int[] num = new int[3]; for (int i = 0; i < num.length; i++){ System.out.println(num[i]); } … ή χρησιμοποιώντας την ιδιότητα length : int[] num = new int[3]; for (int elements: num) { System.out.println(elements);} … ή χρησιμοποιώντας τη βελτιωμένη μορφή του for: Πίνακες (Arrays) ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού3930/11/2013

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

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

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

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

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

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

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: Εξειδ. Τεχνολογίας Λογισμικού4630/11/2013

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

48 Οι δημιουργοί (constructors) κατασκευάζουν στιγμιότυπα της κλάσης στην οποία ανήκουν Μοιάζουν πολύ με μεθόδους, αλλά: Δεν έχουν τύπο επιστροφής στον ορισμό τους (άρα δεν επιστρέφουν κάποια τιμή ή αναφορά) χωρίς void! Το όνομά τους είναι ίδιο με το όνομα της κλάσης Σε μια κλάση μπορεί να υπάρχουν περισσότεροι του ενός δημιουργοί – ο καθένας με διαφορετικό αριθμό ή/και τύπο ορισμάτων O default constructor μπορεί να είναι implicit Αν δεν υπάρχει κανένας, τότε εισάγει ο compiler Δημιουργός (constructor) 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; } ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού4830/11/2013 Η λέξη-κλειδί this μπορεί να χρησιμοποιηθεί μέσα στους δημιουργούς και στις μεθόδους – Επιστρέφει την αναφορά στο τρέχον αντικείμενο – Μπορεί να χρησιμοποιηθεί από ένα δημιουργό προκειμένου να καλέσει έναν άλλο δημιουργό της ίδιας κλάσης Πρακτικά: Τρόπος να διαχωρίζουμε την τοπική μεταβλητή name & age από τις μεταβλητές μέλη

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

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

51 Ερώτημα 8 Τι παρατηρείτε στο παρακάτω πρόγραμμα; Υπάρχει σφάλμα; ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού5130/11/2013 public Student(){ id++; } public class Student { static int id = 1; String firstName; String lastName; String ; String address; boolean status; String[] courseList; public void fullName() { System.out.println("name: " + firstName); } Δεν υπάρχουν μέθοδοι εκτός κλάσεων στη Java !

52 Κατηγορίες Μεθόδων Μέθοδοι κλάσης (Class methods) Δηλώνονται με τη λέξη-κλειδί static Μπορούν να κληθούν απευθείας με το όνομα της κλάσης, χωρίς να απαιτείται η δημιουργία στιγμιοτύπου: Συνήθως χρησιμοποιούνται για να προσπελαστούν οι μεταβλητές κλάσης (static) Student.staticMethodName(agrs) // encouraged maria.staticMethodName(args) // discouraged Μέθοδοι στιγμιοτύπου (Instance methods) Συσχετίζονται με ένα αντικείμενο και χρησιμοποιούν τις μεταβλητές στιγμιοτύπου ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού5230/11/2013

53 Κατηγορίες Μεθόδων - Ορατότητα Μέθοδοι Στιγμιοτύπου: – Μπορούν να προσπελάσουν απευθείας: Μεταβλητές στιγμιοτύπου και μεθόδους στιγμιοτύπου Μεταβλητές κλάσης και μεθόδους κλάσης Μέθοδοι Κλάσης: – Μπορούν να προσπελάσουν απευθείας μεταβλητές κλάσης και μεθόδους κλάσης – Δεν μπορούν να προσπελάσουν απευθείας μεταβλητές στιγμιοτύπου ή μεθόδους στιγμιοτύπου Πρέπει να χρησιμοποιηθεί αναφορά σε αντικείμενο – Δεν μπορούν να χρησιμοποιήσουν το this ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού5330/11/2013

54 Παράδειγμα Student.javaStudent.java(Student class) MethodVisibilityExample.javaMethodVisibilityExample.java (main class) Ορατότητα Μεθόδων Παράδειγμα ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού5430/11/2013

55 Όταν χρησιμοποιείται με μεταβλητές τύπου κλάσης, ο τελεστής ανάθεσης (=) παράγει δυο μεταβλητές που αναφέρονται (ονοματίζουν) το ίδιο αντικείμενο – Αυτή η συμπεριφορά είναι πολύ διαφορετική από τη συμπεριφορά που επιδεικνύει με μεταβλητές primitive τύπου – Επίσης, ο έλεγχος για ισότητα (==) συμπεριφέρεται διαφορετικά για μεταβλητές τύπου κλάσης – Ο τελεστής == ελέγχει μόνο ότι δυο μεταβλητές τύπου κλάσης έχουν την ίδια διεύθυνση μνήμης Διαφορετικά από τη μέθοδο equals, δεν ελέγχει ότι οι instance variables έχουν τις ίδιες τιμές Δυο αντικείμενα σε δυο διαφορετικές τοποθεσίες (μνήμης) των οποίων οι instance variables έχουν ακριβώς τις ίδιες τιμές, θα συγκρίνονταν ως "not equal" Χρήση του = και == με Μεταβλητές Τύπου Κλάσης ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού5530/11/2013

56 Με τις δηλώσεις import δηλώνουμε ότι θα χρησιμοποιήσουμε κάποια πακέτα - packages στη Java, όπως την κλάση π.χ. Scanner από το package java.util import java.util.Scanner; Είναι δυνατό να κάνουμε διαθέσιμες όλες τις κλάσεις που βρίσκονται σε ένα package, αντί για μία μόνο: import java.util.*; Σημειώστε ότι δεν υπάρχει επιπλέον επιβάρυνση για να κάνουμε import ολόκληρο το package Packages και Δηλώσεις Import ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού5630/11/2013

57 Ερώτημα 9 Τι παρατηρείτε στο παρακάτω πρόγραμμα; Υπάρχει σφάλμα; ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού5730/11/2013 public class Student { public String firstName; public String lastName; public String address; } public class StudentExample { public static void main(String[] args) { Student s1 = new Student(); Student s2; System.out.println("1st Student: " + s1.lastName); System.out.println("2nd Student: " + s2.lastName); } Δεν έχει αρχικοποιηθεί και δεν έχει γίνει δέσμευση μνήμης για το αντικείμενο s2

58 Ερώτημα 10 Τι παρατηρείτε στο παρακάτω πρόγραμμα; Υπάρχει σφάλμα; ΠΛΣ60: Εξειδ. Τεχνολογίας Λογισμικού5830/11/2013 public class Student { public int age; public static void main(String[] args) { System.out.println (" age : " + age); } Δε μπορεί να προσπελαστεί από static μέθοδο μία non static μεταβλητή (age)


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

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google