ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΜΕΤΑΠΤΥΧΙΑΚΟ ΔΙΠΛΩΜΑ ΕΙΔΙΚΕΥΣΗΣ (MSc) στα ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ ΔΙΠΛΩΜΑΤΙKH ΕΡΓΑΣΙΑ

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΜΕΤΑΠΤΥΧΙΑΚΟ ΔΙΠΛΩΜΑ ΕΙΔΙΚΕΥΣΗΣ (MSc) στα ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ ΔΙΠΛΩΜΑΤΙKH ΕΡΓΑΣΙΑ"

Transcript

1 ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΕΤΑΠΤΥΧΙΑΚΟ ΔΙΠΛΩΜΑ ΕΙΔΙΚΕΥΣΗΣ (MSc) στα ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ ΔΙΠΛΩΜΑΤΙKH ΕΡΓΑΣΙΑ «Αναδόμηση και Πρότυπα Σχεδίασης Λογισμικού» Πούλιας Σωτήριος Μ ΑΘΗΝΑ,

2

3 ΜΕΤΑΠΤΥΧΙΑΚΟ ΔΙΠΛΩΜΑ ΕΙΔΙΚΕΥΣΗΣ (MSc) στα ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ ΔΙΠΛΩΜΑΤΙKH ΕΡΓΑΣΙΑ «Αναδόμηση και Πρότυπα Σχεδίασης Λογισμικού» Πούλιας Σωτήριος Μ Επιβλέπων Καθηγητής: Γιακουμάκης Εμμανουήλ Εξωτερικός Κριτής: Μαλεύρης Νικόλαος ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΑΘΗΝΑ,

4 ΠΡΟΛΟΓΟΣ Η παρούσα εργασία αποτελεί την Διπλωματική Εργασία μου στo πλαίσιο του Προγράμματος Μεταπτυχιακών Σπουδών του Τμήματος Πληροφορικής του Οικονομικού Πανεπιστημίου Αθηνών. Η εργασία αφορά στη αναδόμηση του πηγαίου κώδικα ενός συστήματος λογισμικού προς πρότυπα σχεδίασης και εκπονήθηκε στην Αθήνα κατά το Ακαδημαϊκό Έτος , υπό την επίβλεψη του κ. Εμμανουήλ Γιακουμάκη, Καθηγητή ΟΠΑ. Θα ήθελα να ευχαριστήσω θερμά τον καθηγητή μου, Εμμανουήλ Γιακουμάκη, για την ανάθεση της εργασίας, την καθοδήγηση και τις συμβουλές που μου προσέφερε καθώς και τον διδάκτωρ Πληροφορικής κ. Νικόλαο Διαμαντίδη, για την πολύτιμη βοήθεια του και την επιμονή του στην συγγραφή αυτής της εργασίας. Επίσης, θα ήθελα να ευχαριστήσω τον διδάκτωρ Πληροφορικής κ. Βασίλειο Ζαφείρη, ο οποίος με την πολύτιμη βοήθεια του και τις χρήσιμες συμβουλές του συνεισέφερε στην υλοποίηση της εργασίας και στην βελτίωση της μεθοδολογίας που αυτή ακολουθεί. Αφιερώνω αυτή τη διπλωματική εργασία στους γονείς μου και στον αδερφό μου, που πάντα με στηρίζουν και πιστεύουν σε εμένα. Σωτήριος Η. Πούλιας 1

5 ΠΕΡΙΛΗΨΗ Η ποιότητα του πηγαίου κώδικα και η υποβάθμισή της αποτελούν το σημαντικότερo ίσως πρόβλημα που αντιμετωπίζουν οι μηχανικοί λογισμικού κατά τη φάση της συντήρησης του λογισμικού, καθιστώντας την άμεση αντιμετώπιση του αναγκαία. Η αναδόμηση σε πρότυπα σχεδίασης εστιάζεται στο πρόβλημα της υποβάθμισης του λογισμικού. Η αναδόμηση είναι η διαδικασία βελτίωσης της σχεδίασης του λογισμικού, με την εφαρμογή μετατροπών σε χαμηλό επίπεδο, χωρίς να μεταβάλλεται η εξωτερική του συμπεριφορά, ενώ τα πρότυπα σχεδίασης αποτελούν υψηλού επιπέδου λύσεις σε προβλήματα σχεδίασης που εμφανίζονται συχνά. Τα πλεονεκτήματα του συνδυασμού των δύο αυτών τεχνικών μπορούν να αξιοποιηθούν μέσω της αναδόμησης σε πρότυπα σχεδίασης. Τα εργαλεία αναδόμησης παρέχουν ταχύτητα και ασφάλεια, μειώνοντας ταυτόχρονα την πιθανότητα της εισαγωγής σφαλμάτων. Παρατηρείται, όμως, μικρός αριθμός εργαλείων που μπορούν να χειριστούν πολύπλοκους μετασχηματισμούς. Η παρούσα διπλωματική εργασία εξετάζει την αυτοματοποιμένη αναδόμηση στο πρότυπο «Μέθοδος Υπόδειγμα». Έτσι, ορίζεται ένα σύνολο από κατάλληλα κριτήρια ανίχνευσης. Τα αποτελέσματα, με το τέλος της διαδικασίας της αυτόματης ανίχνευσης, παρουσιάζονται στο χρήστη ως ταξινομημένη λίστα και ο χρήστης έχει την δυνατότητα να εξετάσει τις προτεινόμενες αναδομήσεις και να επιλέξει αυτές που επιθυμεί. Κατά την διαδικάσια εφαρμογής της αναδόμησης, το αφηρημένο συντακτικό δέντρο του πηγαίου κώδικα, το οποίο αποτελεί την απεικόνιση του κώδικα με χρήση κόμβων και ακμών, ανασυντάσσεται και το αναμορφωμένο πλέον δέντρο εφαρμόζεται αυτόματα στον πηγαίο κώδικα. Η μεθοδολογία υλοποιήθηκε στην γλώσσα προγραμματισμού Java και κάνει χρήση των βιβλιοθήκών JDT και LTK της πλατφόρμας Eclipse. Το αποτέλεσμα είναι ένα εργαλείο που ενσωματώθηκε στο ήδη υπάρχον εργαλείο αναδόμησης Eclipse IDE JDeodorant. Κατά την διάρκεια υλοποίησης του εργαλείου, αλλά και μετά την ολοκλήρωσή του, έγινε ο έλεγχος της λειτουργίας του και των αποτελεσμάτων του σε διάφορα προγράμματα ανοιχτού κώδικα. Σωτήριος Η. Πούλιας 2

6 ABSTRACT The quality of the source and its degradation constitute, perhaps, the most important problem faced by software engineers during maintenance phase of software, making its immediate treatment necessary. The refactoring in design patterns overcomes the problem of degradation of the software. The reconstruction process is the improvement of the design of the software, with conversions application to low level, without changing the external behavior, while the design patterns are high level design solutions to often observed problems. The advantages of combining these two techniques can be exploited through refactoring to design patterns. The refactoring tools provide speed and safety, while reducing the likelihood of introducing errors. There is, however, a small number of tools that can handle complex refactorings. This thesis examines the automatic refactoring to the pattern Template Method. So, a set of appropriate criteria detection are defined. The results, by the end of the process of automatic detection, are presented to the user as an ordered list and the user has the opportunity to consider the proposed refactorings and choose those that he desires. During the implementation process of refactoring, the abstract syntax tree of the source code, which is the representation of the code by using nodes and edges, is rewritten and the revised tree is automatically applied to the source code. The methodology is implemented in Java and makes use of the libraries LTK and JDT of Eclipse platform. The result is a tool integrated into the existing refactoring tool Eclipse IDE JDeodorant. During and after the implementation, the tool s function and results was tested in various open source projects. Σωτήριος Η. Πούλιας 3

7 ΠΕΡΙΕΧΟΜΕΝΑ ΠΡΟΛΟΓΟΣ... 1 ΠΕΡΙΛΗΨΗ... 2 ABSTRACT... 3 ΠΕΡΙΕΧΟΜΕΝΑ... 4 ΕΥΡΕΤΗΡΙΟ ΠΙΝΑΚΩΝ... 6 ΕΥΡΕΤΗΡΙΟ ΕΙΚΟΝΩΝ Εισαγωγή Αναδόμηση Κώδικα και Πρότυπα Σχεδίασης Λογισμικού Αναδόμηση Κώδικα Εξαγωγή Μεθόδου Μετακίνηση Μεθόδου Πρότυπα Σχεδίασης Λογισμικού Αναδόμηση Κώδικα σε Πρότυπα Σχεδίασης Λογισμικού Αναδόμηση Κώδικα σε Μέθοδο Υπόδειγμα Μέθοδος Υπόδειγμα Μέθοδοι Αναδόμησης προς Μέθοδο Υπόδειγμα Ανίχνευση και Απαλοιφή Κλώνων Κώδικα Προσέγγιση της Διαμόρφωσης Μεθόδου Υπόδειγμα Υλοποίηση Αναδόμησης στο Πρότυπο Μέθοδος Υπόδειγμα Η Οσμή Κλήση Super Μεθόδου Εργαλείο Αυτοματοποιημένης Αναδόμησης JDeodorant Αφηρημένα Συντακτικά Δένδρα AST Γράφος Ροής Ελέγχου CFG Γράφος Εξαρτήσεων Προγράμματος PDG Διάσπαση Μεθόδων Αντικατάσταση Κλήσης Super με Μέθοδο Υπόδειγμα Σωτήριος Η. Πούλιας 4

8 5.1. Ανίχνευση Υποψηφιοτήτων για Αναδόμηση Προϋποθέσεις Αναδόμησης Υποψηφίου Εφαρμογή Αναδόμησης Δημιουργία Νέων Δηλώσεων Προβολή Αλλαγών και Εφαρμογή Εμπειρική Αξιολόγηση Συστήματα Λογισμικού Αποτελέσματα Αξιολόγησης Κλιμακωσιμότητα Μεθοδολογίας Σύγκριση με Μεθοδολογίες της Βιβλιογραφίας Συμπεράσματα ΠΑΡΑΡΤΗΜΑ Α: Δομή Αποθήκευσης Υποψηφίων ΒΙΒΛΙΟΓΡΑΦΙΚΕΣ ΑΝΑΦΟΡΕΣ Σωτήριος Η. Πούλιας 5

9 ΕΥΡΕΤΗΡΙΟ ΠΙΝΑΚΩΝ Πίνακας 1. Αναδομήσεις Fowler Πίνακας 2. Πρότυπα Σχεδίασης Πίνακας 3. Αναδομήσεις σε Πρότυπα Σχεδίασης Λογισμικού Πίνακας 4. Περιορισμοί του Αλγορίθμου Αφαίρεσης Κλώνων Πίνακας 5. Πείραμα Σύγκρισης των Αποτελεσμάτων του CRat Πίνακας6. Αποτελέσματα Design Pattern Detection Tool Πίνακας 7. Αποτελέσματα Ανίχνευσης Υποψηφίων Συγκριτικά με το Πλήθος Κλήσεων Super Πίνακας 8. Χαρακτηριστικά Μηχανήματος Αξιολόγησης Κλιμακωσιμότητας Πίνακας 9. Χρόνος Ανίχνευσης Υποψηφίων Αναδόμησης Πίνακας 10. Σύγκριση με εργαλείο CRat στο ApacheAnt Σωτήριος Η. Πούλιας 6

10 ΕΥΡΕΤΗΡΙΟ ΕΙΚΟΝΩΝ Εικόνα 1. Εξαγωγή Μεθόδου Εικόνα 2. Μετακίνηση Μεθόδου Εικόνα 3. Πρότυπα Σχεδίασης Εικόνα 4. Διαμόρφωση Μεθόδου Υπόδειγμα Εικόνα 5.Πρότυπο - Μέθοδος Υπόδειγμα Εικόνα 6. Παράδειγμα Προτύπου Μέθοδος Υπόδειγμα Εικόνα 7. Τρόπος ΠαρουσίασηςΑποτελεσμάτων στο CRat Εικόνα 8. Εφαρμογή της Αναδόμησης Διαμόρφωση Μεθόδου Υπόδειγμα Εικόνα 9. Παράδειγμα Κλάσης Εικόνα 10. AST κλάσης Εικόνα 11. Παράδειγμα Διάσπασης Απλών Μεθόδων Εικόνα 12. Παράδειγμα Διάσπασης Μεθόδων με Αυξημένη Πολυπλοκότητα Εικόνα 13. Παρουσίαση Αποτελεσμάτων Ανίχνευσης Εικόνα 14. Αποτέλεσμα Αναδόμησης Εικόνα 15. Είδη Δηλώσεων Εικόνα 16. Παρουσίαση Αναδόμησης στην Υποκλάση Εικόνα 17. Παρουσίαση Αναδόμησης στην Υπερκλάση Εικόνα 18. Διάγραμμα Κλάσης Υποψηφίου Σωτήριος Η. Πούλιας 7

11 1. Εισαγωγή Η ανάπτυξη που παρατηρείται στην τεχνολογία λογισμικού συνδέεται άμεσα με την αύξηση της σημασίας της συντήρησης του. Όσο πιο μεγάλη αξία αποκτά το λογισμικό, γίνονται όλο και πιο απαραίτητες οι διαρκείς ενημερώσεις στην λειτουργικότητα του, ώστε να παραμείνει βιώσιμο. Η αύξηση αυτή προκύπτει και ως αποτέλεσμα διάφορων ερευνών, καθώς παρατηρήθηκε πως η φάση της συντήρησης του λογισμικού μπορεί να καταλαμβάνει έως και το 90% του κόστους της ανάπτυξής του [1]. Η φάση της συντήρησης συνδέεται με τις αλλαγές στις απαιτήσεις, αλλά και την εξέλιξη των τεχνολογιών που χρησιμοποιούνται και επιβάλλουν τον εκσυχρονισμό των συστημάτων και την επεκτασιμότητά τους, με προσθήκη νέων λειτουργιών. Όμως, κατά την συντήρηση του, το λογισμικό, κινδυνεύει να χάσει την ποιότητά του. Για την βελτίωση της ποιότητας ενός συστήματος λογισμικού, με μείωση του κόστους και της προσπάθειας, προτείνεται η μεθοδολογία χρήσης των προτύπων σχεδίασης λογισμικού (design patterns). Τα πρότυπα σχεδίασης ορίζονται ως προτιμώμενες λύσεις σε κοινά σχεδιαστικά προβλήματα και επικεντρώνουν στην αντικειμενοστρέφια του λογισμικού και στην σύνδεση των κλάσεων, των μεθόδων και των αντικειμένων του. Επίσης, αξιοποιούν τις έννοιες της αντικειμενοστραφούς σχεδίασης, όπως η κληρονομικότητα. Μία άλλη μεθοδολογία βελτιώσης της ποιότητας του λογισμικού, κατά την φάση της συντήρησης, είναι η αναδόμηση (refactoring). Η αναδόμηση αφορά τον μετασχηματισμό του πηγαίου κώδικα, ώστε να βελτιωθεί η σχεδίασή του, χωρίς όμως να τροποποιείται η εξωτερική συμπεριφορά του λογισμικού. Στην παρούσα διπλωματική εργασία, αναλύεται ο συνδυασμός των δύο αυτών μεθοδολογιών, της αναδόμησης και των προτύπων σχεδίασης, ώστε να αυξηθεί η συντηρησιμότητα και η επεκτασιμότητα του πηγαίου κώδικα. Παρόλα αυτά, παρατηρείται έλλειψη στη βιβλιογραφία σχετικά με τις μεθοδολογίες αυτόματης αναδόμησης. Τα εργαλεία που υπάρχουν εστιάζουν μόνο σε ένα μέρος των αναδομήσεων, σε χαμηλό επίπεδο και σε ελάχιστα πρότυπα σχεδίασης. Σκοπός της παρούσας εργασίας είναι η αξιολόγηση της αυτοματής ανίχνευσης και εφαρμογής του προτύπου σχεδίαση Μέθοδος Υπόδειγμα (Template Method). Η υλοποίηση πρέπει να αντιμετωπίζει τα προβλήματα του λογισμικού με μείωση σύζευξης, μείωση κατανάλωσης πόρων, μείωση πολυπλοκότητας κ.α. Σωτήριος Η. Πούλιας 8

12 Τα ζητήματα που ερευνά η παρούσα εργασία κατανέμονται σε κεφάλαια. Έτσι, στο Κεφάλαιο 2 παρουσιάζονται οι έννοιες της αναδόμησης και των προτύπων σχεδίασης, αλλά και η βιβλιογραφική ανάλυση πηγών που αναφέρονται σε αυτές, ώστε να γίνουν κατανοητά τα χαρακτηριστικά και οι εφαρμογές τους. Στη συνέχεια στο Κεφάλαιο 3, η έρευνα επικεντρώνεται στο πρότυπο σχεδίασης «Μέθοδος Υπόδειγμα» (Template Method) και στην αναδόμηση που μπορεί να το εφαρμόσει, η οποία ονομάζεται «Διαμόρφωση Μεθόδου Υπόδειγμα». Στο ίδιο κεφάλαιο περιέχεται η βιβλιογραφική ανασκόπηση για την συγκεκριμένη αναδόμηση, αλλά και η ανάλυση της, ώστε να γίνει πιο κατανοητός ο τρόπος που αυτή λειτουργεί, παρουσιάζοντας τα προβληματικά σημεία που προσπαθεί να επιλύσει, καθώς και το αποτέλεσμα στο οποίο στοχεύει. Ακόμη, παρουσιάζεται η έννοια της κλήσης super μεθόδου, η οποία αποτελεί και το κεντρικό σημείο αναδόμησης στη μεθοδολογία που ακολουθεί η εργασία. Ακολούθως, στο Κεφάλαιο 4 ερευνάται η αυτοματοποιημένη αναδόμηση προς το πρότυπο «Μέθοδος Υπόδειγμα». Πιο συγκεκριμένα, παρουσιάζεται το εργαλείο JDeodorant, το οποίο αποτέλεσε την βάση για την υλοποίηση της προσέγγισης της παρούσας εργασίας και οι δομές τις οποίες χρησιμοποιεί ώστε να επιτύχει την αναδόμηση. Επίσης, παρουσιάζεται ο τρόπος με τον οποίο το εργαλείο μπορεί να χρησιμοποιηθεί για την διάσπαση μεθόδων, αλλά και την αναδόμησή τους προς το πρότυπο «Μέθοδος Υπόδειγμα», μετασχηματίζοντας τις κλήσεις super. Στη συνέχεια, στο Κεφάλαιο 5, αναλύεται η μεθοδολογία που αναπτύχθηκε και υλοποιήθηκε στα πλαίσια της παρούσας εργασίας. Αρχικά, παρουσιάζεται η διαδικασία ανίχνευσης σημείων που περιέχουν κλήσεις super και θα μπορούσαν να αναδομηθούν με διαμόρφωση μεθόδου υπόδειγμα. Ακολούθως, αναλύονται οι προϋποθέσεις μια τέτοιας ανίχνευσης, δηλαδή τα κριτηρία που πρέπει να πληρεί μια αναδόμηση πριν εφαρμοστεί στον πηγαίο κώδικα του συστήματος λογισμικού. Ακόμη, στο ίδιο κεφάλαιο παρουσιάζεται ο τρόπος εμφάνισης των αποτελεσμάτων της ανίχνευσης αλλά και η εφαρμογή της αναδόμησης και οι αλλαγές που αυτή επιφέρει στον πηγαίο κώδικα. Στην μεθοδολογία της παρούσας εργασίας, εκτελέστηκε πειραματική αξιολόγηση, η οποία παρουσιάζεται στο Κεφάλαιο 6, ώστε να αποτιμηθεί η ποιότητα των αποτελεσμάτων, η κλιμακωσιμότητα της μεθόδου, καθώς και η χρησιμότητα της σαν εργαλείο αναδόμησης των κλήσεων super. Η πειραματική εφαρμογή και αξιολόγηση γίνεται σε ανοιχτού-κώδικα συστήματα λογισμικού και παρουσιάζονται τα αποτελέσματα για κάθε ένα από αυτά. Επιπροσθέτως, γίνεται σύγκριση με τα αποτελέσματα προγενέστερων μεθοδολογιών, οι οποίες έχουν ως αποτέλεσμα την διαμόρφωση μεθόδου υποδείγμα. Οι μεθοδολογίες αυτές μπορούν να λειτουργήσουν συμπληρωματικά με την προτεινόμενη μεθοδολογία, ώστε να επιτευχθούν πιο ολοκληρωμένες Σωτήριος Η. Πούλιας 9

13 προσεγγίσεις στην αναδόμηση προς το πρότυπο σχεδίασης «Μέθοδος Υπόδειγμα». Τέλος, στο Κεφάλαιο 7, συνοψίζεται η λειτουργικότητα και η συνεισφορά της παρούσας εργασίας και της μεθοδολογίας που αυτή πραγματεύεται, στην ήδη υπάρχουσα βιβλιογραφία. Επίσης, παρουσιάζονται ενδιαφέροντα ερευνητικά ζητήματα που προέκυψαν κατά την διαδικασία της ανάπτυξης. Τα ζητήματα αυτά χρήζουν μελλοντικής ενασχόλησης και αφορούν επεκτάσεις της μεθοδολογίας που αναπτύχθηκε στα πλαίσια της παρούσας διπλωματικής εργασίας. Σωτήριος Η. Πούλιας 10

14 2. Αναδόμηση Κώδικα και Πρότυπα Σχεδίασης Λογισμικού Η αναδόμηση κώδικα παρουσιάστηκε ως έννοια για πρώτη φορά στη διατριβή του Opdyke [2] και ορίζεται ως η διαδικασία τροποποίησης της εσωτερικής δομής του κώδικα με τέτοιο τρόπο, ώστε να μένει αμετάβλητη η εξωτερική συμπεριφορά του. Επίσης, ο Fowler [3] στο βιβλίο του παρουσιάζει δύο διαφορετικούς ορισμούς, όπου η λέξη «αναδόμηση» δηλώνει διαδικασία και ενέργεια (αναδομώ). Αναδόμηση (Διαδικασία): μια αλλαγή στην εσωτερική δομή του λογισμικού, ώστε να είναι ευκολότερη η κατανόησή του και οικονομικότερη η τροποποίησή του, χωρίς να μεταβάλλεται η εξωτερικά παρατηρήσιμη συμπεριφορά του. Αναδομώ (Ενέργεια): αναδιαθρώνω το λογισμικό εφαρμόζοντας μία ακολουθία αναδομήσεων χωρίς να τροποποιείται η εξωτερικά παρατηρήσιμη συμπεριφορά του. Τέλος, η αναδόμηση εφαρμόζεται σε επίπεδο κώδικα στα πλαίσια της αντικειμενοστραφούς σχεδίασης, κάνοντας χρήση των αρχών της κληρονομικότητας, της ενθυλάκωσης και άλλων, για την ανακατανομή των κλάσεων, των μεθόδων και των μεταβλητών ώστε να διευκολυνθούν μελλοντικές προσθήκες. Αναδόμηση, επίσης, μπορεί να εφαμορστεί και στο επίπεδο μοντέλου, μετασχηματίζοντας τα διαγράμματα ενός υπάρχοντος συστήματος. Τα πρότυπα σχεδίασης, από την άλλη, παρέχουν ένα κοινό λεξιλόγιο για την επικοινωνία μεταξύ των μηχανικών λογισμικού. Αποτελούν έτοιμες ή σχεδόν έτοιμες λύσεις σε κοινά και επαναλαμβανόμενα προβλήματα σχεδίασης. Η αξιοποίησή τους διευκολύνει το έργο των μηχανικών λογισμικού καταλήγοντας σε λογισμικό υψηλής ποιότητας. Τα οφέλη των προτύπων σχεδίασης αξιοποιούνται κατά τις φάσεις της ανάπτυξης και της συντήρησης. Στη δεύτερη, τα πρότυπα μπορούν να παραχθούν μέσω των κατάλληλων αναδομήσεων του πηγαίου κώδικα ώστε να βελτιωθεί η ποιότητα του παραγόμενου σχεδίου Αναδόμηση Κώδικα Ο Fowler [3] ορίζει ως αναδόμηση την αλλαγή που γίνεται στην εσωτερική δομή του λογισμικού, ώστε να γίνει αυτό πιο κατανοητό και πιο φθηνή η τροποποίησή του, χωρίς να αλλάζει η εξωτερική Σωτήριος Η. Πούλιας 11

15 του συμπεριφορά. Δηλαδή ο χρήστης δεν μπορεί να καταλάβει καμία διαφορά στην λειτουργικότητα του συστήματος. Με την αναδόμηση μπορούμε να ξαναδώσουμε αξία στο λογισμικό, δίνοντας του ιδιότητες που μας βοηθούν να συνεχίσουμε τη γρήγορη ανάπτυξη του. Επίσης, η αναδόμηση κώδικα μπορεί να χαρακτηριστεί και ως «καθαρισμός» κώδικα, ο οποίος γίνεται με επαρκή και ελεγχόμενο τρόπο. Παρόλα αυτά, η αναδόμηση κώδικα δεν αποτελεί πανάκεια στα προβλήματα που παρατηρούνται στο λογισμικό. Αποτελεί, όμως, ένα εργαλείο που βοηθάει στη διατήρηση καλοσχεδιασμένου κώδικα. Η έννοια της αναδόμησης (refactoring) συγχέεται εύκολα με τους όρους του ανασχεδιασμού (reengineering) και της αναδιάθρωσης (restructuring). Η πιο υψηλού επιπέδου έννοια είναι αυτή του ανασχεδιασμού και εμπεριέχει τις έννοιες της αναδόμησης και της αναδιάθρωσης. Οι Chikofsky και Cross [4] ορίζουν τον ανασχεδιασμό ως την εξέταση και μετατροπή του συστήματος για την ανασύστασή του σε μια νέα μορφή και τη μεταγενέστερη υλοποίησή του βάσει της νέας αυτής μορφής. Ο ανασχεδίασμος στοχεύει στη δημιουργία ενός καλά δομημένου συστήματος από υποβαθμισμένο ή παλιό κώδικα. Επίσης, μπορεί να αφορά την μετατροπή του κώδικα σε άλλη γλώσσα προγραμματισμού και μπορεί να περιλαμβάνει και αντίστροφο σχεδιασμό (reverse engineering) ώστε να επιτευχθεί μια σωστή αναπαράσταση. Η έννοια της αναδιάθρωσης ορίζεται σύμφωνα με τους Chikofsky και Cross [4] ως ο μετασχηματισμός από μια μορφή αναπαράστασης σε μια άλλη, στο ίδιο σχετικό επίπεδο αφαίρεσης, διατηρώντας παράλληλα, το σύστημα, την εξωτερική του συμπεριφορά. Η αναδιάθρωση αφορά την εμφάνιση του κώδικα με την παραδοσιακή έννοια της σχεδίασης, ενώ δεν προϋποθέτει την κατανόηση του κώδικα. Ένα παράδειγμα της αναδιάθρωσης είναι ο μετασχηματισμός ενός αδόμητου κώδικα (spaghetti code) σε δομημένο. Ένας από τους λόγους για τους οποίους μπορεί να χρησιμοποιηθεί η αναδόμηση, είναι για να αποφευχθεί η εμφάνιση διπλο-διατυπωμένου κώδικα. Με αυτόν τον τρόπο ένα κομμάτι κώδικα παρουσιάζεται μόνο μία φορά, κάτι που αποτελεί σημάδι καλής σχεδίασης. Ο Fowler [3] παρουσιάζει τα θετικά της αναδόμησης κώδικα, τα οποία επιγραμματικά είναι: Βελτίωση σχεδίασης του λογισμικού Πιο εύκολη η κατανόηση του κώδικα Πιο αποδοτική η ανεύρεση προβλημάτων (bugs) Πιο γρήγορη η διαδικασία προγραμματισμού Σωτήριος Η. Πούλιας 12

