Professional Documents
Culture Documents
Κ6-Γλώσσες Προγραμματισμού-2017
Κ6-Γλώσσες Προγραμματισμού-2017
Κ6-Γλώσσες Προγραμματισμού-2017
2
Πρώτη
Γενιά:
Γλώσσα
Μηχανής
• Γλώσσα
μηχανής:
οι
εντολές
αναπαριστώνται σε
δυαδικό
σύστημα
• Κάθε
εντολή
αναπαρίσταται
ως
μια
ακολουθία
από
δυαδικά
ψηφία
• Το
πρόγραμμα
ήταν
μια
σειρά
από
τέτοιες
εντολές,
π.χ.
3
Δεύτερη
γενιά:
γλώσσα
Αssembly
● Ένα
μνημονικό
σύστημα
για
την
αναπαράσταση
προγραμμάτων
Χρήση
μνημονικών (mnemonic)
ονομάτων
για
αναπαράσταση
εντολών
● Υπάρχει
ακριβής
1-‐1
αντιστοιχία
μεταξύ
των
εντολών
της
μηχανής
και
των
εντολών
Αssembly.
● Η
μετάφραση
από
γλώσσα
Αssembly σε
γλώσσα
μηχανής
γίνεται
από
ένα
πρόγραμμα
που
ονομάζεται
“assembler”
(Declarative statements)
(imperative statements)
10
Προγραμματιστικά
μοντέλα
(3):
Συναρτησιακό
μοντέλο
• Συναρτησιακό
(functional)
μοντέλο:
Το
πρόγραμμα
είναι
μια
οντότητα
που
δέχεται
εισόδους
και
βγάζει
εξόδους
(όπως
η
συνάρτηση)
– Πρόγραμμα: συνάρτηση
που
μετασχηματίζει
εισόδους
σε
εξόδους
– Το
πρόγραμμα
κατασκευάζεται
συνδέοντας
μικρότερες
ενότητες
(συναρτήσεις)
– Προγραμματισμός:
σύνθεση
αυτής
της
συνάρτησης
από
απλούστερες
– Έξοδοι
από
μια
συνάρτηση
χρησιμοποιούνται
ως
είσοδοι
σε
άλλες
συναρτήσεις
– Ο
προγραμματισμός
έγκειται
στο
χτίσιμο
μεγάλων
συναρτήσεων
από
μικρότερες
– Παραδείγματα:
LISP
– Συμβολισμός
για
την
συνάρτηση
f(x,y,z):
(f
x
y
z)
– Μεγάλο
πλεονέκτημα
σε
σχέση
με
τις
προστακτικές
γλώσσες
προγραμματισμού:
δεν
χρειάζονται
πολλές
μεταβλητές
και
συνεπώς
καταναλώνεται
πολύ
λιγότερος
χώρος
στη
μνήμη
για
το
πρόγραμμα
11
Παράδειγμα
Συναρτησιακού
Μοντέλου
Γλώσσας
Προγραμματισμού
Σε
μια
imperative
γλώσσα
προγραμματισμού
θα
ήταν
• Δηλώσεις Μεταβλητών
16
Πίνακες
Δομή
δεδομένων:
α11 α12 α13 γραμμή 1
γραμμή 3
Μνήμη:
αρχή
του
πίνακα
17
Παράδειγμα:
Δι-‐διάστατος πίνακας
2
γραμμών
και
9
στηλών
int Scores[2][9]
στην
C
INTEGER
Scores(2,9)
στην
Fortran
Πάνω αριστερά στοιχείο του πίνακα: Scores[0][0] στην C, Scores(1,1) στην FORTRAN
18
Λίστες
και
προσθήκη
μέλους
σε
αυτές
Λίστα:
ακολουθία
από
records
(int ή
πιο
σύνθετα
records,
βλ.
Παρακάτω)
Λίστα:
10,
12,
6,
7 Βασική
λειτουργία:
Προσθήκη
μέλους:
10,
12,
2,
6,
7
pointer (δείκτης)
... 27 30 34 36
27 30 34 36 40
27
10 30 12 40 6 36 7 nil 2 34
19
Δένδρα
T Δομή δεδομένων:
A
Α
B C
D E
Β nil nil
C
D nil nil
E nil nil
20
Ετερογενής
πίνακας
(structure)
Eτερογενής
πίνακας
Ή
δομή
(structure)
ή
record
Μπλοκ
δεδομένων
με
στοιχεία
(πεδία)
ενδεχομένως
διαφορετικού
τύπου
Employee.Name
Employee.Age
Employee.SkillRating
21
Σταθερές
(constants) και
δηλώσεις
ανάθεσης
• Καλύτερα
να
δηλώνονται
στην
αρχή
του
προγράμματος
•
• Αριθμητικές
πράξεις
– Τηρείται
η
προτεραιότητα
τελεστών
(operator
precedence)
• 2*4
+
6
/
2
=
11
– Ο
ίδιος
τελεστής
μπορεί
να
έχει
διαφορετικές
λειτουργίες
π.χ.
– “+”
κάνει
πρόσθεση
(αν
έχει
ως
τελεστέους
αριθμούς)
ή
συνένωση
(concatenation)
από
strings
(αν
έχει
ως
τελεστέους
strings)
– Αυτή
η
«διπλή»
λειτουργία
λέγεται
υπερφόρτωση
τελεστή
(operator
overloading)
22
Δομές
ελέγχου
και
οι
αναπαραστάσεις
τους
σe C,
C++,
C#, και
Java
Βρόχος
for
και
η
αναπαράστασή
του
σε
C,
C++,
C#
και
Java
24
Διαδικασία
(procedure)
Διαδικασία
(procedure):
μια
σειρά
από
εντολές
που
υλοποιούν
μια
εργασία
Μπορεί
να
χρησιμοποιηθεί
ως
αυτούσια
προγραμματιστική
μονάδα
25
Διαδικασίες
(2)
• Έχουν
τη
δομή
ενός
συνήθους
προγράμματος
(κεφαλίδα,
δήλωση
μεταβλήτών,
σειρά
εντολών)
• Μεταβλητές:
– Τοπικές
(local),
χρησιμοποιούνται
και
αλλάζουν
μόνο
εντός
της
διαδικασίας
– Ολικές
(global),
χρησιμοποιούνται
και
αλλάζουν
σε
όλο
το
πρόγραμμα
• Εύρος
ή
εμβέλεια
(scope)
μιας
μεταβλητής:
το
μέρος
του
προγράμματος
που
μπορεί
μια
μεταβλητή
να
χρησιμοποιηθεί
• Κλήση:
απλά
με
το
όνομα
26
Παράδειγμα
Διαδικασίας
Actual = 5
Κλήση διαδικασίας:
29
Παράδειγμα:
Πέρασμα
παραμέτρων
κατ’ αναφορά
Actual = 5
Κλήση διαδικασίας:
30
Παράδειγμα
Συνάρτησης
Διαφορά
από
την
Διαδικασία:
Η
συνάρτηση (function)
επιστρέφει
μια
τιμή
31
Μετάφραση
• Πρόγραμμα-‐πηγή
(source
program):
το
πρόγραμμα
γραμμένο
στην
αρχική
του
μορφή
• Πρόγραμμα-‐αντικείμενο
(object-‐program):
ενδιάμεσο
αποτέλεσμα
μετάφρασης
• Μετάφραση: μετατροπή
προγράμματος
από
μια
μορφή
σε
άλλη
• Διερμηνεία
(interpretation)
• Μεταγλώττιση
(compilation)
Δείτε:
https://www.programiz.com/article/difference-‐compiler-‐interpreter 32
Διερμηνεία
vs.
Μεταγλώττιση
• Διερμηνευτής
(interpreter):
• Μεταγλωττιστής
(Compiler):
Μεταφράζει
και
εκτελεί
το
μεταφράζει
μία
φορά
το
πρόγραμμα
υψηλού
επιπέδου
πρόγραμμα
υψηλού
επιπέδου
εντολή
προς
εντολή (source program)
σε
πρόγραμμα
– Ταχύτητα
όχι
σημαντική γλώσσας
μηχανής /
πρόγραμμα-‐
– λίγη
μνήμη αντικείμενο (object program)
– ανακάλυψη
λαθών
– Ταχύτητα
σημαντική
(debugging)
ξεκίνα από την αρχή του προγράμματος
ξεκίνα από την αρχή του
υψηλού επιπέδου
προγράμματος υψηλού επιπέδου
Repeat
Repeat
μετάφρασε την επόμενη εντολή υψηλού
μετάφρασε την επόμενη εντολή επιπέδου
υψηλού επιπέδου
until τέλος προγράμματος
εκτέλεσε την μετάφραση της
εντολής με τα αντίστοιχα κάνε τις τελικές αλλαγές στον
δεδομένα μεταφρασμένο κώδικα
ώστε να είναι έτοιμος για εκτέλεση33
until τέλος προγράμματος
Η
διαδικασία
της
Μεταγλώττισης
34
Μεταγλώττιση
• Λεκτικός
αναλυτής
(lexical
analyzer):
διαβάζει
το
πρόγραμμα
χαρακτήρα
προς
χαρακτήρα,
αναγνωρίζει
συμβολικές
οντότητες
(tokens)
– Ταξινόμηση
tokens
σε
κατηγορίες
(τελεστές,
σύμβολα,
αριθμητικές
τιμές,
κλπ)
• Συντακτικός
αναλυτής
(parser):
συντάσσει
τα
tokens
σε
προτάσεις
και
statements
– Αναγνώριση
γραμματικής
δομής
του
προγράμματος
– Αναγνώριση
του
ρόλου
κάθε
token
– Παράδειγμα
σύνταξης
στην
αγγλική:
35
Περιγραφή
Σύνταξης
Α.
Διαγράμματα
σύνταξης
Λογική
if then Εντολή else Εντολή
Παράσταση
Β.Κανόνες BNF
ifstmt -‐> if log_exp then stmt | if log_exp then stmt else stmt
36
Παράδειγμα
Γραμματικής
38
Διαγράμματα
σύνταξης
για
τη
δομή
της
αλγεβρικής
παράστασης x+y*z
39
Δέντρο
συντακτικής
ανάλυσης
για
την
παράσταση
x+y*z
E
-‐>
E
+ E
| E
– E
| E
* E
| E
/ E
| -‐E
E
-‐>
0|1|2|3|4|5|6|7|8|9 E
9-‐2*5
είναι
σωστή
πρόταση; E -‐ E
6+*4
είναι
σωστή
πρόταση; E E
9
Σημασία
πρότασης; 2 * 5
συντακτικό
δέντρο
Σωστή
πρόταση:
υπάρχει
προτασιακό
δέντρο
που
να
την
δικαιολογεί
41
Ασάφεια
στην
Γραμματική
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 E * E
9 E E E E 5
2 * 5 -‐
9 2
2
συντακτικά
δέντρα!
ποιο
από
τα
δύο
εννοούμε;
42
Παράδειγμα
ασαφούς
γραμματικής
43
Παράδειγμα
Λεκτικής
και
Συντακτικής
Ανάλυσης
statement
Συντακτική
ανάλυση
conditional
συντακτικό
δένδρο statement
assignment
condition
expression
relation
operator
if id neq num then set id to id + id
tokens
Γραμματική
G
Κατασκευή συντακτικού δένδρου (parse tree)
• bottom – up αρχικό σύμβολο
• top - down
κανόνας της
γραμματικής
Πίνακας
συμβόλων
τερματικά
(tokens)
47
Γεννήτρια
κώδικα
• Κατασκευάζει
τις
εντολές
σε
γλώσσα
μηχανής
που
υλοποιούν
τις
εντολές
που
αναγνωρίζονται
από
τον
συντακτικό
αναλυτή
• Βελτιστοποίηση
κώδικα
(code
optimization)
– Π.χ.
Ελαχιστοποίηση
του
αριθμού
των
εντολών
σε
γλώσσα
μηχανής
που
υλοποιούν
μια
σειρά
εντολών
– Στο
παραπάνω,
μετά
την
1η εντολή
και
πριν
την
2η,
αναγνωρίζει
η
γεννήτρια
κώδικα
ότι
οι
x,
z
υπάρχουν
ήδη
σε
καταχωρητές
48
Γεννήτρια
κώδικα (2)
statement 1000 load R0 1456
conditional 1001 load R1 100
statement
1002 subtract R0 R0 R1
1002 jumpzero 1007
condition assignment
1003 load R1 1456
expression
relation 1004 load R2 1457
operator 1005 add R1 R1 R2
if id neq num then set id to id + id 1006 store R1 1457
1007 ......
50
Αντικειμενοστρεφής προγραμματισμός
● Αντικείμενο (object): αυτόνομη
προγραμματιστική
μονάδα
που
περιέχει
δεδομένα
και
διαδικασίες
● Στις
γλώσσες
αντικειμενοστρεφούς προγραμματισμού (C++,
Java)
το
σημαντικό
είναι
η
σωστή
περιγραφή
των
αντικειμένων
● Κλάση (class):
ένα
πρότυπο
για
όλα
τα
αντικείμενα
του
ίδιου
τύπου
● Ένα
αντικείμενο
ονομάζεται
στιγμιότυπο (instance) της
κλάσης.
●Η
κληρονομικότητα (inheritance)
επιτρέπει
σε
μία
κλάση
να
περιλαμβάνει
ιδιότητες
κάποιας
προηγούμενα
ορισμένης
κλάσης
52
Μέθοδος
Κατασκευής
• Μέθοδος
κατασκευής (constructor):
ειδική
μέθοδος
που
εκτελείται
αυτόματα
κατά
τη
δημιουργία
ενός
αντικειμένου
από
την
κλάση.
– Ίδιο
όνομα
με
το
αντικείμενο
– Βοηθά
στην
διαφορετική
αρχικοποίηση
ή
ανάθεση
διαφορετικών
παραμέτρων
σε
αντικείμενα
της
ίδιας
κλάσης
53
Ενθυλάκωση
● Ενθυλάκωση (encapsulation):
ένας
τρόπος
περιορισμού
της
πρόσβασης
στις
εσωτερικές
ιδιότητες
ενός
αντικειμένου.
● Μόνο
το
ίδιο
το
αντικείμενο
μπορεί
να
έχει
πρόσβαση
και
να
αλλάξει
τις
ιδιότητες.
● Μπορεί
να
είναι:
● Ιδιωτική
● Δημόσια.
54
Δηλωτικός
προγραμματισμός
(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. 55
Παράδειγμα:
Επίλυση
των
προτάσεων
(P OR
Q)
και
(R
OR
¬Q)
ώστε
να
παραχθεί
η (P OR
R)
Α Β
Αν
Συνθήκη
Α
αληθής
ΚΑΙ συνθήκη
Β
αληθής
Τότε
και
Συνθήκη
Γ
αληθής
56
Παράδειγμα
2:
Επίλυση
των
προτάσεων
(P OR
Q),
(R OR
¬Q),
¬R,
και ¬P
57
(Πολύ
Σύντομη)
Εισαγωγή
στην
Prolog
● Κατηγόρημα
(predicate):
βασικό
δομικό
συστατικό
της
γλώσσας
● Όλες
οι
προτάσεις
είναι
είτε
γεγονότα
είτε
κανόνες.
● Γεγονός
(Fact):
όνομα Κατηγορήματος(όρισμα,
όρισμα,
..)
– Παράδειγμα:
parent(
bill,
mary)
– faster(rabbit,
turtle)
(μια
συγκεκριμένη
εκδοχή)
● Κανόνας
(Rule):
συμπέρασμα :-‐ πρόταση
– :-‐ σημαίνει
αν
– Παράδειγμα:
wise(X)
:-‐ old(X).
– Παράδειγμα:
(μια
γενική
ιδιότητα)
faster(X,
Z)
:-‐ faster(X,
Y),
faster(Y,
Z)
σημαίνει
59