Αυτόματη Ανακατασκευή Π ρογραμματισμώ ν Διεπαφών

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

Download "Αυτόματη Ανακατασκευή Π ρογραμματισμώ ν Διεπαφών"

Transcript

1 Αυτόματη Ανακατασκευή Π ρογραμματισμώ ν Διεπαφών Σ7Π>ρίδων Κ ρανάς Μ Ε Τ Α Π Τ Υ Χ Ι Α Κ Η Ε Ρ Γ Α Σ Ι Α Ε Ξ Ε Ι Δ Ι Κ Ε Υ Σ Η Σ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ DEPARTMENT OF COMPUTER SCIENCE UNIVERSITY OF IOANNINA Ιωάννινα, Ιούλιος 2012

2 ΒΙΒΛΙΟΘΗΚΗ S,! i l?.r.'?anninon

3 ΑΥΤΟΜΑΤΗ ΑΝΑΚΑΤΑΣΚΕΥΗ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΩΝ ΔΙΕΠΑΦΩΝ Η ΜΕΤΑΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΕΞΕΙΔΙΚΕΥΣΗΣ Υποβάλλεται στην ορισθείσα από την Γενική Συνέλευση Ειδικής Σύνθεσης του Τμήματος Πληροφορικής Εξεταστική Επιτροπή από τον Σπυρίδωνα Κρανά ως μέρος των Υποχρεώσεων για τη λήψη του ΜΕΤΑΠΤΥΧΙΑΚΟΥ ΔΙΠΛΩΜΑΤΟΣ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ ΜΕ ΕΞΕΙΔΙΚΕΥΣΗ ΣΤΟ ΛΟΓΙΣΜΙΚΟ Ιούλιος 2012 < ss;r

4 ii ΕΥΧΑΡΙΣΤΙΕΣ Με το πέρας της παρούσας διατριβής, θα ήθελα να εκφράσω τις ευχαριστίες μου στον επιβλέποντά, κ. Ζάρρα Απόστολο, Επίκουρο Καθηγητή του τμήματος Πληροφορικής του Πανεπιστημίου Ιωαννίνων, για την εποικοδομητική και αρμονική συνεργασία που είχαμε, καθώς επίσης και για το ενδιαφέρον που επέδειξε, καθ όλη τη διάρκεια εκπόνησής της. Οι συμβουλές και η καθοδήγησή του, υπήρξαν καταλυτικές στην επιτυχή ολοκλήρωση] της εργασίας. Επίσης, θα ήθελα να ευχαριστήσω τον κ. Παπαπέτρου Ευάγγελο και τον κ. Βασιλειάδη Παναγιώτη, Επίκουρους Καθηγητές του τμήματος Πληροφορικής του Πανεπιστημίου Ιωαννίνων και μέλη της εξεταστικής επιτροπής. Κλείνοντας, θα αποτελούσε παράλειψη, αν δεν ευχαριστούσα όλα τα αγαπημένα μου πρόσωπα, τα οποία με στήριξαν στην έως τώρα ακαδημαϊκή μου πορεία. \ ι! 1

5 Ill ΠΕΡΙΕΧΟΜΕΝΑ ΕΥΧΑΡΙΣΤΙΕΣ 11 ΠΕΡΙΕΧΟΜΕΝΑ iii ΕΥΡΕΤΗΡΙΟ ΠΙΝΑΚΩΝ iv ΕΥΡΕΤΗΡΙΟ ΣΧΗΜΑΤΩΝ V ΕΥΡΕΤΗΡΙΟ ΑΛΓΟΡΙΘΜΩΝ vii ΠΕΡΙΛΗΨΗ viii EXTENDED ABSTRACT IN ENGLISH ix ΚΕΦΑΛΑΙΟ I. ΕΙΣΑΓΩΓΗ Εισαγωγή Παράδειγμα Συνεισφορά Δομή της διατριβής 16 ΚΕΦΑΛΑΙΟ 2. ΘΕΩΡΗΤΙΚΟ ΥΠΟΒΑΘΡΟ Ανακατασκευή λογισμικού Βασικές Σχεδιαστικές Αρχές Κακοτεχνίες κώδικα Τεχνικές ανακατασκευής κώδικα Κατασκευή Μεθόδων Μετακινήσεις Συστατικών Απλοποιήσεις Συνθηκών Απλοποιήσεις Μεθόδων Χειρισμός Γενίκευσης Οργάνωση Δεδομένων Σχετική έρευνα 39 ΚΕΦΑΛΑΙΟ 3. ΠΡΟΤΕΙΝΟΜΕΝΟΙ ΑΛΓΟΡΙΘΜΟΙ Εισαγωγή Clustering Based Approach (CBA) Θεωρητικό υπόβαθρο Αλγόριθμος Refactoring Based Approach (RBA) Θεωρητικό υπόβαθρο Αλγόριθμος 64 ΚΕΦΑΛΑΙΟ 4. ΕΡΓΑΛΕΙΟ ΑΥΤΟΜΑΤΗΣ ΑΝΑΚΑΤΑΣΚΕΥΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΩΝ ΔΙΕΠΑΦΩΝ 4.1 Αρχιτεκτονική Εγκατάσταση του εργαλείου 78 ΚΕΦΑΛΑΙΟ 5. ΠΕΙΡΑΜΑΤΑ 81 ΚΕΦΑΛΑΙΟ 6. ΣΥΜΠΕΡΑΣΜΑΤΑ 89 ΠΑΡΑΡΤΗΜΑ A 92 ΠΑΡΑΡΤΗΜΑ Β 125 ΣΥΝΤΟΜΟ ΒΙΟΓΡΑΦΙΚΟ 158 Σελ

6 iv ΕΥΡΕΤΗΡΙΟ ΠΙΝΑΚΩΝ Πίνακας Σελ - Πίνακας 2.1 Κακοτεχνίες κώδικα. 22 Πίνακας 2.2 Τεχνικές ανακατασκευής: Κατασκευή Μεθόδων. 26 Πίνακας 2.3 Τεχνικές ανακατασκευής: Μετακίνηση Συστατικών. 28 Πίνακας 2.4 Τεχνικές ανακατασκευής: Απλοποίηση Συνθηκών. 30 Πίνακας 2.5 Τεχνικές ανακατασκευής: Απλοποίηση Μεθόδων. 32 Πίνακας 2.6 Τεχνικές ανακατασκευής: Χειρισμός Γενίκευσης. 35 Πίνακας 2.7 Τεχνικές ανακατασκευής: Οργάνωση Δεδομένων. 37

7 V ΕΥΡΕΤΗΡΙΟ ΣΧΗΜΑΤΩΝ Σχήμα Σελ - Σχήμα 1.1 Αρχική σχεδίαση. 11 Σχήμα 1.2 Η σχεδίαση με εφαρμογή της ISP. 12 Σχήμα 1.3 Η σχεδίαση με εφαρμογή της κληρονομικότητας. 13 Σχήμα 3.1 Ιεραρχική Ενωτική Ομαδοποίηση. 45 Σχήμα 3.2 Κανόνας του κοντινότερου γείτονα. 47 Σχήμα 3.3 Κανόνας του μακρινότερου γείτονα. 47 Σχήμα 3.4 Κανόνας του μέσου όρου των αποστάσεων. 47 Σχήμα 3.5 Σχεδίαση μετά την εφαρμογή της CBA με το κριτήριο single linkage. 53 Σχήμα 3.6 Σχεδίαση μετά την εφαρμογή της CBA με το κριτήριο complete linkage. 57 Σχήμα 3.7 Παράδειγμα εφαρμογής της τεχνικής ανακατασκευής: Εξαγωγή Διεπαφής. 61 Σχήμα 3.8 Παράδειγμα εφαρμογής της τεχνικής ανακατασκευής: Εξαγωγή Υπερκλάσης. 63 Σχήμα 4.1 Αρχιτεκτονική του συστήματος αυτόματης ανακατασκευής προγραμματιστικών διεπαφών. 68 Σχήμα 4.2 Η γραφική διεπαφή του εργαλείου. 70 Σχήμα 4.3 Παράδειγμα επιλογής φακέλου για την αποθήκευση των αρχείων. 70 Σχήμα 4.4 Παράδειγμα απλού αρχείου.gml και η αντίστοιχη οπτικοποίηση. 72 Σχήμα 4.5 Η οπτικοποίηση του αρχείου εξόδου της CBA με το κριτήριο του μακρινότερου γείτονα που αφορά την κλάση Provider του Σχήματος Σχήμα 4.6 Η οπτικοποίηση του αρχείου εξόδου της RBA που αφορά την κλάση Provider του Σχήματος

8 VI Σχήμα 4.7 Επάνω: τα στατιστικά δεδομένα που παράγει η CBA με το κριτήριο του μακρινότερου γείτονα για το παράδειγμα της ενότητας 1.2. Κάτω: τα αντίστοιχα στατιστικά δεδομένα της RBA. 74 Σχήμα 4.8 Πηγαίος κώδικας της κλάσης Test 74 Σχήμα 4.9 Το αφηρημένο συντακτικό δένδρο για την κλάση Test.76 Σχήμα 4.10 To plug in AST Viewer. 76 Σχήμα 4.11 Βήμα 1 της διαδικασίας εγκατάστασης του εργαλείου. 78 Σχήμα 4.12 Βήμα 2 της εγκατάστασης του εργαλείου. 78 Σχήμα 4.13 Βήμα 3 της εγκατάστασης του εργαλείου. 79 Σχήμα 4.14 Εκτέλεση του εργαλείου με είσοδο το παράδειγμα της ενότητας Σχήμα 5.1 Μέση τιμή ACD για το JUnit 85 Σχήμα 5.2 Μέση τιμή CBO για το JUnit. 85 Σχήμα 5.3 Μέση τιμή Max Tree Height για το JUnit. 85 Σχήμα 5.4 Μέση τιμή Tree Height για το JUnit. 86 Σχήμα 5.5 Total Interfaces για το JUnit. 86 Σχήμα 5.6 Μέση τιμή Total Interfaces για το JUnit. 86 Σχήμα 5.7 Μέση τιμή ACD για το Concordion. 87 Σχήμα 5.8 Μέση τιμή CBO για το Concordion. 87 Σχήμα 5.9 Μέση τιμή Max Tree Height για το Concordion. 87 Σχήμα 5.10 Μέση τιμή Tree Height για το Concordion. 88 Σχήμα 5.11 Total Interfaces για το Concordion. 88 Σχήμα 5.12 Μέση τιμή Total Interfaces για το Concordion. 88

9 vii ΕΥΡΕΤΗΡΙΟ ΑΛΓΟΡΙΘΜΩΝ Αλγόριθμος Σελ " Αλγόριθμος 1. Πρώτη φάση της CBA. 52 Αλγόριθμος 2. Δεύτερη φάση της CBA. 60 Αλγόριθμος 3. 0 αλγόριθμος της RBA. 67

10 VIII ΠΕΡΙΛΗΨΗ Σπυρίδων Κρανάς του Ιωάννη και της Κωνσταντίνας. MSc, Τμήμα Πληροφορικής, 'Πανεπιστήμιο Ιωαννίνων, Ιούνιος, Αυτόματη Ανακατασκευή Προγραμματιστικών Διεπαφών. Επιβλέποντας: Απόστολος Ζάρρας. Στην παρούσα εργασία, ασχολούμαστε με τη βελτίωση της ποιότητας του λογισμικού, μέσω της αυτοματοποιημένης ανακατασκευής προγραμματιστικών διεπαφών (interfaces) για αντικειμενοστραφή προγράμματα. Συγκεκριμένα, χρησιμοποιείται η Αρχή Διαχωρισμού Διεπαφών (Interface Segregation Principle - ISP). Η σχεδιαστική αυτή αρχή εφαρμόζεται όταν διαφορετικά υποσύνολα μεθόδων της διεπαφής (interface) μιας κλάσης (provider), αφορούν διαφορετικές κλάσεις (clients) που χρησιμοποιούν τα υποσύνολα αυτά. Η ISP προτείνει τον ορισμό επιμέρους διεπαφών της κλάσης provider, που να περιλαμβάνουν αντίστοιχα υποσύνολά της. Με τον τρόπο αυτό, ο κώδικας των clients εξαρτάται μόνο από τις αντίστοιχες διεπαφές που χρησιμοποιεί. Στην εργασία, προτείνουμε δύο προσεγγίσεις για την βελτίωση της ποιότητας του λογισμικού που βασίζονται στην ISP. Η πρώτη, βασίζεται σε θεμελιώδεις τεχνικές αφαίρεσης για την ανακατασκευή λογισμικού (Refactoring Based Approach - RBA) και αποτελείται από μια επαναληπτική διαδικασία, δύο φάσεων. Η πρώτη φάση περιλαμβάνει την εξαγωγή των διεπαφών (Extract Interfaces) και η επόμενη, την εξαγωγή υπερκλάσειυν (Extract Superclass). Η δεύτερη προσέγγιση, εδράζεται σε παραδοσιακές τεχνικές ιεραρχικής ομαδοποίησης (Clustering Based Approach - CBA). Επιπλέον, προχωρήσαμε στην αυτοματοποίηση των δύο προσεγγίσεων και την υλοποίηση ενός εργαλείου για τον σκοπό αυτό. Για να εκτιμηθεί η απόδοση των προτεινόμενών προσεγγίσεων, εξετάσθηκε η εφαρμογή τους σε δύο περιβάλλοντα ανοιχτού λογισμικού, το JUnit και το Concordion.

11 IX EXTENDED ABSTRACT IN ENGLISH 'Kranas. Spyridon. MSc, Computer Science Department, University of Ioannina, Greece. June Automatic Refactoring of Program Interfaces. Thesis Supervisor: Apostolos Zarras. A software rarely remains unchanged after its delivery. Usually what happens is that, at some point, developers will need to modify the software either to meet new customer needs or to respond to technological developments. But these interventions in the software code, apart from creating additional complexity, they will probably cause the initial design that the software was based on. to decline. This leads to difficult understanding of the code and that increases the cost of software maintenance. There is. therefore, the problem of maintaining the quality of the software. To address the above problem, there is a need for techniques that reduce the complexity and software maintenance costs, by improving its internal structure. The scientific field that deals with the issue, is called software refactoring, i.e. the process that transforms a software in such a way as not to alter its behavior to the external environment, while, at the same time, improving its internal structure. In this thesis, we deal with improving software quality through automatic programming interfaces rebuild for object-oriented programs. Specifically, the Interface Segregation Principle (ISP) is employed. This design principle is applied when different subsets of a class* (provider) methods, relate to different classes (clients) that use these subsets. ISP suggests the definition of individual interfaces of the provider class, that include the respective subsets. In this way, the clients' code depends only on the respective interfaces it uses. In this thesis, we propose two approaches to improve the quality of software which are based on ISP. The first one, is based on fundamental abstraction refactoring techniques (Refactoring Based Approach - RBA) and consists of an iterative process with two phases. The first phase, involves extracting interfaces (Extract Interfaces technique) and the second, extracting superclasses (Extract Superclass technique). The second approach is based on traditional techniques of hierarchical clustering (Clustering Based Approach - CBA). Furthermore, we automate the two approaches and implement a tool for this purpose. To assess the performance of the proposed approaches, we examine their application in two opensource environments, JUnit and Concordion.

12 10 ΚΕΦΑΛΑΙΟ 1. ΕΙΣΑΓΩΓΗ 1.1 Εισαγωγή 1.2 Παράδειγμα 1.3 Συνεισφορά 1.4 Δομή της διατριβής 1.1 Εισαγωγή Στη σημερινή εποχή, σπάνια ένα λογισμικό παραμένει αμετάβλητο μετά την παράδοσή του. Συνήθως, εκείνο που συμβαίνει είναι ότι, κάποια στιγμή, οι προγραμματιστές θα χρειαστεί να τροποποιήσουν το ήδη υπάρχον λογισμικό είτε για να ικανοποιήσουν νέες ανάγκες των πελατών είτε για να ανταποκριθούν στις τεχνολογικές εξελίξεις. Οι επεμβάσεις όμως αυτές στον κώδικα του λογισμικού, εκτός του ότι δημιουργούν προστιθέμενη πολυπλοκότητα, πιθανότατα θα έχουν ως αποτέλεσμα, η αρχική σχεδίαση πάνω στην οποία βασίστηκε η ανάπτυξή του, να παρακμάζει. Το γεγονός αυτό οδηγεί στο να δυσχεραίνει η κατανόηση του κώδικα και κατά συνέπεια, να αυξάνεται το κόστος συντήρησης του λογισμικού. Παρατηρείται επομένως, το πρόβλημα της διατήρησης της ποιότητας του λογισμικού. Για να αντιμετωπιστεί το παραπάνω πρόβλημα, υπάρχει η ανάγκη για τεχνικές που μεκονουν την πολυπλοκότητα και το κόστος συντήρησης του λογισμικού, βελτιώνοντας την εσοπερική δομή του. Το επιστημονικό πεδίο που ασχολείται με το ζήτημα, ονομάζεται ανακατασκευή λογισμικού (software refactoringλ δηλαδή η διαδικασία η οποία μετασχηματίζει ένα λογισμικό με τέτοιον τρόπο, ώστε να μη μεταβάλλει την συμπεριφορά του στο εξωτερικό περιβάλλον του και ταυτόχρονα να βελτιώνει την εσωτερική δομή του. Στην παρούσα εργασία, ασχολούμαστέ με τη βελτίωση της ποιότητας του λογισμικού, μέσω της αυτοματοποιημένης

13 ανακατασκευής προγραμματιστικών διεπαφών (interlaces) για αντικειμενοστραφή προγράμματα. Συγκεκριμένα, χρησιμοποιείται η Αρχή Διαχοιρισμού Διεπαφών (Interlace Segregation Principle - ISP). Μ σχεδιαστική αυτή αρχή εφαρμόζεται όταν διαφορετικά υποσύνολα μεθόδιον της διεπαφής (interface) μιας κλάσης (provider), αφορούν διαφορετικές κλάσεις (clients) που χρησιμοποιούν τα υποσύνολα αυτά. Διευκρινίζεται ότι με τον όρο διεπαφή εδο'), εννοούμε οτιδήποτε ορίζεται ο>ς public στην κλάση provider και με τον όρο client, κώδικα του συστήματος που χρησιμοποιεί τις public μεθόδους της κλάσης provider. II ISP προτείνει τον ορισμό επιμέρους διεπαφών της κλάσης provider, που να περιλαμβάνουν αντίστοιχα υποσύνολά της. Με τον τρόπο αυτό, ο κώδικας των clients εξαρτάται μόνο από τις αντίστοιχες διεπαφές που χρησιμοποιεί. 11 βασική ιδέα και λειτουργία της ISP αναλύεται στην ενότητα Παράδειγμα Για να γίνει πιο κατανοητή η δομή και λειτουργία γύρω από την ISP, στην οποία βασίζεται η εργασία, θα εξηγήσουμε τη συλλογιστική πορεία μέσα από ένα παράδειγμα. Η εφαρμογή της σχεδιαστικής αυτής αρχής προτείνεται, όταν μια κλάση (provider) επιτελεί διαφορετικούς ρόλους, ανάλογα με τις κλάσεις οι οποίες την χρησιμοποιούν (clients). Κάθε client χρησιμοποιεί ένα υποσύνολο τιυν μεθόδων που προσφέρει η κλάση provider. Δηλαδή, η κλάση provider εξυπηρετεί έναν διαφορετικό ρόλο για κάθε κλάση client. Μ ISP προτείνει τον ορισμό επιμέρους διεπαφιόν της κλάσης provider, μία για κάθε διαφορετικό ρόλο της. Με τον τρόπο αυτό, κάθε client θα εξαρτάται μόνο από την αντίστοιχη διεπαφή που χρησιμοποιεί. Έστω η σχεδίαση του Σχήματος I. I. Στη σχεδίαση αυτή, υπάρχουν πέντε (5) κλάσεις: μια κλάση provider και τέσσερις (4) κλάσεις clients. Η κλάση Provider περιέχει έξι (6) μεθόδους: τις ml(), m2(), m3(), m4(), m5() και m6(). Μ κλάση Client Λ περιέχει δύο (2) μεθόδους, τις m cthod_that_usesjnl() και method_that_uscsjn2(), οι οποίες χρησιμοποιούν τις μεθόδους m l() και m2() της κλάσης Provider, αντίστοιχα. Η κλάση Client Β περιέχει, επίσης δύο (2) μεθόδους, τις method_that_uses_m 1() και

14 12 method_that_uses_m3(), οι οποίες χρησιμοποιούν τις μεθόδους m l() και m3() της κλάσης Provider, αντίστοιχα. Η κλάση Client C περιέχει, επίσης δύο (2) μεθόδους, τις method_that_uses_m4() και method_that_uses_m5(), οι οποίες χρησιμοποιούν τις μεθόδους m4() και ιη5() της κλάσης Provider, αντίστοιχα. Τέλος, η κλάση Client D, περιέχει τρεις (3) μεθόδους, τις method_that_iises_m2(), τη method_that_uses_m5() και τη method_that_uses_m6(), οι οποίες χρησιμοποιούν τις μεθόδους m2(), m5() και m6() της κλάσης Provider, αντίστοιχα. Client D method Jhat_calls_m20 method_that_cal!s_m50 methodjhat^callsr m6q Client A Client C method_that_calls_m10 method_that_calls_ro20 method Jhat_ca!ls_m40 method_thalcalls_m5q Client B method_that_calls_m10 method_that_calls_m30 Σχήμα 1.1 Αρχική σχεδίαση. Έστω ότι με την πάροδο του χρόνου, εξαιτίας μιας αλλαγής στις απαιτήσεις του συστήματος ή της προσθήκης μιας νέας δυνατότητας, η λειτουργία της μεθόδου m6() της κλάσης Provider, πρέπει να τροποποιηθεί. Τότε, σύμφωνα με το μοντέλο εξαρτήσεων του Σχήματος 1.1, όλες οι υπόλοιπες κλάσεις του συστήματος θα πρέπει να ελεγχθούν για ενδεχόμενες αλλαγές που θα πρέπει να υποστούν. Παρόλα αυτά,

15 13 στο παράδειγμά μας, με βάση την υλοποίηση του συστήματος, μόνο η κλάση Client D θα πρέπει να ελεγχθεί, αφού είναι η μόνη που χρησιμοποιεί τη μέθοδο που τροποποιήθηκε. Ο άσκοπος έλεγχος κλάσεων, τις οποίες οι αλλαγές δεν αφορούν, κοστίζει σε χρόνο και πόρους. Όπως γίνεται αντιληπτό, ο έλεγχος αυτός επαναλαμβάνεται κάθε φορά που συντελούνται αλλαγές στο σύστημα, με αποτέλεσμα το κόστος να αυξάνεται. Με μια καλύτερη σχεδίαση του συστήματος θα μπορούσε να αποφεύγεται ο περιττός και δαπανηρός έλεγχος. Η σχεδίαση που προκύπτει με βάση την ISP φαίνεται στο Σχήμα 1.2. «Interface* ΙΑ «interface* «interface* (D ID i 11 r «Interface* ID m 20 m10 m lo m40 m50 m m30 m 50, "> M 7i\ Client A Client B Client C Client D method Jhat_calls_m 10 methodjhat_ealls_m 20 m ethodjhat_calls_m 10 method_that_calls_m30 m ethodjhat_calls_m 40 method_that_calls_m50 method_that_calls_m20 method_that_callsjt>50 method^tha^callsjjneq Σχήμα 1.2 Η σχεδίαση με εφαρμογή της ISP. Σύμφωνα με τη σχεδίαση που προκύπτει, μετά τις αλλαγές στην υλοποίηση της μεθόδου m6() της κλάσης Provider, μόνο η κλάση Client D θα πρέπει να ελεγχθεί εάν και κατά πόσο επηρεάζεται η υλοποίηση της μεθόδου της, method_that_uses_m6(), αφού πλέον είναι η μόνη κλάση που εξαρτάται από διεπαφή που περιέχει τη μέθοδο m6(). Επομένως, οι συνέπειες μιας αλλαγής στην κλάση Provider, δηλαδή το ποιοι clients επηρεάζονται, μπορούν να εκτιμηθούν εύκολα με ένα γρήγορο έλεγχο στο μοντέλο σχεδίασης του λογισμικού μας.

16 14 Παρόλα αυτά, ενο) λύσαμε το πρόβλημα που προέκυπτε αρχικά, παρατηρούμε ότι υπάρχει επανάληψη των μεθόδων ανάμεσα στις διεπαφές που δημιουργούνται. Για να μειώσουμε, όσο είναι δυνατόν, την επανάληψη αυτή, Οα μπορούσαμε να χρησιμοποιούμε την ιδέα της κληρονομικότητας στις διεπαφές. I I κληρονομικότητα εφαρμόζεται όταν δύο ή περισσότερες κλάσεις έχουν παρόμοια πεδία ή/και μεθόδους και προτείνει τον ορισμό μιας βασικής κλάσης και μετακίνηση των κοινών πεδίιον ή/και μεθόδων σε αυτήν. Παρατηρούμε, ότι οι διεπαφές ΙΛ και ΙΒ έχουν ο>ς κοινή μέθοδο τη m 1(), επομένως μπορούμε να ορίσουμε μια νέα διεπαφή στην οποία μετακινούμε τη μέθοδο ml(). Κατ' αντιστοιχία, παρατηρούμε ότι οι διεπαφές 1C και ID έχουν <ος κοινή μέθοδο τη ιη5(), άρα μπορούμε να ορίσουμε μια νέα διεπαφή στην οποία μετακινούμε τη μέθοδο m5(). Με τον τρόπο αυτό, καταλήγουμε στη σχεδίαση που φαίνεται στο σχήμα 1.3. Σχήμα 1.3 Η σχεδίαση με εφαρμογή της κληρονομικότητας.

17 Συνεισφορά Αν και τα πλεονεκτήματα της ανακατασκευής λογισμικού είναι αναμφισβήτητα, στην πράξη δεν εφαρμόζεται τόσο συχνά, όσο θα ήταν αναμενόμενο. Σύμφωνα με τους [6] υπάρχει μια σειρά λόγων που εξηγούν το φαινόμενο αυτό. Ανάμεσά τους, συγκαταλέγεται η ανάγκη για την προσθήκη επιπλέον χαρακτηριστικών στο λογισμικό κατά τη διάρκεια ανάπτυξής τους, που σε συνδυασμό με την χρονική πίεση για την παράδοσή του. κάνουν την ανακατασκευή να φαντάζει ως δευτερεύουσας σημασίας. Επιπλέον, ο φόβος ότι εφαρμόζοντας μια τεχνική ανακατασκευής στο λογισμικό, ελλοχεύει ο κίνδυνος να καταστούν μη λειτουργικές ορισμένες λειτουργίες ζωτικής σημασίας. Παρατηρούμε λοιπόν ότι τόσο οι επικεφαλής των ομάδων σχεδίασης, όσο και οι προγραμματιστές, εμφανίζονται διστακτικοί στην εφαρμογή ανακατασκευής του λογισμικού χειροκίνητα. Για το λόγο αυτό, θεωρήσαμε ότι θα ήταν πιο ωφέλιμο να στραφούμε σε μια αυτόματη διαδικασία ανακατασκευής. Ο συνολικός στόχος της διατριβής είναι να παρέχουμε μια αυτοματοποιημένη λύση στο πρόβλημα που περιγράφηκε στην ενότητα 1.1. Στην παρούσα εργασία προτείνουμε δύο προσεγγίσεις για την βελτίωση της ποιότητας του λογισμικού που βασίζονται στην ISP. Η πρώτη, βασίζεται σε θεμελιώδεις τεχνικές αφαίρεσης για την ανακατασκευή λογισμικού (Refactoring Based Approach - RBA) και αποτελείται από μια επαναληπτική διαδικασία, δύο φάσεων. Η πρώτη φάση περιλαμβάνει την εξαγωγή των διεπαφών (Extract Interfaces) και η επόμενη, την εξαγωγή υπερκλάσεων (Extract Superclass). Η δεύτερη προσέγγιση, εδράζεται σε παραδοσιακές τεχνικές ιεραρχικής ομαδοποίησης (Clustering Based Approach - CBA). Επιπλέον, προχωρήσαμε στην αυτοματοποίηση των δύο τεχνικών και την υλοποίηση ενός εργαλείου για τον σκοπό αυτό. Το εργαλείο προσφέρεται ως επιπρόσθετη λειτουργία (plug-in) στο ολοκληρωμένο περιβάλλον ανάπτυξης (Integrated Development Environment - IDE), Eclipse. Τέλος, εντάξαμε στο εν λόγω εργαλείο τη δυνατότητα παραγωγής μετρήσιμων δεδομένων για την αξιολόγηση της ποιότητας ανακατασκευής των δύο προσεγγίσεων.

18 Δομή της διατριβής Η εργασία αποτελείται από, συνολικά, έξι (6) Κεφάλαια, από τα οποία το πρώτο είναι η Εισαγωγή. Στο Κεφάλαιο 2 παρουσιάζεται το θεωρητικό υπόβαθρο. Συγκεκριμένα, γίνεται μια εισαγωγή στην ανακατασκευή λογισμικού και στις βασικές σχεδιαστικές αρχές. Ακόμη, παρουσιάζονται οι πιο συνηθισμένες κακοτεχνίες κώδικα αλλά και οι τρόποι επίλυσής τους, δηλαδή τεχνικές ανακατασκευής κώδικα. Τέλος, παρατίθεται η σχετική έρευνα που μελετήθηκε. Στο Κεφάλαιο 3 αναλύονται οι προτεινόμενες προσεγγίσεις οι οποίες είναι η Clustering Based Approach (CBA) και η Refactoring Based Approach (RBA). Στο Κεφάλαιο 4 γίνεται λόγος για το εργαλείο αυτόματης ανακατασκευής προγραμματιστικών διεπαφών που υλοποιήθηκε για την εφαρμογή των προσεγγίσεων. Το Κεφάλαιο 5 περιέχει τα αποτελέσματα και τις τιμές των πειραμάτων που πραγματοποιήθηκαν στις μελέτες περίπτωσης. Κλείνοντας, στο Κεφάλαιο 6 συνοψίζονται τα συμπεράσματα που απορρέουν από τις δύο προσεγγίσεις. Οι αναφορές και τα παραρτήματα αναγράφονται στο τέλος της εργασίας.

19 17 ΚΕΦΑΛΑΙΟ 2. ΘΕΩΡΗΤΙΚΟ ΥΠΟΒΑΘΡΟ 2.1 Ανακατασκευή λογισμικού 2.2 Βασικές σχεδιαστικές αρχές 2.3 Κακοτεχνίες κώδικα 2.4 Τεχνικές ανακατασκευής κώδικα 2.5 Σχετική έρευνα 2.1 Ανακατασκευή λογισμικού Όπως αναφέρει η [4], η ανακατασκευή λογισμικού ορίζεται ως η διαδικασία τροποποίησης του λογισμικού, έτσι ώστε μετά το τέλος της να βελτιώνεται η εσωτερική δομή και ταυτόχρονα να μην μεταβάλλεται η συμπεριφορά του προς το εξωτερικό περιβάλλον. Στην ουσία λοιπόν, όταν εφαρμόζεται η ανακατασκευή λογισμικού, βελτιώνεται η σχεδίαση του προγράμματος αφού έχει ολοκληρωθεί η υλοποίησή του. Κάτι τέτοιο ίσως φαίνεται ασυνήθιστο, αφού τις περισσότερες φορές προηγείται η διαδικασία σχεδίασης του συστήματος, το οποίο θα υλοποιηθεί και ύστερα ακολουθεί η διαδικασία υλοποίησης. Παρόλα αυτά, με την πάροδο του χρόνου ο κώδικας των προγραμμάτων αλλάζει και σταδιακά, η σχεδίαση δεν θα αντικατοπτρίζει τη δομή και τις λειτουργίες που επιτελεί ο κώδικας. Η συντήρησή του λογισμικού θα έχει μεγαλύτερο κόστος, η πολυπλοκότητα θα αυξηθεί, πιθανότατα διαφορετικά κομμάτια κώδικα θα επαναλαμβάνονται ή θα εξυπηρετούν την ίδια λειτουργία και η διόρθωση σφαλμάτων θα γίνει πιο επίπονη διαδικασία. Η ανακατασκευή έχει ακριβώς την αντίθετη λογική. Εφαρμόζοντάς την σε μια σχεδίαση χαμηλής ποιότητας, μπορεί να μετατρέψει τον κώδικα έτσι ώστε να αντιστοιχεί πλέον σε μια πολύ υψηλότερης ποιότητας σχεδίαση. Το γεγονός αυτό, φυσικά, δεν αναιρεί

20 18 την ανάγκη αρχικής σχεδίασης του συστήματος. Απλώς, η διαδικασία ανακατασκευής λογισμικού επιτρέπει να πραγματοποιούνται οι αλλαγές που απαιτούνται στον κώδικα, και κατ επέκταση στη σχεδίαση, με πολύ μικρότερο κόστος σε σχέση με την περίπτωση κατά την οποία θα πραγματοποιούνταν οι ίδιες αλλαγές, χωρίς να έχει προηγηθεί η διαδικασία αυτή. Θα πρέπει να σημειωθεί ότι η ανακατασκευή λογισμικού δεν εξαντλείται σε μια τυπική «τακτοποίηση» του κο')δικα, διότι παρέχει τυποποιημένες και αποδοτικές τεχνικές βελτίωσης του κώδικα. Με την ανακατασκευή λογισμικού πετυχαίνουμε τα εξής: Βελτίοοση της σχεδίασης του συστήματος. Βελτίωση της αναγνωσιμότητας των προγραμμάτων. Ευκολότερος εντοπισμός προγραμματιστικών λαθών. Ταχύτερη ανάπτυξη λογισμικού. Χωρίς ανακατασκευή, η σχεδίαση του λογισμικού θα φθίνει με τον καιρό, όσο οι προγραμματιστές θα αλλάζουν τον ήδη υπάρχοντα κο)δικα για να πετύχουν βραχυπρόθεσμους στόχους, χωρίς να έχουν μια γενικότερη αντίληψη των συνεπεκόν που θα επιφέρουν οι αλλαγές στη σχεδίαση, με αποτέλεσμα να αλλοιο'ινεται η δομή της. Αναμενόμενα, καθίσταται δυσδιάκριτη η σχέση μεταξύ σχεδίασης και κώδικα. Και όσο πιο δυσδιάκριτη είναι αυτή η σχέση, τόσο πιο δύσκολο είναι να για τους προγραμματιστές να συντηρήσουν το σύστημα και τόσο πιο ραγδαία θα είναι η επιδείνοοσή της ποιότητάς του. Η ανακατασκευή επεμβαίνει, επιτελώντας κάθε φορά μικρές βελτιώσεις. Συχνή εφαρμογή τεχνικών ανακατασκευής βοηθά οιστε να διατηρηθεί η ποιότητα σε υψηλό επίπεδο. Επιπρόσθετα, μια σχεδίαση χαμηλής ποιότητας, συνήθως, μεταφράζεται σε κο)δικα, μεγάλο σε έκταση, που εκτελεί τις ίδιες λειτουργίες, επειδή ακριβώς επιτελεί τις ίδιες διαδικασίες σε διαφορετικά σημεία του προγράμματος. Συνεπούς, μια σημαντική πτυχή στη βελτίωση της σχεδίασης αποτελεί η εξάλειψη επαναλαμβανόμενου κώδικα. Η σημασία της βελτκυσης αυτής, έγκειται στις μελλοντικές επεκτάσεις ή τροποποιήσεις του συστήματος. Η μείωση του κοιδικα μπορεί να μην επιφέρει αισθητά αποτελέσματα στην ταχύτητα του συστήματος, εντούτοις, θα επιφέρει