16 Στον αντίποδα, η αναδόμηση κώδικα ενέχει και κινδύνους. Για παράδειγμα, η παραγωγή σφαλμάτων στο λογισμικό και ο κίνδυνος μεταβολής της λειτουργικότητας του συνολικού συστήματος. Επίσης, η διαδικασία της αναδόμησης μπορεί να έχει υψηλό κόστος, καθώς υπάρχει η περίπτωση σπατάλης αρκετών ωρών. Τέλος, οι μηχανικοί λογισμικού (software engineers) παρουσιάζουν δυσπιστία σχετικά με την αναδόμηση. Ένας λόγος, για τον οποίο αυτό συμβαίνει είναι το γεγονός πως απαιτείται επιπλέον προσπάθεια από μέρους τους για την ολοκλήρωση μιας διαδικασίας αναδόμησης κώδικα. Οι κίνδυνοι αυτοί μπορούν να παρακαμφθούν, σύμφωνα με τους Mens και Tourwe [5], όταν η αναδόμηση εφαρμόζεται ως μια δομημένη διαδικασία, αποτελούμενη από διακριτές ενέργειες. Συγκεκριμένα οι ενέργειες αυτές είναι: 1. Ανίχνευση του υποψήφιου τμήματος του λογισμικού προς αναδόμηση 2. Προσδιορισμός της κατάλληλης αναδόμησης που ενδείκνυται στην εκάστοτε περίπτωση 3. Παροχή εχέγγυων για τη διατήρηση της συμπεριφοράς του συστήματος έπειτα από την αναδόμηση 4. Υλοποίηση της αναδόμησης 5. Αποτίμηση της αξίας της αναδόμησης μέσω αξιολόγησης στα ποιοτικά χαρακτηριστικά του λογισμικού ή των χαρακτηριστικών της ίδιας της διαδικασίας 6. Διατήρηση της συνοχής του αναδομημένου κώδικα και ενδεχόμενων συνοδευτικών εγγράφων που σχετίζονται με αυτόν (τεκμηρίωση, περιγραφή απαιτήσεων, διαγράμματα UML) Επιπροσθέτως, στην βιβλιογραφία αναφέρονται διάφορα είδη αναδομήσεων, τα οποία διαχωρίζονται αναλόγως με την πολυπλοκότητα, τον τρόπο εφαρμογής τους και την συμβολή ελέγχου κατά την ανάπτυξη. Τα είδη αυτά είναι τα εξής: Αναδόμηση χαμηλού επιπέδου: μετασχηματισμός σε επίπεδο κλάσης, μεθόδου ή μεταβλητής και δεν μεταβάλλει την συμπεριφορά του λογισμικού. Σύνθετη αναδόμηση: η αναδόμηση υψηλού επιπέδου που αποτελείται από σύνολο χαμηλού επιπέδου αναδομήσεις. Test-driven αναδόμηση: η αναδόμηση κατά την οποία ο παραγόμενος κώδικας αξιοποιεί την καθοδηγούμενη από ελέγχους ανάπτυξη (test-driven) και στη συνέχεια αντικαθιστά τον παλιό κώδικα. Η διαρκής αναδόμηση και η εκτέλεση της αποτελεί αρχή της εξελικτικής σχεδίασης (evolutionary Σωτήριος Η. Πούλιας 13

17 design) και των σύγχρονων μεθόδων ανάπτυξης λογισμικού. Η σχεδίαση μεταβάλλεται κάθε φορά κατάλληλα με την χρήση της αναδόμησης ώστε να εμπεριέχει της αλλαγές. Η αναδόμηση κώδικα μπορεί να γίνει με πολλούς τρόπους. Κάθε τρόπος αντιμετωπίζει και διαφορετικό πρόβλημα. Τα προβλήματα που μπορούν να αντιμετωπιστούν με αναδόμηση, ονομάζονται οσμές (bad smells). Οι λεγόμενες και ως «κακές οσμές» ορίστηκαν για πρώτη φορά από τον Beck [6] ως τα σημάδια κώδικα που υποδεικνύουν την ύπαρξη κάποιου προβλήματος και την ανάγκη κάποιου είδους βελτίωσης. Οι Fowler [3] και Kerievsky [7] παρέχουν καθοδήγηση στην ανίχνευση τέτοιων σχεδιαστικών προβλημάτων, στα οποία αποδίδουν χαρακτηριστικά ονόματα και αναλύουν με ποιες αναδομήσεις μπορεί να αντιμετωπιστεί το κάθε πρόβλημα. Οι διαφορετικές αναδομήσεις ομαδοποιούνται σε κατηγορίες όπως παρουσιάζονται στον Πίνακα 1. Κατηγορία Composing methods Αναδομήσεις Extract Method Inline Method Replace Temp with Query Moving features between objects Move Method Move Field Extract Class Inline Class Organizing data Encapsulate Field Replace Type Code with Subclasses Replace Type Code with State/Strategy Making method calls simpler Rename Method Add Parameter Remove Parameter Introduce Parameter Object Replace Constructor with Factory Method Dealing with generalization Pull up Field Σωτήριος Η. Πούλιας 14

18 Pull up Method Push Down Field Push Down Method Extract Subclass Extract superclass Extract Interface Form Template Method Replace Inheritance with Delegation Replace Delegation with Inheritance Big Refactorings Tease Apart Inheritance Extract Hierarchy Separate Domain From Presentation Πίνακας 1. Αναδομήσεις Fowler Ένα είδος τέτοιας οσμής είναι και ο διπλο-διατυπώμενος κώδικας, που αναφέρθηκε παραπάνω. Οι αναδομήσεις που σχετίζονται περισσότερο με την παρούσα εργασία, θα αναλυθούν περισσότερο από τις άλλες και παρουσιάζονται στη συνέχεια Εξαγωγή Μεθόδου Η εξαγωγή μεθόδου (Extract Method) αποτελεί τρόπο σύνθεσης μεθόδων. Ως παράδειγμα μπορεί να παρουσιαστεί μία μεγάλη σε έκταση μέθοδος, η οποία περιέχει πολλή πληροφορία που χάνεται στην περίπλοκη δομή της μεθόδου. Η λύση σε αυτού του είδους την οσμή είναι η εξαγωγή μεθόδου, με την οποία εξάγεται ένα μέρος του κώδικα ως ξεχωριστή καινούρια μέθοδος. Ωστόσο, το μεγάλο πρόβλημα στην αντιμετώπιση οσμών με εξαγωγή μεθόδου είναι ότι αυτή αντιμετώπιζει και χειρίζεται τοπικές μεταβλητές, οι ορίσμοί των οποίων, καθώς και οι αναθέσεις τιμών σε αυτές πρέπει να εισαχθούν στην καινούρια μέθοδο, ώστε να μην προκύψουν σφάλματα μετά την Σωτήριος Η. Πούλιας 15

