Παράκαμψη προς το κυρίως περιεχόμενο

CSE 229 Βιοπληροφορική

Στόχοι Μαθήματος: Οι φοιτητές θα πρέπει να αφομοιώσουν τις απαραίτητες θεωρητικές και πρακτικές γνώσεις σχετικά με τις διάφορες πτυχές της βιοπληροφορικής. Εισαγωγή στην Εμβιομηχανική και στη Βιοπληροφορική. Στατιστική σημασία των αποτελεσμάτων ευθυγράμμισης. Αναζήτηση βάσεων δεδομένων για παρόμοιες ακολουθίες, αποτελεσματικότητα σχετικών αλγορίθμων. Στατιστική ανάλυση πειραματικών δεδομένων μικροσυστοιχίας DNA. Ειδικά θέματα περιλαμβάνουν, εμβιομηχανική και βιοϋλικά, βιοεπεξεργασία και τηλεϊατρική, βιοϊατρικά όργανα, επεξεργασία σήματος και τρόπους απεικόνισης. Εισαγωγή στην αναδυόμενη βιομηχανία ιατροτεχνολογικών προϊόντων. Απεικόνιση με υπερηχογράφημα, ακτινογραφία, αξονική τομογραφία, μαγνητική τομογραφία και τομογραφία εκπομπής ποζιτρονίων (PET). Ο ρόλος των ακτίνων λέιζερ στη χειρουργική. Ενδοσκόπηση και θεραπείες με τη βοήθεια ενδοσκόπησης. Καρδιακές συσκευές (π.χ. βηματοδότες). Αρχές του νευρικού συστήματος. Κατανόηση του ηλεκτροκαρδιογραφήματος, του ηλεκτροεγκεφαλογράμματος και του ηλεκτρομυογράμματος. Αρχές του νευρικού συστήματος. Κατανόηση του ηλεκτροκαρδιογραφήματος, του ηλεκτροεγκεφαλογράμματος και του ηλεκτρομυογράμματος. Αρχές ακτινοθεραπείας, τηλεματικής στην υγειονομική περίθαλψη. Θεραπευτικό υπερηχογράφημα και εφαρμογές θεραπειών με χρήση θερμικής ακτινοβολίας. Αλγόριθμοι στοίχισης ακολουθιών κατά ζεύγη και στοίχισης πολλαπλών ακολουθιών. Ταξινόμηση πρωτεϊνών και πρόβλεψη δομής.

Μαθησιακά Αποτελέσματα: Αποκτήστε ολοκληρωμένη γνώση των βασικών αρχών της βιοτεχνολογίας σε συνδυασμό με βασικές αρχές της μηχανικής σε προβλήματα που σχετίζονται με τη βιολογία και την ιατρική. Κατανόηση των βασικών λειτουργιών του ανθρώπινου σώματος και του τρόπου παραγωγής βιολογικών σημάτων. Εφαρμόστε βασικές αρχές μηχανικής για την ανάκτηση βιολογικών σημάτων και μεθόδους σε προβλήματα στη βιολογία και την ιατρική, την ενσωμάτωση της μηχανικής στη βιολογία και νέους τομείς στη βιομηχανία. Εισαγωγή στη βιοπληροφορική, με αλγόριθμους στοίχισης αλληλουχιών κατά ζεύγη και στοίχισης πολλαπλών ακολουθιών. Στατιστική σημασία των αποτελεσμάτων ευθυγράμμισης. Φυλογενετική πρόβλεψη. Επίσης αποκτήστε γνώσεις στην Αναζήτηση βάσεων δεδομένων για παρόμοιες ακολουθίες, αποτελεσματικότητα σχετικών αλγορίθμων. Ταξινόμηση πρωτεϊνών και πρόβλεψη δομής. Στατιστική ανάλυση πειραματικών δεδομένων μικροσυστοιχίας DNA. Ειδικά θέματα περιλαμβάνουν βιομηχανική και βιοεπεξεργασία βιοϋλικών και βιοϊατρική βιοϊατρική επεξεργασία σημάτων και εικόνας. Κατανόηση του τρόπου εφαρμογής και χρησιμότητας των σύγχρονων τεχνολογιών στην υγειονομική περίθαλψη. Κατανόηση βασικών αρχών προτύπων και μεθόδων αποθήκευσης ιατρικών δεδομένων. Κατανοήστε τις αρχές της απεικόνισης υπερήχων, ακτίνων Χ, CT, MRI και PET.

