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

Σχετικά έγγραφα
Στατιστικό κριτήριο χ 2

Σχήµα 6.1: Εισαγωγή της εντολής Read From Spreadsheet File στο Block Diagram.

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα)

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ. Πρώτη Σειρά ασκήσεων Ημερομηνία Παράδοσης: 24 Απριλίου 2018, 12 μ.μ.

α) Κύκλος από δύο δοσµένα σηµεία Α, Β. Το ένα από τα δύο σηµεία ορίζεται ως κέντρο αν το επιλέξουµε πρώτο. β) Κύκλος από δοσµένο σηµείο και δοσµένο ευ

Επίλυση Προβληµάτων µε Greedy Αλγόριθµους

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

Ελάχιστα Γεννητορικά ένδρα

Τεχνολογία Διοίκησης Επιχειρησιακών Διαδικασιών

ΕΠΛ 231 Δοµές Δεδοµένων και Αλγόριθµοι 11-1

Κατ οίκον Εργασία 5 Σκελετοί Λύσεων

Κρυπτογραφία και Πολυπλοκότητα

Τοµέας Εϖιµόρφωσης & Κατάρτισης

Εργαστήριο Επεξεργασίας Πληροφορίας και Υπολογισμών Τομέας Ηλεκτρονικής και Υπολογιστών. ΤΗΜΜΥ Α.Π.Θ Δευτέρα 22 / 11 / 2017 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Η εφαρµογή xsortlab. Οπτικός τρόπος ταξινόµησης

1. Εγκατάσταση του NetMeeting

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΚΕΝΤΡΟ ΙΑΧΕΙΡΙΣΗΣ ΙΚΤΥΩΝ. Εγχειρίδιο χρήσης των υπηρεσιών τηλεκπαίδευσης του Πανεπιστηµίου Ιωαννίνων. Ασύγχρονη τηλεκπαίδευση

Βασικές Έννοιες Δοµών Δεδοµένων

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΔΙΠΛΩΜΑΤΙKH ΕΡΓΑΣΙΑ. «Υλοποίηση ενός αναλυτή ροής δεδοµένων για Javaπρογράµµατα»

Εκπαιδευτικό λογισµικό κατασκευής φασµάτων Educational SPECtrum. ESPECsoftware

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

ΕΝΟΤΗΤΑ 9 ΕΝΩΣΗ ΞΕΝΩΝ ΣΥΝΟΛΩΝ ( ΟΜΕΣ UNION-FIND)

Γράφηµα (Graph) Εργαστήριο 10. Εισαγωγή

1 Διάσχιση κατευθυνόμενων γραφημάτων

Οδοραµα mobile ΑΠΟΘΗΚΗ

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal

Οικονοµικό Πανεπιστήµιο Αθηνών. Τµήµα Πληροφορικής. Φθινοπωρινό Εξάµηνο Δοµές Δεδοµένων - Εργασία 2. Διδάσκων: E. Μαρκάκης

ΠΕΡΙ ΜΕΤΑΒΑΣΗΣ ΑΠΟ ΤΑ ΙΑΓΡΑΜΜΑΤΑ ΡΟΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ ΣΕ ΙΑΓΡΑΜΜΑΤΑ ΟΜΗΣ Ε ΟΜΕΝΩΝ

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

Ηλεκτρονικές Υπηρεσίες: ηλώσεις Μαθηµάτων Συγγραµµάτων, Ηλεκτρονικό Ταχυδροµείο, Πιστοποιητικό Ασφάλειας

Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find)

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

Τοµέας Εϖιµόρφωσης & Κατάρτισης

ΔΙΑΣΧΙΣΗ ΓΡΑΦΗΜΑΤΩΝ 1

Υπόδειγµα 1: Πλήρης κυριότητα σε διαµέρισµα µε µία αποθήκη χωρίς χιλιοστά στο οικόπεδο και µία θέση στάθµευσης µε χιλιοστά στο οικόπεδο

