Εισαγωγή στους Τύπους

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Εισαγωγή στους Τύπους"

Transcript

1 Εισαγωγή στους Τύπους Piet Mondrian, Composition with Blue, Yellow, Black, and Red, 1922 Κωστής Σαγώνας Νίκος Παπασπύρου

2 Περιεχόμενα Τύποι στις γλώσσες προγραμματισμού Τι είναι οι τύποι; Κατηγορίες και αναπαραστάσεις των τύπων Χρήση και χρησιμότητα των τύπων Γλώσσες με στατικό και γλώσσες και δυναμικό σύστημα τύπων Έλεγχος τύπων κατά το χρόνο μετάφρασης (compile-time checking) κατά το χρόνο εκτέλεσης (run-time checking) Η έννοια της συντηρητικής ανάλυσης προγραμμάτων Ισοδυναμία τύπων Εισαγωγή στους Τύπους 2

3 Τι είναι οι τύποι; Ένας τύπος είναι ένα σύνολο από τιμές Όταν ορίζουμε ότι μια μεταβλητή έχει ένα συγκεκριμένο τύπο, δηλώνουμε ότι οι τιμές της μεταβλητής θα είναι πάντα στοιχεία του συγκεκριμένου συνόλου int n; Άρα ένας τύπος είναι ένα σύνολο από τιμές που έχουν μια συγκεκριμένη κοινή αναπαράσταση και μία συλλογή από λειτουργίες που μπορούν να εφαρμοστούν σε αυτές τις τιμές Το ποια σύνολα θεωρούνται ή δεν θεωρούνται τύποι εξαρτάται από τη γλώσσα Εισαγωγή στους Τύπους 3

4 Πρωτόγονοι και κατασκευαζόμενοι τύποι Κάθε τύπος που μπορεί να χρησιμοποιηθεί αλλά δε μπορεί να οριστεί από ένα πρόγραμμα μιας γλώσσας είναι ένας πρωτόγονος τύπος της γλώσσας Πρωτόγονοι τύποι της ML: int, real, char Ένα πρόγραμμα ML δε μπορεί να ορίσει έναν τύπο που να δουλεύει σαν τον προκαθορισμένο τύπο int Κάθε τύπος που μπορεί να οριστεί από ένα πρόγραμμα (με βάση πρωτόγονους ή ήδη ορισμένους τύπους) είναι ένας κατασκευαζόμενος τύπος Π.χ. κατασκευαζόμενος τύπος στην ML: int list Ορίζεται με χρήση του πρωτόγονου τύπου int και του κατασκευαστή τύπων list Εισαγωγή στους Τύπους 4

5 Πρωτόγονοι τύποι Ο ορισμός της κάθε γλώσσας είναι αυτός που καθορίζει ποιοι είναι πρωτόγονοι τύποι της γλώσσας Κάποιες γλώσσες ορίζουν τους πρωτόγονους τύπους πιο αυστηρά από κάποιες άλλες: Π.χ. η Java ορίζει τους πρωτόγονους τύπους επακριβώς Από την άλλη μεριά, π.χ. η C και η ML αφήνουν κάποια περιθώρια ελευθερίας στον ορισμό των πρωτόγονων τύπων μεταξύ διαφορετικών υλοποιήσεων της γλώσσας Εισαγωγή στους Τύπους 5

6 Παράδειγμα: πρωτόγονοι τύποι ακεραίων C: char unsigned char short int unsigned short int int unsigned int long int unsigned long int long long Δεν υπάρχει προκαθορισμένη υλοποίηση, αλλά οι μεγαλύτεροι τύποι πρέπει να έχουν τουλάχιστον το εύρος των μικρότερων τύπων Java: byte (1-byte signed) char (2-byte unsigned) short (2-byte signed) int (4-byte signed) long (8-byte signed) Scheme: integer Ακέραιοι απείρου εύρους Haskell: int (4-byte signed) Integer ( άπειρο εύρος) Εισαγωγή στους Τύπους 6

7 Θέματα σχεδιασμού Σε ποια σύνολα αντιστοιχούν οι πρωτόγονοι τύποι; Τι είναι μέρος του ορισμού της γλώσσας, τι επαφίεται στη διακριτική ευχέρεια της υλοποίησης της γλώσσας; Εάν χρειαστεί, πως μπορεί ένα πρόγραμμα να ανακαλύψει πληροφορίες σχετικές με τα μέλη του συνόλου; (INT_MAX στη C, Int.maxInt στην ML, ) Τι λειτουργίες υποστηρίζονται και πώς; Λεπτομερείς ορισμοί περί στρογγυλοποίησης, εξαιρέσεων, κ.λπ. Η επιλογή της αναπαράστασης είναι καθοριστική για κάποιες από τις αποφάσεις Εισαγωγή στους Τύπους 7

8 Κατασκευαζόμενοι τύποι Πρόσθετοι τύποι οι οποίοι ορίζονται με χρήση της γλώσσας Παραδείγματα: απαριθμήσεις, πλειάδες, πίνακες, συμβολοσειρές, λίστες, ενώσεις, υποτύποι, και τύποι συναρτήσεων Για κάθε έναν από αυτούς, υπάρχει στενή σχέση μεταξύ του πώς ορίζονται τα σύνολα στα μαθηματικά και του πώς ορίζονταιοιτύποι στις γλώσσες προγραμματισμού Εισαγωγή στους Τύπους 8

9 Απαριθμήσεις (enumerations) Στα μαθηματικά μπορούμε ορίσουμε ένα σύνολο απλώς με την απαρίθμηση των μελών του: S = { a, b, c } Πολλές γλώσσες υποστηρίζουν τύπους απαρίθμησης: C: enum coin {penny, nickel, dime, quarter}; Ada: type GENDER is (MALE, FEMALE); Pascal: type primarycolors = (red, green, blue); ML: datatype day = M Tu W Th F Sa Su; Ορίζουν ένα νέο τύπο (= σύνολο τιμών) Ορίζουν επίσης μια συλλογή από ονοματισμένες σταθερές αυτού του τύπου (= στοιχεία του συνόλου) Εισαγωγή στους Τύπους 9

10 Αναπαράσταση τιμών μιας απαρίθμησης Ένας συνήθης τρόπος αναπαράστασης απαριθμήσεων είναι η χρησιμοποίηση μικρών ακεραίων για τις τιμές Η αναπαράσταση μπορεί να είναι εμφανής στον προγραμματιστή, όπως π.χ. στη C: enum coin { penny = 1, nickel = 5, dime = 10, quarter = 25 }; enum escapes { BELL = '\a', BACKSPACE = '\b', TAB = '\t', NEWLINE = '\n', VTAB = '\v', RETURN = '\r' }; Εισαγωγή στους Τύπους 10

11 Λειτουργίες απαριθμήσεων Έλεγχος ισότητας, φυσικά: fun isweekend x = (x = Sa orelse x = Su); Εάν η ακέραια φύση της αναπαράστασης των απαριθμήσεων είναι εμφανής, η γλώσσα συνήθως επιτρέπει κάποιες από ή όλες τις λειτουργίες που επιτρέπονται σε ακεραίους: Pascal: C: for c := red to blue do p(c) int x = penny + nickel + dime; Εισαγωγή στους Τύπους 11

12 Πλειάδες (tuples) Το καρτεσιανό γινόμενο δύο ή περισσοτέρων συνόλων ορίζει σύνολα από πλειάδες: S = X Y = {( x, y ) x X y Y } Κάποιες γλώσσες υποστηρίζουν καθαρές πλειάδες: fun get1 (x : real * real) = #1 x; Πολλές άλλες υποστηρίζουν εγγραφές (records), που είναι πλειάδες τα πεδία των οποίων έχουν ονόματα: struct complex { double rp; double ip; }; type complex = { rp:real, ip:real }; fun getip (x : complex) = #ip x; C: :ML Εισαγωγή στους Τύπους 12

13 Αναπαράσταση των πλειάδων Η συνήθης αναπαράσταση των πλειάδων είναι τα πεδία τους να διατάσσονται το ένα μετά το άλλο στη μνήμη Αλλά υπάρχουν πολλές λεπτομέρειες: Με ποια σειρά; Επιτρέπονται τρύπες για ευθυγράμμιση (alignment) των πεδίων (π.χ. σε αρχές διαφορετικών λέξεων) στη μνήμη; Είναι κάτι από όλα αυτά ορατό στον προγραμματιστή; Εισαγωγή στους Τύπους 13

14 Παράδειγμα: ANSI C The members of a structure have addresses increasing in the order of their declarations. A non-field member of a structure is aligned at an addressing boundary depending on its type; therefore, there may be unnamed holes in a structure. If a pointer to a structure is cast to the type of a pointer to its first member, the result refers to the first member Adjacent field members of structures are packed into implementation-dependent storage units in an implementationdependent direction... The C Programming Language, 2nd ed. Brian W. Kernighan and Dennis M. Ritchie Εισαγωγή στους Τύπους 14