Περιεχόμενο Μαθήματος: Καλύπτονται τα ακόλουθα κεφάλαια: Ενότητα 1: Βασικά στοιχεία βιοϊατρικών σημάτων, συστημάτων και υπερήχων. Ενότητα 2: Εισαγωγή στη Βιοστατιστική και Στατιστική Ανάλυση Δεδομένων, Βιοϊατρικά Συστήματα Υγείας. Ενότητα 3: Πληροφοριακά Συστήματα Υγείας, MRI και πρότυπο DICOM & PACS. Ενότητα 4: Ιατρική Απεικόνιση (Επεξεργασία, Ανάλυση, Αξιολόγηση Ποιότητας), τεχνολογίες και εφαρμογές. Ψηφιακή ακτινογραφία. Ενότητα 5: Ανθρώπινος Εγκέφαλος, Ανατομία Εγκεφάλου, Νευρικό Σύστημα (ΚΝΣ), Ακτινογραφίες. Ενότητα 6: Ενδοσκόπηση, Καρδιά και λειτουργία και διαγράμματα, Ηλεκτροκαρδιογράφημα, Πίεση και λειτουργία. Ενότητα 7: Ιατρικές Μηχανές, ΗΕΓ, Πίεση αίματος, Πίεση αίματος, Συσκευές Ακτινοβολίας. Ενότητα 8: Τηλεϊατρική, τεχνολογίες και εφαρμογές. Ενότητα 9: Βιοϋλικά. Ενότητα 10: Βιοαισθητήρες και ανάλυση στατιστικών δεδομένων. Γιατί χρειαζόμαστε βιονικά; Ενότητα 11: Τρισδιάστατη εκτύπωση, Εισαγωγή στη μοριακή βιολογία, ανάλυση/αναπαράσταση. Φυσική ποικιλότητα και ποικιλία.  Ενότητα 12: Θερμική κατάλυση, Θεραπεία, Τεχνικές.

CSE 228 Προγραμματισμός Συστημάτων

Στόχοι Μαθήματος: Κατανόηση των μηχανισμών με τους οποίους επιτυγχάνεται η πρόσβαση στις διάφορες μονάδες και βιβλιοθήκες ενός Λειτουργικού Συστήματος Unix με τη χρήση της γλώσσας προγραμματισμού C και διαφόρων κελυφών, όπως επίσης και τον ακριβή τρόπο με τον οποίο λειτουργούν αυτά τα συστήματα. Εκμάθηση πολυπρογραμματισμού και μεθόδων συγχρονισμού και επικοινωνίας διεργασιών (processes) και νημάτων (threads).

Μαθησιακά Αποτελέσματα: Βασικές γνώσεις λειτουργίας και προγραμματισμού Λειτουργικών Συστημάτων UNIX. Γνώσεις πολυπρογραμματισμού.

Περιεχόμενο Μαθήματος: Εισαγωγή στο Unix; Το Σύστημα Αρχείων (File System); Διεργασίες και Νήματα (Processes and Threads): Δημιουργία, Συγχρονισμός, Επικοινωνία, Σήματα (Signals), Σωληνώσεις (Pipes), TCP/UDP Sockets, Mutexes, Condition Variables, Κανονικές Εκφράσεις (Regular Expressions), Σενάρια Φλοιού (Shell Scripts), Φίλτρα (Filters).

CSE 227 Προχωρημένη Αντικειμενοστρεφής Μεθοδολογία και Προγραμματισμός (UML, Java)

Στόχοι Μαθήματος: Το μάθημα αποσκοπεί να προσφέρει στους φοιτητές μια ολοκληρωμένη κατανόηση του αντικειμενοστραφούς προγραμματισμού (Object-Oriented Programming – OOP) με τη χρήση της γλώσσας Java, συνδυάζοντας τις βασικές αρχές με σύγχρονες πρακτικές ανάπτυξης λογισμικού. Στόχος είναι οι φοιτητές να αναπτύξουν την ικανότητα να σχεδιάζουν, να υλοποιούν και να αναλύουν αντικειμενοστραφή συστήματα λογισμικού που είναι αξιόπιστα, αρθρωτά (modular) και επεκτάσιμα. Μέσα από διαλέξεις, εργαστηριακές ασκήσεις και ατομικές εργασίες, οι φοιτητές εξοικειώνονται με θεμελιώδεις έννοιες, όπως η ενθυλάκωση (encapsulation), η κληρονομικότητα (inheritance) και ο πολυμορφισμός (polymorphism), και μαθαίνουν να τις εφαρμόζουν αποτελεσματικά στην πράξη. Ιδιαίτερη έμφαση δίνεται στην επίλυση προβλημάτων, στη σωστή χρήση του Java Collections Framework, στη διαχείριση εξαιρέσεων, στις λειτουργίες εισόδου/εξόδου αρχείων (file I/O) και στην ανάπτυξη γραφικών διεπαφών χρήστη (GUI). Το μάθημα εισάγει επίσης προχωρημένα θέματα, όπως ο πολυνηματικός προγραμματισμός (multithreading), τα γενικευμένα πρότυπα (generics) και τα πρότυπα σχεδίασης λογισμικού (software design patterns), προετοιμάζοντας τους φοιτητές για πραγματικές συνθήκες ανάπτυξης. Η Ενοποιημένη Γλώσσα Μοντελοποίησης (UML) χρησιμοποιείται καθ’ όλη τη διάρκεια του μαθήματος για την υποστήριξη του αντικειμενοστραφούς σχεδιασμού και την ενίσχυση της ικανότητας μοντελοποίησης και επικοινωνίας της αρχιτεκτονικής λογισμικού.

