Δομήστε μια εφαρμογή αρχειοθέτησης!!! (Μέρος 1ο)

Στο 1ο μέρος του προγραμματισμού σε Visual Basic. ΝΕΤ, θα δούμε πώς θα δομήσουμε λογικά την εφαρμογή μας και εν συνεχεία πώς θα σχεδιάσουμε τη φόρμα της.
Είναι σκόπιμο να σταθούμε και να κάνουμε μία λογική ανάλυση της δομής και της ροής του προγράμματός μας. Συγκεκριμένα, θα καταγράψουμε μέχρι και την τελευταία λεπτομέρεια των λειτουργιών και των αντικειμένων που απαρτίζουν την εφαρμογή μας με τριπλό στόχο:
--> Να θέσουμε τις βασικές παραμέτρους λειτουργίας και να κάνουμε πρόβλεψη για μελλοντική επέκταση.
--> Να χαράξουμε το λογικό διάγραμμα της εφαρμογής με τέτοιο τρόπο, ώστε να συμμορφώνεται με τις βασικές έννοιες και δομές του αντικειμενοστραφούς προγραμματισμού.
--> Να εξοικειωθούμε με ένα λογικό και δομημένο τρόπο σκέψης, ο οποίος θα γίνει οδηγός μας σε κάθε ξεκίνημα δημιουργίας μιας εφαρμογής, γλυτώνοντάς μας έτσι πολύτιμο χρόνο από τις αναπροσαρμογές ενός πρόχειρα στημένου και άναρχου προγράμματος.
Πρόβα στα παρασκήνια
Μία συνήθης σημειολογική αναλογία που ακολουθείται από τον κύκλο των προγραμματιστών (τον οποίο έχει ακολουθήσει σε γενικές γραμμές και η ίδια η Microsoft στην ανάπτυξη των αντικειμενοστραφών γλωσσών προγραμματισμού της) είναι η ιδέα ότι κάθε εφαρμογή αποτελείται από "ηθοποιούς" (actors) και "ενέργειες" (actions). Ως actor μπορεί να θεωρηθεί ένας χρήστης ο οποίος εισάγει μια εντολή ή μια αίτηση (request) σε ένα σύστημα, ενώ ως "action" μπορεί να νοηθεί η λειτουργία που συμβαίνει συνεπεία της εντολής του χρήστη. Ωστόσο, "actor" μπορεί να αποτελεί και μία προγραμματιστική οντότητα, ένα αντικείμενο.
Επειδή, θεωρητικά, είναι δύσκολο να αντιληφθεί κανείς αυτούς τους συσχετισμούς, ας ακολουθήσουμε ως παράδειγμα την πρώτη εφαρμογή μας, η οποία θα είναι ο Διαχειριστής των ταινιών μας DVD (Video Location Manager). Θα φτιάξουμε, δηλαδή, ένα πρόγραμμα στο οποίο θα εισαγάγουμε τα στοιχεία των νέων ταινιών μας, εν συνεχεία το πρόγραμμα θα ορίζει μια συγκεκριμένη θέση στο "ράφι" μας ανάλογα με τα κριτήρια που θέτουμε (π.χ. ξεχωριστό ράφι για ταινίες δράσης και ξεχωριστό για θρίλερ), ενώ, τέλος, θα μπορούμε να ανακτήσουμε ένα DVD, να το σχολιάσουμε και να το κατατάξουμε ανάλογα με τη βαθμολογία που του δίνουμε.
Στην... πράξη:
Βήμα 1: Είστε απαιτητικοί;Κάθε πρόγραμμα ξεκινά από μια βασική αφετηρία: από τις απαιτήσεις που ορίζουμε και οι οποίες πρέπει να ικανοποιούνται. Στη συγκεκριμένη περίπτωση πρέπει να καλύπτονται οι εξής βασικές απαιτήσεις:

--> Θέλουμε να τοποθετούμε με έξυπνο τρόπο τα DVDs στα ράφια μας.

--> Θέλουμε να βρίσκουμε τα DVDs μας ανάλογα με κάποια βασικά κριτήρια που έχουμε δώσει εκ των προτέρων (π.χ. τίτλος, πρωταγωνιστής, σκηνοθέτης, χρονιά κ.λπ.).

