Βασικά συστατικά στοιχεία οντοκεντρικού προγραμματισμού, προσφερόμενες δομές στη C++, κληρονομικότητα και πολυμορφισμός (έννοια, εφαρμογή, διαχείριση μνήμης και υλοποίηση από τον μεταγλωττιστή), αφηρημένες κλάσεις.
Διαδικασία ελέγχου συστήματος.
Αξιοπιστία λογισμικού, πιστοποίηση ποιότητας, ISO πρότυπα ποιότητας, καταγραφή λαθών, design by contract, κατηγορίες λαθών, αυτόματος εντοπισμός και αυτοέλεγχος πηγαίου κώδικα (self checking code).
Εύστροφες διαδικασίες ανάπτυξης, εντροπία λογισμικού, δημιουργική αναδιάρθρωση (re-factoring), εισαγωγή στην φιλοσοφία του «ακραίου» προγραμματισμού (extreme programming), προγραμματισμός με εντατικούς ελέγχους και δοκιμές (test-first programming).
Εισαγωγή στα καλούπια κώδικα και τα σχεδιαστικά πρότυπα.
Δημιουργία, τεκμηρίωση και χρήση προτύπων, ανάλυση συγκεκριμένων σχεδιαστικών προτύπων, εισαγωγή στη χρήση templates της γλώσσας C++.
Μαθησιακά Αποτελέσματα:
Οι φοιτητές θα γνωρίζουν τις κύριες κατασκευαστικές μεθόδους, διαδικασίες και τεχνικές για την μετάβαση από τη μικροσκοπική κλίμακα του προγράμματος στη μακροσκοπική κλίμακα των συστημάτων. Στόχοι Μαθήματος
Βασικός σκοπός του μαθήματος είναι η παρουσίαση και ανάλυση των στρατηγικών και μεθόδων σχεδίασης και ανάπτυξης λογισμικού (software engineering), ώστε εκτός από την απλή ικανοποίηση των εκάστοτε λειτουργικών προδιαγραφών (functional specifications), να εξασφαλίζεται ελαχιστοποίηση λαθών και εύκολος εντοπισμός τους (error proneness, robustness, defect detection), επεκτασιμότητα (extensibility), εύκολη και ασφαλής τροποποίηση (effective and efficient modification support), επαναχρησιμοποίηση (reusability), δυνατότητα μεταφοράς σε άλλες πλατφόρμες (portability), ελαχιστοποίηση μεγέθους υλοποίησης (code reduction) καθώς επίσης και απλότητα και αυτο-τεκμηρίωση (simplicity and self-documentation). Οι ιδιότητες αυτές, οι οποίες στο σύνολο τους αποτελούν μέτρο ποιότητας λογισμικού (software quality), θα μελετηθούν κυρίως στο επίπεδο κατασκευής μεγάλων συστημάτων λογισμικού (large-scale software development), όπου εμπλέκονται αφενός αρκετοί δημιουργοί λογισμικού (software developers) και αφετέρου πολλαπλές τεχνολογίες υλοποίησης (implementation technologies). Η μεγαλύτερη έμφαση θα δοθεί στον ρόλο της αρχιτεκτονικής (software architecture), των σχεδιαστικών προτύπων (software design patterns), των στοιχείων της οντοκεντρικής σχεδίασης και προγραμματισμού (object-oriented design and programming), και του αμυντικού προγραμματισμού (defensive programming), με παρουσίαση των πιο προηγμένων και εξελιγμένων τεχνικών που εφαρμόζονται σήμερα στα μεγάλα συστήματα λογισμικού, όπως ακραίος προγραμματισμός (extreme programming).
Αξιολόγηση:
Λεπτομέρειες για την βαθμολόγηση του μαθήματος περιέχονται στην ιστοσελίδα του μαθήματος
Τα μαθήματα του Τμήματος Επιστήμης Υπολογιστών κωδικοποιούνται με τα γράμματα "ΗΥ" και με τρία ψηφία. Το πρώτο ψηφίο δηλώνει το έτος κατά το οποίο συνήθως παρακολουθείται το μάθημα, το δε δεύτερο την επιστημονική περιοχή του μαθήματος:
Πρώτο Ψηφίο
Κανονικό Έτος Παρακολούθησης
1,2,3,4
Πρώτο, Δεύτερο, Τρίτο, Τέταρτο
5,6
Μεταπτυχιακά μαθήματα
7,8,9
Ειδικά θέματα
Δεύτερο Ψηφίο
Επιστημονική Περιοχή
0
Εισαγωγικά - Γενικά
1
Υπόβαθρο (Μαθηματικά, Φυσική)
2
Υλικό και Συστήματα Υπολογιστών
3
Τηλεπικοινωνίες και Δίκτυα
4,5
Συστήματα Λογισμικού και Εφαρμογές
6
Πληροφοριακά Συστήματα
7
Υπολογιστική Όραση και Ρομποτική
8
Αλγοριθμική και Θεωρία Υπολογισμού
9
Ειδικές Εργασίες
Ακολουθούν συνοπτικοί κατάλογοι κατά κατηγορίες των μαθημάτων του προγράμματος βασικών σπουδών του Τμήματος Επιστήμης Υπολογιστών του Πανεπιστημίου Κρήτης. Μαθήματα των οποίων οι κωδικοί αρχίζουν με "ΜΕΜ" ή "ΦΥΣ" διδάσκονται από το Τμήμα Μαθηματικών Εφαρμοσμένων Μαθηματικών ή το Φυσικό αντιστοίχως και αναφέρονται με τους οικείους κωδικούς. Τα προαπαιτούμενα που αναφέρονται μέσα σε παρενθέσεις συνιστώνται έντονα, αλλά δεν είναι υποχρεωτικά.