Μαθησιακά Αποτελέσματα: Με την επιτυχή ολοκλήρωση του μαθήματος, οι φοιτητές θα είναι σε θέση να: 1. Κατανοούν και εφαρμόζουν τις βασικές αρχές του αντικειμενοστραφούς προγραμματισμού, όπως η ενθυλάκωση, η κληρονομικότητα, ο πολυμορφισμός και η σύνθεση. 2. Σχεδιάζουν και υλοποιούν αρθρωτές και εύκολα συντηρήσιμες εφαρμογές σε Java, αξιοποιώντας κατάλληλα χαρακτηριστικά της γλώσσας και αντικειμενοστραφείς δομές. 3. Χειρίζονται αποτελεσματικά το Java Collections Framework και τα γενικευμένα πρότυπα για τη διαχείριση και επεξεργασία δομημένων δεδομένων. 4. Διαχειρίζονται λειτουργίες εισόδου/εξόδου αρχείων και εξαιρέσεις. 5. Δοκιμάζουν και αποσφαλματώνουν προγράμματα Java, χρησιμοποιώντας κατάλληλα εργαλεία και τεχνικές. 6. Αναπτύσσουν διαδραστικά προγράμματα με γραφικές διεπαφές (GUI) και συμπεριφορά βασισμένη σε γεγονότα (event-driven). 7. Κατανοούν και εφαρμόζουν βασικές έννοιες του παράλληλου προγραμματισμού, χρησιμοποιώντας νήματα (threads). 8. Χρησιμοποιούν διαγράμματα UML για την ανάλυση, τον σχεδιασμό και την επικοινωνία αντικειμενοστραφών συστημάτων λογισμικού.

Περιεχόμενο Μαθήματος: Το μάθημα καλύπτει θεμελιώδεις και προχωρημένες έννοιες του αντικειμενοστραφούς προγραμματισμού σε Java, καθώς και βασικές πρακτικές σχεδίασης και ανάπτυξης λογισμικού. Σύνταξη Java, δομές ελέγχου, μέθοδοι, πίνακες. Κλάσεις, αντικείμενα, ενθυλάκωση, σύνθεση, κληρονομικότητα, πολυμορφισμός, αφαίρεση. Διεπαφές, αφηρημένες κλάσεις, γενικευμένα πρότυπα. Συλλογές: λίστες, σύνολα, πίνακες κατακερματισμού, iterators, ταξινόμηση. Διαχείριση εξαιρέσεων. Είσοδος/έξοδος αρχείων. Αρθρωτοποίηση (modularization) και διαχείριση πακέτων. Δοκιμή και αποσφαλμάτωση. Γραφικές διεπαφές χρήστη (GUI) και διαχείριση γεγονότων. Πολυνηματικός προγραμματισμός και ταυτόχρονη εκτέλεση.             Διαγράμματα UML. Βασικά πρότυπα σχεδίασης, μοντέλα ανάπτυξης λογισμικού.

CSE 226 Αλγόριθμοι και Πολυπλοκότητα

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

Μαθησιακά Αποτελέσματα: Στο τέλος του μαθήματος οι φοιτητές θα μπορούν: (α) να επιλέγουν σωστά μεταξύ διαφόρων αλγορίθμων και μεθοδολογιών αλγορίθμων για την επίλυση προγραμματιστικών προβλημάτων. (β) να σχεδιάσουν και να υλοποιήσουν νέους αλγόριθμους για την επίλυση υπολογιστικών προβλημάτων χρησιμοποιώντας διάφορες μεθοδολογίες όπως διαίρει και κυρίευε, δυναμικός προγραμματισμός και άπληστοι αλγόριθμοι. (γ) να αναλύσουν την πολυπλοκότητα αλγορίθμων και να εκτιμάται το υπολογιστικό κόστος του λογισμικού τους.

Περιεχόμενο Μαθήματος: Το μάθημα καλύπτει τα εξής θέματα: ανάλυση αλγορίθμων, ο ασυμπτωτικός συμβολισμός, οι αναδροµικές σχέσεις, οι αλγόριθμοι διαίρει και κυρίευε, ο δυναμικός προγραμματισμός, οι άπληστοι αλγόριθμοι, η αναπαράσταση γραφημάτων, η αναζήτηση σε γραφήματα, τα ελαφρύτατα συνδετικά δένδρα, οι ελαφρύτατες διαδρομές, η μέγιστη ροή δικτύων, η NP-πληρότητα, και οι προσεγγιστικοί αλγόριθμοι.