21 19 σημαντική βελτίωση στη συντηρησιμότητά του. Είναι προφανές ότι όσο περισσότερος κώδικας υπάρχει, τόσο πιο δύσκολα αλλάζει σωστά. Εξαλείφοντας όμως, τον επαναλαμβανόμενο κώδικα, είναι βέβαιο ότι κάθε λειτουργία εμφανίζεται σε ένα μόνο σημείο, δείγμα ποιοτικής σχεδίασης. Μια άλλη σημαντική παράμετρος που τείνουν να ξεχνούν οι προγραμματιστές, είναι ότι οι αλλαγές που θα πρέπει να γίνουν σε ένα λογισμικό, αργά ή γρήγορα, θα υλοποιηθούν από κάποιον τρίτο προγραμματιστή. Για να είναι όμως σε θέση ο τελευταίος να προβεί στις απαιτούμενες αλλαγές, θα πρέπει πρώτα από όλα να μελετήσει τον κώδικα και να κατανοήσει τη λειτουργία του. Το πρόβλημα προκύπτει από το γεγονός ότι εκείνο που συμβαίνει συνήθως κατά την ανάπτυξη του λογισμικού, είναι ότι οι προγραμματιστές ενδιαφέρονται πρωτίστως για τη λειτουργικότητα του κώδικα και όχι τόσο πολύ για την αναγνωσιμότητά και την εύκολη κατανόηση του. Η ανακατασκευή του λογισμικού βοηθάει στην βελτίωση της αναγνωσιμότητας του κώδικα. Η εφαρμογή λίγων μόνο τεχνικών ανακατασκευής μπορεί να έχει ως αποτέλεσμα κώδικα πολύ πιο ευανάγνωστο. Η βελτίωση της αναγνωσιμότητας του κώδικα, συνεισφέρει στον γρηγορότερο εντοπισμό προγραμματιστικών λαθών. Έχοντας εφαρμόσει κάποιος ανακατασκευή λογισμικού, έχει βαθιά κατανόηση της σχεδίασης και γνώση του κώδικα, εργαλεία που μπορεί να χρησιμοποιήσει στον εντοπισμό και διόρθωση σφαλμάτων. Όλα τα προηγούμενα σημεία, συντελούν στην αύξηση της ταχύτητας ανάπτυξης του λογισμικού. Η μείιοση των σφαλμάτων και η βελτίωση στη σχεδίαση και την αναγνωσιμότητα του κώδικα βελτιώνουν την ποιότητα του λογισμικού, χωρίς να μειώνουν την ταχύτητα ανάπτυξής του. Χωρίς σχεδίαση υψηλής ποιότητας, η πρόοδος στην ανάπτυξη του κώδικα μπορεί να είναι πρόσκαιρα σημαντική, ωστόσο, σύντομα, ο εντοπισμός σφαλμάτων και η διόρθωσή τους, που θα προκύπτουν εξαιτίας της σχεδίασης χαμηλού επιπέδου, θα την επιβραδύνει. Η προσθήκη νέο:>ν λειτουργιών θα καθυστερεί, όσο οι προγραμματιστές θα προσπαθούν να κατανοήσουν τον πολύπλοκο, επομένως δυσνόητο κώδικα και να εξαλείψουν τα σημεία όπου επαναλαμβάνεται.

22 20 Συγκεντρωτικά, η διαδικασία της ανακατασκευής λογισμικού αποτελείται από τα εξής διακριτά στάδια, όπως αναφέρει η [9]: Αναγνώριση των σημείων του κώδικα τα οποία χρήζουν εφαρμογή ανακατασκευής. Προσδιορισμός των τεχνικών ανακατασκευής που θα εφαρμοστούν στα σημεία που έχουν καθοριστεί. Παροχή εγγύησης ότι η συμπεριφορά του συστήματος παραμένει αμετάβλητη ύστερα από την εφαρμογή της ανακατασκευής. Εκτίμηση της αποτελεσματικότητας της ανακατασκευής βασισμένη σε ποιοτικά χαρακτηριστικά του λογισμικού όπως η πολυπλοκότητα, η κατανόηση και η συντηρησιμότητά του. Διατήρηση της συμβατότητας μεταξύ του ανακατασκευασμένου λογισμικού και των συστατικών με τα οποία συσχετίζεται, όπως τα έγγραφα τεκμηρίωσης, η αρχιτεκτονική και τα έγγραφα καθορισμού και περιγραφής απαιτήσεων. 2.2 Βασικές Σχεδιαστικές Αρχές Στον αντικειμενοστραφή προγραμματισμό, υπάρχουν πέντε βασικές αρχές σχεδίασης (Object Oriented Design Principles) ενός συστήματος [8]. Στόχος των αρχών είναι, όταν εφαρμόζονται να δίνουν τη δυνατότητα στους προγραμματιστές και τους σχεδιαστές να υλοποιούν και να σχεδιάζουν συστήματα που είναι εύκολα στη συντήρηση και την επεκτασιμότητα. Ουσιαστικά, πρόκειται για κατευθυντήριες γραμμές των οποίων η χρησιμοποίηση, σε συνδυασμό με τις τεχνικές ανακατασκευής, εξυπηρετεί στην διόρθωση κακοτεχνιών κώδικα. Η Αρχή Μοναδική Αρμοδιότητας (Single Responsibility Principle - SRP) προτείνει ότι κάθε κλάση ενός συστήματος πρέπει να έχει μία και μοναδική αρμοδιότητα, δηλαδή να εξυπηρετεί ένα μοναδικό σκοπό. Στην πράξη κάτι τέτοιο είναι δύσκολο να επιτευχθεί, καθώς τις περισσότερες φορές ανατίθενται περισσότερες από μια

23 21 αρμοδιότητες σε κάποια κλάση. Στην περίπτωση αυτή, συστήνεται η διάσπαση της κάθε αρμοδιότητας σε ξεχωριστή κλάση βάση μετρικών συνεκτικότητας. Η Αρχή Αντικατάστασης της Liskov (Liskov Substitution Principle - LSP) απαντά στο ερώτημα του πότε είναι σωστή η χρήση κληρονομικότητας μεταξύ δύο κλάσεων. Προτείνει τον κανόνα που αναφέρει ότι είναι ορθό μια κλάση Β να υλοποιηθεί σαν υποκλάση μια κλάσης Α, αν κάθε κώδικα Ρ, ο οποίος λειτουργεί με αντικείμενα της κλάσης Α, συμπεριφέρεται με τον ίδιο τρόπο και με αντίστοιχα αντικείμενα της κλάσης Β. Επειδή, ο παραπάνω έλεγχος είναι αρκετά κοπιώδης και εξαντλητικός και όσο μεγαλύτερο είναι το σύστημά, τόσο πιο πολύ αυξάνεται το κόστος του ελέγχου, ακολουθείται η τεχνική της Σχεδίασης βάσει Συμβολαίου (Design by contract). Η Αρχή της Ανοιχτής/Κλειστής Σχεδίασης (Open/Closed Principle - OCP) προβλέπει ότι τα επιμέρους συστατικά ενός συστήματος (π.χ. κλάσεις, μέθοδοι, κτλ.) πρέπει να είναι ανοιχτά για επέκταση, αλλά κλειστά σε αλλαγές στην υλοποίησή τους. Αν για οποιονδήποτε λόγο απαιτηθούν αλλαγές, τότε θα πρέπει να υλοποιηθούν επεκτείνοντας τα ήδη υπάρχοντα στοιχεία και όχι αλλάζοντας την υλοποίηση. Η Αρχή Αντιστροφής Εξαρτήσεων (Dependency Inversion Principle - DIP) ορίζει ότι τα υψηλού επιπέδου στοιχεία δεν πρέπει να εξαρτώνται από χαμηλού επιπέδου στοιχεία. Ο όρος στοιχεία υψηλού επιπέδου αναφέρεται σε στοιχεία που χρησιμοποιούν λειτουργίες άλλων στοιχείων, τα οποία αποτελούν τα χαμηλού επιπέδου στοιχεία. Επιπλέον, σύμφωνα με την DIP τόσο τα υψηλού, όσο και τα χαμηλού επιπέδου στοιχεία θα πρέπει να εξαρτώνται από «ενδιάμεσα» στοιχεία αφαίρεσης. Η Αρχή Διαχωρισμού Διεπαφών (Interface Segregation Principle - ISP) έχει περιγράφει στην ενότητα 1.2.

24 Κακοτεχνίες κώ δικα Οι κακοτεχνίες κώδικα (bad smells in code) αναφέρονται σε μη αποδοτικές τεχνικές κατά την ανάπτυξη κώδικα, που πιθανόν να αποτελούν ένδειξη ύπαρξης κάποιου βαθύτερου προβλήματος. Συνήθως δεν αποτελούν σφάλματα (bugs) στον κώδικα, τα οποία οδηγούν το πρόγραμμα σε ανεπιθύμητη συμπεριφορά. Αντίθετα, υποδεικνύουν αδυναμίες της σχεδίασης του λογισμικού που ενδεχομένως θα επιβραδύνουν την ταχύτητα ανάπτυξής του ή θα αυξήσουν την πιθανότητα εμφάνισης σφαλμάτων στο μέλλον, σε περίπτωση τροποποίησής (π.χ. επέκτασής) του. Αρκετές από τις κακοτεχνίες κώδικα είναι δυνατό να εντοπιστούν, από το γεγονός ότι αντιβαίνουν κάποια ή κάποιες από τις σχεδιαστικές αρχές. Συχνά, μια κακοτεχνία αποκρύπτει ένα σοβαρότερο πρόβλημα, το οποίο αποκαλύπτεται όταν η σχεδίαση είναι δυνατόν να βελτιωθεί με την εφαρμογή κάποιας τεχνικής ανακατασκευής. Επομένως, από την οπτική γωνία του προγραμματιστή, θα λέγαμε ότι οι κακοτεχνίες κώδικα είναι εμπειρικοί κανόνες (heuristics) που αποτελούν ενδείξεις για το πότε ο κώδικας θα έπρεπε να ανακατασκευαστεί και για το ποιες τεχνικές ανακατασκευής θα έπρεπε να εφαρμοστούν. Ωστόσο, αξίζει να σημειωθεί ότι είναι αναπόφευκτη η ύπαρξη υποκειμενικότητας, ως έναν βαθμό, στην κρίση του ποιες περιπτώσεις χαρακτηρίζονται κακοτεχνίες κώδικα και ποιες όχι. Συχνά, η απόφαση αυτή, εξαρτάται από διάφορους παράγοντες, όπως η γλώσσα προγραμματισμού, ο προγραμματιστής και η μεθοδολογία ανάπτυξης του λογισμικού. Παρόλα, αυτά έχει σταχυολογηθεί ένα, κοινά αποδεκτό, σύνολο από κακοτεχνίες [4]. Στον Πίνακα 2.1 έχουμε συγκεντρώσει τις κακοσμίες αυτές, μαζί με τα συμπτώματα που εμφανίζουν, αλλά και τις προτεινόμενες τεχνικές επίλυσής τους. Πίνακας 2.1 Κακοτεχνίες κώδικα. Όνομα Συμπτώματα Προτεινόμενη τεχνική Refactoring

25 23 Επαναλαμβανόμενος Κώδικας (Duplicated Code) Εκτενής Μέθοδος (Long Method) Εκτενής Κλάση (Long Class) Εκτενής Λίστα Παραμέτρων (Long Parameter List) Αποκλίνουσα Αλλαγή (Divergent Change) Shotgun Surgery 0 επαναλαμβανόμενος κώδικας είναι ένα από τα πιο συνηθισμένα προβλήματα. Μπορεί να εμφανιστεί σε διάφορες μορφές Οι μεγάλες μέθοδοι είναι, επίσης, ένα συνηθισμένο πρόβλημα. Η κατανόηση, ο έλεγχος και η συντήρηση έχουν μεγάλο κόστος Συνηθισμένο φαινόμενο είναι η κατασκευή πολύ μεγάλων κλάσεων που παραβιάζουν την αρχή SRP Μέθοδοι με πολλές παραμέτρους δυσκολεύουν την κατανόηση και τη χρήση τους iδιάφορα τμήματα κώδικα μιας κλάσης αλλάζουν ποικιλοτρόπως για διαφορετικούς λόγους. Ένδειξη παραβίασης της SRP jλλλαγή στο σύστημα επιφέρει πολλές μικρές αλλαγές σε διάφορες κλάσεις, που κοστίζουν. Ένδειξη παραβίασης της SRP Extract Method Pull Up Field Form Template Method Substitute Algorithm Extract Class Extract Method Replace Temp with Query Introduce Parameter Object Preserve whole Object Replace Method with Method Object Extract Class Extract Subclass Extract Interface Duplicate Observed Data Replace Parameter with Method Preserve Whole Object Introduce Parameter Object Extract Class Move Method Move Field Inline Class

26 24 Feature Envy Lazy Class Εναλλακτικές Κλάσεις με Διαφορετικές Διεπαφές (Alternative Classes with Different Interfaces) Εντολές Switch/If (Switch/If Statements) Αλυσίδα Μηνυμάτων (Message Chains) Μέθοδος μιας κλάσης χρησιμοποιεί πιο πολύ συστατικά (μεθόδους και πεδία) μιας άλλης κλάσης από ό.τι συστατικά της κλάσης που ανήκει. Ένδειξη μη αποδοτικής ανάθεσης αρμοδιοτήτων στις κλάσεις. Αύξηση δυσκολίας κατανόησης και συντήρησης Μια κλάση δεν επιτελεί πλέον χρήσιμα πράγματα, πιθανόν λόγιο προηγούμενων ανακατασκευών. Κλάσεις υλοποιούν ίδιες λειτουργίες, ενώ έχουν διαφορετικά πρωτότυπα αεθόδων. Ένδειξη παραβίασης των DIP, LCP και OCP Η ύπαρξη εντολών switch που αντιστοιχούν σε κώδικα που εκτελειται για διαφορετικές κλάσεις αντικειμένων, είναι μια ένδειξη μη σωστής χρήσης του πολυμορφισμού, της DIP, της LCP και της OCP Μια κλάση χρησιμοποιεί μια άλλη κλάση. αποκλειστικά, για της απόκτηση πρόσβασης σε μια τρίτη κλάση. Ασκοπη αύξηση της σύζευξης Move Method Extract Method Collapse Hierarchy Inline Class Rename Method Move Method Extract Superclass Extract Method Move Method Replace Type Code with Subclasses Replace Type Code with State/Strategy Replace Conditional with Polymorphism Hide Delegate Extract Method Move Method

27 25 Άρνηση Κληροδότησης (Refused Bequest) Κάποια πεδία και/ή μέθοδοι μιας κλάσης δεν είναι απαραίτητα για μια υποκλάση. Ένδειξη μη ορθής χρήσης κληρονομικότητας και κακοσχεδιασμένης ιεραρχίας Push Down Method Push Down Field Replace Inheritance with Delegation 2.4 Τεχνικές ανακατασκευής κώδικα Η βασική διαδικασία όσον αφορά τις τεχνικές ανακατασκευής περιλαμβάνει, αρχικά την εφαρμογή τους, βήμα-βήμα και τον έλεγχο ορθής λειτουργίας του προγράμματος ύστερα από κάθε βήμα. Δεν αποκλείεται η εφαρμογή μιας τεχνικής, να οδηγήσει το πρόγραμμα σε μια μορφή τέτοια, ώστε να είναι δυνατή και ωφέλιμή η εφαρμογή επιπλέον τεχνικών ανακατασκευής. Ορισμένες από τις τεχνικές είναι κατάλληλες για εφαρμογή σε ειδικές περιστάσεις και θα πρέπει να προσαρμοστούν στην ιδιαιτερότητα του κάθε προγράμματος. Οι τεχνικές ανακατασκευής σχετίζονται με τις βασικές αρχές σχεδίασης [8], καθώς αρκετές από τις τεχνικές, έχουν ως βάση στη φιλοσοφία της λειτουργίας τους κάποια από τις αρχές. Επιπλέον, υπάρχει μια στενή σχέση μεταξύ τεχνικών ανακατασκευής και σχεδιαστικών προτύπων (design patterns) [5]. Συνεπώς, ορισμένες τεχνικές εμπνέονται από τη φιλοσοφία ορισμένων εξ αυτών. Τα σχεδιαστικά πρότυπα θα λέγαμε ότι αποτελούν το στόχο της τελικής μορφής ενός προγράμματος και οι τεχνικές ανακατασκευής τα μέσα με τα οποία επιτυγχάνεται ο στόχος αυτός, Οι υποενότητες που ακολουθούν επιχειρούν μια συγκεντρωτική καταγραφή των τεχνικών ανακατασκευής, των συμπτωμάτων (bad smells), που όταν εμφανίζονται, αποτελούν ένδειξη για τη χρήση της κάθε τεχνικής, αλλά και τη λύση που προτείνει η κάθε τεχνική.

28 26 2A. 1 Κατασκευή Μεθόδων Μεγάλο μέρος του πεδίου που ονομάζεται ανακατασκευή κώδικα περιλαμβάνει τη σύνθεση μεθόδων με στόχο την αποδοτική συγκέντρωση του κώδικα. Πολλές φορές, όμως, τα προβλήματα προέρχονται από μεθόδους που είναι εκτενείς (Large Classes). Οι εκτενείς μέθοδοι είναι προβληματικές διότι συχνά περιέχουν πληροφορία που γίνεται δυσδιάκριτη εξαιτίας της πολύπλοκης λογικής που συνεπάγεται το μεγάλο μέγεθος της μεθόδου. Βασικός στόχος των τεχνικών ανακατασκευής της ενότητας είναι η απλοποίηση μεθόδων που περιλαμβάνουν πολλές γραμμές κώδικα. Στον Πίνακα 2.2 έχουμε συγκεντρώσει τις τεχνικές Κατασκευής Μεθόδων (Composing Methods), τα συμπτώματα, που όταν εμφανίζονται, αποτελούν ένδειξη για τη χρήση της κάθε τεχνικής, αλλά και τη λύση που προτείνει η κάθε τεχνική. Πίνακας 2.2 Τεχνικές ανακατασκευής: Κατασκευή Μεθόδων. Όνομα Συμπτώματα Λύση Τεχνικής Εξαγωγή Μεθόδου (Extract Method) Ενσωμάτωση Μεθόδου (Inline Method) Ενσωμάτωση Προσωρινής Μεταβλητής (Inline Temp) Αντικατάσταση Προσωρινής Μεταβλητής με Κλήση (Replace Temp with Query) Μέθοδοι μεγάλου μεγέθους. Τμήματα κώδικα που χρειάζονται σχόλια για την κατανόησή τους Μέθοδοι που απλά ανακατευθύνουν στην κλήση μιας άλλης μεθόδου Μια προσωρινή μεταβλητή αρχικοποιείται μια φορά μόνο, με το αποτέλεσμα κλήσης μεθόδου Μια μεταβλητή χρησιμοποιείται μια φορά και αποθηκεέι την τιμή μιας έκφρασης Δημιουργία νέας μεθόδου Χρήση ονόματος αντιπροσωπευτικού της λειτουργίας της Κατάργηση της μεθόδου και ενσωμάτωση του κώδικά της στη μέθοδο στην οποία ανακατεύθυνε Αντικατάσταση των σημείων που χρησιμοποιείται η προσωρινή μεταβλητή με την κλήση της μεθόδου Εφαρμογή Εξαγωγής Μεθόδου για την έκφραση και αντικατάσταση των χρήσεων της μεταβλητής με την κλήση στη μέθοδο

