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

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

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

Transcript

1 Εισαγωγή στους Τύπους Περιεχόµενα Τύποι στις γλώσσες προγραµµατισµού Τι είναι οι τύποι; Κατηγορίες και αναπαραστάσεις των τύπων Χρήση και χρησιµότητα των τύπων Γλώσσες µε στατικό και γλώσσες και δυναµικό σύστηµα τύπων Έλεγχος τύπων κατά το χρόνο µετάφρασης (compile-time checking) κατά το χρόνο εκτέλεσης (run-time checking) Η έννοια της συντηρητικής ανάλυσης προγραµµάτων Ισοδυναµία τύπων Piet Mondrian, Composition with Blue, Yellow, Black, and Red, 1922 Κωστής Σαγώνας Εισαγωγή στους Τύπους 2 Τι είναι οι τύποι; Πρωτόγονοι και κατασκευαζόµενοι τύποι Ένας τύπος είναι ένα σύνολο από τιµές Όταν ορίζουµε ότι µια µεταβλητή έχει ένα συγκεκριµένο τύπο, δηλώνουµε ότι οι τιµές της µεταβλητής θα είναι πάντα στοιχεία του συγκεκριµένου συνόλου int n; Άρα ένας τύπος είναι ένα σύνολο από τιµές που έχουν µια συγκεκριµένη κοινή αναπαράσταση και µία συλλογή από λειτουργίες που µπορούν να εφαρµοστούν σε αυτές τις τιµές Το ποια σύνολα θεωρούνται ή δεν θεωρούνται τύποι εξαρτάται από τη γλώσσα Εισαγωγή στους Τύπους 3 Κάθε τύπος που µπορεί να χρησιµοποιηθεί αλλά δε µπορεί να οριστεί από ένα πρόγραµµα είναι ένας πρωτόγονος τύπος µιας γλώσσας Πρωτόγονοι τύποι της ML: int, real, char Ένα πρόγραµµα ML δε µπορεί να ορίσει έναν τύπο που να δουλεύει σαν τον προκαθορισµένο τύπο int Κάθε τύπος που µπορεί να οριστεί από ένα πρόγραµµα (µε βάση τους πρωτόγονους τύπους) είναι ένας κατασκευαζόµενος τύπος Π.χ. κατασκευαζόµενος τύπος στην ML: int list Ορίζεται µε χρήση του πρωτόγονου τύπου int και του κατασκευαστή τύπων list Εισαγωγή στους Τύπους 4

2 Πρωτόγονοι τύποι Ο ορισµός της κάθε γλώσσας είναι αυτός που καθορίζει ποιοι είναι πρωτόγονοι τύποι στη γλώσσα Κάποιες γλώσσες ορίζουν τους πρωτόγονους τύπους πιο αυστηρά από κάποιες άλλες: Π.χ. η Java ορίζει τους πρωτόγονους τύπους επακριβώς Από την άλλη µεριά, π.χ. η C και η ML αφήνουν κάποια περιθώρια ελευθερίας στον ορισµό των πρωτόγονων τύπων µεταξύ διαφορετικών υλοποιήσεων της γλώσσας Εισαγωγή στους Τύπους 5 Παράδειγµα: πρωτόγονοι τύποι ακεραίων 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 Ακέραιοι απείρου εύρους Εισαγωγή στους Τύπους 6 Θέµατα σχεδιασµού Σε ποια σύνολα αντιστοιχούν οι πρωτόγονοι τύποι; Τι είναι µέρος του ορισµού της γλώσσας, τι επαφίεται στη διακριτική ευχέρεια της υλοποίησης της γλώσσας; Εάν χρειαστεί, πως µπορεί ένα πρόγραµµα να ανακαλύψει θέµατα σχετικά µε τα µέλη του συνόλου; (INT_MAX στη C, Int.maxInt στην ML, ) Τι λειτουργίες υποστηρίζονται και πώς; Λεπτοµερείς ορισµοί περί στρογγυλοποίησης, εξαιρέσεων, κ.λπ. Η επιλογή της αναπαράστασης είναι καθοριστική για κάποιες από τις αποφάσεις Κατασκευαζόµενοι τύποι Πρόσθετοι τύποι οι οποίοι ορίζονται µε χρήση της γλώσσας Παραδείγµατα: απαριθµήσεις, πλειάδες, πίνακες, συµβολοσειρές, λίστες, ενώσεις, υποτύποι, και τύποι συναρτήσεων Για κάθε έναν από αυτούς, υπάρχει στενή σχέση µεταξύ του πως ορίζονται τα σύνολα στα µαθηµατικά και του πως ορίζονται οι τύποι στις γλώσσες προγραµµατισµού Εισαγωγή στους Τύπους 7 Εισαγωγή στους Τύπους 8