15 Λειτουργίες πλειάδων Επιλογή στοιχείων, φυσικά: C: x.ip ML: #ip x Άλλες λειτουργίες ανάλογα με το ποιο/πόσο μέρος της αναπαράστασης είναι εμφανές στον προγραμματιστή: C: double y = *((double *) &x); struct person { char *firstname; char *lastname; } p1 = {"dennis","ritchie"}; Εισαγωγή στους Τύπους 15

16 Ανύσματα (vectors) Ανύσματα γνωστού (σταθερού) μήκους: S Ανύσματα αγνώστου μήκους: Τύποι σχετικοί με τα ανύσματα: {( x,, x ) i x X } n = X =. 1 K S = X = U i Πίνακες, συμβολοσειρές και λίστες Είναι σαν τις πλειάδες αλλά συνήθως έχουν τον ίδιο τύπο στοιχείων και πολλές παραλλαγές από γλώσσα σε γλώσσα Ένα παράδειγμα διαφοροποίησης: δείκτες (indices) σε πίνακες Ποιες είναι οι τιμές των δεικτών; Καθορίζεται το μέγεθος των πινάκων στο χρόνο μεταγλώττισης ή στο χρόνο εκτέλεσης; n X i i Εισαγωγή στους Τύπους 16

17 Τιμές δεικτών Στη C, C++, Java και C#: Το πρώτο στοιχείο ενός πίνακα a είναι το a[0] Οι δείκτες είναι πάντα ακέραιοι που αρχίζουν από το 0 Η Pascal είναι πιο ευέλικτη: Μπορεί να χρησιμοποιηθούν διάφοροι τύποι δεικτών: ακέραιοι, χαρακτήρες, απαριθμήσεις, υποδιαστήματα (subranges) Ο αρχικός δείκτης καθορίζεται από τον προγραμματιστή Ο τελικός δείκτης καθορίζεται επίσης από τον προγραμματιστή: όμως το μέγεθος ενός πίνακα πρέπει να είναι γνωστό κατά το χρόνο μετάφρασης του προγράμματος Εισαγωγή στους Τύπους 17

18 Παράδειγμα πίνακα σε Pascal type LetterCount = array['a'..'z'] of Integer; var Counts: LetterCount; begin Counts['a'] = 1 Εισαγωγή στους Τύπους 18

19 Σχεδιαστικά θέματα σχετικά με τα ανύσματα Τι είδους δείκτες μπορούν να έχουν οι πίνακες; Πρέπει το μέγεθος των πινάκων να είναι καθορισμένο κατά το χρόνο μετάφρασης; Μπορεί να αλλάξει (π.χ. επεκταθεί) το μέγεθος δυναμικά; Μπορούν οι πίνακες να έχουν πολλές διαστάσεις; Είναι ένας πίνακας με πολλές διαστάσεις ισοδύναμος με έναν πίνακα από πίνακες; Πώς διατάσσονται τα στοιχεία ενός πίνακα στη μνήμη; Οι συμβολοσειρές έχουν το δικό τους τύπο ή είναι πίνακες από bytes; Υπάρχει τύπος λίστας; Εισαγωγή στους Τύπους 19

20 Ενώσεις (unions) Η ένωση δύο συνόλων δίνει ένα καινούριο σύνολο S = X U Y Πολλές γλώσσες υποστηρίζουν τύπους ενώσεων: C: union element { int i; double d; }; ML: datatype element = I of int R of real; Η αναπαράσταση των ενώσεων μπορεί να είναι ή μπορεί να μην είναι εμφανής στον προγραμματιστή: sizeof(u) == max(sizeof(u.i),sizeof(u.d)) Εισαγωγή στους Τύπους 20

21 Αυστηρότητα τύπων και ενώσεις Στην ML, το μόνο που μπορεί να κάνουμε σε μία ένωση είναι να εξάγουμε τα περιεχόμενά της Και στην περίπτωση αυτή πρέπει να πούμε τι μπορεί να γίνει με τις τιμές ενώσεων διαφορετικών τύπων: datatype element = I of int R of real; fun getreal (R x) = x getreal (I x) = real x; Εισαγωγή στους Τύπους 21

22 Ενώσεις χωρίς αυστηρό σύστημα τύπων Σε μερικές γλώσσες οι λεπτομέρειες της υλοποίησης των ενώσεων είναι εμφανείς στον προγραμματιστή Σε κάποιες περιπτώσεις τα προγράμματα μπορούν να εκμεταλλευθούν το γεγονός ότι ο τύπος κάποιας τιμής χάνεται: union element { int i; double d; }; union element e; e.i = 100; double x = e.d; Εισαγωγή στους Τύπους 22

23 Τι λέει η ANSI C για τις ενώσεις; A union may be thought of as a structure all of whose members begin at offset 0 and whose size is sufficient to contain any of its members. At most one of the members can be stored in a union at any time. If a pointer to a union is cast to the type of a pointer to a member, the result refers to that member. In general, a member of a union may not be inspected unless the value of the union has been assigned using that same member. The C Programming Language, 2nd ed. Brian W. Kernighan and Dennis M. Ritchie Εισαγωγή στους Τύπους 23

24 Υποσύνολα (subsets) Μπορούμε να ορίσουμε το υποσύνολο που ορίζεται με βάση ένα κατηγόρημα P : S = { x X P ( x )} Κάποιες γλώσσες υποστηρίζουν υποτύπους (subtypes), με λίγη ή περισσότερη γενικότητα Λίγη γενικότητα: Ορισμός υποδιαστημάτων στην Pascal type digit = 0..9; Κάμποση γενικότητα: Ορισμός υποτύπων στην Ada subtype DIGIT is INTEGER range 0..9; subtype WEEKDAY is DAY range MON..FRI; Πολλή γενικότητα: Ορισμός τύπων στη Lisp μέσω κατηγορημάτων Εισαγωγή στους Τύπους 24

25 Παράδειγμα: Ada Subtypes type DEVICE is (PRINTER, DISK); type PERIPHERAL(Unit: DEVICE) is record HoursWorking: INTEGER; case Unit is when PRINTER => Line_count: INTEGER; when DISK => Cylinder: INTEGER; Track: INTEGER; end case; end record; subtype DISK_UNIT is PERIPHERAL(DISK); Εισαγωγή στους Τύπους 25

26 Παράδειγμα: Ορισμός τύπων στη Lisp (declare (type integer x)) (declare (type (or null cons) x)) (declare (type (and number (not integer)) x)) (declare (type (and integer (satisfies evenp)) x)) Εισαγωγή στους Τύπους 26

27 Αναπαράσταση των τιμών ενός υποτύπου Συνήθως, ο υποτύπος χρησιμοποιεί την ίδια εσωτερική αναπαράσταση με τον υπερτύπο (supertype) του Ερωτήσεις: Μπορεί να χρησιμοποιηθεί κάποια πιο φθηνή αναπαράσταση; Π.χ. οι δύο παρακάτω τύποι χρειάζονται τον ίδιο χώρο αποθήκευσης; X: 1..9 X: Integer? Οι υποτύποι επιβάλλονται και ελέγχονται από το μεταγλωττιστή; X := 10 X := X + 1? Εισαγωγή στους Τύπους 27

28 Λειτουργίες υποτύπων Συνήθως οι επιτρεπόμενες λειτουργίες είναι όλες οι λειτουργίες που είναι διαθέσιμες και για τον υπερτύπο Καθώς και κάποιες άλλες που δεν έχουν τόσο πολύ νόημα στον υπερτύπο: function todigit (X: Digit) : Char; Θέμα για περισυλλογή Ένας υποτύπος είναι ένα υποσύνολο όλων των τιμών ενός υπερτύπου, αλλά συνήθως υποστηρίζει ένα υπερσύνολο από λειτουργίες. Εισαγωγή στους Τύπους 28

29 Κάποια λόγια για τις κλάσεις (classes) Μια από τις βασικές ιδέες του αντικειμενοστρεφούς προγραμματισμού Μια κλάση είναι ένα είδος τύπου: κάποια δεδομένα και οι λειτουργίες τους σε συσκευασία πακέτου Μια υποκλάση είναι ένας υποτύπος: περιλαμβάνει μόνο ένα υποσύνολο των αντικειμένων, αλλά υποστηρίζει ένα υπερσύνολο των λειτουργιών Περισσότερα για τις κλάσεις στις διαλέξεις των γλωσσών αντικειμενοστρεφούς προγραμματισμού Εισαγωγή στους Τύπους 29

30 Συναρτήσεις (functions) Το σύνολο των συναρτήσεων με κάποιο πεδίο ορισμού και τιμών: { f dom f = D ran f R} S = D R = = Οι περισσότερες γλώσσες υποστηρίζουν την έννοια των συναρτήσεων: C: int f(char a, char b) { return a == b; } ML: fun f(a:char, b:char) = (a = b); Εισαγωγή στους Τύπους 30

31 Λειτουργίες συναρτήσεων Φυσικά, κλήση συναρτήσεων Μέχρι στιγμής, το θεωρήσαμε ως δεδομένο ότι οι υπόλοιποι τύποι μπορούσαν να περαστούν ως παράμετροι, να επιστραφούν ως αποτελέσματα, να ανατεθούν σε μεταβλητές, κ.λπ. Με τις συναρτήσεις δε μπορούμε να το θεωρήσουμε ως δεδομένο: οι περισσότερες γλώσσες δεν υποστηρίζουν κάτι περισσότερο από κλήση συναρτήσεων! Εισαγωγή στους Τύπους 31