CSE 225 Λειτουργικά Συστήματα

Στόχοι Μαθήματος: Σκοπός του μαθήματος είναι να διδάξει τις βασικές αρχές σχεδιασμού και λειτουργίας ενός μοντέρνου λειτουργικού συστήματος. Μελετώνται τα λειτουργικά επίπεδα και οι μηχανισμοί ενός μοντέρνου λειτουργικού συστήματος που υποστηρίζει καταμερισμό χρόνου. Δίδεται ο διπλός ρόλος ενός λειτουργικού συστήματος, σαν διαχειριστή των διαφόρων μονάδων του υπολογιστή και σαν προμηθευτή των παρεχόμενων υπηρεσιών προς τον χρήστη.

Μαθησιακά Αποτελέσματα: Μετά την επιτυχή ολοκλήρωση του μαθήματος, ο διδασκόμενος θα πρέπει να γνωρίζει την ιστορική εξέλιξη των ηλεκτρονικών υπολογιστών, και πως ένα Λ.Σ. διαχειρίζεται τις διεργασίες, την Μνήμη, τα Αρχεία, τις Συσκευές Εισόδου/Εξόδου.

Περιεχόμενο Μαθήματος: Η ύλη περιλαμβάνει 4 ενότητες: Ενότητα 1: Εισαγωγή: Εισαγωγικές  έννοιες,  ιστορική αναδρομή και εξέλιξη των λειτουργικών συστημάτων. Γενική δομή, λειτουργίες και χαρακτηριστικά ενός λειτουργικού συστήματος. Δομή του λειτουργικού συστήματος.  Βασικές λειτουργίες: χειρισμός συσκευών, παροχή υπηρεσιών στον χρήστη, αντιμετώπιση σφαλμάτων, συντονισμός διεργασιών. Ενότητα 2:  Διαχείριση διεργασιών – Process Management: A. Tι είναι διεργασία (process). Χρονοδρομολόγηση διεργασιών (process scheduling). Επικοινωνία μεταξύ διεργασιών (interprocess communication). Επικοινωνία σε Client-Server Systems. B. Νήματα (threads)  και Πολυνηματικές Διεργασίες (Multithreading Models) C. Χρονοδρομολόγηση (CPU Scheduling), Επίπεδα, στόχοι και κριτήρια των μηχανισμών χρονοδρομολόγησης. Πρόωρη (preemptive) και αποκλειστική (nonpreemptive) χρονοδρομολόγηση. Προτεραιότητες (priorities). Αλγόριθμοι χρονοδρομολόγησης D. Συγχρονισμός διεργασιών (process synchronization). Συνθήκες ανταγωνισμού (race conditions). Κρίσιμες περιοχές διεργασιών (critical regions). Αμοιβαίος αποκλεισμός (mutual exclusion). Επικοινωνία μεταξύ διεργασιών (interprocess communication). E. Tο πρόβλημα του αδιέξοδου (deadlock) και της συνεχούς αναβολής (indefinite postponement). Τρόποι χειρισμού του αδιέξοδου. Αιτίες δημιουργίας αδιέξοδου και παραδείγματα. Ικανές συνθήκες για δημιουργία αδιέξοδου. Ενότητα 3: Διαχείριση πραγματικής και ιδεατής μνήμης (real and virtual memory management). A.              Διαχείριση μνήμης (main memory). Αλγόριθμοι τοποθέτησης. Απλή σελιδοποίηση (paging) και swapping. B. Iδεατή μνήμη (virtual memory). Σελιδοποίηση ιδεατής μνήμης. Frames. Thrashing. Ενότητα 4: Διαχείριση Αποθήκευσης (Storage management) A. Διαχείριση αρχείων (file management). Διαδικασίες με αρχεία: δημιουργία, διάβασμα, γράψιμο, επαναφορά, διαγραφή. Σύστημα αρχείων και στόχοι: μέθοδοι προσπέλασης (access methods), διαχείριση αρχείων και περιφερειακής μνήμης, μηχανισμοί ακεραιότητας (integrity mechanisms). Οργάνωση αρχείων. Κατάλογος αρχείων (directory). Οργάνωση καταλόγων. Τρόποι παροχής μνήμης (memory allocation) για αποθήκευση αρχείων. B. Διαχείριση συσκευών Εισόδου-Εξόδου (Mass Storage Structure and  I/O Systems). Στόχοι της διαχείρισης συσκευών Ι/Ο: ανεξαρτησία από την κωδικοποίηση χαρακτήρων (character code independence), ανεξαρτησία από την συσκευή (device independence), αποδοτικότητα (efficiency) και ομοιόμορφος χειρισμός συσκευών (uniform treatment of devices). Χρήση ενδιάμεσης μνήμης (buffering). Παράμετροι απόδοσης εισαγωγής/εξαγωγής δεδομένων σε/από δίσκο: χρόνος αναζήτησης (seek), χρόνος μεταφοράς (latency), επιβράδυνση περιστροφής (rotational delay). Στρατηγικές βελτιστοποίησης χρόνου αναζήτησης. Χρήση κρυφής μνήμης (cache memory).