3 Απαριθµήσεις (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 Αναπαράσταση τιµών µιας απαρίθµησης Ένας συνήθης τρόπος αναπαράστασης απαριθµήσεων είναι η χρησιµοποίηση µικρών ακεραίων για τις τιµές Η αναπαράσταση µπορεί να είναι εµφανής στον προγραµµατιστή, όπως π.χ. στη 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 Λειτουργίες απαριθµήσεων Έλεγχος ισότητας, φυσικά: fun isweekend x = (x = Sa orelse x = Su); Εάν η ακέραια φύση της αναπαράστασης των απαριθµήσεων είναι εµφανής, η γλώσσα συνήθως επιτρέπει κάποιες από ή όλες τις λειτουργίες που επιτρέπονται σε ακεραίους: Pascal: for c := red to blue do p(c) C: int x = penny + nickel + dime; Εισαγωγή στους Τύπους 11 Πλειάδες (tuples) Το καρτεσιανό γινόµενο δύο ή περισσοτέρων συνόλων ορίζει σύνολα από πλειάδες: S = X Y = {( x, y) x X y Y } Κάποιες γλώσσες υποστηρίζουν καθαρές πλειάδες: fun get1 (x : real * real) = #1 x; Πολλές άλλες υποστηρίζουν εγγραφές (records), που είναι πλειάδες τα πεδία των οποίων έχουν ονόµατα: struct complex { type complex = { C: double rp; rp:real, :ML double ip; ip:real }; }; fun getip (x : complex) = #ip x; Εισαγωγή στους Τύπους 12

4 Αναπαράσταση των πλειάδων Η συνήθης αναπαράσταση των πλειάδων είναι τα πεδία τους να διατάσσονται το ένα µετά το άλλο στη µνήµη Αλλά υπάρχουν πολλές λεπτοµέρειες: Με ποια σειρά; Επιτρέπονται τρύπες για ευθυγράµµιση (alignment) των πεδίων (π.χ. σε αρχές διαφορετικών λέξεων) στη µνήµη; Είναι κάτι από όλα αυτά ορατό στον προγραµµατιστή; Παράδειγµα: 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 Εισαγωγή στους Τύπους 13 Εισαγωγή στους Τύπους 14 Λειτουργίες πλειάδων Επιλογή στοιχείων, φυσικά: C: x.ip ML: #ip x Άλλες λειτουργίες ανάλογα µε το ποιο/πόσο µέρος της αναπαράστασης είναι εµφανές στον προγραµµατιστή: C: double y = *((double *) &x); struct person { char *firstname; char *lastname; } p1 = {"dennis","ritchie"}; Εισαγωγή στους Τύπους 15 Ανύσµατα (vectors) Ανύσµατα γνωστού (σταθερού) µήκους: S Ανύσµατα αγνώστου µήκους: {( x,, x ) i x X } n = X =. 1 K S = X = U i Τύποι σχετικοί µε τα ανύσµατα: Πίνακες, συµβολοσειρές και λίστες Είναι σαν τις πλειάδες αλλά συνήθως έχουν τον ίδιο τύπο στοιχείων και πολλές παραλλαγές από γλώσσα σε γλώσσα Ένα παράδειγµα διαφοροποίησης: δείκτες (indices) σε πίνακες Ποιες είναι οι τιµές των δεικτών; Καθορίζεται το µέγεθος των πινάκων στο χρόνο µεταγλώττισης ή στο χρόνο εκτέλεσης; Εισαγωγή στους Τύπους 16 n X i i

5 Τιµές δεικτών Στη Java, C, και C++: Το πρώτο στοιχείο ενός πίνακα a είναι το a[0] Οι δείκτες είναι πάντα ακέραιοι που αρχίζουν από το 0 Η Pascal είναι πιο ευέλικτη: Μπορεί να χρησιµοποιηθούν διάφοροι τύποι δεικτών: ακέραιοι, χαρακτήρες, απαριθµήσεις, υποδιαστήµατα (subranges) Ο αρχικός δείκτης καθορίζεται από τον προγραµµατιστή Ο τελικός δείκτης καθορίζεται επίσης από τον προγραµµατιστή: όµως το µέγεθος ενός πίνακα πρέπει να είναι γνωστό κατά το χρόνο µετάφρασης του προγράµµατος Παράδειγµα πίνακα σε Pascal type LetterCount = array['a'..'z'] of Integer; var Counts: LetterCount; begin Counts['a'] = 1 Εισαγωγή στους Τύπους 17 Εισαγωγή στους Τύπους 18 Σχεδιαστικά θέµατα σχετικά µε τα ανύσµατα Τι είδους δείκτες µπορούν να έχουν οι πίνακες; Είναι το µέγεθος των πινάκων καθορισµένο στο χρόνο µετάφρασης; Μπορεί να αλλάξει (π.χ. επεκταθεί) το µέγεθος δυναµικά; Μπορούν οι πίνακες να έχουν πολλές διαστάσεις; Είναι ένας πίνακας µε πολλές διαστάσεις ισοδύναµος µε έναν πίνακα από πίνακες; Πως διατάσσονται τα στοιχεία ενός πίνακα στη µνήµη; Οι συµβολοσειρές έχουν το δικό τους τύπο ή είναι πίνακες από bytes; Υπάρχει τύπος λίστας; Εισαγωγή στους Τύπους 19 Ενώσεις (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

6 Αυστηρότητα τύπων και ενώσεις Στην ML, το µόνο που µπορεί να κάνουµε σε µία ένωση είναι να εξάγουµε τα περιεχόµενά της Και στην περίπτωση αυτή πρέπει να πούµε τι µπορεί να γίνει µε τις τιµές ενώσεων διαφορετικών τύπων: datatype element = I of int R of real; fun getreal (R x) = x getreal (I x) = real x; Εισαγωγή στους Τύπους 21 Ενώσεις χωρίς αυστηρό σύστηµα τύπων Σε µερικές γλώσσες οι λεπτοµέρειες της υλοποίησης των ενώσεων είναι εµφανείς στον προγραµµατιστή Σε κάποιες περιπτώσεις τα προγράµµατα µπορούν να εκµεταλλευθούν το γεγονός ότι ο τύπος κάποιας τιµής χάνεται: union element { int i; double d; }; union element e; e.i = 100; double x = e.d; Εισαγωγή στους Τύπους 22 Τι λέει η 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 Υποσύνολα (subsets) Μπορούµε να ορίσουµε το υποσύνολο που ορίζεται µε βάση ένα κατηγόρηµα P : S { x X P ( x )} Κάποιες γλώσσες υποστηρίζουν υποτύπους (subtypes subtypes), µε λίγη ή περισσότερη γενικότητα = Λίγη γενικότητα: Ορισµός υποδιαστηµάτων στην Pascal type digit = 0..9; Κάµποση γενικότητα: Ορισµός υποτύπων στην Ada subtype DIGIT is INTEGER range 0..9; subtype WEEKDAY is DAY range MON..FRI; Πολλή γενικότητα: Ορισµός τύπων στη Lisp µέσω κατηγορηµάτων Εισαγωγή στους Τύπους 23 Εισαγωγή στους Τύπους 24

7 Παράδειγµα: Ada Subtypes Παράδειγµα: Ορισµός τύπων στη Lisp 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; (declare (type integer x)) (declare (type (or null cons) x)) (declare (type (and number (not integer)) x)) (declare (type (and integer (satisfies evenp)) x)) subtype DISK_UNIT is PERIPHERAL(DISK); Εισαγωγή στους Τύπους 25 Εισαγωγή στους Τύπους 26 Αναπαράσταση των τιµών ενός υποτύπου Συνήθως, ο υποτύπος χρησιµοποιεί την ίδια εσωτερική αναπαράσταση µε τον υπερτύπο (supertype) του Ερωτήσεις: Μπορεί να χρησιµοποιηθεί κάποια πιο φθηνή αναπαράσταση; Π.χ. οι δύο παρακάτω τύποι χρειάζονται τον ίδιο χώρο αποθήκευσης; X: 1..9 X: Integer? Οι υποτύποι επιβάλλονται και ελέγχονται από το µεταγλωττιστή; X := 10 X := X + 1? Λειτουργίες υποτύπων Συνήθως οι επιτρεπόµενες λειτουργίες είναι όλες οι λειτουργίες που είναι διαθέσιµες και για τον υπερτύπο Καθώς και κάποιες άλλες που δεν έχουν τόσο πολύ νόηµα στον υπερτύπο: function todigit (X: Digit) : Char; Θέμα για περισυλλογή Ένας υποτύπος είναι ένα υποσύνολο όλων των τιμών ενός υπερτύπου, αλλά συνήθως υποστηρίζει ένα υπερσύνολο από λειτουργίες. Εισαγωγή στους Τύπους 27 Εισαγωγή στους Τύπους 28

8 Κάποια λόγια για τις κλάσεις (classes) Μια από τις βασικές ιδέες του αντικειµενοστρεφούς προγραµµατισµού Μια κλάση είναι ένα είδος τύπου: κάποια δεδοµένα και οι λειτουργίες τους σε συσκευασία πακέτου Μια υποκλάση είναι ένας υποτύπος: περιλαµβάνει µόνο ένα υποσύνολο των αντικειµένων, αλλά υποστηρίζει ένα υπερσύνολο των λειτουργιών Περισσότερα για τις κλάσεις στις διαλέξεις των γλωσσών αντικειµενοστρεφούς προγραµµατισµού Συναρτήσεις (functions) Το σύνολο των συναρτήσεων µε κάποιο πεδίο ορισµού και τιµών: { f dom f = D ran f R} S = D R = = Οι περισσότερες γλώσσες υποστηρίζουν την έννοια των συναρτήσεων: ML: C: int f(char a, char b) { return a == b; } fun f(a:char, b:char) = (a = b); Εισαγωγή στους Τύπους 29 Εισαγωγή στους Τύπους 30 Λειτουργίες συναρτήσεων Φυσικά, κλήση συναρτήσεων Μέχρι στιγµής, το θεωρήσαµε ως δεδοµένο ότι οι υπόλοιποι τύποι µπορούσαν να περαστούν ως παράµετροι, να επιστραφούν ως αποτελέσµατα, να ανατεθούν σε µεταβλητές, κ.λπ. Με τις συναρτήσεις δε µπορούµε να το θεωρήσουµε ως δεδοµένο: οι περισσότερες γλώσσες δεν υποστηρίζουν κάτι περισσότερο από κλήση συναρτήσεων! Χρησιµότητα των τύπων Εισαγωγή στους Τύπους 31 Εισαγωγή στους Τύπους 32

9 Χρησιµότητα των τύπων Βοηθούν στην οργάνωση και τεκµηρίωση προγραµµάτων ιαφορετικοί τύποι για διαφορετικές έννοιες Αναπαριστάνουν έννοιες από το πεδίο του προβλήµατος Υποδηλώνουν την προτιθέµενη χρήση των µεταβλητών Οι τύποι µπορούν να ελεγχθούν αυτόµατα και να µείνουν σε συµφωνία µε αλλαγές στο πρόγραµµα, σε αντίθεση µε τα σχόλια Υποδεικνύουν και ανιχνεύουν κάποιου είδους σφάλµατα Ο έλεγχος τύπων µπορεί να ανιχνεύσει υπολογισµούς χωρίς σηµασιολογία, όπως π.χ. 3 + true - "Bill" Υποστηρίζουν τη βελτιστοποίηση (optimization) Παράδειγµα: οι short ακέραιοι αποθηκεύονται σε λιγότερα bits Αποφυγή ελέγχου εξαιρέσεων ή υπερχείλισης Σφάλµατα τύπων (type errors) Όπως είδαµε, ένας τύπος ορίζεται από: Τρόπους εισαγωγής τιµών για τον τύπο Τρόπους χρησιµοποίησης των τιµών για την παραγωγή νέων τύπων τιµών Κάτω από αυτό το πρίσµα Κάθε τύπος συσχετίζεται µε ένα σύνολο από λειτουργίες (δηλαδή, µε κάποιους τελεστές) Κάθε λειτουργία ορίζεται πάνω σε στοιχεία ενός συγκεκριµένου τύπου (δηλαδή, σε ένα συγκεκριµένο σύνολο τιµών) Ένα σφάλµα τύπου λαµβάνει χώρα όταν η λειτουργία πάει να εφαρµοστεί σε ορίσµατα εκτός του πεδίου ορισµού της (δηλαδή, σε ορίσµατα διαφορετικού τύπου) Εισαγωγή στους Τύπους 33 Εισαγωγή στους Τύπους 34 Επισηµειώσεις τύπων Εγγενείς τύποι (intrinsic types) Πολλές γλώσσες απαιτούν, ή τουλάχιστον επιτρέπουν, επισηµειώσεις τύπων σε µεταβλητές, συναρτήσεις, κ.λπ. Χρησιµοποιούνται από τον προγραµµατιστή για την παροχή στατικής πληροφορίας τύπων στο σύστηµα υλοποίησης της γλώσσας Οι επισηµειώσεις είναι επίσης ένα είδος τεκµηρίωσης, που καθιστά τα προγράµµατα πιο εύκολα αναγνώσιµα από άλλους Μέρος της σύνταξης της γλώσσας συνήθως έχει σχέση µε τον ορισµό τύπων (π.χ. *, -> και list στην ML) Κάποιες γλώσσες χρησιµοποιούν ονοµαστικές συµβάσεις για τον ορισµό των τύπων µεταβλητών Σε διαλέκτους της BASIC: S$ ορίζει µια συµβολοσειρά Σε διαλέκτους της Fortran: I ορίζει έναν ακέραιο Όπως και οι ρητές επισηµειώσεις τύπων, οι εγγενείς τύποι προµηθεύουν µε πληροφορία τύπων τόσο την υλοποίηση της γλώσσας όσο και τον αναγνώστη του προγράµµατος Εισαγωγή στους Τύπους 35 Εισαγωγή στους Τύπους 36

10 Απλός συµπερασµός τύπων Οι περισσότερες γλώσσες υλοποιούν κάποιες απλές µορφές συµπερασµού τύπων Οι σταθερές έχουν τύπο που καθορίζεται στατικά Π.χ. στη Java: Η σταθερά 10 έχει τύπο int, η 10L έχει τύπο long Οι εκφράσεις µε τη σειρά τους µπορεί να έχουν στατικά καθοριζόµενους τύπους, που συµπεραίνονται εύκολα από τους τελεστές και τους τύπους των ορισµάτων τους Π.χ. στη Java: εάν ο a είναι double, τότε η έκφραση a*0 έχει τύπο double (0.0) Έλεγχος τύπων: Στατικός και δυναµικός Η γλώσσα ML πηγαίνει την παραπάνω ιδέα στα άκρα... Εισαγωγή στους Τύπους 37 Εισαγωγή στους Τύπους 38 Έλεγχος χρόνου µετάφρασης έναντι εκτέλεσης Οι γλώσσες Lisp, Scheme, Prolog, Python ελέγχουν τους τύπους στο χρόνο εκτέλεσης του προγράµµατος Π.χ. σε µια έκφραση (car x) ελέγχουµε εάν το x είναι λίστα πριν πάρουµε το car του x Οι γλώσσες ML και Haskell ελέγχουν τους τύπους κατά το χρόνο µετάφρασης του προγράµµατος Π.χ. σε µια κλήση f(x) πρέπει να έχουµε f: A B και x : A Ένα από τα κύρια πάρε-δώσε του σχεδιασµού γλωσσών Και οι δύο τρόποι αποφεύγουν τα σφάλµατα Ο δυναµικός έλεγχος καθυστερεί την εκτέλεση Ο στατικός έλεγχος περιορίζει την εκφραστικότητα Λίστες σε Lisp: τα στοιχεία µπορούν να έχουν διαφορετικούς τύπους Λίστες σε ML: όλα τα στοιχεία πρέπει να έχουν τον ίδιο τύπο Στατικός έλεγχος τύπων Στο στατικό έλεγχο τύπων, ο τύπος της κάθε έκφρασης καθορίζεται πριν την εκτέλεση του προγράµµατος Ο µεταγλωττιστής τυπώνει µηνύµατα λάθους όταν οι τύποι που εξάγονται στατικά τον κάνουν να καταλάβει κάποια ασυνέπεια ή ασυµφωνία στη χρήση των τύπων Όσον αφορά σε τελεστές: 1 + "abc" Όσον αφορά σε συναρτήσεις: round("abc") Όσον αφορά σε εντολές της γλώσσας: if "abc" then Πολλές µοντέρνες γλώσσες προγραµµατισµού έχουν στατικά συστήµατα τύπων Εισαγωγή στους Τύπους 39 Εισαγωγή στους Τύπους 40

11 υναµικός έλεγχος τύπων (dynamic typing) Σε πολλές άλλες γλώσσες (π.χ. Lisp, Scheme, Smalltalk, Erlang, Prolog, Python, Ruby, ), τα προγράµµατα δεν ελέγχονται στατικά για πιθανά σφάλµατα τύπων Ελέγχονται όµως δυναµικά για τέτοιου είδους σφάλµατα Με άλλα λόγια, κατά το χρόνο εκτέλεσης, η υλοποίηση της γλώσσας ελέγχει ότι τα ορίσµατα των τελεστών είναι τύπων οι οποίοι είναι συµβατοί µε τους τελεστές Εισαγωγή στους Τύπους 41 Παράδειγµα: Lisp Μια συνάρτηση σε Lisp που προσθέτει δύο αριθµούς: (defun f (a b) (+ a b)) Θα εγείρει εξαίρεση εάν ο a ή ο b δεν είναι αριθµοί Κλήσεις µε ορίσµατα λάθος τύπου, π.χ. (f nil nil), δεν υποδεικνύονται κατά το χρόνο µεταγλώττισης Στο δυναµικό έλεγχο τύπων τα παραπάνω λάθη πιάνονται κατά το χρόνο εκτέλεσης του προγράµµατος Κατά κάποιο τρόπο, στις γλώσσες µε δυναµικό έλεγχο τύπων οι τύποι χρησιµοποιούνται παραπάνω από αυτές µε στατικό έλεγχο, διότι οι τύποι πρέπει να ελεγχθούν κατά το χρόνο εκτέλεσης Αυτό σηµαίνει ότι η υλοποίηση της γλώσσας πρέπει να διατηρήσει πληροφορία για τον τύπο της κάθε µεταβλητής Εισαγωγή στους Τύπους 42 Εκφραστικότητα Στη 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 Στατικός έλεγχος τύπων έναντι δυναµικού εν είναι όλα άσπρα ή µαύρα Γλώσσες µε στατικό έλεγχο τύπων πολλές φορές χρησιµοποιούν κάποιο δυναµικό έλεγχο Π.χ. λόγω της ύπαρξης υποτύπων (subtyping), ειδικά στις αντικειµενοστρεφείς γλώσσες προγραµµατισµού Π.χ. λόγω υπερφορτωµένων τελεστών Γλώσσες µε δυναµικό έλεγχο τύπων πολλές φορές χρησιµοποιούν κάποιο στατικό έλεγχο Τύποι για (µέρη) προγραµµάτων σε Lisp, µπορούν να εξαχθούν µε χρήση δηλώσεων τύπων και τοπικού συµπερασµού τύπων Πολλοί µεταγλωττιστές της Lisp χρησιµοποιούν την πληροφορία αυτή για την αποφυγή ελέγχων τύπων κατά το χρόνο εκτέλεσης και για την παραγωγή καλύτερου (ταχύτερου) κώδικα µηχανής Εισαγωγή στους Τύπους 44

12 Ρητοί έλεγχοι τύπων κατά το χρόνο εκτέλεσης Κάποιες γλώσσες επιτρέπουν στον προγραµµατιστή να ελέγξει τύπους κατά την εκτέλεση του προγράµµατος: Π.χ. η Java επιτρέπει τον έλεγχο του τύπου κάποιου αντικειµένου µε χρήση του τελεστή instanceof Π.χ. η Modula-3 επιτρέπει τη διακλάδωση (branch) µε βάση τον τύπο κάποιου αντικειµένου µε χρήση της έκφρασης typecase Τα παραπάνω απαιτούν ότι η πληροφορία για τύπους είναι παρούσα κατά το χρόνο εκτέλεσης, παρόλο που η γλώσσα έχει ως επί το πλείστον στατικό σύστηµα τύπων Εισαγωγή στους Τύπους 45 Αυστηρά και ασθενή συστήµατα τύπων Η επιδίωξη του ελέγχου των τύπων είναι η αποφυγή της εφαρµογής τελεστών σε ορίσµατα των οποίων ο τύπος δεν έχει νόηµα για το συγκεκριµένο τελεστή Σε κάποιες γλώσσες, όπως στην ML και στη Java, ο έλεγχος τύπων είναι αρκετά εξονυχιστικός και εξασφαλίζει σε µεγάλο βαθµό το παραπάνω λέµε ότι η γλώσσα έχει αυστηρό σύστηµα τύπων (strong typing) Σε πολλές γλώσσες (όπως π.χ. η C) αυτό δε συµβαίνει: το σύστηµα τύπων είναι ασθενές (weak weak) και διάτρητο Αυτό παρέχει ευελιξία στον προγραµµατιστή Αλλά δεν προσφέρει αρκετή ασφάλεια Εισαγωγή στους Τύπους 46 Σχετική ασφάλεια τύπων των γλωσσών Μη ασφαλείς: Η οικογένεια BCPL συµπεριλαµβανοµένης της C και της C++ Σουλουπώµατα τύπων (type casts), αριθµητική µε δείκτες, Περίπου ασφαλείς: Η οικογένεια της Algol, Pascal, Ada Ξεκρέµαστοι δείκτες έσµευσε ένα δείκτη p σε έναν ακέραιο, αποδέσµευσε τη µνήµη που δείχνει ο p, και στη συνέχεια χρησιµοποίησε την τιµή που δείχνει ο p Καµία γλώσσα µε ρητή αποδέσµευση µνήµης δεν προσφέρει πλήρη ασφάλεια τύπων! Ασφαλείς: Η οικογένεια της Lisp, η ML, η Smalltalk, και οι Java, C# Lisp, Scheme, Smalltalk, Prolog, Erlang: γλώσσες δυναµικών τύπων ML, Haskell, Java, C#: γλώσσες στατικών τύπων (statically typed) Εισαγωγή στους Τύπους 47 Εργαλεία στατικής ανάλυσης προγραµµάτων Τοµέας µε αρκετή ερευνητική δραστηριότητα πρόσφατα Lint, Purify, Coverity, PreFix, PreFast, Dialyzer, Valgrind, ύο κατηγορίες ανάλυσης Συντηρητικές (= Sound for correctness) Εάν η ανάλυση πει ότι το πρόγραµµα είναι σωστό, τότε είναι Εάν η ανάλυση πει όχι σωστό, µπορεί να µην υπάρχουν λάθη Μη συντηρητικές (= Sound for errors) Εάν η ανάλυση πει σωστό, το πρόγραµµα µπορεί να είναι εσφαλµένο Εάν η ανάλυση βρει κάποιο πρόβληµα, τότε όντως υπάρχει κάποια ανωµαλία στο πρόγραµµα Μια καλύτερη κατηγοριοποίηση, κατά τη γνώµη µου: Συντηρητικά εργαλεία χρειάζονται για απόδειξη ορθότητας Μη συντηρητικά εργαλεία για εύρεση σφαλµάτων (bug finding) Εισαγωγή στους Τύπους 48

13 Ισοδυναµία τύπων Πότε δύο τύποι θεωρούνται ίδιοι; Θέµατα ισοδυναµίας τύπων Σηµαντική ερώτηση τόσο για το στατικό όσο και για το δυναµικό έλεγχο τύπων Για παράδειγµα, η γλώσσα µπορεί να επιτρέπει µια ανάθεση a := b µόνο εάν η µεταβλητή b έχει τον ίδιο τύπο µε την a ιαφορετικές γλώσσες ορίζουν την ισοδυναµία των τύπων µε διαφορετικούς τρόπους Εισαγωγή στους Τύπους 49 Εισαγωγή στους Τύπους 50 Ισοδυναµίες τύπων Ισοδυναµία ονόµατος (name equivalence): δύο τύποι είναι ίδιοι αν και µόνο αν έχουν το ίδιο όνοµα Ισοδυναµία δοµής (structural equivalence): δύο τύποι είναι ίδιοι αν και µόνο αν έχουν προκύψει από τους ίδιους πρωτόγονους τύπους µε χρήση της ίδιας σειράς ίδιων κατασκευαστών τύπων (Οι παραπάνω, δεν είναι οι µόνοι τρόποι ορισµού της ισοδυναµίας αλλά είναι οι πιο εύκολοι να εξηγηθούν.) Παράδειγµα ισοδυναµίας τύπων type irpair1 = int * real; type irpair2 = int * real; fun f(x:irpair1) = #1 x; Τι συµβαίνει εάν περάσουµε ως όρισµα στην f µια παράµετρο τύπου irpair2; Η ισοδυναµία ονόµατος δεν το επιτρέπει: irpair2 και irpair1 είναι διαφορετικά ονόµατα Η ισοδυναµία δοµής το επιτρέπει: οι τύποι κατασκευάζονται µε τον ίδιο τρόπο Στην ML επιτρέπεται Εισαγωγή στους Τύπους 51 Εισαγωγή στους Τύπους 52

14 Παράδειγµα ισοδυναµίας τύπων var Counts1: array['a'..'z'] of Integer; Counts2: array['a'..'z'] of Integer; Τι συµβαίνει εάν προσπαθήσουµε να αναθέσουµε τον πίνακα Counts1 στον πίνακα Counts2; Η ισοδυναµία ονόµατος δεν το επιτρέπει: οι τύποι των πινάκων Counts1 και Counts2 δεν έχουν ονόµατα Η ισοδυναµία δοµής το επιτρέπει: οι τύποι κατασκευάζονται µε τον ίδιο τρόπο Οι περισσότερες υλοποιήσεις της Pascal δεν επιτρέπουν την παραπάνω ανάθεση Συµπερασµατικά Οι τύποι παίζουν σηµαντικό ρόλο σε πολλές από τις γλώσσες προγραµµατισµού Για την οργάνωση και την τεκµηρίωση ενός προγράµµατος Για την αποφυγή σφαλµάτων λογισµικού Για την παροχή πληροφορίας στο µεταγλωττιστή της γλώσσας Εισαγωγή στους Τύπους 53 Εισαγωγή στους Τύπους 54 Βασική ερώτηση για τα συστήµατα τύπων Πόσο µέρος της αναπαράστασης κάνει το σύστηµα τύπων εµφανές στον προγραµµατιστή; Μερικοί προγραµµατιστές προτιµούν γλώσσες σαν τη C, διότι Προσφέρουν τη δυνατότητα για απ ευθείας προσπέλαση στη λεπτοµερή αναπαράσταση των τύπων όταν για κάποιο λόγο αυτό είναι επιθυµητό Μερικοί άλλοι προτιµούν γλώσσες σαν την ML, διότι Κρύβουν τις λεπτοµέρειες της υλοποίησης των τύπων και Προσφέρουν καθαρούς τρόπους χρησιµοποίησης δεδοµένων που επιτρέπουν την ανάπτυξη προγραµµάτων χωρίς σφάλµατα κάποιου είδους, και διευκολύνουν την απόδειξη της ορθότητάς τους Εισαγωγή στους Τύπους 55

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

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

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

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

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

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

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

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

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

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

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

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

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου)

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου) ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου) 1. Εισαγωγή Χαρακτηριστικά της γλώσσας Τύποι δεδοµένων Γλώσσα προγραµµατισµού

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

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

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

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

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

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

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

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού ( Απαντήσεις & Λύσεις Βιβλίου) 1. Σκοποί κεφαλαίου Κύκλος ανάπτυξης προγράµµατος Κατηγορίες γλωσσών προγραµµατισµού

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