32 Χρησιμότητα των τύπων Εισαγωγή στους Τύπους 32

33 Χρησιμότητα των τύπων Βοηθούν στην οργάνωση και τεκμηρίωση προγραμμάτων Διαφορετικοί τύποι για διαφορετικές έννοιες Αναπαριστάνουν έννοιες από το πεδίο του προβλήματος Υποδηλώνουν την προτιθέμενη χρήση των μεταβλητών Οι τύποι μπορούν να ελεγχθούν αυτόματα και να μείνουν σε συμφωνία με αλλαγές στο πρόγραμμα, σε αντίθεση με τα σχόλια Υποδεικνύουν και ανιχνεύουν κάποιου είδους σφάλματα Ο έλεγχος τύπων μπορεί να ανιχνεύσει υπολογισμούς χωρίς σημασιολογία, όπως π.χ. 3 + true - "Bill" Υποστηρίζουν τη βελτιστοποίηση (optimization) Παράδειγμα: οι short ακέραιοι αποθηκεύονται σε λιγότερα bits Αποφυγή ελέγχου εξαιρέσεων ή υπερχείλισης Εισαγωγή στους Τύπους 33

34 Σφάλματα τύπων (type errors) Όπως είδαμε, ένας τύπος ορίζεται από: Τρόπους εισαγωγής τιμών για τον τύπο Τρόπους χρησιμοποίησης των τιμών για την παραγωγή νέων τύπων τιμών Κάτω από αυτό το πρίσμα Κάθε τύπος συσχετίζεται με ένα σύνολο από λειτουργίες (δηλαδή, με κάποιους τελεστές) Κάθε λειτουργία ορίζεται πάνω σε στοιχεία ενός συγκεκριμένου τύπου (δηλαδή, σε ένα συγκεκριμένο σύνολο τιμών) Ένα σφάλμα τύπου λαμβάνει χώρα όταν η λειτουργία πάει να εφαρμοστεί σε ορίσματα εκτός του πεδίου ορισμού της (δηλαδή, σε ορίσματα διαφορετικού τύπου) Εισαγωγή στους Τύπους 34

35 Επισημειώσεις τύπων Πολλές γλώσσες απαιτούν, ή τουλάχιστον επιτρέπουν, επισημειώσεις τύπων σε μεταβλητές, συναρτήσεις, κ.λπ. Χρησιμοποιούνται από τον προγραμματιστή για την παροχή στατικής πληροφορίας τύπων στο σύστημα υλοποίησης της γλώσσας Οι επισημειώσεις είναι επίσης ένα είδος τεκμηρίωσης, που καθιστά τα προγράμματα πιο εύκολα αναγνώσιμα από άλλους Μέρος της σύνταξης της γλώσσας συνήθως έχει σχέση με τον ορισμό τύπων (π.χ. *, -> και list στην ML) Εισαγωγή στους Τύπους 35

36 Εγγενείς τύποι (intrinsic types) Κάποιες γλώσσες χρησιμοποιούν ονομαστικές συμβάσεις για τον ορισμό των τύπων μεταβλητών Σε διαλέκτους της BASIC: S$ ορίζει μια συμβολοσειρά Σε διαλέκτους της Fortran: I ορίζει έναν ακέραιο Όπως και οι ρητές επισημειώσεις τύπων, οι εγγενείς τύποι προμηθεύουν με πληροφορία τύπων τόσο την υλοποίηση της γλώσσας όσο και τον αναγνώστη του προγράμματος Εισαγωγή στους Τύπους 36

37 Απλός συμπερασμός τύπων Οι περισσότερες γλώσσες υλοποιούν κάποιες απλές μορφές συμπερασμού τύπων Οι σταθερές έχουν τύπο που καθορίζεται στατικά Π.χ. στη Java: Ησταθερά10 έχει τύπο int, η 10L έχει τύπο long Οι εκφράσεις με τη σειρά τους μπορεί να έχουν στατικά καθοριζόμενους τύπους, που συμπεραίνονται εύκολα από τους τελεστές και τους τύπους των ορισμάτων τους Π.χ. στη Java: εάν ο a είναι double, τότε η έκφραση a*0 έχει τύπο double (0.0) Η γλώσσα ML πηγαίνει την παραπάνω ιδέα στα άκρα... Εισαγωγή στους Τύπους 37

38 Έλεγχος τύπων: Στατικός και δυναμικός Εισαγωγή στους Τύπους 38

39 Έλεγχος χρόνου μετάφρασης έναντι εκτέλεσης Οι γλώσσες Lisp, Prolog, Python, Ruby, ελέγχουν τους τύπους στο χρόνο εκτέλεσης του προγράμματος Π.χ. στη Lisp σε μια έκφραση (car x) ελέγχουμε εάν το x είναι λίσταπρινπάρουμετοcar του x Οι γλώσσες ML και Haskell ελέγχουν τους τύπους κατά το χρόνο μετάφρασης του προγράμματος Π.χ. σε μια κλήση f(x) πρέπει να έχουμε f: A B και x A Ένα από τα κύρια πάρε-δώσε του σχεδιασμού γλωσσών Και οι δύο τρόποι αποφεύγουν τα σφάλματα Ο δυναμικός έλεγχος καθυστερεί την εκτέλεση Ο στατικός έλεγχος περιορίζει την εκφραστικότητα Λίστες σε Lisp: τα στοιχεία μπορούν να έχουν διαφορετικούς τύπους Λίστες σε ML: όλα τα στοιχεία πρέπει να έχουν τον ίδιο τύπο Εισαγωγή στους Τύπους 39

40 Στατικός έλεγχος τύπων Στο στατικό έλεγχο τύπων, ο τύπος της κάθε έκφρασης καθορίζεται πριν την εκτέλεση του προγράμματος Ο μεταγλωττιστής τυπώνει μηνύματα λάθους όταν οι τύποι που εξάγονται στατικά τον κάνουν να καταλάβει κάποια ασυνέπεια ή ασυμφωνία στη χρήση των τύπων Όσον αφορά σε τελεστές: 1 + "abc" Όσον αφορά σε συναρτήσεις: round("abc") Όσον αφορά σε εντολές της γλώσσας: if "abc" then Πολλές μοντέρνες γλώσσες προγραμματισμού έχουν στατικά (ή ως επί το πλείστον στατικά) συστήματα τύπων Εισαγωγή στους Τύπους 40

41 Δυναμικός έλεγχος τύπων (dynamic typing) Σε πολλές άλλες γλώσσες (π.χ. Lisp, Scheme, Smalltalk, Erlang, Prolog, Python, Ruby, ), τα προγράμματα δεν ελέγχονται στατικά για πιθανά σφάλματα τύπων Ελέγχονται όμως δυναμικά για τέτοιου είδους σφάλματα Με άλλα λόγια, κατά το χρόνο εκτέλεσης, η υλοποίηση της γλώσσας ελέγχει ότι τα ορίσματα των τελεστών είναι τύπων οι οποίοι είναι συμβατοί με τους τελεστές Εισαγωγή στους Τύπους 41

42 Παράδειγμα: Lisp Μια συνάρτηση σε Lisp που προσθέτει δύο αριθμούς: (defun f (a b) (+ a b)) Θα εγείρει εξαίρεση εάν ο a ήοb δεν είναι αριθμοί Κλήσεις με ορίσματα λάθος τύπου, π.χ. (f nil nil), δεν υποδεικνύονται κατά το χρόνο μεταγλώττισης Στο δυναμικό έλεγχο τύπων τα παραπάνω λάθη πιάνονται κατά το χρόνο εκτέλεσης του προγράμματος Κατά κάποιο τρόπο, στις γλώσσες με δυναμικό έλεγχο τύπων οι τύποι χρησιμοποιούνται παραπάνω από αυτές με στατικό έλεγχο, διότι οι τύποι πρέπει να ελεγχθούν κατά το χρόνο εκτέλεσης Αυτό σημαίνει ότι η υλοποίηση της γλώσσας πρέπει να διατηρήσει πληροφορία για τον τύπο της κάθε μεταβλητής Εισαγωγή στους Τύπους 42

43 Εκφραστικότητα Στη Lisp, είναι δυνατό να γράψουμε τη συνάρτηση (lambda (x) (cond ((less x 10) x) (T (car x)))) Κάποιες χρήσεις της συνάρτησης μπορεί να οδηγήσουν σε σφάλματα τύπων, κάποιες άλλες όμως όχι Ο στατικός έλεγχος τύπων είναι πάντα συντηρητικός if (big-hairy-boolean-expression) then ((lambda (x) ) 5) else ((lambda (x) ) nil) Δε μπορούμε να αποφασίσουμε κατά το χρόνο μεταγλώττισης εάν θα υπάρξει κάποιο σφάλμα τύπου Εισαγωγή στους Τύπους 43