CSE 224 Δομές Δεδομένων και Αλγόριθμοι

Στόχοι Μαθήματος: Το μάθημα Δομές Δεδομένων και Αλγόριθμοι αποτελεί μια εισαγωγή στις Δομές Δεδομένων που διέπουν τον προγραμματισμό και στην Ανάλυση Αλγορίθμων. Σκοπός του μαθήματος είναι να κατανοήσουν οι φοιτητές πως κοινά υπολογιστικά προβλήματα μπορούν να λυθούν αποδοτικά στον προγραμματισμό με τη χρήση κατάλληλων δομών δεδομένων και αλγορίθμων. Το μάθημα διδάσκεται στη γλώσσα προγραμματισμού Python. Στο εργαστήριο οι φοιτητές θα πραγματοποιήσουν προγραμματιστικές ασκήσεις στη γλώσσα προγραμματισμού Python, οι οποίες θα στοχεύουν στην εμπέδωση της θεωρίας που θα παραδίδεται στις διαλέξεις.

Μαθησιακά Αποτελέσματα: Με την ολοκλήρωση του μαθήματος οι φοιτητές θα μπορούν να: (1) Περιγράφουν και να υλοποιούν σε Python βασικές δομές δεδομένων και αλγόριθμους. (2) Υλοποιούν προγραμματιστικές τεχνικές που απαντώνται συχνά στη λύση αλγοριθμικών προβλημάτων. (3) Αναλύουν την πολυπλοκότητα αλγορίθμων και να εκτιμούν το υπολογιστικό κόστος των αλγορίθμων. (4) Επιλέγουν τις κατάλληλες δομές δεδομένων και αλγόριθμους για την επίλυση συγκεκριμένων προγραμματιστικών προβλημάτων. (5) Συνδυάζουν αλγόριθμους και δομές δεδομένων για την επίλυση πολύπλοκων υπολογιστικών προβλημάτων.

Περιεχόμενο Μαθήματος: Ανάλυση Αλγορίθμων, Προγραμματισμός σε Python και Αντικειμενοστραφείς Προγραμματισμός, Αναδρομή, Πίνακες, Στοίβες (Stacks), Ουρές (Queues), Συνδεδεμένες Λίστες (Linked List), Δέντρα και Δυαδικά Δέντρα, Ουρές Προτεραιότητας και Σωροί (Heaps), Χάρτες (Maps), Λεξικά (Dictionaries), Πίνακες Κατακερματισμού (Hash Maps), Σύνολα, Δέντρα Αναζήτησης και AVL Δέντρα, Δέντρα Splay, Δέντρα (2,4), Ταξινόμηση και Επιλογή, Γράφοι και Αλγόριθμοι Συντομότερου Μονοπατιού.

CSE 223 Ανάλυση και Σχεδιασμός Πληροφοριακών Συστημάτων

Στόχοι Μαθήματος: Αξιοποίηση της Ανάλυσης και Σχεδιασμού συστημάτων ώστε να καταστεί αποτελεσματικό εργαλείο ανάπτυξης Πληροφοριακών Συστημάτων. Γνωριμία και κατανόηση των δραστηριοτήτων που περιλαμβάνουν οι φάσεις της Ανάλυσης και Σχεδιασμού συστημάτων, και πώς αυτές καθοδηγούν τη μετέπειτα  υλοποίησή τους. Θεωρητική και πρακτική εξοικείωση αναφορικά με θέματα Διαχείρισης Έργων, το ρόλο και τα καθήκοντα του Αναλυτή Συστημάτων, τις ευθύνες του, όπως επίσης και με τη στελέχωση και οργάνωση της ομάδας εργασίας για την ανάπτυξη συστημάτων. Κατανόηση των διαφόρων σταδίων του κύκλου ζωής ενός Πληροφοριακού Συστήματος και της σημαντικότητας του καθενός.

Μαθησιακά Αποτελέσματα: Μετά την επιτυχή ολοκλήρωση του μαθήματος, ο διδασκόμενος θα πρέπει να είναι σε θέση να αναλύει και να σχεδιάζει ένα Πληροφοριακό Σύστημα ακολουθώντας τις φάσεις της Ανάλυσης.