a = 10; a = k; int a,b,c; a = b = c = 10;

a = 10; a = k; int a,b,c; a = b = c = 10; C: Από τη Θεωρία στην Εφαρµογή Κεφάλαιο 4 ο Τελεστές Γ. Σ. Τσελίκης Ν. Δ. Τσελίκας Ο τελεστής εκχώρησης = Ο τελεστής = χρησιµοποιείται για την απόδοση τιµής (ή αλλιώς ανάθεση τιµής) σε µία µεταβλητή Π.χ.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Περιεχόµενα. Ανασκόπηση - Ορισµοί. Ο κύκλος ανάπτυξης προγράµµατος. Γλώσσες Προγραµµατισµού Ασκήσεις

Περιεχόµενα. Ανασκόπηση - Ορισµοί. Ο κύκλος ανάπτυξης προγράµµατος. Γλώσσες Προγραµµατισµού Ασκήσεις Προγραµµατισµός Η/Υ Ανασκόπηση - Ορισµοί Περιεχόµενα Ο κύκλος ανάπτυξης προγράµµατος Περιγραφή προβλήµατος Ανάλυση προβλήµατος Λογικό ιάγραµµα Ψευδοκώδικας Κωδικοποίηση Συντήρηση Γλώσσες Προγραµµατισµού

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