44 Στατικός έλεγχος τύπων έναντι δυναμικού Δεν είναι όλα άσπρα ή μαύρα Γλώσσες με στατικό έλεγχο τύπων πολλές φορές χρησιμοποιούν κάποιο δυναμικό έλεγχο Π.χ. λόγω της ύπαρξης υποτύπων (subtyping), ειδικά στις αντικειμενοστρεφείς γλώσσες προγραμματισμού Π.χ. λόγω υπερφορτωμένων τελεστών Γλώσσες με δυναμικό έλεγχο τύπων πολλές φορές χρησιμοποιούν κάποιο στατικό έλεγχο Τύποι για (μέρη) προγραμμάτων σε Lisp, μπορούν να εξαχθούν με χρήση δηλώσεων τύπων και τοπικού συμπερασμού τύπων Πολλοί μεταγλωττιστές της Lisp χρησιμοποιούν την πληροφορία αυτή για την αποφυγή ελέγχων τύπων κατά το χρόνο εκτέλεσης και για την παραγωγή καλύτερου (ταχύτερου) κώδικα μηχανής Εισαγωγή στους Τύπους 44

45 Ρητοί έλεγχοι τύπων κατά το χρόνο εκτέλεσης Κάποιες γλώσσες επιτρέπουν στον προγραμματιστή να ελέγξει τύπους κατά την εκτέλεση του προγράμματος: Π.χ. η Java επιτρέπει τον έλεγχο του τύπου κάποιου αντικειμένου με χρήση του τελεστή instanceof Π.χ. η Modula-3 επιτρέπει τη διακλάδωση (branch) με βάση τον τύπο κάποιου αντικειμένου με χρήση της έκφρασης typecase Τα παραπάνω απαιτούν ότι η πληροφορία για τύπους είναι παρούσα κατά το χρόνο εκτέλεσης, παρόλο που η γλώσσα έχει ως επί το πλείστον στατικό σύστημα τύπων Εισαγωγή στους Τύπους 45

46 Αυστηρά και ασθενή συστήματα τύπων Η επιδίωξη του ελέγχου των τύπων είναι η αποφυγή της εφαρμογής τελεστών σε ορίσματα των οποίων ο τύπος δεν έχει νόημα για το συγκεκριμένο τελεστή Σε κάποιες γλώσσες, όπως στην ML και στη Java, ο έλεγχος τύπων είναι αρκετά εξονυχιστικός και εξασφαλίζει σε μεγάλο βαθμό το παραπάνω λέμε ότι η γλώσσα έχει αυστηρό σύστημα τύπων (strong typing) Σε πολλές γλώσσες (όπως π.χ. η C) αυτό δε συμβαίνει: το σύστημα τύπων είναι ασθενές (weak) και διάτρητο Αυτό παρέχει ευελιξία στον προγραμματιστή Αλλά δεν προσφέρει αρκετή ασφάλεια Εισαγωγή στους Τύπους 46

47 Σχετική ασφάλεια τύπων των γλωσσών Μη ασφαλείς: Η οικογένεια BCPL συμπεριλαμβανομένης της C και της C++ Σουλουπώματα τύπων (type casts), αριθμητική με δείκτες, Περίπου ασφαλείς: Η οικογένεια της Algol, Pascal, Ada Ξεκρέμαστοι δείκτες Δέσμευσε ένα δείκτη p σε έναν ακέραιο, αποδέσμευσε τη μνήμη που δείχνει ο p, και στη συνέχεια χρησιμοποίησε την τιμή που δείχνει ο p Καμία γλώσσα με ρητή αποδέσμευση μνήμης δεν προσφέρει πλήρη ασφάλεια τύπων! Ασφαλείς: Η οικογένεια της Lisp, η ML, η Smalltalk, και οι Java, C# Lisp, Smalltalk, Prolog, Erlang, Ruby: γλώσσες δυναμικών τύπων ML, Haskell, Java, C#: γλώσσες στατικών τύπων (statically typed) Εισαγωγή στους Τύπους 47

48 Εργαλεία στατικής ανάλυσης προγραμμάτων Τομέας με αρκετή ερευνητική δραστηριότητα πρόσφατα Lint, Purify, Coverity, PreFix, PreFast, Dialyzer, Valgrind, Δύο κατηγορίες ανάλυσης Συντηρητικές (= Sound for correctness) Εάν η ανάλυση πει ότι το πρόγραμμα είναι σωστό, τότε είναι Εάν η ανάλυση πει όχι σωστό, μπορεί να μην υπάρχουν λάθη Μη συντηρητικές (= Sound for errors) Εάν η ανάλυση πει σωστό, το πρόγραμμα μπορεί να είναι εσφαλμένο Εάν η ανάλυση βρει κάποιο πρόβλημα, τότε όντως υπάρχει κάποια ανωμαλία στο πρόγραμμα Μια καλύτερη κατηγοριοποίηση, κατά τη γνώμη μου: Συντηρητικά εργαλεία χρειάζονται για απόδειξη ορθότητας Μη συντηρητικά εργαλεία για εύρεση σφαλμάτων (bug finding) Εισαγωγή στους Τύπους 48

49 Θέματα ισοδυναμίας τύπων Εισαγωγή στους Τύπους 49

50 Ισοδυναμία τύπων Πότε δύο τύποι θεωρούνται ίδιοι; Σημαντική ερώτηση τόσο για το στατικό όσο και για το δυναμικό έλεγχο τύπων Για παράδειγμα, η γλώσσα μπορεί να επιτρέπει μια ανάθεση a := b μόνο εάν η μεταβλητή b έχει τον ίδιο τύπο με την a Διαφορετικές γλώσσες ορίζουν την ισοδυναμία των τύπων με διαφορετικούς τρόπους Εισαγωγή στους Τύπους 50

51 Ισοδυναμίες τύπων Ισοδυναμία ονόματος (name equivalence): δύο τύποι είναι ίδιοι αν και μόνο αν έχουν το ίδιο όνομα Ισοδυναμία δομής (structural equivalence): δύο τύποι είναι ίδιοι αν και μόνο αν έχουν προκύψει από τους ίδιους πρωτόγονους τύπους με χρήση της ίδιας σειράς ίδιων κατασκευαστών τύπων (Οι παραπάνω, δεν είναι οι μόνοι τρόποι ορισμού της ισοδυναμίας αλλά είναι οι πιο εύκολοι να εξηγηθούν.) Εισαγωγή στους Τύπους 51

52 Παράδειγμα ισοδυναμίας τύπων type irpair1 = int * real; type irpair2 = int * real; fun f(x:irpair1) = #1 x; Τι θα συμβεί εάν περάσουμε ως όρισμα στην f μια παράμετρο τύπου irpair2; Η ισοδυναμία ονόματος δεν το επιτρέπει: irpair2 και irpair1 είναι διαφορετικά ονόματα Η ισοδυναμία δομής το επιτρέπει: οι τύποι κατασκευάζονται με τον ίδιο τρόπο Στην ML επιτρέπεται: η γλώσσα υποστηρίζει ισοδυναμία δομής Εισαγωγή στους Τύπους 52

53 Παράδειγμα ισοδυναμίας τύπων var Counts1: array['a'..'z'] of Integer; Counts2: array['a'..'z'] of Integer; Τι θα συμβεί εάν προσπαθήσουμε να αναθέσουμε τον πίνακα Counts1 στον πίνακα Counts2; Η ισοδυναμία ονόματος δεν το επιτρέπει: οι τύποι των πινάκων Counts1 και Counts2 δεν έχουν τα ίδια ονόματα Η ισοδυναμία δομής το επιτρέπει: οι τύποι κατασκευάζονται με τον ίδιο τρόπο Οι περισσότερες υλοποιήσεις της Pascal δεν επιτρέπουν την παραπάνω ανάθεση Εισαγωγή στους Τύπους 53

54 Συμπερασματικά Οι τύποι παίζουν σημαντικό ρόλο σε πολλές γλώσσες προγραμματισμού Για την οργάνωση και την τεκμηρίωση ενός προγράμματος Για την αποφυγή σφαλμάτων λογισμικού Για την παροχή πληροφορίας στο μεταγλωττιστή της γλώσσας Εισαγωγή στους Τύπους 54

55 Βασική ερώτηση για τα συστήματα τύπων Πόσο μέρος της αναπαράστασης κάνει το σύστημα τύπων εμφανές στον προγραμματιστή; Μερικοί προγραμματιστές προτιμούν γλώσσες σαν τη C, διότι Προσφέρουν τη δυνατότητα για απ ευθείας προσπέλαση στη λεπτομερή αναπαράσταση των τύπων όταν για κάποιο λόγο αυτό είναι επιθυμητό Μερικοί άλλοι προτιμούν γλώσσες σαν την ML, διότι Κρύβουν τις λεπτομέρειες της υλοποίησης των τύπων και Προσφέρουν καθαρούς τρόπους χρησιμοποίησης δεδομένων που επιτρέπουν την ανάπτυξη προγραμμάτων χωρίς σφάλματα κάποιου είδους, και διευκολύνουν την απόδειξη της ορθότητάς τους Εισαγωγή στους Τύπους 55

Εισαγωγή στους Τύπους

