ΚΕΦΑΛΑΙΟ(6:(Γλώσσες(...

68
ΚΕΦΑΛΑΙΟ 6: Γλώσσες Προγραμματισμού 6.1 Ιστορική εξέλιξη 6.2 Παραδοσιακές έννοιες προγραμματισμού 6.3 Διαδικασιακές μονάδες 6.4 Υλοποίηση γλώσσας 6.5 Αντικειμενοστρεφήςπρογραμματισμός 6.6 Προγραμματισμός ταυτόχρονων δραστηριοτήτων 6.7 Δηλωτικός προγραμματισμός Οι διαφάνειες βασίζονται σε μεγάλο βαθμό σε αυτές που συνοδεύονταιμε το προτεινόμενο σύγγραμμα, καθώςκαι στις διαφάνειεςπροηγούμενων ετών του κ. Κουρκουμπέτη. 1

Transcript of ΚΕΦΑΛΑΙΟ(6:(Γλώσσες(...

Page 1: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

ΚΕΦΑΛΑΙΟ  6:  Γλώσσες  Προγραμματισμού

● 6.1  Ιστορική  εξέλιξη● 6.2  Παραδοσιακές  έννοιες  προγραμματισμού● 6.3  Διαδικασιακές  μονάδες● 6.4  Υλοποίηση  γλώσσας● 6.5  Αντικειμενοστρεφής  προγραμματισμός● 6.6  Προγραμματισμός  ταυτόχρονων  δραστηριοτήτων

● 6.7  Δηλωτικός  προγραμματισμόςΟι  διαφάνειες  βασίζονται  σε  μεγάλο  βαθμό  σε  αυτές  που  συνοδεύονται  με  το  προτεινόμενο  σύγγραμμα,καθώς  και  στις  διαφάνειες  προηγούμενων  ετών  του  κ.  Κουρκουμπέτη. 1

Page 2: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Γλώσσες  προγραμματισμούΓλώσσα  Προγραμματισμού:  Εργαλείο  για  αναπαράσταση  των  αλγορίθμων    • προσιτό  στους  ανθρώπους• εύκολα  μετατρέπεται  σε  γλώσσα  μηχανής  που  είναι  κατανοητή  από  τον  Η/Υ

2

Page 3: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Πρώτη  Γενιά:  Γλώσσα  Μηχανής• Γλώσσα  μηχανής:  οι  εντολές  αναπαριστώνται   με  δυαδικό  

σύστημα• Κάθε  εντολή  αναπαρίσταται  ως  μια  ακολουθία  από  δυαδικά  

ψηφία

• Το  πρόγραμμα  ήταν  μια  σειρά  από  τέτοιες  εντολές,  π.χ.

• Εξαιρετικά  δύσκολο  το  γράψιμο  και  η  κατανόηση  προγραμμάτων• Συχνά  σφάλματα• Δύσκολη  αποσφαλμάτωση   (debugging)

3

Page 4: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Δεύτερη  γενιά:  γλώσσα  assembly● Ένα  μνημονικό  σύστημα  για  την  αναπαράσταση  προγραμμάτων

– Χρήση  μνημονικών (mnemonic)  ονομάτων  για  την  αναπαράσταση  εντολών.

– Ονόματα  για  όλους  τους  καταχωρητές.– Τα  αναγνωριστικά  (identifiers) είναι  περιγραφικά  ονόματα  για  τις  θέσεις  

μνήμης,  τα  οποία  επιλέγονται  από  τον  προγραμματιστή.

● Υπάρχει  ακριβής  1-­‐1  αντιστοιχία   μεταξύ  των  εντολών  της  μηχανής  και  των  εντολών  assembly.

● Η  μετάφραση  από  γλώσσα  assembly  σε  γλώσσα  μηχανής  γίνεται  από  ένα  πρόγραμμα  που  ονομάζεται   “assembler”

4

Page 5: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Παράδειγμα  γλώσσας  assembly

Γλώσσα  μηχανής

156C166D505630CEC000

Γλώσσα  assembly

LD  R5,  PriceLD  R6,  ShippingChargeADDI  R0,  R5  R6ST  R0,  TotalCostHLT

5

Page 6: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Μειονεκτήματα  της  Assembly

• O  προγραμματιστής  πρέπει  να  σκέφτεται  πάλι  σε  γλώσσα  μηχανής  (απλά  αλλάζει  η  αναπαράσταση  και  η  σύνταξη  των  εντολών)

• Η  assembly  είναι  εγγενώς   εξαρτημένη  από  τη  μηχανή  (οι  εντολές  ενός  προγράμματος  σε  assembly  εκφράζονται  με  ιδιότητες  εγγενείς  στην  τεχνολογία  της  συγκεκριμένης   μηχανής)

• Δύσκολη  έως  αδύνατη  φορητότητα  (portability)  (μεταφορά  του  ίδιου  προγράμματος  ώστε  να  είναι  σωστό  σε  μια  άλλη  μηχανή)

• Τα  αρχέτυπα  (εντολές)  είναι  χαμηλού  επιπέδου  (πολύ  κοντά  στο  hardware)

• Δεν  διευκολύνει  στον  γενικό  σχεδιασμό  ενός  προγράμματος  (γιατί  αποτελείται  από  μικροεντολές  που  συνδέονται  με  πολύ  μικρές  λειτουργίες  του  Η/Υ)

6

Page 7: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Τρίτη  γενιά  γλωσσών● Βασίζεται  σε  (σχετικά  μικρό  αριθμό  από  αρχέτυπα  (primitives)

υψηλού  επιπέδου,  π.χ.

● Ανεξάρτητες  από  τη  μηχανή  (τις  περισσότερες  φορές)● Παραδείγματα:  FORTRAN,  COBOL● Κάθε  αρχέτυπο  ανταποκρίνεται  σε  μία  μικρή  ακολουθία  εντολών  

γλώσσας  μηχανής.● Μεταφράζεται  σε  γλώσσα  μηχανής  από  ένα  πρόγραμμα  που  

λέγεται  compiler   (μεταγλωττιστής)● Εναλλακτικά  αντί  για  compiler  υπάρχει  ο  ερμηνευτής

(interpreter)● Εκτελεί  τις  εντολές  καθώς  τις  μεταφράζει,  ενώ  ο  compiler  πρώτα  

μεταφράζει  όλες  τις  εντολές  του  προγράμματος  σε  γλώσσα  μηχανής  και  μετά  τις  εκτελεί

7

Page 8: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Η  εξέλιξη  των  προγραμματιστικών  μοντέλων

8

Page 9: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Προγραμματιστικά  μοντέλα• Διαφορετικές  φιλοσοφίες   στον  προγραμματισμό• Προστακτικό  (imperative)  ή  διαδικαστικό (procedural)  μοντέλο:  η  

διαδικασία  προγραμματισμού  είναι  μια  ακολουθία  από  εντολές  ,  που  όταν  εκτελεστούν,  επενεργούν  στα  δεδομένα  και  παράγουν  το  επιθυμητό  αποτέλεσμα– Υπονοεί  ότι  πρέπει  να  βρεθεί  ο  αλγόριθμος  για  την  επίλυση  του  

προβλήματος  και  έπειτα  ο  αλγόριθμος  να  αναπαρασταθεί  σαν  μια  ακολουθία  από  εντολές

– Το  πιο  παραδοσιακό  από  τα  μοντέλα– Παραδείγματα:  – FORTRAN  (για  αριθμητικούς  υπολογισμούς)– COBOL (για  επιχειρησιακές  εφαρμογές  ),  – BASIC,  C,  Pascal  (γενικής  χρήσης)– Ada (η  επίσημη  γλώσσα  ανάπτυξης  στρατιωτικών  εφαρμογών  από  το  Υπ.  

Άμυνας  των  ΗΠΑ,  επίσης  για  εναέριες  εφαρμογές)

9

Page 10: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Προγραμματιστικά  μοντέλα  (2)• Δηλωτικό  (declarative)  μοντέλο:  ο  προγραμματιστής  πρέπει  να  

περιγράψει  το  πρόβλημα  προς  επίλυση,  και  όχι  τον  αλγόριθμο  – Εφαρμόζει  ένα  γενικό  αλγόριθμο  επίλυσης  προβλημάτων– Ο  προγραμματιστής  πρέπει  να  περιγράψει  κατάλληλα  το  πρόβλημα– Χρήση  για  προσομοίωση  συστημάτων  (οικονομία,  πολιτική,  μετεωρολογία,  

περιβάλλον)  για  π.χ.  πρόγνωση– Ο  προγραμματιστής  περιγράφει  τι  θέλει  να  προσομοιωθεί,  ο  αλγόριθμος  

πρόγνωσης  υπάρχει  στην  γλώσσα  – Παραδείγματα:  Prolog:  τομέας  τεχνητής  νοημοσύνης– Ο  τομέας  μαθηματικών  της  Επίσημης  Λογικής  (Formal  Logic)  έδωσε  ώθηση  

σε  αυτές  τις  γλώσσες  

10

Page 11: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Προγραμματιστικά  μοντέλα  (3)• Συναρτησιακό   (functional)  μοντέλο:  Το  πρόγραμμα  είναι  μια  

οντότητα  που  δέχεται  εισόδους  και  βγάζει  εξόδους  (όπως  η  συνάρτηση)  – Πρόγραμμα  =  συνάρτηση  που  μετασχηματίζει  εισόδους  σε  εξόδους– Το  πρόγραμμα  κατασκευάζεται  συνδέοντας  μικρότερες  ενότητες  

(συναρτήσεις)  – Προγραμματισμός:  σύνθεση  αυτής  της  συνάρτησης  από  απλούστερες– Έξοδοι  από  μια  συνάρτηση  χρησιμοποιούνται  ως  είσοδοι  σε  άλλες  

συναρτήσεις– Ο  προγραμματισμός  έγκειται  στο  χτίσιμο  μεγάλων  συναρτήσεων  από  

μικρότερες– Παραδείγματα:  LISP– Συμβολισμός  για  την   συνάρτηση  f(x,y,z):  (f  x  y  z)  – Μεγάλο  πλεονέκτημα  σε  σχέση  με  τις  προστακτικές  γλώσσες  

προγραμματισμού:  δεν  χρειάζονται  πολλές  μεταβλητές  και  συνεπώς  καταναλώνεται  πολύ  λιγότερος  χώρος  στη  μνήμη  για  το  πρόγραμμα

11

Page 12: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Παράδειγμα  Συναρτησιακού  Μοντέλου  Γλώσσας  Προγραμματισμού

(Find_diff (Find_sum Old_balance Credits)   (Find_sum Debits))

Σε  μια  imperative  γλώσσα  προγραμματισμούθα  ήταν

12

Page 13: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Προγραμματιστικά  μοντέλα  (4)• Αντικειμενο-­‐στραφές   (object-­‐oriented)   μοντέλο /  Object-­‐oriented  

Programming– Κατά  βάση  προστακτικό  μοντέλο– Μονάδες  δεδομένων  =  ενεργά  αντικείμενα– Κάθε  αντικείμενο  μπορεί  να  επενεργεί  στον  εαυτό  του  ή  σε  άλλα  

αντικείμενα  – Παράδειγμα  1:  Graphical  User  Interface

• Κάθε  εικονίδιο  είναι  ένα  αντικείμενο• Κάθε  αντικείμενο  περιλαμβάνει  διαδικασίες  (μεθόδους,  methods)  που  ορίζουν  πως  αποκρίνεται  σε  διάφορα  γεγονότα

– Παράδειγμα  2:  λίστα  ονομάτων• Παραδοσιακός  προγραμματισμός:  λίστα  =  σύνολο  δεδομένων,  προγραμματιστής  υπεύθυνος  να  κατασκευάσει  αλγόριθμο  προσπέλασης

• OOP: λίστα  =  αντικείμενο  =  δεδομένα  +  διαδικασίες  χειρισμού  (εισαγωγή  ή  αφαίρεση  στοιχείου  στη  λίστα,  ταξινόμηση,  αναζήτηση)

13

Page 14: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Αντικειμενο-­‐στραφές  μοντέλο• Κλάση  (class)  αντικειμένων:  το  σύνολο  ιδιοτήτων  που  

χαρακτηρίζουν   ίδια  αντικείμενα  (που  ανήκουν  στην   ίδια  κλάση)• Ορίζεται  μια  κλάση  αντικειμένων  π.χ.  Εικονίδιο,  δορυφόρος,  

σταθμός  βάσης– Έπειτα  ορίζονται  αντικείμενα  π.χ.  icon1,  icon2  σαν  εκδοχές  (instances)   της  

κλάσης

• Το  μοντέλο  OOP  είναι  μοντέλο  δομημένου  προγραμματισμού  όπου  ο  προγραμματισμός  γίνεται  χτίζοντας  το  πρόγραμμα  με  μπλοκ

• Παραδείγματα:  C++,  Visual  Basic,  Java,  C#

14

Page 15: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Σεναριακές  Γλώσσες  προγραμματισμού• Σεναριακές  Γλώσσες  προγραμματισμού  (scripting  languages):  χρησιμοποιούνται  για  να  κάνουν  μικρές  διαχειριστικές  εργασίες  στον  υπολογιστή

• Σενάριο  (script):  κομμάτι  κώδικα  που  υλοποιεί  την  συγκεκριμένη  εργασία– Π.χ.  Ο  διαχειριστής  ενός  συστήματος  γράφει  ένα  πρόγραμμα  για  να  καταγράψει  τις  εργασίες  που  χρειάζεται  να  γίνουν  για  αρχειοποίηση

– Ή  ένα  script  για  ανάγνωση   και  δεικτειοδότηση   (indexing)  εικόνων  από  μια  φωτογραφική  μηχανή

• Γλώσσες:  Perl,  PHP

15

Page 16: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Η  σύνθεση  ενός  τυπικού  προστακτικού  προγράμματος  

(Declarative  statements)

(imperative  statements)

Υπάρχουν  και  σχόλια  (comments)  που  βελτιώνουν  την  αναγνωσιμότητα 16

Page 17: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Τύποι  και  Δηλώσεις  μεταβλητών  σε  C,  C++,  C#  και  Java

• Μεταβλητή  (variable):  όνομα  που  υποδηλώνει  μια  θέση  μνήμης– Αν  αλλάξει  η  τιμή  που  είναι  αποθηκευμένη  σε  αυτή  τη  θέση  μνήμης,  αλλάζει  

και  η  τιμή  που  σχετίζεται  με  την  μεταβλητή• Τύποι  (types) Δεδομένων

– Ακέραιος (integer):  Ακέραιος  αριθμός– Πραγματικός (real):  Αριθμοί  με  δεκαδικά  ψηφία– Χαρακτήρες (character):  Σύμβολα– Boolean:  Αληθές/ψευδές

• Δηλώσεις  Μεταβλητών

• float Length, Width;

• int Price, Tax, Total;

• char Symbol

17

Page 18: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Δομές  δεδομένων  (Data  structures)• Δομές  δεδομένων:  Νοητικά  σχήματα  για  τη  διάταξη  δεδομένων  

• Οι  αλγόριθμοι  προτιμούν  τα  δεδομένα  να  είναι  δομημένα  (για  μεγαλύτερη  αποδοτικότητα)– Πίνακες  (arrays)– Λίστες (lists)– Δένδρα (trees)

• Πως  τα  υλοποιούμε  στη  μνήμη;

18

Page 19: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Πίνακες

Δομή  δεδομένων:   α11 α12 α13

α21 α22 α23

γραμμή  1

γραμμή  2

γραμμή  3

γραμμή  1 γραμμή  2 γραμμή  3

αρχή  του  πίνακαΜνήμη:

... ...

19

Page 20: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Παράδειγμα:  Ένας  2-­‐διάστατος  πίνακας  2  γραμμών  και  9  στηλών

int Scores[2][9]  στην  CINTEGER  Scores(2,9)  στην  Fortran

Πάνω  αριστερά  στοιχείο  του  πίνακα:  Scores[0][0]  στην  C,  Scores(1,1)  στην  FORTRAN

20

Page 21: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Λίστες

Λίστα:        10,  12,  6,  7

... ...

πρόσθεση  μέλους:  10,  12,  2,  6,  7  

10 12

27 30

30

34

6 7

36

nil34 36

27

pointer  (δείκτης)

...

10 12

27 30

30

34

6 7

36

nil40 36 2

40

34

Λίστα:  ακολουθία  από  records  (int ή  πιο  σύνθετα  records,  βλ.  Παρακάτω)

21

Page 22: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Δένδρα

Α

ΒC

D E nil nilnil nil

nil nil

TA

B C

ED

Δομή  δεδομένων:

Υλοποίηση  στη  μνήμη:

22

Page 23: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Ετερογενής  πίνακας  (structure)

Employee.NameEmployee.AgeEmployee.SkillRating

Eτερογενής  πίνακαςή  Δομή  (structure)ή  record.

Μπλοκ  δεδομένων  με  στοιχεία  (πεδία)  Ενδεχομένως  διαφορετικούτύπου

23

Page 24: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Παράδειγμα  Ετερογενούς  πίνακα  δεδομένων

24

Page 25: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Σταθερές  (constants) και  δηλώσεις  ανάθεσης• Καλύτερα  να  δηλώνονται  στην  αρχή  του  προγράμματος•

– Αν  χρειαστεί  να  αλλαχθούν,  θα  αλλαχθούν  μόνο  εκεί• Δηλώσεις  ανάθεσης   (assignment  statements)

– Μπορεί  να  διαφέρουν  σε  διαφορετικές  γλώσσες,  π.χ.

• Αριθμητικές  πράξεις  – Τηρείται  η  προτεραιότητα  τελεστών  (operator  precedence)– 2*4  +  6  /  2  =  11  – Ο  ίδιος  τελεστής  μπορεί  να  έχει  διαφορετικές  λειτουργίες  π.χ.– “+”  κάνει  πρόσθεση  (αν  έχει  ως  τελεστέους  αριθμούς)  ή  συνένωση  

(concatenation)  από  strings  (αν  έχει  ως  τελεστέους  strings)– Αυτή  η  «διπλή»  λιτουργία λέγεται  υπερφόρτωση  τελεστή  (operator  

overloading)25

Page 26: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Δομές  ελέγχου  και  οι  αναπαραστάσεις  τους  στις  γλώσσες  C,  C++,  

C#, και  Java

Page 27: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Η  δομή  βρόχου  for  και  η  αναπαράσταση  της  στις  γλώσσες  C++,  C#  και  Java

27

Page 28: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Διαδικασίες  (procedures)Διαδικασία  (procedure):  μια  σειρά  από  εντολές  που  υλοποιούν  μια  εργασίαΜπορεί  να  χρησιμοποιηθεί  ως  αυτούσια  προγραμματιστική  μονάδα  

28

Page 29: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Διαδικασίες  (2)• Έχουν  τη  δομή  ενός  συνήθους  προγράμματος  (κεφαλίδα,  

δήλωση  μεταβλήτών,  σειρά  εντολών)• Μεταβλητές:  

– Τοπικές  (local),  χρησιμοποιούνται  και  αλλάζουν  μόνο  εντός  της  διαδικασίας

– Ολικές  (global),  χρησιμοποιούνται  και  αλλάζουν  μέσα  σε  όλο  το  πρόγραμμα  

• Εύρος  ή  εμβέλεια  (scope)  μιας  μεταβλητής:  το  μέρος  του  προγράμματος  που  μπορεί  μια  μεταβλητή  να  χρησιμοποιηθεί

• Κλήση:  απλά  με  το  όνομα

29

Page 30: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Παράδειγμα  Διαδικασίας

Παράμετροι  (parameters):  ορίσματαΤυπικές  (formal)  παράμετροι:  οι  παράμετροι  που  χρησιμοποιούνται  εντός  της  διαδικασίαςΠραγματικές  (actual)  παράμετροι:  οι  τιμές  που  ανατίθενται  στις  τυπικές  παραμέτρους  όταν  καλείται  η  διαδικασία  από  το  κυρίως  πρόγραμμα       30

Page 31: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Πέρασμα  παραμέτρων  • Περιγραφή  διαδικασίας:• Κλήση  διαδικασίας   με  κατάλληλες  παραμέτρους:

• Πέρασμα  παραμέτρων  κατά  τιμή  ή  αξία  (Passed  by  value)– Ένα  αντίγραφο  των  δεδομένων  που  παριστάνεται  με  τις  πραγματικές  

παραμέτρους  δίνεται  στην  διαδικασία– Αλλαγή  των  δεδομένων  από  την  διαδικασία:   αλλάζει  μόνο  τα  δεδομένα  στο  

αντίγραφο,  και  όχι  αυτά  στο  κυρίως  (καλόν)  πρόγραμμα• Πέρασμα  παραμέτρων  κατ’  αναφορά  (passed  by  reference)

– Δίνεται  στην  διαδικασία   απευθείας  πρόσβαση  στις  τιμές  των  πραγματικών  παραμέτρων,  δηλ.  δίνονται  στην  διαδικασία   οι  διευθύνσεις  των  πραγματικών  παραμέτρων

– Αλλαγή  των  δεδομένων  από  την  διαδίκασία   αλλάζει  τα  δεδομένα  στο  κυρίως  πρόγραμμα

– Η  μέθοδος  χρησιμοποιείται  αν  ο  σκοπός  της  διαδικασίας   είναι  η  αλλαγή  των  δεδομένων  (π.χ.  ταξινόμηση  μιας  λίστας)  

31

Page 32: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Παράδειγμα:  Πέρασμα  παραμέτρων  κατά αξία

Actual  =  5

Κλήση  διαδικασίας:

32

Page 33: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Παράδειγμα:  Πέρασμα  παραμέτρων  κατ’αναφορά

Actual  =  5

Κλήση  διαδικασίας:

33

Page 34: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Παράδειγμα  Συνάρτησης

Διαφορά  από  την  Διαδικασία:  Η  συνάρτηση (function)  πάντα  επιστρέφει  μια  τιμή

34

Page 35: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Υλοποίηση  γλώσσας:  Μετάφραση• Πρόγραμμα-­‐πηγή  (source  program):  το  πρόγραμμα  στην  αρχική  

του  μορφή• Μετάφραση: μετατροπή  προγράμματος  από  τη  μια  γλώσσα  

στην  άλλη• Πρόγραμμα-­‐αντικείμενο  (object-­‐program):  το  αποτέλεσμα  της  

μετάφρασης• Χρειαζόμαστε  μετάφραση  για:

– εντολές  σε  γλώσσα  υψηλού  επιπέδου– δομές  δεδομένων  (υψηλού  επιπέδου)

– δύο  στρατηγικές:  • διερμηνεία  (interpretation)• μεταγλωττισμός  (compilation)

i:=0; while i<N do

{A[i]:=B[i]; i:=i+1}

35

Page 36: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Διερμηνεία• Διερμηνευτής  (interpreter):  Μεταφράζει  και  εκτελεί  το  πρόγραμμα  υψηλού  επιπέδου  εντολή  προς  εντολήξεκίνα από την αρχή του προγράμματος υψηλού επιπέδου

Repeat

μετάφρασε την επόμενη εντολή υψηλού επιπέδου

εκτέλεσε την μετάφραση της εντολής με τα αντίστοιχα δεδομένα

until τέλος προγράμματος

36

Page 37: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Μεταγλωττισμός• Μεταγλωττιστής  (Compiler): μεταφράζει  μία  φορά  το  πρόγραμμα  υψηλού  επιπέδου  (sourceprogram)  σε  πρόγραμμα  γλώσσας  μηχανής /  πρόγραμμα-­‐αντικείμενο(object program)ξεκίνα από την αρχή του προγράμματος υψηλού επιπέδου

Repeat

μετάφρασε την επόμενη εντολή υψηλού επιπέδου

until τέλος προγράμματος

κάνε τις τελικές αλλαγές στον μεταφρασμένο κώδικα ώστε να είναι έτοιμος για εκτέλεση

37

Page 38: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Μεταγλωττισμός vs. Διερμηνεία

• Interpreters– ταχύτητα  όχι  σημαντική– λίγη  μνήμη– ανακάλυψη  λαθών  (debugging)

• Compilers– ταχύτητα  σημαντική

38

Page 39: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Η  διαδικασία  της  μεταγλώττισης  

Πηγαίο

Πρόγραμμα

ΛεκτικόςΑναλυτής

ΣυντακτικόςΑναλυτής

Γεννήτριακώδικα

Πρόγραμμα

αντικείμενο

39

Page 40: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Μεταγλώττιση• Λεκτικός  αναλυτής  (lexical  analyzer):  διαβάζει  το  πρόγραμμα  

χαρακτήρα  προς  χαρακτήρα,  αναγνωρίζει  συμβολικές  οντότητες  – Συμβολική  οντότητα  (token)– Ταξινόμηση  tokens  σε  κατηγορίες  (τελεστές,  σύμβολα,  αριθμητικές  τιμές,  

κλπ)• Συντακτικός  αναλυτής  (parser):  συντάσσει  τα  tokens  σε  

προτάσεις  και  statements– Αναγνώριση  της  γραμματικής  δομής  του  προγράμματος– Αναγνώριση  του  ρόλου  κάθε  token– Παράδειγμα  σύνταξης  στα  αγγλικά:  

• Δεσμευμένες  λέξεις  (reserved  words)• Ο  parser  χρησιμοποιεί  την  Γραμματική  (grammar)  της  γλώσσας

– Γραμματική:  σύνολο  από  συντακτικούς  κανόνες  

40

Page 41: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Περιγραφή  σύνταξης

if then elseΛογική

Παράσταση Εντολή Εντολή

Α.  Διαγράμματα  σύνταξης

Β.Κανόνες  BNF  

ifstmt -­‐>  if log_exp then  stmt  |    if  log_exp then  stmt  else  stmt    

If  x<1  then  y=2  else  z=1

41

Page 42: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Παράδειγμα  γραμματικής

Ο  Γιάννης   είναι  καλός  μαθητής  και  έχει  κακό  χαρακτήρα

Γραμματική  (σύνταξη):προτ  -­‐>  απλή_προτ  |  σύνθ_προταπλή_προτ  -­‐>  υποκ  ρήμα  επίθ  αντικ  |  υποκ  ρήμα  αντικσύνθ_προτ  -­‐>  απλή_προτ  και απλή_προτ          

|  απλή_προτ  και σύνθ_προτ

Βασικοί  τύποι  λέξεων  (τερματικά  σύμβολα):{υποκ,  ρήμα,  επίθ,  αντικ,  και}

Λεξικογραφική   περιγραφή:  υποκ  -­‐>  Γιάννης,   Κώστας,  άνδραςρήμα  -­‐>  έχει,  κάνει,...  

42

Page 43: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Ορισμός  σύνταξης BNF

• Γραμματικές:  BNF  σύνταξη  (Backus-­‐Naur  Form)– κανόνες   παραγωγής,  τερματικά,  μη-­‐τερματικά  σύμβολα– τερματικά σύμβολα  (terminals,  tokens):  στοιχειώδη  σύμβολα,  δεν  αναλύονται  περισσότερο  (“τύποι” λέξεων...)

– μη-­‐τερματικά σύμβολα (non-­‐terminals):  συντακτικές  κατηγορίες   (προτάσεις,  υπο-­‐προτάσεις,...),   δηλ.  αυτά  που  μπορούν  να  αναλυθούν  περαιτέρω  με  άλλα  διαγράμματα

– δυνατότητα  αναδρομικών   ορισμών– Γλώσσα: σύνολο  σωστών  ακολουθιών  τερματικών  συμβόλων

43

Page 44: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Διαγράμματα  σύνταξης  για  τη  δομή  μίας  απλής  αλγεβρικής  παράστασηςx+y*z

E  -­>  T+E  |  T-­E  |  TT  -­>  F*T  |  F/T  |  FF  -­>    x  |  y  |  z

44

Page 45: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Το  δέντρο  συντακτικής  ανάλυσης  για  τη  συμβολοσειρά  x+y*z

E  -­‐>  T+E  |  T-­‐E  |  TT  -­‐>  F*T  |  F/T  |  FF  -­‐>   x  |  y  |  z

45

Page 46: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Παράδειγμα  γλώσσας

E  -­‐>  E  + E  | E  – E  | E  * E  | E  / E  | -­‐E  E  -­‐>    0|1|2|3|4|5|6|7|8|9

9-­‐2*5  είναι  σωστή  πρόταση;

E

E E

E E92 5

-­‐

*

6+*4  είναι  σωστή  πρόταση;

συντακτικό  δέντρο

Σημασία  πρότασης;

Γλώσσα  =  απλές  αριθμητικές  εκφράσεις   με  0,...,9  και  +,-­‐,*,/

Σωστή  πρόταση:  υπάρχει  προτασιακό  δέντρο  που  να  την  δικαιολογεί

46

Page 47: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Ασάφεια  στην  Γραμματική  

E  -­‐>  E  +  E  | E  – E  | E  *  E  | E  /  E  | -­‐E  E  -­‐>    0|1|2|3|4|5|6|7|8|9

τι  σημαίνει    9-­‐2*5  ;

2  συντακτικά  δέντρα!ποιο  από  τα  δύο  εννοούμε;

E

E E

E E92 5

-­‐

*

E

EE

E E

29

*

-­‐5

47

Page 48: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Συντακτικός  αναλυτής• Ο  συντακτικός   αναλυτής  κατασκευάζει   ένα  συντακτικό   δέντρο  

(parse  tree)  για  το  πηγαίο  πρόγραμμα– Το  δέντρο  παριστάνει   την  ερμηνεία  του  αναλυτή  για  την  γραμματική  

σύνθεση   του  προγράμματος– Γι’αυτό  πρέπει  οι  συντακτικοί   κανόνες  μιας  γλώσσας  να  είναι  

μονοσήμαντοι,  δηλ.  μια  σειρά  από  εντολές  να  μην  οδηγεί  σε  2  ή  περισσότερα  δυνατά  συντακτικά   δέντρα

• Ο  συντακτικός   αναλυτής  διαχωρίζει   τις  δηλωτικές  από  τις  προστακτικές   εντολές– Κατασκευάζει   τον  πίνακα  συμβόλων  (symbol  table)  με  μεταβλητές,  

σταθερές,   τύπους  δεδομένων– Χρησιμοποιεί   τους  τύπους  δεδομένων  για  να  ερμηνεύσει   μια  εντολή  

π.χ.  z  ß x  +  y,  δηλ.  τι  τύπος  είναι  το  x  και  το  y  (int,  float,  char)– Ακολούθως,  δίνει  ανάλογο  σήμα  στην  γεννήτρια  κώδικα  για  να  

κατασκευάσει   την  κατάλληλη  εντολή  (ή  ακολουθία  εντολών)  σε  γλώσσα  μηχανής

48

Page 49: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Παράδειγμα  ασαφούς  γραμματικής

• Θεωρείστε  την  εντολή:

• Μπορεί  να  ερμηνευτεί  και  με  τα  δυο  δέντρα– Ασάφεια  (ambiguity)– Σε  ποιο  if  αναφέρεται  το  else;  – Στον  ψευδοκώδικα  

αποφεύγουμε  το  μπέρδεμα  ως  εξής:  

49

Page 50: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Παράδειγμα

statement

conditionalstatement

assignmentexpressionoperator

condition

relation

if id neq num then set idtoid + id

if x ! = 1 then set xtoy + yΛεκτική  ανάλυση

Συντακτική  ανάλυση

συντακτικόδένδρο

b bb bb b bb b

50

Page 51: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Οι  φάσεις  της  μεταγλώττισης

Λεκτικήανάλυση

Συντακτικήανάλυση

Γεννήτριακώδικα

αφαιρεί  άχρηστη  πληροφορίαπηγαίο  πρόγραμμα

σε  γλώσσα  υψηλούεπιπέδου

αντικείμενο  πρόγραμμασε  γλώσσα  μηχανής

... bif bx17=bmaxb-3 ...if

id

id

eq

41

12

312

x17 integer 1445

max integer 1447

όνομα τύπος θέση στη μνήμηblank space πίνακας  συμβόλων

nil

nil

-19

num13nil

y integer 1446

συντακτικό δένδρο

L G

1003θέσητιμή

πίνακας  αριθμ.  σταθερών

1014001

51

Page 52: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Συντακτική  ανάλυση

Λεκτικήανάλυση

Συντακτικήανάλυση Γεννήτρια

κώδικα

Κατασκευή συντακτικού δένδρου (parse tree)• bottom – up

• top - down

αρχικό σύμβολο

τερματικά(tokens)

abcdbwbwbw

Γραμματική G

tokens

κανόνας τηςγραμματικής

Πίνακας  συμβόλων

52

Page 53: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Γεννήτρια  κώδικα  • Κατασκευάζει  τις  εντολές  σε  γλώσσα  μηχανής  που  υλοποιούν  

τις  εντολές  που  αναγνωρίζονται  από  τον  συντακτικό  αναλυτή• Βελτιστοποίηση  κώδικα   (code  optimization)

– Π.χ.  Ελαχιστοποίηση  του  αριθμού  των  εντολών  σε  γλώσσα  μηχανής  που  υλοποιούν  μια  σειρά  εντολών

– Στο  παραπάνω,  μετά  την  1η εντολή  και  πριν  την  2η,  αναγνωρίζει  η  γεννήτρια  κώδικα  ότι  οι  x,  z  υπάρχουν  ήδη  σε  καταχωρητές

53

Page 54: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Γεννήτρια  κώδικα (2)statement

conditionalstatement

assignmentexpressionoperator

condition

relation

if id neq num then set idtoid + id

x integer 1456

1001

y integer 1457

1000 load R0 14561001 load R1 1001002 subtract R0 R0 R11002 jumpzero 10071003 load R1 14561004 load R2 14571005 add R1 R1 R21006 store R1 14571007 ......

module generate-expression(T)A1:= & of left childgenerate “load R1 A1”A2:= & of right childgenerate “load R2 A2”if op = + then generate “add R1 R1 R2”else generate “subtract R1 R1 R2”

54

Page 55: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Διαδικασία  Μετάφρασης

Διαρκής  αλληλεπίδραση  και  ανταλλαγή  μηνυμάτων  μεταξύ  των  διαφόρων  σταδίων

55

Page 56: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Ολόκληρη  η  διαδικασία  προετοιμασίας  ενός  προγράμματος  για  εκτέλεση

Πηγαίο

Πρόγραμμα

Μετάφραση Σύνδεση ΦόρτωσηΠρόγραμμα

αντικείμενοΥπομονάδα

φόρτωσης

Εκτελέσιμο    

Πρόγραμμα

56

Page 57: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Αντικειμενοστραφής  προγραμματισμός● Αντικείμενο (object): μία  αυτόνομη  προγραμματιστική  μονάδα  που  

περιέχει  τόσο  δεδομένα  όσο  και  διαδικασίες● Στις  γλώσσες  αντικειμενοστραφούς  προγραμματισμού (C++,  Java)  το  σημαντικό  

είναι  η  σωστή  περιγραφή  των  αντικειμένων● Κλάση (class):  ένα  πρότυπο  για  όλα  τα  αντικείμενα   του  ίδιου  τύπου● Ένα  αντικείμενο   ονομάζεται  στιγμιότυπο (instance) της  κλάσης.  

● Ορισμός  αντικειμένων  στην  C++:Java:   57

Page 58: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Στοιχεία  ενός  αντικειμένου● Μεταβλητή  στιγμιότυπου (instance  variable)  είναι  μία  μεταβλητή  που  

βρίσκεται  στο  εσωτερικό  ενός  αντικειμένου.● Π.χ.  RemainingPower

● Μέθοδος (method)  είναι  μία  διαδικασία  στο  εσωτερικό  ενός  αντικειμένου.– Μπορεί  να  χειριστεί  τις  μεταβλητές  στιγμιότυπου  ενός  αντικειμένου.– Π.χ.  turnRight(),   turnLeft(),   fire()

58

Page 59: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Μέθοδος  Κατασκευής• Μέθοδος  κατασκευής (constructor):  μία  ειδική  μέθοδος  που  

εκτελείται  αυτόματα  κατά  τη  δημιουργία  ενός  αντικειμένου  από  την  κλάση.– Ίδιο  όνομα  με  το  αντικείμενο– Βοηθά  στην  διαφορετική  αρχικοποίηση  ή  ανάθεση  διαφορετικών  

παραμέτρων  σε  αντικείμενα  της  ίδιας  κλάσης

59

Page 60: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Πρόσθετες  ιδέες● Η  κληρονομικότητα (inheritance)  επιτρέπει  σε  μία  κλάση  να  

περιλαμβάνει   ιδιότητες  κάποιας  προηγούμενης   κλάσης

● Ο  πολυμορφισμός (polymorphism)   επιτρέπει  σε  μία  μέθοδο  που  κάνει  κλήση  να  ερμηνευτεί  κατά  περίπτωση  από  το  αντικείμενο  που  λαμβάνει  την  κλήση.● Π.χ.  Η  μέθοδος  σχεδιασμού  ενός  σχήματος  ερμηνεύεται  ανάλογα  με  το  

σχήμα● Αντίστοιχο  σαν  ιδέα  με  την  υπερφόρτωση  τελεστών

60

Page 61: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Ενθυλάκωση● Ενθυλάκωση (encapsulation)  είναι  ένας  τρόπος  περιορισμού  της  πρόσβασης  

στις  εσωτερικές  ιδιότητες  ενός  αντικειμένου.  ● Μόνο  το  ίδιο  το  αντικείμενο  μπορεί  να  έχει  πρόσβαση  και  να  αλλάξει  τις  

ιδιότητες.● Μπορεί  να  είναι:

● Ιδιωτική  ● Δημόσια.

61

Page 62: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Προγραμματισμός  Ταυτόχρονων  Δραστηριοτήτων

• Παράλληλη (ή ταυτόχρονη) επεξεργασία  (concurrent  processing) ταυτόχρονη  εκτέλεση  πολλών  διεργασιών– Η  πραγματική  ταυτόχρονη  επεξεργασία  απαιτεί  την  ύπαρξη  πολλών  CPU– Μπορεί  να  προσομοιωθεί  μέσω  χρονομερισμού  (time-­‐sharing)  στην  

περίπτωση  μίας  μόνο  CPU

• Java:  πολλαπλά  νήματα  (threads)• Ζητήματα:

– Δημιουργία  threads– Σταμάτημα  και  επανεκκίνηση  threads– Επικοινωνία  μεταξύ  2  ή  περισσότερων  threads  (π.χ.  Ένα  thread  χρειάζεται  

να  ξεκινήσει  όταν  ένα  άλλο  thread  έχει  φτάσει  σε  ένα  συγκεκριμένο  σημείο)  

62

Page 63: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Παραγωγή  νημάτων

63

Page 64: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Διάδραση  μεταξύ  διεργασιών● Αμοιβαίος  αποκλεισμός (mutual  exclusion)  είναι  μία  μέθοδος  

που  εξασφαλίζει  ότι  τα  δεδομένα  μπορούν  να  προσπελαστούν  από  μία  μόνο  διεργασία  τη  φορά.● Aναγνώριση  κρίσιμων  περιοχών  (critical  regions):  περιοχές  του  

προγράμματος  που  δεν  μπορούν  να  χρησιμοποιούνται  από  2  ή  περισσότερα  threads  ταυτόχρονα

● Αυτοελεγχόμενο (monitoring)  λέγεται  ένα  στοιχείο  δεδομένων  με  τη  δυνατότητα  να  ελέγχει  την  πρόσβαση  στον  εαυτό  του● Ο  έλεγχος  υπάρχει  μόνο  σε  ένα  σημείο  του  προγράμματος● Αντί  τα  νήματα  να  προσέχουν  να  μην  παίρνουν  πρόσβαση  σε  ένα  στοιχείo

δεδομένων  (ο  έλεγχος  είναι  μοιρασμένος  σε  διαφορετικά  σημεία  του  προγράμματος)

64

Page 65: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Δηλωτικός  προγραμματισμός  (Declarative  Programming)

● Επίλυση (resolution): ο  συνδυασμός  δύο  ή  περισσοτέρων  προτάσεων  για  την  παραγωγή  μίας  νέας  πρότασης  (που  είναι  αληθής  αν  οι  αρχικές  προτάσεις  είναι  αληθείς)– Παράδειγμα:  (P  OR Q)  AND (R  OR¬Q)  δίνει  ως  αποτέλεσμα  (-­‐>)   την (P  OR R)– Σημαίνει  ότι  αν  η  αρχική  πρόταση  είναι  αληθής,  τότε  και  το  αποτέλεσμα (η  

2η πρόταση)  είναι  αληθής– Αν  Q  αληθής,  τότε  R  πρέπει  να  είναι  αληθής.  Αν  Q  ψευδής,  τότε  η  P  πρέπει  

να  είναι  αληθής.  Άρα  P  OR R  είναι  αληθής,  ανεξάρτητα  του  τι  είναι  το  Q– Επιλυθέν (resolvent)  ονομάζεται  η  νέα  πρόταση  που  σχηματίζεται  από  την  

επίλυση.– Μορφή  όρων (clause  form)  έχουμε  σε  μία  πρόταση  των  οποίων  τα  

θεμελιώδη  στοιχεία  συνδέονται  με  τη  λογική  πράξη  ΟR.

● Ενοποίηση (unification)  είναι  η  διαδικασία  ανάθεσης   τιμών  σε  μεταβλητές  μέσα  σε  μία  πρόταση.

65

Page 66: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Παράδειγμα:  Επίλυση  των  προτάσεων  (P OR  Q)  και  (ROR  ¬Q)  ώστε  να  παραχθεί  η (P OR  R)

66

Αν  Συνθήκη  Α  αληθής  Και  συνθήκη  Β  αληθήςΤότε  και  Συνθήκη  Γ  αληθής

Α Β

Γ

Page 67: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Παράδειγμα  2:  Επίλυση  των  προτάσεων  (P OR  Q),  (R OR  ¬Q),  ¬R,  και ¬P

Ένα  σύνολο  από  προτάσεις  λέγεταιασυνεπές  (inconsistent) αν  είναι  αδύνατοόλες  να  είναι  αληθείς  την  ίδια  στιγμή

Επαναληπτική  επίλυση  για  να  βρεθεί  αντο  σύνολο  προτάσεων  είναι  ασυνεπές  ή  όχι

67

Page 68: ΚΕΦΑΛΑΙΟ(6:(Γλώσσες( Προγραμματισμούpages.cs.aueb.gr/courses/epl131/files/Κ6-Γλώσσες Προγραμματισμού... · Γλώσσες(προγραμματισμού

Prolog● Κατηγόρημα  (predicate):  βασικό  δομικό  συστατικό   της  γλώσσας● Όλες  οι  προτάσεις  είναι  είτε  γεγονότα  είτε  κανόνες.● Γεγονός  (Fact):  όνομα Κατηγορήματος(ορίσματα)

– Παράδειγμα:  parent(  bill,  mary)– faster(rabbit,  turtle)  (μια  συγκεκριμένη  εκδοχή)

● Κανόνας  (Rule):  συμπέρασμα :-­‐ πρόταση– :-­‐ σημαίνει  αν– Παράδειγμα:  wise(X)  :-­‐ old(X).– Παράδειγμα:   (μια  γενική  ιδιότητα)

faster(X,  Z)  :-­‐ faster(X,  Y),  faster(Y,  Z)  σημαίνει

• Ο  προγραμματιστής  καθορίζει   τα  γεγονότα  και  τους  κανόνες• Το  πρόγραμμα  επιβεβαίωνει   ή  π.χ.  λύνει  το  faster  (W,  snail) ή    

καταγράφει  όλες  τις  συγκρίσεις   faster  (X,Y)

68