29 27 Εισαγωγή Επεξηγηματικής Μεταβλητής (Introduce Explaining Variable) Διαχωρισμός Προσωρινής Μεταβλητής (Split Temporary Variable) Κατάργηση Αναθέσεων σε Παραμέτρους (Remove Assignments to Parameters) Αντικατάσταση Μεθόδου με Αντικείμενο Μεθόδου (Replace Method with Method Object) Μια πολύπλοκη και δυσνόητη έκφραση στον κώδικα Μια προσωρινή μεταβλητή χρησιμοποιείται στον κώδικα για διαφορετικού σκοπούς με διαφορετικές αρμοδιότητες 0 κώδικας μιας μεθόδου αναθέτει τιμές στις παραμέτρους της μεθόδου 0 κώδικας μιας μεθόδου είναι πολύ μεγάλος και επιπλέον οι μεταβλητές χρησιμοποιούνται με τέτοιον τρόπο, ώστε είναι δύσκολο να εφαρμοστεί Εξαγωγή Μεθόδου Τοποθέτηση του αποτελέσματος της έκφρασης σε μια μεταβλητή με χαρακτηριστικό όνομα που επεξηγεί την έκφραση Χρησιμοποίηση διαφορετικής μεταβλητής για κάθε διαφορετικό σκοπό Χρησιμοποίηση προσωρινής μεταβλητής Κατασκευή νέας κλάσης μόνο για τη μέθοδο, με πεδία τις μεταβλητές που χρησιμοποιεί. Απλοποίηση της μεθόδου στη συν Υποκατάσταση Αλγορίθμου > Αλγόριθμος που υλοποιείται (Substitute) σε μια μέθοδο είναι πολύπλοκος Αντικατάσταση του αλγορίθμου με νέο, πιο απλό Μετακινήσεις Συστατικών Μια από τις πιο θεμελιώδεις, αν όχι η πιο θεμελιώδης, αποφάσεις στον αντικειμενοστραφή προγραμματισμό είναι, η ανάθεση αρμοδιοτήτων μεταξύ των κλάσεων. Ακόμα και έμπειροι προγραμματιστές, ενδεχομένως αντιμετωπίζουν

30 28 προβλήματα σχετικά με την παραπάνω απόφαση, τουλάχιστον σε πρώτη φάση. Βασικός στόχος των τεχνικών ανακατασκευής της ενότητας είναι η μετακίνηση συστατικών, δηλαδή πεδίων και μεθόδων, από μια κλάση σε άλλη. Η εν λόγω μετακίνηση, επιφέρει βελτίωση στην κατανόηση, στη σύζευξη (LCP), και στη συνεκτικότητα των κλάσεων (SRP). Στον Πίνακα 2.3 έχουμε συγκεντρώσει τις τεχνικές Μετακίνησης Συστατικών (Moving Features), τα συμπτώματα, που όταν εμφανίζονται, αποτελούν ένδειξη για τη χρήση της κάθε τεχνικής, αλλά και τη λύση που προτείνει η κάθε τεχνική. Πίνακας 2.3 Τεχνικές ανακατασκευής: Μετακίνηση Συστατικών. Όνομα Συμπτώματα Λύση Τεχνικής Μετακίνηση Μεθόδου (Move Method) Μετακίνηση Πεδίου (Move Field) Μια μέθοδος σχετίζεται με Μετακίνηση της μεθόδου περισσότερα συστατικά στην κλάση με τα συστατικά μιας άλλης κλάσης, από ό,τι της οποίας συσχετίζεται της κλάσης στην οποία περισσότερο ανήκει Ένα πεδίο σχετίζεται με Μετακίνηση του πεδίου περισσότερα συστατικά στην κλάση με τα συστατικά μιας άλλης κλάσης, από ό,τι της οποίας συσχετίζεται της κλάσης στην οποία περισσότερο ανήκει Εξαγωγή Κλάσης (Extract Class) Ενσωμάτωση Κλάσης (Inline Class) Μια κλάση είναι πολύ μεγάλη και έχει πολλές αρμοδιότητες. Συνεπώς, είναι δύσκολη στην κατανόησή της Η ύπαρξη μιας κλάσης δεν έχει κάποιο ουσιαστικό όφελος Διαχωρισμός αρμοδιοτήτων σε περισσότερες κλάσεις Μετακίνηση των αρμοδιοτήτων της κλάσης, σε μια άλλη κλάση και κατάργηση της πρώτης

31 29 Απόκρυψη Αντιπροσώπου (Hide Delegate) Μια κλάση αποκτά πρόσβαση μέσω μιας getter μεθόδου σε ένα αντικείμενο που χαρακτηρίζει μια άλλη κλάση και καλεί μεθόδους στο αντικείμενο. Παραβίαση της ενθυλάκωσης Αντίθετο φαινόμενο με το Κατασκευή κατάλληλιον μεθόδων στην κλάση που χαρακτηρίζεται από το αντικείμενο και κλήση του αντικειμένου, μέσω των μεθόδων αυτών Κατάργηση Μεσάζοντα (Remove Middle Man) Hide Delegate. Μια κλάση Αναπροσαρμογή, των δεν επιτελεί πολλές κλάσεων που λειτουργίες, αλλά μόνο το χρησιμοποιούν την ρόλο του ενδιάμεσου. ενδιάμεση κλάση, α>στε να Προιοθεί κλήσεις από άλλες χρησιμοποιούν απευθείας το κλάσεις σε ένα αντικείμενο αντικείμενο που τη που χαρακτηρίζει την χαρακτηρίζει κλάση. Μια κλάση επεξεργάζεται Εισαγωγή Ξένης Μεθόδου (Introduce Foreign Method) με τον ίδιο τρόπο, σε Κατασκευή μιας μεθόδου διάφορα σημεία, το στην κλάση για τον αντικείμενο μιας άλλης επαναλαμβανόμενο κώδικα. κλάσης, καλώντας διάφορες Η μέθοδος έχει ως μεθόδους του αντικειμένου. παράμετρο το αντικείμενο Επανάληψη κο')δικα Εισαγωγή Τοπικής Προσθήκης (Introduce Local Extension) Σε μια κλάση χρειάζεται προσθήκη νέων μεθόδων, αλλά ο κο)δικας της κλάσης δεν είναι διαθέσιμος Κατασκευή νέας κλάσης με τις επιπλέον μεθόδους. Η νέα κλάση μπορεί να συσχετίζεται με την αρχική, είτε μέσω κληρονομικότητας, είτε μέσω της υλοποίησής της ως wrapper

32 Απλοποιήσεις Συνθηκών Η λογική με συνθήκες μπορεί να γίνει αρκετά πολύπλοκη. Αν και ο αντικειμενοστραφής προγραμματισμός χρησιμοποιεί λιγότερες δομές συνθήκης από τον διαδικαστικό προγραμματισμό, λόγο του πολυμορφισμού, υπάρχουν περιπτώσεις όπου η ύπαρξη συνθηκών δημιουργεί δαίδαλο συλλογιστικής πορείας. Βασικός στόχος των τεχνικών ανακατασκευής της ενότητας, είναι η απλοποίηση σύνθετων εκφράσεων με συνθήκες. Τέτοιου είδους απλοποιήσεις, επιφέρουν σημαντική βελτίωση στην κατανόηση του κώδικα και κατ επέκταση, συνδράμουν στην εύκολη και φθηνή συντήρησή του. Στον Πίνακα 2.4 έχουμε συγκεντρώσει τις τεχνικές Απλοποίησης Συνθηκών (Simplifying Conditionals), τα συμπτώματα, που όταν εμφανίζονται, αποτελούν ένδειξη για τη χρήση της κάθε τεχνικής, αλλά και τη λύση που προτείνει η κάθε τεχνική. Πίνακας 2.4 Τεχνικές ανακατασκευής: Απλοποίηση Συνθηκών. Όνομα Συμπτώματα Αύση Τεχνικής Αποσύνθεση Συνθήκης (Decompose Conditional) Μια μέθοδος περιλαμβάνει μια πολύπλοκη εντολή συνθήκης Κατασκευή μεθόδων για τα επιμέρους τμήματα της πολύπλοκης εντολής συνθήκης

33 31 Ενοποίηση Συνθήκης (Consolidate Conditional) Ενοποίηση Επαναλαμβανόμενων - Τμημάτων Κώδικα σε Συνθήκη (Consolidate Duplicate Conditional Fragments) Κατάργηση Ελέγχου Σημαίας (Remove Control Flag) Αντικατάσταση Εμφωλευμένων Συνθηκών με Φρουρούς (Replace Nested Conditional with Guard Clauses) Αντικατάσταση Συνθήκης με Πολυμορφισμό (Replace Conditional with Polymorphism) Μια μέθοδος περιλαμβάνει μια ακολουθία από διαφορετικές εντολές συνθήκης που έχουν το ίδιο αποτέλεσμα Σε όλα τα επιμέρους τμήματα μιας εντολής συνθήκης, υπάρχει επαναλαμβανόμενος κώδικας Μια μεταβλητή χρησιμοποιείται για τον έλεγχο μιας επαναληπτικής διαδικασίας. Η διαδικασίας περιλαμβάνει ένα σύνολο εντολών συνθήκης τα οποία καθορίζουν την τιμή της μεταβλητής Μια πολύπλοκη εντολή συνθήκης, διαχωρίζει το 3ασικό μονοπάτι εκτέλεσης μιας μεθόδου σε μονοπάτια εκτέλεσης Κάθε μονοπάτι αντιστοιχεί σε ειδική περίπτωση Μια μέθοδος περιλαμβάνει μια εντολή συνθήκης κάθε τμήμα της οποίας αντιστοιχεί σε μια διαφορετική συμπεριφορά της μεθόσου Συνένωση των επιμέρους εντολών συνθήκης σε μια εντολή συνθήκης και κατασκευή αντίστοιχης μεθόδου Μετακίνηση του επαναλα μ βανό μενού κώδικα εκτός της εντολής συνθήκης Αντικατάσταση των εντολών συνθήκης με εντολές break, continue, return Για κάθε ειδική περίπτωση, χρησιμοποίηση μιας απλής εντολής συνθήκης που παίζει το ρόλο «φρουρού» Κατασκευή υποκλάσης για κάθε διαφορετική συμπεριφορά της μεθόδου

34 32 -Εισαγωγή Υπόθεσης (Introduce Assertion) Εισαγωγή Null Αντικειμένου (Introduce Null Object) Ένα τμήμα κώδικα υιοθετεί μια υπόθεση για την κατάσταση του προγράμματος, η οποία πρέπει να ισχύει πάντα Εμφάνιση επαναλαμβανόμενων ελέγχων για null τιμή Ανάδειξη της υπόθεσης σε εμφανή θέση, χρησιμοποιώντας ένα assertion. Δηλαδή, χρησιμοποίηση μιας εντολής συνθήκης που ελέγχει εάν ισχύει η υπόθεση. Αν δεν ισχύει υποδεικνύει το λάθος Αντικατάσταση της null τιμής με null αντικείμενο Απλοποιήσεις Μεθόδων Η δημιουργία μεθόδων, εύκολων στην κατανόηση και στη χρησιμοποίησή τους είναι μια βασική ιδιότητα του ποιοτικού αντικειμενοστραφούς λογισμικού. Βασικός στόχος των τεχνικών ανακατασκευής της ενότητας, είναι η απλοποίηση των πρωτότυπων (ονόματα, παράμετροι, κτλ.) των μεθόδων αυτών. Τέτοιου είδους απλοποιήσεις, επιφέρουν σημαντική βελτίωση στην κατανόηση του κώδικα και κατ επέκταση, συνδράμουν στην εύκολη και φθηνή συντήρησή του. Στον Πίνακα 2.5 έχουμε συγκεντρώσει τις τεχνικές Απλοποίησης Μεθόδων (Making Method Calls Simpler), τα συμπτώματα, που όταν εμφανίζονται, αποτελούν ένδειξη για τη χρήση της κάθε τεχνικής, αλλά και τη λύση που προτείνει η κάθε τεχνική. Πίνακας 2.5 Τεχνικές ανακατασκευής: Απλοποίηση Μεθόδων. Όνομα Συμπτώματα Λύση Τεχνικής

35 33 Μετονομασία Μεθόδου (Rename Method) Προσθήκη Παραμέτρου (Add Parameter) Κατάργηση Παραμέτρου - (Remove Parameter) Separate Query from Modifier Παραμετροποίηση Μεθόδου (Parameterize Method) To όνομα μιας μεθόδου δεν Αλλαγή του ονόματος της αντιστοιχεί στο σκοπό που μεθόδου, σε κατάλληλο, για εξυπηρετεί η μέθοδος το σκοπό που εξυπηρετεί Μια μέθοδος χρειάζεται Προσθήκη επιπλέον περισσότερες πληροφορίες παραμέτρων σαν είσοδο Η παράμετρος μιας μεθόδου Κατάργηση της παραμέτρου δεν χρησιμοποιείται Μια μέθοδος επιστρέφει ένα Δημιουργία δύο αποτέλεσμα και επιπλέον διαφορετικών μεθόδων. Μία αλλάζει την τρέχουσα που επιστρέφει το κατάσταση του αποτέλεσμα και μία που αντικειμένου στο οποίο αλλάζει την κατάσταση του καλείται αντικειμένου Διάφορες μέθοδοι κάνουν παρόμοιες λειτουργίες, Κατασκευή αλλά με διαφορετικές παραμετροποιημένης σταθερές, που μεθόδου με παραμέτρους, περιλαμβάνονται στον αντίστοιχες με τις σταθερές κώδικά τους Αντικατάσταση Παραμέτρου με Μεθόδους (Replace Parameter with Explicit Methods) Preserve Object Μια μέθοδος επιτελεί διαφορετικές λειτουργίες, ανάλογα με την τιμή μιας παραμέτρου Μια μέθοδος καλείται με παραμέτρους που προκύπτουν από κλήσεις σε μεθόδους ενός άλλου αντικειμένου Ορισμός διαφορετικών μεθόδων για κάθε διαφορετική λειτουργία Αντί για πολλές παραμέτρους, πέρασμα του αντικειμένου, από το οποίο προκύπτουν οι τιμές των παραμέτρων

36 34 Μια μέθοδος A καλείται με Αντικατάσταση Παραμέτρου με Μέθοδο (Replace Parameter with Method) Introduce Parameter Object Κατάργηση Μεθόδιον Αρχικοποίησης (Remove Setting Method) μια παράμετρο που Κατάργηση της παραμέτρου προκύπτει από την κλήση και κλήση της μεθόδου Β μιας άλλης μεθόδου Β. Η Β, από την A όμως, μπορεί να κληθεί και από την X Μια μέθοδος χρησιμοποιεί ένα σύνολο παραμέτρων που σχετίζονται μεταξύ τους Ένα πεδίο αρχικοποιείται μια φορά και εν συνεχεία δεν αλλάζει τιμή Αντικατάσταση των παραμέτρων με ένα, κατάλληλα ορισμένο, αντικείμενο Κατάργηση των μεθόδων που θέτουν τιμές σε αυτό το πεδίο Απόκρυψη Μεθόδου (Hide Method) Η μέθοδος μιας κλάσης δεν χρησιμοποιείται από καμία άλλη κλάση εκτός αυτής στην οποία ανήκει Δήλωση της μεθόδου ως private 2.4,5 Χειρισμός Γενίκευσης Βασικός στόχος των τεχνικών ανακατασκευής της ενότητας, είναι η απλοποίηση των ιεραρχιών των κλάσεων. Τέτοιου είδους αλλαγές, επιφέρουν σημαντική βελτίωση στη σωστή χρήση της κληρονομικότητας, στη σύζευξη, στη συνεκτικότητα, στη συντήρηση και στην επεκτασιμότητα των κλάσεων. Στον Πίνακα 2.6 έχουμε συγκεντρώσει τις τεχνικές Χειρισμού Γενίκευσης (Dealing with Generalization), τα συμπτώματα, που όταν εμφανίζονται, αποτελούν ένδειξη για τη χρήση της κάθε τεχνικής, αλλά και τη λύση που προτείνει η κάθε τεχνική.

37 35 Πίνακας 2.6 Τεχνικές ανακατασκευής: Χειρισμός Γενίκευσης. Όνομα Συμπτώματα Λύση Τεχνικής Μετακίνηση Πεδίου προς το ι Δύο ή περισσότερες Μετακίνηση του πεδίου στη Πάνω υποκλάσεις έχουν το ίδιο βασική κλάση (Pul! Up Field) πεδίο Μετακίνηση Μεθόδου προς Δύο ή περισσότερες Μετακίνηση της μεθόδου τα Πάνω υποκλάσεις έχουν την ίδια στη βασική κλάση " (Pull Up Method) μέθοδο Ορισμός κατασκευαστή που περιέχει τον κοινό κώδικα Μετακίνηση Κατασκευαστή Δύο ή περισσότερες στη βασική κλάση και προς τα Πάνω υποκλάσεις έχουν σχεδόν κλήση του στους (Pull Up Constructor Body) τους ίδιους κατασκευαστές κατασκευαστές των υποκλάσεων Μετακίνηση Μεθόδου προς Μέθοδος μιας βασικής τα Κάτω κλάσης σχετίζεται μόνο με (Push Down Method) κάποιαλες υποκλάσηλεις Μετακίνηση Πεδίου προς τα Πεδίο μιας βασικής κλάσης Κάτω σχετίζεται μόνο με κάποια/- (Push Down Field) ες υποκλάση/-εις Μια κλάση έχει πεδία και μεθόδους που Εξαγωγή Υποκλάσης χαρακτηρίζουν μόνο ένα (Extract Subclass) υποσύνολο των αντικειμένων της κλάσης Μετακίνηση της μεθόδου στην/στις αντίστοιχηλες υποκλάσηλεις Μετακίνηση του πεδίου στην/στις αντίστοιχηλες υποκλάσηλεις Ορισμός μιας υποκλάσης που περιλαμβάνει τα εν λόγω πεδία και μεθόδους Εξαγωγή Υπερκλάσης (Extract Superclass) Δύο ή περισσότερες κλάσεις έχουν παρόμοια πεδία και μεθόδους Ορισμός μιας βασικής κλάσης και μετακίνηση σε αυτήν των κοινών πεδίων και μεθόδων

38 36 Εξαγωγή Διεπαφής - (Extract Interface) Δημιουργία Μεθόδου Πρωτοτύπου (Form Template Method) Αντικατάσταση Κληρονομικότητας με Αντιπροσωπεία (Replace Inheritance with Delegation) Διάφορες κλάσεις χρησιμοποιούν το ίδιο υποσύνολο public μεθόδων μιας άλλης κλάσης. Ή. δύο ή περισσότερες κλάσεις έχουν public μεθόδους με τα ίδια πρωτότυπα Σε δύο ή περισσότερες υποκλάσεις υπάρχουν μέθοδοι που εκτελούν παρόμοια βήματα, με την ίδια σειρά Οι κλάσεις που χρησιμοποιούν μια υποκλάση χρησιμοποιούν λίγες ή καμία, από τις μεθόδους που κληρονομούνται από τη βασική κλάση. Ή, μια υποκλάση δεν έχει νόημα να προσφέρει στις κλάσεις που την χρησιμοποιούν ένα σύνολο ή υποσύνολο των μεθόδων που κληρονομεί από τη βασική κλάση.ή, μια υποκλάση δεν χρειάζεται να κληρονομεί πεδία από τη βασική κλάση Δημιουργία μιας διεπαφής που περιλαμβάνει τις εν λόγω μεθόδους Δημιουργία μεθόδων, αντίστοιχων με τα βήματα και μετακίνηση των κοινών μεθόδων στη βασική κλάση Κατάργηση της κληρονο μικότητας

39 37 Αντικατάσταση Αντιπροσωπείας με Κληρονομικότητας (Replace Delegation with Inheritance) Κατάρρευση Ιεραρχίας (Collapse Hierarchy) Μια κλάση συσχετίζεται με μια άλλη κλάση και έχει αρκετές delegate μεθόδους οι οποίες, απλώς καλούν αντίστοιχες μεθόδους της κλάσης με την οποία σχετίζεται Μια υποκλάση και η αντίστοιχη υπερκλάση δεν διαφέρουν σημαντικά Κατάργηση της συσχέτισης και χρήση κληρονομικότητας Συγχώνευση της υποκλάσης στην υπερκλάση Οργάνωση Δεδομένων Η δυνατότητα ορισμού νέίον τύπων δεδομένων, προσφέρει περισσότερες προοπτικές σε σχέση με τους θεμελιώδεις τύπους δεδομένιον. Ωστόσο, η αποτελεσματική διαχείριση των δεδομένων μέσω αντικειμένων αποτελεί ένα κοπιώδες έργο για τους προγραμματιστές. Βασικός στόχος των τεχνυαον ανακατασκευής της ενότητας, είναι η ευελιξία στην οργάνωση των δεδομένων. Τέτοιου είδους τεχνικές, επιφέρουν σημαντική βελτίωση στη σωστή χρήση αντικειμένων, στη σύζευξη, στη συντήρηση και στην απλοποίηση της ιεραρχίας των κλάσεων. Στον Πίνακα 2.6 έχουμε συγκεντρώσει τις τεχνικές Οργάνωσης Δεδομένοον (Organize Data), τα συμπτώματα, που όταν εμφανίζονται, αποτελούν ένδειξη για τη χρήση της κάθε τεχνικής, αλλά και τη λύση που προτείνει η κάθε τεχνική. Πίνακας 2.7 Τεχνικές ανακατασκευής: Οργάνωση Δεδομένων. Όνομα Συμπτώματα Λύση Τεχνικής Αυτό-ενθυλάκωση Πεδίου (Self Encapsulate Field) Η πρόσβαση σε ένα πεδίο γίνεται απευθείας και έτσι, η σύζευξη αυξάνεται Δημιουργία setter και getter μεθόδων για την πρόσβαση στο εν λόγω πεδίο

40 38 Αντικατάσταση Τιμής Δεδομένου με Αντικείμενο (Replace Data Value with Object) Μια τιμή δεδομένοι χρειάζεται προσθήκη επιπλέον πληροφορίας ή συμπεριφοράς Μετατροπή της τιμής δεδομένων σε αντικείμενο Ένας πίνακας έχει Αντικατάσταση του πίνακα Αντικατάσταση Πίνακα με συγκεκριμένα στοιχεία που με ένα αντικείμενο που έχει Αντικείμενο (Replace Array with Object συμβολίζουν διαφορετικές έννοιες ένα πεδίο για κάθε εν λόγο) στοιχείο του πίνακα Τροποποίηση της Μονόδρομης Συσχέτισης σε Αμφίδρομη (Change Unidirectional Association to Υπάρχουν δύο κλάσεις που η μία πρέπει να χρησιμοποιεί τα συστατικά της άλλης, αλλά υπάρχει συσχέτιση μονής Προσθήκη δεικτών για τη συσχέτιση και προς την αντίθετη κατεύθυνση (back pointers) Bidirectional) κατεύθυνσης Τροποποίηση της Αμφίδρομης Συσχέτισης σε Δύο κλάσεις συσχετίζονται Διαγραφή του άκρου της Μονόδρομη αμφίδρομα. αλλά, μία δεν αμφίδρομης συσχέτισης που (Change Bidirectional χρειάζεται συστατική της δεν χρειάζεται πλέον Association to άλλης Unidirectional) Αλτικατάσταση Συγκεκριμένου Αριθμού με Συμβολική Σταθερά (Replace Magic Number with Symbolic Constant) Ενθυλάκωση Πεδίου (Encapsulate Field) Υπάρχει ένας αριθμός με εδική σημασία για το πρόγραμμα Ένα πεδίο είναι ορισμένο ως public Δημιουργία σταθεράς με όνομα αντίστοιχο της σημασίας του εν λόγω αριθμού και αντικατάσταση του αριθμού με τη σταθερά Ορισμός του πεδίου ως private και δημιουργία μεθόδων για την προσπέλασή του εκτός κλάσης

41 39 Αντικατάσταση Υποκλάσης με Πεδία (Change Subclass with Fields) Υποκλάσεις διαφέρουν μόνο σε μεθόδους που επιστρέφουν σταθερές τιμές' Μετατροπή των μεθόδων σε πεδία της υπερκλάσης και διαγραφή των υποκλάσεων 2.5 Σχετική έρευνα Αρκετές ερευνητικές ομάδες έχουν ασχοληθεί με την ανακατασκευή λογισμικού έχοντας προσεγγίσει το θέμα από διαφορετικές οπτικές γωνίες τις περισσότερες φορές και προτείνοντας λύσεις με τεχνικές ανακατασκευής που εντάσσονται σε διαφορετικές ενότητες της ανακατασκευής λογισμικού. Η [9] αποτελεί μια βιβλιογραφική επισκόπηση της υπάρχουσας έρευνας στο πεδίο της ανακατασκευής λογισμικού. Η κατηγοριοποίηση που παρουσιάζεται στην εργασία, πραγματοποιήθηκε με βάση πέντε (5) κριτήρια. Το πρώτο κριτήριο αναφέρεται στις διαδικασίες που απαιτούνται πριν, κατά τη διάρκεια και μετά την ανακατασκευή. Στον τομέα αυτό, περιλαμβάνεται η αναγνώριση των σημείων του λογισμικού στα οποία θα εφαρμοστεί ανακατασκευή, η παροχή εγγύησης ότι η συμπεριφορά του δεν θα αλλάξει, η εκτίμηση της αποτελεσματικότητας στην βελτίωση της ποιότητας και η διατήρηση της συμβατότητας μεταξύ του λογισμικού και των συστατικών με τα οποία συσχετίζεται (π.χ. κώδικας, σχεδίαση αρχιτεκτονικής, έγγραφα τεκμηρίο)σης, μοντέλα UML). Το δεύτερο κριτήριο, αφορά στις τεχνικές και τους φορμαλισμούς που χρησιμοποιούνται σε αυτές. Συγκεκριμένα, μελετώνται τα invariants, οι προσυνθήκες, οι μετασυνθήκες και οι μετασχηματισμοί γράφων που αντιστοιχίζονται σε μετασχηματισμούς λογισμικού, καθώς επίσης και πώς βοηθούν στην ορθότητα και τη διατήρηση της συμπεριφοράς του λογισμικού. Το τρίτο κριτήριο εξετάζει τα διάφορα επίπεδα του λογισμικού στα οποία μπορεί να εφαρμοστεί ανακατασκευή διακρίνοντας τρία (3): το επίπεδο πηγαίου κο^δικα, το επίπεδο σχεδίασης του συστήματος (ανακατασκευή π.χ. UML διαγραμμάτων) και το επίπεδο της ανάλυσης απαιτήσεων (ανακατασκευή φυσικής γλώσσας περιγραφής απαιτήσεων). Το τέταρτο κριτήριο ασχολείται με τα εργαλεία που έχουν προταθεί για την ανακατασκευή.

42 40 Αναλύεται ο βαθμός αυτοματοποίησης (πλήρως αυτόματα ή ημιαυτόματα), η αξιοπιστία, η επεκτασιμότητα, το εύρος κάλυψης τεχνικοί ανακατασκευής, ο βαθμός παραμετροποίησης και ανεξαρτησίας από κάποια συγκεκριμένη γλώσσα προγραμματισμού. Το πέμπτο κριτήριο εξετάζει πο'ις η ανακατασκευή εμπλέκεται στον ανασχεδιασμό λογισμικού (software reengineering), στην ανάπτυξη ευέλικτων προγραμμάτων (agile software development) και ανάπτυξη λογισμικού βασισμένο σε frameworks. Τα συμπεράσματα στα οποία κατέληξε είναι ότι παραμένουν ανοιχτά προβλήματα σε κάθε κατηγορία και ότι υπάρχει ανάγκη για προσεγγίσεις στην ανακατασκευή με μεγαλύτερη ευελιξία, επεκτασιμότητα και πιο γενικευμένους και συστηματικούς τρόπους. Η [13] ασχολείται με τον τομέα της κατασκευής μεθόδιον (composing methods). Συγκεκριμένα, εστιάζει στην τεχνική της εξαγωγής μεθόδου (extract method). Παρόλο που υπάρχουν πολλές διαθέσιμες μεθοδολογίες και εργαλεία για την εφαρμογή της συγκριμένης τεχνικής, οι περισσότερες, βασίζονται στον υπεύθυνο σχεδίασης του λογισμικού. Για το λόγο αυτό, επικεντροινεται στην αυτοματοποίηση της διαδικασίας με την αυτόματη αναγνώριση σημείων στα οποία μπορεί να εφαρμοστεί η εξαγωγή μεθόδου και η παρουσίαση το)ν αποτελεσμάτων <υς προτάσεις βελτίωσης στον σχεδιαστή. Η βασική ιδέα στηρίζεται στον τεμαχισμό προγράμματος (program slicing), σύμφοινα με την οποία, ένα κομμάτι αποτελείται από όλες τι δηλώσεις του προγράμματος που μπορεί να επηρεάζουν την τιμή μιας μεταβλητής x σε ένα συγκεκριμένο σημείο ενδιαφέροντος ρ. Το ζεύγος (ρ,χ) ορίζεται ως κριτήριο τεμαχισμού (slicing criterion). Η προτεινόμενη μεθοδολογία προτείνει τη συνένο^ση όλων των κομματιοιν του προγράμματος που αφορούν μια μεταβλητή σε μια νέα μέθοδο, μαζί με ένα σύνολο κανόνων που θα διασφαλίζουν τη συμπεριφορά του συστήματος μετά την εφαρμογή της, χωρίς επαναλαμβανόμενο κώδικα. Η [14] προτείνει μια λύση στο πρόβλημα «Feature Envy», το οποίο παρατηρείται όταν «μια κλάση χρησιμοποιεί μια μέθοδο άλλης κλάσης πιο πολύ από ό,τι η κλάση στην οποία ανήκει η μέθοδος» [14]. Η προσέγγιση περιγράφει την μετακίνηση μεθόδου (move method) και εντάσσεται στην γενικότερη περιοχή των μετακινήσεων χαρακτηριστικοί (moving features) της ανακατασκευής. Στην εργασία αυτή,