Εισαγωγή στους Τύπους Εισαγωγή στους Τύπους Περιεχόµενα Τύποι στις γλώσσες προγραµµατισµού Τι είναι οι τύποι; Κατηγορίες και αναπαραστάσεις των τύπων Χρήση και χρησιµότητα των τύπων Γλώσσες µε στατικό και γλώσσες και δυναµικό

Διαβάστε περισσότερα

Εισαγωγή στους Τύπους

Εισαγωγή στους Τύπους Εισαγωγή στους Τύπους Περιεχόµενα Τύποι στις γλώσσες προγραµµατισµού Τι είναι οι τύποι; Κατηγορίες και αναπαραστάσεις των τύπων Χρήση και χρησιµότητα των τύπων Γλώσσες µε στατικό και γλώσσες και δυναµικό

Διαβάστε περισσότερα

Μεταγλωττιστές. Σημασιολογική Ανάλυση. Εργαστήριο 9. Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

Μεταγλωττιστές. Σημασιολογική Ανάλυση. Εργαστήριο 9. Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι Μεταγλωττιστές Εργαστήριο 9 Σημασιολογική Ανάλυση Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι 2016-2017 Σύνταξη και Σημασιολογία Σε οποιαδήποτε γλώσσα (προγραμματισμού ή μη) υπάρχουν δύο βασικές

Διαβάστε περισσότερα

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 8 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 8 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Γιώργος Δημητρίου Μάθημα 8 ο Μετάφραση Οδηγούμενη από τη Σύνταξη Ο ΣΑ καλεί τις ρουτίνες που εκτελούν τη σημασιολογική ανάλυση και παράγουν τον ενδιάμεσο κώδικα Σημασιολογικές πληροφορίες μπορούν να μεταφέρονται

Διαβάστε περισσότερα

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου Αντικειμενοστρέφεια Henri Matisse, Harmony in Red, 1908 Κωστής Σαγώνας Νίκος Παπασπύρου Ορισμοί αντικειμενοστρέφειας Ποιοι είναι οι ορισμοί των παρακάτω; Αντικειμενοστρεφής

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Αναφορές Μαθήματα από το lab Υπενθύμιση: Η άσκηση ζητούσε να υλοποιήσετε μία κλάση vector που να διαχειρίζεται διανύσματα οποιουδήποτε

Διαβάστε περισσότερα

Συμπερασμός Τύπων και Πολυμορφισμός

Συμπερασμός Τύπων και Πολυμορφισμός Συμπερασμός Τύπων και Πολυμορφισμός Giorgio de Chirico, Etorre e Andromaca, 1915-1925 Κωστής Σαγώνας Νίκος Παπασπύρου Εισαγωγή: Σύγκριση μεταξύ γλωσσών C: int

Διαβάστε περισσότερα

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μεταβλητές,

Διαβάστε περισσότερα

Στοιχειώδης προγραμματισμός σε C++

Στοιχειώδης προγραμματισμός σε C++ Στοιχειώδης προγραμματισμός σε C++ Σύντομο Ιστορικό. Το πρόγραμμα Hello World. Ο τελεστής εξόδου. Μεταβλητές και δηλώσεις τους. Αντικείμενα, μεταβλητές, σταθερές. Ο τελεστής εισόδου. Θεμελιώδεις τύποι.

Διαβάστε περισσότερα

Συμπερασμός Τύπων και Πολυμορφισμός 4