Περιεχόμενο Μαθήματος: Μελέτη της θεωρίας των συστημάτων και ο τρόπος χρησιμοποίησης της για τη σχεδίαση και την ανάπτυξη συστημάτων πληροφορικής. Μελέτη των διαφόρων φάσεων για τη συστηματική ανάλυση, σχεδίαση, εκπόνηση και υλοποίηση ενός πληροφοριακού συστήματος.              Γίνεται αναφορά και πρακτική εξάσκηση σε γνωστικά αντικείμενα όπως διεύθυνση έργου, επικοινωνία, ανεύρεση δεδομένων και μελέτη σκοπιμότητας. ΕΝΟΤΗΤΕΣ - ΚΕΦΑΛΑΙΑ (1) Οι Εμπλεκόμενοι στην Ανάλυση Συστημάτων (2) Δομικά Στοιχεία Πληροφοριακών Συστημάτων (3) Ανάπτυξη Πληροφοριακών Συστημάτων (4) Διαχείριση Έργων (5) Ανάλυση Συστημάτων (6) Ανάλυση Απαιτήσεων (7) Μοντελοποίηση Δεδομένων (8) Μοντελοποίηση Διαδικασιών (9) Πρόταση Συστήματος (10) Σχεδιασμός Συστήματος (11) Αρχιτεκτονική Εφαρμογών Λογισμικού και Μοντελοποίηση (12) Σχεδιασμός Διαπροσωπείας Χρήστη.

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

Στόχοι Μαθήματος: Το μάθημα αυτό αποτελεί μια εισαγωγή στις διάφορες φάσεις μεταγλωττισμού μιας γλώσσας προγραμματισμού. Γίνεται αναφορά στις κύριες έννοιες των γλωσσών προγραμματισμού με στόχο την επεξήγηση των φάσεων που ακολουθεί ένας μεταγλωττιστής για να μετατρέψει ένα πηγαίο πρόγραμμα στην γλώσσα μηχανής. Ως εκ τούτου ασχολείται με την λεκτική, συντακτική, σημασιολογική ανάλυση μιας αρχικής γλώσσας προγραμματισμού και την μετατροπή της σε ενδιάμεσο κώδικα και τελική γλώσσα. Τα εργαλεία flex και bison χρησιμοποιούνται για πρακτική εφαρμογή και ανάπτυξη μικρών λεκτικών αναλυτών και συντακτικών αναλυτών αντίστοιχα.

Μαθησιακά Αποτελέσματα: Με την ολοκλήρωση του μαθήματος, οι επιτυχημένοι φοιτητές πρέπει να είναι σε θέση να: (1) Να εξηγήσουν πώς η ανάλυση, οι κανονικές εκφράσεις και οι γλώσσες λειτουργούν με την εφαρμογή των λεκτικών αναλυτών. (2) Να εξηγήσουν την ανάλυση σύνταξης, την ανάλυση από πάνω προς τα κάτω και από κάτω προς τα πάνω, την εφαρμογή συντακτικών αναλυτών. (3) Να εξερευνήσουν τον τρόπο λειτουργίας της σημασιολογικής ανάλυσης και της δημιουργίας ενδιάμεσου κώδικα. (4) Να εξηγήσουν θέματα σχετικά με την οργάνωση της μνήμης και το περιβάλλον εκτέλεσης (περιβάλλον χρόνου εκτέλεσης), την κατανομή καταχωρητών και τη δημιουργία και βελτιστοποίηση του τελικού κώδικα. (5) Να υλοποιήσουν έναν απλό μεταγλωττιστή για τον επεξεργαστή MIPS. Η υλοποίηση αυτή θα πραγματοποιηθεί μέσω της γλώσσας C και των εργαλείων Flex και Bison.