Συμπερασμός Τύπων και Πολυμορφισμός 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Οι δείκτες στη γλώσσα C

Οι δείκτες στη γλώσσα C Οι δείκτες στη γλώσσα C Δείκτης είναι µία µεταβλητή η οποία περιέχει σαν τιµή µία διεύθυνση της µνήµης Η τιµή ενός δείκτη δείχνει σε µία άλλη µεταβλητή, η οποία µπορεί να προσεγγισθεί έµµεσα µε τους ειδικούς

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

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

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

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

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

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

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

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

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

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

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

Συμπερασμός Τύπων και Συμπερασμός Τύπων και Πολυμορφισμός Εισαγωγή: γή Σύγκριση μεταξύ γλωσσών 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

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

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

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

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

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

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

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

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

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

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

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004)

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004) 8 ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004) ιάλεξη 2 2.1 ΜΕΤΑΒΛΗΤΕΣ (ΜΕΡΟΣ Β) Στην προηγούµενη διάλεξη µάθαµε ότι µπορούµε να χρησιµοποιούµε τη ρητή ή την αυτονόητη δήλωση µεταβλητών

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

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

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

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

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ ΕΡΓΑΣΤΗΡΙΟ ΒΑΣΕΩΝ Ε ΟΜΕΝΩΝ ΜΕΡΟΣ ΠΕΜΠΤΟ Triggers, Stored procedures Γιώργος Μαρκοµανώλης Περιεχόµενα Triggers-Ενηµέρωση δεδοµένων άλλων πινάκων... 1 Ασφάλεια...

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

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι 1 ΕΙΣΑΓΩΓΗ Η γλώσσα προγραµµατισµού Java είναι ισχυρά τυποποιηµένη (strongly typed), που σηµαίνει ότι κάθε µεταβλητή και κάθε έκφραση έχει κάποιο τύπο, ο οποίος πρέπει να είναι γνωστός κατά το χρόνο της

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

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; Αλλά στις μοντέρνες γλώσσες προγραμματισμού,

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

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

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

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