Συμπερασμός Τύπων και Πολυμορφισμός 4 Συμπερασμός Τύπων και Πολυμορφισμός Εισαγωγή: Σύγκριση μεταξύ γλωσσών C: int f(char a, char b) { return a == b; ML: - fun f(a, b) = (a = b); val f = fn : ''a * ''a -> bool Giorgio de Chirico, Etorre e

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων Δομημένος Προγραμματισμός Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 2 Ορισμός

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός (ΤΛ1006)

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

Βασικά Στοιχεία της Java

Βασικά Στοιχεία της Java Βασικά Στοιχεία της Java Παύλος Εφραιμίδης Java Βασικά Στοιχεία της γλώσσας Java 1 Τύποι Δεδομένων Η Java έχει δύο κατηγορίες τύπων δεδομένων: πρωτογενείς (primitive) τύπους δεδομένων αναφορές Java Βασικά

Διαβάστε περισσότερα

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Δυναμική Διαχείριση Μνήμης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2011-2012 Ανάγκη για Δυναμική Μνήμη Στατική Μνήμη Μέχρι τώρα χρησιμοποιούσαμε

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16

Διαβάστε περισσότερα

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 13 η Δομές & Ενώσεις Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην Εφαρμογή

Διαβάστε περισσότερα

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

Γλώσσες Προγραμματισμού Μεταγλωττιστές. Σημασιολογική Ανάλυση Γλώσσες Προγραμματισμού Μεταγλωττιστές Σημασιολογική Ανάλυση Πανεπιστήμιο Μακεδονίας Τμήμα Εφαρμοσμένης Πληροφορικής Ηλίας Σακελλαρίου Δομή Σημασιολογικής Ανάλυσης Στατική και Δυναμική Σημασιολογία Σημασιολογικοί

Διαβάστε περισσότερα

Θέματα Μεταγλωττιστών

Θέματα Μεταγλωττιστών Γιώργος Δημητρίου Ενότητα 2 η : Συστήματα τύπων Συστήματα Τύπων (ΣΤ) Το σύστημα τύπων μιας γλώσσας προγραμματισμού με τύπους είναι ένα σύνολο από κανόνες στους οποίους πρέπει να υπακούουν οι τύποι της

Διαβάστε περισσότερα

alpha Language age (3/5) alpha Language Φροντιστήριο Syntax Directed Translation and

alpha Language age (3/5) alpha Language Φροντιστήριο Syntax Directed Translation and alpha Language (1/5) ΗΥ-340 Γλώσσες και Μεταφραστές Φροντιστήριο Syntax Directed Translation and alpha Language Στην alpha δεν υπάρχει main() συνάρτηση, ο κώδικας ξεκινάει την εκτέλεση από την αρχή του

Διαβάστε περισσότερα

Εμβέλεια. Παραδείγματα. Παραδείγματα. Μπλοκ (blocks)

Εμβέλεια. Παραδείγματα. Παραδείγματα. Μπλοκ (blocks) Ονόματα και Εμβέλεια Ανακύκλωση ονομάτων Η κατανόηση της εμβέλειας είναι άμεση εάν το κάθε τι έχει το δικό του όνομα fun square a = a * a; fun double b = b + b; Αλλά στις μοντέρνες γλώσσες προγραμματισμού,

Διαβάστε περισσότερα

Τι σημαίνουν οι τύποι συναρτήσεων στην ML. Παράδειγμα επισημειώσεων τύπων στην ML. Επισημειώσεις τύπων (type annotations) f : A B σημαίνει:

Τι σημαίνουν οι τύποι συναρτήσεων στην ML. Παράδειγμα επισημειώσεων τύπων στην ML. Επισημειώσεις τύπων (type annotations) f : A B σημαίνει: Τι σημαίνουν οι τύποι συναρτήσεων στην ML f : A B σημαίνει: Για κάθε x A, f(x) = για κάποιο στοιχείο y = f(x) B ατέρμονη εκτέλεση η εκτέλεση τερματίζει εγείροντας κάποια εξαίρεση Με λόγια: εάν η αποτίμηση

Διαβάστε περισσότερα

Κεφάλαιο 7: Υποπρογράμματα. Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

Κεφάλαιο 7: Υποπρογράμματα. Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών Κεφάλαιο 7: Υποπρογράμματα Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών Ορισμός Αφαίρεση με χρήση υποπρογραμμάτων (subprogram abstraction) είναι η αντιστοίχιση ενός συνόλου εισόδων σε ένα σύνολο εξόδων

Διαβάστε περισσότερα

Ονόματα και Εμβέλεια. Wassily Kandinsky, Black lines, 1913

Ονόματα και Εμβέλεια. Wassily Kandinsky, Black lines, 1913 Ονόματα και Εμβέλεια Wassily Kandinsky, Black lines, 1913 Κωστής Σαγώνας Ανακύκλωση ονομάτων Η κατανόηση της εμβέλειας είναι άμεση εάν το κάθε τι έχει το δικό του όνομα Αλλά στις μοντέρνες

Διαβάστε περισσότερα

Προγραμματισμός Δομές Δεδομένων

Προγραμματισμός Δομές Δεδομένων Προγραμματισμός Δομές Δεδομένων Προγραμματισμός Δομές Δεδομένων (Data Structures) Καινούργιοι τύποι δεδομένων που αποτελούνται από την ομαδοποίηση υπαρχόντων τύπων δεδομένων Ομαδοποίηση πληροφορίας που

Διαβάστε περισσότερα

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή Στόχοι και αντικείμενο ενότητας Η έννοια του Τελεστή #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Εκφράσεις Προτεραιότητα Προσεταιριστικότητα Χρήση παρενθέσεων Μετατροπές Τύπων Υπονοούμενες και ρητές μετατροπές

Διαβάστε περισσότερα

Πληροφορική 2. Γλώσσες Προγραμματισμού

Πληροφορική 2. Γλώσσες Προγραμματισμού Πληροφορική 2 Γλώσσες Προγραμματισμού 1 2 Γλώσσες προγραμματσιμού Επιτρέπουν την κωδικοποίηση των αλγορίθμων Η εκτέλεση ενός προγράμματος θα πρέπει να δίνει τα ίδια αποτελέσματα με την νοητική εκτέλεση

Διαβάστε περισσότερα

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Κλάσεις και Αντικείμενα Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Κλάσεις Η γενική μορφή μιας κλάσης είναι η εξής: class class-name { private data and

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα ΑΝΑΦΟΡΕΣ new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για

Διαβάστε περισσότερα

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 3: Προγραμματισμός σε JAVA I Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Στοιχειώδης Προγραμματισμός - Προγραμματισμός με Συνθήκες - Προγραμματισμός με Βρόγχους

Διαβάστε περισσότερα

Εισαγωγή στον Προγραμματισμό

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Πίνακες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Πίνακες Πολλές φορές θέλουμε να κρατήσουμε στην μνήμη πολλά αντικείμενα

Διαβάστε περισσότερα

Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Εγγραφές Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Η Ανάγκη Ομαδοποίησης Πολλές φορές έχουμε πληροφορίες διαφορετικού τύπου οι οποίες όμως έχουν μεγάλη

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές Αντικείμενα ως ορίσματα Μπορούμε να περνάμε αντικείμενα ως ορίσματα σε μία μέθοδο όπως οποιαδήποτε άλλη μεταβλητή

Διαβάστε περισσότερα

Κεφάλαιο 7: Υπορουτίνες

Κεφάλαιο 7: Υπορουτίνες Κεφάλαιο 7: Υπορουτίνες Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών Ορισμός Αφαίρεση με χρήση υπορουτινών (subroutine abstraction) είναι η αντιστοίχιση ενός συνόλου εισόδων σε ένα σύνολο εξόδων που μπορεί

Διαβάστε περισσότερα

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Βασικοί Τύποι Πίνακες (μέρος 1) Συμβολοσειρές Ο Προεπεξεργαστής Τελευταία ενημέρωση: Σεπτέμβριος 2016 Εισαγωγή - 2 short:

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL 8.1. Εισαγωγή ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PACAL Πως προέκυψε η γλώσσα προγραμματισμού Pascal και ποια είναι τα γενικά της χαρακτηριστικά; Σχεδιάστηκε από τον Ελβετό επιστήμονα της Πληροφορικής Nicklaus Wirth to

Διαβάστε περισσότερα

Συμπερασμός Τύπων και

Συμπερασμός Τύπων και Συμπερασμός Τύπων και Πολυμορφισμός Εισαγωγή: γή Σύγκριση μεταξύ γλωσσών C: int f(char a, char b) { return a == b; ML: - fun f(a, b) = (a = b); val f = fn : ''a * ''a -> bool Giorgio de Chirico, Etorre

Διαβάστε περισσότερα

Pascal, απλοί τύποι, τελεστές και εκφράσεις

Pascal, απλοί τύποι, τελεστές και εκφράσεις Pascal, απλοί τύποι, τελεστές και εκφράσεις 15 Νοεμβρίου 2011 1 Γενικά Στην standard Pascal ορίζονται τέσσερις βασικοί τύποι μεταβλητών: integer: Παριστάνει ακέραιους αριθμούς από το -32768 μέχρι και το

Διαβάστε περισσότερα

Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 5: Απαριθμητές (enums) Δομές (structures)και Ενώσεις (unions) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Απαριθμητές - Δομές, φωλιασμένες δομές, τρόποι δήλωσης

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός (ΤΛ1006)

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Δείκτες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Τι είναι ο δείκτης Ένας δείκτης είναι μια μεταβλητή που περιέχει μια διεύθυνση μνήμης. Θυμηθείτε πως

Διαβάστε περισσότερα

Ονόματα και Εμβέλεια 6

Ονόματα και Εμβέλεια 6 Ονόματα και Εμβέλεια Ανακύκλωση ονομάτων Η κατανόηση της εμβέλειας είναι άμεση εάν το κάθε τι έχει το δικό του όνομα fun square a = a * a; fun double b = b + b; Αλλά στις μοντέρνες γλώσσες προγραμματισμού,

Διαβάστε περισσότερα

Τύποι δεδομένων, τελεστές, μεταβλητές

Τύποι δεδομένων, τελεστές, μεταβλητές Τύποι δεδομένων, τελεστές, μεταβλητές Βασικά στοιχεία της γλώσσας Η Java χαρακτηρίζεται από ένα αρκετά καλά οργανωμένο σύνολο εντολών κι ένα μέρος της επιτυχίας της οφείλεται στα διάφορα APIs (βιβλιοθήκες)

Διαβάστε περισσότερα

Βασικά Στοιχεία της Java

Βασικά Στοιχεία της Java Βασικά Στοιχεία της Παύλος Εφραιμίδης 1 Βασικά Στοιχεία της γλώσσας Τύποι Δεδομένων Η έχει δύο κατηγορίες τύπων δεδομένων: πρωτογενείς (primitive) iti τύπους δεδομένων δδ αναφορές 2 Βασικά Στοιχεία της

Διαβάστε περισσότερα

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΧΗΜΙΚΩΝ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΙΚΟ ΚΕΝΤΡΟ Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού Μάθημα 2ο Aντώνης Σπυρόπουλος v2_061015 Οροι που

Διαβάστε περισσότερα

Η γλώσσα ML σε βάθος. Γλώσσες Προγραμματισμού Ι. Διδάσκοντες: Νικόλαος Παπασπύρου, Κωστής Σαγώνας

Η γλώσσα ML σε βάθος. Γλώσσες Προγραμματισμού Ι. Διδάσκοντες: Νικόλαος Παπασπύρου, Κωστής Σαγώνας Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τομέας Τεχνολογίας Πληροφορικής και Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Γλώσσες Προγραμματισμού Ι Διδάσκοντες: Νικόλαος Παπασπύρου, Κωστής Σαγώνας

Διαβάστε περισσότερα

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 1 ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Μάθημα 1ο Τμήμα Διοίκησης Επιχειρήσεων α εξάμηνο Β. Φερεντίνος Ορισμός Wikipedia.org 2 Δομημένος προγραμματισμός (structured programming) ή διαδικαστικός προγραμματισμός (procedural

Διαβάστε περισσότερα

Η γλώσσα ML σε βάθος. Τι σημαίνουν οι τύποι συναρτήσεων στην ML. Παράδειγμα επισημειώσεων τύπων στην ML. Επισημειώσεις τύπων (type annotations)

Η γλώσσα ML σε βάθος. Τι σημαίνουν οι τύποι συναρτήσεων στην ML. Παράδειγμα επισημειώσεων τύπων στην ML. Επισημειώσεις τύπων (type annotations) Η γλώσσα ML σε βάθος Τι σημαίνουν οι τύποι συναρτήσεων στην ML f : A B σημαίνει: Για κάθε x A, f(x) = για κάποιο στοιχείο y=f(x) B ατέρμονη εκτέλεση η εκτέλεση τερματίζει εγείροντας κάποια εξαίρεση Με

Διαβάστε περισσότερα

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 10: Δείκτες Δείκτες Υπάρχουν περιπτώσεις που δεν ενδιαφέρει το περιεχόμενο αλλά η μιας μεταβλητής. Χρειάζεται κατάλληλος μηχανισμός αναφοράς και επεξεργασίας τιμών που

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16

Διαβάστε περισσότερα

Κεφάλαιο 5: Τύποι Δεδομένων. Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

Κεφάλαιο 5: Τύποι Δεδομένων. Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών Κεφάλαιο 5: Τύποι Δεδομένων Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών Γενικά (1) Όλοι μας έχουμε αναπτύξει μια διαισθητική άποψη για το τι είναι ένας Τύπος Δεδομένων. Δηλαδή: Συλλογή τιμών από ένα

Διαβάστε περισσότερα

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ Η ΓΛΩΣΣΑ PASCAL ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ Απλοί ή στοιχειώδης Τ.Δ. Ακέραιος τύπος Πραγματικός τύπος Λογικός τύπος Χαρακτήρας Σύνθετοι Τ.Δ. Αλφαριθμητικός 1. Ακέραιος (integer) Εύρος: -32768 έως 32767 Δήλωση

Διαβάστε περισσότερα

Εισαγωγή στον Προγραμματισμό

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Συναρτήσεις Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Συναρτήσεις Ως τώρα γράφαμε όλα τα προγράμματα μας μέσα στην main..1

Διαβάστε περισσότερα

Η γλώσσα ML σε βάθος. Joan Miró, El Carnaval del Arlequín, Κωστής Σαγώνας Νίκος Παπασπύρου

Η γλώσσα ML σε βάθος. Joan Miró, El Carnaval del Arlequín, Κωστής Σαγώνας Νίκος Παπασπύρου Η γλώσσα ML σε βάθος Joan Miró, El Carnaval del Arlequín, 1925 Κωστής Σαγώνας Νίκος Παπασπύρου Τι σημαίνουν οι τύποι συναρτήσεων στην ML f : A B σημαίνει: Για

Διαβάστε περισσότερα

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 10 Ο. Δομές Ενώσεις Απαριθμητοί τύποι δεδομένων ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 10 Ο. Δομές Ενώσεις Απαριθμητοί τύποι δεδομένων ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΣΙΝΑΤΚΑΣ Ι ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 2010-11 1 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 10 Ο Δομές Ενώσεις Απαριθμητοί τύποι δεδομένων Εισαγωγή Οι βασικοί τύποι δεδομένων στην C είναι char, int, float και double Το επόμενο βήμα δεδομένων

Διαβάστε περισσότερα

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 6: Διαχείριση Μνήμης & Δυναμικές Δομές Δεδομένων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δυναμικές Δομές Δεδομένων Γενικά Δυναμική Δέσμευση/Αποδέσμευση Μνήμης Δομή τύπου structure

Διαβάστε περισσότερα

Συμπερασμός Τύπων και

Συμπερασμός Τύπων και Συμπερασμός Τύπων και Πολυμορφισμός Εισαγωγή: Σύγκριση μεταξύ γλωσσών C: int f(char a, char b) { return a == b; ML: - fun f(a, b) = (a = b); val f = fn : ''a * ''a -> bool Giorgio de Chirico, Etorre e

Διαβάστε περισσότερα

- Αναπαράσταση ακέραιας τιµής : - Εύρος ακεραίων : - Ακέραιοι τύποι: - Πράξεις µε ακεραίους (DIV - MOD)

- Αναπαράσταση ακέραιας τιµής : - Εύρος ακεραίων : - Ακέραιοι τύποι: - Πράξεις µε ακεραίους (DIV - MOD) Η Γλώσσα Pascal Χαρακτηριστικά Τύποι Δεδοµένων Δοµή προγράµµατος 1. Βασικές έννοιες Χαρακτηριστικά της γλώσσας Pascal Γλώσσα προγραµµατισµού Συντακτικό Σηµασιολογία Αλφάβητο της γλώσσας Pascal (Σύνολο

Διαβάστε περισσότερα

Συμπερασμός Τύπων και Πολυμορφισμός

Συμπερασμός Τύπων και Πολυμορφισμός Συμπερασμός Τύπων και Πολυμορφισμός Εισαγωγή: Σύγκριση μεταξύ γλωσσών C: int f(char a, char b) { return a == b; ML: - fun f(a, b) = (a = b); val f = fn : ''a * ''a -> bool Giorgio de Chirico, Etorre e

Διαβάστε περισσότερα

Τεχνολογία Λογισµικού Ι Κεφάλαιο 5

Τεχνολογία Λογισµικού Ι Κεφάλαιο 5 ΕΛΛΗΝΙΚΟ ΑΝΟΙΧΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Πρόγραµµα σπουδών "ΠΛΗΡΟΦΟΡΙΚΗ" - Θ.Ε. ΠΛΗ11 Τεχνολογία Λογισµικού Ι Κεφάλαιο 5 Βασίλειος Βεσκούκης ιδάκτωρ Ηλεκτρολόγος Μηχανικός και Μηχανικός Υπολογιστών v.vescoukis@cs.ntua.gr

Διαβάστε περισσότερα

Εισαγωγή στην γλώσσα προγραμματισμού C

Εισαγωγή στην γλώσσα προγραμματισμού C Εισαγωγή στην γλώσσα προγραμματισμού C Χαρακτηριστικά της C Ιδιαίτερα δημοφιλής Έχει χρησιμοποιηθεί για τον προγραμματισμό ευρέος φάσματος συστημάτων και εφαρμογών Γλώσσα μετρίου επιπέδου Φιλοσοφία: Ο

Διαβάστε περισσότερα

Ανάπτυξη και Σχεδίαση Λογισμικού

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Βασικά Στοιχεία Το αλφάβητο της C Οι βασικοί τύποι της C Δηλώσεις μεταβλητών Είσοδος/Έξοδος Βασικές εντολές της C Αλφάβητο

Διαβάστε περισσότερα

ΚΥΡΙΑ ΜΟΝΤΕΛΑ ΓΛΩΣΣΩΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΚΥΡΙΑ ΜΟΝΤΕΛΑ ΓΛΩΣΣΩΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΚΥΡΙΑ ΜΟΝΤΕΛΑ ΓΛΩΣΣΩΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ 27 Κύρια προγραμματιστικά μοντέλα (1) Προστακτικός προγραμματισμός (imperative programming) FORTRAN, Algol, COBOL, BASIC, C, Pascal, Modula-2, Ada Συναρτησιακός προγραμματισμός

Διαβάστε περισσότερα

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος Κεφάλαιο 2.3: Προγραμματισμός 1 2.3.1 Αναφορά σε γλώσσες προγραμματισμού και «Προγραμματιστικά Υποδείγματα» 2.3.1.1 Πρόγραμμα και Γλώσσες Προγραμματισμού Πρόγραμμα: σύνολο εντολών που χρειάζεται να δοθούν

Διαβάστε περισσότερα

Pascal. 15 Νοεμβρίου 2011

Pascal. 15 Νοεμβρίου 2011 Pascal 15 Νοεμβρίου 011 1 Procedures σε Pascal Στην Pascal μπορούμε να ορίσουμε διαδικασίες (procedures). Αυτές είναι ομάδες εντολών οι οποίες έχουν ένα όνομα. Γράφοντας το όνομα μιας διαδικασίας μπορούμε

Διαβάστε περισσότερα

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών Ενότητα 5: Τύποι Δεδομένων Καθ. Γιάννης Γαροφαλάκης Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ και Πληροφορικής Γενικά (1) Όλοι μας έχουμε αναπτύξει μια διαισθητική

Διαβάστε περισσότερα

Διάλεξη 20: Χαμηλού Επιπέδου Προγραμματισμός II

Διάλεξη 20: Χαμηλού Επιπέδου Προγραμματισμός II Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 20: Χαμηλού Επιπέδου Προγραμματισμός II (Κεφάλαια 25.2, KNK-2ED) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132

Διαβάστε περισσότερα

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Μεταβλητές- Τύποι- Τελεστές

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Μεταβλητές- Τύποι- Τελεστές Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Μεταβλητές- Τύποι- Τελεστές Μεταβλητές 2 Δήλωση μεταβλητών Η δήλωση (declaration) πληροφορεί το μεταγλωττιστή για το όνομα και

Διαβάστε περισσότερα

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128] ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Α Περιόδου 2017 (27/1/2017) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................

Διαβάστε περισσότερα

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες Σκοπός της Άσκησης ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η εξοικείωση με τη χρήση των δεικτών (pointers). Οι δείκτες δίνουν την δυνατότητα σε προγράμματα να προσομοιώνουν τη

Διαβάστε περισσότερα

Αναφορές, είκτες και Αλφαριθμητικά

Αναφορές, είκτες και Αλφαριθμητικά Αναφορές, είκτες και Αλφαριθμητικά Ο τελεστής αναφοροποίησης Αναφορές είκτες Πίνακες και δείκτες Ο τελεστής new και delete υναμικοί πίνακες είκτες προς συναρτήσεις Αλφαριθμητικά της C Πίνακες Αλφαριθμητικών

Διαβάστε περισσότερα

Ονόματα και Εμβέλεια 4

Ονόματα και Εμβέλεια 4 Ονόματα και Εμβέλεια Ανακύκλωση ονομάτων Η κατανόηση της εμβέλειας είναι άμεση εάν το κάθε τι έχει το δικό του όνομα fun square a = a * a; fun double b = b + b; Αλλά στις μοντέρνες γλώσσες προγραμματισμού,

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός (ΤΛ1006)

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

Runtime Checking (1/3) Runtime Checking (2/3) Runtime Checking (3/3) ΗΥ 340 Γλώσσες και Μεταφραστές Φροντιστήριο

Runtime Checking (1/3) Runtime Checking (2/3) Runtime Checking (3/3) ΗΥ 340 Γλώσσες και Μεταφραστές Φροντιστήριο ΗΥ 340 Γλώσσες και Μεταφραστές Φροντιστήριο Runtime Checking (1/3) Η γλώσσα alpha είναι μια dynamic typing γλώσσα (ο τύπος μιας μεταβλητής αλλάζει ακολουθώντας τον τύπο της τιμής που κάθε φορά αποθηκεύεται

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2015-16

Διαβάστε περισσότερα

Αφαίρεση στον FP. Πολυμορφισμός Συναρτήσεις υψηλότερης τάξης Οκνηρός και Άπληστος Υπολογισμός

Αφαίρεση στον FP. Πολυμορφισμός Συναρτήσεις υψηλότερης τάξης Οκνηρός και Άπληστος Υπολογισμός Αφαίρεση στον FP Πολυμορφισμός Συναρτήσεις υψηλότερης τάξης Οκνηρός και Άπληστος Υπολογισμός Πολυμορφισμός Θα χρησιμοποιήσουμε σαν παράδειγμα τη συνάρτηση ταυτότητας Ι, που ορίζεται ως: fun I x = x Ο ορισμός

Διαβάστε περισσότερα

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 ❶ Προετοιµασία για το 1 ο Εργαστήριο

Διαβάστε περισσότερα

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 14 η Διαχείριση Μνήμης και Δομές Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2017-2018 ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ ΜΑΘΗΜΑ: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Εισαγωγή ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ Ένα πρόγραμμα σε C περιλαμβάνει μια ή περισσότερες συναρτήσεις

Διαβάστε περισσότερα

3. Εκφράσεις και έλεγχος ροής

3. Εκφράσεις και έλεγχος ροής 3. Εκφράσεις και έλεγχος ροής Τελειώνοντας αυτό το κεφάλαιο θα μπορείτε: Να διακρίνετε ανάμεσα σε μεταβλητές μέλη και αυτόματες μεταβλητές Να περιγράφετε την αρχικοποίηση των μεταβλητών μελών Να αναγνωρίζετε

Διαβάστε περισσότερα

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ Μέρος 2ο ΝΙΚΟΛΑΟΣ ΣΤΕΡΓΙΟΥΛΑΣ ΤΜΗΜΑ ΦΥΣΙΚΗΣ ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ 1 ΣΦΑΛΜΑΤΑ ΜΕΤΑΓΛΩΤΤΙΣΗΣ Η γλώσσα C κάνει αυστηρή διάκριση μεταξύ πεζών

Διαβάστε περισσότερα

Προγραμματισμός Ι. Δομές & Ενώσεις. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

Προγραμματισμός Ι. Δομές & Ενώσεις. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών Δομές & Ενώσεις Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Προγραμματισμός Δ. Τσελίκας Ι 1 Δομές (Structures) Δομή (structure) στη C είναι μία συλλογή από μεταβλητές οποιουδήποτε

Διαβάστε περισσότερα

Η γλώσσα προγραμματισμού C

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Εισαγωγή στη C Λίγα λόγια για την C Γλώσσα προγραμματισμού υψηλού επιπέδου. Σχεδιάστηκε και υλοποιήθηκε από τον Dennis Richie στις αρχές της δεκαετίας του 1970 (Bell Labs). Η

Διαβάστε περισσότερα

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών Ενότητα 7: Υπορουτίνες Καθ. Γιάννης Γαροφαλάκης Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ και Πληροφορικής Ορισμός Αφαίρεση με χρήση υπορουτινών (subroutine abstraction)

Διαβάστε περισσότερα

Τι σηµαίνουν οι τύποι συναρτήσεων στην ML. Παράδειγµα επισηµειώσεων τύπων στην ML. Επισηµειώσεις τύπων (type annotations) Σύνταξη ταιριάσµατος

Τι σηµαίνουν οι τύποι συναρτήσεων στην ML. Παράδειγµα επισηµειώσεων τύπων στην ML. Επισηµειώσεις τύπων (type annotations) Σύνταξη ταιριάσµατος Τι σηµαίνουν οι τύποι συναρτήσεων στην ML f : A B σηµαίνει: Για κάθε x A f(x) = για κάποιο στοιχείο y = f(x) B ατέρµονη εκτέλεση η εκτέλεση τερµατίζει εγείροντας κάποια εξαίρεση Με λόγια: εάν η αποτίμηση

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2014-15

Διαβάστε περισσότερα

HY340, 2009 Α. Σαββίδης Slide 2 / 143. HY340, 2009 Α. Σαββίδης Slide 3 / 143. HY340, 2009 Α. Σαββίδης Slide 4 / 143

HY340, 2009 Α. Σαββίδης Slide 2 / 143. HY340, 2009 Α. Σαββίδης Slide 3 / 143. HY340, 2009 Α. Σαββίδης Slide 4 / 143 HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ Φροντιστήριο 4ο Παραγωγή Ενδιάμεσου Κώδικα ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης

Διαβάστε περισσότερα

Κεφάλαιο 5: Τύποι εδοµένων. Γιάννης Γαροφαλάκης ΤΜΗΥΠ - Πανεπιστήµιο Πατρών

Κεφάλαιο 5: Τύποι εδοµένων. Γιάννης Γαροφαλάκης ΤΜΗΥΠ - Πανεπιστήµιο Πατρών Κεφάλαιο 5: Τύποι εδοµένων Αρχές Γλωσσών Προγραµµατισµού και Μεταφραστών Γενικά (1) Όλοι µας έχουµε αναπτύξει µια διαισθητική άποψη για το τι είναι ένας Τύπος εδοµένων. ηλαδή: Συλλογή τιµών από ένα πεδίο

Διαβάστε περισσότερα

ιαφάνειες παρουσίασης #1

ιαφάνειες παρουσίασης #1 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ http://www.corelab.ece.ntua.gr/courses/programming/ ιδάσκοντες: Στάθης Ζάχος (zachos@cs.ntua.gr) Νίκος Παπασπύρου (nickie@softlab.ntua.gr) ιαφάνειες παρουσίασης

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07 Αριθμητική στο δυαδικό σύστημα (γενικά) Συμπληρωματικά για δυαδικό σύστημα Η πρόσθεση στηρίζεται στους κανόνες: 0 + 0 = 0, 0 + 1 = 1, 1

Διαβάστε περισσότερα

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 3: Δείκτες και Πίνακες Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Αριθμητική Δεικτών Δείκτες και Πίνακες Παραδείγματα Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διαβάστε περισσότερα

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 7 η Διάλεξη: Σύντομη εισαγωγή στην Java

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 7 η Διάλεξη: Σύντομη εισαγωγή στην Java Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 7 η Διάλεξη: Σύντομη εισαγωγή στην Java Δρ. Απόστολος Γκάμας Λέκτορας (407/80) gkamas@uop.gr Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου Διαφάνεια 1 Εισαγωγή

Διαβάστε περισσότερα

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript Β.1 Τύποι Δεδομένων Όλες οι γλώσσες προγραμματισμού (πρέπει να) υποστηρίζουν πέντε (5) πρωταρχικούς τύπους δεδομένων: char (character) int (integer)

Διαβάστε περισσότερα

Διάλεξη 5: Δείκτες και Συναρτήσεις

Διάλεξη 5: Δείκτες και Συναρτήσεις Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΕΠΛ132 Αρχές Προγραμματισμού II Διάλεξη 5: Δείκτες και Συναρτήσεις (Κεφάλαιο 11, KNK-2ED) Δημήτρης Ζεϊναλιπούρ http://www.cs.ucy.ac.cy/courses/epl132 5-1 Περιεχόμενο

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι new Όπως είδαμε για να δημιουργήσουμε ένα αντικείμενο χρειάζεται να καλέσουμε τη new. Για τον πίνακα είπαμε ότι

Διαβάστε περισσότερα

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός Αντικειμενοστρεφής Προγραμματισμός Διδάσκουσα: Αναπλ. Καθηγήτρια Ανδριάνα Πρέντζα aprentza@unipi.gr Εργαστηριακός Συνεργάτης: Δρ. Βασιλική Κούφη vassok@unipi.gr Εργαστήριο 2 Βασικοί Τύποι Μεταβλητών Java

Διαβάστε περισσότερα

Εισαγωγή στην επιστήμη των υπολογιστών

Εισαγωγή στην επιστήμη των υπολογιστών Εισαγωγή στην επιστήμη των υπολογιστών Λογισμικό Υπολογιστών Γλώσσες Προγραμματισμού 1 Εξέλιξη Οι γλώσσες προγραμματισμού είναι σύνολα από προκαθορισμένες λέξεις οι οποίες συνδυάζονται σε προγράμματα σύμφωνα

Διαβάστε περισσότερα

Μνήμη Διευθύνσεις Δείκτες. Προγραμματισμός II 1

Μνήμη Διευθύνσεις Δείκτες. Προγραμματισμός II 1 Μνήμη Διευθύνσεις Δείκτες Προγραμματισμός II 1 lalis@inf.uth.gr Μνήμη Η/Υ Ειδικό υλικό, ξεχωριστό από τον επεξεργαστή Χρησιμεύει για την αποθήκευση δεδομένων και της κατάστασης εκτέλεσης του προγράμματος

Διαβάστε περισσότερα

ΗΥ-150. Προγραμματισμός

ΗΥ-150. Προγραμματισμός ΗΥ-150 Εντολές Ελέγχου Ροής Σειριακή εκτέλεση εντολών Όλα τα προγράμματα «γράφονται» χρησιμοποιώντας 3 είδη εντολών: Σειριακές εντολές (sequential built in C) Εντολές απόφασης (if, if/else, switch) Περιλαμβάνει

Διαβάστε περισσότερα

ΗΥ-150. Προγραμματισμός

ΗΥ-150. Προγραμματισμός ΗΥ-150 Εντολές Ελέγχου Ροής Σειριακή εκτέλεση εντολών Όλα τα προγράμματα «γράφονται» χρησιμοποιώντας 3 είδη εντολών: Σειριακές εντολές (sequential built in C) Εντολές απόφασης (if, if/else, switch) Περιλαμβάνει

Διαβάστε περισσότερα

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python Εισαγωγή στην Επιστήμη Υπολογιστών Εισαγωγή στην Python Python scripts Ένα πρόγραμμα στην Python (συχνά αποκαλείται script) αποτελείται από μία ακολουθία ορισμών και εντολών. H ακολουθία των ορισμών και

Διαβάστε περισσότερα