19 αναδόμηση. Τοπικές μεταβλητές μπορεί να είναι και οι προσωρινές μεταβλητές που χρησιμοποιούνται για την επιτυχή διεξαγωγή ενός αλγόριθμου. Η εξαγωγή μεθόδου χρησιμοποιείται όταν θέλει κάποιος να έχει μικρές μεθόδους. Βέβαια, ο προγραμματιστής μπορεί να εκμεταλλευτεί στο έπακρο τις μικρές μεθόδους που δημιουργούνται, μόνο όταν αυτές είναι καλά ονοματισμένες. Γι αυτόν τον λόγο ο Fowler [3] προτείνει ότι αν δεν μπορεί κάποιος να δώσει ένα σημασιολογικά κατανοητό όνομα στην καινούρια μέθοδο, δεν πρέπει να την εξάγει. Τα βήματα της εξαγωγής είναι τα ακόλουθα: 1. Αντιγραφή του κώδικα που θα εξαχθεί σε μέθοδο. 2. Ανίχνευση τοπικών μεταβλητών στον κώδικα αυτόν. 3. Έλεγχος των προσωρινών μεταβλητών στον κώδικα. 4. Έλεγχος των περιπτώσεων επεξεργασίας των τοπικών μεταβλητών στον κώδικα που θα εξαχθεί. 5. Ορισμός των τοπικών μεταβλητών, που χειρίζεται η εξαχθείσα μέθοδος, ως ορίσματα. 6. Μεταγλώττιση του κώδικα για ανίχνευση λαθών. 7. Αντικατάσταση της χρήσης του εξαχθέντα κώδικα, με κλήση προς τη νέα μέθοδο. Ακολουθεί παράδειγμα του αποτελέσματος της εφαρμογής της εξαγωγής μεθόδου όπως παρουσιάζεται από τον Fowler [3]. void printowing(){ Enumeration e = _orders.elements(); Double outstanding = 0.0; //print banner System.out.println( **************** ); System.out.println( **Cutomer Owes** ); System.out.println( **************** ); Σωτήριος Η. Πούλιας 16

20 //calculate outstanding while(e.hasmoreelements()){ Order each = (Order) e.nextelement(); outstanding += each.getamount(); //print details System.out.println( name: +_name); System.out.println( amount: +outstanding); Μετά την εξαγωγή της μεθόδου printbanner() ο κώδικας γίνεται: void printowing(){ Enumeration e = _orders.elements(); Double outstanding = 0.0; printbanner(); //calculate outstanding while(e.hasmoreelements()){ Order each = (Order) e.nextelement(); outstanding += each.getamount(); //print details System.out.println( name: +_name); System.out.println( amount: +outstanding); Σωτήριος Η. Πούλιας 17

21 void printbanner(){ //print banner System.out.println( **************** ); System.out.println( **Cutomer Owes** ); System.out.println( **************** ); Η αναδόμηση του παραδείγματος παρουσιάζεται διαγραμματικά στην Εικόνα 1. Εικόνα 1. Εξαγωγή Μεθόδου Κάθε τρόπος αναδόμησης πρέπει να πληρεί κάποιες προϋποθέσεις. Στην περίπτωση της εξαγωγής μεθόδου, ένα πρόβλημα που πρέπει να αντιμετωπισθεί, είναι ο αριθμός των μεταβλητών στις οποίες ο εξαγόμενος κώδικας, αναθέτει τιμές. Αυτό, συμβαίνει γιατί η νέα μέθοδος μπορεί να επιστρέφει μόνο μία μεταβλητή στη μέθοδο που την καλεί. Αν παραπάνω από μια μεταβλητές πρέπει να επιστραφούν, τότε πρέπει να εξαχθεί αντίστοιχος αριθμός από μεθόδους και η καθεμιά από αυτές να επιστρέφει μία και μόνο μία μεταβλητή. Τέλος, για την αποδοτικότερη εξαγωγή της μεθόδου, προτείνεται ο συνδυασμός της χρήσης της μαζί με την αντικατάσταση προσωρινών μεταβλητών (Replace temp with query), την αντικατάσταση μεθόδου με μέθοδο αντικείμενο (Replace method with method object) και απομάκρυση αναθέσεων σε παραμέτρους (Remove assignments to parameters). Σωτήριος Η. Πούλιας 18

22 Μετακίνηση Μεθόδου Ένα σημαντικό κομμάτι στη σχεδίαση αντικειμένων, είναι η απόφαση ανάθεσης ευθυνών. Καλούμαστε να αποδόσουμε συγκεκριμένες ευθύνες και λειτουργικότητα σε αντικείμενα. Στην επίλυση αυτών των ζητημάτων, προτείνεται από τον Fowler [3] η χρήση της μετακίνησης μεθόδου (Move Method) για να μεταφέρεται η αντίστοιχη συμπεριφορά σε άλλα αντικείμενα. Σαν αποτέλεσμα, δημιουργείται μία καινούρια μέθοδος, με παρόμοιο σώμα, στην κλάση που τη χρησιμοποιεί περισσότερο. Η παλιά μέθοδος είτε διαγράφεται, είτε παραμένει χωρίς να προσδίδει κάποια λειτουργικότητα. Εικόνα 2. Μετακίνηση Μεθόδου Η μετακίνηση μεθόδου συνιστάται στην περίπτωση κλάσης με μεγάλη σε όγκο λειτουργικότητα και πολύπλοκη συμπεριφορά, κάνοντας την κλάση πιο απλή και δομώντας τις ευθύνες καλύτερα ανάμεσα στα αντικείμενα. Τα βήματα υλοποίησης της μετακίνησης προτείνονται ως εξής: 1. Έλεγχος των ιδιοτήτων που χρησιμοποιούνται από μια μέθοδο. 2. Έλεγχος των υποκλάσεων και των υπερκλάσεων της κλάσης που ανήκει η εξεταζόμενη Σωτήριος Η. Πούλιας 19

23 μέθοδος. 3. Δήλωση της μεθόδου στην κλάση που εκείνη θα μεταφερθεί. 4. Αντιγραφή του κώδικα από την μέθοδο-πηγή στην κλάση. 5. Μεταγλώττιση της κλάσης που μεταφέρθηκε η κλάση. 6. Απόφαση τρόπου κλήσης της νέας μεθόδου μέσω αντικειμένου. 7. Μετατροπή της αρχικής μεθόδου ως μέσο μεταβίβαση στη νέα μέθοδο. 8. Μεταγλώττιση και έλεγχος. 9. Απόφαση για ολοκληρωτική διαγραφή της αρχικής μεθόδου. 10. Μεταγλώττιση και έλεγχος Πρότυπα Σχεδίασης Λογισμικού Τα πρότυπα σχεδίασης αποτελούν ένα κοινό λεξιλόγιο για την επικοινωνία μεταξύ των μηχανικών λογισμικού. Είναι έτοιμες, υψηλού επιπέδου σχεδιαστικές λύσεις σε κοινά προβλήματα σχεδίασης. Τα πρότυπα πρωτοεμφανίστηκαν στο συνέδριο OOPSLA από τον Kent Beck και τον Ward Cunnigham [8]. Σωτήριος Η. Πούλιας 20

24 Εικόνα 3. Πρότυπα Σχεδίασης Στη συνέχεια, στην αναγνώριση των προτύπων σχεδίασης συνέβαλε σημαντικά η έκδοση του βιβλίου Design Patterns: Elements of Reusable Object-Oriented Software από τους Erich Gamma, Richard Helm, Ralph Johnson και John Vlissides [9], οι οποίοι είναι γνωστοί και ως «Gang of Four». Στο βιβλίο τους καταγράφονται 23 πρότυπα σχεδίασης, τα οποία παρουσιάζονται στον Πίνακα 1 και η κατηγοριοποίηση τους γίνεται ως εξής: Σωτήριος Η. Πούλιας 21

25 Κατασκευαστικά πρότυπα σχεδίασης, που αφορούν την δημιουργία αντικειμένων. Δομικά πρότυπα σχεδίασης, που αφορούν την σύνθεση των κλάσεων και αντικειμένων. Συμπεριφορικά πρότυπα σχεδίασης, που αφορούν τους τρόπους σύνδεσης και αλληλεπίδρασης των αντικειμένων. Τα πρότυπα σχεδίασης κατηγοριοποιούνται και σύμφωνα με το κριτήριο της εμβέλειας σε πρότυπα κλάσης (class patterns), τα οποία αφορούν τις σχέσεις κληρονομικότητας που καθορίζονται μεταξύ κλάσεων και υποκλάσεων στατικά κατά το χρόνο μεταγλώττισης, και πρότυπα αντικειμένου (object patterns) που αφορούν τις συσχετίσεις αντικειμένων που καθορίζονται δυναμικά κατά το χρόνο εκτέλεσης [9]. Κατασκευαστικά Δομικά Συμπεριφορικά Διερμηνέας, Εμβέλεια Κλάση Μέθοδος Εργοστάσιο Προσαρμογέας Μέθοδος Υπόδειγμα Αλληλουχία Αρμοδιοτήτων, Προσαρμογέας, Εντολή, Εμβέλεια Αντικειμένου Αφηρημένο Εργοστάσιο, Κτίστης, Πρωτότυπο, Μοναδιαίο Γέφυρα, Σύνθετο, Διακοσμητής, Πρόσοψη, Αντιπρόσωπος Επαναλήπτης, Μεσολαβητής, Υπόμνηση, Παρατηρητής, Κατάσταση, Στρατηγική, Επισκέπτης Πίνακας 2. Πρότυπα Σχεδίασης Σωτήριος Η. Πούλιας 22

26 Η παρούσα εργασία ερευνά το πρότυπο Μέθοδος Υπόδειγμα, το οποίο σύμφωνα με τον Eric Freeman [10], αποτελεί μία μέθοδο που ορίζει τα βήματα ενός αλγορίθμου και επιτρέπει στις υποκλάσεις να υλοποιήσουν ένα ή περισσότερα από τα βήματα αυτά Αναδόμηση Κώδικα σε Πρότυπα Σχεδίασης Λογισμικού Τα πρότυπα σχεδίασης μπορούν να μεταφέρουν και να αποδώσουν καλή σχεδίαση στο λογισμικό. Οι εξελίξεις στον τομέα της μηχανικής λογισμικού, έχουν ως αποτελέσμα την συχνή χρήση των προτύπων σχεδίασης, η οποία συνέβαλλε ώστε να καθιερωθεί η άποψη πως τα πρότυπα σχεδίασης θα μπορούσαν να χρησιμοποιηθούν και με άλλο τρόπο στη βελτίωση του λογισμικού. Η δομή που προτείνεται από κάποιο πρότυπο σχεδίασης, θα μπορούσε να αποτελέσει την βάση για να δομηθεί ένας τρόπος αναδόμησης του κώδικα. Έτσι, η αναδόμηση του κώδικα σε κάποιο πρότυπο σχεδίασης, μπορεί να συμβάλλει στη βελτίωση σχεδίασης του κώδικα. Η αναδόμηση κώδικα σε πρότυπα σχεδίασης λογισμικού συνδυάζει το όφελος της εφαρμογής της αναδόμησης με τα πλεονεκτήματα των προτύπων σχεδίασης. Η αναδόμηση είναι μια σημαντική τεχνική για τη βελτίωση της σχεδίασης, ενώ τα πρότυπα σχεδίασης μειώνουν τις εξαρτήσεις των συστατικών του προγράμματος, αυξάνοντας την επεκτασιμότητα, την επαναχρησιμοποιησιμότητα, την ευελιξία και την συντηρησιμότητα, μειώνοντας τον χρόνο και το κόστος των φάσεων ανάπτυξης και συντήρησης του λογισμικού. Η αναδόμηση σε πρότυπα σχεδίασης παρουσιάστηκε για πρώτη φορά από τον Fowler [3]. Σε συνέχεια της δουλειάς του, ο Kerievsky [7] με το βιβλίο του συνέβαλε ακόμα περισσότερο στη βιβλιογραφία για την αναδόμηση κώδικα σε πρότυπα σχεδίασης. Αυτό που συχνά συμβαίνει είναι η σπατάλη χρόνου στη σχεδίαση και στη χρήση προτύπων σχεδίασης, ενώ ένα λογισμικό με συγκεκριμένες απαιτήσεις θα μπορούσε να υλοποιηθεί με πιο απλό τρόπο. Για την αντιμετώπιση τέτοιων ζητημάτων, προτείνεται να ακολουθηθεί ο προγραμματισμός με πρώτο βήμα τον έλεγχο και με τη χρήση πολλών αναδομήσεων. Με χρήση των ελέγχων μπορεί να διατηρηθεί μια ξεκάθαρη συμπεριφορά στο σύστημα, ενώ με χρήση των αναδομήσεων, διατηρείται η απλότητα του κώδικα χωρίς να περιέχονται πολυδιατυπώμενα κομμάτια του. Σωτήριος Η. Πούλιας 23

27 O Kerievsky [7], αιτιολογώντας γιατί προτείνει την αναδόμηση σε πρότυπα σχεδίασης, αναφέρει πως κατά την διάρκεια των αναδομήσεων, παρατηρεί κανείς την ανάγκη για περαιτέρω βελτίωση της σχεδίασης με χρήση προτύπων. Έτσι, χρησιμοποιείται η αναδόμηση σε πρότυπα σχεδίασης, ένας συνδυασμός των προτύπων σχεδίασης μαζί με τις αναδομήσεις που μπορούν να λύσουν αρκετά ζητήματα που προκύπτουν στο λογισμικό. Η αναδόμηση αυτή, όμως, θα πρέπει να γίνει με προσοχή ώστε να μην παραχθεί μια λύση που περιέχει περισσότερη πολυπλοκότητα, από όση χρειάζεται. Το κίνητρο της αναδόμησης σε πρότυπα, ουσιαστικά, είναι το ίδιο ακριβώς με αυτά της απλής αναδόμησης του κώδικα, δηλαδή την απλοποίηση και την βελτίωση του κώδικα. Άλλωστε, όπως παρατηρεί και ο Fowler [3], υπάρχει φυσική σχέση μεταξύ των προτύπων και των αναδομήσεων. Τα πρότυπα αποτελούν ένα επιθυμητό σημείο, οι αναδομήσεις είναι τρόποι να προσεγγιστεί το σημείο από κάπου αλλού. Η πρόταση αυτή συμφωνεί και με τους Gang of Four [9], οι οποίοι σημειώνουν πως τα πρότυπα σχεδίασης αποτυπώνουν αρκετές από τις δομές που προκύπτουν από την αναδόμηση. Άρα, τα πρότυπα σχεδίασης μπορούν να αποτελέσουν στόχο των αναδομήσεων. Πιο συγκεκριμένα, η αναδόμηση σε πρότυπα σχεδίασης καταλήγει στην εφαρμογή προτύπων στη φάση συντήρησης του λογισμικού. Στη φάση αυτή, οι ανάγκες και οι απαιτήσεις του συστήματος, μπορούν να προσδιοριστούν ακριβέστερα σε σχέση με τις πιο πρώιμες φάσεις του κύκλου ζωής του λογισμικού. Ο Kerievsky [7] αναλύει 27 διαφορετικές αναδομήσεις με πρότυπα σχεδίασης. Οι αναδομήσεις αυτές κατατάσσονται ανάλογα με το πρότυπο σχεδίασης που η καθεμιά αναφέρεται. Η κατάταξη τους παρουσιάζεται στον Πίνακα 3, ενώ η παρούσα εργασία στοχεύει στην αναδόμηση στο πρότυπο σχεδίασης «Μέθοδος Υπόδειγμα» (Template Method). Pattern To Towards Away Adapter Extract Adapter, Unify Interfaces with Adapter Unify Interfaces with Adapter Builder Encapsulate Composite with Builder Collecting Parameter Move Accumulation to Σωτήριος Η. Πούλιας 24

28 Collecting Parameter Command Replace Conditional Dispatcher with Command Replace Conditional Dispatcher with Command Composed Method Compose Method Composite Replace One/Many Distinctions with Composite, Extract Composite, Replace Implicit Tree with Composite Encapsulate Composite with Builder Creation Method Replace Constructors with Creation Method Decorator Move Embellishment to Decorator Move Embellishment to Decorator Factory Move Creation Knowledge to Factory, Encapsulate Classes with Factory Factory Method Introduce polymorphic creation with factory method Interpreter Replace Implicit Language with Interpreter Iterator Move Accumulation To visitor Null Object Introduce Null Object Σωτήριος Η. Πούλιας 25

29 Observer Replace hard coded notifications with observer Replace hard coded notifications with observer Singleton Limit Instantiation with singleton Inline singleton State Replace State altering conditionals with state Replace State altering conditionals with state Strategy Replace conditional logic with strategy Replace conditional logic with strategy Template Method Form template method Visitor Move accumulation to visitor Move accumulation to visitor Πίνακας 3. Αναδομήσεις σε Πρότυπα Σχεδίασης Λογισμικού Σωτήριος Η. Πούλιας 26

30 3. Αναδόμηση Κώδικα σε Μέθοδο Υπόδειγμα Ο διπλο-διατυπωμένος κώδικα, αποτελεί σύμφωνα με τον Fowler [3], οσμή, η οποία πρέπει να εξαλειφθεί. Ως εργαλείο για την εξάλειψή της χρησιμοποιείται η κληρονομικότητα. Υπάρχουν όμως περιπτώσεις, στις οποίες ο κώδικας δεν είναι ακριβώς πανομοιότυπος. Για παράδειγμα, δύο μέθοδοι μιας υποκλάσης, οι οποίες υλοποιούν με τον ίδιο τρόπο μερικά μόνο βήματα ενός αλγορίθμου και όχι ολόκληρο τον αλγόριθμο. Ωστόσο, για την βελτίωση του λογισμικού και την απαλοιφή των διπλο-διατυπωμένων κομματιών κώδικα, πρέπει να αντιμετωπιστεί και αυτή η περίπτωση. Ως λύση προτείνεται η μεταφορά των κοινών μόνο βημάτων των δύο μεθόδων της υποκλάσης, στην κλάση που βρίσκεται ψηλότερα στην ιεραρχία, και οι αρχικές μέθοδοι στην υποκλάση να γίνουν μία. Η αναδόμηση αυτή παρουσιάζεται στην Εικόνα 4. Σωτήριος Η. Πούλιας 27

31 Εικόνα 4. Διαμόρφωση Μεθόδου Υπόδειγμα Η αναδόμηση ονομάζεται Διαμόρφωση Μεθόδου Υπόδειγμα (Form Template Method) και κάνει χρήση του προτύπου σχεδίασης «Μέθοδος Υπόδειγμα», το οποίο έχει πολυμορφική συμπεριφορά Μέθοδος Υπόδειγμα Το πρότυπο σχεδίασης λογισμικού «Μέθοδος Υπόδειγμα» χρησιμοποιείται από τους μηχανικούς λογισμικού, όταν υπάρχει η πρόθεση να διατηρηθεί ένας σταθερός σκελετός του αλγορίθμου σε μια διαδικασία, διαφοροποιώντας ορισμένα μόνο βήματα στις υποκλάσεις. Στην Εικόνα 5 παρουσιάζεται η δομή του προτύπου. Σωτήριος Η. Πούλιας 28

32 Εικόνα 5.Πρότυπο - Μέθοδος Υπόδειγμα Οι Erich Gamma, Richard Helmet al. [9] για να αναδείξουν το κίνητρο χρήσης του συγκεκριμένου προτύπου, παρουσιάζουν ένα παράδειγμα χρήσης ενός πλαισίου (framework). Θεωρώντας, λοιπόν, ένα framework, το οποίο παρέχει τις κλάσεις Application και Document, η κλάση Application είναι υπεύθυνη για το άνοιγμα εγγράφων που υπάρχουν αποθηκευμένα σε κάποια εξωτερική μορφή, όπως για παράδειγμα ένα αρχείο. Το αντικείμενο του Document αναπαριστά την πληροφορία όταν το αρχείο διαβάζεται. Οι εφαρμογές που βασίζονται στο framework μπορούν να επεκτείνουν τις κλάσεις Application και Document, ώστε να καλύπτονται οι εκάστοτε απαιτήσεις. Στο παράδειγμα της Εικόνας 6 επεκτείνονται οι αφηρημένες μέθοδοι DoCreateDocument(), CanOpenDocument(), AboutToOpenDocument()από την κλάση Application, ενώ από την κλάση Document επεκτείνεται η αφηρημένη μέθοδος DoRead(). Σωτήριος Η. Πούλιας 29

33 Εικόνα 6. Παράδειγμα Προτύπου Μέθοδος Υπόδειγμα Η μέθοδος OpenDocument() της κλάσης Application ορίζει κάθε βήμα για το άνοιγμα του εγγράφου. Επίσης, ελέγχει αν το αρχείο μπορεί να ανοιχθεί και δημιουργεί ένα αντικείμενο Document προσθέτοντάς το στο σύνολο εγγράφων που έχει. Στη συνέχεια, διαβάζει την πληροφορία του αντικειμένου από το αρχείο. Η μέθοδος OpenDocument() καλείται μέθοδος υπόδειγμα (Template Method). Η μέθοδος υπόδειγμα ορίζει έναν αλγόριθμο ως αφηρημένη διαδικασία, τις οποίες οι υποκλάσεις μπορούν να επεκτείνουν και να υλοποιήσουν με μια συγκεκριμένη συμπεριφορά. Ορίζοντας κάποια βήματα του αλγορίθμου με υλοποίηση των αφηρημένων μεθόδων, η μέθοδος υπόδειγμα γνωρίζει πότε το έγγραφο είναι έτοιμο να ανοιχθεί (AboutToOpenDocument). Το πρότυπο «Μέθοδος Υπόδειγμα» πρέπει να χρησιμοποιείται: Για την υλοποίηση σταθερών βημάτων ενός αλγορίθμου μια φορά, ώστε να επιτρέπεται στις υποκλάσεις να υλοποιήσουν την συμπεριφορά που μπορεί να διαφέρει. Όταν κοινή συμπεριφορά μεταξύ των υποκλάσεων πρέπει να τοποθετείται σε μία κοινή υπερκλάση για αποφυγή διπλο-διατυπωμένου κώδικα. Αυτό αποτελεί ένα καλό παράδειγμα της «Αναδόμησης για Γενίκευση» που περιγράφει ο Opdyke [2]. Αρχικά, εντοπίζονται οι διαφορές στον κώδικα και στη συνέχεια διαχωρίζονται ο διαφορές αυτές σε ξεχωριστές μεθόδους. Τέλος, αντικαθίσταται ο διαφορετικός κώδικας με μέθοδο υπόδειγμα, η οποία καλέι μία από αυτές τις μεθόδους. Για τον έλεγχο των επεκτάσεων που υλοποιούν οι υποκλάσεις. Η μέθοδος υπόδειγμα καλεί τις μεθόδους που επεκτείνονται σε συγκεκριμένα σημεία. Σωτήριος Η. Πούλιας 30

34 Η χρήση του προτύπου ενδείκνυται στην τεχνική επαναχρησιμοποίησης κώδικα και αντιστρέφεται με αυτόν τον τρόπο ο έλεγχος. Χαρακτηριστικά, η κλάση-γονέας καλεί τις μεθόδους μιας υποκλάσης και όχι αντίστροφα. Κάτι που πρέπει να τονιστεί, είναι πως οι μέθοδοι υπόδειγματα πρέπει να ορίζουν ξεκάθαρα τις μεθόδους που μπορούν να υλοποιηθούν από τις υποκλάσεις και ποιες όχι. Ο κίνδυνος στη χρήση αυτού του προτύπου είναι να ξεχαστεί η κλήση της μεθόδου που επεκτείνεται Μέθοδοι Αναδόμησης προς Μέθοδο Υπόδειγμα Με το πρότυπο «Μέθοδος Υπόδειγμα», γίνεται χρήση της κληρονομικότητας, η οποία αποτελεί ένα δυνατό εργαλείο στην εξάλειψη της πολυδιατυπωμένης συμπεριφοράς. Η διαφορά που παρατηρείται σε αυτήν την αναδόμηση είναι ότι οι μέθοδοι δεν είναι ίδιες. Παρόλα αυτά, πρέπει να εξαλειφθούν τα διπλο-διατυπωμένα κομμάτια, διατηρώντας την διαφορετικότητα κάθε μεθόδου. Τα αλγοριθμικά βήματα που προτείνονται στη διαμόρφωση μεθόδου υπόδειγμα είναι [3]: 1. Αποσύνθεση των μεθόδων ώστε να είναι είτε πανομοιότυπες, είτε τελείως διαφορετικές. 2. Μεταφορά των πανομοιότυπων μεθόδων μέσα στην υπερκλάση. 3. Μετονομασία των διαφορετικών μεθόδων, ώστε να έχουν διαφορετικά ονόματα. 4. Μεταγλώττιση και έλεγχος μετά από κάθε μετονομασία. 5. Μεταφορά μιας από τις αρχικές μεθόδους στην υπερκλάση. Ορισμός των διαφορετικών μεθόδων ως αφηρημένες στην υπερκλάση. 6. Μεταγλώττιση και έλεγχος. 7. Αφαίρεση των άλλων μεθόδων και έλεγχος με κάθε αφαίρεση μεθόδου Ανίχνευση και Απαλοιφή Κλώνων Κώδικα Για να εφαρμοστεί η αναδόμηση πρέπει οι δυο μέθοδοι να ανήκουν σε υποκλάσεις με κοινή Σωτήριος Η. Πούλιας 31

35 υπερκλάση. Αυτό μπορεί να γίνει με χρήση της αναδόμησης «Μέθοδος Αντικείμενο» του Beck [6] ώστε να δημιουργηθεί η ιεραρχία των κλάσεων. Ενώ, με χρήση της εξαγωγής μεθόδου δημιουργείται η μέθοδος υπόδειγμα που είναι κοινή και στις δύο υποκλάσεις. Όπως παρατηρείται, το πρόβλημα που γίνεται προσπάθεια να αντιμετωπισθεί με την διαμόρφωση μεθόδου υπόδειγμα, είναι ο διπλο-διατυπωμένος κώδικας. Ο Juillerat [11] προτείνει έναν αλγόριθμο απαλοιφής κλώνων κώδικα, όπως ονομάζεται ο διπλο-διατυπωμένος κώδικας, και επικεντρώνεται σε κώδικα της γλώσσας προγραμματισμού Java. Ο αλγόριθμος αυτός προορίζεται για χρήση σε ένα ημίαυτοματοποιημένο εργαλείο αναδόμησης και αποτελεί μια υλοποίηση της εξαγωγής μεθόδου του Fowler [3]. Η γενική μεθοδολογία στην αφαίρεση κλώνων, περιλαμβάνει την εξαγωγή του κλώνου σε μία καινούρια μέθοδο και την αντικατάσταση όλων των εμφανίσεων του με κλήση προς αυτή. Mε τον αλγόριθμο αυτό, ο Juillerat [11] επεκτείνει τις προηγούμενες προσεγγίσεις στα ακόλουθα σημεία: Δεν αναδομεί τον κώδικα πριν την εξαγωγή του κλώνου. Ως αποτέλεσμα, ο νέος κώδικας βρίσκεται πιο κοντά στον αρχικό. Η λύση χειρίζεται τους περιορισμούς της Java, δηλαδή την μη υποστήριξη αναφορών ως παραμέτρων στις κλήσεις μεθόδων. Η μέθοδος λειτουργεί και για μικρά κομμάτια κώδικα-κλώνων. Η προσέγγιση αυτή χρησιμοποιεί τεχνικές που βασίζονται στα Γραφήματα Εξάρτησης Προγράμματος (Program Dependency Graph) [12] και στα Αφηρημένα Συντακτικά Δένδρα (AST) [13] τα οποία αναλύονται σε επόμενο κεφάλαιο. Επίσης, προτείνεται η χρήση περιορισμών για την αφαίρεση των κλώνων, ώστε να ικανοποιούνται και οι αντίστοιχες προϋποθέσεις της αναδόμησης (preconditions). Με χρήση των αφηρημένων συντακτικών δένδρων ορίζονται αρχικά οι ακόλουθοι περιορισμοί: Η μέθοδος που δημιουργείται να μην επιστρέφει δύο ή παραπάνω τιμές. Επίσης, εφαρμόζεται κάτω όριο στο μεγέθος του κώδικα που είναι όμοιος και θα αναδομηθεί. Κλώνος μπορεί να θεωρηθεί και ένα πολύ μικρό κομμάτι κώδικα, όπως κάποια μέθοδος που επιστρέφει τιμή μεταβλητής μέλους (getter). Τέτοιου είδους μέθοδοι δεν χρειάζεται να περιλαμβάνονται στην αναδόμηση. Σαν αποτέλεσμα, ο κώδικας που παράγεται είναι απλοποιημένος και έχει «καθαρή» σχεδίαση. Περιορισμό αποτελεί, επίσης, και ο κλώνος που περιλαμβάνει if, while και for ή όπως Σωτήριος Η. Πούλιας 32

36 ονομάζονται δηλώσεις ελέγχου (control statements). Σε αυτήν την περίπτωση, ο κώδικας που μεταφέρεται στην καινούρια μέθοδο πρέπει μεταφέρεται μαζί με τη δήλωση ελέγχου στην οποία εμπεριέχεται. Σαν αποτέλεσμα, ο αλγόριθμος διαχειρίζεται τις ακόλουθες περιπτώσεις: Τις δηλώσεις (statements) πριν το σώμα του κλώνου, δηλαδή του κοινού κώδικα, και από την αρχή του σώματος του κλώνου. Έτσι, παράγονται δύο διαφορετικές μέθοδοι. Τις δηλώσεις από το τέλος του σώματος και μετά το σώμα. Σε αυτήν την περίπτωση, εξάγονται δύο μέθοδοι. Τις δηλώσεις που αποτελούν μέλος δήλωσης ελέγχου. Επίσης, ο Juillerat [11] αναφέρει την ανάγκη εφαρμογής του αλγορίθμου αναδρομικά ώστε να αφαιρεθούν όλοι οι κλώνοι. Ενώ, συμφωνεί με τις προϋποθέσεις (precondictions) της αναδόμησης που έχει αναλύσει ο Fowler [3]. Συγκεκριμένα, ο αλγόριθμος λαμβάνει υπόψη τις επιστροφές που η εξαχθείσα μέθοδος πρόκειται να έχει. Ακόμα, ως προϋπόθεση ορίζεται η εξαγόμενη μέθοδος να μην περιλαμβάνει άλματα (jumps). Κάτι τέτοιο, δημιουργεί πάνω από ένα σημεία εξόδου στον κώδικα από μία δήλωση ελέγχου. Αυτή η περίπτωση παρατηρείται σε κομμάτια κώδικα που περιέχουν break, continue και return. Οι περιορισμοί όπως προκύπτουν από την προσέγγιση του Juillerat [11] παρουσιάζονται στον Πίνακα 4. Οι περιορισμοί ακολουθούν τις προϋποθέσεις της «Εξαγωγής Μεθόδου», όπως αυτή παρουσιάστηκε στην υπο-ενότητα Προϋποθέσεις της αναδόμησης με εξαγωγή μεθόδου Η μέθοδος δεν μπορεί να διασχίσει τα όρια ενός μπλοκ Το πολύ μία επιστροφή μεθόδου Το πολύ ένα σημείο εξόδου Καμία εξάρτηση τοπικής δήλωσης Περιορισμοί του αλγορίθμου Διάσπαση Επίλυση πολλαπλών ροών δεδομένων εξόδου Επίλυση πολλαπλών ροών ελέγχου εξόδου (μελλοντική εργασία) Σωτήριος Η. Πούλιας 33

37 Πίνακας 4. Περιορισμοί του Αλγορίθμου Αφαίρεσης Κλώνων Τέλος τα βήματα του αλγορίθμου που προτείνεται από τον Juillerat [11] είναι τα ακόλουθα: 1. Ανάλυση του κώδικα και δημιουργία του αντίστοιχου αφηρημένου συντακτικού δένδρου. 2. Δημιουργία λίστας δηλώσεων (statements) κώδικα κατά το διάβασμα του δένδρου που δημιουργήθηκε. 3. Ανίχνευση κλώνων στη λίστα. 4. Εφαρμογή των περιορισμών στις παραγόμενες λίστες και στο σύνολο των δηλώσεών του, οι οποίες αφορούν τους κλώνους κώδικα. 5. Εξαγωγή των δηλώσεων, οι οποίες δεν παρουσιάζουν ομοιότητα, συγκρίνοντας τις λίστες, σε μια καινούρια μέθοδο. 6. Επανεκκίνηση αλγορίθμου ώστε να μην ανιχνεύονται πλέον κλώνοι Προσέγγιση της Διαμόρφωσης Μεθόδου Υπόδειγμα Σε ένα άλλο άρθρο του, ο Juillerat [14] αναλύει την προσέγγιση του για την δημιουργία ενός αλγορίθμου, σχετικά με την αναδόμηση σε μέθοδο υπόδειγμα (Template Method). O αλγόριθμος αυτός χρησιμοποιεί ως βάση την μεθοδολογία αφαίρεσης κλώνων, η οποία αναλύθηκε παραπάνω. Στη διαμόρφωση μεθόδου υπόδειγμα πρέπει να αντιμετωπιστούν οι δηλώσεις του κώδικα απευθείας, καθώς η αναδόμηση αποτελεί έναν μετασχηματισμό. Στην προσέγγιση αυτή, αναφέρονται τα αφηρημένα συντακτικά δένδρα, αλλά και η φτωχή πληροφορία που αυτά περιέχουν σχετικά με τις δηλώσεις. Σαν αποτέλεσμα, προτείνεται ένας αλγόριθμος με 3 βήματα. 1. Ανίχνευση των διαφορών και των ομοιοτήτων 2. Ανάλυση των περιορισμών 3. Εξαγωγή των μεθόδων Ως λύση στο ζήτημα των περιορισμών είναι η αναφορά των περιορισμών (ή όπως τους αναφέρει ο Σωτήριος Η. Πούλιας 34

38 Fowler, preconditions) στον χρήστη, ώστε να τους επιλύσει πριν την εξαγωγή της μεθόδου. Το δεύτερο βήμα προσδίδει μια ευελιξία στον αλγόριθμο. Ένα σύνολο από δηλώσεις μπορεί να αναδομηθεί με διαφορετικούς τρόπους και σε αυτό το βήμα ζητείται από τον χρήστη να αποφασίσει τον τρόπο αναδόμησης. Τέλος, η πολυπλοκότητα ενός αλγορίθμου διάκρισης είναι O(n 2 ) στην χειρότερη περίπτωση, αλλά οι καλές υλοποιήσεις τυπικά έχουν σχεδόν γραμμική πολυπλοκότητα. Οι προσεγγίσεις που βασίζονται στα αφηρημένα συντακτικά δένδρα έχουν ως μέσο όρο O(n 2 ) πολυπλοκότητα. Έτσι, ο αλγόριθμος του Juillerat [14] αναμένεται να αποδίδει ελάχιστα πιο γρήγορα αποτελέσματα Υλοποίηση Αναδόμησης στο Πρότυπο Μέθοδος Υπόδειγμα Σημαντικό βήμα προς την υλοποίηση εργαλείων για το πρότυπο μέθοδος υπόδειγμα αποτελεί το εργαλείο CRat [15] [16]. Το CRat προσπαθεί να καλύψει τα κενά που αφήνουν τα υπόλοιπα εργαλεία αναδόμησης. Συγκεκριμένα, η προαναφερθείσα προσέγγιση του Juillerat [14] δεν υποστηρίζει ασήμαντες διαφορές που δεν έχουν αντίκτυπο στη συμπεριφορά του προγράμματος, όπως για παράδειγμα οι επαναλήψεις for και while. Η εφαρμογή του προτύπου μέθοδος υπόδειγμα έχει ως σκοπό την απομάκρυνση κλώνων κώδικα. Έτσι, το εργαλείο κάνει χρήση PDGs [12] ώστε να βρίσκεται η σχέση μεταξύ στοιχείων (δεδομένων και ελέγχου). Επίσης, το CRat [15] [16] κάνει την ανίχνευση των κλώνων με αυτόματο τρόπο. Ο αλγόριθμος ακολουθεί τα ακόλουθα βήματα: 1. Ανίχνευση κλώνων με PDG 2. Αναγνώριση μεθόδων για αναδόμηση σε μέθοδο υπόδειγμα 3. Ανίχνευση κοινής διεργασίας και μοναδικής διεργασίας για κάθε μέθοδο Το εργαλείο προσπαθεί να ανιχνεύσει υποψηφιότητες αναδόμησης βάσει μετρικών. Οι μετρικές αυτές γίνονται με χρήση ορισμένων κατωφλιών και είναι οι ακόλουθες: O βαθμός ομοιότητας μεταξύ δύο μεθόδων O αριθμός δηλώσεων που μπορούν να εξαχθούν Ο αριθμός δηλώσεων που πρέπει να παραμείνει Σωτήριος Η. Πούλιας 35

39 Ο αριθμός γραμμών κώδικα Ο αριθμός νέων μεθόδων που θα δημιουργηθούν Το βάθος κληρονομικότητας από την υπερκλάση μέχρι τις κλάσεις που έχουν τις δύο μεθόδους Τα αποτελέσματα της ανίχνευσης από το εργαλείο παρουσιάζονται στον χρήστη αναλυτικά επεξηγώντας τα σημεία του κώδικα που είναι κοινά, αλλά και τα σημεία που είναι μοναδικά για κάθε μέθοδο. Ο τρόπος παρουσίασης των αποτελεσμάτων αποτυπώνεται στην Εικόνα 7. Εικόνα 7. Τρόπος ΠαρουσίασηςΑποτελεσμάτων στο CRat Οι απαιτήσεις που έχει το CRat [15] για να αναδομήσει τον κώδικα είναι οι εξής: Μέθοδος υπόδειγμα στην κοινή μέθοδο Τουλάχιστον ένα ζεύγος κλώνων μεταξύ των 2 μεθόδων Σωτήριος Η. Πούλιας 36

40 Οι μέθοδοι να ανήκουν σε διαφορετικές κλάσεις Οι κλάσεις αυτές να έχουν κοινή υπερκλάση Οι μέθοδοι να έχουν κοινούς τύπους επιστροφής Οι μέθοδοι να έχουν ίδια ορίσματα κλήσης Η εφαρμογή της αναδόμησης ακολουθεί μια πολύπλοκη διαδικασία η οποία συνοπτικά αναλύεται στην Εικόνα 8. Στο παράδειγμα, αναδομείται η μέθοδος checkoption που έχουν οι κλάσεις CCCheckout και CCCheckin, διαφορετικά όμως υλοποιημένη. Τα κοινά βήματα των μεθόδων εξάγονται στη μέθοδο checkoption, η οποία ανήκει στην υπερκλάση ClearCase και δημιουργείται η αφηρημένη μέθοδος checkother. Οι υποκλάσεις υλοποιούν την νέα μέθοδο με διαφορετικούς τρόπους, σε μεθόδους, ο κώδικας των οποίων έχει εξαχθεί από τα διαφορετικά βήματα των αρχικών μεθόδων checkoption. Εικόνα 8. Εφαρμογή της Αναδόμησης Διαμόρφωση Μεθόδου Υπόδειγμα Σωτήριος Η. Πούλιας 37

41 Το εργαλείο έχει εφαρμοστεί σε διάφορα λογισμικά, όπως το Apache Ant [17]. Το κυριότερο πρόβλημα που κλήθηκαν να λύσουν οι Keisuke Hotta, Yoshiki Higo et al. [15] στην υλοποίηση του CRat είναι αυτό της ορατότητας της μεθόδου, καθώς η αναδόμηση μιας private μεθόδου μπορεί να δημιουργήσει σφάλματα. Επίσης, το CRat μέχρι στιγμής λειτουργεί μόνο για ζεύγη μεθόδων, δηλαδή ελέγχει τις κλάσεις ανά δύο, ώστε να διαπιστώσει εάν οι κλάσεις αυτές έχουν μεθόδους που μπορούν να αναδομηθούν με διαμόρφωση μεθόδου υπόδειγμα. Τέλος, χρειάζεται να διασφαλιστεί ακόμη περισσότερο η συμπεριφορά του εργαλείου. Για να αποδείξουν την ποιότητα του εργαλείου που υλοποίησαν, οι Keisuke Hotta, Yoshiki Higo et al. [15] [16] παραθέτουν συγκριτικό πίνακα που παρουσιάζει τις διαφορές των αποτελεσμάτων με την μέθοδο του Juillerat [14]. Τα αποτελέσματα αυτής της πειραματικής σύγκρισης αναλύονται στον Πίνακα 5. Ant Synapse Αριθμός Υποψηφίων CRat προσέγγιση> Juillerat et al. προσέγγιση Διαφορές της σειράς του κώδικα Διαφορές στα ονόμα μεταβλητών Διαφορές στον τρόπο υλοποίησης 0 0 Πανομοιότυπα Αποτελέσματα Πίνακας 5. Πείραμα Σύγκρισης των Αποτελεσμάτων του CRat 3.3. Η Οσμή Κλήση Super Μεθόδου Μέσω της κληρονομικότητας, κάθε κλάση κληρονομεί ιδιότητες και λειτουργίες από την υπερκλάση της. Η κλήση super αποτελεί την κλήση που κάνει η μέθοδος της υποκλάσης προς την αντίστοιχη μέθοδο της κλάσης που κληρονομεί. Η μέθοδος περιλαμβάνει την κλήση αυτή, ως Σωτήριος Η. Πούλιας 38

42 εντολή, μεταξύ των εντολών που περιλαμβάνει στο σώμα της. Με αυτόν τον τρόπο καλεί να εκτελεστούν τα βήματα της αντίστοιχης μεθόδου που κληρονομεί. Ο Fowler [18] αναλύοντας τις κλήσεις σε μεθόδους υπερκλάσεων από τις αντίστοιχες μεθόδους των υποκλάσεών τους καταλήγει πως πρόκειται για bad smell που παρατηρείται κυρίως στη χρήση αντικειμενοστραφών πλαισίων (frameworks). Σε αυτές τις περιπτώσεις, κληρονομείται λειτουργικότητα από μία κλάση, κάποιου framework που θέλουμε να χρησιμοποιήσουμε. Όμως, είναι απαραίτητο να αρχίσει η μέθοδος της δικής μας κλάσης με κλήση προς την αντίστοιχη μέθοδο που κληρονομεί. Με την χρήση των frameworks, τελικά, το λογισμικό μας δεν γίνεται τόσο ευέλικτο όσο θα περίμενε κανείς. Ο κώδικας πρέπει να ακολουθεί κάποιους κανόνες χωρίς να μπορεί να επαναορίσει μερικά από τα αλγοριθμικά βήματα που χρειάζεται. Επίσης, οι κλήσεις προς τις υπερκλάσεις, «κλείνουν» την πληροφορία που διαχειρίζεται το σύστημα και με αυτόν τον τρόπο γίνεται το σύστημα δυσκολότερα διαχειρίσιμο. Εν τέλει, ο Fowler [18] προσπαθώντας να αναδείξει το πρόβλημα αυτό, παρουσιάζει μια τεχνική αναδόμησης τέτοιων κλήσεων. public class EventHandler... public void handle (BankingEvent e) { housekeeping(e); public class TransferEventHandler extends EventHandler... public void handle(bankingevent e) { super.handle(e); initiatetransfer(e); Ως λύση, προτείνεται να χρησιμοποιείται μία μέθοδος υπόδειγμα. Έτσι, οι κλάσεις του προηγούμενου παραδείγματος αναδομούνται ως εξής: Σωτήριος Η. Πούλιας 39

43 public class EventHandler... public void handle (BankingEvent e) { housekeeping(e); dohandle(e); protected void dohandle(bankingevent e) { public class TransferEventHandler extends EventHandler... protected void dohandle(bankingevent e) { initiatetransfer(e); Σαν αποτέλεσμα, η υπερκλάση ορίζει μια μέθοδο και παρέχει μια άλλη μέθοδο για να την επαναορίσουν οι κλάσεις που την κληρονομούν, ή όπως ονομάζεται από τον Fowler [18], μέθοδος άγκιστρο (hook method). Επιπροσθέτως, προτείνονται διάφοροι τρόποι ορισμού της hook μεθόδου. Στο παραπάνω παράδειγμα, παρουσιάζεται ο τρόπος της κενής υλοποίησης, ο οποίος είναι χρήσιμος όταν μερικές από τις υποκλάσεις δεν χρειάζεται να ορίσουν επιπλέον λειτουργικότητα στη μέθοδο. Σε άλλη περίπτωση, όταν οι υποκλάσεις ακολουθούν τα ίδια ακριβώς βήματα στη μέθοδο, η hook μέθοδος μπορεί να περιέχει μία προεπιλεγμένη υλοποίηση, ως μέθοδος υπόδειγμα και να επιτρέπονται διαφοροποιήσεις από τις υποκλάσεις. Τέλος, στην περίπτωση που κάθε υποκλάση πρέπει να ορίζει διαφορετική λειτουργικότητα στη μέθοδο, σε σχέση με τις άλλες υποκλάσεις, τότε η hook μέθοδος, αρκεί να είναι ορισμένη στην υπερκλάση ως αφηρημένη. Ο Fowler [18] παρουσιάζει και την περίπτωση να πρέπει να συνδυαστούν πολλά frameworks. Σαν παράδειγμα, δίνεται το JUnit, το οποίο χρησιμοποιεί μέθοδο υπόδειγμα, ώστε να διαχειρίζονται οι εκτελέσεις όλων των ελέγχων. Σωτήριος Η. Πούλιας 40

44 public abstract class TestCase public void runbare() throws Throwable { setup(); try { runtest(); finally { teardown(); protected void setup() throws Exception { protected void teardown() throws Exception { Ο συνδυασμός χρήσης και με άλλο framework, όμως, θα μπορούσε να δημιουργήσει προβλήματα στη μέθοδο υπόδειγμα. Σαν λύση προτείνεται ο επαναορισμός της υποκλάσης ως εξής: public class AlphaTestCase extends TestCase... final protected void setup() throws Exception { alphaprojectsetup(); dosetup(); protected void dosetup() throws Exception { Σωτήριος Η. Πούλιας 41

45 Ακόμα, επειδή η παραπάνω λύση μπορεί να προκαλέσει σύγχυση στους προγραμματιστές για την λειτουργικότητα της μεθόδου setup(), ο Fowler [18] προτείνει και μια δεύτερη λύση. public class AlphaTestCase extends TestCase... public void runbare() throws Throwable { alphaprojectsetup(); setup(); try { runtest(); finally { teardown(); protected void setup() throws Exception { Η καλύτερη λύση, παρόλα αυτά, για να αποφευχθεί η χρήση αναδόμησης, με τη χρήση frameworks είναι οι σημειώσεις (annotations). Λύση, που έχει αρχίσει ήδη να εφαρμόζεται σε πολλά frameworks. Τα annotations επιτρέπουν να δίνονται περισσότερα δεδομένα σε μια μέθοδο, έχοντας περισσότερες επιλογές για μια συγκεκριμένη κατάσταση χρήσης. Σωτήριος Η. Πούλιας 42

46 4. Εργαλείο Αυτοματοποιημένης Αναδόμησης JDeodorant Η διαδικασία της αναδόμησης απαιτεί χρόνο και προσπάθεια. Αν οι απαιτήσεις αυτές συνδυαστούν με τις απαιτήσεις του σύγχρονου λογισμικού, συμπεραίνει κανείς ότι η χειρωνακτική εκτέλεση της αναδόμησης καθίσταται δύσκολη. Για να βοηθηθεί το δύσκολο φόρτο της αναδόμησης, έχουν υλοποιηθεί αρκετά εργαλεία, τα οποία αυξάνουν την ταχύτητα και παρέχουν ασφάλεια στο αποτέλεσμα της αναδόμησης. Τα εργαλεία αυτά χωρίζονται σε δύο κατηγορίες. 1. Τα ημι-αυτοματοποιημένα εργαλεία, στα οποία χρειάζεται η συμβολή των μηχανικών λογισμικού ώστε να εκτελεστεί πλήρως η αναδόμηση του κώδικα. 2. Τα πλήρως αυτοματοποιημένα εργαλεία, στα οποία η ανίχνευση των κατάλληλων σημείων κώδικα, αλλά και η αναδόμησή τους εκτελείται από αυτά. Το πιο διαδεδομένο εργαλείο αναδόμησης είναι το Smalltalk Refactoring Browser [19] [20] που είναι και το πρώτο εργαλείο αναδόμησης που υλοποιήθηκε. Ωστόσο, παρουσιάζεται έλλειψη στα εργαλεία αυτοματοποιημένης εκτέλεσης αναδομήσεων σε πρότυπα σχεδίασης. Η παρούσα εργασία προσπαθεί να υποστηρίξει την υλοποίηση αυτόματων εργαλείων για αναδομήσεις σε πρότυπα σχεδίασης, επικεντρώνοντας στο πρότυπο σχεδίασης Template Method (Μέθοδος Υπόδειγμα). Η έλλειψη των αυτοματοποιημένων εργαλείων που παρατηρείται οφείλεται στις δυσκολίες που ενέχει η υλοποίησή τους. Αρχικά, η εκτέλεση αυτόματης ανίχνευσης των σημείων αναδόμησης σε πρότυπα σχεδίασης με αξιόπιστο τρόπο αποτελεί μία από αυτές και δημιουργείται λόγω της εννοιολογικής φύσης των προβλημάτων στα οποία τα πρότυπα σχεδίασης καλούνται να δώσουν λύση. Ο πηγαίος κώδικας δεν μπορεί να αναλύσει εννοιολογικά τα προβλήματα και με αυτόν τον τρόπο κρίνεται αναγκαία η ανθρώπινη συμμετοχή, ώστε να ανιχνευθούν τα σημεία αναδόμησης. Επίσης, στην ανίχνευση σήμειων αναδόμησης εμπόδιο αποτελεί και ο προσδιορισμός του κατάλληλου προτύπου προς εφαρμογή. Ο προσδιορισμός αυτός είναι αποτέλεσμα του προβλήματος σημασιολογικής ανάλυσης του κώδικα, πρόβλημα δυσεπίλυτο με χρήση αυτόματων τεχνικών. Οι προσεγγίσεις αυτοματοποιημένης αναδόμησης, που παρουσιάζονται στη βιβλιογραφία, στηρίζονται σε τεχνικές ανίχνευσης, οι οποίες σύμφωνα με τον Τσάνταλη [21] κάνουν χρήση: Μετρικών Λογικού/δηλωτικού προγραμματισμού Σωτήριος Η. Πούλιας 43

47 Ταιριάσματος προτύπων Αναζήτησης Πιθανοτικών μοντέλων Τεχνικών οπτικοποίησης Στη διαδικασία αυτοματοποιημένης εκτέλεσης της αναδόμησης σε πρότυπα σχεδίασης, η δυσκολία που συναντάται αφορά την σύνθετη φύση των αναδομήσεων που πρέπει να εφαρμοστούν. Συγκρίνοντας τις απλές αναδομήσεις, που αφορούν μετασχηματισμούς στο δηλωτικό σώμα μιας εφαρμογής με τις αναδομήσεις σε πρότυπα σχεδίασης, οι οποίες αφορούν μετασχηματισμούς στο σώμα των μεθόδων και των εντολών, οι δεύτερες παρουσιάζουν μεγαλύτερη πολυπλοκότητα. Εξαιτίας όλων αυτών των εμποδίων που παρουσιάζονται, η έρευνα στην περιοχή της αναδόμησης σε πρότυπα σχεδίασης, βρίσκεται σε σχετικά πρώιμο στάδιο. Οι Τσάνταλης και Χατζηγεωργίου [22] προσέγγισαν ιδιαίτερα αποτελεσματικά το θέμα της αναδόμησης. Το ερευνητικό τους έργο επικεντρώνεται στην αυτοματοποίημενη ανίχνευση τμημάτων κώδικα προς αναδόμηση σε πρότυπα σχεδίασης, αλλά και στην αυτοματοποιημένη εφαρμογή των αναδομήσεων. Το αποτέλεσμα της έρευνάς τους ονομάζεται JDeodorant [22] [23]. Το εργαλείο JDeodorant αναλύει συντακτικά τον κώδικα παράγοντας ένα αφηρημένο συντακτικό δέντρο (AST). Το δέντρο αναλύεται ώστε να εντοπιστούν δομές που ικανοποιούν τα κριτήρια και τις προϋποθέσεις της αναδόμησης. Το JDeodorant λειτουργεί ως ένθεμα στη γνωστή πλατφόρμα Eclipse. Το AST [13] δημιουργείται, χρησιμοποιώντας την βιβλιοθήκη της Eclipse, JDT [24]. Για την εφαρμογή της αναδόμησης χρησιμοποιείται η βιβλιοθήκη LTK [25] της πλατφόρμας Eclipse, ώστε να ανασυνταχθεί το AST και να τροποποιηθεί ο πηγαίος κώδικας. Η παρούσα εργασία και η προσέγγιση της στην αναδόμηση στο πρότυπο σχεδίασης Μέθοδος Υπόδειγμα είναι βασισμένη στην έρευνα των Τσάνταλη και Χατζηγεωργίου, ενώ η υλοποίηση της χρησιμοποιεί το εργαλείο JDeodorant ως θεμέλιο. Το εργαλείο JDeodorant [22] [23] και η προσέγγιση των Τσάνταλη και Χατζηγεωργίου αντιμετωπίζουν επαρκώς τις δυσκολίες της αυτοματοποιημένης ανίχνευσης αλλά και εφαρμογής των αναδομήσεων σε πρότυπα σχεδίασης. Στη συνέχεια αναλύονται τα μέσα, για την αντιμετώπιση αυτών των δυσκολιών. Στην υλοποίηση της παρούσας εργασίας η μεθοδολογία αναδόμησης αξιοποίησε ως κύριο μέσο επίλυσης των δυσκολιών, τα αφηρημένα συντακτικά δένδρα [13], τα οποία αποτελούν μορφή αναπαράστασης του πηγαίου κώδικα. Σωτήριος Η. Πούλιας 44

48 4.1. Αφηρημένα Συντακτικά Δένδρα AST Τα αφηρημένα συντακτικά δέντρα (AST) [13] αποτελούν αναμφίβολα την δημοφιλέστερη αναπάρασταση κώδικα. Έτσι, επιτυγχάνεται η πλήρης αναπαράσταση με εξαίρεση τα κενά, τις κενές γραμμές και τα σχόλια, με την μορφή δέντρου. Κάθε δέντρο αποτελείται από μια ρίζα και ένα σύνολο από κόμβους φύλλα. Επιπροσθέτως, τα αφηρημένα συντακτικά δέντρα πλεονεκτούν σε σύγκριση με άλλες αναπαραστάσεις, καθώς αντιστοιχίζονται ένα-προς-ένα τα συστατικά του πηγαίου κώδικα. Στα μειονεκτήματα, όμως, των AST συγκαταλέγονται οι υψηλές απαιτήσεις τους σε πόρους, καθώς απαιτείται μεγάλο ποσό μνήμης για την αποθήκευσή τους, λόγω του όγκου πληροφορίας που εμπεριέχουν, ενώ μεγαλός είναι ο χρόνος δημιουργίας τους και διάσχισής τους. Τα AST συνδέονται με την BNF (Backus-Naur Form) γραμματική της εκάστοτε γλώσσας προγραμματισμού. Γι αυτόν τον λόγο, οι κανόνες που ισχύουν σε αυτές τις γραμματικές εφαρμόζονται και στα αφηρημένα συντακτικά δένδρα. Οι κανόνες αυτοί είναι οι εξής [26]: 1. Πεπερασμένος αριθμός τύπων σε αντιστοιχία με τον πεπερασμένο αριθμό μη-τερματικών συμβόλων και των εκφράσεων που ορίζονται από την γραμματική. 2. Κάθε κόμβος σχετίζεται με προκαθορισμένο σύνολο ιδιοτήτων-κόμβων, σύμφωνα με το συντακτικό που ορίζει η γραμματική. 3. Οι διάφοροι τύποι κόμβων υλοποιούνται με τη μορφή κλάσεων που ανήκουν σε ιεραρχία. Η ιεραρχία τους καθορίζεται με βάση τη γραμματική της γλώσσας προγραμματισμού. 4. Κάθε τύπος κόμβου διαθέτει ένα προκαθορισμένο σύνολο ιδιοτήτων, το οποίο ορίζεται σύμφωνα με το συντακτικό της γραμματικής. Εικόνα 9. Παράδειγμα Κλάσης Σωτήριος Η. Πούλιας 45

49 Στην Εικόνα 9 παρουσιάζεται το παράδειγμα μιας απλής κλάσης. Το αφηρημένο συντακτικό δέντρο της κλάσης αυτής παρουσιάζεται στην Εικόνα 10 παρακάτω. Για την εμφάνιση των συντακτικών δέντρων χρησιμοποιείται το ένθεμα ASTViewer plug-in [27] της πλατφόρμας Eclipse. Εικόνα 10. AST κλάσης 4.2. Γράφος Ροής Ελέγχου CFG Ο γράφος ροής ελέγχου (CFG) [28], αντίθετα από τα αφηρημένα συντακτικά δέντρα, μοντελοποιεί συγκεκριμένα χαρακτηριστικά του κώδικα. Τα χαρακτηριστικά αυτά, τις περισσότερες φορές, δεν είναι άμεσα διαθέσιμα από τον πηγαίο κώδικα και από το αφηρημένο συντακτικό δέντρο. Ο γράφος Σωτήριος Η. Πούλιας 46

50 ροής ελέγχου εστιάζει στα πιθανά μονοπάτια εκτέλεσης κατά τον χρόνο εκτέλεσης ενός προγράμματος ή μιας διεργασίας. Ο γράφος ροής ελέγχου αξιοποιείται στη βελτιστοποίηση μεταγλωττιστών και στα εργαλεία ανάλυσης, ενώ συχνά χρησιμοποιείται και στους ελέγχους προσπελασιμότητας του κώδικα. Έτσι, ο γράφος ροής ελέγχου βοηθάει στην ανάλυση διακλαδώσεων εκτέλεσης, αλλά και στους επαναληπτικούς βρόχους. Η μορφή αναπαράστασης περιλαμβάνει κόμβους, οι οποίοι αναπαριστούν τα συστατικά ενός προγράμματος και ακμές, οι οποίες μοντελοποιούν την πιθανή ροή μεταξυ των κόμβων. Κατά την εκτέλεση κάποιας αναδόμησης, τα CFGs δεν χρησιμοποιούνται άμεσα, όμως μια πιθανή χρήση τους στην αναδόμηση του κώδικα είναι για τον έλεγχο των προϋποθέσεών της Γράφος Εξαρτήσεων Προγράμματος PDG Αντίστοιχα με το γράφο ροής ελέγχου, ο γράφος εξαρτήσεων προγράμματος (PDG) [12] αναπαριστά τις εξαρτήσεις ροής ελέγχου, αλλά και τις εξαρτήσεις ροής δεδομένων, ως κόμβους και ακμές. Οι κόμβοι μοντελοποιούν τις εντολές του προγράμματος και οι ακμές τις μεταξύ τους εξαρτήσεις. Οι ακμές παρουσιάζουν την πραγματική ροή δεδομένων και όχι τη σειρά με την οποία αποτυπώνονται οι εντολές στον κώδικα. Με αυτόν τον τρόπο γίνεται εύκολη η ανίχνευση εντολών που δεν έχουν καμία εξάρτηση δεδομένων ή ελέγχου. Οι ακμές διαχωρίζονται σε δύο είδη: Ακμή εξάρτησης ελέγχου, η οποία δείχνει ότι ο κόμβος πηγή καθορίζει την εκτέλεση του προορισμού και τις φορές που θα εκτελεστεί. Ακμή εξάρτησης δεδομένων, η οποία δείχνει οτι οι κόμβοι πηγής και προορισμού χρησιμοποιούν τις ίδιες μεταβλητές στους υπολογισμούς που περιέχουν. Ο γράφος εξαρτήσεων προγράμματος διευκολύνει τον εντοπισμό των εντολών, οι οποίες δεν έχουν εξαρτήσεις δεδομένων και ελέγχου, με αποτελέσμα να αλλάξει οι σειρά τους χωρίς να επηρεάζεται η σημασιολογία του κώδικα. Τέλος, λόγω των ιδιοτήτων του χρησιμοποιείται στη βελτιστοποίηση μεταγλωττιστών και στην τενχική διάσπασης (slicing), δηλαδή στον τεμαχισμό τμήματος κώδικα, σε μικρότερα αυτόνομα τμήματα, τα οποία διατηρούν την ίδια λειτουργικότητα και συμπεριφορά. Σωτήριος Η. Πούλιας 47

51 4.4. Διάσπαση Μεθόδων Η μέθοδος διάσπασης (slicing) χρησιμοποιείται για τον τεμαχισμό τμήματος κώδικα σε μικρότερα τμήματα που ονομάζονται τεμάχια. Η διάσπαση βρίσκει εφαρμογή στην αναδόμηση και κυρίως στην εξαγωγή μεθόδου, η οποία αναλύθηκε εκτενώς στην υπο-ενότητα Το τεμάχιο κώδικα ορίζεται από τον Weiser [29] [30] ως το σύνολο των δηλώσεων ενός προγράμματος, οι οποίες ενδέχεται να μεταβάλουν την τιμή μιας μεταβλητής σε ένα συγκεκριμένο σημείο ενδιαφέροντος. Το σύνολο των τεμαχίων που προκύπτουν διατηρούν την ίδια λειτουργικότητα. Ο τεμαχισμός μπορεί να είναι στατικός, δηλαδή ο υπολογισμός των τεμαχίων γίνεται με χρήση των στατικά διαθέσιμων πληροφοριών, είτε δυναμικός, δηλαδή ο υπολογισμός γίνεται κατά το χρόνο εκτέλεσης του προγράμματος και χρησιμοποιούνται οι συγκεκριμένες τιμές των μεταβλητών. Επίσης, ο τεμαχισμός μπορεί να περιορίζεται στα πλαίσια μίας διεργασίας, αλλά και να επεκτείνεται εκτός των ορίων αυτής. Στην υλοποίηση της παρούσας εργασίας, η οποία ασχολείται με την αναδόμηση των κλήσεων super στο πρότυπο σχεδίασης «Μέθοδος Υπόδειγμα», η διάσπαση των μεθόδων γίνεται στατικά και η εμβέλεια της είναι μέσα στα όρια μίας διεργασίας. Οι κλήσεις σε μεθόδους κλάσεων που επαναορίζονται (Call Super) χαρακτηρίζεται από τον Fowler ως «minor smell» [18]. Η χρήση super δεν ενδείκνυται και στόχος μας είναι να αντικαθίσταται με overrides. Παράδειγμα μιας τέτοιας αντικατάστασης παρουσιάζεται παρακάτω. Έστω οι κλάσεις: public class ExampleA { public void method() { System.out.print(" Class ExampleA "); public class ExampleB extends ExampleA{ public void method() { System.out.print("I extend"); Σωτήριος Η. Πούλιας 48

52 super.method(); System.out.print("but I call super"); Η κλήση της μεθόδου method ενός αντικειμένου της κλάσης ExampleB θα είχε σαν αποτέλεσμα την εκτύπωση του μηνύματος: «I extend Class ExampleA but I call super». Για την αντικατάσταση της κλήσης super.method() οι κλάσεις αναδομούνται ως εξής: public abstract class ExampleA { public void method(){ before(); domethod(); after(); abstract void before(); abstract void after(); private void domethod() { System.out.print(" Class ExampleA "); public class ExampleB extends ExampleA{ public void before(){ System.out.print("I extend"); Σωτήριος Η. Πούλιας 49

53 public void after(){ System.out.print("but I call super"); Στην Εικόνα 11 παρουσιάζεται το διάγραμμα κλάσεων του παραδείγματος πριν και μετά την αναδόμηση που προτείνεται από τον Fowler [18]. Εικόνα 11. Παράδειγμα Διάσπασης Απλών Μεθόδων Πρέπει, όμως, για να γίνει αυτή η αναδόμηση να ληφθούν υπόψη και τα ορίσματα που λαμβάνουν οι domethod, before και after. Στην περίπτωση που αυτές οι μέθοδοι, διαχειρίζονται μία μεταβλητή ή ένα αντικείμενο, αυτό πρέπει να επιστρέφεται. Η κύρια μέθοδος method δεν χρειάζεται καμία παραμετροποίηση και πρέπει να παραμείνει όπως έχει ώστε να γίνει ορθά η κλήση της (για ευνόητους λόγους). Ακολούθως παρουσιάζεται ένα απλό παράδειγμα αυτής της Σωτήριος Η. Πούλιας 50

54 περίπτωσης. Έστω οι κλάσεις: public class ExampleC { public int method(int a) { return ++a; public class ExampleD extends ExampleC{ public int method(int a){ --a; a = super.method(a); --a; return a; Μετά την αναδόμηση πρέπει οι μέθοδοι που δημιουργούνται να επιστρέφουν τις μεταβλητές που διαχειρίζονται στη method. public abstract class ExampleC { public int method(int a){ a = before(a); a = domethod(a); a = after(a); Σωτήριος Η. Πούλιας 51

55 return a; abstract int before(int a); abstract int after(int a); public int domethod(int a){ return ++a; public class ExampleD extends ExampleC{ public int before(int a){ return --a; public int after(int a){ return --a; Όμως, πρέπει να ερευνηθεί τι πρέπει να γίνει στην περίπτωση που πριν την κλήση super γίνεται διαχείριση περισσοτέρων από μία μεταβλητές. Επίσης η αναμόρφωση πρέπει να γίνεται με τέτοιο τρόπο, ώστε να λειτουργεί και στην περίπτωση που δημιουργούνται αντικείμενα πριν και μετά την κλήση της super. Σε αυτήν την περίπτωση η αναμόρφωση παρουσιάζεται παρακάτω. Αρχικά, έστω οι κλάσεις: Σωτήριος Η. Πούλιας 52

56 public class ExampleE { public double method(int aint, double bdouble){ return (aint+bdouble); public class ExampleF extends ExampleE{ public double method(int aint, double bdouble) { ++aint; bdouble = aint + ( (double) aint/2 ); double c = super.method(aint, bdouble); c++; returnc; Με την αναδόμηση οι μέθοδοι πρέπει να επιστρέφουν, όπως αναφέρθηκε, τις απαραίτητες μεταβλητές. Κάθε μέθοδος, όμως, μπορεί να επιστρέφει μία μόνο μεταβλητή. Έτσι, οι κλάσεις καταλήγουν στην ακόλουθη δομή: public abstract class ExampleE { public double method(int aint, double bdouble){ aint = beforefirst(aint); bdouble = beforesecond(aint, bdouble); double c = domethod(aint, bdouble); c = after(c); Σωτήριος Η. Πούλιας 53

57 return c; public abstract int beforefirst(int aint); public abstract double beforesecond(int aint, double bdouble); public abstract double after(double c); public double domethod(int aint, double bdouble){ return (aint+bdouble); public class ExampleF extends ExampleE{ public int beforefirst(int aint){ return ++aint; public double beforesecond(int aint, double bdouble){ bdouble += aint + ((double) aint/2); return bdouble; public double after(double c){ return ++c; Στην Εικόνα 12 παρουσιάζονται τα διαγράμματα κλάσεων του τελευταίου παραδείγματος διάσπασης των μεθόδων. Σωτήριος Η. Πούλιας 54

58 Εικόνα 12. Παράδειγμα Διάσπασης Μεθόδων με Αυξημένη Πολυπλοκότητα Οι προϋποθέσεις (preconditions) που δημιουργούνται αφορούν τα ορίσματα που λαμβάνουν οι μέθοδοι, αλλά και τις επιστροφές τους, καθώς και τις μεταβλητές που η κάθε μέθοδος χειρίζεται. Σωτήριος Η. Πούλιας 55

59 5. Αντικατάσταση Κλήσης Super με Μέθοδο Υπόδειγμα Η παρούσα εργασία ως στόχο έχει την αυτόματη ανίχνευση υποψήφιων αναδόμησης σε μέθοδο υπόδειγμα, εστιάζοντας στις περιπτώσεις κλήσεων super. Η περίπτωση αναδόμησης των κλήσεων super αναλύθηκε στην Ενότητα 3.3, ενώ μια εκτενής παρουσίαση του τρόπου με τον οποίο εφαρμόζεται η προτεινόμενη αναδόμηση για αυτού του είδους οσμές έγινε στην Ενότητα 4.4. Οι κλήσεις super χαρακτηρίζονται ως οσμές που χρήζουν αναδόμησης και παρατηρούνται συχνά όταν στο σύστημα λογισμικού γίνεται χρήση κάποιου αντικειμενοστραφούς πλαισίου (framework). Ο Fowler [18] παρουσιάζει έναν τρόπο αναδόμησης των κλήσεων αυτών, ο οποίος αποτέλεσε έναυσμα για την προτεινόμενη μεθοδολογία της εργασίας. Η προσέγγιση, επιπροσθέτως, υλοποιεί και την αυτόματη ανασύνταξη του κώδικα, ώστε να δημιουργηθεί η δομή του προτύπου. Για να επιτευχθεί ο στόχος, η υλοποίηση της εργασίας βασίστηκε στη μεθοδολογία του εργαλείου JDeodorant [23]. Αναλυτικότερα, η ανάλυση του πηγαίου κώδικα γίνεται στατικά, ώστε να διαπιστωθεί η ομοιότητα σε δομές του κώδικα και να ελεγχθούν οι προϋποθέσεις που πρέπει να πληρούνται στην αναδόμηση. Οι προϋποθέσεις, αποτελούν κριτήρια ανίχνευσης και κρίνουν την υποψηφιότητα ενός σημείου ή όχι. Ο σκοπός της παρούσας εργασίας είναι η βελτίωση της σχεδίασης του λογισμικού μέσα από την αυτοματοποιημένη αναδόμηση στο πρότυπο σχεδίασης «Μέθοδος Υπόδειγμα». Στα προηγούμενα κεφάλαια παρουσιάστηκε αναλυτικά κάθε βήμα της υλοποίησης της εργασίας, οι θεωρητικές βάσεις που τέθηκαν από την βιβλιογραφία, αλλά και εργαλεία-βιβλιοθήκες που χρησιμοποιήθηκαν ώστε να μπορέσει να γίνει μία αναδόμηση επιτυχώς. Όπως αναλύθηκε, το τελευταίο βήμα της αυτοματοποίημενης αναδόμησης είναι αυτό της εφαρμογής της και ακολουθεί μετά από την επιλογή του υποψηφίου αναδόμησης, από τον χρήστη. Τα αποτελέσματα της ανίχνευσης παρουσιάζονται ταξινομημένα στον χρήστη, ο οποίος καλείται να επιλέξει το αποτελέσμα εκείνο στο οποίο επιθυμεί να εφαρμοστεί η αναδόμηση διαμόρφωσης μεθόδου υποδείγμα. Με την εφαρμογή της αναδόμησης αναμενόμενο αποτέλεσμα είναι η βελτίωση της αξιοπιστίας, της ελεγξιμότητας και της διαχειρισιμότητας του λογισμικού, μειώνοντας την πολυπλοκότητα του και συμβάλλοντας στην καλύτερη σχεδίασή του. Η προσέγγιση που ακολουθείται από τους Τσάνταλη και Χατζηγεωργίου στο εργαλείο JDeodorant [22] [23] έχει ως αποτέλεσμα την επιτυχή αναδόμηση ύστερα από την συνταντική ανάλυση του Σωτήριος Η. Πούλιας 56

60 κώδικα, με την παραγωγή του αντίστοιχου αφηρημένου συντακτικού δέντρου. Στη συνέχεια, διασχίζοντας το αφηρημένο συντακτικό δέντρο εντοπίζονται τα υποψήφια σημεία κλήσεων που καλύπτουν τις προϋποθέσεις για την εκάστοτε μορφή αναδόμησης. Στην υλοποίηση της παρούσας εργασίας λήφθηκαν υπόψη οι προσεγγίσεις που παρουσιάζονται στην βιβλιογραφία και ιδιαίτερα αυτές του Fowler [3] [18], οι οποίες παρουσιάζουν επαρκώς τις προϋποθέσεις τόσο και για την διαμόρφωση μεθόδου υπόδειγμα, όσο και για την αναδόμηση με εξαγωγή και μετακίνηση μεθόδου Ανίχνευση Υποψηφιοτήτων για Αναδόμηση Η διαδικασία της ανίχνευσης των υποψήφιων σημείων κώδικα, είναι το πρώτο βήμα της αυτοματοποιημένης αναδόμησης. Αρχικά, εφαρμόζεται αναζήτηση στον πηγαίο κώδικα ώστε να βρεθούν τα σημεία εκείνα με τις κλήσεις super που ίσως μπορούν να αναδομηθούν. Το εργαλείο JDeodorant [23], το οποίο χρησιμοποιήθηκε ως βάση για την υλοποίηση της παρούσας εργασίας, ενσωματώνει μια αρκετά ολοκληρωμένη βιβλιοθήκη, ώστε να διευκολύνει την αναζήτηση αυτή. Για την ολοκλήρωση της αυτοματοποιημένη αναδόμησης πρέπει να ολοκληρωθούν 3 βήματα: 1. Ανίχνευση υποψήφιων προς αναδόμηση 2. Προβολή υποψήφιων στον χρήστη και επιλογή υποψηφίου 3. Αναδόμηση υποψηφίου στο πρότυπο μέθοδος υπόδειγμα Ενώ, ο αλγόριθμος ανίχνευσης των υποψηφίων περιέχει τα ακόλουθα βήματα: Διάσχιση του αφηρημένου συντακτικού δέντρου του λογισμικού αναζητώντας κλήσεις super. Για κάθε κλήση super ελέγχονται οι προϋποθέσεις σχετικά με τη μέθοδο και την κλάση στην οποία ανήκει. Κάθε κλήση super που ικανοποιεί τις προϋποθέσεις, αποθηκεύεται ως υποψήφια προς αναδόμηση (βλ. Παράρτημα Α). Η λίστα των υποψηφίων παρουσιάζεται στον χρήστη ομαδοποιημένη ανά κλάση και σε μορφή πίνακα. Στο βήμα, το οποίο παρεμβάλλεται μεταξύ ανίχνευσης και εφαρμογής της αναδόμησης, ζητείται από τον χρήστη να επιλέξει έναν υποψήφιο προς αναδόμηση. Εκτενέστερα, οι υποψήφιοι, που Σωτήριος Η. Πούλιας 57

61 καλύπτουν όλα τα κριτήρια αναδόμησης δίνονται πλέον στη διάθεση του χρήστη. Ο χρήστης μπορεί να επιλέξει τον υποψήφιο που επιθυμεί, ώστε να βελτιωθεί η σχεδίαση του κώδικα, όπως θεωρεί εκείνος καλύτερα. Ένας υποψήφιος περιέχει αρκετή πληροφορία, ώστε να είναι δυνατή η αυτοματοποιημένη αναδόμηση, σε περίπτωση επιλογής του. Ένα κομμάτι αυτής της πληροφορίας παρουσιάζεται στον χρήστη, ώστε να κατανοήσει το σημείο του κώδικα που πρόκειται να αναδομηθεί αλλά και τον τρόπο που πρόκειται να αναδομηθεί. Ένα παράδειγμα του τρόπου, με τον οποίο εμφανίζονται τα αποτελέσματα της ανίχνευσης αποτυπώνεται στην Εικόνα 13. Εικόνα 13. Παρουσίαση Αποτελεσμάτων Ανίχνευσης Οι υποψήφιοι κατά την διαδικασία της ανίχνευσης ομαδοποιούνται. Κριτήριο αυτής της ομαδοποίησης είναι η κλάση που ανήκουν. Έτσι, προβάλλονται τα αποτελέσματα κατανεμημένα και γίνονται πιο κατανοητά στον χρήστη. Αναλυτικότερα, τα αποτελέσματα αποτυπώνονται σε έναν πίνακα όπου για κάθε υποψήφιο αναφέρονται τα εξής: Ο τύπος bad smell (στην προκειμένη περίπτωση Call Super) Η κλάση που ανήκει η μέθοδος Η μέθοδος που είναι υποψήφια προς αναδόμηση Η κλάση που επεκτείνεται από την κλάση που ανήκει η μέθοδος Τα αποτελέσματα που ανήκουν σε μία κλάση παρουσιάζονται ως απόγονοι ενός κυρίως αντικείμενου. Με την επέκταση του αντικειμένου, παρουσιάζονται όλοι οι υποψήφιοι που υπάγονται σε αυτό. Επίσης, με διπλό κλικ σε έναν υποψήφιο ανοίγει ο επεξεργαστής κειμένου της πλατφόρμας Eclipse στο σημείο της κλάσης που βρίσκεται η μέθοδος στην οποία αναφέρεται ο υποψήφιος. Τέλος, επισημαίνεται πως ακολουθήθηκε ο τρόπος παρουσίασης που υλοποιείται ήδη από το JDeodorant [23], καθώς κρίθηκε χρηστικός και κατανοητός. Τα αποτελέσματα που απεικονίζονται στην Εικόνα 13 αφορούν τον πηγαίο κώδικα του JFScheduler. Σωτήριος Η. Πούλιας 58

62 Προϋποθέσεις Αναδόμησης Υποψηφίου Για την σωστή εφαρμογή της αναδόμησης απαιτείται η ανίχνευση όλων των περιπτώσεων κλήσεων super. Από αυτές τις περιπτώσεις, μερικές θα είναι υποψήφιες προς αναδόμηση καθώς, πρέπει η κάθε περίπτωση να ικανοποιεί τις προϋποθέσεις, ή αλλιώς preconditions. Ο Fowler [3] στην αναδόμηση «Διαμόρφωση Μεθόδου Υπόδειγμα» παρουσιάζει τις προϋποθέσεις, οι οποίες είναι παρεμφερείς με αυτές της υλοποίησης της παρούσας εργασίας. Αρχικά, διαπιστώνεται πως η μέθοδος της κλάσης που περιέχει την κλήση super, πρέπει να καλεί την αντίστοιχη μέθοδο της κλάσης που επεκτείνει. Η προϋπόθεση παρουσιάστηκε κατά την υλοποίηση καθώς χωρίς την εφαρμογή της τα αποτελέσματα της ανίχνευσης είναι λανθασμένα. Αν τέτοιου είδους περιπτώσεις δεν ελέγχονταν, τότε ο κώδικας θα κινδύνευε να χάσει την λειτουργικότητα του καθώς και άλλες κλάσεις μπορεί να κάνουν κλήσεις super στην ίδια μέθοδο. Ο πηγαίος κώδικας σε αυτήν την περίπτωση χάνει την καλή του σχεδίαση και προκαλείται σύγχυση στον καθορισμό της συμπεριφοράς κάθε αντικειμένου. Επίσης, για την διασφάλιση ορθών αποτελεσμάτων ανίχνευσης, εφαρμόζεται μια νέα προϋπόθεση (precondition) που απαιτεί, η μέθοδος της υπερκλάσης, η οποία καλείται, να μην είναι κενή ή αφηρημένη, καθώς δεν μπορεί να νοηθεί αναδόμηση κενής μεθόδου και εξαγωγή κενής μεθόδου. Ακόμα, κατά την υλοποίηση της παρούσας εργασίας διαπιστώθηκε πως η μέθοδος που περιέχει την κλήση super, δεν πρέπει να περιέχει πάνω από μία τέτοιου είδους κλήσεις μεθόδων, διότι η αναδόμηση θα έπρεπε να δημιουργήσει πολλές μεθόδους before και after, με αποτέλεσμα ο πηγαίος κώδικας να χάσει τη συνεκτικότητά του και την καλή του σχεδίαση. Ακόμη, η κλήση super δεν πρέπει να περιέχεται σε if, while, do-while ή switch. Ο περιορισμός αυτός εκφράζεται και από τον Fowler [3] στις προϋποθέσεις της εξαγωγής μεθόδου. Δηλαδή οι δηλώσεις που θα σχηματήσουν την νέα μέθοδο δεν πρέπει να υπερβαίνουν τα όρια ενός μπλοκ. Η αναδόμηση σε αυτή την περίπτωση θα δημιουργούσε εσφαλμένο κώδικα, ενώ θα έπρεπε στην εξαγόμενη μέθοδο να περιληφθεί ολόκληρο το block των εντολών. Επιπροσθέτως, όπως τονίζει και ο Fowler [3], οι νέες μέθοδοι πρέπει να έχουν μία επιστροφή. Οπότε πρέπει οι εντολές που βρίσκονται πριν την κλήση προς την υπερκλάση να μην ορίζουν τιμή σε παραπάνω από μία τοπικές μεταβλητές που χρησιμοποιούνται στη μέθοδο της υπερκλάσης και στις εντολές μετά από την κλήση super. Στην αντίθετη περίπτωση, η before μέθοδος που Σωτήριος Η. Πούλιας 59

63 δημιουργείται θα έπρεπε να επιστρέφει παραπάνω από μία μεταβλητές, πράγμα αδύνατο. Επιπλέον, για την διατήρηση μοναδικής επιστροφής των νέων μεθόδων [3], πρέπει να γίνει έλεγχος και στη χρήση των πεδίων της κλάσης που επεκτείνει την υπερκλάση. Στην περίπτωση που παραπάνω από ένα πεδία της κλάσης χρησιμοποιούνται ως ορίσματα στην κλήση super και στα πεδία αυτά ορίζονται τιμές στη μέθοδο before, η μέθοδος θα πρέπει να επιστρέφει πάνω από μία μεταβλητές. Τέλος, σημαντική περίπτωση παραγωγής εσφαλμένων αποτελεσμάτων είναι όταν ορίζεται μια τοπική μεταβλητή, αλλά και ένα πεδίο της κλάσης στις εντολές που προορίζονται για την μέθοδο before. Η περίπτωση δεν μπορεί να αποτελέσει υποψήφια αναδόμησης, καθώς και σε αυτήν την περίπτωση η before μέθοδος πρέπει να επιστρέφει πάνω από μία μεταβλητές. Ο Fowler [3], η μεθοδολογία του οποίου αποτελεί θεμέλιο και ταυτόχρονα μέτρο σύγκρισης για τις υπόλοιπες προσεγγίσεις της βιβλιογραφίας, ορίζει τις προϋποθέσεις για την διαμόρφωση μεθόδου υπόδειγμα ως εξής: 1. Η μέθοδος δεν μπορεί να διασχίσει τα όρια ενός μπλοκ 2. Η νέα μέθοδος να έχει το πολύ μία επιστροφή 3. Η μέθοδος να έχει το πολύ ένα σημείο εξόδου 4. Να μην υπάρχουν εξαρτήσεις τοπικών δηλώσεων 5. Οι δύο μέθοδοι των δύο υποκλάσεων έχουν κοινή υπερκλάση στην ιεραρχία Ενώ, οι προϋποθέσεις για την υποψηφιότητα μιας κλήσης super για αναδόμηση με διαμόρφωση μεθόδου υπόδειγμα, οι οποίες έχουν εντοπισθεί στα πλαίσια της εργασίας, είναι οι ακόλουθες: 1. Οι κλήσεις super πρέπει να γίνονται προς την ίδια μέθοδο της κλάσης που γίνεται extend. 2. Εξετάζεται μόνο η περίπτωση μίας κλήσης super στο σώμα μίας μεθόδου. 3. Η μέθοδος που καλείται με super δεν πρέπει να είναι κενή ή interface ή abstract. 4. Η κλήση super δεν πρέπει να βρίσκεται μέσα σε if, while, do-while ή switch. 5. Οι εντολές που θα γίνουν before μέθοδος πρέπει να δίνουν τιμή μόνο σε ένα πεδίο (attribute) της κλάσης, το οποίο θα χρησιμοποιείται ως όρισμα της κλήσης super. 6. Οι εντολές που θα γίνουν before μέθοδος πρέπει να δίνουν τιμή μόνο σε μία τοπική μεταβλητή, η οποία χρησιμοποιείται στην κλήση super ή/και στο σύνολο των εκφράσεων που θα γίνουν after μέθοδος. 7. Αν ορίζονται μία τοπική μεταβλητή και ένα πεδίο της κλάσης, σύμφωνα με τα 5 και 6, τότε η περίπτωση αναμόρφωσης κώδικα δεν γίνεται δεκτή. Η before μέθοδος επισημαίνεται πως μπορεί να επιστρέψει μόνο μία μεταβλητή. Σωτήριος Η. Πούλιας 60

64 Είναι λογικό να υπάρχει σχετική διαφοροποίηση με προϋποθέσεις του Fowler [3], καθώς η παρούσα εργασία εμβαθύνει στην αναδόμηση των κλήσεων super που βρίσκονται στο σύστημα λογισμικού. Ο τρόπος αναδόμησης στην περίπτωση αυτή εμπλέκει περιορισμούς που αφορούν την υπερκλάση και την χρήση ορισμάτων από αυτή. Επίσης, οι προϋποθέσεις έχουν εξειδικευτεί ώστε να διατηρείται η αξιοπιστία των αποτελεσμάτων, διασφαλίζοντας πως τα αποτελέσματα της ανίχνευσης όντως μπορούν να αναδομηθούν. Επίσης, ο Fowler [3] ορίζει τις προϋποθέσεις για την ανίχνευση κλώνων μεταξύ υποκλάσεων ώστε να εφαρμοστεί η αναδόμηση με χρήση εξαγωγής μεθόδου Εφαρμογή Αναδόμησης Το αποτέλεσμα της αναδόμησης αναλύθηκε στην Ενότητα 4.4, στην οποία και παρουσιάστηκε η μορφή που θα λάβει ο κώδικας με την εφαρμογή της αναδόμησης. Χρησιμοποιώντας την πληροφορία κάθε υποψηφίου και την υπάρχουσα βιβλιοθήκη του JDeodorant [23] η αυτοματοποιημένη αναδόμηση επηρεάζει τις εκάστοτε κλάσεις και τις μεθόδους τους, ανασυντάσσοντας την δομή τους. Αναλυτικότερα, με χρήση των αφηρημένων συντακτικών δέντρων [13] του κώδικα αναδομείται το περιεχόμενο των δηλώσεων που ανήκουν στην αντίστοιχη μέθοδο του υποψηφίου. Οι δηλώσεις αυτές πρέπει να μετακινηθούν και να ενσωματωθούν είτε σε καινούριες μεθόδους, είτε σε υπάρχουσες. Για να επιτευχθεί αυτή η αναπροσαρμογή, χρησιμοποιούνται οι τεχνικές εξαγωγής μεθόδου και μετακίνησης μεθόδου, οι οποίες έχουν αναλυθεί εκτενώς στις υποενότητες και Οι δηλώσεις που θα χρησιμοποιηθούν εμπεριέχονται στις πληροφοριές του εκάστοτε υποψηφίου ως δηλώσεις των μεθόδων before και after, αλλά και ως δηλώσεις της μεθόδου που περιέχεται η κλήση super. Έτσι, με τη χρήση αυτών των πληροφοριών η εφαρμογή της αναδόμησης καταφέρνει να φτάσει στο επιθυμητό αποτέλεσμα. Σωτήριος Η. Πούλιας 61

65 Εικόνα 14. Αποτέλεσμα Αναδόμησης Όπως παρουσιάζεται στην Εικόνα 14, από την εφαρμογή της αναδόμησης επηρεάζεται η μέθοδος που περιέχει την κλήση super αλλά και η μέθοδος που επαναορίζει και ανήκει στην υπερκλάση. Επίσης, ορίζονται νέες μέθοδοι τόσο στην υπερκλάση, όσο και στην κλάση που την επεκτείνει. Η αναδόμηση γίνεται εφικτή με την επεξεργασία των αφηρημένων συνακτικών δέντρων και συγκεκριμένα των κόμβων που ανήκουν στις δύο κλάσεις, και την αναδόμηση τους. Για να καταλήξει στο επιθυμητό αποτελέσμα, η εφαρμογή της αναδόμησης, χρειάζεται να χρησιμοποιήσει την «Εξαγωγή Μεθόδου» για την δημιουργία των μεθόδων beforemethod και aftermethod, οι οποίες περιέχουν τα αλγοριθμικά βήματα που πρέπει να εκτελεστούν πριν και μετά την εκτέλεση της κλήσης super αντίστοιχα. Οι μέθοδοι αυτές πρέπει να δημιουργηθούν και στην υπερκλάση με την μορφή αφηρημένων δημόσιων μεθόδων ώστε να μην παρουσιαστεί πρόβλημα στην διασύνδεση με άλλες κλάσεις που ήδη υπάρχουν στο λογισμικό. Επίσης, για την δημιουργία της μεθόδου domethod, η οποία θα αποτελέσει τον αντικαταστάτη της κλήσης super μετά την εφαρμογή της αναδόμησης, χρησιμοποιείται η «Μετακίνηση Μεθόδου». Με την εφαρμογή της αναδόμησης, η domethod θα περιέχει όλες τις εντολές που εκτελούνται στην μέθοδο της υπερκλάσης και καλείται με super. Σωτήριος Η. Πούλιας 62

66 Δημιουργία Νέων Δηλώσεων Κατά την διαδικασία εφαρμογής της αναδόμησης, εκτός από την επεξεργασία των μεθόδων που ήδη υπάρχουν, το εργαλείο καλείται να δημιουργήσει και νέες μεθόδους. Η τελική μορφή της αναδόμησης, όπως παρουσιάζεται στην Εικόνα 7, απαιτεί την δημιουργία νέων μεθόδων. Μερικές από αυτές, χρησιμοποιούν σύνολο από δηλώσεις που υπήρχαν στην αρχική μορφή του κώδικα και μερικές δημιουργούνται από την αρχή. Συγκεκριμένα απαιτείται: Δημιουργία μεθόδου beforemethod()στην υποκλάση Δημιουργία μεθόδου aftermethod()στην υποκλάση Δημιουργία μεθόδου domethod()στην υπερκλάση Οι μέθοδοι αυτές, αλλά και και η methoda(), όπως παρουσιάζεται στην Εικόνα 15, χρειάζονται επεξεργασία και για να διατηρήσει το λογισμικό την λειτουργικότητά του απαιτείται η δημιουργία νέων δηλώσεων. Οι δηλώσεις αυτές αφορούν τις επιστροφές κάθε μεθόδου, αλλά και νέες κλήσεις μεθόδων, εντολές διαχείρισης μεταβλητών και πεδίων της κλάσης. Οι δηλώσεις που δεν χρειάζεται να δημιουργηθούν, εξάγονται από τις πληροφορίες του υποψηφίου. Πιο αναλυτικά, οι δηλώσεις που θα χρειαστούν στην μέθοδο beforemethod, στην μέθοδο aftermethod αλλά και στην μέθοδο domethod() βρίσκονται αποθηκευμένες στη δομή του υποψηφίου. Ένα μέρος αυτών όμως πρέπει να υποστεί επεξεργασία και να προσαρμοστεί στην νέα σχεδίαση που θα αποκτήσει το λογισμικό. Επίσης, στην αρχική μέθοδο της υπερκλάσης, methoda() πρέπει να γίνει αντικατάσταση ολόκληρου του σώματος με τις κλήσεις προς τις νέες μεθόδους με την σειρά που αυτές πρέπει να εκτελεστούν, δηλαδή: 1. beforemethod() 2. domethod() 3. aftermethod() Τέλος, η επιστροφή και οι παράμετροι της μεθόδου methoda() παραμένουν όπως στην αρχική μορφή του λογισμικού. Αυτό συμβαίνει καθώς γίνεται χρήση των ίδιων μεταβλητών και μετά την εφαρμογή της αναδόμησης και γιατί το υπόλοιπο σύστημα πρέπει να παραμένει συμβατό με την νέα μορφή των μεθόδων χωρίς να αλλάζει συμπεριφορά και χωρίς την εμφάνιση σφαλμάτων. Σωτήριος Η. Πούλιας 63

67 Το αναδομημένο σύνολο των δηλώσεων ενσωματώνεται σε νέο αφηρημένο συντακτικό δέντρο, το οποίο θα αποτελέσει και το δέντρο του αναδομημένου λογισμικού. Με την βοήθεια του ενθέματος ASTViewer [27] μπορεί κανείς να κατανοήσει την ιεραρχία των δηλώσεων, αλλά και να κατανοήσει τα διαφορετικά είδη που υπάρχουν. Στην Εικόνα 15 παρουσιάζεται κατάλογος με όλα τα είδη δηλώσεων. Εικόνα 15. Είδη Δηλώσεων Προβολή Αλλαγών και Εφαρμογή Η εφαρμογή της αναδόμησης στο JDeodorant μετασχηματίζει το παραγόμενο αφηρημένο συντακτικό δέντρο και όχι τον πηγαίο κώδικα. Με αυτόν τον τρόπο επιτυγχάνεται η δυνατότητα προεπισκόπησης της προτεινόμενης αναδόμησης πριν την διαδικασία της εφαρμογής της, αλλά και γίνεται εφικτή η αναίρεση μιας εφαρμοσμένης αναδόμησης. Η αναδόμηση μετατρέπει το αφηρημένο συντακτικό δέντρο και ο τρόπος της μετατροπής αυτής αναλύθηκε στην Ενότητα Συγκεκριμένα, εφαρμόζονται οι αναδομήσεις εξαγωγή μεθόδου και μετακίνηση μεθόδου στις κατάλληλες κλάσεις αλλά γίνεται και η δημιουργία των δηλώσεων που αντιστοιχούν σε νέες μεθόδους. Τέλος, δίνεται προσοχή στην επεξεργασία και την εφαρμογή της Σωτήριος Η. Πούλιας 64

68 αναδόμησης στις επιστροφές των μεθόδων, στα ορίσματα που χρησιμοποιούν αλλά και στην ορατότητα που πρέπει να έχουν. Ο τρόπος παρουσίασης της αναδόμησης στον χρήστη παρουσιάζεται στην Εικόνα 16 και στην Εικόνα 17. Ο χρήστης μπορεί να δει τις αλλαγές τόσο στην υποκλάση (Εικόνα 16), όσο και στην υπερκλάση (Εικόνα 17), επιλέγοντας ποια από τις δύο θέλει από λίστα που παρουσιάζεται στο επάνω μέρος του παραθύρου. Με την επιλογή του αυτή, του παρουσιάζονται οι αλλαγές που θα δημιουργηθούν με την εφαμοργή της αναδόμησης, σε δύο πλαίσια. Στο αριστερό πλαίσιο εμφανίζεται η αρχική δομή της κλάσης, δηλαδή χωρίς να έχει επηρεαστεί από την αναδόμηση, Ενώ στο δεξί πλαίσιο εμφανίζεται η δομή της κλάσης μετά την εφαμοργή. Σημειώνεται ότι σε αυτό το στάδιο ο κώδικας του λογισμικού δεν έχει άλλαξει. Οι αλλαγές θα συμβούν όταν ο χρήστης συμφωνήσει (επιλογή ΟΚ). Στην αντίθετη περίπτωση, δηλαδή όταν ο χρήστης δεν επιθυμεί να εφαρμόσει την αναδόμηση (επιλογή Cancel), το λογισμικό δεν υφίσταται καμία αλλαγή. Στις Εικόνες 16 και 17 τα αποτελέσματα αφορούν το λογισμικό JFScheduler. Τέλος, με την επιλογή από τον χρήστη να εφαρμοστεί η αναδόμηση, οι αλλαγές γίνονται στον πηγαίο κώδικα όπως έχει αναλυθεί στην Ενότητα 4.4. Εικόνα 16. Παρουσίαση Αναδόμησης στην Υποκλάση Σωτήριος Η. Πούλιας 65

69 Εικόνα 17. Παρουσίαση Αναδόμησης στην Υπερκλάση Σωτήριος Η. Πούλιας 66

70 6. Εμπειρική Αξιολόγηση Στο κεφάλαιο αυτό θα παρουσιαστούν τα αποτελέσματα της αξιολόγησης του εργαλείου που υλοποιήθηκε στα πλαίσια της εργασίας, τα οποία προκύπτουν από την πειραματική εφαρμογή του. Η αξιολόγηση του εργαλείου, επιτυγχάνεται με την εφαρμογή του σε διάφορα συστήματα λογισμικού ανοιχτού κώδικα (open-source). Η ανίχνευση υποψήφιων σημείων με κλήση super μεθόδου, όπως αναλύθηκε στα προηγούμενα κεφάλαια, απαιτεί την διάσχιση ολόκληρου του αφηρημένου συντακτικού δέντρου (AST) που παράγεται από τον κώδικα και στη συνέχεια τον έλεγχο των κριτηρίων-προϋποθέσεων που ισχύουν για την αναδόμηση. Σαν αποτέλεσμα, για την πληρέστερη αξιολόγηση, πρέπει να γίνει και η ανάλυση της κλιμακωσιμότητας της μεθοδολογίας που ακολουθείται, καθώς η δημιουργία και η διάσχιση του αφηρημένου συντακτικού δέντρου είναι χρονοβόρα διαδικασία, με μεγάλες απαιτήσεις μνήμης για την αποθήκευση της πληροφορίας των υποψηφιών αλλά και για την εφαρμογή της αναδόμησης στο λογισμικό. Συνεπώς, είναι απαραίτητο να εξεταστεί η δυνατότητα απόκρισης του αυτοματοποιημένου εργαλείου. Επιπλέον, στη διαδικασία πειραματικής εφαρμογής του εργαλείου, κρίθηκε αναγκαίο να αποτυπωθεί και η γενικότερη χρησιμότητά του. Για τον λόγο αυτό, στην αξιολόγηση της μεθοδολογίας, παρουσιάζονται δεδομένα που αποδεικνύουν πόσο σημαντική και χρήσιμη είναι η εφαρμογή της αναδόμησης με διαμόρφωση μεθόδου υπόδειγμα, για την ανατικατάσταση των κλήσεων super που περιέχονται στις μεθόδους των κλάσεων. Τέλος, γίνεται σύγκριση με τις προσεγγίσεις που παρουσιάζονται στη βιβλιογραφία ώστε να αξιολογηθεί το επίπεδο, στο οποίο το εργαλείο της παρούσας εργασίας μπορεί να συνεισφέρει στην συγκεκριμένη περίπτωση αναδόμησης Συστήματα Λογισμικού Τα συστήματα λογισμικού που επιλέχθηκαν για την πειραματική εφαρμογή της υλοποίησης, είναι συστήματα ανοιχτού κώδικα. Η επιλογή τους έγινε ώστε ο κώδικας των συστημάτων που εξετάστηκαν να είναι διαθέσιμος προς όλους για την επαλήθευση των αποτελεσμάτων από τρίτους. Σωτήριος Η. Πούλιας 67

71 Επίσης, τα συγκεκριμένα συστήματα λογισμικού επιλέχθηκαν και λόγω του περιορισμού που δημιουργείται από την γλώσσα προγραμματισμού που έχει υλοποιηθεί το εργαλείο. Έτσι, τα υπό εξέταση συστήματα πρέπει να είναι συμβατά με το εργαλείο, το οποίο μπορεί να αναλύσει λογισμικό γραμμένο στη γλώσσα προγραμματισμού Java. Επιπροσθέτως, τα συγκεκριμένα συστήματα χρησιμοποιούνται συχνά ως πειραματικά δεδομένα, καθώς εξυπηρετούν διαφορετικούς σκοπούς και προέρχονται από διαφορετικούς τομείς εφαρμογής. Η διαφορετικότητα αυτή, συμβάλλει στη γενίκευση των αποτελεσμάτων, ενώ η συχνή τους χρήση στη βιβλιογραφία καθιστά ικανή την σύγκριση της υλοποίησης με άλλες μεθοδολογίες. Τα συστήματα λογισμικού που χρησιμοποιήθηκαν ως πειραματικά δεδομένα για την αξιολόγηση της μεθοδολόγιας είναι τα ακόλουθα: JFScheduler: το σύστημα περιλαμβάνει α) την υλοποίηση ενός αλγορίθμου βασισμένο σε τοπική αναζήτηση για την παραγωγή λύσεων του προβλήματος κατανομής ροών κίνησης όπως αναλύεται από τους Ζαφείρη και Γιακουμάκη [31], β) την υποδομή για την αξιολόγηση αλγορίθμου μέσω παραγωγής τυχαίων προβλημάτων και των πραγματικών του λύσεων και γ) τον προσομοιωτή γεγονότων για την αξιολόγηση της επίδοσης του αλγορίθμου σε περιβάλλον ασύρματης δικτυακής πρόσβασης. IceHockeyManager: παιχνίδι ανοιχτού κώδικα, το οποίο αφορά στη διαχείριση ομάδας χόκεϋ και λειτουργεί σε περιβάλλον Linux, MacOS και Windows [32]. Apache Nutch: πρόκειται για ανοιχτού κώδικα λογισμικό που αφορά στη διαδικτυακή αναζήτηση [33]. Violet: επεξεργαστής UML, ανοιχτού κώδικα, ο οποίος επιτρέπει τη δημιουργία διαγραμμάτων της UML [34]. Pamvotis: προσομοιωτής ασυρμάτου δικτύου, ο οποίος υποστηρίζει όλες τις εκδόσεις του πρωτοκόλλου φυσικού επιπέδου IEEE a, b, g και e [35]. Για να διαπιστωθεί ο βαθμός έλλειψης χρήσης του προτύπου «Μέθοδος Υπόδειγμα» χρησιμοποιήθηκε το Design Pattern Detection Tool [36] [37]. Το εργαλείο μπορεί να αναγνωρίσει τα σημεία έλλειψης του προτύπου, όμως δεν λαμβάνει υπόψη του τις κλήσεις super, ώστε να προτείνει χρήση μεθόδου υπόδειγμα στα σημεία που αυτές βρίσκονται. Projects JFScheduler IceHockeyManager Apache Nutch Violet Pamvotis Σωτήριος Η. Πούλιας 68

72 #Classes #Template Method Πίνακας6. Αποτελέσματα Design Pattern Detection Tool 6.2. Αποτελέσματα Αξιολόγησης Η συγκεκριμένη μεθολογία επιδιώκει στην εξαγωγή ποιοτικών αποτελεσμάτων, συμπεριλαμβανόμενης της ορθότητάς τους αλλά και της πληρότητάς τους, ώστε η υλοποίηση να φανεί χρήσιμη ως ένα εργαλείο για την διευκόλυνση της αναδόμησης και της εφαρμογής της. Σημαντικός παράγοντας στα αποτελέσματα που εξάγονται αποτελούν τα κριτήρια-προϋποθέσεις που τίθενται κατά την ανίχνευση των σημείων που αποτελούν υποψήφια προς αναδόμηση. Αναλυτικότερα, προκύπτουν οι εξής περιπτώσεις: Η επιλογή χαλαρών και πιο γενικών κριτηρίων έχει ως αποτελέσμα την αύξηση των υποψηφίων. Με αυτόν τον τρόπο μειώνεται η ακρίβεια των αποτελεσμάτων καθώς αρκετά υποψήφια σημεία αναδόμησης δεν γίνεται να μετασχηματιστούν. Η επιλογή αυστηρών και πιο συγκεκριμένων κριτηρίων έχει ως αποτελέσμα την μείωση των υποψηφίων. Η ακρίβεια με αυτόν τον τρόπο αυξάνεται, καθώς όλοι οι υποψήφιοι μπορούν να αναδομηθούν. Όμως, σε αυτήν την περίπτωση απορρίπτονται σημεία κώδικα τα οποία μπορούν και αυτά να δεχτούν αναδόμηση. Στόχος της υλοποίησης της παρούσας εργασίας, είναι η επίτευξη ενός βέλτιστου συνδυασμού των δύο περιπτώσεων που αναλύονται παραπάνω, με την κατάλληλη επιλογή κριτηρίων. Η επιλογή αυτή αποδείχτηκε ιδιαίτερα δύσκολη, καθώς πρέπει να βρεθεί εκείνο το σύνολο κριτηρίων το οποίο κατά την εφαρμογή του σε διαφορετικά συστήματα λογισμικού να παρουσιάζει ελάχιστες εξαιρέσεις, οι οποίες δεν ανιχνεύονται. Αυτό συμβαίνει λόγω της διαφοροποίησης της δομής του κώδικα σε κάθε σύστημα λογισμικού. Ωστόσο, η επιλογή των κριτηρίων έγινε ώστε να μπορεί το εργαλείο να ανιχνεύει όλες τις συνήθεις κακές πρακτικές που ακολουθούνται σχετικά με τις κλήσεις super μεθόδων. Σωτήριος Η. Πούλιας 69

73 Ακόμα, όπως έγινε εμφανές και στην ανάλυση της βιβλιογραφίας, παρουσιάζεται έλλειψη εργαλείων αναδόμησης για την αντιμετώπιση της οσμής κλήσεων super. Για αυτόν τον λόγο, κρίθηκε αναγκαίο να αναλυθεί ο αριθμός των σημείων που χρίζουν αναδόμησης και σχετίζονται με τέτοιου είδους «bad smells». Στον Πίνακα 7 αναλύεται ο αριθμός των υποψηφίων που παρουσιάζει το εργαλείο της παρούσας εργασίας, σε σχέση με τον αριθμό των κλήσεων super που περιέχονται συνολικά σε κάθε σύστημα λογισμικού. Τα αποτελέσματα δείχνουν την χρησιμότητα του εργαλείου, ενώ με την εφαρμογή πιο χαλαρών κριτηρίων, που ίσως να απαιτούν την επιδιόρθωση του κώδικα από τον προγραμματιστή μετά την αναδόμηση, τα αποτελέσματα αυξάνονται ακόμη περισσότερο. Projects JFScheduler IceHockeyManager Apache Nutch Violet Pamvotis # Κλήσεων Super # Υποψηφίων Μεθόδων προς Αναδόμηση Πίνακας 7. Αποτελέσματα Ανίχνευσης Υποψηφίων Συγκριτικά με το Πλήθος Κλήσεων Super Από τα αποτελέσματα που προκύπτουν παρατηρείται πως πολλές κλήσεις super δεν είναι τελικά υποψήφια σημεία προς αναδόμηση. Αυτό συμβαίνει επειδή αποκλείονται στο στάδιο της εφαρμογής των προϋποθέσεων. Συγκεκριμένα η προϋπόθεση που αφορά τις επιστροφές των μεθόδων, είναι αυτό που μειώνει τον αριθμό των τελικών υποψηφίων. Η προϋπόθεση αυτή όμως δεν μπορεί να μην εφαρμοστεί καθώς είναι μια από τις θεμελιώδεις προϋποθέσεις της εξαγωγής μεθόδου και η μη εφαρμογή της θα κατέληγε σε λανθασμένες αναδομήσεις Κλιμακωσιμότητα Μεθοδολογίας Για την ολοκληρωμένη πειραματική αξιολόγηση απαιτείται να γίνει και ο έλεγχος της απόκρισης του εργαλείου. Έτσι, έγιναν μετρήσεις του χρονικού διαστήματος ανίχνευσης των υποψηφίων προς Σωτήριος Η. Πούλιας 70

74 αναδόμηση σε συστήματα λογισμικού που παρουσιάζουν διαφοροποίηση στο μέγεθός τους. Στην ενότητα αυτή, παρουσιάζονται τα αποτελέσματα της αξιολόγησης της κλιμακωσιμότητας του εργαλείου μετά από τον έλεγχο των δυνατοτήτων αναδόμησης. Αξίζει να σημειωθεί πως τα αποτελέσματα του ελέγχου είναι αλληλένδετα με τις δυνατότητες του υπολογιστή που εκτελεί το εργαλείο της παρούσας εργασίας. Στον Πίνακα 8 παρουσιάζονται τα χαρακτηριστικά του μηχανήματος που διενεργήθηκε η αξιολόγηση της κλιμακωσιμότητας. Επεξεργαστής Intel Core i7 CPU Q 1.60GHz Μνήμη 4.00 GB Πίνακας 8. Χαρακτηριστικά Μηχανήματος Αξιολόγησης Κλιμακωσιμότητας Επιπροσθέτως, ο χρόνος υπολογισμού της ανίχνευσης υποψηφίων διαχωρίζεται. Αρχικά, εξετάζεται ξεχωριστά ο χρόνος για την συντακτική ανάλυση του πηγαίου κώδικα, δηλαδή την δημιουργία του αφηρημένου συντακτικού δέντρου του συστήματος λογισμικού. Το αφηρημένο συντακτικό δέντρο δημιουργείται μια φορά για το σύνολο των κλάσεων του λογισμικού και πριν από την εφαρμογή των κριτηρίων σε αυτό. Το χρονικό διάστημα της εφαρμογής των κριτηρίων στο AST προσμετράται στην συνέχεια. Ωστόσο, και τα δύο χρονικά διαστήματα είναι ανάλογα του μεγέθους του λογισμικού. Δηλαδή, ο μεγάλος αριθμός κλάσεων και μεθόδων συνεπάγεται μεγαλύτερο χρονικό διάστημα δημιουργίας του αφηρημένου συντακτικου δέντρου και εφαρμογής των κριτηρίων. Ο χρόνος υπολογισμού έγινε με χρήση της εντολής System.currentTimeMillis() της γλώσσας προγραμματισμού Java και η μονάδα μέτρησης του χρόνου είναι τα milliseconds. Στον Πίνακα 9 παρουσιάζονται τα αποτελέσματα της αξιολόγησης της κλιμακωσιμότητας. Στα αποτελέσματα γίνεται εμφανής η αναλογία μεγέθους με χρόνο. Projects JFScheduler IceHockeyManager ApacheNutch Violet Pamvotis # Κλάσεων Χρόνος Δημιουργίας ms ms ms 9970 ms 1847 ms Σωτήριος Η. Πούλιας 71

75 AST Χρόνος Ανίχνευσης Υποψηφίων Συνολικός Χρόνος 1560 ms 9998 ms 8611 ms 3154 ms 1537 ms ms ms ms ms 3384 ms Πίνακας 9. Χρόνος Ανίχνευσης Υποψηφίων Αναδόμησης Σύγκριση με Μεθοδολογίες της Βιβλιογραφίας Η σύγκριση των υπαρχόντων μεθοδολογιών της βιβλιογραφίας με την προτεινόμενη μεθοδολογία ενδείκνυται ώστε να δοθεί μια πληρέστερη εικόνα της ακρίβειας των αποτελεσμάτων της υλοποίησης της παρούσας εργασίας. Ωστόσο, η σύγκριση γίνεται σε ανόμοια εργαλεία αναδόμησης καθώς η προτεινόμενη μεθοδολογία εξετάζει διαφορετικό πρόβλημα, παρόλο που η λύση είναι η διαμόρφωση μεθόδου υπόδειγμα. Η σύγκριση των αποτελεσμάτων με το εργαλείο CRat [16] παρουσιάζεται στον Πίνακα 10 και αφορά το σύστημα λογισμικού Apach Ant [17]. CRat Αναδόμηση Call Super στο JDeodorant #Αρχείων # Υποψηφίων Χρόνος Δημιουργίας AST Ν/Α ms Χρόνος Ανίχνευσης Υποψηφίων Ν/Α ms Συνολικός Χρόνος Εκτέλεσης ms ms Σωτήριος Η. Πούλιας 72

76 Χαρακτηριστικά Μηχανήματος Αξιολόγησης CPU: Xeon 2.67 GHz (4 core) CRAM: 4GB CPU: Intel Core i7 1.60GHz(4core) CRAM: 4GB Πίνακας 10. Σύγκριση με εργαλείο CRat στο ApacheAnt Ο αριθμός των υποψηφίων της μεθοδολογίας είναι μικρότερος. Αυτό συμβαίνει γιατί η υλοποίηση της εργασίας αναζητά μόνο τις κλήσεις super που βρίσκονται στο σύστημα λογισμικού Apache Ant [17]. Επίσης, το εργαλείο CRat [15] [16] δεν αναζητά αυτού του είδους κλήσεις, οπότε οι υποψήφιοι που παράγονται δεν περιλαμβάνουν κώδικα με κλήσεις μεθόδων των υπερκλάσεων. Ο χρόνος υπολογισμού του CRat στην διαδικασία ανίχνευσης, σύμφωνα με τον Πίνακα 10 είναι αρκετά μεγαλύτερος από αυτόν της προτεινόμενης μεθοδολογίας. Η γρήγορη ανίχνευση του εργαλείου της παρούσας μεθοδολογίας οφείλεται και στο JDeodorant [23], το οποίο δημιουργεί το AST [13] σε μικρό χρονικό διάστημα. Ωστόσο, η αξιολόγηση και των δύο εργαλείων εκτελέστηκε σε παραπλήσια μηχανήματα, τα οποία δεν διαφέρουν πολύ στις δυνατότητές τους. Σωτήριος Η. Πούλιας 73

77 7. Συμπεράσματα Στην παρούσα εργασία ερευνάται το πρόβλημα της αυτόματοποιμένης αναδόμησης στο πρότυπο σχεδίασης Μέθοδος Υπόδειγμα. Η προτεινόμενη προσέγγιση εστιάζει σε ένα κομμάτι «bad smell», αυτό των κλήσεων μεθόδου super και εστιάζει στον καθορισμό ενός συνόλου κριτηρίων στην ανίχνευση, αλλά και στις διάφορες περιπτώσεις κώδικα που πρέπει να αναδομηθεί. Τα κριτήρια που αναπτύχθηκαν αφορούν τόσο τις μεθόδους, όσο και τις κλάσεις. Αναλυτικότερα, αναπτύχθηκε ένα σύνολο κριτηρίων-προϋποθέσεων σε επίπεδο μεθόδου και διακλάδωσης, ο έλεγχος των οποίων απαιτεί τις κλήσεις super αλλά και των μεθόδων που αυτές ανήκουν. Για τον έλεγχο ικανοποίησης των κριτηρίων, το εργαλείο βασίστηκε στην χρήση των αφηρημένων συνακτικών δέντρων κυρίως, αλλά και στο συνδυασμό CFG και PDG γράφων. Επίσης, το εργαλείο που υλοποιήθηκε ενσωματώθηκε ως τμήμα του JDeodorant, που αποτελεί ένθεμα της πλατφόρμας Eclipse. Με τον τρόπο αυτό και κάνοντας χρήση της υπάρχουσας βιβλιοθήκης του JDeodorant, επιτυγχάνονται ακριβέστερα αποτελέσματα για αναδόμηση. Η προτεινόμενη μεθολογία αξιολογήθηκε ως προς την ορθότητα των αποτελεσμάτων της αναδόμηση, με την εφαρμογή της σε ένα σύνολο συστημάτων ανοιχτού λογισμικού. Τα αποτελέσματα της αξιολόγησης αποδεικνύει την χρησιμότητα της μεθόδου. Επιπλέον, η διαδικασία ανίχνευσης των υποψηφίων ολοκληρώνεται σε χρονικά διαστήματα ανάλογα του μεγέθους του συστήματος λογισμικού στο οποίο εφαρμόζεται και κυμαίνονται σε 40 δευτερόλεπτα για γραμμές εκτελέσιμου κώδικα. Η βελτιστοποίηση του αλγορίθμου ανίχνευσης και η ταχύτητα ολοκλήρωσής του πρόκειται να διερευνηθούν περαιτέρω, παρόλο που το χρονικό διάστημα που καταλαμβάνει είναι ήδη αρκετά μικρό. Επιπλέον, η ορθή λειτουργία του εργαλείου σε μεγαλύτερο εύρος λογισμικού, είναι κάτι που αξίζει μελλοντικής διερεύνησης ώστε να αποκτήσει το εργαλείο μεγαλύτερη αξιοπιστία, αλλά και να προστεθούν επιπλέον περιπτώσεις αναδόμησης κλήσεων super, οι οποίες δεν παρουσιάζονται συχνά. Ένα ακόμη ενδιαφέρον πεδίο διερεύνησης είναι αυτό της αναδόμησης με «Διαμόρφωση Μεθόδου Υπόδειγμα» και σε άλλες περιπτώσεις ώστε να παρέχεται μια πιο ολοκληρώμενη λίστα υποψηφίων μετά από τη διαδικασία ανίχνευσης. Τέλος, μια σημαντική μελέτη μπορεί να γίνει και ως προς την εκτίμηση των αποτελεσμάτων που παρέχονται, παρουσιάζοντας τα υποψήφια σημεία κώδικα προς αναδόμηση. Το σύστημα, αναλύοντας στατικά τον κάθε έναν υποψήφιο και την αναδόμηση που θα προέκυπτε από αυτόν μπορεί να αποδόσει βάρη σε αυτούς και να τους Σωτήριος Η. Πούλιας 74

78 ταξινομήσει σύμφωνα με αυτά. Με αυτόν τον τρόπο, ο προγραμματιστής που θέλει να αναδομήσει το λογισμικό, θα γνωρίζει τι πρέπει να προσέξει περισσότερο και τι έχει προτεραιότητα στην διαδικασία αναδόμησης που εκτελεί στο λογισμικό του. Επιπροσθέτως, με την ολοκλήρωση της υλοποίησης δημιουργήθηκαν ενδιαφέροντα ζητήματα. Συγκεκριμένα, ένα σημείο που θα έπρεπε να ερευνηθεί στη συνέχεια είναι αυτό των περισσοτέρων από μία κλήσεις super στην ίδια μέθοδο, αλλά και αυτό των αναδομήσεων των κλήσεων super προς τους κατασκευαστές αντικειμένων. Η παρούσα διπλωματική εργασία συμβάλει στον χώρο της αυτοματοποιημένης αναδόμησης αναλύοντας τις ιδιαιτερότητες των κλήσεων super. Ωστόσο, πρέπει να σημειωθεί πως λόγω της φύσης της αναδόμησης, αλλά και των διαφορετικών προβλημάτων που καλείται να λύσει η αναδόμηση σε κάποιο πρότυπο σχεδίασης, η συμμετοχή του ανθρώπινου παράγονται σε όλη τη διαδικασία είναι απαραίτητη. Τα αυτοματοποιημένα εργαλεία αναδόμησης, εφαρμόζοντας τους απαραίτητους μετασχηματισμούς στο λογισμικό, καλούνται να υποστηρίξουν τον ανθρώπινο παράγοντα που επεμβαίνει στο λογισμικό κατά τη διαδικασία της αναδόμησης, μειώνοντας τον βαθμό αλληλεπίδρασής του με το λογισμικό. Σωτήριος Η. Πούλιας 75

79 ΠΑΡΑΡΤΗΜΑ Α: Δομή Αποθήκευσης Υποψηφίων Κατά την διαδικασία ανίχνευσης υποψήφιων σημείων προς αναδόμηση, συλλέγονται πληροφορίες, οι οποίες χρειάζονται στην εφαρμογή της αναδόμησης. Έτσι, κάθε υποψήφιος προς αναδόμηση εμπεριέχει και την αντίστοιχη πληροφορία. Η πληροφορία, είναι αυτή που κατά την εφαρμογή της αναδόμησης, στα επόμενα βήματα, θα καθοδηγήσει την διαδικασία και θα παρουσιάσει στον χρήστη, τα στοιχεία που αναλύονται. Ένα υποψήφιο κομμάτι κώδικα προς αναδόμηση είναι αναγκαίο να μπορεί, ανά πάσα στιγμή, να εκδηλώσει δομές που το εκφράζουν. Κάτι τέτοιο συμβαίνει, καθώς η υλοποίηση στοχεύει στην επίτευξη αυτοματοποιημένης αναδόμησης. Συγκεκριμένα, ένας υποψήφιος αποτελεί μια μέθοδο προς αναδόμηση. Ενώ η δομή αποθήκευσης αυτής της μεθόδου εμπεριέχει, εκτός των άλλων τα εξής: τον πηγαίο κώδικα, το όνομα της μεθόδου, την ορατότητα της μεθόδου, την επιστροφή της μεθόδου, τις παραμέτρους, πληροφορίες σχετικά με την κλάση που ανήκει, το αρχείο της κλάσης που ανήκει, την θέση που έχει στο αρχείο αυτό, τα πεδία της κλάσης, πληροφορίες σχετικά με άλλες μεθόδους στην κλάση κ.α. Ακόμα, κατά τη διαδικασία της ανίχνευσης και του ελέγχου των προϋποθέσεων, αποθηκεύονται δομές σχετικά με τις εξαγόμενες και τις νέες μεθόδους που θα δημιουργηθούν. Οι δομές αυτές αποθηκεύονται μόνο στην περίπτωση που έχει ολοκληρωθεί ο έλεγχος. Ο έλεγχος των προϋποθέσεων, όπως αναλύεται και σε προηγούμενο κεφάλαιο, γίνεται και σε επίπεδο εκφράσεων. Συνυπολογίζοντας και την υπάρχουσα υποδομή στο εργαλείο JDeodorant [22] [23] καθώς και την χρησιμότητα των αφηρημένων συντακτικών δέντρων, τα οποία αναλύουν τις εκφράσεις του πηγαίου κώδικα, οι δομές αποθήκευσης των υποψήφιων προς αναδόμησης εμπεριέχουν όλες τις εκφράσεις που προορίζονται για τις μεθόδους before και after, όπως αυτές ορίζονται στην Ενότητα 4.4. Συγκεκριμένα, αποθηκεύονται λίστες για κάθε μία από τις μεθόδους, ώστε να μπορεί να γίνει η ανάλυσή και η αναδόμηση τους κατά τη διαδικασία εφαρμογής. Σωτήριος Η. Πούλιας 76

80 Εικόνα 18. Διάγραμμα Κλάσης Υποψηφίου Στην Εικόνα 18 παρουσιάζεται η κλάση που έχει δημιουργηθεί για την αποθήκευση δεδομένων σχετικά με τις υποψήφιες μεθόδους προς αναδόμηση, ενώ κληρονομεί την κλάση CandidateRefactoring του JDeodorant [23]. Τέλος, τονίζεται πως η υλοποίηση εκμεταλλεύεται στο έπακρο την υπάρχουσα βιβλιοθήκη του JDeodorant [23] και τις δομές που αυτή ενθυλακώνει, η οποία χρησιμοποιεί αφηρημένα συντακτικά δέντρα, γράφους ροής ελέγχου και γράφους εξάρτησεων προγράμματος. Σωτήριος Η. Πούλιας 77

ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ Αξιολόγηση των Σχεδιαστικών Προτύπων και της Ποιότητας του Λογισμικού μέσω Μετρικών, στις Περιπτώσεις Προσθήκης Λειτουργικότητας και

ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ Αξιολόγηση των Σχεδιαστικών Προτύπων και της Ποιότητας του Λογισμικού μέσω Μετρικών, στις Περιπτώσεις Προσθήκης Λειτουργικότητας και ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ Αξιολόγηση των Σχεδιαστικών Προτύπων και της Ποιότητας του Λογισμικού μέσω Μετρικών, στις Περιπτώσεις Προσθήκης Λειτουργικότητας και Αναδόμησης του Κώδικα Η πτυχιακή περιλαμβάνει τα παρακάτω:

Διαβάστε περισσότερα

Πίνακας Περιεχομένων. μέρος A 1 Εισαγωγή στην Τεχνολογία Λογισμικού

Πίνακας Περιεχομένων. μέρος A 1 Εισαγωγή στην Τεχνολογία Λογισμικού Πρόλογος...21 μέρος A Εισαγωγή στην Τεχνολογία Λογισμικού 1 Εισαγωγή στην Τεχνολογία Λογισμικού 1.1 Το λογισμικό...25 1.1.1 Ο ρόλος και η σημασία του λογισμικού...26 1.1.2 Οικονομική σημασία του λογισμικού...28

Διαβάστε περισσότερα

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΜΕΤΑΠΤΥΧΙΑΚΟ ΔΙΠΛΩΜΑ ΕΙΔΙΚΕΥΣΗΣ (MSc) στα ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ ΔΙΠΛΩΜΑΤΙKH ΕΡΓΑΣΙΑ

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΜΕΤΑΠΤΥΧΙΑΚΟ ΔΙΠΛΩΜΑ ΕΙΔΙΚΕΥΣΗΣ (MSc) στα ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ ΔΙΠΛΩΜΑΤΙKH ΕΡΓΑΣΙΑ ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΕΤΑΠΤΥΧΙΑΚΟ ΔΙΠΛΩΜΑ ΕΙΔΙΚΕΥΣΗΣ (MSc) στα ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ ΔΙΠΛΩΜΑΤΙKH ΕΡΓΑΣΙΑ «Αναδόμηση και πρότυπα σχεδίασης λογισμικού» Λάμπρος Τσολάκος Μ312005

Διαβάστε περισσότερα

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο Αρχές Τεχνολογίας Λογισμικού Εργαστήριο Κωδικός Μαθήματος: TP323 Ώρες Εργαστηρίου: 2/εβδομάδα (Διαφάνειες Νίκου Βιδάκη) 1 JAVA Inheritance Εβδομάδα Νο. 3 2 Προηγούμενο μάθημα (1/2) Τι είναι αντικείμενο?

Διαβάστε περισσότερα

Διαγράμματα Κλάσεων στη Σχεδίαση

Διαγράμματα Κλάσεων στη Σχεδίαση Διαγράμματα Κλάσεων στη Σχεδίαση περιεχόμενα παρουσίασης Αφηρημένες κλάσεις Ιδιότητες Λειτουργίες Απλοί τύποι Συσχετίσεις Εξάρτηση Διεπαφές αφηρημένες κλάσεις Οι αφηρημένες κλάσεις δεν μπορούν να δημιουργήσουν

Διαβάστε περισσότερα

Στόχοι της Πτυχιακής

Στόχοι της Πτυχιακής Αξιολόγηση της επίδρασης της χρήσης προτύπων σχεδίασης στις τιμές των μετρικών αντικειμενοστρεφούς σχεδίασης. Εφαρμογή σε εργαλείο σχεδίασης λογισμικού Βούλγαρης Μιχάλης Στόχοι της Πτυχιακής Επίδραση των

Διαβάστε περισσότερα

Μοτίβα Σχεδίασης (Design Patterns)

Μοτίβα Σχεδίασης (Design Patterns) Ενότητα 6 Μοτίβα Σχεδίασης (Design Patterns) Ορισµοί βασικές έννοιες. Σηµαντικά µοτίβα σχεδίασης: Παρατηρητής (Observer). Πρόσοψη (Façade). Προσαρµογέας (Adapter). Πληρεξούσιος (Proxy). Μοναχοπαίδι (Singleton).

Διαβάστε περισσότερα

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ Πρότυπα Σχεδίασης. Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ Πρότυπα Σχεδίασης. Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ Πρότυπα Σχεδίασης Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική Θεσσαλονίκη, Σεπτέμβριος 2013 Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.

Διαβάστε περισσότερα

2.1 Αντικειµενοστρεφής προγραµµατισµός

2.1 Αντικειµενοστρεφής προγραµµατισµός 2.1 Αντικειµενοστρεφής προγραµµατισµός Στον αντικειµενοστρεφή προγραµµατισµό (object oriented programming, OOP) ένα πρόγραµµα υπολογιστή είναι ένα σύνολο αλληλεπιδρώντων αντικειµένων. Μπορεί να ειπωθεί

Διαβάστε περισσότερα

. Μεθοδολογία Προγραμματισμού. Μοτίβα σχεδίασης (Design Patterns) Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014

. Μεθοδολογία Προγραμματισμού. Μοτίβα σχεδίασης (Design Patterns) Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014 .. Μεθοδολογία Προγραμματισμού Μοτίβα σχεδίασης (Design Patterns) Νικόλαος Πεταλίδης Τμήμα Μηχανικών Η/Υ ΤΕΙ Κεντρικής Μακεδονίας Εισαγωγή Εαρινό Εξάμηνο 2014 Ν. Πεταλίδης (ΤΕΙ Κεντρικής Μακεδονίας) Μεθοδολογία

Διαβάστε περισσότερα

(Διαφάνειες Νίκου Βιδάκη)

(Διαφάνειες Νίκου Βιδάκη) (Διαφάνειες Νίκου Βιδάκη) JAVA Inheritance Εβδομάδα Νο. 3 2 Προηγούμενο μάθημα (1/2) Τι είναι αντικείμενο? Ανάλυση αντικειμένων Πραγματικά αντικείμενα Καταστάσεις Συμπεριφορές Αντικείμενα στον προγραμματισμό

Διαβάστε περισσότερα

EPL 603 TOPICS IN SOFTWARE ENGINEERING. Lab 5: Component Adaptation Environment (COPE)

EPL 603 TOPICS IN SOFTWARE ENGINEERING. Lab 5: Component Adaptation Environment (COPE) EPL 603 TOPICS IN SOFTWARE ENGINEERING Lab 5: Component Adaptation Environment (COPE) Performing Static Analysis 1 Class Name: The fully qualified name of the specific class Type: The type of the class

Διαβάστε περισσότερα

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΜΕΤΑΠΤΥΧΙΑΚΟ ΔΙΠΛΩΜΑ ΕΙΔΙΚΕΥΣΗΣ (MSc) στα ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ ΔΙΠΛΩΜΑΤΙKH ΕΡΓΑΣΙΑ

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΜΕΤΑΠΤΥΧΙΑΚΟ ΔΙΠΛΩΜΑ ΕΙΔΙΚΕΥΣΗΣ (MSc) στα ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ ΔΙΠΛΩΜΑΤΙKH ΕΡΓΑΣΙΑ ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΕΤΑΠΤΥΧΙΑΚΟ ΔΙΠΛΩΜΑ ΕΙΔΙΚΕΥΣΗΣ (MSc) στα ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ ΔΙΠΛΩΜΑΤΙKH ΕΡΓΑΣΙΑ «Αναδόμηση Κώδικα με Πρότυπα Σχεδίασης» Γαϊτάνη Μαρία-Άννα ΜΜ4110004

Διαβάστε περισσότερα

ΑΡΦΕ ΑΝΣΙΚΕΙΜΕΝΟΣΡΕΥΟΤ ΠΡΟΓΡΑΜΜΑΣΙΜΟΤ. Ιωάννης Φατζηλυγερούδης Αναπληρωτής Καθηγητής Τμήμα Μηχ/κών Η/Υ και Πληροφορικής Πανεπιστήμιο Πατρών

ΑΡΦΕ ΑΝΣΙΚΕΙΜΕΝΟΣΡΕΥΟΤ ΠΡΟΓΡΑΜΜΑΣΙΜΟΤ. Ιωάννης Φατζηλυγερούδης Αναπληρωτής Καθηγητής Τμήμα Μηχ/κών Η/Υ και Πληροφορικής Πανεπιστήμιο Πατρών ΑΡΦΕ ΑΝΣΙΚΕΙΜΕΝΟΣΡΕΥΟΤ ΠΡΟΓΡΑΜΜΑΣΙΜΟΤ Ιωάννης Φατζηλυγερούδης Αναπληρωτής Καθηγητής Τμήμα Μηχ/κών Η/Υ και Πληροφορικής Πανεπιστήμιο Πατρών ΜΟΡΥΕ ΠΡΟΓΡΑΜΜΑΣΙΜΟΤ Διαδικασιακός ή Διαδικαστικός (Procedural)

Διαβάστε περισσότερα

Εισαγωγή στη Σχεδίαση Λογισμικού

Εισαγωγή στη Σχεδίαση Λογισμικού Εισαγωγή στη Σχεδίαση Λογισμικού περιεχόμενα παρουσίασης Τι είναι η σχεδίαση λογισμικού Έννοιες σχεδίασης Δραστηριότητες σχεδίασης Σχεδίαση και υποδείγματα ανάπτυξης λογισμικού σχεδίαση Η σχεδίαση του

Διαβάστε περισσότερα

Αρχιτεκτονική Λογισμικού

Αρχιτεκτονική Λογισμικού Αρχιτεκτονική Λογισμικού περιεχόμενα παρουσίασης Τι είναι η αρχιτεκτονική λογισμικού Αρχιτεκτονική και απαιτήσεις Σενάρια ποιότητας Βήματα αρχιτεκτονικής σχεδίασης Αρχιτεκτονικά πρότυπα Διαστρωματωμένη

Διαβάστε περισσότερα

ΜΕΘΟΔΟΛΟΓΙΕΣ ΑΝΑΠΤΥΞΗΣ ΣΥΣΤΗΜΑΤΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΜΕΘΟΔΟΛΟΓΙΕΣ ΑΝΑΠΤΥΞΗΣ ΣΥΣΤΗΜΑΤΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΕΘΟΔΟΛΟΓΙΕΣ ΑΝΑΠΤΥΞΗΣ ΣΥΣΤΗΜΑΤΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Μεθοδολογίες Ανάπτυξης Συστημάτων Πληροφορικής Απαντούν στα εξής ερωτήματα Ποιά βήματα θα ακολουθηθούν? Με ποιά σειρά? Ποιά τα παραδοτέα και πότε? Επομένως,

Διαβάστε περισσότερα

Διαδικασίες παραγωγής λογισμικού. Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση

Διαδικασίες παραγωγής λογισμικού. Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση Διαδικασίες παραγωγής λογισμικού Περιεχόμενα Παρουσίαση μοντέλων διεργασίας ανάπτυξης λογισμικού Περιγραφή τριών γενικών μοντέλων διεργασίας ανάπτυξης λογισμικού Γενική περιγραφή των διαδικασιών που περιλαμβάνονται

Διαβάστε περισσότερα

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #12

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #12 Διάγραμμα κλάσεων [Class diagram] Διάλεξη #12: Υπο-τύποι και πολυμορφισμός [sub-typing and polymorphism] Database Music Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 1 Εισαγωγή στον Αντικειμενοστρεφή

Διαβάστε περισσότερα

Κεφάλαιο 6 ο Εισαγωγή στον Προγραμματισμό 1

Κεφάλαιο 6 ο Εισαγωγή στον Προγραμματισμό 1 Κεφάλαιο 6 ο Εισαγωγή στον Προγραμματισμό 1 Ποιες γλώσσες αναφέρονται ως φυσικές και ποιες ως τεχνητές; Ως φυσικές γλώσσες αναφέρονται εκείνες οι οποίες χρησιμοποιούνται για την επικοινωνία μεταξύ ανθρώπων,

Διαβάστε περισσότερα

Σύστημα υποβολής αιτήσεων υποψήφιων συνεργατών ΕΚΤ

Σύστημα υποβολής αιτήσεων υποψήφιων συνεργατών ΕΚΤ Σύστημα υποβολής αιτήσεων υποψήφιων συνεργατών ΕΚΤ 1 Λειτουργικές απαιτήσεις Το σύστημα υποβολής αιτήσεων υποψήφιων συνεργατών στοχεύει στο να επιτρέπει την πλήρως ηλεκτρονική υποβολή αιτήσεων από υποψήφιους

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΛΟΓΙΣΜΙΚΟΥ ΓΙΑ ΤΗ ΔΙΕΝΕΡΓΕΙΑ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΜΕΛΕΤΩΝ

ΑΝΑΠΤΥΞΗ ΛΟΓΙΣΜΙΚΟΥ ΓΙΑ ΤΗ ΔΙΕΝΕΡΓΕΙΑ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΜΕΛΕΤΩΝ ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΑΝΑΠΤΥΞΗ ΛΟΓΙΣΜΙΚΟΥ ΓΙΑ ΤΗ ΔΙΕΝΕΡΓΕΙΑ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΜΕΛΕΤΩΝ ΠΛΟΣΚΑΣ ΝΙΚΟΛΑΟΣ Α.Μ. 123/04 ΕΠΙΒΛΕΠΩΝ: ΣΑΜΑΡΑΣ ΝΙΚΟΛΑΟΣ ΘΕΣΣΑΛΟΝΙΚΗ, ΙΟΥΝΙΟΣ 2007 Περιεχόμενα

Διαβάστε περισσότερα

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΤΑ Αντικειμενοστρεφής Προγραμματισμός Ενότητα 15: Σχεδίαση Εφαρμογών Γρηγόρης Τσουμάκας, Επικ. Καθηγητής Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

ιδάσκων: ηµήτρης Ζεϊναλιπούρ

ιδάσκων: ηµήτρης Ζεϊναλιπούρ Κεφάλαιο 1.3-1.4: Εισαγωγή Στον Προγραµµατισµό ( ιάλεξη 2) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Περιεχόµενα Εισαγωγικές Έννοιες - Ορισµοί Ο κύκλος ανάπτυξης προγράµµατος Παραδείγµατα Πότε χρησιµοποιούµε υπολογιστή?

Διαβάστε περισσότερα

3 Αλληλεπίδραση Αντικειμένων

3 Αλληλεπίδραση Αντικειμένων Αφαίρεση και Αρθρωσιμότητα 3 Αλληλεπίδραση Αντικειμένων Πώς συνεργάζονται τα αντικείμενα που δημιουργούμε Αφαίρεση (abstraction) είναι η δυνατότητα να αγνοούμε τις λεπτομέρειες και να εστιάζουμε την προσοχή

Διαβάστε περισσότερα

public void printstatement() { System.out.println("Employee: " + name + " with salary: " + salary);

public void printstatement() { System.out.println(Employee:  + name +  with salary:  + salary); Κληρονομικότητα Η κληρονομικότητα (inheritance) αποτελεί έναν από τους χαρακτηριστικότερους μηχανισμούς των αντικειμενοστρεφών γλωσσών προγραμματισμού. Επιτρέπει την δημιουργία μιας νέας κλάσης απορροφώντας

Διαβάστε περισσότερα

ΗΥ562 Προχωρημένα Θέματα Βάσεων Δεδομένων Efficient Query Evaluation over Temporally Correlated Probabilistic Streams

ΗΥ562 Προχωρημένα Θέματα Βάσεων Δεδομένων Efficient Query Evaluation over Temporally Correlated Probabilistic Streams ΗΥ562 Προχωρημένα Θέματα Βάσεων Δεδομένων Efficient Query Evaluation over Temporally Correlated Probabilistic Streams Αλέκα Σεληνιωτάκη Ηράκλειο, 26/06/12 aseliniotaki@csd.uoc.gr ΑΜ: 703 1. Περίληψη Συνεισφοράς

Διαβάστε περισσότερα

Κλάσεις και Αντικείµενα

Κλάσεις και Αντικείµενα Κλάσεις και Αντικείµενα Γρηγόρης Τσουµάκας Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης Κλάσεις και Αντικείµενα 2 Τα αντικείµενα σε µια αντικειµενοστρεφή γλώσσα προγραµµατισµού, µοντελοποιούν

Διαβάστε περισσότερα

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΑΛΓΟΡΙΘΜΟΥΣ ΚΑΙ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ Διδάσκουσα Δρ Β. Καβακλή Χειμερινό Εξάμηνο 2001 1 Δοκιμή Έλεγχος Αλγορίθμου Για να

Διαβάστε περισσότερα

Γλώσσες Προγραμματισμού

Γλώσσες Προγραμματισμού Το έργο υλοποιείται στο πλαίσιο του υποέργου 2 με τίτλο «Ανάπτυξη έντυπου εκπαιδευτικού υλικού για τα νέα Προγράμματα Σπουδών» της Πράξης «Ελληνικό Ανοικτό Πανεπιστήμιο» η οποία έχει ενταχθεί στο Επιχειρησιακό

Διαβάστε περισσότερα

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008 Παράδειγμα: Μηχανή για Εισιτήρια 2 Ορισμός Κλάσεων Σύνταξη κλάσης: πεδία, κατασκευαστές, μέθοδοι Ένας αυτόματος εκδότης εισιτηρίων είναι μια μηχανή που δέχεται χρήματα και εκδίδει ένα εισιτήριο. Εκδίδει

Διαβάστε περισσότερα

Πληροφορική 2. Τεχνολογία Λογισμικού

Πληροφορική 2. Τεχνολογία Λογισμικού Πληροφορική 2 Τεχνολογία Λογισμικού 1 2 Κρίση Λογισμικού (1968) Στην δεκαετία του 1970 παρατηρήθηκαν μαζικά: Μεγάλες καθυστερήσεις στην ολοκλήρωση κατασκευής λογισμικών Μεγαλύτερα κόστη ανάπτυξης λογισμικού

Διαβάστε περισσότερα

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου Αντικειμενοστρέφεια Henri Matisse, Harmony in Red, 1908 Κωστής Σαγώνας Νίκος Παπασπύρου Ορισμοί αντικειμενοστρέφειας Ποιοι είναι οι ορισμοί των παρακάτω; Αντικειμενοστρεφής

Διαβάστε περισσότερα

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2 Ανασκόπηση Μια εφαρμογή Java είναι ένα σύνολο από συνεργαζόμενες κλάσεις Διάλεξη #2: Αντικείμενα, Κλάσεις και Μέθοδοι Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό,, Slide 1 Εισαγωγή στον Αντικειμενοστρεφή

Διαβάστε περισσότερα

Προγραμματισμός Η/Υ. Προτεινόμενα θέματα εξετάσεων Εργαστήριο. Μέρος 1 ό. ΤΕΙ Λάρισας- Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πολιτικών Έργων Υποδομής

Προγραμματισμός Η/Υ. Προτεινόμενα θέματα εξετάσεων Εργαστήριο. Μέρος 1 ό. ΤΕΙ Λάρισας- Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πολιτικών Έργων Υποδομής Προγραμματισμός Η/Υ Προτεινόμενα θέματα εξετάσεων Εργαστήριο Μέρος 1 ό ΤΕΙ Λάρισας- Σχολή Τεχνολογικών Εφαρμογών Τμήμα Πολιτικών Έργων Υποδομής Ιανουάριος 2011 Καλογιάννης Γρηγόριος Επιστημονικός/ Εργαστηριακός

Διαβάστε περισσότερα

Προγραμματισμός Ι (HY120)

Προγραμματισμός Ι (HY120) Προγραμματισμός Ι (HY20) # μνήμη & μεταβλητές πρόγραμμα & εκτέλεση Ψηφιακά δεδομένα, μνήμη, μεταβλητές 2 Δυαδικός κόσμος Οι υπολογιστές είναι δυαδικές μηχανές Όλη η πληροφορία (δεδομένα και κώδικας) κωδικοποιείται

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός

Δομημένος Προγραμματισμός Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων Δομημένος Προγραμματισμός Ενότητα 1: Εισαγωγή Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται διαφορετικά Το έργο

Διαβάστε περισσότερα

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού ( Απαντήσεις & Λύσεις Βιβλίου) 1. Σκοποί κεφαλαίου Κύκλος ανάπτυξης προγράµµατος Κατηγορίες γλωσσών προγραµµατισµού

Διαβάστε περισσότερα

Πληροφορική 2. Γλώσσες Προγραμματισμού

Πληροφορική 2. Γλώσσες Προγραμματισμού Πληροφορική 2 Γλώσσες Προγραμματισμού 1 2 Γλώσσες προγραμματσιμού Επιτρέπουν την κωδικοποίηση των αλγορίθμων Η εκτέλεση ενός προγράμματος θα πρέπει να δίνει τα ίδια αποτελέσματα με την νοητική εκτέλεση

Διαβάστε περισσότερα

ΑΝΑΛΥΣΗ ΑΠΑΙΤΗΣΕΩΝ ανάλυση απαιτήσεων Σε αυτό το μάθημα θα ασχοληθούμε με : Δημιουργία μοντέλων

ΑΝΑΛΥΣΗ ΑΠΑΙΤΗΣΕΩΝ ανάλυση απαιτήσεων Σε αυτό το μάθημα θα ασχοληθούμε με : Δημιουργία μοντέλων ΑΝΑΛΥΣΗ ΑΠΑΙΤΗΣΕΩΝ Οι Μηχανικοί Λογισμικού παράγουν μοντέλα που βοηθούν στη διατύπωση των απαιτήσεων με τη μορφή προδιαγραφών. Η εργασία της παραγωγής μοντέλων περιγράφεται ως ανάλυση απαιτήσεων. Η ανάλυση

Διαβάστε περισσότερα

Αρχικοποίηση Αντικειµένων & Κλάσεων στη Java Object Instantiation & Class Initialisation Κώστας Σαΐδης saiko@di.uoa.gr http://daemon.di.uoa.gr/daemon/issue4 Μάρτιος 2004 Η Αρχή είναι το ήµισυ του Παντός

Διαβάστε περισσότερα

ΑΥΤΟΜΑΤΗ ΑΝΑΚΑΤΑΣΚΕΥΗ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΩΝ ΔΙΕΠΑΦΩΝ Η ΜΕΤΑΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΕΞΕΙΔΙΚΕΥΣΗΣ. Υποβάλλεται στην

ΑΥΤΟΜΑΤΗ ΑΝΑΚΑΤΑΣΚΕΥΗ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΩΝ ΔΙΕΠΑΦΩΝ Η ΜΕΤΑΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΕΞΕΙΔΙΚΕΥΣΗΣ. Υποβάλλεται στην ΑΥΤΟΜΑΤΗ ΑΝΑΚΑΤΑΣΚΕΥΗ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΩΝ ΔΙΕΠΑΦΩΝ Η ΜΕΤΑΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΕΞΕΙΔΙΚΕΥΣΗΣ Υποβάλλεται στην ορισθείσα από την Γενική Συνέλευση Ειδικής Σύνθεσης του Τμήματος Πληροφορικής Εξεταστική Επιτροπή από

Διαβάστε περισσότερα

class object Database Database Item Item [sub-typing and polymorphism] MusicCD Video MusicCD Video

class object Database Database Item Item [sub-typing and polymorphism] MusicCD Video MusicCD Video ιάγραµµα κλάσεων [Class diagram] Εβδοµάδα 2: Υπο-τύποι και πολυµορφισµός [sub-typing and polymorphism] Database Music Σχεδίαση-Ανάπτυξη Εφαρµογών Πληροφορικής Αντώνιος Συµβώνης, ΕΜΠ, Slide 1 Σχεδίαση-Ανάπτυξη

Διαβάστε περισσότερα

ΠΟΛΥΜΟΡΦΙΣΜΟΣ. 4.1 Κληρονομικότητα και Αρχή της Υποκατάστασης

ΠΟΛΥΜΟΡΦΙΣΜΟΣ. 4.1 Κληρονομικότητα και Αρχή της Υποκατάστασης ΠΟΛΥΜΟΡΦΙΣΜΟΣ Λόγω της θεμελιώδους σημασίας της έννοιας του πολυμορφισμού (polymorphism) στην αντικειμενοστρεφή σχεδίαση, κρίνεται σκόπιμο στο σημείο αυτό του βιβλίου να αναλυθεί εκτενέστερα. Ο πολυμορφισμός

Διαβάστε περισσότερα

Επεκτεταμένο Μοντέλο Οντοτήτων-Συσχετίσεων Αντζουλάτος Γεράσιμος antzoulatos@upatras.gr Τμήμα Εφαρμογών Πληροφορικής στην Διοίκηση και Οικονομία ΤΕΙ Πατρών - Παράρτημα Αμαλιάδας 08 Νοεμβρίου 2012 Περιεχομενα

Διαβάστε περισσότερα

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός Αντικειμενοστρεφής Προγραμματισμός Διδάσκουσα: Αναπλ. Καθηγήτρια Ανδριάνα Πρέντζα aprentza@unipi.gr Εργαστηριακός Συνεργάτης: Δρ. Βασιλική Κούφη vassok@unipi.gr Περιεχόμενα Java Classes Java Objects Java

Διαβάστε περισσότερα

GoNToggle: ΕΞΥΠΝΗ ΜΗΧΑΝΗ ΑΝΑΖΗΤΗΣΗΣ ΜΕ ΧΡΗΣΗ ΟΝΤΟΛΟΓΙΩΝ

GoNToggle: ΕΞΥΠΝΗ ΜΗΧΑΝΗ ΑΝΑΖΗΤΗΣΗΣ ΜΕ ΧΡΗΣΗ ΟΝΤΟΛΟΓΙΩΝ ΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ: GoNToggle: ΕΞΥΠΝΗ ΜΗΧΑΝΗ ΑΝΑΖΗΤΗΣΗΣ ΜΕ ΧΡΗΣΗ ΟΝΤΟΛΟΓΙΩΝ ΣΠΟΥ ΑΣΤΗΣ: Γιαννόπουλος Γεώργιος ΕΠΙΒΛΕΠΩΝ: Καθ. Ι. Βασιλείου ΒΟΗΘΟΙ: Α. ηµητρίου, Θ. αλαµάγκας Γενικά Οι µηχανές αναζήτησης

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ Π ΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ Π ΕΡΙΒΑΛΛΟΝ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ Π ΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ Π ΕΡΙΒΑΛΛΟΝ ΥΠΟΥΡΓΕΙΟ ΕΘΝΙΚΗΣ ΠΑΙΔΕΙΑΣ ΚΑΙ ΘΡΗΣΚΕΥΜΑΤΩΝ ΠΑΙΔΑΓΩΓΙΚΟ ΙΝΣΤΙΤΟΥΤΟ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ Π ΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ Π ΕΡΙΒΑΛΛΟΝ Κ Υ Κ Λ Ο Υ Π Λ Η Ρ Ο Φ Ο Ρ Ι Κ Η Σ Κ Α Ι Υ Π Η Ρ Ε Σ Ι Ω Ν Τ Ε Χ Ν Ο Λ Ο Γ Ι Κ Η

Διαβάστε περισσότερα

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα; Εισαγωγή Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα; 1. Σελίδα μαθήματος Εγγραφή Ο κάθε φοιτητής πρέπει να κάνει εγγραφή στη σελίδα του μαθήματος στην πλατφόρμα e-class

Διαβάστε περισσότερα

Περιεχόµενα. Ανασκόπηση - Ορισµοί. Ο κύκλος ανάπτυξης προγράµµατος. Γλώσσες Προγραµµατισµού Ασκήσεις

Περιεχόµενα. Ανασκόπηση - Ορισµοί. Ο κύκλος ανάπτυξης προγράµµατος. Γλώσσες Προγραµµατισµού Ασκήσεις Προγραµµατισµός Η/Υ Ανασκόπηση - Ορισµοί Περιεχόµενα Ο κύκλος ανάπτυξης προγράµµατος Περιγραφή προβλήµατος Ανάλυση προβλήµατος Λογικό ιάγραµµα Ψευδοκώδικας Κωδικοποίηση Συντήρηση Γλώσσες Προγραµµατισµού

Διαβάστε περισσότερα

Οντοκεντρικός Προγραμματισμός

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 1: Αντικειμενοστραφής Προγραμματισμός Εισαγωγή OBJECT-ORIENTED PROGRAMMING ΔΙΔΑΣΚΟΝΤΕΣ: Iωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ

Διαβάστε περισσότερα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα Η εξέλιξη των γλωσσών προγραμματισμού Η εξέλιξη των γλωσσών προγραμματισμού είναι μια διαδικασία αφαίρεσης Στην αρχή ένα πρόγραμμα ήταν

Διαβάστε περισσότερα

Θέματα Ατομικής Διπλωματικής Εργασίας - DRAFT Ακαδημαϊκό Έτος 2015/2016. Γεωργία Καπιτσάκη (Λέκτορας)

Θέματα Ατομικής Διπλωματικής Εργασίας - DRAFT Ακαδημαϊκό Έτος 2015/2016. Γεωργία Καπιτσάκη (Λέκτορας) Θέματα Ατομικής Διπλωματικής Εργασίας - DRAFT Ακαδημαϊκό Έτος 2015/2016 Γεωργία Καπιτσάκη (Λέκτορας) ΠΕΡΙΟΧΗ Α: ΕΦΑΡΜΟΓΕΣ ΜΕ ΑΙΣΘΗΤΗΡΕΣ ΓΙΑ ΕΠΙΓΝΩΣΗ ΣΥΓΚΕΙΜΕΝΟΥ Οι αισθητήρες μας δίνουν τη δυνατότητα συλλογής

Διαβάστε περισσότερα

Π Τ Υ Χ Ι Α Κ Η Ε Ρ Γ Α Σ Ι Α

Π Τ Υ Χ Ι Α Κ Η Ε Ρ Γ Α Σ Ι Α ΑΝΩΤΑΤΟ ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΠΕΙΡΑΙΑ ΤΜΗΜΑ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΤΟΜΕΑΣ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ Η/Υ, ΠΛΗΡΟΦΟΡΙΚΗΣ & ΔΙΚΤΥΩΝ Εργ. Τεχνολογίας Λογισμικού & Υπηρεσιών S 2 E Lab Π Τ Υ Χ Ι

Διαβάστε περισσότερα

J-GANNO. Σύντοµη αναφορά στους κύριους στόχους σχεδίασης και τα βασικά χαρακτηριστικά του πακέτου (προέκδοση 0.9Β, Φεβ.1998) Χάρης Γεωργίου

J-GANNO. Σύντοµη αναφορά στους κύριους στόχους σχεδίασης και τα βασικά χαρακτηριστικά του πακέτου (προέκδοση 0.9Β, Φεβ.1998) Χάρης Γεωργίου J-GANNO ΓΕΝΙΚΕΥΜΕΝΟ ΠΑΚΕΤΟ ΥΛΟΠΟΙΗΣΗΣ ΤΕΧΝΗΤΩΝ ΝΕΥΡΩΝΙΚΩΝ ΙΚΤΥΩΝ ΣΤΗ ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ JAVA Σύντοµη αναφορά στους κύριους στόχους σχεδίασης και τα βασικά χαρακτηριστικά του πακέτου (προέκδοση 0.9Β,

Διαβάστε περισσότερα

Έλεγχος Συνένωσης και Διασφάλιση Ποιότητας

Έλεγχος Συνένωσης και Διασφάλιση Ποιότητας Έλεγχος Συνένωσης και Διασφάλιση Ποιότητας περιεχόμενα παρουσίασης Έλεγχος συνένωσης Συνένωση και οικοδόμηση Ημερήσια οικοδόμηση Συνεχής συνένωση Σχετικές επιδόσεις μεθόδων διασφάλισης ποιότητας Μετρικές

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Εισαγωγή στη Python Νικόλαος Ζ. Ζάχαρης Αναπληρωτής

Διαβάστε περισσότερα

Δείκτες σε συναρτήσεις. Προγραμματισμός II 1

Δείκτες σε συναρτήσεις. Προγραμματισμός II 1 Δείκτες σε συναρτήσεις Προγραμματισμός II 1 lalis@inf.uth.gr Συνάρτηση Ομάδα εντολών που γράφουμε ξεχωριστά για να υλοποιήσουμε μια συγκεκριμένη λειτουργία για καλύτερη / πιο καθαρή δόμηση του κώδικα για

Διαβάστε περισσότερα

Κεφάλαιο 2ο. Κατανοώντας την αντικειμενοστρέφεια

Κεφάλαιο 2ο. Κατανοώντας την αντικειμενοστρέφεια Περιεχόμενα Πρόλογος... 11 Κεφάλαιο 1ο. Εισαγωγή στη γλώσσα UML 1.1 Προσθέτοντας μια νέα μέθοδο...13 1.2 Πως αναπτύχθηκε η UML...14 1.3 Κατανοώντας την UML...15 1.4 Αναγνωρίζοντας τα επί μέρους τμήματα

Διαβάστε περισσότερα

ΔΙΕΡΕΥΝΗΣΗ ΙΣΤΟΡΙΚΩΝ ΔΕΔΟΜΕΝΩΝ ΑΝΑΦΟΡΙΚΑ ΜΕ ΠΡΟΒΛΗΜΑΤΑ ΣΧΕΔΙΑΣΗΣ ΣΕ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗ ΣΥΣΤΗΜΑΤΑ ΛΟΓΙΣΜΙΚΟΥ

ΔΙΕΡΕΥΝΗΣΗ ΙΣΤΟΡΙΚΩΝ ΔΕΔΟΜΕΝΩΝ ΑΝΑΦΟΡΙΚΑ ΜΕ ΠΡΟΒΛΗΜΑΤΑ ΣΧΕΔΙΑΣΗΣ ΣΕ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗ ΣΥΣΤΗΜΑΤΑ ΛΟΓΙΣΜΙΚΟΥ ΔΙΕΡΕΥΝΗΣΗ ΙΣΤΟΡΙΚΩΝ ΔΕΔΟΜΕΝΩΝ ΑΝΑΦΟΡΙΚΑ ΜΕ ΠΡΟΒΛΗΜΑΤΑ ΣΧΕΔΙΑΣΗΣ ΣΕ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗ ΣΥΣΤΗΜΑΤΑ ΛΟΓΙΣΜΙΚΟΥ ΑΝ ΑΣΤ ΑΣΙΟ Σ Μ. ΜΑΝ ΑΚΟ Σ mai 32/09 Θ Ε Σ Σ ΑΛ Ο Ν Ι Κ Η, ΙΟΥΝ ΙΟΣ 2010 Τ Μ Η Μ Α Ε Φ Α Ρ Μ Ο

Διαβάστε περισσότερα

Computing. Νοέμβριος Έκδοση 1.0

Computing. Νοέμβριος Έκδοση 1.0 Computing Νοέμβριος 2017 Έκδοση 1.0 Ενότητα Computing Αυτή η ενότητα παραθέτει τις βασικές έννοιες και δεξιότητες που σχετίζονται με την ικανότητα χρήσης υπολογιστικής σκέψης (computational thinking) και

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Καθηγητής Πληροφορικής ΠΕ19 1 ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΚΕΦΑΛΑΙΟ 6 ο : ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΙΣΤΟΣΕΛΙΔΑ ΜΑΘΗΜΑΤΟΣ: http://eclass.sch.gr/courses/el594100/ Η έννοια του προγράμματος

Διαβάστε περισσότερα

Εισαγωγή στον προγραμματισμό

Εισαγωγή στον προγραμματισμό Ενότητες: Εισαγωγή στον προγραμματισμό Η έννοια του προγράμματος Ιστορική αναδρομή Φυσικές και τεχνητές γλώσσες Τεχνικές σχεδίασης προγραμμάτων Ιεραρχική Σχεδίαση Τμηματικός Προγραμματισμός Δομημένος προγραμματισμός

Διαβάστε περισσότερα

Μοντελοποίηση Πεδίου

Μοντελοποίηση Πεδίου Μοντελοποίηση Πεδίου περιεχόμενα παρουσίασης Εννοιολογικές κλάσεις Συσχετίσεις εννοιολογικών κλάσεων Τύποι ιδιοτήτων Γενίκευση Συχνά σφάλματα μοντελοποίησης πεδίου Εννοιολογικές κλάσεις και κλάσεις λογισμικού

Διαβάστε περισσότερα

Τεχνολογίες Υλοποίησης Αλγορίθµων

Τεχνολογίες Υλοποίησης Αλγορίθµων Τεχνολογίες Υλοποίησης Αλγορίθµων Χρήστος Ζαρολιάγκης Καθηγητής Τµήµα Μηχ/κων Η/Υ & Πληροφορικής Πανεπιστήµιο Πατρών email: zaro@ceid.upatras.gr Γρηγόρης Πράσινος Υποψήφιος ιδάκτωρ Τµήµα Μηχ/κων Η/Υ &

Διαβάστε περισσότερα

<<ΔΗΜΗΤΡΗΣ ΜΑΝΩΛΗΣ ΦΥΣΙΚΟΣ ΜCs>> 1

<<ΔΗΜΗΤΡΗΣ ΜΑΝΩΛΗΣ ΦΥΣΙΚΟΣ ΜCs>> 1 ΚΕΦΑΛΑΙΟ 7 ο ΠΡΟΓΡΑΜΜΑ : Το πρόγραμμα αποτελείται από μια σειρά οδηγιών, που ονομάζονται εντολές, για την εκτέλεση τέτοιου είδους πράξεων, καθώς επίσης και από ένα σύνολο πρόσθετων οδηγιών ελέγχου, που

Διαβάστε περισσότερα

06 Αντικειμενοστρεφής ανάλυση και σχεδιασμός

06 Αντικειμενοστρεφής ανάλυση και σχεδιασμός 06 Αντικειμενοστρεφής ανάλυση και σχεδιασμός Τεχνολογία Λογισμικού Τμήμα Πληροφορικής & Τηλεπικοινωνιών, ΕΚΠΑ Εαρινό εξάμηνο 2016 17 Δρ. Κώστας Σαΐδης saiko@di.uoa.gr Αφαίρεση Abstraction "Η εννοιολογική

Διαβάστε περισσότερα

Chapter 6. Problem Solving and Algorithm Design. Στόχοι Ενότητας. Επίλυση προβληµάτων. Εισαγωγή. Nell Dale John Lewis

Chapter 6. Problem Solving and Algorithm Design. Στόχοι Ενότητας. Επίλυση προβληµάτων. Εισαγωγή. Nell Dale John Lewis Στόχοι Ενότητας Chapter 6 Problem Solving and Algorithm Design Nell Dale John Lewis Αναγνώριση αν ένα πρόβληµα µπορεί να επιλυθεί µε τη χρήση υπολογιστή Περιγραφή της διαδικασίας επίλυσης προβληµάτων και

Διαβάστε περισσότερα

ΕΡΓΟ: Συγκριτική Μελέτη Λογισμικού Βιβλιοθηκών, Λογισμικού Εφαρμογών Ανοικτού Κώδικα και Βιομηχανικού Λογισμικού MIS:

ΕΡΓΟ: Συγκριτική Μελέτη Λογισμικού Βιβλιοθηκών, Λογισμικού Εφαρμογών Ανοικτού Κώδικα και Βιομηχανικού Λογισμικού MIS: ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ, ΔΙΑ ΒΙΟΥ ΜΑΘΗΣΗΣ ΚΑΙ ΘΡΗΣΚΕΥΜΑΤΩΝ ΕΙΔΙΚΗ ΥΠΗΡΕΣΙΑ ΔΙΑΧΕΙΡΙΣΗΣ ΕΠΙΧΕΙΡΗΣΙΑΚΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ ΕΚΠΑΙΔΕΥΣΗ ΚΑΙ ΔΙΑ ΒΙΟΥ ΜΑΘΗΣΗ ΕΠΙΧΕΙΡΗΣΙΑΚΟ ΠΡΟΓΡΑΜΜΑ «ΕΚΠΑΙΔΕΥΣΗ ΚΑΙ

Διαβάστε περισσότερα

Κληρονομικότητα. Παύλος Εφραιμίδης pefraimi <at> ee.duth.gr. Java Κληρονομικότητα 1

Κληρονομικότητα. Παύλος Εφραιμίδης pefraimi <at> ee.duth.gr. Java Κληρονομικότητα 1 Κληρονομικότητα Παύλος Εφραιμίδης pefraimi ee.duth.gr Java Κληρονομικότητα 1 Ιεραρχίες Κλάσεων Στην Java (και γενικότερα στον αντικειμενοστραφή προγραμματισμό) μπορεί από μία να κλάση να δημιουργηθεί

Διαβάστε περισσότερα

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος

Κεφάλαιο 2.3: Προγραμματισμός. Επιστήμη ΗΥ Κεφ. 2.3 Καραμαούνας Πολύκαρπος Κεφάλαιο 2.3: Προγραμματισμός 1 2.3.1 Αναφορά σε γλώσσες προγραμματισμού και «Προγραμματιστικά Υποδείγματα» 2.3.1.1 Πρόγραμμα και Γλώσσες Προγραμματισμού Πρόγραμμα: σύνολο εντολών που χρειάζεται να δοθούν

Διαβάστε περισσότερα

1 η ΕΝΟΤΗΤΑ ΕΙΣΑΓΩΓΗ (Προγραμματισμός & MATLAB)

1 η ΕΝΟΤΗΤΑ ΕΙΣΑΓΩΓΗ (Προγραμματισμός & MATLAB) ΣΧΟΛΗ ΠΟΛΙΤΙΚΩΝ ΜΗΧΑΝΙΚΩΝ ΕΜΠ ΜΕΘΟΔΟΙ ΕΠΙΛΥΣΗΣ ΜΕ Η/Υ 1 η ΕΝΟΤΗΤΑ ΕΙΣΑΓΩΓΗ (Προγραμματισμός & MATLAB) Ν.Δ. Λαγαρός Μ. Φραγκιαδάκης Α. Στάμος Άδεια Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες

Διαβάστε περισσότερα

Εργαστήριο Τεχνολογίας Λογισμικού και Ανάλυσης Συστημάτων - 4 ο Εργαστήριο -

Εργαστήριο Τεχνολογίας Λογισμικού και Ανάλυσης Συστημάτων - 4 ο Εργαστήριο - ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ 3 ο ΕΞΑΜΗΝΟ Εργαστήριο Τεχνολογίας Λογισμικού και Ανάλυσης Συστημάτων - 4 ο Εργαστήριο - ΕΠΙΜΕΛΕΙΑ ΜΑΘΗΜΑΤΟΣ: Πρέντζα Ανδριάννα ΕΠΙΜΕΛΕΙΑ ΕΡΓΑΣΤΗΡΙΟΥ: Στουγιάννου

Διαβάστε περισσότερα

Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα

Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα Τεχνικές σχεδίασης προγραμμάτων, Προγραμματιστικά Περιβάλλοντα Ενότητες βιβλίου: 6.4, 6.7 Ώρες διδασκαλίας: 1 Τεχνικές σχεδίασης προγραμμάτων Στο βιβλίο γίνεται αναφορά σε μία τεχνική για την ανάπτυξη

Διαβάστε περισσότερα

Αρχές Προγραμματισμού Υπολογιστών

Αρχές Προγραμματισμού Υπολογιστών Αρχές Προγραμματισμού Υπολογιστών Ανάπτυξη Προγράμματος Β ΕΠΑΛ Τομέας Πληροφορικής Βελώνης Γεώργιος Καθηγητής Πληροφορικής ΠΕ20 Κύκλος ανάπτυξης προγράμματος/λογισμικού Η διαδικασία ανάπτυξης λογισμικού,

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΑΚΩΝ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΠΡΟΠΤΥΧΙΑΚΟ ΠΡΟΓΡΑΜΜΑ ΣΠΟΥΔΩΝ ΜΑΘΗΜΑ: ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ ΔΙΑΔΙΚΑΣΙΕΣ ΠΑΡΑΓΩΓΗΣ ΛΟΓΙΣΜΙΚΟΥ Διδάσκων: Γ. Χαραλαμπίδης,

Διαβάστε περισσότερα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 10 ΟΥ ΚΕΦΑΛΑΙΟΥ ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ 1. Πως ορίζεται ο τμηματικός προγραμματισμός; Τμηματικός προγραμματισμός

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ Εισαγωγή Μεθοδολογία της Έρευνας ΕΙΚΟΝΑ 1-1 Μεθοδολογία της έρευνας.

ΚΕΦΑΛΑΙΟ Εισαγωγή Μεθοδολογία της Έρευνας ΕΙΚΟΝΑ 1-1 Μεθοδολογία της έρευνας. ΚΕΦΑΛΑΙΟ 1 Εισαγωγή Η Μεθοδολογία της Έρευνας (research methodology) είναι η επιστήμη που αφορά τη μεθοδολογία πραγματοποίησης μελετών με συστηματικό, επιστημονικό και λογικό τρόπο, με σκοπό την παραγωγή

Διαβάστε περισσότερα

4. Συντακτικό μιας γλώσσας είναι το σύνολο των κανόνων που ορίζει τις μορφές με τις οποίες μια λέξη είναι αποδεκτή.

4. Συντακτικό μιας γλώσσας είναι το σύνολο των κανόνων που ορίζει τις μορφές με τις οποίες μια λέξη είναι αποδεκτή. ΑΕσΠΠ-Κεφ6. Εισαγωγή στον προγραμματισμό 1 ΣΩΣΤΟ ΛΑΘΟΣ 1. Οι γλώσσες προγραμματισμού αναπτυχθήκαν με σκοπό την επικοινωνία ανθρώπου μηχανής. 2. Αλγόριθμος = Πρόγραμμα + Δομές Δεδομένων 3. Ένα πρόγραμμα

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07 Αλγόριθμος: Βήμα προς βήμα διαδικασία για την επίλυση κάποιου προβλήματος. Το πλήθος των βημάτων πρέπει να είναι πεπερασμένο. Αλλιώς: Πεπερασμένη

Διαβάστε περισσότερα

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ Ανάπτυξη μιας προσαρμοστικής πολιτικής αντικατάστασης αρχείων, με χρήση

Διαβάστε περισσότερα

Διαδικασίες παραγωγής λογισμικού. I. Sommerville 2006 Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση Κεφ. 4

Διαδικασίες παραγωγής λογισμικού. I. Sommerville 2006 Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση Κεφ. 4 Διαδικασίες παραγωγής λογισμικού Στόχοι Παρουσίαση μοντέλων παραγωγής λογισμικού Περιγραφή τριών γενικών μοντέλων παραγωγής λογισμικού και πότε μπορούν να χρησιμοποιούνται Γενική περιγραφή των μοντέλων

Διαβάστε περισσότερα

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 3. Στοίβες & Ουρές 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 19/10/2017 Ανακεφαλαίωση:

Διαβάστε περισσότερα

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 3. Στοίβες & Ουρές 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 4/11/2016 Ανακεφαλαίωση:

Διαβάστε περισσότερα

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6 Ανασκόπηση Μια εφαρµογή Java είναι ένα σύνολο από συνεργαζόµενες κλάσεις Εβδοµάδα 2: Αντικείµενα, Κλάσεις και Μέθοδοι Εισαγωγή στον Προγραµµατισµό,,, Slide 1 Εισαγωγή στον Προγραµµατισµό,,, Slide 2 Ανασκόπηση:

Διαβάστε περισσότερα

Διαδικασίες παραγωγής λογισμικού. Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση

Διαδικασίες παραγωγής λογισμικού. Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση Διαδικασίες παραγωγής λογισμικού Περιεχόμενα Παρουσίαση μοντέλων διεργασίας ανάπτυξης λογισμικού Περιγραφή τριών γενικών μοντέλων διεργασίας ανάπτυξης λογισμικού Γενική περιγραφή των διαδικασιών που περιλαμβάνονται

Διαβάστε περισσότερα

Ελληνικό Ανοικτό Πανεπιστήµιο. Βασικές έννοιες αντικειµενοστρεφούς τεχνολογίας. ρ. Πάνος Φιτσιλής

Ελληνικό Ανοικτό Πανεπιστήµιο. Βασικές έννοιες αντικειµενοστρεφούς τεχνολογίας. ρ. Πάνος Φιτσιλής 1 Ελληνικό Ανοικτό Πανεπιστήµιο Βασικές έννοιες αντικειµενοστρεφούς τεχνολογίας ρ. Πάνος Φιτσιλής Περιεχόµενα Βασικές έννοιες αντικειµενοστεφούς τρόπου ανάπτυξης Τι είναι κλάση Τι είναι αντικείµενο 2 Βασικές

Διαβάστε περισσότερα

14 Πρότυπα Σχεδίασης συνέχεια

14 Πρότυπα Σχεδίασης συνέχεια 14 Πρότυπα Σχεδίασης συνέχεια Τεχνολογία Λογισμικού Τμήμα Πληροφορικής & Τηλεπικοινωνιών, ΕΚΠΑ Εαρινό εξάμηνο 2016 17 Δρ. Κώστας Σαΐδης saiko@di.uoa.gr Καλές πρακτικές δόμησης του κώδικα 2 Πρότυπο σχεδίασης

Διαβάστε περισσότερα

ΠΡΟΓΡΑΜΜΑ ΣΠΟΥΔΩΝ ΠΛΗΡΟΦΟΡΙΚΗ, Γ ΤΑΞΗ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ

ΠΡΟΓΡΑΜΜΑ ΣΠΟΥΔΩΝ ΠΛΗΡΟΦΟΡΙΚΗ, Γ ΤΑΞΗ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ ΠΡΟΓΡΑΜΜΑ ΣΠΟΥΔΩΝ ΠΛΗΡΟΦΟΡΙΚΗ, Γ ΤΑΞΗ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ Σκοπός του μαθήματος είναι οι μαθητές και οι μαθήτριες να αναπτύξουν ικανότητες αναλυτικής και συνθετικής σκέψης, ώστε να επιλύουν προβλήματα, να σχεδιάζουν

Διαβάστε περισσότερα

ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ

ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ Κεφάλαιο 7 ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ Ερωτήσεις 1. Να αναφέρετε διαφορές μεταξύ γλωσσών μηχανής και γλωσσών χαμηλού επιπέδου. Οι γλώσσες μηχανής κωδικοποιούν τις εντολές τους με ομάδες

Διαβάστε περισσότερα

Δείχτες Επιτυχίας και Δείχτες Επάρκειας

Δείχτες Επιτυχίας και Δείχτες Επάρκειας Δείχτες Επιτυχίας και Δείχτες Επάρκειας Γ Τάξη Θεματικές Περιοχές: 1. Βασικές έννοιες της Πληροφορικής και της Επιστήμης Ηλεκτρονικών Υπολογιστών 2. Υλικό / Αρχιτεκτονική Ηλεκτρονικού Υπολογιστή 3. Λειτουργικά

Διαβάστε περισσότερα

Εισαγωγή. Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής

Εισαγωγή. Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής Εισαγωγή Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής Μεταγλωττιστής Αρχικό πρόγραμμα (source program) Μεταγλωττιστής Τελικό πρόγραμμα (object program) Διαγνωστικά μηνύματα Μεταγλωττιστής Παίρνει σαν

Διαβάστε περισσότερα

Οντοκεντρικός Προγραμματισμός

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 2: Η ΓΛΩΣΣΑ JAVA Κληρονομικότητα ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ

Διαβάστε περισσότερα

Σύνθεση και Κληρονομικότητα

Σύνθεση και Κληρονομικότητα Σύνθεση και Κληρονομικότητα Σύνθεση (composition) Κληρονομικότητα (inheritance) Υπερφόρτωση κληρονομημένων μελών Εικονικές συναρτήσεις και Πολυμορφισμός Αφηρημένες (abstract) βασικές κλάσεις 1 Σύνθεση

Διαβάστε περισσότερα

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL)

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) Pascal- Εισαγωγή Η έννοια του προγράμματος Η επίλυση ενός προβλήματος με τον υπολογιστή περιλαμβάνει, όπως έχει ήδη αναφερθεί, τρία εξίσου

Διαβάστε περισσότερα

. Μεθοδολογία Προγραμματισμού. Abstract Κλάσεις και Interfaces. Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014

. Μεθοδολογία Προγραμματισμού. Abstract Κλάσεις και Interfaces. Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014 .. Μεθοδολογία Προγραμματισμού Abstract Κλάσεις και Interfaces Νικόλαος Πεταλίδης Τμήμα Μηχανικών Η/Υ ΤΕΙ Κεντρικής Μακεδονίας Εισαγωγή Εαρινό Εξάμηνο 2014 Ν. Πεταλίδης (ΤΕΙ Κεντρικής Μακεδονίας) Μεθοδολογία

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός

Δομημένος Προγραμματισμός ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα: Συναρτήσεις θεωρία Δ. Ε. Μετάφας Τμ. Ηλεκτρονικών Μηχ. Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος http://www.teiser.gr/icd/staff/lantzos lantzos@teiser.gr Κανόνες Ομαλής Λειτουργίας Ερχόμαστε στην ώρα μας Δεν καπνίζουμε και τρώμε εντός της αίθουσας

Διαβάστε περισσότερα

Σκοπός του μαθήματος

Σκοπός του μαθήματος ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Εισαγωγή Βασικές Έννοιες Βαγγελιώ Καβακλή Τμήμα Πολιτισμικής Τεχνολογίας και Επικοινωνίας Πανεπιστήμιο Αιγαίου Εαρινό Εξάμηνο 2012-2013 1 Σκοπός του μαθήματος Η απόκτηση των γνώσεων

Διαβάστε περισσότερα

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής - Εβδομάδα 1

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής - Εβδομάδα 1 Στόχοι Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής (Αντικειμενοστρεφής Προγραμματισμός) Αντώνιος Συμβώνης www.math.ntua.gr/~symvonis Καλή γνώση βασικών αρχών προγραμματισμού Καλή γνώση βασικών αρχών αντικειμενοστρεφή

Διαβάστε περισσότερα