43 41 επιστρατεύεται η έννοια της απόστασης μεταξύ οντοτήτων (πεδία ή μέθοδοι κλάσεων) και κλάσεων για την αυτόματη αναγνώριση πιθανών σημείων εμφάνισης του φαινομένου «Feature Envy». Ο αλγόριθμος που υλοποιήθηκε, εξάγει προτεινόμενες ανακατασκευές μετακίνησης μεθόδων. Για κάθε μέθοδο του συστήματος, ο αλγόριθμος σχηματίζει ένα σύνολο από υποψήφιες κλάσεις, όπου η μέθοδος δύναται να μετακινηθεί, εξετάζοντας τις οντότητες των υπόλοιπων κλάσεων του συστήματος που προσπελαύνει η μέθοδος (εξαιρούνται δηλαδή οι κλάσεις που ανήκουν σε βιβλιοθήκες). Τελικά, επιλέγεται η κλάση η οποία ικανοποιεί ένα σύνολο προσυνθηκών, που εγγυάται τη διατήρηση της συμπεριφοράς του προγράμματος. Στην επιλογή λαμβάνεται υπόψη η μετρική που προτείνεται, «Entity Placement» που βασίζεται σε δύο αρχές: Αρχικά, στην απόσταση μεταξύ των οντοτήτων που ανήκουν σε μια κλάση και της ίδιας της κλάσης, η οποία θα πρέπει να είναι η ελάχιστη δυνατή (υψηλή συνεκτικότητα). Επίσης, στην απόσταση μεταξύ των οντοτήτων που δεν ανήκουν σε μια κλάση και της κλάσης αυτής, η οποία θα πρέπει να είναι η μέγιστη δυνατή (χαμηλή σύζευξη). Τελικά, η όλη προσέγγιση χαρακτηρίζεται ως ημιαυτόματη, καθώς η εφαρμογή ή όχι των προτεινόμενων ανακατασκευών είναι απόφαση του σχεδιαστή σε σχέση με εννοιολογικά και ποιοτικά κριτήρια σχεδίασης. Στη μετακίνηση χαρακτηριστικών εστιάζει και η [ 10] προτείνοντας ανακατασκευή με τέσσερις τεχνικές: τη μετακίνηση μεθόδου, τη μετακίνηση πεδίων (move attribute), την εξαγωγή κλάσης (extract class) και την ενσωμάτωση κλάσης (inline class). Βασικό κριτήριο αποτελεί η συνεκτικότητα των κλάσεων, η οποία μετράται με την απόσταση Jaccard. Η βασική συνεισφορά της εργασίας είναι ότι μεταφράζει την παραπάνω απόσταση σε Ευκλείδεια απόσταση, απεικονίζοντας τις μεθόδους και τα πεδία των κλάσεων υπό εξέταση με γεωμετρικά σχήματα, μέσω μιας εφαρμογής, στον τρισδιάστατο χώρο. Με τον τρόπο αυτό, για παράδειγμα, αν μια μέθοδος πίλ μιας κλάσης Α εμφανίζεται απομακρυσμένη από τις υπόλοιπες μεθόδους και τα υπόλοιπα πεδία της Α και ταυτόχρονα κοντά στις μεθόδους και τα πεδία μιας άλλης κλάσης Β, τότε κάτι τέτοιο αποτελεί ένδειξη ότι θα πρέπει να εφαρμοστεί μετακίνηση μεθόδου και η μέθοδος πία να μετακινηθεί στην κλάση Β. Και εδώ, εκφράζεται η άποψη ότι ο

44 42 α\θρώπινος παράγολτας αποτελεί τον τελικό κριτή για το εάν απαιτείται ανακατασκευή και πού ή όχι. Παρόλα αυτά, επισημαίνεται ότι η υποστήριξη στην απόφαση αυτή μέσω εργαλείων κρίνεται απαραίτητη, αφού όσο μεγαλύτερο σε έκταση είναι ένα λογισμικό τόσο πιο δυσδιάκριτα γίνονται τα υποψήφια προς ανακατασκευή σημεία. Εδώ, η συνεκτικότητα των κλάσεων οπτικοποιείται στις τρεις διστάσεις μέσω σχημάτων σε διάφορες αποστάσεις βοηθώντας με αυτόν τον τρόπο την ανθρώπι\ύ διαίσθηση, Η [3] θεωρεί ότι η απλή εφαρμογή τεχνικών ανακατασκευής θεραπεύει απλά τα συμπτώματα της υλοποίησης κώδικα χαμηλής ποιότητας. Για το λόγο αυτό προτείνει ακ θεραπεία, τη βελτίωση της σύζευξης και της συνεκτικότητας, χαρακτηριστικά τα οποία θεωρεί δείκτες ποιοτικής σχεδίασης. Λαμβάνοντας ως αφετηρία τη δομή και λειτουργία ορισμένων τεχνικών ανακατασκευής που ανήκουν σε διάφορες κατηγορίες, εξάγει έξι (6) γενικότερα συμπεράσματα που τα ονομάζει γενικές κατευθύνσεις, τα οποία αν ακολουθηθούν από κάποιον που εφαρμόζει ανακατασκευή. θα πετύχει μεγάλη συνεκτικότητα και μικρή σύζευξη. Η [7] παρουσιάζει μια λύση ανακατασκευής στο πρόβλημα της παραμετροποίησης κλάσεων Java. Ειδικότερα, προτείνεται μια λύση στην παραμετροποίηση των κλάσεων. (άστε non generic κλάσεις. να μετατραπούν σε generic, με στόχο να αυξήσουν την εκφραστικότητά τους και το type safety τους. Τα generics είναι μια μορφή παραμετρικού πολυμορφισμού και εισήχθηκαν για πρώτη φορά στην έκδοση της Java 1.5 το Δίνουν τη δυνατότητα σε έναν τύπο δεδομένων ή μεθόδου να λειτουργήσει με αντικείμενα διάφορων τύπων, παρέχοντας ταυτόχρονα type safety σε χρόνο μεταγλώττισης (compile time). Το πρόβλημα παραμετροποίησης συνίσταται στην προσθήκη ενός τύπου σε μια υπάρχουσα κλάση. έτσι ώστε να μπορεί να χρησιμοποιείται σε διάφορα πλαίσια χωρίς να χάνεται πληροφορία. Για παράδειγμα η δήλωση: class ArrayList {...}. μετατρέπεται σε class ArravList<T> {...}. με το Τ να μπορεί να αντικατασταθεί από διάφορους τύπους του Object. Εκτός της προηγούμενης κατηγορίας μετατροπών, ο αλγόριθμός που παρουσιάζεται, αντιμετωπίζει και το πρόβλημα της αρχικοποίησης του τύπου των αντικειμένων. Για παράδειγμα η δήλωση: ArrayList names: μετατρέπεται σε ArrayList<String> names:.

45 43 Η εν λόγω πρόταση είναι αυτοματοποιημένη, και μάλιστα με πολύ ενθαρρυντικά αποτελέσματα καθώς, όπως αναφέρεται, η χειρονακτική εναλλακτική είναι επίπονη, χρονοβόρα και επιρρεπής σε σφάλματα. Η [6] είναι άλλη μια εργασία η οποία προτείνει τον αυτόματο εντοπισμό πιθανών σημείων του λογισμικού που θα μπορούσε να εφαρμοστεί ανακατασκευή. Για να το πετύχει, χρησιμοποιεί την έννοια των invariants, δηλαδή συνθήκες ή εκφράσεις που δηλώνονται ρητά στον κώδικα (στατικά invariants) ή θα πρέπει να εξαχθούν (δυναμικά invariants). Η εμφάνιση ενός συγκεκριμένου μοτίβου από invariants σε κάποιο σημείο του προγράμματος, αποτελεί ένδειξη ότι το συγκεκριμένο σημείο είναι υποψήφιο προς ανακατασκευή. Η μελέτη παραθέτει διάφορες περιπτώσεις στις οποίες διάφορα μοτίβα από invariants συνηγορούν προς ανακατασκευή του κιόδικα. Για παράδειγμα, η τεχνική ανακατασκευής Αφαίρεση Παραμέτρου (Remove Parameter) ενδείκνυται να εφαρμοστεί όταν ισχύει τουλάχιστον μία από τις δύο εκφράσεις: p = f(a, b,...) ρ = constant όπου ρ είναι η παράμετρος προς διαγραφή, f είναι μια συνάρτηση υπολογισμού και a,b,... είναι είτε παράμετροι, είτε μεταβλητές στην εμβέλεια όμως του παραπάνω τμήματος κώδικα και επομένους η τιμή της ρ μπορεί να υπολογιστεί από τη διαθέσιμη πληροφορία. Τελικά, η εργασία καταλήγει στο συμπέρασμα ότι ο συνδυασμός της στατικής και της δυναμικής προσέγγισης φέρνει τα καλύτερα δυνατά αποτελέσματα. Η [ 12] ασχολείται με την εξέλιξη της σχεδίασης αντικειμενοστραφών εφαρμογών με τεχνικές ανακατασκευής. Στόχος της ήταν να προσφέρει ένα εργαλείο με τη δυνατότητα η εφαρμογή ανακατασκευής να είναι τόσο εύχρηστη, όσο και οι GUI designers στην κατασκευή διεπαφοόν. Η συνεισφορά της έγκειται στην παρουσίαση γνωστών, αλλά και προτεινόμενων τεχνικιόν ανακατασκευής σε τρεις βασικούς τομείς: στο σχήμα αντικειμενοστραφιον συστημάτων διαχείρισης βάσεων δεδομένων (object oriented database management systems), στα σχεδιαστικά πρότυπα (design patterns) και στην ανάλυση hot-spot, η οποία αναγνωρίζει τα μέρη του λογισμικού

46 44 που μπορεί να διαφοροποιούνται από εφαρμογή σε εφαρμογή. Τα αποτελέσματα των δοκιμών σε συστήματα βασισμένα σε C++, έδειξαν ότι οι τεχνικές ανακατασκευής που παρουσιάζονται μπορούν να εφαρμοστούν σε πραγματικά συστήματα με επιτυχία.

47 45 ΚΕΦΑΛΑΙΟ 3. ΠΡΟΤΕΙΝΟΜΕΝΟΙ ΑΛΓΟΡΙΘΜΟΙ 3.1 Εισαγωγή 3.2 Clustering Based Approach (CBA) 3.3 Refactoring Based Approach (RBA) 3.1 Εισαγωγή Στο κεφάλαιο αυτό, για να γίνει πιο κατανοητή η γενική ιδέα γύρω από τις προσεγγίσεις που προτείνονται στην εργασία, για κάθε μία, παρουσιάζουμε το θεωρητικό υπόβαθρο, αναλύουμε τη συλλογιστική πορεία μέσα τον αντίστοιχο αλγόριθμο και εξηγούμε τη λειτουργία της με ένα παράδειγμα. 3.2 Clustering Based Approach (CBA) Θεωρητικό υπόβαθρο Η CBA προσεγγίζει το πρόβλημα που περιγράφηκε στην ενότητα 1.2, χρησιμοποιώντας ιεραρχική ενωτική ομαδοποίηση (Agglomerative Hierarchical Clustering). Ουσιαστικά, πρόκειται για μια επέκταση της τεχνικής που παρουσιάζεται στην [1]. Η βασική ιδέα της ιεραρχικής ενωτικής ομαδοποίησης, είναι ότι ξεκινάει με μια ξεχωριστή ομάδα (cluster) για κάθε οντότητα και, επαναληπτικά, συγχωνεύει τις δύο ομάδες με την μικρότερη απόσταση μεταξύ τους. Τα βήματα που ακολουθεί ο αλγόριθμος της ιεραρχικής ενωτικής ομαδοποίησης (Σχήμα 3.1) είναι:

48 46 1. Άρχισε με Ν ομάδες, όπου η κάθε ομάδα περιέχει μία οντότητα. 2. Για κάθε ομάδα, υπολόγισε, με βάση μια μετρική απόστασης, την απόσταση μεταξύ της κάθε οντότητάς της και όλων των οντοτήτων των υπόλοιπων ομάδων. 3. Με βάση τους υπολογισμούς που προέκυψαν από το βήμα 2 και ένα κριτήριο απόστασης, υπολόγισε τις αποστάσεις μεταξύ όλων των ομάδων. 4. Με βάση τους υπολογισμούς που προέκυψαν από το βήμα 3, υπολόγισε το ζευγάρι ομάδων με τη μικρότερη απόσταση. 5. Συγχώνευσε το ζευγάρι που έχει προκόψει από το βήμα Αν υπάρχουν περισσότερες από μία ομάδες στην τρέχουσα ομαδοποίηση (δηλαδή. Ν>1) πήγαινε στο βήμα 2. Σχήμα 3.1 Ιεραρχική Ενωτική Ομαδοποίηση.

49 47 Για το βήμα 2, δηλαδή για τον υπολογισμό της απόστασης μεταξύ οντοτήτοον, υπάρχουν διάφορες μετρικές. Στην CBA, χρησιμοποιείται ως μετρική, η απόσταση Jaccard, που αναλύεται στη συνέχεια. Για το βήμα 3, δηλαδή για τον υπολογισμό της απόστασης μεταξύ το^ν ομάδθ)ν, υπάρχουν διάφορα κριτήρια. Στην CBA, χρησιμοποιούνται πέντε (5) κριτήρια: - Το κριτήριο του κοντινότερου γείτονα (Single Linkage Criterion). Με βάση αυτό το κριτήριο, η απόσταση μεταξύ δύο ομάδων ισούται με την ελάχιστη απόσταση μεταξύ των οντοτήτιον των δύο ομάδων (Σχήμα 3.2). Το κριτήριο του μακρινότερου γείτονα (Complete Linkage Criterion). Με βάση αυτό το κριτήριο, η απόσταση μεταξύ δύο ομάδων ισούται με τη μέγιστη απόσταση μεταξύ των οντοτήτων των δύο ομάδων (Σχήμα 3.3). Το κριτήριο του μέσου όρου των αποστάσεων των γειτόνων (Average Linkage Criterion). Με βάση αυτό το κριτήριο, η απόσταση μεταξύ δύο ομάδων ισούται με τη μέση τιμή το)ν αποστάσεων μεταξύ τιον οντοτήτων των δύο ομάδθ3ν (Σχήμα 3.4). Το κριτήριο του διάμεσου γείτονα (Median Linkage Criterion). Με βάση αυτό το κριτήριο, η απόσταση μεταξύ δύο ομάδίον ισούται με τη διάμεση τιμή τιον αποστάσεων μεταξύ των οντοτήτων των δύο ομάδων. Το κριτήριο της προσαρμοστικής απόστασης (Adaptive Linkage Criterion). Με βάση αυτό το κριτήριο, η απόσταση μεταξύ δύο ομάδων ισούται με μια από τις προηγούμενες αποστάσεις, ανάλογα με την ισχύ κάποιων συνθηκών [1]

50 48 Σχήμα 3.2 Κανόνας του κοντινότερου γείτονα. Σχήμα 3.3 Κανόνας του μακρινότερου γείτονα. Σχήμα 3.4 Κανόνας του μέσου όρου των αποστάσεων Μγόριθμος Η CBA υλοποιείται από μια επαναληπτική διαδικασία, δύο φάσεων, για όλες τις κλάσεις του συστήματος. Κατά την πρώτη φάση (Αλγόριθμος 1), δημιουργούνται οι διεπαφές της κάθε κλάσης, με βάση τον ιεραρχικό ενωτικό αλγόριθμο. Κατά τη

51 49 δεύτερη φάση (Αλγόριθμος 2), επιλέγονται οι διεπαφές της κάθε κλάσης, που αντιστοιχούν σε κάθε χρήστη της κλάσης. Η πρώτη φάση της CBA, δέχεται ως είσοδο μια δομή δεδομένων, UP Μ (UsersPer Method), που περιέχει την πληροφορία, ποιοι είναι οι χρήστες της κλάσης, ανά μέθοδο της κλάσης. Δηλαδή, οι χρήστες της κλάσης είναι ομαδοποιημένοι ανά μέθοδο που χρησιμοποιεί ο καθένας. Η πληροφορία αυτή, έχει παραχθεί από τη συντακτική ανάλυση του προγράμματος η οποία περιγράφεται στο κεφάλαιο 4. Η έξοδος της πρώτης φάσης της CBA, είναι μια λίστα, L All l, με όλες τις διεπαφές που έχουν δημιουργηθεί. Κατά την πρώτη φάση της CBA, αρχικά δημιουργούνται τόσες στοιχειώδεις διεπαφές, όσες είναι οι μέθοδοι του UPM. Κάθε στοιχειώδης διεπαφή περιέχει μία μόνο μέθοδο. Επιπλέον, η αρχική ομαδοποίηση αποθηκεύεται σε μια λίστα, Llnit (γραμμές 3-6). Στη συνέχεια, η λίστα L lnit αποθηκεύεται σε μια λίστα μετώπου, L Front. Η λίστα μετώπου με τη σειρά της προστίθεται στη λίστα L_AU_I. Η λίστα μετώπου περιέχει τις διεπαφές μεταξύ των οποίων θα υπολογίζεται η απόσταση σε κάθε βήμα της επαναληπτικής διαδικασίας που ακολουθεί (γραμμές 9-39). Για τον υπολογισμό της απόστασης κάθε ζεύγους διεπαφών, //. h, υπολογίζονται όλες οι αποστάσεις Jaccard, d, μεταξύ των μεθόδων των δύο διεπαφών (γραμμές 13-18). Ορίζουμε την απόσταση d, μεταξύ δύο μεθόδων, s και t, ως την απόσταση Jaccard, Jd μεταξύ των συνόλων, Us και Ut, των κλάσεων-χρηστών τους, ως: c/(s,f )= / «/,,ί /, ) = Ε ξ. 3.1 Είναι προφανές ότι η απόσταση d, παίρνει τιμές από 0, μέχρι 1. Ισχύει d=0 όταν οι μέθοδοι s και t έχουν τα ίδια σύνολα κλάσεων-χρηστών και d= l όταν δεν έχουν καμία κοινή κλάση-χρήστη.

52 50 Η κάθε απόσταση d. αποθηκεύεται σε μια λίστα, L_Method Distances (γραμμή 16). Η απόσταση,,«/, μεταξύ των δύο διεπαφών, //, /?, υπολογίζεται από μια μέθοδο (γραμμή 19), Select Distance, με ορίσματα τη λίστα των αποστάσεων των μεθόδων τους και ένα κριτήριο, criterion, που έχει επιλεγεί από τον χρήστη. Η CBA χρησιμοποιεί πέντε (5) κριτήρια:.. Το κριτήριο του κοντινότερου γείτονα (Single Linkage Criterion). Με βάση αυτό το κριτήριο, η απόσταση μεταξύ δύο διεπαφών, //, h, ισούται με την ελάχιστη απόσταση μεταξύ κάθε ζεύγους μεθόδων, s, /, των δύο διεπαφών: dsl(i, / 2)= min d(sj). Επομένως, επιλέγεται το στοιχείο της λίστας L_Method_Distances με την ελάχιστη τιμή. Το κριτήριο του μακρινότερου γείτονα (Complete Linkage Criterion). ). Με βάση αυτό το κριτήριο, η απόσταση μεταξύ δύο διεπαφών, //, D, ισούται με τη μέγιστη απόσταση μεταξύ κάθε ζεύγους μεθόδων, s, /, των δύο διεπαφών:, / 2)= max d(s9t). Επομένως, επιλέγεται το στοιχείο της λίστας L_Method_Distances με τη μέγιστη τιμή. Το κριτήριο του μέσου όρου των αποστάσεων των γειτόνων (Average Linkage Criterion). Με βάση αυτό το κριτήριο, η απόσταση μεταξύ δύο διεπαφο)ν, //, ισούται με τη μέση τιμή των αποστάσεων μεταξύ κάθε ζεύγους μεθόδων, s, /, των δύο διεπαφών: ί/σν( /,, / 2)= Επομένως, επιλέγεται η μέση τιμή των στοιχείων της λίστας L M ethodd istances. Το κριτήριο του διάμεσου γείτονα (Median Linkage Criterion). Με βάση αυτό το κριτήριο, η απόσταση μεταξύ δύο διεπαφιόν, //, D, ισούται με τη διάμεση τιμή των αποστάσεων μεταξύ κάθε ζεύγους μεθόδων, s, /, των δύο διεπαφών: d me( l,, / 7)=med{d(s,t)\sinlx,tinl2}. Επομένους, επιλέγεται η διάμεση τιμή των στοιχείων της λίστας L Method Distances. Το κριτήριο της προσαρμοστικής απόστασης (Adaptive Linkage Criterion) [1]. Με βάση αυτό το κριτήριο, η απόσταση μεταξύ δύο διεπαφών, //, D, ισούται με μια από τις προηγούμενες αποστάσεις, ως εξής:

53 51 d co (/, *^2) ifo<dco(i j, / 2)< 1 if di0(l\, / 2) = 1 λ 0, / 2) < 1 if d me(i\ ^ 2) = I λ 0 <dav(i \, / 2) < 1 d μ(λ >^2)» If dm.(i.» / 2) = 1 λ 0 ^ d sj(i,, / 2) < 1 Στη συνέχεια, ο ιεραρχικός ενωτικός αλγόριθμος, υπολογίζει την ελάχιστη απόσταση μεταξύ όλων των διεπαφών της λίστας μετώπου. Επιπλέον, αποθηκεύει το ζεύγος των διεπαφών με την ελάχιστη τιμή απόστασης, m ini/, m inh, καθώς επίσης και τη συγκεκριμένη τιμή, f d (γραμμές 20-24). Η αρχική τιμή της μεταβλητής fd, ισούται με 1 (γραμμή 10), καθώς είναι η μέγιστη απόσταση μεταξύ δύο διεπαφών, σύμφωνα με την Εξίσωση (3.1). Αν η τελική τιμή της /#, είναι μικρότερη από 1 (γραμμή 27), γίνονται οι κατάλληλες ενημερώσεις, αλλιώς (fd=l), τερματίζει ο βρόγχος (γραμμές 37-38). Στην πρώτη περίπτωση, δημιουργείται μια νέα διεπαφή, στην οποία εισάγονται οι μέθοδοι των διεπαφών που συγχωνεύονται (γραμμές 28 και 31). Η νέα διεπαφή προστίθεται στη λίστα μετώπου και στη λίστα L AII I (γραμμή 31). Επιπρόσθετα, οι διεπαφές, m in ju m in j 2, εξάγονται από τη λίστα μετώπου (γραμμή 36), καθώς, μετά τη συγχώνευσή τους δεν θα πρέπει πλέον να λαμβάνονται υπόψη στον υπολογισμό των αποστάσεων μεταξύ διεπαφών. Η όλη διαδικασία τερματίζει όταν το μέγεθος της λίστας μετώπου γίνει ίσο με 1 (γραμμή 9), αφού δεν έχει νόημα ο υπολογισμός απόστασης μεταξύ ενός πλήθους διεπαφών, μικρότερο του 2. Τελικά, επιστρέφεται η λίστα, L_All_I, που περιέχει όλες τις διεπαφές που έχουν δημιουργηθεί κατά την πρώτη φάση της CBA.

54 in p u t: UPM: Mdtim ap O utput: L_All_I: List < Interface > 1. L^Init:List < Interface > 2. L_Front: List < Interface > HBegin with singleton interfaces 3. for all Method_Decl in UPM do 4. i = CreateJnterfaceQ 5. L_Init.add(i) 6. endfor 7. L_Front.addAll(LJkit) 8. L_All_LaddAll(LJFront) ίίcompute distances between interfaces 9. while(j L_Front > 1) do 10. fd = I 11. for all IYin L _ Front do 12. for all 12 in L_ Front do 13. for all Method_Decl1 in Jj do 14. for all Method _Decl2 in 13 do 15. d - Jaccard(Method_Decll, Method_Ded2) 16. L _ Meth od _ Di stances. add(d) 17. endfor 18. endfor 19. sd = Select_Distance(L_Method_Distances, criteri on) endfor 26. endfor If Find interfaces with minimum distance if (sd < fd ) d im end if fd-sd min_ij = Ij min_i2 = 12

55 if (fd < 1) then II merge interfaces with minimum distance and update L_Front,L_All 28. m_i = CreateJnterfaceO 29. m _ I childmin_il 30. m _ J.child2= min_i2 31. m _ I.addAll(min_I^ListOft^ethodJDecl, min_j2.listofmethod_decl) 32. m in JYparent = m_i 33. min_i2.parent = m_i 34. L_Front. add(m_!) 35/ L_All ta d d fm j) SC L_Front.remove(min_Ij, min_i2) 37. else // stop clustering i f fd = l 38. break 39. end while 40. return L_All_I Αλγόριθμος 1. Πρώτη φάση της CBA. Σύμφωνα με τα παραπάνω, η CBA θα έχει ως αποτέλεσμα η αρχική σχεδίαση του Σχήματος 1.1 να μετατραπεί όπως φαίνεται στο Σχήμα 3.5. Στη συγκεκριμένη περίπτωση, έχει επιλεγεί το κριτήριο του κοντινότερου γείτονα.

56 54 Σχήμα 3.5 Σχεδίαση μετά την εφαρμογή της CBA με το κριτήριο single linkage. Η δεύτερη φάση της CBA δέχεται ως είσοδο μια δομή δεδομένοι, MPU (MethodsPerUser), που περιέχει την πληροφορία, ποιες είναι οι μέθοδοι της κλάσης που χρησιμοποιεί κάθε κλάση-χρήστης. Η πληροφορία αυτή, έχει παραχθεί από τη συντακτική ανάλυση του προγράμματος η οποία περιγράφεται στο κεφάλαιο 4. Επιπλέον, δέχεται ως είσοδο, τη λίστα, L All I, που περιέχει όλες τις διεπαφές που έχουν δημισυργηθεί κατά την πρώτη φάση της CBA. Στόχος της δεύτερης φάσης,