ΕΠΛ 232: Αλγόριθµοι και Πολυπλοκότητα. Κατ οίκον Εργασία 2A Σκελετοί Λύσεων

Initialize each person to be free. while (some man is free and hasn't proposed to every woman) { Choose such a man m w = 1 st woman on m's list to

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Τοµέας Εϖιµόρφωσης & Κατάρτισης

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

Εφαρµογή EXTRA. ιαδικασία ιαχείρισης Εκτύπωσης Ισοζυγίου Γενικού - Αναλυτικών Καθολικών

Αφηρημένες Δομές Δεδομένων. Στοίβα (Stack) Υλοποίηση στοίβας

Θέματα Μεταγλωττιστών

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

Αλγόριθμοι και πολυπλοκότητα Περιήγηση Πανεπιστημίων

Διαγράμματα UML για την τεκμηρίωση της Αρχιτεκτονικής

Γέφυρες σε Δίκτυα. Μας δίνεται ένα δίκτυο (κατευθυνόμενο γράφημα) αφετηριακός κόμβος. Γέφυρα του (με αφετηρία τον ) :

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

ΕΘΝΙΚΟ!ΜΕΤΣΟΒΙΟ!ΠΟΛΥΤΕΧΝΕΙΟ! ΣΧΟΛΗ!ΧΗΜΙΚΩΝ!ΜΗΧΑΝΙΚΩΝ!!

Δοµές Δεδοµένων. 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων. Ε. Μαρκάκης

Εισαγωγή στην επιστήμη των υπολογιστών. Οργάνωση εδομένων Κεφάλαιο 11ο ομές εδομένων

Θεωρία Αποφάσεων και Βελτιστοποίηση

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

ΕΝΟΤΗΤΑ 6 ΛΙΣΤΕΣ ΠΑΡΑΛΕΙΨΗΣ (SKIP LISTS)

Υπολογιστικά Συστήματα

Θέματα Μεταγλωττιστών

5. MΑΚΡΟΕΝΤΟΛΕΣ. Η δηµιουργία Μακροεντολής γίνεται µε δύο τρόπους :

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

ηµιουργία παρουσιάσεων (Power Point)

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Στοιχειώδεις Δοµές Δεδοµένων Δοµικά Στοιχεία και Πίνακες Κεφάλαιο 3 (3.1 και 3.2) Ε. Μαρκάκης Επικ. Καθηγητής

Επισκόπιση. Κατανεµηµένα Συστήµατα Ι Μάθηµα Βασικής Επιλογής, Χειµερινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων. Collecting Messages Statistics

ΤΕΙ ΠΕΙΡΑΙΑ Τµήµα Μηχανολογίας

Οδηγίες για την υποβολή της ηλεκτρονικής δήλωσης µαθηµάτων των φοιτητών/τριών του Π.Τ..Ε. Βήµα 1 ο ) Κάθε φοιτητής / τρια πρέπει να αποκτήσει λογαριασ

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

υναµικές οµές εδοµένων

4. ΔΙΚΤΥΑ

Κεφάλαιο 11 Ένωση Ξένων Συνόλων

Η στοίβα (stack) H στοίβα είναι ένας αποθηκευτικός χώρος οργανωµένος κατά τέτοιο τρόπο ώστε να υποστηρίζει δύο βασικές λειτουργίες:

Επαναληπτικό ιαγώνισµα Πληροφορικής Γ Γυµνασίου Γιώργος Λιακέας Σχολικός Σύµβουλος Πληροφορικής Ερωτήσεις

Προβλήματα Ελάχιστου Κόστους Ροής σε Δίκτυο. Δίκτυα Ροής Ελάχιστου Κόστους (Minimum Cost Flow Networks)

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

Οδηγίες για το Βιβλίο Κοστολογίου στα Γ κατηγορίας βιβλία

Γραµµατικές για Κανονικές Γλώσσες