Περιεχόμενο Μαθήματος: 1η εβδομάδα: Εισαγωγή, Γλώσσες προγραμματισμού, Μεταγλωττιστές, Αναγκαιότητα και ιστορική αναδρομή, Είδη μεταγλωττιστών και συναφή εργαλεία, Βασική δομή ενός μεταγλωττιστή. 2η εβδομάδα: Τυπικές γλώσσες, Γεννητικά και αναγνωριστικά μοντέλα, Γραμματικές, Ιεραρχία Chomsky, Αναγνωριστές, Κανονικές γλώσσες, Κανονικές εκφράσεις, Πεπερασμένα αυτόματα. 3η εβδομάδα: Λεκτική ανάλυση, Διαγράμματα μετάβασης, Κατασκευή του λεκτικού αναλυτή. 4η εβδομάδα: Γλώσσες χωρίς συμφραζόμενα, Διφορούμενες γλώσσες, Τρόποι παράσταστασης γλωσσών χωρίς συμφραζόμενα. 5η εβδομάδα: Συντακτική ανάλυση, αναλυτής από κάτω προς τα πάνω. 6η εβδομάδα: Ανάκτηση από σφάλματα, χρήση μεταγλωττιστών για τη δημιουργία συντακτικών αναλυτών. 7η εβδομάδα: Ενδιάμεση εξέταση, 8η εβδομάδα: Συντακτική ανάλυση, Βοηθητικές έννοιες, υπολογισμός FIRST και FOLLOW, Ανοδικοί και καθοδικοί συντακτικοί αναλυτές, Ανοδική συντακτική ανάλυση. 9η εβδομάδα: Σημασιολογική ανάλυση, Στατική σημασιολογία, Δυναμική σημασιολογία, Σημασιολογικός έλεγχος, Έλεγχος τύπων, Εξαγωγή τύπων, Κατηγορικές γραμματικές, Πίνακας συμβόλων. 10η εβδομάδα: Παραγωγή ενδιάμεσου κώδικα, Μορφές ενδιάμεσων γλωσσών, Η γλώσσα των τετράδων, Τελούμενα, Τελεστές. 11η εβδομάδα: Παραγωγή ενδιάμεσου κώδικα, Ένα απλό σχέδιο παραγωγής τετράδων, Αριθμητικές εκφράσεις, Λογικές εκφράσεις, Απλές εντολές, Σύνθετη εντολή, Εντολή if, Εντολή while, Κλήση υποπρογραμμάτων. 12η εβδομάδα: Παραγωγή τελικού κώδικα. 13η εβδομάδα: Βελτιστοποίηση κώδικα, Τεχνικές βελτιστοποίησης κώδικα. 14η εβδομάδα:  Επανάληψη-Προετοιμασία για την τελική εξέταση.

CSE 221 Διακριτά Μαθηματικά

Στόχοι Μαθήματος: Να δώσει μια πλατιά γνώση ως προς βασικές έννοιες των Διακριτών Μαθηματικών σε σχέση με μαθηματική λογική, άλγεβρα του Boole και θεωρίας των γράφων, οι οποίες μπορούν να καταστούν εργαλεία καλύτερης κατανόησης και επίλυσης σχετικών εφαρμογών πληροφορικής.

Μαθησιακά Αποτελέσματα: Απόκτηση επιπλέον σημαντικού υπόβαθρου για χρήση σε εφαρμογές στην Πληροφορική.

Περιεχόμενο Μαθήματος: Μαθηματική λογική, προτάσεις, κατηγορήματα, συμπερασματολογικοί κανόνες, Εισαγωγή στις αποδεικτικές μεθόδους, Ακολουθίες, αρχές επαγωγής, θεωρία αναδρομών, Θεωρία των συνόλων, Σχέσεις, συναρτήσεις, σχέσεις ισοδυναμίας, Άλγεβρα του Boole και εφαρμογές, Συνδυαστική, μεταθέσεις, συνδυασμοί, Αλγόριθμοι, θεμελιώδεις αρχές, αποδοτικότητα, Συστήματα αρίθμησης, Γράφοι, διαδρομές, αλγόριθμοι, δέντρα, παράγον δέντρο.

CSE 122 Ψηφιακή Λογική

Στόχοι Μαθήματος: Να παρέχει στους φοιτητές βασικές γνώσεις στα ψηφιακά συστήματα (digital systems), γύρω από την ανάλυση, προδιαγραφή, λειτουργία, σχεδίαση και υλοποίηση τους. Επίσης να παρέχει γνώσεις ψηφιακής σχεδίασης (digital design) με εργαλεία αυτοματοποίησης της σχεδίασης και γλώσσες περιγραφής υλικού, με συμπληρωματικές γνώσεις στις βασικές έννοιες ψηφιακής σχεδίασης, μέσω ενός συνδυασμού διαλέξεων, ασκήσεων και εργαστηρίων.

Μαθησιακά Αποτελέσματα: Το μάθημα ασχολείται με την ανάλυση και σχεδίαση ψηφιακών συστημάτων. Ειδικότερα εξετάζονται τα αριθμητικά συστήματα η άλγεβρα Bool και η ελαχιστοποίηση λογικών συναρτήσεων. Καλύπτονται οι ψηφιακές πύλες, flip flops, συνδυαστικά και ακολουθιακά ψηφιακά κυκλώματα, τύποι καταχωρητών, λογικές και μαθηματικές ψηφιακές μονάδες. Γίνεται εισαγωγή στη γλώσσα περιγραφής και ανάπτυξης υλικού Verilog και στα εργαλεία αυτοματοποίησης της ψηφιακής σχεδίασης για την υλοποίηση ψηφιακών κυκλωμάτων σε ψηφιακά κυκλώματα πολύ μεγάλης ολοκλήρωσης (Very Large Scale Integration – VLSI).