57 55 είναι να επιλεχθούν για κάθε κλάση-χρήστη μιας κλάσης οι διεπαφές που χρειάζεται. Δηλαδή, να επιλεχθούν οι διεπαφές που περιέχουν τις μεθόδους της κλάσης που χρησιμοποιεί η κάθε κλάση-χρήστης. Η επιλογή αυτή μπορεί να πραγματοποιηθεί με δύο τρόπους. Ο πρώτος τρόπος είναι να επιλεγεί ο ελάχιστος αριθμός διεπαφών που περιέχουν τις μεθόδους που χρησιμοποιεί η κάθε κλάση-χρήστης. Στην περίπτωση αυτί'] όμως, είναι πιθανόν οι διεπαφές που επιλέγονται, να περιέχουν, εκτός από τις παραπάνω μεθόδους, μεθόδους που δεν χρησιμοποιεί η εκάστοτε κλάση-χρήστης. Με αυτόν τον τρόπο επιλογής, ελαχιστοποιείται η σύζευξη της κάθε κλάσης με τις αντίστοιχες κλάσεις-χρήστες της, αλλά με το πιθανό κόστος ανάθεσης περισσότερων μεθόδων από όσες χρειάζεται η κάθε κλάση-χρήστης. Ο δεύτερος τρόπος είναι να επιλεγεί το απαιτούμενο πλήθος διεπαφών μιας κλάσης, έτσι ώστε το σύνολό τους, να περιέχει ακριβώς όσες μεθόδους χρησιμοποιεί η κάθε κλάση-χρήστης. Στην περίπτωση αυτή όμως, είναι πιθανόν το πλήθος των διεπαφών που επιλέγονται να είναι μεγαλύτερο από ό,τι με τον πρώτο τρόπο επιλογής. Με τον δεύτερο τρόπο επιλογής, ελαχιστοποιείται (για την ακρίβεια μηδενίζεται) το πλήθος των ανατιθέμενων μεθόδων μιας κλάσης χωρίς να τις χρησιμοποιεί η κάθε κλάσηχρήστης, αλλά με το πιθανό κόστος της μεγαλύτερης σύζευξης σε σχέση με τον πρώτο τρόπο επιλογής. Επομένως, παρατηρούμε ότι σε κάθε τρόπο επιλογής των απαιτούμενων διεπαφών εμφανίζεται ένας συμβιβασμός (trade-off) μεταξύ σύζευξης και πλήθους περιττών ανατιθέμενων μεθόδων, για κάθε κλάση-χρήστη. Για να ποσοτικοποιήσουμε τα εν λόγω μεγέθη, θα περιγράφουμε τις μετρικές ACD και CBO που χρησιμοποιούνται για την επιλογή των διεπαφών για κάθε κλάση-χρήστη. Καταρχήν, με τον όρο σύζευξη (coupling) εννοούμε το βαθμό εξάρτησης μεταξύ κλάσεων και γενικότερα συστατικών ενός λογισμικού που μπορεί να προκύπτει από διάφορες αιτίες, όπως κλήση μεθόδων και πέρασμα παραμέτρων από το ένα συστατικό, σε ένα άλλο. Υπάρχει ένα εύρος μετρικών για την ποσοτικοποίηση της

58 56 σύζευξης, των οποίων χρησιμοποιείται στην παρούσα διατριβή η Coupling Between Objects classes (CBO) [2]. Για μια κλάση-χρήστη Α, ισχύει ότι η τιμή της CBO ισούται με το πλήθος των κλάσεων που χρησιμοποιεί η Α. Όσο μεγαλύτερη είναι η τιμή της CBO για μια κλάση, τόσο φθίνει μια σειρά από παράγοντες που επηρεάζουν την ποιότητα του λογισμικού. Το κόστος της συντήρησης της κλάσης αυξάνεται, διότι εξαρτάται από πολλές άλλες κλάσεις και επηρεάζεται συχνά από αλλαγές. Το κόστος για. τον έλεγχό της αυξάνεται, εξαιτίας της εξάρτησής της από τις άλλες κλάσεις. Τέλος, η επαναχρησιμοποίηση της γίνεται πιο δύσκολη, καθώς η λειτουργία της είναι πολύ συγκεκριμένη και εξαρτάται και από τη λειτουργία των άλλων κλάσεων. Επομένως, είναι λιγότερο πιθανό να μπορεί να χρησιμοποιηθεί εύκολα για την επίλυση και κάποιου άλλου προβλήματος. Συμπεραίνουμε λοιπόν ότι όσο μικρότερη είναι η τιμή της CBO, τόσο καλύτερη είναι η σχεδίαση, άρα και η ποιότητα του λογισμικού. Για μια κλάση Α που χρησιμοποιεί μεθόδους μιας κλάσης Β, η Actual Context Distance (ACD) [11] ορίζεται ως εξής: ACDiA)= Ρ{Η) '(Α) Εξ. 3.2 Put) Όπου, ο όρος ρ (β> εκφράζει το πλήθος των μεθόδων της κλάσης Β που ανατίθενται στην κλάση Α, πριν την επιλογή των διεπαφών για την κλάση Α, δηλαδή το σύνολο όλων των μεθόδων της κλάσης Β. Ο όρος i(a) εκφράζει το πλήθος των μεθόδων που ανατίθενται στην κλάση Α, μετά την επιλογή των διεπαφών για την κλάση Α. Δηλαδή, η ACD δείχνει την ποσοστιαία μείοοση τοον μεθόδων που ανατίθενται στην κλάση Β, με βάση τις επιλεχθέντες διεπαφές. Συμπεραίνουμε λοιπόν ότι, γενικά, όσο μεγαλύτερη είναι η τιμή της ACD, τόσο καλύτερη είναι η ποιότητα του λογισμικού. Κατά τη δεύτερη φάση της CBA, αρχικά, για κάθε κλάση-χρήστη μιας κλάσης, δημιουργείται μια διεπαφή, στην οποία προστίθενται οι μέθοδοι της κλάσης που χρησιμοποιεί η κλάση-χρήστης (γραμμές 1-7). Δηλαδή, δημιουργούνται οι διεπαφές που αντιστοιχούν σε κάθε κλάση-χρήστη της κλάσης. Κάτι τέτοιο είναι εφικτό, μέσο3

59 57 της δομής δεδομένων. MPU. Η λίστα. L_All_l, έχει δενδρική μορφή, εξαιτίας των συγχωνεύσεων των διεπαφών. Για το λόγο αυτό αποθηκεύονται όλες οι διεπαφές, //, της εν λόγω λίστας, που είναι ρίζες υπο-δένδρων (θεωρούμε μια διεπαφήαπομονωμένο κόμβο ως υπο-δένδρο μηδενικού ύψους) στη λίστα LRootsAndlsolated. Συνεχίζοντας την ανάλυση της δεύτερης φάσης του αλγορίθμου της CBA. διακρίνουμε τις δύο περιπτώσεις όσον αφορά την επιλογή των διεπαφών για κάθε χρήστη. Στην πρώτη περίπτωση (γραμμές 14-28). η επιλογή γίνεται με τέτοιον τρόπο ώστε η μεγάλη τιμή της CBO να αντισταθμίζεται από μεγάλη τιμή της ACD. Επίσης, υπολογίζεται το συνολικό πλήθος. /;. των μεθόδων που προσφέρει η κλάση (γραμμή 14). Για κάθε κλάση που χρησιμοποιεί μια άλλη κλάση, πραγματοποιείται η επιλογή των διεπαφών που της αντιστοιχούν με τη μέθοδο Select_Μαχ Interfaces (γραμμή 19). Η μέθοδος αυτή, ξεκινά την αναζήτηση των κατάλληλων διεπαφών από τη ρίζα κάθε υπο-δένδρου και καλείται αναδρομικά για το δεξί και το αριστερό παιδί της. Η μέθοδος επιστρέφει όταν εντοπίσει διεπαφές που περιέχουν μόνο μεθόδους που χρησιμοποιεί η κλάση-χρήστης. Η διαδικασία αυτή, είναι δυνατό να συνεχιστεί μέχρι τις τετριμμένες ομάδες-φύλλα. Η λίστα L Max Selected_/, έχει ως αποτέλεσμα τη λίστα των διεπαφών που αντιστοιχούν στην κλάση-χρήστη. Οι διεπαφές της λίστας L Max Selected I προστίθενται στη λίστα totalm axj και χρησιμοποιείται για την περίπτωση κατά την οποία το σύνολο των μεθόδων της κλάσης χρήστη καλύπτεται από διεπαφές που ανήκουν σε διαφορετικά υπο-δένδρα. Εν συνεχεία, υπολογίζονται τα ACDma\ και CBOmax (γραμμές 26-27), αφού υπολογιστεί το πλήθος των μεθόδων των διεπαφών που έχουν επιλεγεί για τον κάθε χρήστη, /. Γίνεται αντιληπτό ότι, με τον τρόπο που έχει γίνει η επιλογή των εν λόγω διεπαφών η τιμή του / θα ισούται με το πλήθος των μεθόδων της κλάσης, που χρησιμοποιεί η κλάση-χρήστης. Αυτός είναι ο λόγος που η τιμή της ACD αναμένεται να είναι μεγαλύτερη από την περίπτωση που ακολουθεί, καθώς από το συνολικό πλήθος των μεθόδων της κλάσης provider αφαιρούνται μόνο τόσες μέθοδοι, όσες χρησιμοποιεί η κλάση client. Για να γίνει ξεκάθαρη η παραπάνω διαδικασία, θα την εξετάσουμε με ένα παράδειγμα. Στο Σχήμα 3.6 φαίνεται η μετατροπή της αρχικής σχεδίασης του Σχήματος 1.1 μετά την εφαρμογή της CBA με το κριτήριο complete linkage.

60 58 Γνωρίζουμε ότι στο παράδειγμά μας, με βάση την υλοποίηση του συστήματος του Σχήματος 1.1 η κλάση Client D χρησιμοποιεί τις μεθόδους m2(). m5() και m6() της κλάσης Provider. Σύμφωνα με την παραπάνω διαδικασία, η μέθοδος Select Max Interfaces ξεκινά την αναζήτηση των διεπαφών που περιέχουν μόνο μεθόδους της κλάσης Client D από τη ρίζα κάθε υπο-δένδρου. Οι ρίζες αυτές (διεπαφές με id 6.7,8) ανήκουν στη λίστα LRootsAndlsolated. Επομένως, ξεκινώντας από τη διεπαφή με id 8, θα επιστρέφει τη διεπαφή με id 8 που περιέχει τις μεθόδους m2(), m6() και ξεκινώντας από τη διεπαφή με id 6, θα επιστρέφει τη διεπαφή με id 4 που περιέχει τη μέθοδο m5(). Σχήμα 3.6 Σχεδίαση μετά την εφαρμογή της CBA με το κριτήριο complete linkage. Στη δεύτερη περίπτωση (γραμμές 29-42), η επιλογή γίνεται με τέτοιον τρόπο ώστε η μικρή τιμή της ACD να αντισταθμίζεται από μικρή τιμή της CBO. Για κάθε κλάσηχρήστη που χρησιμοποιεί μια άλλη κλάση, πραγματοποιείται η επιλογή των διεπαφών που της αντιστοιχούν σύμφωνα με έναν έλεγχο (γραμμή 32). Εάν μια διεπαφή που ανήκει στη λίστα L RootsAndlsolated περιέχει τουλάχιστον μία μέθοδο από κοινού με τις μεθόδους που χρησιμοποιεί η κλάση client, τότε η διεπαφή αυτή προστίθεται στη λίστα L_Min Selected_/. Όπως γίνεται αντιληπτό, πιθανότατα, η διεπαφή ή οι διεπαφές που επιλέγονται με αυτόν τον τρόπο περιέχουν, επιπλέον, μεθόδους που δεν χρησιμοποιούνται από την κλάση client. Αυτός είναι ο λόγος που η τιμή της ACD αναμένεται να είναι μικρότερη ό,τι στην προηγούμενη περίπτωση, καθώς από το συνολικό πλήθος των μεθόδων της κλάσης provider αφαιρούνται τόσες μέθοδοι, όσες

61 59 χρησιμοποιεί η κλάση client και ενδεχομένως ορισμένες επιπλέον που δεν χρησιμοποιεί. Για να γίνει ξεκάθαρη η παραπάνω διαδικασία, θα την εξετάσουμε με το ίδιο παράδειγμα. Στο Σχήμα 3.6 φαίνεται η μετατροπή της αρχικής σχεδίασης του Σχήματος 1.1 μετά την εφαρμογή της CBA με το κριτήριο complete linkage. Σύμφωνα με την παραπάνω διαδικασία, ο έλεγχος (γραμμή 32) θα έχει ως αποτέλεσμα για την κλάση Client D να επιλεγούν οι διεπαφές με id 8 και 6. Παρατηρούμε ότι, από τις διεπαφές που επιλέχθηκαν, εκείνη με id 8 περιέχει μόνο μεθόδους που χρησιμοποιεί η κλάση Client D. Αντίθετα, η διεπαφή με id 6, εκτός από την μέθοδο m5(), που χρησιμοποιεί η κλάση Client D, περιέχει και άλλες, επιπλέον μεθόδους που δεν χρησιμοποιεί (τη μέθοδο m4()).

62 60 Input :M P U :Multimap. L_A ll_i: List < Interface > II Createinterfaces fo rth eu se rso f the class with the methods they use 1. for all User in M PU do 2. i = CreateJnterfaceQ 3. for all M ethod J n v in User do 4. i.add(m ethod _ Inv) 5. eudfor 6. L _ Users O f Class.add(i) 7. endfor II Add root and isolated interfaces in a list 8. L _ RootsAndlsolated List < Interfaces > 9. for a ll/7 in L _ A l_ I do 10. if Q xparent == ««//) then 11. _ Ro otsandls olated.add ( /,) 12. end if 13. endfor / / Select max no. o / interfaces but max improvement 14. p = M ethod_ DeclOfClass \ 15. for a l l in L_UsersOfClass do 16. _ M ax: _ Selected _ I : /s < Interface > 17. totalmax _ I : I/sf < Interface > 18. for all I 2 in L _ RootsAndlsolated do 19. _ Max _ Selected _ I = _ M ax_ Interfaces^! 2, J2) 20. totalm ax _ I.addAll(L _ Max _ Selected _ J) 22. endfor 22. i = for all 7; xh totalm ax _ / do 24. j = / + 11 j.listofmethod _Decl 25. endfor 26. ^CZ) ffl= (p -0 / p 27. CBOmax= totalm ax _ endfor

63 61 ff Select min number o f interfaces but min imparovement 29. for all/j in L JJsersO fc lass do 30. L _ Min _ Selected _ 1 : List < Interface > 31. for all 12 in L _ RootsAndlsolated do 32. if ( Ix.ListOfMethod _ Decl n! 2.ListOfM ethod_ Decl > 0) then 33. L _ Min _ Selected _ I.add(I2) 34. end if 35. endfor 36. / = for all/j in M in _ S elected_7) do 38. i = x + 11 ylistofmethod _ Zted 39. endfor 40. ACDMin= ( p - i ) / p 41. Z _ Min _ Selected _ endfor Αλγόριθμος 2. Δεύτερη φάση της CBA. 3.3 Refactoring Based Approach (RBA) Θεοψητικό υπόβαθρο H RBA αποτελείται από δύο φάσεις που κάθε μία βασίζεται σε μία τεχνική ανακατασκευής. Η προπη φάση της εμπνέεται από την Εξαγωγή Διεπαφής (Extract Interface) και η δεύτερη από την Εξαγωγή Υπερκλάσης (Extract Superclass). Έχει γίνει ήδη αναφορά στις δύο τεχνικές στην υποενότητα 2.4.5, ωστόσο εδώ θα τις μελετήσουμε πιο αναλυτικά εξαιτίας της σημασίας τους στον αλγόριθμο της RBA. Η Εξαγωγή Διεπαφής λύνει το πρόβλημα της χρησιμοποίησης του ίδιου συνόλου public μεθόδων μιας κλάσης από διάφορες άλλες κλάσεις. Επίσης, αντιμετωπίζει την περίπτωση που δύο ή περισσότερες κλάσεις έχουν public μεθόδους με τα ίδια πρωτότυπα. Η συγκεκριμένη τεχνική, προτείνει τη δημιουργία μιας διεπαφής που περιλαμβάνει τις εν λόγω μεθόδους. Τα βήματα που ακολουθεί είναι τα εξής:

64 62 Δημιουργία μιας διεπαφής. Ορισμός των κοινών μεθόδων στη διεπαφή. Μετατροπή των αρχικών κλάσεων με τέτοιον τρόπο, ώστε να υλοποιούν τη διεπαφή. Μετατροπή των κλάσεων που χρησιμοποιούν μόνο τις κοινές μεθόδους των «αρχικών κλάσεων με τέτοιον τρόπο, ώστε να χρησιμοποιούν τη διεπαφή, αντί για τις αρχικές κλάσεις. Στο Σχήμα 3.7 φαίνεται ένα παράδειγμα εφαρμογής της τεχνικής. Αρχικά, διάφορες κλάσεις-χρήστες χρησιμοποιούν τις μεθόδους getrate() και hasspecialskill() της κλάσης Employee. Μετά την εφαρμογή προκύπτει η σχεδίαση του δεξιού τμήματος του Σχήματος 3.7. Πλέον, μετά τις κατάλληλες ενέργειες, οι κλάσεις-χρήστες χρησιμοποιούν τη διεπαφή Billable αντί της κλάσης Employee. «interface» Billable Employee getrate hasspecialskill getrate hasspeciatskil gelname geldepartment I Employee getrate hasspecialskill getname getdepartment Σχήμα 3.7 Παράδειγμα εφαρμογής της τεχνικής ανακατασκευής: Εξαγωγή Διεπαφής.

65 63 Η Εξαγωγή Υπερκλάσης λύνει το πρόβλημα που εμφανίζεται όταν δύο ή περισσότερες κλάσεις έχουν παρόμοια συστατικά (πεδία ή/και μεθόδους). Το πρόβλημα αυτό, είναι πιθανό να προκόψει από την εφαρμογή της Εξαγωγής Διεπαφής. Η συγκεκριμένη τεχνική, προτείνει τον ορισμό μιας βασικής κλάσης και μετακίνηση των κοινών συστατικών σε αυτήν. Τα βήματα που ακολουθεί είναι τα εξής: ' Ορισμός μιας βασικής κλάσης και μετατροπή των αρχικών κλάσεων σε υποκλάσεις της νέας κλάσης. Σταδιακή μετακίνηση στη βασική κλάση των κοινών συστατικών με χρήση των τεχνικών ανακατασκευής Pull Up Method και Pull Up Field. ο Αν στις υποκλάσεις τα συστατικά έχουνε παρόμοια ονόματα και πρωτότυπα, χρησιμοποίηση πρώτα των τεχνικών Rename Field και Rename Method. ο Αν στις υποκλάσεις οι μέθοδοι έχουν ίδια πρωτότυπα, αλλά διαφορετική υλοποίηση, ορισμός στη βασική κλάση μιας αφηρημένης μεθόδου. Εκτέλεση μεταγλώττισης (compile) και ελέγχου (test) μετά από κάθε μετακίνηση. Εξέταση αν οι μέθοδοι που παρέμειναν στις υποκλάσεις έχουν κοινά τμήματα κοόδικα. Στην περίπτωση που αυτό ισχύει, χρησιμοποίηση των τεχνικών Extract Method και Pull Up Method. Εξέταση των κλάσεων που χρησιμοποιούν τις αρχικές κλάσεις. Στην περίπτωση που χρησιμοποιούν μόνο τα κοινά συστατικά που πλέον ανήκουν στη βασική κλάση, χρησιμοποίηση της βασικής κλάσης, αντί των αρχικών κλάσεων. Στο Σχήμα 3.8 φαίνεται ένα παράδειγμα εφαρμογής της τεχνικής. Αρχικά, οι κλάσεις Department και Employee έχουν κοινές τις μεθόδους getannualcost() και getname(). Μετά την εφαρμογή προκύπτει η σχεδίαση του δεξιού τμήματος του Σχήματος 3.8. Πλέον, μετά τις κατάλληλες ενέργειες, οι κλάσεις Department και Employee επεκτείνουν μια βασική κλάση Party που περιέχει τις κοινές μεθόδους τους.

66 64 Depmtment gatoumrnuacost gename gaheadcon* Employee getannualcost ganeme 9««Σχήμα 3.8 Παράδειγμα εφαρμογής της τεχνικής ανακατασκευής: Εξαγωγή Υπερκλάσης Αλγόριθμος Η RBA υλοποιείται από μια επαναληπτική διαδικασία, δύο φάσεων, για όλες τις κλάσεις του συστήματος. (Αλγόριθμος 3). Κατά την πρώτη φάση, δημιουργούνται οι διεπαφές που αντιστοιχούν σε κάθε κλάση-χρήστης της κλάσης. Κάτι τέτοιο είναι εφικτό, μέσω μιας δομής δεδομένων, MPU (MethodsPerUser), που περιέχει την πληροφορία, ποιες είναι οι μέθοδοι της κλάσης που χρησιμοποιεί κάθε κλάσηχρήστης. Η πληροφορία αυτή, έχει παραχθεί από τη συντακτική ανάλυση του προγράμματος η οποία περιγράφεται στο Κεφάλαιο 4. Κατά τη δεύτερη φάση, λύνεται το πρόβλημα της επανάληψης μεθόδων που πιθανόν να εμφανίζεται στις διεπαφές που δημιουργήθηκαν. Όταν δύο διεπαφές χρησιμοποιούν κοινές μεθόδους ορίζεται μια νέα βασική διεπαφή, στην οποία μετακινούνται οι κοινές μέθοδοι. Πιο συγκεκριμένα, η CBA δέχεται ως είσοδο τη δομή δεδομένων, MPU. και η έξοδός της, είναι μια λίστα, LAIIL με όλες τις διεπαφές που έχουν δημιουργηθεί.

67 65 Αρχικά, κατά την πρώτη φάση της RBA. για κάθε κλάση-χρήστη μιας κλήσης δημιουργείται μια διεπαφή, στην οποία προστίθενται οι μέθοδοι που χρησιμοποιεί η κλάση-χρήστης (γραμμές 3-7). Κατά τη δεύτερη φάση της RBA. η κάθε διεπαφή προστίθεται σε μια λίστα LJnit. Στη συνέχεια, η λίστα L Jn it αποθηκεύεται σε μια λίστα μετώπου, L Front. Η λίστα μετώπου με τη σειρά της προστίθεται στη λίστα LAIIJ. Η λίστα μετώπου περιέχει τις* διεπαφές μεταξύ των οποίων θα υπολογίζεται η απόσταση σε κάθε βήμα της επαναληπτικής διαδικασίας που ακολουθεί (γραμμές 12-65). Για τον υπολογισμό της απόστασης κάθε ζεύγους διεπαφών. //, Α>, υπολογίζονται οι αποστάσεις Jaccard, </, μεταξύ των όλων των διεπαφών (γραμμές 15-17). Ορίζουμε την απόσταση </, μεταξύ δύο διεπαφών, // και /.\ ως την απόσταση Jaccard, Jd μεταξύ των συνόλων. Ό\ και ΕΕ. των μεθόδων τους, ως: ι J ^ n ^ I Εξ. 3.3 ν 1 2,Λ 1 1 /,υ Ι /, Είναι προφανές ότι η απόσταση d. παίρνει τιμές από 0, μέχρι 1. Ισχύει d=0 όταν οι διεπαφές, // και /?, έχουν τα ίδια σύνολα μεθόδων και d-ι όταν δεν έχουν καμία κοινή μέθοδο. Στόχος είναι να υπολογιστεί το ζεύγος διεπαφών. m in ji, min i >, με τη μικρότερη απόσταση, fd, μεταξύ τους (γραμμές 26-31). Σε περίπτωση που υπάρχουν παραπάνω του ενός ζεύγη διεπαφών με απόσταση ίση με την ελάχιστη, επιλέγεται, από αυτά, το ζεύγος που επιπλέον έχει και το μέγιστο πλήθος κοινών μεθόδων (γραμμές 19-25). Η αρχική τιμή της μεταβλητής Jd. ισούται με 1 (γραμμή 13), καθώς είναι η μέγιστη απόσταση μεταξύ δύο διεπαφών. σύμφωνα με την Εξίσωση (3.3). Αν η τελική τιμή της fd. είναι μικρότερη από 1 (γραμμή 34). γίνονται οι κατάλληλες ενημερώσεις, αλλιώς (#/=/), τερματίζει ο βρόγχος (γραμμές 63-64). Στην πρώτη περίπτωση, εξετάζεται το ενδεχόμενο οι επιλεχθείσες διεπαφές, m in ji, min i:, να έχουν το ίδιο σύνολο μεθόδων. Εάν αυτό ισχύει, δεν δημιουργείται νέα διεπαφή, αλλά διαγράφεται από τις λίστες L Front, L AII I μία εκ των διεπαφών, min j i, min i 2 (γραμμές 36-

68 66 43). Ένα άλλο ενδεχόμενο που εξετάζεται, είναι αν το σύνολο των κοινών μεθόδων, intersection, των επιλεχθέντων διεπαφών να είναι ίδιο με το σύνολο των μεθόδων μιας εκ των δύο διεπαφών. Εάν αυτό ισχύει, για παράδειγμα για τη διεπαφή, min i/, δεν δημιουργείται νέα διεπαφή, αλλά η διεπαφή min h γίνεται παιδί της min i/ και διαγράφεται από τη λίστα L Front (γραμμές 44-47). Αντίστοιχα ισχύουν και για τη διεπαφή m in j} (γραμμές 48-51). Σε περίπτωση που δεν ισχύει κάποιο από τα παραπάνω ενδεχόμενα, δημιουργείται μια νέα διεπαφή (γραμμή 53). Οι επιλεχθείσες διεπαφές, min i/, min i 2, γίνονται παιδιά της νέας διεπαφής και προστίθενται σε αυτήν, οι κοινές μέθοδοί τους (γραμμές 54-58). Επιπλέον, η νέα διεπαφή προστίθεται στη λίστα μετώπου και στη λίστα L_AU_I (γραμμή 58). Επιπρόσθετα, οι διεπαφές, min i/, m in j 2, εξάγονται από τη λίστα μετώπου (γραμμές 59-60), καθώς, δεν θα πρέπει πλέον να λαμβάνονται υπόψη στον υπολογισμό των αποστάσεων μεταξύ διεπαφών. Η όλη διαδικασία τερματίζει όταν το μέγεθος της λίστας μετώπου γίνει 1 (γραμμή 12), αφού δεν έχει νόημα ο υπολογισμός απόστασης μεταξύ ενός πλήθους διεπαφών, μικρότερο του 2. Τελικά, επιστρέφεται η λίστα, LAIII, που περιέχει όλες τις διεπαφές που έχουν δημιουργηθεί κατά την πρώτη και δεύτερη φάση της RBA.

69 67 Input :M PU:Multimqp Output :L_AU_J: List < Interface > 1. L _ Init: List < Interface > 2. Z _.PVoMf: Z/sf < Interface > / / Phcze I.Create interfaces for the users o f the class with the methods they use 3. for all User in MPU do 4. i = Create JnterfaceQ 5. for all A/etfiodJwv /n User do 6. iadd{method _ Inv) 7. end for 8. LJnit.add(i) 9. end for // Tftaze 2: Extract superclasses from interfaces with common methods 10. LFront.addA\\(LMt) 11. L_A\\ _ I adda\\(l Front) 12. while QL_Fyont\>\) do 13. fdmj 14. NCommonMethods = 0 //Compute distances between interfaces 15. fo r a ll/j in L^Front do 16. for all 7 } in L^Front do 17. d = Jaccard{Ix,I2) 18. intersection=\i x.listofmethod _ Dec1 η I ylistofmethod _ Dec! IP. // Find interfaces with minimum distance and man common methods jf{d==fd) tlien if {intersection > NCommonMethods) then fd = d min_i} = It min_i2= 7, NCommonMethods «intersection end if if(d<fd) then fd = d m in j, = I } m in j} = 7j NCommonMethods «intersection end if 32. end for 33. end for

