ΠΕΡΙ ΜΕΤΑΒΑΣΗΣ ΑΠΟ ΤΑ ΙΑΓΡΑΜΜΑΤΑ ΡΟΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ ΣΕ ΙΑΓΡΑΜΜΑΤΑ ΟΜΗΣ Ε ΟΜΕΝΩΝ Μερικές παρατηρήσεις και σκέψεις του συγγραφέα του βιβλίου Σχετικά µε τη µετάβαση από Ρ σε ΠΠ υπάρχουν 2 σηµαντικά ερωτήµατα: (α) τι συµβαίνει µε τις χαρακτηριστικές περιοχές "κέντρα δοσοληψιών" τω Ρ και (β) πώς γίνεται η παραγοντοποίηση - συνένωση όταν δύο µετασχηµατισµοί επικοινωνούν µέσω µιας αποθήκης δεδοµένων. Περί κέντρων δοσοληψιών Όπως αναφέρει το βιβλίο (σελ 126) τα κέντρα δοσοληψιών διακρίνονται προκειµένου να διαχειριστούµε τον έλεγχο ροής προγράµµατος. Αυτό επιβεβαιώνεται και στη δραστηριότητα 4.29, ο χώρος, όµως, δεν επέτρεψε την ανάπτυξη του θέµατος µε παράδειγµα µέσα στο κύριο µέρος του κεφαλαίου. Αυτό που είναι σκόπιµο να γίνει, είναι να τονιστεί η χρήση των Κ στη συνένωση των τµηµάτων των Π που έχουν προκύψει από τα βήµατα 1-3 στην ενότητα 4.5.2, σελ 128, αντί της απλής αναφοράς που γίνεται στο "βήµα 3" (στην ίδια σελ). Η τροποποίηση αυτή θα ενσωµατωθεί στο επόµενο πανόραµα. Περί συνένωσης µέσω αποθήκης δεδοµένων Από πουθενά στο βιβλίο ή στη βιβλιογραφία δεν προκύπτει ότι όταν δύο µετασχηµατισµοί επικοινωνούν µέσω Α, µπορεί η συνένωση των Π να γίνει όπως αν δεν υπήρχε η Α. Προκειµένου να µελετήσουµε την επιχειρηµατολογία που αναπτύχθηκε, µπορούµε να αναφερθούµε σε ένα συγκεκριµένο παράδειγµα. Εστω, λοιπόν, ότι έχουµε το ακόλουθο Ρ Σχήµα 1 1
Θεωρούµε το Μ3 ως ΚΜ και κάνουµε πρώτου επιπέδου παραγοντοποίηση, οπότε καταλήγουµε στα ακόλουθα, ασύνδετα Π: Σχήµα 2 Σχήµα 3 Σχήµα 4 Σχήµα 5 Η συνένωση δεν αποτελεί πρόβληµα για κανένα, εκτός από το τελευταίο (Σχήµα 5). Θα διακρίνουµε δύο περιπτώσεις, για να παρακολουθήσουµε τον προβληµατισµό που αναπτύχθηκε 2
Περίπτωση 1. Θα δεχτούµε τον ισχυρισµό ότι η ενδιάµεση αποθήκη δεδοµένων µπορεί να αγνοηθεί και η συνένωση να γίνει όπως θα γίνονταν αν αυτή δεν υπήρχε. Τότε θα ήταν σα να είχαµε το ακόλουθο Ρ : Σχήµα 6 Η δε συνένωση, θα έδινε το ακόλουθο αποτέλεσµα: Σχήµα 7 Για να καταλάβουµε περισσότερο τη σηµασιολογία πίσω από το διάγραµµα αυτό, δίνουµε κάποιον ψευδοκώδικα που αντιστοιχεί στις "επίµαχες" µονάδες. 3
Σχήµα 8 Από τον ψευδοκώδικα προκύπτει ότι ούτε ο µετασχηµατισµός που γράφει στην Α, ούτε αυτός που διαβάζει από αυτήν, έχουν πληροφορία για να αρχικοποιήσουν την Α ως αποθήκη δεδοµένων. Σε επίπεδο ροής, το διάγραµµα αυτό σηµαίνει ότι πάντα, όταν καλείται η EXEC_M2, θα πρέπει να δίνει υπολογισµός του "επίµαχου" δεδοµένου Ε ώστε αυτό να επιστρέφεται στην EXEC_M3. 4
Περίπτωση 2. Ας θεωρήσουµε τώρα ότι κατασκευάζουµε διάγραµµα δοµής προγράµµατος για το αρχικό διάγραµµα ροής, χωρίς να κάνουµε καµία παραδοχή. ηλαδή έχουµε ως αρχική κατάσταση το Ρ που φαίνεται ακολούθως: Σχήµα 9 Θα καταλήξουµε σε δύο τµήµατα Π, τα οποία, µε βάση την πληροφορία που υπάρχει στο Ρ του σχήµατος 9, δεν µπορούν να συνενωθούν. Σχήµα 10 Σχήµα 11 5
Στη συνέχεια, θα προσθέσουµε τον ψευδοκώδικα για τις "επίµαχες" µονάδες προγράµµατος. Σχήµα 12 Από τη σύγκριση των περιεχοµένων των σχηµάτων 8 και 12 προκύπτει ότι στην περίπτωση που αγνοήσουµε την ενδιάµεση αποθήκη δεδοµένων, δεν υπάρχει πουθενά η πληροφορία που σχετίζεται µε την αντιµετώπισή της στον ψευδοκώδικα και στη συνέχεια στον πηγαίο κώδικα. Οπότε, τίθεται επιλογή ενός εκ των δύο: 1. Η Α δεν χρειάζεται και κακώς τοποθετήθηκε εκεί στην αρχή ή 2. Η Α χρειάζεται και δεν µπορεί να φύγει, οπότε η "τυπικά ορθή" αντιµετώπιση είναι αυτή που φαίνεται στα σχήµατα 10-12. Το πρόβληµα που δηµιουργείται τώρα, είναι αυτό της συνένωσης. Τι θα γίνει µε τη συνένωση; Υπάρχουν δύο τρόποι αντιµετώπισής του: 1. Με κάποιο Κ (δεν φαίνεται σε κανένα από τα Ρ του παρόντος κειµένου) το οποίο θα αντιστοιχεί σε κάποια απαίτηση του προβλήµατος. Παράδειγµα: Επιλογή εργασίας µεταξύ "ενηµέρωσης παραµέτρων συστήµατος" (αντιστοιχεί στο EXEC_M2) και "λειτουργία συστήµατος" (αντιστοιχεί στο EXEC_M3). Τότε τα διαγράµµατα συνενώνονται µέσω του Κ. 2. Με έναν ενδιάµεσο µετασχηµατισµό, όπως φαίνεται στο σχήµα 13 6
Σχήµα 13 Αυτός θα είναι που θα περιέχει όλο το business logic επικοινωνίας και χειρισµού της αποθήκης δεδοµένων. Η λύση αυτή έχει το χαρακτηριστικό ότι δηµιουργεί µόνο µία µονάδα (την αντίστοιχη EXEC_DEAL_WITH_E) µε κώδικα που αφορά µόνο την εγγραφή/ανάγνωση στην αποθήκη δεδοµένων. Η "καλύτερη" λύση......είναι προφανές ότι δεν µπορεί να εντοπιστεί εκτός του context κάποιου συγκεκριµένου προβλήµατος. Πάντως το να αγνοήσουµε την ενδιάµεση αποθήκη δεδοµένων και να πράξουµε ως αν να µην υπήρχε µπορεί να δίνει αποτέλεσµα σε πολύ συγκεκριµένες περιπτώσεις προβληµάτων τα οποία θα µπορούσαν να έχουν και άλλο Ρ, το οποίο δεν θα προκαλούσε αυτή την εύλογη συζήτηση και θα µπορούσε να παραγοντοποιηθεί "by the book". Πάντως, είναι χαρακτηριστικό ότι και στη βιβλιογραφία (ακολουθεί) σε βιβλία που αφιερώνεται πολλαπλάσιος χώρος, το ερώτηµα δεν απαντάται... Β.Βεσκούκης ΒΙΒΛΙΟΓΡΑΦΙΑ 1. Pressman, "Software Engineering, European adaptation", Fourth Edition, κεφάλαια 13 και 14 και ιδιαίτερα ενότητες 13.4.6, 13.4.7, 13.5.4, 14.3, 14.4, 14.5 2. Sommerville, "Software Engineering", Fifth edition, κεφάλαιο 15 7