υαδικό έντρο Αναζήτησης (BSTree)

Στοιχεία Θεωρίας Γραφηµάτων (3)

Απαρίθµηση Μονοπατιών. Στοιχεία Θεωρίας Γραφηµάτων (3) Μονοπάτια και Κυκλώµατα Euler. Ορέστης Τελέλης

Οδηγίες. Xρήση της Υπηρεσίας Φιλοξενίας Προσωπικών Ιστοσελίδων (Private Web hosting)

Διάλεξη 21: Γράφοι II - Τοπολογική Ταξινόμηση

6η Διάλεξη Διάσχιση Γράφων και Δέντρων

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

4.3. Γραµµικοί ταξινοµητές

Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλή

Δοµές Δεδοµένων. 3η Διάλεξη Στοιχειώδεις Δοµές Δεδοµένων: Πίνακες. Ε. Μαρκάκης

Boolean Networks Assignment. υαδικά δίκτυα. Σκοπός της εργασίας Υλοποίηση της πλατφόρµας Οδηγίες Βιβλιογραφία είτε ακόµη...

H ΓΛΩΣΣΑ C. Μάθηµα 1: Το Πρώτο µας Πρόγραµµα σε C. ηµήτρης Ψούνης

Γ' ΛΥΚΕΙΟΥ ΤΕΧΝΟΛΟΓΙΚΗ ΚΑΤΕΥΘΥΝΣΗ ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ. Óõíåéñìüò ΕΚΦΩΝΗΣΕΙΣ

Θεωρία Γραφημάτων Θεμελιώσεις-Αλγόριθμοι-Εφαρμογές

ΣΕΜΙΝΑΡΙΑ ΝΕΛΕ 2004, ΑΣΚΗΣΕΙΣ

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

1. ΤΟ ERGOWIN ΜΕ ΜΙΑ ΜΑΤΙΑ

Ανάλυση ιακύµανσης Μονής Κατεύθυνσης