70 ifo H cl) then 35. intersection= minj, ListOfMethod _ Decl r> m inj,.listofmethod _ Decl // I f both selected interfaces have the same set o f methods delete the one with less children 36. if (intersection = ( minj,.listofmethod _ Decl \ &.& m inj,.listofmethod _ Decl ) then 37. iff \minj,. ListOfChildren > m in j.. ListOfChildren ) then L_AU_ Lremove(min_f) 39. L _ Front.remove(min_I: ) 40. eke 41. L_AUJ. remove (min_i,) 42 * L_Front. remove(min_i,) 43: end if 44. eke if (intersection ( m in j,. ListOfMethodJ)ecl ) tlien 45. minj,.listcfcfoildren.add(minj, ) 46. mmj..parent = minj. 47. L_Front. remove ( mini.) 48. eke if (intersection == ( minj).listofmethod _ Decl ) then 49. minj) listofuhildrenadd( m in j,) 50. m m jl Parent = m inj, 51. L _ Front remove(minjx) 52. eke f! merge interfaces with minimum distance and update L_Front, L_A m_i*= Create _ Interface m_l.child1= m lnjl 55. m_i.child)** minj, 56. minji.parent=m_i 57. m injj.parent=m_i 58. m _ I.addAU (intersection) 59. L_Front.add(mJ) 60. L_AllJ.add(mJ) 61. LJ*Yont.remove(minJ,, m in j,) 62. end if 63. else 64. break fill stop clustering if fd == end while 66. return! Ail I Αλγόριθμος 3. Ο αλγόριθμος της RBA. Σύμφωνα με τα παραπάνω, η πρώτη φάση της RBA θα έχει ως αποτέλεσμα η αρχική σχεδίαση του Σχήματος 1.1 να μετατραπεί όπως φαίνεται στο Σχήμα 1.2. Ακόμη, εφαρμόζοντας τη δεύτερη φάση της RBA, παρατηρούμε ότι η σχεδίαση του Σχήματος 1.2, έχει ως αποτέλεσμα τη σχεδίαση του Σχήματος 1.3.

71 69 ΚΕΦΑΛΑΙΟ 4. ΕΡΓΑΛΕΙΟ ΑΥΤΟΜΑΤΗΣ ΑΝΑΚΑΤΑΣΚΕΥΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΩΝ ΔΙΕΠΑΦΩΝ 4.1 Αρχιτεκτονική 4.2 Εγκατάσταση του εργαλείου 4.1 Αρχιτεκτονική Η αρχιτεκτονική του εργαλείου αυτόματης ανακατασκευής προγραμματιστικών διεπαφών που υλοποιήθηκε φαίνεται στο Σχήμα 4.1. Σχήμα 4.1 Αρχιτεκτονική του συστήματος αυτόματης ανακατασκευής προγραμματιστικών διεπαφών.

72 70 Κάθε υποσύστημα αναλύεται στις επόμενες υποενότητες Υποσύστημα GUI Το υποσύστημα GUI (Graphical User Interface) προσφέρει στον χρήστη του συστήματος μια γραφική διεπαφή, στην οποία έχει τη δυνατότητα να ρυθμίσει διάφορες επιλογές. Αρχικά, ο χρήστης μπορεί να επιλέξει τον αλγόριθμό της προτίμησής του. Μια από τις δυνατότητες είναι η επιλογή της ομαδοποίησης που θα χρησιμοποιηθεί για την CBA. Όπως έχουμε αναφέρει στο Κεφάλαιο 3, οι επιλογές είναι πέντε (5): Το κριτήριο του κοντινότερου γείτονα (Single). Το κριτήριο της μέσης τιμής των αποστάσεων των γειτόνων (Average). Το κριτήριο του μακρινότερου γείτονα (Complete). Το κριτήριο του της διάμεσης τιμής των αποστάσεων των γειτόνων (Median). Το κριτήριο της προσαρμοστικής απόστασης (Adaptive). Οι επιλογές αυτές φαίνονται στο τμήμα 1 του Σχήματος 4.2. Μια άλλη δυνατότητα που προσφέρει η γραφική διεπαφή του εργαλείου, είναι η αποθήκευση των αρχείων γραφικής απεικόνισης (τμήμα 4 Σχήματος 4.2). Πατώντας το κουμπί «Browse», ανοίγει ένα παράθυρο διαλόγου όπου μπορεί να εισέλθει στο φάκελο που επιθυμεί να αποθηκευτούν και στη συνέχεια να επιλέξει «Save». Το Σχήμα 4.3 παρουσιάζει ένα παράδειγμα αποθήκευσης των αρχείων στο φάκελο «graphical». Αντίστοιχα ισχύουν και για την αποθήκευση των αρχείων στατιστικών δεδομένων (τμήμα 5 του Σχήματος 4.2).

73 71 Σχήμα 4.2 Η γραφική διεπαφή του εργαλείου. e C h o o s e F o l d e r S» e h C 3 s t a t i s t i c a l H e game: Hesoflwe: 5lTCinefroa pvqtfc{teclfrse-rtp-in<figo-sr1-wln32vecfipse\st3tistical! Save C a n c e l Σχήμα 4.3 Παράδειγμα επιλογής φακέλου για την αποθήκευση των αρχείων.

74 Υποσύστημα Refactoring Η λειτουργία του υποσυστήματος Refactoring περιλαμβάνει την εφαρμογή των διαδικασιών της CBA και RBA, που έχουν περιγράφει αναλυτικά στο Κεφάλαιο 3, στο υπό ανακατασκευή πρόγραμμα. Ο χρήστης, επιλέγοντας το κουμπί «Refactor», εκκινεί η διαδικασία επεξεργασίας του προγράμματος που δέχεται ως είσοδο το εργαλείο και η ροή ελέγχου περνά στα υπόλοιπα συστατικά της αρχιτεκτονικής του (τμήμα 6 του Σχήματος 4.2) Υποσύστημα GraphicalOuiput Υπεύθυνο για την παραγωγή αρχείων γραφικής απεικόνισης των αποτελεσμάτων της ανακατασκευής, είναι το υποσύστημα GraphicalOutput. Το εργαλείο παράγει ως έξοδο για κάθε κλάση του προγράμματος που δέχεται ως είσοδο, ένα αρχείο γραφικής απεικόνισης των διεπαφών που δημιουργούνται κατά τη διαδικασία τόσο της CBA, όσο και της RBA. Ο χρήστης μπορεί να επιλέξει τον τύπο για τα αρχεία εξόδου γραφικής απεικόνισης του εργαλείου (τμήμα 2 του Σχήματος 4.2). Προς το παρόν υποστηρίζεται μόνο ο τύπος αρχείων.gml, ωστόσο για η συγκεκριμένη λειτουργία έχει υλοποιηθεί με το Factory Method Pattern που επιτρέπει την εύκολη επέκταση της λειτουργίας, για υποστήριξη επιπλέον τύπων αρχείων. Τα αρχεία ακολουθούν τη δομή της Graph Modeling Language και έχουν κατάληξη.gml. Το περιεχόμενο ενός αρχείου.gml και η αντίστοιχη οπτικοποίησή του φαίνονται στο Σχήμα 4.4. Η οπτικοποίηση των αρχείων γραφικής απεικόνισης για την κλάση Provider του παραδείγματος της Ενότητας 1.2, που δημιουργούνται από τη διαδικασία της CBA με το κριτήριο του μακρινότερου γείτονα και της RBA, φαίνονται στο Σχήμα 4.5 και στο Σχήμα 4.6, αντίστοιχα. Και στις δύο περιπτιόσεις ανατίθεται ένας ξεχωριστός αριθμός (id) οόστε να είναι διακριτή η κάθε διεπαφή. Για την περίπτωση της RBA παρατηρούμε ότι στις διεπαφές οι οποίες αντιστοιχούν στα σύνολα των μεθόδων που χρησιμοποιούν οι κλάσεις-χρήστες της κλάσης Provider, σημειώνεται η πλήρης διαδρομή της κάθε κλάσης-χρήστη. Ένα εργαλείο με το οποίο είναι δυνατή η οπτικοποίηση των αρχείων.gml είναι το yed Graph Editor, το οποίο χρησιμοποιήθηκε στα πλαίσια της διατριβής.

75 73 graph [ node [ Id 1 label "Node 1" ] - node [ Id 2 label "node 2" ] node [ id 3 * * label "node 3" 1 edge [ source 1 target 2 label "Edge from node 1 to node 2" ] edge [ source 2 target 3 label "Edge from node 2 to node 3" ] edge [ source 3 target 1 label "Edge from node 3 to node 1" ] ] Σχήμα 4.4 Παράδειγμα απλού αρχείου.gml και η αντίστοιχη οπτικοποίηση.. Σχήμα 4.5 Η οπτικοποίηση του αρχείου εξόδου της CBA με το κριτήριο του μακρινότερου γείτονα που αφορά την κλάση Provider του Σχήματος 1.1.

76 74 Σχήμα 4.6 Η οπτικοποίηση του αρχείου εξόδου της RBA που αφορά την κλάση Provider του Σχήματος Υποσύστημα StatisticalOutput Υπεύθυνο για την παραγωγή αρχείων στατιστικών αποτελεσμάτων της ανακατασκευής, είναι το υποσύστημα StatisticalOutput. Το εργαλείο παράγει ως έξοδο, για το πρόγραμμα που δέχεται ως είσοδο, ένα αρχείο στατιστικών μετρήσεων με κατάληξη.xls, ανά πακέτο, για τις διεπαφές που δημιουργούνται κατά τη διαδικασία τόσο της CBA. όσο και της RBA. Ο χρήστης μπορεί επίσης, να επιλέξει τον τύπο για τα αρχεία εξόδου στατιστικών μετρήσεων του εργαλείου (τμήμα 3 του Σχήματος 4.3). Προς το παρόν υποστηρίζεται μόνο ο τύπος αρχείων.xls. ωστόσο για η συγκεκριμένη λειτουργία έχει υλοποιηθεί με το Factor}' Method Pattern που επιτρέπει την εύκολη επέκταση της λειτουργίας, για υποστήριξη επιπλέον τύπων αρχείων. Το περιεχόμενο του αρχείου στατιστικών δεδομένων για το παράδειγμα της Ενότητας 1.2. που δημιουργείται από τη διαδικασία της CBA με το κριτήριο του μακρινότερου γείτονα και της RBA. φαίνεται στο Σχήμα 4.7. Ένα εργαλείο με το οποίο είναι δυνατή η εμφάνιση του περιεχομένου των αρχείων.xls είναι το Microsoft Excel, το οποίο χρησιμοποιήθηκε στα πλαίσια της διατριβής.

77 75 Σχήμα 4.7 Επάνω: τα στατιστικά δεδομένα που παράγει η CBA με το κριτήριο του μακρινότερου γείτονα για το παράδειγμα της ενότητας 1.2. Κάτω: τα αντίστοιχα στατιστικά δεδομένα της RBA Υποσύστημα Parser Το υποσύστημα Parser είναι υπεύθυνο για τη συντακτική ανάλυση των κλάσεων του προγράμματος που δέχεται ως είσοδο το εργαλείο αυτόματης ανακατασκευής προγραμματιστικών διεπαφών. Το υποσύστημα Parser κάνει χρήση του ASTParser του Eclipse. Ο ASTParser αναλύει τον πηγαίο κώδικα κάθε κλάσης σε μορφή Αφηρημένου Συντακτικού Δένδρου (Abstract Syntax Tree - AST). To AST είναι μια δενδρική αναπαράσταση της αφηρημένης συντακτικής δομής του πηγαίου κώδικα γραμμένου σε μια γλώσσα προγραμματισμού. Κάθε κόμβος του δένδρου υποδηλώνει μια λεκτική μονάδα (token) του κώδικα. Το δένδρο είναι αφηρημένο με την έννοια ότι δεν αναπαριστά κάθε λεπτομέρεια που εμφανίζεται στον κώδικα. Για παράδειγμα, η αναπαράσταση της κλάσης Test του Σχήματος 4.8 σε αφηρημένο συντακτικό δένδρο φαίνεται στο Σχήμα 4.9. p u b lic c la s s T e s t { p u b lic in t a d d ( in t a, in t b ){ in t c = a-fb; r e t u r n c ; } } Σχήμα 4.8 Πηγαίος κώδικας της κλάσης Test

78 76 Για να γίνει πιο εύκολα αντιληπτό στον χρήστη πώς αναπαριστά το Eclipse τον πηγαίο κώδικα ως αφηρημένο συντακτικό δένδρο, μπορεί να εγκαταστήσει το plug-in AST Viewer. Με το εν λόγω plug-in ο χρήστης μπορεί να επιλέξει ένα τμήμα κώδικα και να εμφανιστεί η αντίστοιχη απεικόνισή του στην ιεραρχία (Σχήμα 4.10). Χρησιμοποιώντας το Visitor Pattern, μπορούμε να προσπελάσουμε όλους τους κόμβους που εμφανίζονται στο Σχήμα 4.10 με γκρι γραμματοσειρά (MethodDeclaration, Modifier, SimpleName, SingleVariableDeclaration). To υποσύστημα Parser με τη χρήση του ASTParser αποθηκεύει, για το πρόγραμμα προς ανακα τα σκευή, σε μια λίστα (PackagelnfoList) όλα τα πακέτα του προγράμματος, δηλαδή τους κόμβους IPackageFragnient. Επιπλέον, σε κάθε πακέτο της λίστας PackagelnfoList. προστίθενται σε μια λίστα (PackageCus) οι κλάσεις του, δηλαδή οι κόμβοι ICompilationUnit Επίσης, σε κάθε κλάση της λίστας PackageCus προστίθενται σε μια λίστα (MethodsDeclared) όλες οι μέθοδοι που δηλώνονται σε αυτήν, δηλαδή οι κόμβοι MethodDeclaration. Αντίστοιχα, σε κάθε κλάση της λίστας PackageCus προστίθενται σε μια λίστα (Methodslnvoked) όλες οι μέθοδοι που καλούνται σε αυτήν, δηλαδή οι κόμβοι Methodlnvocation. Από την πληροφορία αυτί), εξάγεται η πληροφορία των δομών multimap UPM και MPU (Κεφάλαιο 3, Αλγόριθμος 1 και Αλγόριθμος 2) που αποτελούν είσοδο για τους αλγορίθμους. CBA και RBA αντίστοιχα, του υποσυστήματος Refactoring. η «t

79 77 PACKAGE- m il IMPORTS «0) * TYPES 0) s TypeDedaration (2,86] t* > type binding: Test JAVADOC: null t> MODIFIERS 0 ) INTERFACE: Yetse' > NAME TYPE_PARAMETERS (0) SUPERCLASS_TYPE: nufl SUPERJNTERFACEJTYPES (0) s BODY.OECLARATIONSa) s MrthodDec brat ion (23. 62] r > method binding: Tested dont. bit) JAVADOC: nur MODIFIERS 0) CONSTRUCTOR: Yibe TYPE.PARAMETERS (0) a RETURNJTYPE2 t- Primitive!ype (30. 3] * NAME t> SimpleName [34. 3] λ PARAMETERS (2) I' SingleVarbblrOecbration [38. 5] t- SingleVarbbleDecbration (45. 5] EXTRAJMMENSIONS O THROWN.EXCEPTIONS (0) ^ BODY λ Block (51. 34) * STATEMENTS (2) I» VarbbleDecbratlonStatement (56,12)1 t> RetumStatemmt (72.9] > Com piutionunit Testjavi > comments <0) > compiler problems (0) > > AST settings fr > RESOL VE.WE LL_KN 0 WN.TYPES Σχήμα 4.10 To plug in AST Viewer.

80 Εγκατάσταση του εργαλείου Το εργαλείο αυτόματης ανακατασκευής προγραμματιστικών διεπαφών έχει υλοποιηθεί ως πρόσθετη λειτουργία (plug-in) για το ολοκληρωμένο περιβάλλον ανάπτυξης (IDE) Eclipse. Η ανάπτυξη του εργαλείου υλοποιήθηκε στην έκδοση 3.7 του Eclipse RCP (Eclipse Rich Client Platform Indigo). Για την εγκατάσταση και εκτέλεση του προγράμματος που υλοποιεί το εργαλείο αυτόματης ανακατασκευής προγραμματιστικών διεπαφών, ο χρήστης ακολουθεί την εξής διαδικασία: 1 Επιλογή FiIe->Import->Existing Projects into Workspace->Next (Σχήμα 4.11). 2 Αναζήτηση και επιλογή του φακέλου «Interface.Refactoring.Toob-^επιλογή «ΟΚ» (Σχήμα 4.12). 3 Δεξί κλικ στο πρόγραμμα-^επιλογή «Run As»->Eclipse Application (Σχήμα 4.13). 4 Εισαγωγή, με ανάλογο τρόπο του Βήματος 1, του επιθυμητού προς ανακατασκευή προγράμματος στη νέα πλατφόρμα Eclipse που ανοίγει και επιλογή από το μενού Interface Refactoring Tool->CBA/RBA (Σχήμα 4.14). Η επιλογή αυτή μας οδηγεί στην γραφική διεπαφή του εργαλείου (Σχήμα 4.2).