Τι σημαίνουν οι τύποι συναρτήσεων στην 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 ατέρμονη εκτέλεση η εκτέλεση τερματίζει εγείροντας κάποια εξαίρεση Με λόγια: εάν η αποτίμηση

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C Εισαγωγή στην C Μορφή Προγράµµατος σε γλώσσα C Τµήµα Α Με την εντολή include συµπεριλαµβάνω στο πρόγραµµα τα πρότυπα των συναρτήσεων εισόδου/εξόδου της C.Το αρχείο κεφαλίδας stdio.h είναι ένας κατάλογος

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

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

Συμπερασμός Τύπων και Συμπερασμός Τύπων και Πολυμορφισμός Εισαγωγή: Σύγκριση μεταξύ γλωσσών 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

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

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

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

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

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011 Εισαγωγή στον Προγραµµατισµό Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011 Hello World /* Αρχείο hello.c * Εµφανίζει στην οθόνη το * µήνυµα hello world */ #include

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

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

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

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

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

Συμπερασμός Τύπων και Πολυμορφισμός Συμπερασμός Τύπων και Πολυμορφισμός Εισαγωγή: Σύγκριση μεταξύ γλωσσών 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

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

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Κλάσεις.

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Κλάσεις. 1 Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) ηµήτριος Κατσαρός, Ph.D. Χειµώνας 2005 ιάλεξη 5η Ιστοσελίδα του µαθήµατος 2 http://skyblue.csd.auth.gr/~dimitris/courses/cpp_fall05.htm Θα

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

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

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

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

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

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

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