/03/ /03/ /02/ /03/ /03/ /04/2013, ( 11/03/ /05/2013

Επεξεργασία Αρχείων Κειµένου

HY380 Αλγόριθμοι και πολυπλοκότητα Hard Problems

Ο Αλγόριθµος της Simplex

Σημειωματάριο Δευτέρας 4 Δεκ. 2017

Εργαστήριο 2 - Άσκηση - Ανάλυση

Εισαγωγή στην Επιστήμη των Υπολογιστών

ουλεύοντας µε το Finale (7η συνέχεια)

Transcript:

ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ ΑΝΑΛΥΤΗ ΡΟΗΣ ΔΕΔΟΜΕΝΩΝ Παρακάτω θα αναφερθούµε συνοπτικά στο τρόπο λειτουργίας και τη βασική αρχιτεκτονική του αναλυτή ροής δεδοµένων. Σκοπός του εργαλείου είναι να δέχεται ως είσοδο τον γράφο χρήσης ορισµού ενός προγράµµατος ή µιας µονάδας κώδικα, ο οποίος είναι ο γράφος ελέγχου ροής του προγράµµατος όπου στους κόµβους και τις ακµές του έχουµε συσχετίσει το σύνολο των µεταβλητών που ορίζονται καθώς και το σύνολο των µεταβλητών που χρησιµοποιούνται στο κόµβο ή την ακµή, και να µας παράγει τα µονοπάτια που χρειάζεται να καλύψουµε για να ικανοποιήσουµε το κριτήριο που επιλέγουµε. Τα κριτήρια που µπορούµε να επιλέξουµε είναι τα all-defs,all-c-uses/some-p-uses,all-p-usesκαι all-du-paths.η είσοδος γίνεται σ ενα γραφικό περιβάλλον αναπτυγµένο σε περιβάλλον Swing. Το αρχείο που φορτώνουµε είναι σε µορφή XML µε µια συκεκριµένη δοµή που θα παρουσιάσουµε παρακάτω. Γραφικό περιβάλλον Το βασικό παράθυρο της εφαρµογής µας είναι αναπτυγµένο σε JavaSwingκαι περιλαµβάνει ένα κουµπί που φορτώνουµε το αρχείο XML, τέσσερα κουµπιά για τα κριτήρια µας και µια περιοχή κειµένου textarea που µας δείχνει τ αποτελέσµατα. είχνουµε σε βήµατα πως βρίσκουµε τα µονοπάτια έχοντας το γράφο ορισµού χρήσης Βήµα 1. Με διπλό κλικ στο αρχείο dataflowanalyzer.jarεµφανίζεται το παράθυρο της εφαρµογής µας

Βήµα 2 Επιλέγουµε το αρχείο XML επιλέγωντας Selectfile

Βήµα 3 Επιλέγουµε το κριτήριο που επιθυµούµε

Βλέπουµε ότι η εφαρµογή µας έχει δώσει για κάθε µεταβλητή το κόµβο που ορίζεται, το κόµβο ή την ακµή που χρησιµοποιείται και το µονοπάτι που περνάει από αυτά τα σηµεία. Τέλος µας δίνει και ένα σύνολο από µονοπάτια που καλύπτουν το κριτήριο που επιλέξαµε. Τα µονοπάτια αυτά είναι µοναδικά. Γράφος ορισμού χρήσης Βασικό σηµείο για την εφαρµογή µας είναι η είσοδος που της δίνουµε. Αυτό που δίνουµε ως είσοδο είναι ο γράφος ορισµού χρήσης του προγράµµατος προς εξέταση µε µορφή XML. Η µορφή αυτή πρέπει να είναι συγκεκριµένη. Το αρχικό στοιχείο του αρχείου XML είναι το root element Graph. Ύστερα υπάρχουν ως στοιχεία παιδιά του Graph το στοιχείο Node και το Edge. Το στοιχείο Node έχει παιδιά τα στοιχεία NodeName, που είναι το όνοµα του κόµβου, στοιχεία Def που είναι οι µεταβλητές που ορίζονται στο κόµβο και Cuse, που είναι µεταβλητές που γίνεται χρήση υπολογισµού στο κόµβο. Το στοιχείο Edge έχει στοιχεία παιδιά τα EdgeName, που είναι το όνοµα της ακµής και Puse που είναι οι µεταβλητές που γίνεται χρήση βεβαίωσης στο κόµβο. Ένα παράδειγµα ενός τέτοιου αρχείου XML δίνεται παρακάτω:

<Graph> <Node> <NodeName>0</NodeName> </Node> <Node> <Def>triOut</Def> <Def>Side2</Def> <Cuse></Cuse> <NodeName>1</NodeName> </Node> <Node> <Def>Side1</Def> <Cuse>triOut</Cuse> <NodeName>2</NodeName> </Node> <Edge> <Def>Side1</Def> <Cuse>triOut</Cuse> <EdgeName>1-2</EdgeName> </Edge> </Graph> <Puse>triOut</Puse> Η δοµή αυτή πρέπει ν ακολουθηθεί για όλο το γράφο. Ένα βασικό στοιχείο είναι ότι τα ονόµατα των γράφων πρέπει να είναι αριθµοί και να ξεκινάνε από το 0, γιατί η σχέση των κόµβων µεταξύ τους έχει αναπαρασταθεί µ ενα διδιάστατο πίνακα σε Java.

Κώδικας της εφαρμογής Οι κλάσεις που έχουµε χρησιµοποιήσει για την ανάπτυξη της εφαρµογής είναι οι Graph.java, Node.java, Edge.java, DataFlowAnalyzer.java, ReadXML.javaκαι MainWindow.java Ο γράφος ορισµού χρήσης έχει υλοποιηθεί σε Java δηµιουργώντας µια κλάση, την Graph.java. Οι βασικές µεταβλητές αυτής της κλάσης είναι η nodelist, η edgelist και η admatrix. Η nodelist είναι µια µεταβλητή τύπου Map<String, Node> που περιέχει όλους τους κόµβους του γράφου ορισµού χρήσης και αντιστοιχεί τον κάθε κόµβο µε το όνοµα του. Η edgelist είναι µια µεταβλητή τύπου Map<String, Edge> που περιέχει όλες τις ακµές του γράφου ορισµού χρήσης και αντιστοιχεί την κάθε ακµή µε το όνοµα της. Τέλος η admatrix είναι µια µεταβλητή πίνακας τύπου Integer[][] που περιέχει τις συνδέσεις των κόµβων µεταξύ τους. Οι βασικέςµέθοδοιτης Graph.java είναι η addnode(node node), η addedge(edge edge), η createadjmatrix() και η adjacentnodes(string last). Η addnode(nodenode) είναι µια publicvoid µέθοδος η οποία δέχεται ως όρισµα µια µεταβλητή τύπου Node και την προσθέτει στο γράφο. Η addedge(edgeedge) είναι επίσης µια publicvoid µέθοδος η οποία δέχεται ως όρισµα µια µεταβλητή τύπου Edge και προσθέτει στο γράφο µια ακµή. HcreateAdjMatrix()είναι µια publicvoid η οποία δηµιουργεί τον πίνακα admatrix. Τέλος η adjacentnodes(stringlast) είναι µια µέθοδος publiclinkedlist<string> η οποία δέχεται ως είσοδο µια µεταβλητή τύπου String και επιστρέφει πίσω µια συνδεδεµένη λίστα µε τους γειτονικούς κόµβους ενός κόµβου του γράφου. Μια απ τις οντότητες που αποτελούν το γράφο είναι ο κόµβος. Αυτή η οντότητα έχει αναπαρασταθεί σε Java ως µια κλάση µε το όνοµα Node.java. Οι βασικές της µεταβλητές είναι η name, η defs και η cuses. Η name είναι µια µεταβλητή τύπου String που αντιπροσωπεύει το όνοµα του κόµβου. Η defs είναι µια µεταβλητή τύπου List<String> που είναι µια λίστα µε όλες τις µεταβλητές του προγράµµατος που ορίζονται στο συγκεκριµένο κόµβο. Τέλος η cuses είναι µια µεταβλητή τύπου List<String> που είναι µια λίστα µε όλες τις µεταβλητές του προγράµµατος που γίνεται χρήση υπολογισµού στο συγκεκριµένο κόµβο. Οι βασικές µέθοδοι είναι δύο publicvoid µέθοδοι που είναι setters για να θέτουν τιµές για τις µεταβλητές defs και cuses, οι setdefs και setcuses. Η επόµενη οντότητα που απαρτίζει το γράφο είναι η ακµή. Αυτή έχει αναπαρασταθεί σε Java µε µια κλάση µε το όνοµα Edge.java. Οι βασικές της µεταβλητές είναι η name και η puses. Η name είναι µια µεταβλητή τύπου String που αναπαριστά το όνοµα της ακµής. Σαν όνοµα µιας ακµής χρησιµοποιούνται τα ονόµατα δύο κόµβων χωρισµένα µε το χαρακτήρα -, π.χ. «1-2». Η

pusesείναι µια µεταβλητή τύπου List<String> που είναι µια λίστα µε όλες τις µεταβλητές του προγράµµατος που γίνεται χρήση βεβαίωσης στη συγκεκριµένη ακµή. Η µοναδική µέθοδος της κλάσης είναι µια publicvoid µέθοδος που είναι setter για να θέτει τιµή για τη µεταβλητή puses. Ο αναλυτής ροής δεδοµένων είναι η βασική κλάση της εφαρµογής µας. Έχει αναπαρασταθεί σε Java ως µια κλάση, την dataflowanalyzer.java. Η κλάση αυτή περιέχει τις βασικές µεθόδους µε τις οποίες αναζητούµε και βρίσκουµε µονοπάτια που πληρούν τα κριτήρια που έχουµε ήδη εξετάσει. Ο κατασκευαστής της κλάσης δέχεται ως παράµετρο το γράφο χρήσης ορισµού, δηµιουργεί τον πίνακα γειτνίασης αλλά και αρχικοποιεί τις µεταβλητές που αντιστοιχίζουν τους ορισµούς και τις χρήσεις των µεταβλητών του προς εξέταση προγράµµατος µε τους κόµβους του γράφου που γίνεται ο ορισµός και οι χρήσεις. Ο κώδικας του κατασκευαστή είναι ο ακόλουθος: publicdataflowanalyzer(graphgraph){ } this.g=graph; g.createadjmatrix(); this.createcusesmap(); this.createdefsmap(); this.createpusesmap(); Η κλάση επίσης χρησιµοποιεί κάποιες βοηθητικές µεθόδους που είναι publicstatic οι οποίες επιτελούν διάφορες λειτουργικότητες που βοηθούν στην εύρεση των µονοπατιών. Αυτές βρίσκονται στο τέλος της κλάσης. Οι τρεις µεταβλητές που αντιστοιχίζουν τους ορισµούς και τις χρήσεις των µεταβλητών του προς εξέταση προγράµµατος µε τους κόµβους του γράφου που γίνεται ο ορισµός και οι χρήσεις είναι οι cusesmap, defsmap και pusesmap και είναι τύπου Map<String,String>. Παρακάτω θα αναφερθούµε στις βασικές µεθόδους µε τις οποίες βρίσκουµε τα µονοπάτια ανάλογα µε το κριτήριο που επιθυµούµε. All-defs Η µέθοδος για την εύρεση των µονοπατιών µε βάση το κριτήριο all-defs είναι µια public µέθοδος µε το όνοµα findalldefs().στη µέθοδο αυτή βρίσκουµε όλα τα µονοπάτια για κάθε κόµβο i και κάθε µεταβλητή x που ανήκει στο def(i) προς κάποιο κόµβο του dcu(x,i) ή κάποια ακµή του dpu(x,j,k) τα οποία είναι καθαρά από ορισµούς. Στη µέθοδο γίνεται χρήση βοηθητικών µεθόδων που βρίσκουν µονοπάτι από τον αρχικό κόµβο πρός το κόµβο που ορίζεται η µεταβλητή, µονοπατιού από το κόµβο που ορίζεται η µεταβλητή πρός το κόµβο που

χρησιµοποιείται, όπου εξετάζεται αν το µονοπάτι είναι καθαρό από ορισµούς, αλλιώς βρίσκεται κάποιο άλλο, και τέλος απ το κόµβο που χρησιµοποιείται πρός τον τελικό κόµβο. All-c-uses/some-p-uses Η µέθοδος για την εύρεση των µονοπατιών µε βάση το κριτήριο all-c-uses είναι µια public µέθοδος µε το όνοµα findcuses(). Στη µέθοδο αυτή βρίσκουµε όλα τα µονοπάτια για κάθε κόµβο i και κάθε µεταβλητή x που ανήκει στο def(i) προς κάθε κόµβο του dcu(x,i) τα οποία είναι καθαρά από ορισµούς.αν το dcu(x,i) είναι άδειο τότε βρίσκουµε ένα µονοπάτι απ το dpu(x,i).στη µέθοδο γίνεται χρήση βοηθητικών µεθόδων που βρίσκουν µονοπάτι από τον αρχικό κόµβο πρός το κόµβο που ορίζεται η µεταβλητή, µονοπατιού από το κόµβο που ορίζεται η µεταβλητή πρός το κόµβο που χρησιµοποιείται, όπου εξετάζεται αν το µονοπάτι είναι καθαρό από ορισµούς, αλλιώς βρίσκεται κάποιο άλλο, και τέλος απ το κόµβο που χρησιµοποιείται πρός τον τελικό κόµβο. All-p-uses Η µέθοδος για την εύρεση των µονοπατιών µε βάση το κριτήριο all-p-uses είναι µια public µέθοδος µε το όνοµα findallpuses(). Στη µέθοδο αυτή βρίσκουµε όλα τα µονοπάτια για κάθε κόµβο i και κάθε µεταβλητή x που ανήκει στο def(i) προς κάθε ακµή του dpu(x,i) τα οποία είναι καθαρά από ορισµούς. Στη µέθοδο γίνεται χρήση βοηθητικών µεθόδων που βρίσκουν µονοπάτι από τον αρχικό κόµβο πρός το κόµβο που ορίζεται η µεταβλητή, µονοπατιού από το κόµβο που ορίζεται η µεταβλητή πρός το πρώτο κόµβο της ακµής που χρησιµοποιείται, όπου εξετάζεται αν το µονοπάτι είναι καθαρό από ορισµούς, αλλιώς βρίσκεται κάποιο άλλο, και τέλος απ το δεύτερο κόµβο της ακµής που χρησιµοποιείται πρός τον τελικό κόµβο. All-DU-Paths Η µέθοδος για την εύρεση των µονοπατιών µε βάση το κριτήριο all-du-paths είναι µια public µέθοδος µε το όνοµα findalldupaths(). Στη µέθοδο αυτή βρίσκουµε κάθε µονοπάτι για κάθε κόµβο i και κάθε µεταβλητή x που ανήκει στο def(i) προς κάθε κόµβο του dcu(x,i) και κάθε ακµή του dpu(x,i) τα οποία είναι καθαρά από ορισµούς. Στη µέθοδο γίνεται χρήση των βοηθητικών µεθόδων που γίνονται και στις µεθόδους findcuses() και findallpuses(). Η εύρεση όλων των µονοπατιών από το κόµβο που ορίζεται η µεταβλητή πρός τον κόµβο που χρησιµοποιείται ή το πρώτο κόµβο της ακµής που χρησιµοποιείται, γίνεται µε τη χρήση του αλγορίθµου DFS. Τα µονοπάτια τα βρίσκουµε µε τη µέθοδο getpathsfromanodetoanother(), µέσα στην οποία υλοποιείται ο αλγόριθµος DFS. Με τη µέθοδο αυτή θέτουµε τιµές σε µια µεταβλητή Set<String>που είναι όλα τα δυνατά µονοπάτια από έναν κόµβο προς έναν άλλο και ύστερα το κάθε ένα απ αυτά εξετάζουµε αν είναι def-clearµε την µέθοδο isdefclear() που µας επιστρέφει µια τιµή boolean. Ύστερα βρίσκουµε ένα µονοπάτι απ το rootκόµβο πρός τον πρώτο

κόµβο, κάνουµε concatenateτο Stringαπ το Set<String>και αυτό το κάνουµε concatenateµε ένα µονοπάτι απ το δεύτερο κόµβο προς τον τελικό. ReadXML.java Η κλάση η οποία διαβάζει το αρχείο και δηµιουργεί ένα αντικείµενο τηε κλάσης Graph, το οποίο περνάει ως είσοδο σ ένα αντικείµενο της κλάσης DatFlowAnalyzer, είναι η ReadXML.java. Η βασική της µέθοδος είναι η creategraph, η οποία αρχικοποιεί αντικείµενο τηε κλάσης Graph, διαβάζει το αρχείο και θέτει τιµές για τους κόµβους και τις ακµές του γράφου, καθώς και θέτει τιµές για τις µεταβλητές που ορίζονται και χρησιµοποιούνται σε κάθε κόµβο και ακµή MainWindow.java Η κλάση που δηµιουργεί το παράθυρο της εφαρµογής µας είναι η MainWindow.java. Αυτή χρησιµοποιεί το Swingγια να δηµιουργήσει τη διεπαφή του χρήστη µε την εφαρµογή.