Περιεχόμενο Μαθήματος: Το μάθημα βασίζεται στα βασικά στοιχεία της σχεδίασης λογικών κυκλωμάτων και έχει ως κύριους στόχους: (1) την εισαγωγή στη σχεδίαση συνδυαστικών και ακολουθιακών ψηφιακών κυκλωμάτων, (2) τη χρήση της γλώσσας περιγραφής υλικού Verilog για την μοντελοποίηση και την εξομοίωση τους καθώς και την υλοποίηση τους, (3) την υλοποίηση ψηφιακών συστημάτων σε προγραμματιζόμενες λογικές διατάξεις (CPLDs και FPGAs), (4) την απόκτηση εμπειρίας στον πλήρη κύκλο της διαδικασίας σχεδιασμού, εξομοίωσης και υλοποίησης ψηφιακών συστημάτων με χρήση σύγχρονων εργαλείων σε υπολογιστή μέσω των εργαστηριακών ασκήσεων. Καλύπτονται οι εξής ενότητες-κεφάλαια: (1) Αριθμητικά Συστήματα (Ψηφιακά συστήματα, Δυαδικοί αριθμοί, Μετατροπές αριθμών σε μορφές άλλης βάσης, Συμπληρώματα, Προσημασμένοι δυαδικοί αριθμοί, Καταχωρητές και δυαδική λογική), (2) Άλγεβρα Boole (Ορισμοί, βασικά θεωρήματα και ιδιότητες, Συναρτήσεις Boole, Κανονικές και πρότυπες μορφές, Λογικές πύλες, Ψηφιακά ολοκληρωμένα κυκλώματα, οικογένειες ψηφιακής λογικής (TTL, ECL, MOS και συμπληρωματικό MOS-CMOS), επίπεδα ολοκλήρωσης), (3) Ελαχιστοποίηση Λογικών Συναρτήσεων (Μέθοδος του χάρτη Καρνώ, Κανόνες για τους χάρτες, Χάρτης Καρνώ τεσσάρων και πέντε μεταβλητών, Απλοποίηση γινομένου αθροισμάτων, Υλοποίηση με πύλες NAND και NOR, Συνθήκες αδιαφόρου τιμής, Συνάρτηση XOR και κυκλώματα ανίχνευσης και διόρθωσης λαθών), (4) Συνδυαστική Λογική (Διαδικασία ανάλυσης και σχεδιασμού συνδυαστικών κυκλωμάτων, Δυαδικοί αθροιστές και αφαιρέτες, Δυαδικοί πολλαπλασιαστές, Συγκριτές μεγέθους, Κωδικοποιητές/Αποκωδικοποιητές, Πολυπλέκτες), (5) Σύγχρονη Ακολουθιακή Λογική  (Μανδαλωτές (Latches) και Flip-Flops, Ανάλυση ακολουθιακών κυκλωμάτων με ρολόι, Ελαχιστοποίηση και κωδικοποίηση καταστάσεων, Συγκριτές μεγέθους, Κωδικοποιητές και Αποκωδικοποιητές, Διαδικασία σχεδίασης με Flip-Flop), (6) Καταχωρητές, Μετρητές, Μνήμες και Προγραμματιζόμενη Λογική  (Καταχωρητές/Καταχωρητές ολίσθησης, Μετρητές ριπής (Ripple counters), σύγχρονοι μετρητές, άλλοι τύποι μετρητών, Μνήμη ανάγνωσης μόνο (ROM), Μνήμη τυχαίας προσπέλασης (RAM), Αποκωδικοποίηση μνήμης, Ανίχνευση και διόρθωση λαθών, PLA, PAL, ακολουθιακές PLD (SPLD), CPLD, FPGA), (7) Ασύγχρονη Ακολουθιακή Λογική  (Διαδικασία ανάλυσης, Κυκλώματα με μανδαλωτές, Διαδικασία σχεδιασμού, Ελαχιστοποίηση πινάκων κατάστασης και ροής, Κωδικοποίηση καταστάσεων για αποφυγή κυνηγητών, Σπινθήρες), (8) Γλώσσες Περιγραφής Υλικού (HDL) και Εργαλεία Αυτοματοποίησης της Σχεδίασης (EDA) (Βασικές έννοιες, Verilog για συνδυαστικά κυκλώματα, Verilog για ακολουθιακά κυκλώματα, Σχεδίαση σε επίπεδο μεταφοράς καταχωρητών (RTL), Μηχανές πεπερασμένων καταστάσεων (FSM), Ανάλυση και σχεδίαση top-down, Προσομοίωση και επαλήθευση κυκλωμάτων, λογική σύνθεση, θέση και δρομολόγηση), Αντιστοίχιση τεχνολογίας και βιβλιοθήκες στοιχείων, ολοκληρωμένα κυκλώματα πλήρως προσαρμοσμένα (full-custom), τυποποιημένων στοιχείων (semi-custom) και ολοκληρωμένα με συστοιχίες πυλών (gate-arrays).