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

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

ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:

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


Παρουσίαση με θέμα: "ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:"— Μεταγράφημα παρουσίασης:

1 ΛΟΓ102: Τεχνολογία Λογισμικού Ι nickie@softlab.ntua.gr Διδάσκων: Νίκος Παπασπύρου http://www.softlab.ntua.gr/~nickie/TUC/log102/ 1Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Διαφάνειες παρουσίασης #8 4 Εισαγωγή 4 Αφηρημένοι τύποι δεδομένων 4 Παραδείγματα 4 Συμβολοσειρές

2 2Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Εισαγωγή(i) u Τύποι δεδομένων στη C int double typedef struct { double re, im; } complex; u Χρησιμότητα των τύπων δεδομένων l Δημιουργία μεταβλητών complex c; l Χρήση με τη βοήθεια πράξεων c = cadd(c1, c2);

3 3Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Εισαγωγή(ii) u Αφαίρεση δεδομένων (data abstraction) l Διαχωρισμός ιδιοτήτων και υλοποίησης l Ιδιότητες ενός τύπου δεδομένων είναι ο τρόπος με τον οποίο δημιουργεί κανείς μεταβλητές και ο τρόπος με τον οποίο τις χρησιμοποιεί l Σύνταξη και σημασιολογία των ιδιοτήτων l Υλοποίηση ενός τύπου δεδομένων είναι ο συγκεκριμένος τρόπος με τον οποίο προγραμματίζονται οι διάφορες πράξεις που μπορεί κανείς να εφαρμόσει

4 4Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Εισαγωγή(ii) u Διαφορετικές δυνατές υλοποιήσεις l Μιγαδικοί αριθμοί: καρτεσιανές συντεταγμένες typedef struct { double re, im; } complex; complex cadd (complex c1, complex c2) { complex result; result.re = c1.re + c2.re; result.im = c1.im + c2.im; return result; }

5 5Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Εισαγωγή(iii) l Μιγαδικοί αριθμοί: πολικές συντεταγμένες typedef struct { double norm, angle; } complex; complex cadd (complex c1, complex c2) { double x = c1.norm * cos(c1.angle) + c2.norm * cos(c2.angle); double y = c1.norm * sin(c1.angle) + c2.norm * sin(c2.angle); complex result; result.norm = sqrt(x*x + y*y); result.angle = atan2(y, x); return result; }

6 6Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Εισαγωγή(iv) u Οι λεπτομέρειες υλοποίησης επηρεάζουν τις επιδόσεις των προγραμμάτων u Είναι συχνή επομένως η αλλαγή τρόπου υλοποίησης κάποιου τύπου δεδομένων u Η αφαίρεση δεδομένων ελαχιστοποιεί τις αλλαγές που απαιτούνται στο πρόγραμμα που χρησιμοποιεί έναν τύπο δεδομένων, όταν αλλάξει ο τρόπος υλοποίησης

7 7Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Αφηρημένοι τύποι δεδομένων u Αφηρημένος τύπος δεδομένων – ΑΤΔ (abstract data type) l καθορίζει τις ιδιότητες του τύπου δεδομένων l δεν εξαρτάται από την υλοποίησή του u Αλγεβρικός ορισμός ΑΤΔ l σύνταξη: όνομα του τύπου και επικεφαλίδες των πράξεων l σημασιολογία: κανόνες που περιγράφουν τη λειτουργία των πράξεων

8 8Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Παράδειγμα ΑΤΔ: Λογικές τιμές(i) u Σύνταξη Όνομα τύπου: boolean l Επικεφαλίδες πράξεων: const boolean true, false; boolean band (boolean x, boolean y); boolean bor (boolean x, boolean y); boolean bnot (boolean x); T if_then_else (boolean x, T a, T b); Η επικεφαλίδα της if_then_else πρέπει να ορίζεται για κάθε τύπο Τ. Η υλοποίησή της δεν μπορεί να γίνει με συνάρτηση.

