ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ και Τεχνικές Προγραμματισμού http://eclass.di.uoa.gr/d419/ Τμήμα Αρτίων ΑΜ Αίθουσα A2 Τετάρτη 11-13 και Πέμπτη 11-13 Περίγραμμα Διαδικαστικά (Εργασίες, Εξετάσεις, κλπ) Ένταξη στο Πρόγραμμα Σπoυδών Αντικείμενο μαθήματος Διευκρινίσεις/Ερωτήσεις Γιάννης Κοτρώνης domes@di.uoa.gr Διαδικαστικά Υλικό (διαφάνειες, εργασίες, εργαστήρια, κλπ) και επικοινωνία μέσω eclass(εγγραφή) Email domes@di.uoa.gr Μερικά μαθήματα «φροντιστηριακά» με επιδείξεις προγραμμάτων. Εργαστήρια (5δύωρα σε ομάδες των 40) Επιδείξεις αλγορίθμων (προσομοιώσεις, κλπ) Βοηθητικό Υλικό Εργαστήρια Τεχνικών Προγραμματισμού Διδάσκων κ. Σαράντης Πασκαλής Στα Εργαστήρια PC(20 σε λειτουργία) 6Τμήματα των 40 ατόμων (2 ανά PC) Κάθε Τμήμα θα κάνει 5 δύωρα Εργαστήρια, ένα ανά 2 εβδομάδες Έχουν ανακοινωθεί ημέρες/ώρες. Επιλογή Τμήματος μέσω eclass. 1
Εργαστήρια Υποστήριξης Πριν από κάθε εργαστήριο θα σας δίδεται υλικό σχετικό με τεχνικές προγραμματισμού για μελέτη. Στο εργαστήριο θα εφαρμόζετε τις τεχνικές αυτές. Ζητάτε βοήθεια, διεκρινίσεις, κλπ Παρουσία υποχρεωτική Άμεση Αξιολόγηση 10% στον τελικό (2% κάθε εργαστήριο) Βαθμολογικά Τρεις ατομικές εργασίες. Συμμετοχή στον τελικό βαθμό 40% (10%-20%-10%). Αντιγραφή αποκλεισμός από μάθημα. Γλώσσα Υλοποίησης η C Γραπτή εξέταση 50% Εργαστήρια 10% Οι Εργασίες και Εργαστήρια μπορούν να κρατηθούν για το επόμενο έτος στο σύνολό τους εφόσον έχουν βαθμολογηθεί με >= 75%. Υποχρεωτικό Μάθημα Βασικός Κύκλος Σπουδών 7 μονάδες ECTS (European Credit Transfer and Accumulation System) 1 μονάδααντιστοιχεί σε 25 ώρες φοιτητή 7 * 25 = 175 ώρες συνολικής απασχόλησης 52 ώρες διαλέξεων (4 ώρες * 13 εβομάδες-φπ) 60 ώρες μελέτη θεωρίας 10 ώρες εργαστηρίων (2 ώρες * 5 εργαστήρια-φπ) 5 ώρες μελέτη εργαστηρίων (1 ώρα μελέτη*5 εργαστ.) 8, 25, 15 ώρες για Άσκηση 1, 2, 3 αντίστοιχα Σημαντικό Μάθημα Ουσιαστικό Προαπαιτούμενο σε όλα τα προγραμματιστικά μαθήματα και όχι μόνο. Βασική Γνώση στην Πληροφορική! Τυπικό Προαπαιτούμενο σε Κ22 Λειτουργικά Συστήματα (5 ο εξ) Κ24 Προγραμματισμός Συστήματος (6 ο εξ.) Κ31 Μεταγλωττιστές (6 ο εξ.) ΘΠ01 Αρχές Γλώσσών Προγραμματισμού(5 ο εξ.) ΥΣ02 Τεχνητή Νοημοσύνη (5 ο εξ.) 2
Αναζήτηση Αρχών στην Πληροφορική (Αφαίρεση- Απεικόνιση ) Δύσκολη Πρόβλεψη για το μέλλον Όμως η Ανασκόπηση βοηθά Π.χ. Hardware Παρελθόν (ηλεκτρομηχανικά συστήματα, λυχνίες, transistors, chips) Μέλλον ;; (κβαντομηχανικοί; Οπτικοί; Βιολογικοί;...) Επιβίωση Αρχών (1) Παρόλες τις αλλαγές στο H/W οι βασικές εντολές μηχανής απόδοση τιμής, test, branch, τα βασικά δομικά στοιχεία δεδομένων Bits, bytes, words παρέμειναν τα ίδια. Οι νόμοι της αριθμητικής και λογικής παρέμειναν αναλλοίωτοι Επιβίωση Αρχών (2) Ότι έχει αναπτυχθεί πάνω από αναλλοίωτα στοιχεία επιβιώνει Γλώσσες Προγραμματισμού (Cobol, Fortran, Lisp, C, Pascal). Οι μεταγλωττιστές τους αποδείχτηκαν μεταφέρσιμοι. Οι βασικές αρχές οργάνωσης τους (αλγόριθμοι, δομές δεδομένων) παρέμειναν ίδιες. Επιβίωσαν επειδή είχαν σωστό επίπεδο αφαίρεσης Η αρχή της Αφαίρεσης Κρατάμε μόνο τα χαρακτηριστικά από αντικείμενα που μας ενδιαφέρουν Αγνοούμε δευτερεύοντα χαρακτηριστικά ιδιαίτερα για το κάθε αντικείμενο. Δεν είναι πάντα τα ίδια χαρακτηριστικά Π.χ. «Αυτοκίνητο» Πάρκινγκ αριθμός κυκλοφορίας αυτοκινήτου Υπουργείο Συγκοινωνιών Πολλά άλλα στοιχεία, Προσωπικά στοιχεία «πόσα καίει», service, ΚΤΕΟ κλπ 3
Οι σωστές Αφαιρέσεις επιβιώνουν Αφαιρέσεις που επέδειξαν Αξία και Χρησιμότητα στο χρόνο (παρόλες τις αλλαγές) τις δεχόμαστε ως θεμελιώδεις Πληροφορική (μια άποψη): Η αναζήτηση θεμελιακών αρχών υπολογισμού και η εφαρμογή τους. Αρχές Δόμησης Λογισμικού Τι άλλες αρχές μπορούμε να «ανακαλύψουμε»; Π.χ. Αεροπορικές Πτήσεις Πτήσεις, Ημερομηνίες, κρατήσεις Αρχεία, Πίνακες, λίστες, εγγραφές, συμβολοσειρές Η ανάπτυξη προγραμμάτων εμπεριέχει την Απεικόνιση οντοτήτων, αντικειμένων, και συμπεριφοράς που απαιτούνται από την εφαρμογή χρησιμοποιώντας βασικά στοιχεία. Ο Υπολογιστής είναι μια μηχανή απεικόνισης (Εικονική Πραγματικότητα;) Bits, bytes, ακολουθίες λέξεων Γιατί ενδιάμεσα επίπεδα; Αφού τελικά όλα καταλήγουν σε «bits» και «bytes» Οι απαντήσεις είναι ακριβώς οι λόγοι ύπαρξης του μαθήματος και είναι πρωταρχικής σημασίας στην Πληροφορική. Στόχος η ανάπτυξη αξιόπιστων, αποδοτικών συστημάτων με ταχύτητα και οικονομία Λόγοι για ενδιάμεσα επίπεδα Οικονομία. Κτίζουμε συστήματα από έτοιμα συστατικά (επαναχρησιμοποίηση) Καλύτερη Διαχείριση. Διασπούμε ένα μεγάλο πρόβλημα σε μικρότερα μέρη. Ιδανικά τα μέρη είναι υποσυστήματα που αλληλοεπιδρούν απλά, σύντομα και με διαυγή τρόπο. Υψηλή χρηστικότητα. Άθροιση εμπειρίας σε επιλογές ενδιάμεσων δομών. 4
Αφαιρετικοί Τύποι Δεδομένων (ΑΤΔ) Στην Πληροφορική έχουμε πλήθος ενδιάμεσων Δομών Δεδομένων (συμβολοσειρές, πίνακες, εγγραφές, λίστες, δένδρα, ουρές, στοίβες, γράφους). Ο ΑΤΔ αναφέρεται στον τρόπο που «περιτυλίγουμε» (ορίζουμε και υλοποιούμε) τα Δεδομένα μαζί με τις επιτρεπτές πράξεις σε αυτά σε μια χρήσιμη ενότητα. Οι ΑΤΔ έχουν καθαρές διεπαφές («Τι κάνει») και χαμηλού επιπέδου απεικονίσεις («Πώς το κάνει»). Σας θυμίζει κάτι; (τύποι δεδομένων, συναρτήσεις) Τι και Πώς (τύποι δεδομένων) Τύπος: intx Τι ορίζει; Τιμές (minint..maxint) και Πράξεις(+, -, *, /, ) Πώς το υλοποιεί; Μέγεθος μνήμης (2, 4 bytes) Δυαδική Απεικόνιση (σε συμπλήρωμα ως προς 2) Όρια απεικόνισης (-2 16 έως 2 16-1) Πρόσθεση στην απεικόνιση (x=maxint +1) Τι και Πώς (συναρτήσεις) Το μεγαλύτερο πλεονέκτημα τους η αφαίρεση Τι κάνoυν; int search(int *Table, int limit; int key) Πώς το υλοποιούν; int search(int * Table, int limit, int key) { int i; for (i=0; i < limit ; i++) if (Table[i]== key) break; return i; } Πολυπλοκότητα Αλγορίθμων Οι πράξεις των ΑΤΔ υποστηρίζονται από συναρτήσεις-αλγορίθμους. Η έννοια της πολυπλοκότητας των αλγορίθμων είναι σημαντική και θα μας απασχολήσει. «Πόσο αποδοτικός είναι;» Εκφράζουμε αυτή την πολυπλοκότητα με μαθηματικούς τύπους Κριτήρια μνήμης ταχύτητας (συμβιβασμοί) 5
Y = A x Πολυπλοκότητα Αλγορίθμων ο συμβολισμός Ο( ) Χρόνος Ο(n 3 ) Ο(n 2 ) Ο(n) Ο(log 2 n) Μέγεθος προβλήματος n Κύριο Αντικείμενο ΑΤΔ και Υλοποιήσεις στην C Boolean Στοίβα (Stack) Ουρά (Queue) Λίστες (Lists) Δένδρα (Trees) Γραφήματα (Graphs) Εξίσου Σημαντικοί Άξονες (1) Εργαστήρια Προγραμματισμός Εμπέδωση, εμβάθυνση στην C Π.χ. Δυναμική Διαχείριση Μνήμης-δείκτες, Αναδρομή Τεχνικές Προγραμματισμού Ενότητες (modules.h +.c) Δοκιμή και Εκσφαλμάτωση 6
Εξίσου Σημαντικοί Άξονες (2) Εισαγωγή στην Αξιολόγηση Αλγορίθμων Πολυπλοκότητα Χρόνου-Μνήμης Γενικές Αρχές Πληροφορικής Απεικόνιση-Αφαίρεση Διεπαφές-Απόκρυψη Πληροφορίας Επαναχρησιμοποίηση Κώδικα κλπ 7