Κλάσεις και Αντικείµενα

Κλάσεις και Αντικείµενα Κλάσεις και Αντικείµενα Γρηγόρης Τσουµάκας Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης Κλάσεις και Αντικείµενα 2 Τα αντικείµενα σε µια αντικειµενοστρεφή γλώσσα προγραµµατισµού, µοντελοποιούν

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

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

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

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

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

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

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

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

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

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

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

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

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

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι Εισαγωγή Στον Προγραµµατισµό «C» Πίνακες Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Νικόλαος Δ. Τσελίκας Νικόλαος Προγραµµατισµός Δ. Τσελίκας Ι Πίνακες στη C Ένας πίνακας στη C είναι

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

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

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

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

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

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

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

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

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

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

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 γλώσσα (ο τύπος μιας μεταβλητής αλλάζει ακολουθώντας τον τύπο της τιμής που κάθε φορά αποθηκεύεται

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

Προγραµµατιστικές τεχνικές

Προγραµµατιστικές τεχνικές Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Αγρονόµων Τοπογράφων Μηχανικών Προγραµµατιστικές τεχνικές Βασίλειος Βεσκούκης ρ. Ηλεκτρολόγος Μηχανικός & Μηχανικός Υπολογιστών ΕΜΠ v.vescoukis@cs.ntua.gr Ρωµύλος Κορακίτης

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

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

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

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

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

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

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

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

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

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

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

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

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

Συµπερασµός Τύπων και Πολυµορφισµός. Συµπερασµός Τύπων και Πολυµορφισµός. Εισαγωγή: Σύγκριση µεταξύ γλωσσών. Περιεχόµενα.

Συµπερασµός Τύπων και Πολυµορφισµός. Συµπερασµός Τύπων και Πολυµορφισµός. Εισαγωγή: Σύγκριση µεταξύ γλωσσών. Περιεχόµενα. Συµπερασµός Τύπων και Πολυµορφισµός Εισαγωγή: Σύγκριση µεταξύ γλωσσών 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

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

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

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

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

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

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

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

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

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

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

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) ηµήτριος Κατσαρός, Ph.D. Χειµώνας 2005 ιάλεξη 5η Ιστοσελίδα του µαθήµατος http://skyblue.csd.auth.gr/~dimitris/courses/cpp_fall05.htm Θα τοποθετούνται

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

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

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

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

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

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

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

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

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

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

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