Αφού θέσουμε αυτές τις θεμελιώδεις απαιτήσεις, είναι καιρός να τις αναπτύξουμε πιο διεξοδικά. Κάπου εδώ αρχίζει η δόμηση της εφαρμογής: αναλύουμε τώρα περισσότερο τις απαιτήσεις μας, καταγράφοντάς τις σε επίπεδα. Κάθε επίπεδο ονομάζεται συμβατικά "use case" και αποτελεί ένα σενάριο, στο οποίο "actors" και "actions" συνδυάζονται για να φέρουν σε πέρας μια συγκεκριμένη λειτουργία. Κάθε use case αποτελεί και εκλογίκευση της ρουτίνας που θα ακολουθήσουμε, από το γενικό στο ειδικό. Αρχίζουμε από τη βασική use case, την οποία ονομάζουμε συμβατικά 1.0 (δεν έχει σχέση με την ονοματοδοσία των εκδόσεων ενός προγράμματος).

Σε αυτό το σχεδιάγραμμα υπάρχουν τρεις actors: ο user (χρήστης), που εισάγει δεδομένα και αιτήματα, το DVD, που είναι το αντικείμενο διαχείρισης και το location (τοποθεσία), που είναι ο προορισμός του DVD, ανάλογα με τα κριτήρια που εμείς θα ορίσουμε. Στο κέντρο της όλης διαδικασίας και συνδετικός κρίκος και των τριών στοιχείων είναι η διαδικασία ("engine") Video Location Manager (εικ. 1), που θα αποτελέσει την "καρδιά" του προγραμματιστικού μας κώδικα. Προς το παρόν, δεν ξέρουμε ποιες εντολές θα περιέχει, ξέρουμε όμως ότι οι περισσότερες ρουτίνες (procedures) θα λαμβάνουν χώρα εκεί "μέσα", στο Location Manager. Κατόπιν, αναλύουμε περισσότερο τη δομή μας στο use case 1.1:

Εδώ συγκεκριμενοποιούμε μία από τις διαδικασίες που θα συμβαίνουν μέσα στον Location Manager: τη διαδικασία τοποθέτησης στο ράφι (σε συγκεκριμένη θέση) του DVD μας, ανάλογα με το είδος του. Ας προσθέσουμε ένα ακόμη "παρακλάδι" στο βασικό μας use case, και συγκεκριμένα τη use case 1.2:

Εδώ αναλύουμε μια άλλη απαίτησή μας, η οποία πρέπει να ικανοποιείται από την κεντρική "engine" της εφαρμογής μας. Αυτή η απαίτηση είναι κάθε DVD να ανήκει σε μία κατηγορία (category) και ανάλογα με αυτήν να πηγαίνει στην κατάλληλη θέση στο ράφι μας και όχι τυχαία. Πλέον οι actors στη συγκεκριμένη φάση είναι ο user, το DVD, το category, ενώ ο Location Manager εκτελεί τη διαδικασία "Set category" (και πάλι δεν ξέρουμε ακόμη ποιες ακριβώς εντολές θα χρησιμοποιήσουμε για να γίνει αυτή η διαδικασία, αλλά έχουμε σχηματίσει τη δομή της).

Ας φτιάξουμε τώρα ένα ακόμη use case, στο οποίο θα συμβαίνει η αντίστροφη διαδικασία: δηλαδή αφού έχουμε ταξινομήσει ένα DVD, αυτή τη φορά θα θελήσουμε να το βρούμε βάσει ενός συγκεκριμένου κριτηρίου που θα δώσουμε:

Η λογική πορεία αυτής της διαδικασίας είναι η ακόλουθη: ο user κάνει μια αίτηση στην engine του τύπου "Find DVD", συνοδευμένη από συγκεκριμένες παραμέτρους (π.χ. τίτλος). Η engine θα ψάξει το DVD που ανταποκρίνεται στις παραμέτρους της αίτησης και θα επιστρέψει το location, υποδεικνύοντας τη θέση του συγκεκριμένου DVD. Ακόμη είναι νωρίς να κάνουμε προβλέψεις για διπλοτυπίες, πολλά επεισόδια κ.λπ. που θα δώσουν στην επιστροφή περισσότερες από μία τοποθεσίες. Ας μείνουμε προσηλωμένοι στο θεωρητικό μέρος!



Όπως γίνεται φανερό, μπορούμε να αναλύσουμε το use case "Find DVD" σε επιμέρους use cases (1.3.1, 1.3.2, 1.3.3 κοκ), ανάλογα με τον αριθμό κριτηρίων που θα χαρακτηρίζουν κάθε DVD και θα αποτελούν την ταυτότητά του (εικ. 2). Εκτός από τις δύο αυτές βασικές λειτουργίες (use cases), δηλαδή την τοποθέτηση και την ανάκτηση, μπορούμε κάλλιστα να προσθέσουμε και άλλες (π.χ. σχολιασμό DVD), εμπλουτίζοντας τη λειτουργικότητα της εφαρμογής μας.

Συνεχίζεταιιι....


Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου