Εφαρμογή σχεδιαστικών προτύπων (design patterns) αντικειμενοστραφούς προγραμματισμού σε μεταγλωττιστές - Καρανικόλας, Χρήστος Α. (Πανεπιστήμιο Πελοποννήσου, 2014)
Η ανάπτυξη ενός μεταγλωττιστή είναι ένα δύσκολο πρόβλημα, η επιτυχής λύση του οποίου, καθορίζεται από την πληρότητα της ανάλυσης και της αρχιτεκτονικής σχεδίασης του υπό ανάπτυξη λογισμικού. Κατά τη διαδικασία της αρχιτεκτονικής σχεδίασης του λογισμικού, επιλέγονται κατάλληλα και δοκιμασμένα σχεδιαστικά πρότυπα, δηλαδή καλές σχεδιαστικές λύσεις οι οποίες έχουν αναπτυχθεί για την επίλυση γενικών συνήθως προβλημάτων και τείνουν να επαναχρησιμοποιούνται από τους Μηχανικούς Λογισμικού. Η παρούσα εργασία αποτελεί μια τεχνική περιγραφή για τη σχεδίαση, προσαρμογή, υλοποίηση και εφαρμογή συγκεκριμένων αντικειμενοστραφών σχεδιαστικών προτύπων σε μεταγλωττιστές, ως μία κάθετη προσέγγιση που εκκινεί από την μοντελοποιημένη αρχιτεκτονική σχεδίαση μέχρι και την ενδεικτική υλοποίηση κώδικα εφαρμογής τους. Παρουσιάζεται ένα ενδεικτικό μοντέλο της αρχιτεκτονικής σχεδίασης τμήματος ενός μεταγλωττιστή της γλώσσας C89, μέσω UML διαγραμμάτων κλάσεων, αντικειμένων και ακολουθίας. Χρησιμοποιούνται τα γνωστά αντικειμενοστραφή σχεδιαστικά πρότυπα Façade, Composite, Iterator και Visitor καθώς και προσαρμοσμένες στις ανάγκες του προβλήματος παραλλαγές τους. Η σχεδίαση επικεντρώνεται στην χρήση των συγκεκριμένων σχεδιαστικών προτύπων στον πίνακα συμβόλων, στο parse / abstract tree, στην three-address code αναπαράσταση και στις ενδεικτικές λειτουργίες scope checking, type inference & checking και graph generation. Ωστόσο το ίδιο μοντέλο σχεδίασης μπορεί να εφαρμοσθεί κατά περίπτωση για όλες τις Syntax Directed Definitions του Attribute Grammar Framework ενός μεταγλωττιστή. Παρουσιάζονται τμήματα κώδικα υλοποίησης σε C++ και παραδείγματα εφαρμογής iterator και visitor για pre order και post order διαπεράσεις σύνθετων δομών (parse / abstract trees, graphics IRs ως composites). Επίσης παρουσιάζεται μια προσαρμοσμένη σχεδίαση και υλοποίηση iterator και visitor για την μικτή pre post order διαπέραση composite δομών για την εφαρμογή L-Attributed Definitions. Ακόμη διερευνούνται τα μειονεκτήματα και πλεονεκτήματα έναντι του προτύπου Inheritance, καθώς και οι συνθήκες για την επιλογή κατάλληλων σχεδιαστικών προτύπων και προτείνονται σχεδιαστικές προσεγγίσεις για την επίλυση των προβλημάτων που αντιμετωπίσθηκαν κατά την εφαρμογή τους. Σκοπός της εργασίας δεν είναι η επί της ουσίας εξαντλητική ανάλυση, λύση και υλοποίηση των επιμέρους προβλημάτων και λειτουργιών (business logic) ενός μεταγλωττιστή, αλλά η εφαρμογή κατάλληλων σχεδιαστικών προτύπων που συνδράμουν θετικά στην υλοποίηση αυτών ή παρόμοιων λύσεων, ενισχύοντας παράλληλα τα ποιοτικά χαρακτηριστικά του παραγόμενου λογισμικού. Επίσης παρουσιάζεται μια ανάλυση των ποιοτικών χαρακτηριστικών των σχεδιαστικών προτύπων της υλοποίησης, καθώς και η συσχέτιση τους με μετρήσιμα ποιοτικά χαρακτηριστικά γνωστών προτύπων διασφάλισης ποιότητας λογισμικού. Τέλος η εργασία μπορεί να χρησιμοποιηθεί ως ένα κείμενο εναλλακτικής αναφοράς ή εκκίνησης για όσους επιθυμούν να ασχοληθούν με την κατανόηση και ανάπτυξη μεταγλωττιστών ή παρόμοιων προβλημάτων ή γενικά για την κατανόηση και εφαρμογή των γνωστών σχεδιαστικών προτύπων Façade, Composite, Iterator και Visitor.
Μ.Δ.Ε. 44
Keywords: Αντικειμενοστρεφείς προγραμματισμοί (Επιστήμη των υπολογιστών); Υπολογιστών λογισμικό -- Ανάπτυξη; Ηλεκτρονικοί υπολογιστές -- Προγράμματα (Μεταγλωττιστές); Μεταγλωττιστές