9 9Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Παράδειγμα ΑΤΔ: Λογικές τιμές(ii) u Σημασιολογία Αξιωματικός ορισμός band : band(true, y) = y band(false, y) = false Αξιωματικός ορισμός bor : bor(true, y) = true bor(false, y) = y Αξιωματικός ορισμός bnot : bnot(true) = false bnot(false) = true Αξιωματικός ορισμός if_then_else : if_then_else(true, a, b) = a if_then_else(false, a, b) = b

10 10Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Παράδειγμα ΑΤΔ: Λογικές τιμές(iii) u Μια δυνατή υλοποίηση typedef unsigned char boolean; const boolean true = 1, false = 0; boolean band (boolean x, boolean y) { return x && y; } boolean bor (boolean x, boolean y) { return x || y; } boolean bnot (boolean x) { return !x; } #define if_then_else(x, a, b) \ ((x) ? (a) : (b))

11 11Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Παράδειγμα ΑΤΔ: Σύνολα(i) u Σύνταξη Όνομα τύπου: set (σύνολα ακεραίων) l Επικεφαλίδες πράξεων: const set empty; set add (int x, set s); boolean member (int x, set s); set union (set s1, set s2); boolean subset (set s1, set s2); boolean equal (set s1, set s2);

12 12Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Παράδειγμα ΑΤΔ: Σύνολα(ii) u Σημασιολογία Αξιωματικός ορισμός member : member(x, empty) = false member(x, add(x, s)) = true member(x, add(y, s)) = member(x, s) αν x != y Αξιωματικός ορισμός union : union(empty, s) = s union(add(x, s1), s2) = add(x, union(s1, s2))

13 13Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Παράδειγμα ΑΤΔ: Σύνολα(iii) u Σημασιολογία Αξιωματικός ορισμός subset : subset(empty, s) = true subset(add(x, s1), s2) = band(member(x, s2), subset(s1, s2)) Αξιωματικός ορισμός equal : equal(s1, s2) = band(subset(s1, s2), subset(s2, s1))

14 14Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι ΑΤΔ: Συμβολοσειρές(i) u Σύνταξη Όνομα τύπου: string l Επικεφαλίδες πράξεων: string stringMake (const char * n); const char * stringGet (string s); void stringCopy (string * s1, string s2); string stringDuplicate (string s); string stringConcat (string s1, string s2); int stringCompare (string s1, string s2);

15 15Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι ΑΤΔ: Συμβολοσειρές(ii) u Σύνταξη (συνέχεια) l Επικεφαλίδες πράξεων: int stringLength (string s); char stringIndex (string s1, int index); string stringPart (string s, int start, int length); string stringUpperCase (string s); void stringPrint (string s);

16 16Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι ΑΤΔ: Συμβολοσειρές(iii) u Σημασιολογία (άτυπη: με λόγια) stringMake, stringGet : μετατρέπουν const char * σε string και αντίστροφα stringDestroy(s) : καταστρέφει τη συμβολοσειρά s. stringDuplicate(s) : επιστρέφει ένα αντίγραφο της s. stringConcat(s1, s2) : επιστρέφει μια συμβολοσειρά που περιέχει τη συνένωση των περιεχομένων των s1 και s2.

17 17Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι ΑΤΔ: Συμβολοσειρές(iv) u Σημασιολογία (συνέχεια) stringCompare(s1, s2) : συγκρίνει τα περιεχόμενα των s1 και s2 λεξικογραφικά. stringLength(s) : επιστρέφει το μήκος της συμβολοσειράς s σε χαρακτήρες. stringIndex(s, i) : επιστρέφει τον i -οστό χαρακτήρα της συμβολοσειράς s. stringPart(s, i, l) : επιστρέφει το τμήμα της συμβολοσειράς s που αρχίζει στον i -οστό χαρακτήρα και έχει μήκος l.

18 18Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι ΑΤΔ: Συμβολοσειρές(v) u Σημασιολογία (συνέχεια) stringUpperCase(s) : επιστρέφει μια συμβολοσειρά με τα περιεχόμενα της s, όπου όμως τα μικρά γράμματα έχουν αντικατασταθεί με κεφαλαία. stringPrint(s) : εκτυπώνει τα περιεχόμενα της συμβολοσειράς s.


Κατέβασμα ppt "ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:"

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


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