Βασικά στοιχεία της Java Βασικά στοιχεία της Java προτάσεις, εκφράσεις, µεταβλητές, σταθερές, τελεστές Ορισµοί Πρόταση (statement) είναι µία απλή εντολή σε µία γλώσσα προγραµµατισµού. Γιαπαράδειγµα: int x=12; Έκφραση (expression)

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

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

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

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

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) 1 Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) ηµήτριος Κατσαρός, Ph.D. Χειµώνας 2005 ιάλεξη 6η: Ερωτήσεις 2 Ιστοσελίδα του µαθήµατος http://skyblue.csd.auth.gr/~dimitris/courses/cpp_fall05.htm

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

Η γλώσσα 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 σημαίνει: Για

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

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

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

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

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

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

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

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

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

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

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

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

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

Εγγραφές Δραστηριοποίησης

Εγγραφές Δραστηριοποίησης Εγγραφές Δραστηριοποίησης Ερώτηση για δέσιμο Κατά την εκτέλεση του προγράμματος, οι μεταβλητές δένονται (δυναμικά) με τιμές Οι τιμές αυτές πρέπει να αποθηκευτούν κάπου Κατά συνέπεια, οι μεταβλητές πρέπει

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

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

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

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

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

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

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

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2) Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Οργάνωση Προγράµµατος Header Files Μετάφραση και σύνδεση αρχείων προγράµµατος ΕΠΛ 132 Αρχές Προγραµµατισµού

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

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor ΕισαγωγήστουςΗ/Υ PHP Hypertext Preprocessor ΤιείναιηPHP; PHP είναιµία server-based scripting language σχεδιασµένη ειδικά για το web. Σε µία html σελίδα µπορούµε να ενσωµατώσουµε php κώδικα που εκτελείται

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

οµές (structures) και Eνώσεις (unions)

οµές (structures) και Eνώσεις (unions) οµές (structures) και Eνώσεις (unions) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: οµές, φωλιασµένες δοµές, τρόποι δήλωσης δοµών, δοµές ως παράµετροι σε συναρτήσεις, δείκτες σε δοµές, χρήση

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

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

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

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

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

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

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

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΜΟΣ Εντολές επιλογής και αποφάσεων 1 ο Φύλλο Εργασιών Εισαγωγικές ασκήσεις για την εντολή if ΑΠΑΝΤΗΣΕΙΣ

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΜΟΣ Εντολές επιλογής και αποφάσεων 1 ο Φύλλο Εργασιών Εισαγωγικές ασκήσεις για την εντολή if ΑΠΑΝΤΗΣΕΙΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΜΟΣ Κεφάλαιο 10 : Εντολές επιλογής και αποφάσεων 1 ο Φύλλο Εργασιών Εισαγωγικές ασκήσεις για την εντολή if ΑΠΑΝΤΗΣΕΙΣ 1. Ποιες από τις παρακάτω εντολές είναι σωστές; α) if A + B

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