81 79 Source Refactor Navigate Search Project Run Wtodow Help Edt 1 New A*45Wt4N OpenFle... Λ.. AS Μ fe) S«*r Λ- - ^ :*.* At C^-.rvt V * P^rwirtr Refresh Convert lice Oeinto* To ; SwRch Workspace Restart Λ Export... 1 StabsUcsOutpU.Jeva (spyros.getln...) 2Cidnfe.Java [spyros.getwo/jrc/...] 3 Ouster.Java fojyros.getlrfo/src/...] Λ Mathodfinfo.Java [spyros.getlnfo/...] ΕΛ 0 **ν. >'tf Oii+yvM*s FI PS ay Θ * Select Create new project* from an archive fie or Sectary. Select an Import source: s & General C, Archive Fte Cj, Ffc System C l Preferences l -CVS sa& a &: IS In tel >PM r*t Development lehrun/debug ic> Tasks ί* 1^ Team &» «. i ^ g j c e-^ 1 t*«t > I 1 Cancel Σχήμα 4.11 Βήμα 1 της διαδικασίας εγκατάστασης του εργαλείου. f _ Import Import Projects Select a directory to search far existing Edpse projects. 0 Select root drectory: Q OSetect archive fife: Γ Projects a Αναζήτηση φάκελοιι Sated root drectory of the projects to import d 'π.γχ} & Z U «*»- I ΙΊ *»«.. S eted A l C o p WorWr A d Φ6«λος: ό NVIDIA if opt Interface.Refactoring.Tool ΐ.ν.Ι f l S td Program files O P u b Jn c * > SpyrosGetlnfoOutput «t J Temp 5 CD WINDOWS if ^ΤοπκόςΟ ακοςφ :) J. Μονάδα DVD (E:) V I Αημοορ^ vfou gyactxou OK Άκυρο [ > A D esefedal Refresh Cancel Σχήμα 4.12 Βήμα 2 της εγκατάστασης του εργαλείου.

82 80 F» C A Soiree M i ctor Newgate Search Project Run Window HNp n * i?r * o - 9» oj * J,_. P,*!. "Ί;..1.._ * Apache.potsjA igh teii concordomnjnk * Google Web Tool* & t» id -f ' Go into j Open to New Window Open Type Htorarchy Show In I Μί cow I PH Copy Qjalfod Name! Parte X Delete I A. Seno1» fieri.'enfe't ' j fcddpath S o rt* Reiector H Afc+Shft+W Qrt+C CtrfcV Delete itil-*-atr +'VV>+0<»wi I Afc+Shft+S A*+ a*ht i l l Import... Export... DUU Project ^ R efresh Owe Project Close Unrelated Projects A ssfri Working Sets... F5 DebugAs Valdate Teem Compare W lh Restore from Local Hstnry... POC Toots Properties Ak+trter * ;? r 2 Java Applet I X 3 Java Appkedon Φ 4 OSQ Framework SsRAPAppkebon Run Configurators... AJt4Shft4X, A AA+Shft+X, J AJt+Shft+X, O Ak+Shft+X,R Σχήμα 4.13 Βήμα 3 της εγκατάστασης του εργαλείου. f Ja v a - Eclipse Platform Fte Edit Source Refactor Navigate Search Project Run Interface Refactoring Tool Window Help I Γ3 - & } n* -.. g p : ^ - O - q * - CBA/RBA i. Θ ^ i 0 \ c? Paradelgma 0 ( 3 sre 0 Φ Package 1 1 ffl E Client_A.java! Θ0 E Client_B.java j ffl E ClientjC. java ffl E O lentjx java E Provider.java ffl W b JRE System Library [JavaSE-1.6] Σχήμα 4.14 Εκτέλεση του εργαλείου με είσοδο το παράδειγμα της ενότητας 1.2

83 81 ΚΕΦΑΛΑΙΟ 5. ΠΕΙΡΑΜΑΤΑ 5.1 Μεθοδολογία 5.2 Αποτελέσματα και συμπεράσματα * 5.1 Μεθοδολογία Για να εκτιμήσουμε την απόδοση των αλγορίθμων της CBA και της RBA, τις εφαρμόσαμε σε δύο μελέτες περίπτωσης (case studies). Για το σκοπό αυτό επιλέχθηκαν δύο περιβάλλοντα (frameworks), ανοιχτού λογισμικού, που χρησιμοποιούνται στην ανάπτυξη λογισμικού με τακτικούς ελέγχους (test-driven development). Τα περιβάλλοντα αυτά είναι το JUnit και το Concordion. To JUnit αποτελείται από 58 πακέτα που περιέχουν συνολικά 320 κλάσεις. To Concordion αποτελείται από 48 πακέτα που περιέχουν συνολικά 231 κλάσεις. Οι τοποθεσίες από τις οποίες μπορούν να ανακτηθούν είναι ( και ( αντίστοιχα. Τα κριτήρια σύγκρισης που χρησιμοποιήσαμε έχουν ως στόχο να υπολογιστεί: Η σύζευξη μεταξύ των κλάσεων. Το κριτήριο αυτό, ποσοτικοποιείται μέσω της μετρικής CB0. που ορίστηκε στο Κεφάλαιο 3. Για τη μετρική CBO υπάρχουν δύο παραλλαγές, μία για κάθε τρόπο επιλογής διεπαφών που χρειάζεται η κάθε κλάση-χρήστη μιας κλάσης. Η πρώτη παραλλαγή αντιπροσωπεύει την ελάχιστη σύζευξη (CBO(mjn)) και αντιστοιχεί στην επιλογή του ελάχιστου αριθμού διεπαφών που περιέχουν τις μεθόδους που χρησιμοποιεί η κάθε κλάση-χρήστης. Η δεύτερη παραλλαγή αντιπροσωπεύει τη μέγιστη σύζευξη (CBO(maX)) και αντιστοιχεί στην επιλογή του απαιτούμενου πλήθους διεπαφών μιας κλάσης, έτσι ώστε το σύνολό τους, να περιέχει ακριβώς όσες μεθόδους χρησιμοποιεί η κάθε κλάση-χρήστης.

84 82 Το ποσοστό μείωσης των ανατιθέμενων μεθόδων για κάθε κλάση. Το κριτήριο αυτό, ποσοτικοποιείται μέσω της μετρικής ACD που, επίσης, ορίστηκε στο Κεφάλαιο 3. Για τη μετρική ACD υπάρχουν, επίσης, δύο παραλλαγές, μία για κάθε τρόπο επιλογής διεπαφών που χρειάζεται η κάθε κλάση-χρήστη μιας κλάσης. Η πρώτη παραλλαγή αντιπροσωπεύει το ποσοστό της ελάχιστης μείωση των ανατιθέμενων μεθόδων για κάθε * * κλάση (ACD (mjn)) και αντιστοιχεί στην επιλογή του ελάχιστου αριθμού διεπαφών που περιέχουν τις μεθόδους που χρησιμοποιεί η κάθε κλάσηχρήστης. Η δεύτερη παραλλαγή αντιπροσωπεύει το ποσοστό της μέγιστης μείωσης των ανατιθέμενων μεθόδων για κάθε κλάση (ACD (max)) και αντιστοιχεί στην επιλογή του απαιτούμενου πλήθους διεπαφών μιας κλάσης, έτσι ώστε το σύνολό τους, να περιέχει ακριβώς όσες μεθόδους χρησιμοποιεί η κάθε κλάση-χρήστης. Οι δύο τρόποι επιλογής διεπαφών που χρειάζεται η κάθε κλάση-χρήστη μιας κλάσης, καθώς και ο συμβιβασμός (trade-off) μεταξύ σύζευξης και ποσοστού μείωσης των περιττών ανατιθέμενων μεθόδων, για κάθε κλάση-χρήστη, έχουν αναλυθεί στο Κεφάλαιο 3. Η πολυπλοκότητα των ιεραρχιών από διεπαφές που δημιουργούνται. Το κριτήριο αυτό, ποσοτικοποιείται μέσω των μετρικών που αντιπροσωπεύουν τις συνολικές διεπαφές (Total Interfaces) και τη μέση τιμή των διεπαφών (Average Interfaces). Επίσης, ποσοτικοποιείται μέσω των μετρικών που αντιπροσωπεύουν τη μέση τιμή του μέγιστου ύψους των δένδρων (Max Tree Height) και της μέσης τιμής του ύψους των δένδρων (Average Tree Height). Ιδανικά, θα θέλαμε το μέγιστο ποσοστό μείωσης των ανατιθέμενων μεθόδων, με την ελάχιστη σύζευξη μεταξύ των κλάσεων και την ελάχιστη πολυπλοκότητα των ιεραρχιών των διεπαφών που δημιουργούνται. Οι τιμές που παρουσιάζονται στα σχήματα της ενότητας 5.2, αποτελούν τη μέση τιμή ανά μελέτη περίπτωσης και ανά κριτήριο σύγκρισης. Ο συγκεκριμένος τρόπος παρουσίασης επιλέχθηκε για πρακτικούς και εποπτικούς λόγους, καθώς το μεγάλο πλήθος των κλάσεων του κάθε περιβάλλοντος δεν θα διευκόλυνε την εξαγωγή των συμπερασμάτων. Εξαίρεση,

85 83 αποτελεί το κριτήριο σύγκρισης των συνολικών διεπαφών (Total Interfaces) όπου παρουσιάζεται το συνολικό πλήθος διεπαφών που δημιουργείται, με κάθε αλγόριθμο, για κάθε μελέτη περίπτωσης. Τα αποτελέσματα παρουσιάζονται, συγκρίνοντας κάθε φορά, τις επιδόσεις των αλγορίθμων της CBA και της RBA, για κάθε ένα από τα έξι (6) κριτήρια σύγκρισης που αναφέρθηκαν παραπάνω και κάθε ένα από τα πέντε (5) κριτήρια απόστασης που έχουν παρουσιαστεί στο Κεφάλαιο 3: * * Το κριτήριο του κοντινότερου γείτονα (Single Linkage Criterion). Το κριτήριο του μακρινότερου γείτονα (Complete Linkage Criterion). Το κριτήριο του μέσου όρου των αποστάσεων των γειτόνων (Average Linkage Criterion). Το κριτήριο του διάμεσου γείτονα (Median Linkage Criterion). Το κριτήριο της προσαρμοστικής απόστασης (Adaptive Linkage Criterion). Αναλυτικότερα αποτελέσματα για την κάθε μελέτη περίπτωσης, παρουσιάζονται στο Παράρτημα, όπου παρατίθενται μετρήσεις ανάλογες με αυτές της υποενότητας 5.2, αλλά για κάθε πακέτο του JUnit και του Concordion. 5,2 Α π ο τ ελ έσ μ α τ α κ α ι σ υ μ π ερ ά σ μ α τα Τα αποτελέσματα των πειραμάτων για το JUnit παρουσιάζονται από το Σχήμα 5.1, έως και το Σχήμα 5.6 για το Concordion από το Σχήμα 5.7, έως και το Σχήμα Οι παρατηρήσεις μας είναι ανάλογες για τις δύο μελέτες περίπτωσης. Τα συμπεράσματά μας συνοψίζονται ως εξής: Από τα Σχήματα 5.1 και 5.7, παρατηρούμε ότι, σε σχέση με τη μείωση ανατιθέμενων μεθόδων για κάθε κλάση, ο αλγόριθμος της RBA, μαζί με τον αλγόριθμο της CBA όταν επιλέγεται οποιοδήποτε από τα κριτήρια απόστασης με τη μέγιστη μείωση ανατιθέμενων μεθόδων για κάθε κλάση (ACD(max)), επιτυγχάνουν την καλύτερη επίδοση. Ακολουθεί ο αλγόριθμος

86 84 της CBA, όταν επιλέγεται το κριτήριο απόστασης του μακρινότερου γείτονα, με την ελάχιστη μείωση ανατιθέμενων μεθόδων για κάθε κλάση (CBA Complete ACD(mjn)) και εν συνεχεία οι υπόλοιπες περιπτώσεις. Από τα Σχήματα 5.2 και 5.8, παρατηρούμε ότι, σε σχέση με τη σύζευξη, ο αλγόριθμος της RBA, μαζί με τον αλγόριθμο της CBA όταν επιλέγεται ως κριτήριο απόστασης ένα από: του μέσου όρου των αποστάσεων των γειτόνων, του κοντινότερου γείτονα ή της προσαρμοστικής απόστασης, με την ελάχιστη σύζευξη (CBO(min)) επιτυγχάνουν την καλύτερη επίδοση. Ακολουθεί ο αλγόριθμος της CBA, όταν επιλέγεται το κριτήριο απόστασης του διάμεσου γείτονα, με την ελάχιστη σύζευξη (CBA Median CBO(mjn)) και εν συνεχεία οι υπόλοιπες περιπτώσεις. Από το Σχήμα 5.3 έως και το Σχήμα 5.6 και από το Σχήμα 5.9 έως και το Σχήμα 5.12, παρατηρούμε ότι, σε σχέση με την πολυπλοκότητα των ιεραρχιών από διεπαφές που δημιουργούνται, ο αλγόριθμος της RBA, επιτυγχάνει την καλύτερη επίδοση σε όλες τις αντίστοιχες μετρικές: τις συνολικές διεπαφές (Total Interfaces), τη μέση τιμή των διεπαφών (Average Interfaces), τη μέση τιμή του μέγιστου ύψους των δένδρων (Max Tree Height) και της μέσης τιμής του ύψους των δένδρων (Average Tree Height). Ακολουθεί ο αλγόριθμος της CBA, όταν επιλέγεται το κριτήριο απόστασης του μακρινότερου γείτονα Kat εν συνεχεία οι υπόλοιπες περιπτώσεις. Συγκεντρωτικά, θα μπορούσαμε να αποφανθούμε ότι ο αλγόριθμος της RBA επιτυγχάνει τον βέλτιστο συνδυασμό σε σχέση με το ποσοστό μείωσης των ανατιθέμενων μεθόδων για κάθε κλάση, τη σύζευξη μεταξύ των κλάσεων και την πολυπλοκότητα των ιεραρχιών από διεπαφές που δημιουργούνται.

87 D Average ACD (%) RBA ACD CBA Adaptive ACD(max) CBA Adaptive ACD(min) CBA Median ACD(max) CBA Median ACD(min) CBA Complete ACD(max) CBA Complete ACD(min) CBA Average ACD(max) CBA Average ACD(min) CBA Single ACD(max) CBA Single ACD(min) JU n it Σχήμα 5.1 Μέση τιμή ACD για το JUnit. Average CBO RBA CBO CBA Adaptive CBO(max) CBA Adaptive CBO(min) CBA Median CBO(max) CBA Median CBO(min) CBA Complete CBO(max) CBA Complete CBO(min) CBA Average CBO(max) CBA Average CBO(min) CBA Single CBO(max) CBA Single CBO(min) Σχήμα 5.2 Μέση τιμή CBO για το JUnit. D Average Max Tree Height Σχήμα 5.3 Μέση τιμή Max Tree Height για το JUnit.

88 Σ χ ή μ α 5,4 Μ έσ η τιμ ή Tree H eight γ ια το JU n it, Σ χ ή μ α 5,5 T o tal Interfaces γ ια το JU n it, Σχήμα 5,6 Μέση τιμή Total Interfaces για το JUnit,

89 B Average ACD (%) RBA ACD CBA Adaptive ACD(max) CBA Adaptive ACD(mln) CBA Median ACD(max) CBA Median ACD(mln) CBA Complete ACD(max) CBA Complete ACD(min) CBA Average ACD(max) CBA Average ACD(mln) CBA Single ACD(max) CBA Single ACD(mln) Concordlon Σχήμα 5.7 Μέση τιμή ACD για το Concordion. D Average CBO RBA ACD CBA Adaptive ACD(max) CBA Adaptive ACD(min) CBA Median ACD(max) CBA Median ACD(min) CBA Complete ACD(max) CBA Complete ACD(min) CBA Average ACD(max) CBA Average ACD(min) CBA Single ACD(max) CBA Single ACD(min) Concordlon Σχήμα 5.8 Μέση τιμή CBO για το Concordion. RBA CBA Adaptive CBA Medan CBA Complete CBA Average CBA Single Concordion Σχήμα 5.9 Μέση τιμή Max Tree Height για το Concordion

90 RBA CBA Adaptive CBA Median CBA Complete CBA Average CBA Single Σχήμα 5.10 Μέση τιμή Tree Height για το Concordion. CBA Adaptive CBA Median CBA Complete CBA Average m m m m m m m s m CBA Single Concordion Σχήμα 5.11 Total Interfaces για το Concordion. Σχήμα 5.12 Μέση τιμή Total Interfaces για το Concordion.

91 89 ΚΕΦΑΛΑΙΟ 6. ΣΥΜΠΕΡΑΣΜΑΤΑ Στην παρούσα εργασία, ασχοληθήκαμε με τη βελτίωση της ποιότητας του λογισμικού, μέσω της αυτοματοποιημένης ανακατασκευής προγραμματιστικών διεπαφών (interfaces) για αντικειμενοστραφή προγράμματα. Συγκεκριμένα, χρησιμοποιήθηκε η Αρχή Διαχωρισμού Διεπαφών (Interface Segregation Principle - ISP). Στην εργασία, προτάθηκαν δύο προσεγγίσεις για την βελτίωση της ποιότητας του λογισμικού που βασίζονται στην ISP. Η πρώτη, βασίζεται σε θεμελιώδεις τεχνικές αφαίρεσης για την ανακατασκευή λογισμικού (Refactoring Based Approach - RBA) και αποτελείται από μια επαναληπτική διαδικασία, δύο φάσεων. Η πρώτη φάση περιλαμβάνει την εξαγωγή των διεπαφών (Extract Interfaces) και η επόμενη, την εξαγωγή υπερκλάσεων (Extract Superclass). Η δεύτερη προσέγγιση, εδράζεται σε παραδοσιακές τεχνικές ιεραρχικής ομαδοποίησης (Clustering Based Approach - CBA). Επιπλέον, προχωρήσαμε στην αυτοματοποίηση των δύο προσεγγίσεων και την υλοποίηση ενός εργαλείου για τον σκοπό αυτό. Για να εκτιμηθεί η απόδοση των προτεινόμενων προσεγγίσεων, εξετάσθηκε η εφαρμογή τους σε δύο περιβάλλοντα ανοιχτού λογισμικού, το JUnit και το Concordion. Συμπερασματικά, παρατηρώντας τα αποτελέσματα των πειραμάτων, θα μπορούσαμε να αποφανθούμε ότι ο αλγόριθμος της RBA επιτυγχάνει τον βέλτιστο συνδυασμό των κριτηρίων σύγκρισης που χρησιμοποιήθηκαν, δηλαδή το ποσοστό μείωσης των ανατιθέμενων μεθόδων για κάθε κλάση, τη σύζευξη μεταξύ των κλάσεων και την πολυπλοκότητα των ιεραρχιών από διεπαφές που δημιουργούνται.

92 90 ΑΝΑΦΟΡΕΣ [1] Adrian, R,, G raa f, B,, van D eursen, A. and Z o n n c v c ld, J, U sin g C lu ster A n a ly s is to Im prove the D esign o f Com ponent Interfaces 2008, [2] Chidam ber, S, and K cm crcr, C, A M etrics Suite for O bject O riented D esign, * IE E E Transactions on Softw are Engineering, V o l, 20(6), pp , June 1994, [3] D u B o is, B D em eyer, S, and V c rc ls t, J, R efactorin g - im p rovin g c o u p lin g and cohesion o f existing code, 2004, [4] Fow ler, M,, B e ck, K,, B rant, J,, O p d y k c, W, and R oberts, D, R efactorin g: Im proving the D esign o f E x istin g C o d e, 2002, [5] G am m a, E,, H elm, R,, Johnson, R, and V lis s id e s, J, D esign Patterns: Elem ents o f Reusable O bject-oriented Softw are, [6] Kataoka, Y Ernst, M, D G risw o ld, W, G, and N o ik in, D, A utom ated support fo r program refactoring using invariants, 2001, [7] K ie zu n, A,, Ernst, M, D T ip, F, and Fu hrer, R, M, R efactorin g fo r Param eterizing Java Classes, 2007, [8] M artin, R, D esin g P rin cip le s and D esig n Patterns, [9] M ens, T, and Tou rw e, T, A survey o f softw are refactoring, 2004, [10] S im on, F,, Steinbruckner, F, and Lew erentz, C, M e tric s based refactoring, 2001, [11] Steinmann, F, T h e Infer T y p e R efactorin g and its U se fo r Interface-Based Program m ing, Sp ecial Issue O O P S T ra c k at S A C, V o l, 6(2), Feb ruary 2007, [12] Tokuda, L, and Batory, D, E vo lv in g object-oriented designs w ith refactorings, 1999, [13] Tsan talis, N, and C h atzigeorgiou, A, Identification o f E x tract M ethod Refactoring O pportunities, 2009 [14] Tsantalis, N, and C h atzigeorgiou, A, Identification o f M o v e M eth od R efactorin g O pportunities, 2009

93 91 ΠΑΡΑΡΤΗΜΑ A Οιπιμές που παρουσιάζονται στα σχήματα του Παραρτήματος Α, αποτελούν τη μέση τιμή για κάθε πακέτο του JUnit. Ο συγκεκριμένος τρόπος παρουσίασης επιλέχθηκε για πρακτικούς και εποπτικούς λόγους, καθώς το μεγάλο πλήθος των κλάσεων του κάθε περιβάλλοντος δεν θα διευκόλυνε την εξαγωγή των συμπερασμάτων. Εξαίρεση, αποτελεί το κριτήριο σύγκρισης των συνολικών διεπαφών (Total Interfaces) όπου παρουσιάζεται το συνολικό πλήθος διεπαφών που δημιουργείται, με κάθε αλγόριθμο. Τα αποτελέσματα παρουσιάζονται, συγκρίνοντας κάθε φορά, τις επιδόσεις των αλγορίθμων της CBA και της RBA, για κάθε ένα από τα έξι (6) κριτήρια σύγκρισης που αναφέρθηκαν στο Κεφάλαιο 5 και κάθε ένα από τα πέντε (5) κριτήρια απόστασης που έχουν παρουσιαστεί στο Κεφάλαιο 3. Για εποπτικούς λόγους, έχουμε αντιστοιχίσει το κάθε πακέτο του JUnit σε ένα μοναδικό αριθμό (Πίνακας Α.1). Πίνακας Α.1 Ποσοτική Περιγραφή του JUnit. Πακέτο Αριθμός αντιστοίχισης Πλήθος κλάσεων junit.extensions 1 5 j unit, framework 2 15 junit.runner 3 4 junit.samples 4 4 junit.samples.money 5 5 junit.tests 6 3 junit.tests.extensions 7 5 junit.tests.framework 8 23 junit.tests.runner 9 8 junit.textui 10 3

94 92 org.junit org.junit.experimental 12 1 org.junit.experimental.categories 13 2 org.junit.experimental.max 14 3 org.junit.experimental.results 15 3 org.junit.experimental.runners 16 1 org.junit.cxpfcrimental.theories 17 8 org.junit.experimental.theories, internal 18 3 org.junit.experimental.theories.suppliers 19 2 org.junit.internal 20 8 org.junit.internal.builders 21 8 org.junit.internal.matchers 22 6 org.junit. internal.requests 23 4 org.junit.internal.runners org.junit.internal.runners.model 25 3 org.junit.internal.runners.rules 26 1 org.junit.internal.runners.statements 27 6 org.junit.matchers 28 2 org'.jun it.ru les org.junit.runner 30 9 org.junit.runner.manipulation 31 6 org.junit.runner.notification 32 5 org.junit.runners 33 7 org.junit.runners.model org.junit.samples 35 3 org.junit.samples.money 36 2 org.junit.tests 37 4 org.junit.tests.assertion 38 4 org.junit.tests.deprecated 39 1 org.junit.tests.description 40 3 org.junit.tests.experimental 41 4

95 93 org.junit.tests.experimental.categories 42 2 org.junit.tests.experimental.max 43 3 org.junit.tests.experimental.parallel 44 2 org.junit.tests.experimental.results 45 2 org.junit.tests.experimental.rules org.junit.tests.experimental.theories 47 3 org.junit.test^.experimental.theories.extendingwithstubs 48 9 org.junit.tests.experimental.theories.runner 49 8 org.junit.tests.internal.runners.statements 50 1 org.junit.testsjunit3compatibiiity 51 9 org.junit.tests.listening 52 5 org.junit.tests.manipulation 53 4 org.junit.tests.running.classes org.junit.tests.running.core 55 3 org.junit.tests.running.methods 56 6 org.junit.tests.validation 57 4 org.junit.tests.validation.anotherpackage 58 2

96 94 Average ACD<%) I Average ACD<%) JUnit P a c k a g e s [ TAverage ACD(min)-CBA Average ACD(max)-CBA Average ACD-RBA JUnit P a c k a g e s Average ACD(min)-CBA Average ACD(max)-CBA «Average ACD-RB/T1 Σχήμα A. I Σύγκριση Μέσης Τιμής ACD μεταξύ CBA Single και RBA.

97 95 JU n it P a c k a g e s Average ACD(min)-CBA Average ACD(max)-CBA Average ACD-RBA JU n it P a c k a g e s Average ACD(min)-CBA Average ACD(max)-CBA Average ACD-RBA Σχήμα A.2 Σύγκριση Μέσης Τιμής ACD μεταξύ CBA Average και RBA.

98 96 A v e rag e ACD(%) 1 A v e rag e ACD(%) 1 JU n it P a c k a g e s Auarage ACD(min)-CBA A\erage ACD(max)-CBA Average ACD-RBA JU n it P a c k a g e s Average ACD(min)-CBA Average ACD(max)-CBA Average ACD-RBA Σχήμα A.3 Σύγκριση Μέσης Τιμής ACD μεταξύ CBA Complete και RBA.

99 JU n it P a c k a g e s Average ACD(min)-CBA Average ACD(max)-CBA Average ACD-RBA JU n it P a c k a g e s Average ACD(min)-CBA Average ACD(max)-CBA «Average ACD-RBA Σχήμα A.4 Σύγκριση Μέσης Τιμής ACD μεταξύ CBA Median και RBA.

100 98 JU n it P a c k a g e s Average ACD(min)-CBA Average ACD(max)-CBA «Average ACD-RBA JU n it P a c k a g e s Average ACD(min)-CBA Average ACD(max)-CBA «Average ACD-RBA Σχήμα A.5 Σύγκριση Μέσης Τιμής ACD μεταξύ CBA Adaptive και RBA.

101 Ο 2, 5 ο JU n it P a c k a g e s Average CBO(min)-CBA Average CBO(max)-CBA Average CBO-RBA Σχήμα A.6 Σύγκριση Μέσης Τιμής CBO μεταξύ CBA Single και RBA.

102 A v e ra g e C B O. A v e rag e C B O , JU n it P a c k a g e s Average CBO(min)-CBA Average CBO(max)-CBA «Average CBO-RBA I JU n it P a c k a g e s Average CBO(min)-CBA Average CBO(max)-CBA «Average CBO-RBA Σχήμα A.7 Σύγκριση Μέσης Τιμής CBO μεταξύ CBA Average και RBA.

103 ΙΟΙ JU n it P a c k a g e s laverage CBO(min)-CBA Average CBO(max)-CBA «Average CBO-RBA JU n it P a c k a g e s CBO(min)-CBA DCBCKmaxJ-CBA «CBO -RBA Σχήμα A.8 Σύγκριση Μέσης Τιμής CBO μεταξύ CBA Complete και RBA.

104 JU n it P a c k a g e s Average CBO(min)-CBA Average CBO(max)-CBA «Average CBO-RBA , o Ο) Ί CO > < 0,6 O. 0,4 0, Ill JU n it P a c k a g e s l Average CBO(min)-CBA Average CBO(max)-CBA «Average CBO-RBA Σχήμα A.9 Σύγκριση Μέσης Τιμής CBO μεταξύ CBA Median και RBA.

105 JU n it P a c k a g e s Average CBO(min)-CBA D Average CBO(max)-CBA Average CBO-RBA JU n it P a c k a g e s Average CBO(min)-CBA Average CBO(max)-CBA «Average CBO-RBA Σχήμα A. 10 Σύγκριση Μέσης Τιμής CBO μεταξύ CBA Adaptive και RBA.

106 104 JU n it Pa ck a g e s I Total Interfaces-CBA Total Interfaces-RBA ion 100 1ν ν -- Wl α> ο Uw 60 1 ί η. 1 Ι ι ^ 1 I I r , JU n it Pa ck a g e s Total Interfaces-CBA Total Interfaces-RBA Σχήμα A.l 1 Σύγκριση Συνολικού Πλήθους Διεπαφών μεταξύ CBA Single και RBA.

107 «f 40 Ϊ «Τ..Βι,τι,. Ιι Ι.ι. I n I ϊ, ί ι Λ, I JU n it Packag es Σχήμα A. 12 Σύγκριση Συνολικού Πλήθους Διεπαφών μεταξύ CBA Average και RBA.

108 106 Σχήμα A. 13 Σύγκριση Συνολικού Πλήθους Διεπαφών μεταξύ CBA Complete και RBA.

109 Total Interfaces 1 Total Interfaces , I 1 ι ΐ 1.Jw.,ι. - A L till_j..1.m l 1. -Γ JUnit Packages l Total Interfaces-CBA Total Interfaces-RBA JUnit Packages Total Interfaces-CBA Total Interfaces-RBA Σχήμα A. 14 Σύγκριση Συνολικού Πλήθους Διεπαφών μεταξύ CBA Median και RBA.

110 S I.30 h* I 1. Βΐ,ΤΙ.,., ΤΙ, Bd. JO- ι. Ι 1 1.«-I Χ _ ι JU n it Pa ck a g e s I Total Interfaces-CBA Total Interfiaces-RBA ion 100 1\ J\ J -- tn 80 - o 0 * o JL Γ r JU n it Packag e s Total Interfaces-CBA Total Interfaces-RBA Σχήμα A. 15 Σύγκριση Συνολικού Πλήθους Διεπαφών μεταξύ CBA Adaptive και RBA.

111 109 JU n lt P a c k a g e s Interfaces(a\g)-CBA lnterfaces(a\g)-rba JU n lt P a c k a g e s [ lnterfaces(a\g)-cba Interfaces(avg)-RBA Σχήμα A. 16 Σύγκριση Μέσης Τιμής Πλήθους Διεπαφών μεταξύ CBA Single και RBA.

112 110 In te rfa c e s(a v g ) ' In te rfa c e s(a v g ) JU n it P a c k a g e s Interfaces(a\g)-CBA Interfaces(a\g)-RBA Σχήμα A. 17 Σύγκριση Μέσης Τιμής Πλήθους Διεπαφών μεταξύ CBA Average και RBA.

113 I ll JU n it Packag es lnterfaces(a\g)-cba Interfaces (a\g)-rb A 1Ω ο. Ό 8-7 σ> Λ tc > 6 Μ 8 5 ΐ ά & 4 - C Ω Β Ι ί JU n it Packag es lnterfaces(avg)-cba Interfaces (a vg)-rb A Σχήμα A. 18 Σύγκριση Μέσης Τιμής Πλήθους Διεπαφών μεταξύ CBA Complete και RBA.

114 112 JU n it Packag es Interfaces(avg)-CBA lnterfaces(a\g)-rba JU n it Packag es Interfaces(a\g)-CBA lnterfaces(a\g)-rba Σχήμα A. 19 Σύγκριση Μέσης Τιμής Πλήθους Διεπαφών μεταξύ CBA Median και RBA.

115 113 J U n i t P a c k a g e s lnterfaces(a\g)-cba Interfaces(a\g)-RBA ν _ 8 - Ο) > Φ, ν> Φ β - ο , π Ι Ί ^ I I I ' 1-1 Τ*^1-- Τ , J U n i t P a c k a g e s l n t e r f a c e s ( a \ g ) - C B A l n t e r f a c e s ( a y g ) - R B A Σχήμα A.20 Σύγκριση Μέσης Τιμής Πλήθους Διεπαφών μεταξύ CBA Adaptive και RBA.

116 114 T re e H e ig h t(m ax ) ' T re e H eig h t(m ax ) JU n it P a c k a g e s Tree Height(max)-CBA Tree Height(max)-RBA J U n it P a c k a g e s Tree Height(max)-CBA Tree Height(max)-RBA Σχήμα A.21 Σύγκριση Μεγίστου Ύψους Δένδρων μεταξύ CBA Single Kat RBA.

117 115 T re e H e ig h t(m ax ) ' T re e H eight(n>ax) JU n it P a c k a g e s Tree Height(max)-CBA Tree Height(max)-RBA J U n it P a c k a g e s Tree Height(max)-CBA Tree Height(max)-RBA Σχήμα A.22 Σύγκριση Μεγίστου Ύ ψους Δένδρων μεταξύ CBA Average και RBA

118 116 T re e H e ig h t(m ax ) ' T re e H eight< m ax) JU n it P a c k a g e s Tree Height(max)-CBA Tree Height(max)-RBA J U n it P a c k a g e s Tree Height(max)-CBA Tree Height(max)-RBA Σχήμα A.23 Σύγκριση Μεγίστου Ύψους Δένδρων μεταξύ CBA Complete και RBA.

119 117 T re e H e ig h t(m ax ) ' t r e e H e ig h tfm ax ) JU n it P a c k a g e s Tree Height(max)-CBA Tree Height(max)-RBA JU n it P a c k a g e s Tree Height(max)-CBA DTree Height(max)-RBA Σχήμα A.24 Σύγκριση Μεγίστου Ύ ψους Δένδρων μεταξύ CBA Median Kat RBA.

120 118 T re e H e ig h t(m ax ) ' T ree H e ig h ttm a* ) J U n it P a c k a g e s Tree Height(max)*CBA Tree Height(max)-RBA JU n it P a c k a g e s Tree Height(max)-CBA Tree Height(max)-RBA Σχήμα A.25 Σύγκριση Μεγίστου Ύ ψους Δένδρων μεταξύ CBA Adaptive και RBA.

121 119 T re e H e ig h t(a v g ) Trefe H e ig h t(a v g ) J U n it P a c k a g e s Tree Height(a\g)-CBA Tree Height(avg)-RBA J U n it P a c k a g e s Tree Height(a\^)-CBA Tree Height(a\$)-CBA Σχήμα A.26 Σύγκριση Μέσης Τιμής Ύψους Δένδρων CBA Single και RBA.

122 120 J U n it P a c k a g e s Tree Height(a\$)-CBA Tree Height(a\g)-RBA Σχήμα A.27 Σύγκριση Μέσης Τιμής Ύ ψους Δένδρων CBA Average και RBA.

123 121 Tree Height(avg) Tree Height(avg), JUnit P ackages Tree Height(a\g)-CBA Tree Height(a\$)-RBA 1' ' ' ' ' 1 I 1 I Γ Γ I I Γ I---- τ I r i r I" r Γ" " ι ι JUnit P ackages Tree Height(a\g)-CBA Tree Height(a\g)-RBA RBA. Σχήμα A.28 Σύγκριση Μέσης Τιμής Ύ ψους Δένδρων CBA Complete και

124 122 Tree Helght(avg) Tree Height(avg)> JUnit P ackages Tree Height(a\g)-CBA Tree Height(avg)-RBA I ^ J τ ι Γ ι JUnit P ackages Tree Height(a\g)-CBA citree Height(avg)-RBA Σχήμα A.29 Σύγκριση Μέσης Τιμής'Υψους Δένδρων CBA Median και RBA.

125 123 T ree H eight(avg) Tree Height(avg). I I I 1 1 [ :l J U n it P a c k a g e s Tree Height(a\g)-CBA Tree Height(a\g)-RBA JUnit Packages * T ree Height(avg)-CBA O T ree Height(avg)-RBA Σχήμα A.30 Σύγκριση Μέσης Τιμής Ύ ψους Δένδρων CBA Adaptive και RBA.

126 124 ΠΑΡΑΡΤΗΜΑ Β Οι τιμές που παρουσιάζονται στα σχήματα του Παραρτήματος Β, αποτελούν τη μέση τιμή για κάθε πακέτο του Concordion. Ο συγκεκριμένος τρόπος παρουσίασης επιλέχθηκε για πρακτικούς και εποπτικούς λόγους, καθώς το μεγάλο πλήθος των κλάσεων του κάθε περιβάλλοντος δεν θα διευκόλυνε την εξαγωγή των συμπερασμάτων. Εξαίρεση, αποτελεί το κριτήριο σύγκρισης των συνολικών διεπαφών (Total Interfaces) όπου παρουσιάζεται το συνολικό πλήθος διεπαφών που δημιουργείται, με κάθε αλγόριθμο. Τα αποτελέσματα παρουσιάζονται, συγκρίνοντας κάθε φορά, τις επιδόσεις των αλγορίθμων της CBA και της RBA, για κάθε ένα από τα έξι (6) κριτήρια σύγκρισης που αναφέρθηκαν στο Κεφάλαιο 5 και κάθε ένα από τα πέντε (5) κριτήρια απόστασης που έχουν παρουσιαστεί στο Κεφάλαιο 3. Για εποπτικούς λόγους, έχουμε αντιστοιχίσει το κάθε πακέτο του Concordion σε ένα μοναδικό αριθμό (Πίνακας Β. 1). Πίνακας Β.1 Ποσοτική Περιγραφή του Concordion. Πακέτο Αριθμός αντιστοίχισης Πλήθος κλάσεων org.concordion 1 1 org.concordion.api 2 25 org.concordion.api.extension 3 5 org.concordion.api.listener 4 23 org.concordion. integration.junit3 5 1 org.concordion. integration.] unit4 6 1 org.concordion. internal 7 23 org.concordion. internal.command 8 13 org.concordion.internal.extension 9 2

127 125 org.concordion. internal, listener org.concordion. internal, runner 11 1 org.concordion. interna l.uti! 12 3 spec.concord ion 13 2 spec.concordion.annotation 14 1 spec.concordion.command 15 1 spec.concordion.coinmand.assert Equals 16 5 spec.concordion.command.assertequals.nonstring 17 3 spec.concordion.command.assertequals. whitespace 18 3 spec.concordion.command.assertfalse 19 1 spec.concordion.command.asserttrue 20 1 spec.concordion.command.echo 21 3 spec.concordion.command.execute 22 3 spec.concordion.command.results.contenttype 23 1 spec.concordion.command.results.stylesheet 24 2 spec.concordion.command.run 25 4 spec.concordion.command.set 26 1 spec.concordion.command. verifyrows 27 3 spec.concordion.command.verifyrows.results 28 2 spec.concordion.extension 29 7 spec.concordion.extension.listener 30 3 spec.concordion.integration 31 1 spec.concordion.integration.junit spec.concordion.results 33 1 spec.concordion.results.assertequals.failure 34 4 spec.concordion.results.assertequals.success 35 4 spec.concordion.results.asserttrue.failure 36 1 spec.concordion.results.asserttrue.success 37 1 spec.concordion.results.breadcrumbs 38 4 spec.concordion.results.exception 39 1

128 126 spec.examples 40 4 test.concord ion 41 9 test.concord ion.api 42 2 test.concordion.compiler test.concordion.extension test.concordion.extension.fake 45 6 test.concordion.internal 46 7 test.concordion.intemal.listener 47 4 test.concordion.internal.runner 48 2

129 Σχήμα Β.1 Σύγκριση Μέσης Τιμής ACD μεταξύ CBA Single και RBA. 127

130 Σχήμα Β.2 Σύγκριση Μέσης Τιμής ACD μεταξύ CBA Average και RBA. 128

131 Σχήμα Β.3 Σύγκριση Μέσης Τιμής ACD μεταξύ CBA Complete και RBA. 129

132 Σχήμα Β.4 Σύγκριση Μέσης Τιμής ACD μεταξύ CBA Median και RBA. 130

133 Σχήμα Β.5 Σύγκριση Μέσης Τιμής ACD μεταξύ CBA Adaptive και RBA. 131

134 132 A v e ra g e C B O A v e rag e CBO ' C o n c o rd io n P a c k a g e s Average CBO(min)-CBA Average CBO(maxn)-CBA Average CBO-RBA 1 0,5 0 iinniul l!l:l!llil C o n c o rd io n P a c k a g e s Average CBO(min)-CBA Average CBO(max)-CBA «Average CBO-RBA Σχήμα B.6 Σύγκριση Μέσης Τιμής CBO μεταξύ CBA Single και RBA.

135 133 C o n c o rd io n P a c k a g e s Average CBO(min)-CBA Average CBO(max)-CBA «Average CBO-RBA 3.5 -j η o O) C o n c o rd io n P a c k a g e s Average CBO(min)-CBA Average CBO(max)-CBA «Average CBO-RBA Σχήμα B.7 Σύγκριση Μέσης Τιμής CBO μεταξύ CBA Average και RBA.

136 Σχήμα Β.8 Σύγκριση Μέσης Τιμής CBO μεταξύ CBA Complete και RBA. 134

137 Σχήμα Β.9 Σύγκριση Μέσης Τιμής CBO μεταξύ CBA Median και RBA. 135

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

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

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

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

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

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

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

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

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

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

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

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

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

(Διαφάνειες Νίκου Βιδάκη) (Διαφάνειες Νίκου Βιδάκη) 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΙΜΕΛΕΙΑ: ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ 6 ΟΥ ΚΕΦΑΛΑΙΟΥ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ 6.1 Τι ονοµάζουµε πρόγραµµα υπολογιστή; Ένα πρόγραµµα

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

ΚΕΦΑΛΑΙΟ 10 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ

ΚΕΦΑΛΑΙΟ 10 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ ΚΕΦΑΛΑΙΟ 10 Όπως είδαμε και σε προηγούμενο κεφάλαιο μια από τις βασικότερες τεχνικές στον Δομημένο Προγραμματισμό είναι ο Τμηματικός Προγραμματισμός. Τμηματικός προγραμματισμός ονομάζεται η τεχνική σχεδίασης

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

Κεφάλαιο 10 ο Υποπρογράµµατα

Κεφάλαιο 10 ο Υποπρογράµµατα Κεφάλαιο 10 ο Υποπρογράµµατα Ανάπτυξη Εφαρµογών σε Προγραµµατιστικό Περιβάλλον Η αντιµετώπιση των σύνθετων προβληµάτων και η ανάπτυξη των αντίστοιχων προγραµµάτων µπορεί να γίνει µε την ιεραρχική σχεδίαση,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΕΝΟΤΗΤΑ 2 η ΙΑΧΕΙΡΙΣΗ ΡΟΗΣ ΕΡΓΑΣΙΑΣ (WORKFLOW MANAGEMENT) 2.1 Εισαγωγή

ΕΝΟΤΗΤΑ 2 η ΙΑΧΕΙΡΙΣΗ ΡΟΗΣ ΕΡΓΑΣΙΑΣ (WORKFLOW MANAGEMENT) 2.1 Εισαγωγή ΕΝΟΤΗΤΑ 2 η ΙΑΧΕΙΡΙΣΗ ΡΟΗΣ ΕΡΓΑΣΙΑΣ (WORKFLOW MANAGEMENT) 2.1 Εισαγωγή Οι σηµερινές δραστηριότητες των επιχειρήσεων δηµιουργούν την ανάγκη για όσο το δυνατό µεγαλύτερη υποστήριξη από τα πληροφοριακά τους

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

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

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

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

08 Η γλώσσα UML I. Τεχνολογία Λογισμικού. Σχολή Hλεκτρολόγων Mηχανικών & Mηχανικών Yπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο. Χειμερινό εξάμηνο

08 Η γλώσσα UML I. Τεχνολογία Λογισμικού. Σχολή Hλεκτρολόγων Mηχανικών & Mηχανικών Yπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο. Χειμερινό εξάμηνο 08 Η γλώσσα UML I Τεχνολογία Λογισμικού Σχολή Hλεκτρολόγων Mηχανικών & Mηχανικών Yπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Χειμερινό εξάμηνο 2017 18 Δρ. Κώστας Σαΐδης saiko@di.uoa.gr Unified Modeling Language

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

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

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

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

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

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

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

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

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

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

ΑΕΠΠ Ερωτήσεις θεωρίας

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

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

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

ΑΠΟΓΡΑΦΙΚΟ ΔΕΛΤΙΟ ΜΕΤΑΠΤΥΧΙΑΚΗΣ ΕΡΓΑΣΙΑΣ ΤΙΤΛΟΣ ΕΘΝΙΚΟ & ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΑΝΑΓΝΩΣΤΗΡΙΟ Πανεπιστημιούπολη, Κτήρια Πληροφορικής & Τηλεπικοινωνιών 15784 ΑΘΗΝΑ Τηλ.: 210 727 5190, email: library@di.uoa.gr,

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

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

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

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

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

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

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

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών 44 Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών Διδακτικοί στόχοι Σκοπός του κεφαλαίου είναι οι μαθητές να κατανοήσουν τα βήματα που ακολουθούνται κατά την ανάπτυξη μιας εφαρμογής.

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

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

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

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

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

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

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

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

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

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

Πληροφορική ΙΙ Εισαγωγή στις Βάσεις Δεδομένων. Τμήμα Λογιστικής

Πληροφορική ΙΙ Εισαγωγή στις Βάσεις Δεδομένων. Τμήμα Λογιστικής Εισαγωγή στις Βάσεις Δεδομένων Εισαγωγή στις Βάσεις Δεδομένων Ορισμός Βάσης Δεδομένων Σύστημα Διαχείρισης Βάσης Δεδομένων ΣΔΒΔ (DBMS) Χαρακτηριστικά προσέγγισης συστημάτων αρχειοθέτησης Χαρακτηριστικά

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

Οδηγίες Συγγραφής και Αξιολόγησης Εργασιών του μαθήματος

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

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

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

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

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

Περιεχόμενο του μαθήματος

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

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

Τεχνολογία Λογισμικού

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

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

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

Γλώσσες υψηλού επιπέδου Περιέχουν περισσότερες εντολές για την εκτέλεση πολύπλοκων εργασιών Τα προγράµµατα µεταφράζονται σε γλώσσα µηχανής είτε από το Σηµαντικά σηµεία κεφαλαίου Τα τρία στάδια επίλυσης ενός προβλήµατος: Ακριβής προσδιορισµό του προβλήµατος Ανάπτυξη του αντίστοιχου αλγορίθµου. ιατύπωση του αλγορίθµου σε κατανοητή µορφή από τον υπολογιστή.

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

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0. Σόλωνος 108,Τηλ Φαξ

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0. Σόλωνος 108,Τηλ Φαξ ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0 ΤΙ ΕΙΝΑΙ ΤΟ ADVANCED Οι Advanced θεματικές ενότητες είναι κατάλληλες για άτομα που επιθυμούν να συνεχίσουν σπουδές στο χώρο

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

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

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

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

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

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

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

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

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

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

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

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

Σχεδιασµός βασισµένος σε συνιστώσες

Σχεδιασµός βασισµένος σε συνιστώσες Σχεδιασµός βασισµένος σε συνιστώσες 1 Ενδεικτικά περιεχόµενα του κεφαλαίου Ποια είναι τα "άτοµα", από τα οποία κατασκευάζονται οι υπηρεσίες; Πώς οργανώνουµε τις συνιστώσες σε ένα αρµονικό σύνολο; Τι είναι

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

ΗΥ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. Περίληψη Συνεισφοράς

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

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

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

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

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:

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

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

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

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

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

ΑΠΟΓΡΑΦΙΚΟ ΔΕΛΤΙΟ ΔΙΔΑΚΤΟΡΙΚΗΣ ΔΙΑΤΡΙΒΗΣ ΤΙΤΛΟΣ Συμπληρώστε τον πρωτότυπο τίτλο της Διδακτορικής διατριβής ΑΡ. ΣΕΛΙΔΩΝ ΕΙΚΟΝΟΓΡΑΦΗΜΕΝΗ

ΑΠΟΓΡΑΦΙΚΟ ΔΕΛΤΙΟ ΔΙΔΑΚΤΟΡΙΚΗΣ ΔΙΑΤΡΙΒΗΣ ΤΙΤΛΟΣ Συμπληρώστε τον πρωτότυπο τίτλο της Διδακτορικής διατριβής ΑΡ. ΣΕΛΙΔΩΝ ΕΙΚΟΝΟΓΡΑΦΗΜΕΝΗ ΕΘΝΙΚΟ & ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΑΝΑΓΝΩΣΤΗΡΙΟ Πανεπιστημιούπολη, Κτήρια Πληροφορικής & Τηλεπικοινωνιών 15784 ΑΘΗΝΑ Τηλ.: 210 727 5190, email: library@di.uoa.gr,

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

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

ΥΠΟΛΟΓΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ ΓΙΑ ΣΥΣΤΗΜΑΤΑ ΜΕΤΑΔΟΣΗΣ ΠΛΗΡΟΦΟΡΙΑΣ ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΥΠΟΛΟΓΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ ΓΙΑ ΣΥΣΤΗΜΑΤΑ ΜΕΤΑΔΟΣΗΣ ΠΛΗΡΟΦΟΡΙΑΣ Αντικειμενοστραφής προγραμματισμός Web Sites:

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

ΛΟΓΙΚΑ ΔΙΑΓΡΑΜΜΑΤΑ. Γ Λυκείου Κατεύθυνσης Mike Trimos

ΛΟΓΙΚΑ ΔΙΑΓΡΑΜΜΑΤΑ. Γ Λυκείου Κατεύθυνσης Mike Trimos ΛΟΓΙΚΑ ΔΙΑΓΡΑΜΜΑΤΑ Γ Λυκείου Κατεύθυνσης Mike Trimos Βήματα Ανάπτυξης ενός Συστήματος 1.Ορισμός και κατανόηση του προβλήματος 2.Ανάλυση του προβλήματος 3.Σχεδιασμός Αλγοριθμικής Λύσης 4.Κωδικοποίηση 5.Διόρθωση

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

Ασφάλεια σε χώρους αναψυχής: Ένα σύστημα από έξυπνα αντικείμενα

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

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

Αναπαράσταση του κώδικα σε ένα ρομποτικό project

Αναπαράσταση του κώδικα σε ένα ρομποτικό project Η εμπειρία από την εφαρμογή της Εκπαιδευτικής Ρομποτικής στα σχολεία Ράλλειος Σχολή 20 Δεκεμβρίου 2017 Αναπαράσταση του κώδικα σε ένα ρομποτικό project Τάσος Λαδιάς Σχολικός Σύμβουλος ΠΕ19 ladiastas@gmail.com

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

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

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

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

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

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

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

METROPOLIS. Ένα περιβάλλον σχεδιασμού για ετερογενή συστήματα

METROPOLIS. Ένα περιβάλλον σχεδιασμού για ετερογενή συστήματα METROPOLIS Ένα περιβάλλον σχεδιασμού για ετερογενή συστήματα Ενσωματωμένα συστήματα Ορίζονται ως ηλεκτρονικά συστήματα τα οποία χρησιμοποιούν υπολογιστές και ηλεκτρονικά υποσυστήματα για να εκτελέσουν

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

Κεφάλαιο 14: Συμβουλές προς έναν νέο προγραμματιστή

Κεφάλαιο 14: Συμβουλές προς έναν νέο προγραμματιστή Κεφάλαιο 14: Συμβουλές προς έναν νέο προγραμματιστή Φτάσαμε σιγά σιγά στο τέλος του βιβλίου. Αντί για κάποιον επίλογο σκέφτηκα να συλλέξω κάποια πράγματα που θα ήθελα να πω σε κάποιον ο οποίος αρχίζει

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

ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Κάθε υποπρόγραμμα έχει μόνο μία είσοδο και μία έξοδο. Κάθε υποπρόγραμμα πρέπει να είναι ανεξάρτητο από τα άλλα.

ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Κάθε υποπρόγραμμα έχει μόνο μία είσοδο και μία έξοδο. Κάθε υποπρόγραμμα πρέπει να είναι ανεξάρτητο από τα άλλα. ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ Τμηματικός προγραμματισμός ονομάζεται η τεχνική σχεδίασης και ανάπτυξης των προγραμμάτων ως ένα σύνολο από απλούστερα τμήματα προγραμμάτων. Όταν ένα τμήμα προγράμματος επιτελεί ένα αυτόνομο

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

Ανάπτυξη & Σχεδίαση Λογισμικού (ΗΥ420)

Ανάπτυξη & Σχεδίαση Λογισμικού (ΗΥ420) Ανάπτυξη & Σχεδίαση Λογισμικού (ΗΥ420) Διάλεξη 2: Βασικές Έννοιες Τεχνολογίας Λογισμικού Ο Ρόλος του Τεχνολόγου Λογισμικού Επιστήμη Υπολογιστών Πελάτης 2 Θεωρίες Λειτουργίες Υπολογιστή Πρόβλημα Σχεδιασμός

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

Κεφ. 2 Θέματα Θεωρητικής Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19

Κεφ. 2 Θέματα Θεωρητικής Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19 Κεφ. 2 Θέματα Θεωρητικής Επιστήμης Υπολογιστών Κεφ. 2 Θεωρητική Επιστήμη Υπολογιστών 2.3.1.1 Έννοια προγράμματος Τι είναι πρόγραμμα και τι προγραμματισμός; Πρόγραμμα είναι το σύνολο εντολών που χρειάζεται

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

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

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

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

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

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

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

Τεχνολογία Λογισμικού

Τεχνολογία Λογισμικού Τεχνολογία Λογισμικού Προαπαιτήσεις Γνώση Αρχών Προγραμματισμού Γνώση Γλώσσας Προγραμματισμού (C++, Java, Pascal) Χρήση Η/Υ (Σχεδίαση, Επεξ. Κειμένου) Κριτική και Συνθετική Ικανότητα Σκοπός μαθήματος Γνωριμία

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

Εισαγωγή, Βασικές Έννοιες, Οφέλη και Κίνδυνοι

Εισαγωγή, Βασικές Έννοιες, Οφέλη και Κίνδυνοι Εισαγωγή, Βασικές Έννοιες, Οφέλη και Κίνδυνοι Ευθύμιος Ταμπούρης tambouris@uom.gr Επιστημονική Επιχειρηματική Χρήση των Η/Υ Η επιστημονική κοινότητα ασχολείται με τη λύση πολύπλοκων μαθηματικών προβλημάτων

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

ΠΡΟΓΡΑΜΜΑ ΜΕΤΑΠΤΥΧΙΑΚΩΝ ΣΠΟΥΔΩΝ «ΔΙΟΙΚΗΣΗ της ΥΓΕΙΑΣ» ΑΞΙΟΛΟΓΗΣΗ ΑΠΟΔΟΣΗΣ ΠΡΟΣΩΠΙΚΟΥ: ΜΕΛΕΤΗ ΠΕΡΙΠΤΩΣΗΣ ΙΔΙΩΤΙΚΟΥ ΝΟΣΟΚΟΜΕΙΟΥ ΠΑΡΑΓΙΟΥΔΑΚΗ ΜΑΓΔΑΛΗΝΗ

ΠΡΟΓΡΑΜΜΑ ΜΕΤΑΠΤΥΧΙΑΚΩΝ ΣΠΟΥΔΩΝ «ΔΙΟΙΚΗΣΗ της ΥΓΕΙΑΣ» ΑΞΙΟΛΟΓΗΣΗ ΑΠΟΔΟΣΗΣ ΠΡΟΣΩΠΙΚΟΥ: ΜΕΛΕΤΗ ΠΕΡΙΠΤΩΣΗΣ ΙΔΙΩΤΙΚΟΥ ΝΟΣΟΚΟΜΕΙΟΥ ΠΑΡΑΓΙΟΥΔΑΚΗ ΜΑΓΔΑΛΗΝΗ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΟΙΚΟΝΟΜΙΚΗΣ ΕΠΙΣΤΗΜΗΣ ΠΡΟΓΡΑΜΜΑ ΜΕΤΑΠΤΥΧΙΑΚΩΝ ΣΠΟΥΔΩΝ «ΔΙΟΙΚΗΣΗ της ΥΓΕΙΑΣ» ΑΞΙΟΛΟΓΗΣΗ ΑΠΟΔΟΣΗΣ ΠΡΟΣΩΠΙΚΟΥ: ΜΕΛΕΤΗ ΠΕΡΙΠΤΩΣΗΣ ΙΔΙΩΤΙΚΟΥ ΝΟΣΟΚΟΜΕΙΟΥ ΠΑΡΑΓΙΟΥΔΑΚΗ ΜΑΓΔΑΛΗΝΗ Διπλωματική

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

Υποδείγματα Ανάπτυξης

Υποδείγματα Ανάπτυξης Υποδείγματα Ανάπτυξης περιεχόμενα παρουσίασης Αποσύνθεση Αφαίρεση Μοντελοποίηση Η δεδομένο λειτουργική προσέγγιση Η αντικειμενοστρεφής προσέγγιση αποσύνθεση Όταν επιχειρούμε τη λύση ενός προβλήματος, πρώτα

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

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

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

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

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

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

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

Σημειώσεις στο μάθημα «Στοιχεία Προγραμματισμού σε Γραφικό Περιβάλλον»

Σημειώσεις στο μάθημα «Στοιχεία Προγραμματισμού σε Γραφικό Περιβάλλον» 1. Κύκλος ζωής λογισμικού Ο κύκλος ζωής λογισμικού είναι οι φάσεις (τα στάδια) από τις οποίες διέρχεται μία εφαρμογή λογισμικού, από την σύλληψη της ιδέας, τη διαδικασία κατασκευής / ανάπτυξης, τη λειτουργία

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

ΔΙΔΑΚΤΙΚΗ της ΠΛΗΡΟΦΟΡΙΚΗΣ

ΔΙΔΑΚΤΙΚΗ της ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΔΙΔΑΚΤΙΚΗ της ΠΛΗΡΟΦΟΡΙΚΗΣ Μ. Γρηγοριάδου Ρ. Γόγουλου Ενότητα: Η Διδασκαλία του Προγραμματισμού Περιεχόμενα Παρουσίασης

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

ΜΑΘΗΜΑ: Εισαγωγή στις Αρχές της Επιστήμης των Η/Υ. 1 η ΘΕΜΑΤΙΚΗ ΕΝΟΤΗΤΑ: ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ

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

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

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0. Σόλωνος 108,Τηλ Φαξ

ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0. Σόλωνος 108,Τηλ Φαξ ΕΞΕΤΑΣΤΕΑ ΥΛΗ (SYLLABUS) ADVANCED αντικειμενοστραφής προγραμματισμός ΕΚΔΟΣΗ 1.0 ΤΙ ΕΙΝΑΙ ΤΟ ADVANCED Οι Advanced θεματικές ενότητες είναι είναι κατάλληλες για άτομα που επιθυμούν να συνεχίσουν σπουδές

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

ΠΛΗΡΟΦΟΡΙΚΗ Γ ΤΑΞΗΣ ΓΕΛ ΚΛΕΙΩ ΣΓΟΥΡΟΠΟΥΛΟΥ. ΣΥΓΧΡΟΝΑ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΑ ΠΕΡΙΒΑΛΛΟΝΤΑ Αντικειμενοστραφής Προγραμματισμός

ΠΛΗΡΟΦΟΡΙΚΗ Γ ΤΑΞΗΣ ΓΕΛ ΚΛΕΙΩ ΣΓΟΥΡΟΠΟΥΛΟΥ. ΣΥΓΧΡΟΝΑ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΑ ΠΕΡΙΒΑΛΛΟΝΤΑ Αντικειμενοστραφής Προγραμματισμός ΠΛΗΡΟΦΟΡΙΚΗ Γ ΤΑΞΗΣ ΓΕΛ ΣΥΓΧΡΟΝΑ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΑ ΠΕΡΙΒΑΛΛΟΝΤΑ Αντικειμενοστραφής Προγραμματισμός ΚΛΕΙΩ ΣΓΟΥΡΟΠΟΥΛΟΥ ΥΠΠΕΘ 04.07.2019 ΕΠΙΜΟΡΦΩΣΗ ΣΤΟ ΝΕΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΥΛΙΚΟ Αντικειμενοστραφής Προγραμματισμός.

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΟΙΚΟΝΟΜΙΚΗΣ ΕΠΙΣΤΗΜΗΣ ΑΜΕΣΕΣ ΞΕΝΕΣ ΕΠΕΝΔΥΣΕΙΣ ΣΕ ΕΥΡΩΠΑΙΚΕΣ ΧΩΡΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΟΙΚΟΝΟΜΙΚΗΣ ΕΠΙΣΤΗΜΗΣ ΠΡΟΓΡΑΜΜΑ ΜΕΤΑΠΤΥΧΙΑΚΩΝ ΣΠΟΥΔΩΝ ΣΤΗΝ ΟΙΚΟΝΟΜΙΚΗ ΚΑΙ ΕΠΙΧΕΙΡΗΣΙΑΚΗ ΣΤΡΑΤΗΓΙΚΗ ΑΜΕΣΕΣ ΞΕΝΕΣ ΕΠΕΝΔΥΣΕΙΣ ΣΕ ΕΥΡΩΠΑΙΚΕΣ ΧΩΡΕΣ Αθανάσιος Νταραβάνογλου Διπλωματική

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

4.4 Μετατροπή από μία μορφή δομής επανάληψης σε μία άλλη.

4.4 Μετατροπή από μία μορφή δομής επανάληψης σε μία άλλη. 4.4 Μετατροπή από μία μορφή δομής επανάληψης σε μία άλλη. Η μετατροπή μιας εντολής επανάληψης σε μία άλλη ή στις άλλες δύο εντολές επανάληψης, αποτελεί ένα θέμα που αρκετές φορές έχει εξεταστεί σε πανελλαδικό

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

Εισαγωγή στον Προγραμματισμό με C++

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

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

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

FORTRAN και Αντικειμενοστραφής Προγραμματισμός FORTRAN και Αντικειμενοστραφής Προγραμματισμός Παραδόσεις Μαθήματος 2016 Δρ Γ Παπαλάμπρου Επίκουρος Καθηγητής ΕΜΠ georgepapalambrou@lmentuagr Εργαστήριο Ναυτικής Μηχανολογίας (Κτίριο Λ) Σχολή Ναυπηγών

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

«Αξιολόγηση ατόμων με αφασία για Επαυξητική και Εναλλακτική Επικοινωνία, σύμφωνα με το μοντέλο συμμετοχής»

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

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

φροντιστήρια Θέματα Ανάπτυξης Εφαρμογών σε Προγραμματιστικό Περιβάλλον Γ λυκείου Προσανατολισμός Σπουδών Οικονομίας και Πληροφορικής

φροντιστήρια   Θέματα Ανάπτυξης Εφαρμογών σε Προγραμματιστικό Περιβάλλον Γ λυκείου Προσανατολισμός Σπουδών Οικονομίας και Πληροφορικής Θέματα Ανάπτυξης Εφαρμογών σε Προγραμματιστικό Περιβάλλον Γ λυκείου Προσανατολισμός Σπουδών Οικονομίας και Πληροφορικής Θέμα Α Α1. Να γράψετε στο τετράδιο σας το γράμμα της κάθε πρότασης και δίπλα τη λέξη

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

Τεχνολογία Λογισμικού

Τεχνολογία Λογισμικού Τμήμα Πληροφορικής & Τηλεπικοινωνιών, ΕΚΠΑ Τεχνολογία Λογισμικού 8ο Εξάμηνο 2018 19 Unified Modeling Language II Δρ. Κώστας Σαΐδης saiko@di.uoa.gr Μοντελοποίηση δομής Διαγράμματα κλάσεων Class diagrams

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Λογική. Δημήτρης Πλεξουσάκης

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

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

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008 ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008 Κατασκευαστές (Constructors) Ειδικός τύπος μεθόδων, οι οποίες: - είναι public και έχουν το ίδιο όνομα με αυτό της κλάσης - χρησιμοποιούνται για να αρχικοποιήσουν κάποιες

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

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

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

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

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

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ. 1 ο ΚΕΦΑΛΑΙΟ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ 1 ο ΚΕΦΑΛΑΙΟ 1) Τι είναι πρόβλημα (σελ. 3) 2) Τι είναι δεδομένο, πληροφορία, επεξεργασία δεδομένων (σελ. 8) 3) Τι είναι δομή ενός προβλήματος (σελ. 8)

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

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

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

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

Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA Τι θα συζητήσουμε σήμερα Αφαιρέσεις στη Java Abstract μέθοδοι και abstract κλάσεις Interfaces (=διασυνδέσεις, διεπαφές) Instanceof Παραδείγματα κώδικα Αφηρημένες

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

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

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

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

Εισαγωγή στη Δασική Πληροφορική

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

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

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

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

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

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

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

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

Εισαγωγή στην Τεχνολογία Λογισμικού

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

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

Comparative Study of API vs. Open-Source Software ZAPROUDI A. PASCHALIA. Supervisor: CHATZHGEORGIOU ALEXANDROS

Comparative Study of API vs. Open-Source Software ZAPROUDI A. PASCHALIA. Supervisor: CHATZHGEORGIOU ALEXANDROS Comparative Study of API vs. Open-Source Software ZAPROUDI A. PASCHALIA Supervisor: CHATZHGEORGIOU ALEXANDROS ΕΙΣΑΓΩΓΗ «Κάθε στοιχείο σε μία βιβλιοθήκη γράφεται για να διατηρηθεί στον χρόνο» J. Tulach.

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

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

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

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

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

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

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

ΑΦAΙΡΕΤΙΚΟΣ (ή ΑΦΗΡΗΜΕΝΟΣ) ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) - σύνολο δεδομένων (data, objects) - σύνολο πράξεων στα δεδομένα

ΑΦAΙΡΕΤΙΚΟΣ (ή ΑΦΗΡΗΜΕΝΟΣ) ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) - σύνολο δεδομένων (data, objects) - σύνολο πράξεων στα δεδομένα Τύπος Δεδομένων: ΑΦAΙΡΕΤΙΚΟΣ (ή ΑΦΗΡΗΜΕΝΟΣ) ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) - σύνολο δεδομένων (data, objects) - σύνολο πράξεων στα δεδομένα - Ένας ΑΤΔ είναι ένα μαθηματικό μοντέλο (οντότητα)

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

Ανάπτυξη & Σχεδίαση Λογισμικού (ΗΥ420)

Ανάπτυξη & Σχεδίαση Λογισμικού (ΗΥ420) Ανάπτυξη & Σχεδίαση Λογισμικού (ΗΥ420) Διάλεξη 8: Σχεδίαση Συστήματος Σχεδίαση Συστήματος 2 Διεργασία μετατροπής του προβλήματος σε λύση. Από το Τί στο Πώς. Σχέδιο: Λεπτομερής περιγραφή της λύσης. Λύση:

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

Μοντέλο Οντοτήτων-Συσχετίσεων. Η ανάγκη Διαγράμματα ΟΣ Σύνολα Οντοτήτων-Συσχετίσεων Απεικονίσεις Επεκτάσεις

Μοντέλο Οντοτήτων-Συσχετίσεων. Η ανάγκη Διαγράμματα ΟΣ Σύνολα Οντοτήτων-Συσχετίσεων Απεικονίσεις Επεκτάσεις Η ανάγκη Διαγράμματα ΟΣ Σύνολα Οντοτήτων-Συσχετίσεων Απεικονίσεις Επεκτάσεις Μοντέλα Δεδομένων Μοντέλο: αφαιρετική αναπαράσταση του πραγματικού κόσμου. Μοντέλα βασισμένα σε εγγραφές (record based models)

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

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

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 2. Πίνακες 45 23 28 95 71 19 30 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 21/10/2016

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