Προγραμματισμός

Όσον αφορά τον καλό σχεδιασμό OO, κρατήστε το απλό

Ένας πρώην μαθητής μου κάποτε φώναξε την παράλογη δήλωση, "Δεν μπορώ να κάνω αντικειμενοστραφή σχεδίαση (OO). Δεν έχω τα χρήματα!" Εξετάζοντας περαιτέρω, αποδείχθηκε ότι, στο μυαλό του, ο σχεδιασμός OO απαιτούσε ένα προϊόν που ονομάζεται Rational Rose, το οποίο τότε κόστιζε περίπου 500,00 ανά θέση. Στο μυαλό του, χωρίς το Rational Rose, ο σχεδιασμός δεν ήταν δυνατός. Δυστυχώς, αυτό το είδος balderdash είναι ευρέως διαδεδομένο. πάρα πολλοί άνθρωποι πιστεύουν ότι το OO είναι μια διαδικασία υψηλής τεχνολογίας που απαιτεί εργαλεία υψηλής τεχνολογίας. Στην πράξη, τα εργαλεία με υπερβολικά υψηλές τιμές καθίστανται αχρησιμοποίητα στο ράφι (ή είναι πολύ αχρησιμοποίητα).

Έχοντας αυτό κατά νου, σε αυτό το άρθρο συζητάω διάφορα εργαλεία σχεδίασης OO, πώς λειτουργούν και γιατί πιστεύω ότι δεν είναι χρήσιμα. Επίσης, εξηγώ πώς δουλεύω και τι αποδεικνύεται χρήσιμο (τουλάχιστον για μένα, μπορείτε να διαφωνήσετε).

Τα εργαλεία δεν σας καθοδηγούν στη διαδικασία

Κάθε επιτυχημένη σχεδίαση OO που έχω ακολουθήσει ακολουθεί περίπου την ίδια διαδικασία:

  • Μάθετε για το προβληματικός τομέας (λογιστική, προγραμματισμός μαθημάτων κ.λπ.)
  • Αναπτύξτε, σε στενή συνεννόηση με έναν ζωντανό χρήστη, α δήλωση προβλήματος που περιγράφει διεξοδικά το πρόβλημα του χρήστη, καθώς και τυχόν λύσεις σε επίπεδο τομέα. Αυτό το έγγραφο δεν περιγράφει ένα πρόγραμμα υπολογιστή.
  • Εκτελέστε ένα επίσημο ανάλυση περίπτωσης χρήσης, στις οποίες καθορίζω τις εργασίες που απαιτούνται για την επίλυση του προβλήματος του χρήστη, πάλι, σε στενή συνεργασία με έναν πραγματικό τελικό χρήστη. Συνήθως δημιουργώ ένα UML (Unified Modeling Language) διάγραμμα δραστηριότητας για κάθε ασήμαντη περίπτωση χρήσης. (Το UML είναι μια συμβολική αναπαράσταση του λογισμικού ως εικόνα.)
  • Ξεκινήστε να χτίζετε το δυναμικό μοντέλο δείχνει τα αντικείμενα στο σύστημα και τα μηνύματα που στέλνουν αυτά τα αντικείμενα μεταξύ τους, ενώ εκτελείται μια συγκεκριμένη περίπτωση χρήσης. Χρησιμοποιώ ένα UML διάγραμμα ακολουθίας για το σκοπό αυτό.
  • Συλλέγω ταυτόχρονα χρήσιμες πληροφορίες στο στατικό μοντέλο διάγραμμα. Σημείωση: Ποτέ δεν κάνω πρώτα το στατικό μοντέλο (διάγραμμα τάξης). Έχω πετάξει πάρα πολλά στατικά μοντέλα που αποδείχθηκαν άχρηστα μόλις άρχισα να κάνω το δυναμικό μοντέλο. Δεν είμαι πλέον πρόθυμος να σπαταλήσω το χρόνο που απαιτείται για να κάνω το στατικό μοντέλο σε κενό.
  • Τα προαναφερθέντα βήματα συνήθως αποδίδουν δύο ή τρεις περιπτώσεις χρήσης, μετά τις οποίες αρχίζω να κωδικοποιώ, διορθώνοντας το μοντέλο εάν είναι απαραίτητο.
  • Τέλος, δουλεύω σε μια άλλη θήκη χρήσης, όπως περιγράφεται, επαναπροσδιορίζοντας τον σχεδιασμό και τον κωδικό, όπως είναι απαραίτητο, για να προσαρμόσω τη νέα θήκη.

Κανένα από τα σημερινά εργαλεία σχεδίασης δεν σας καθοδηγεί σε αυτήν τη διαδικασία. Ως επί το πλείστον, είναι πολύτιμα προγράμματα σχεδίασης που δεν λειτουργούν ιδιαίτερα καλά, ακόμη και ως εργαλεία σχεδίασης. (Το Rational Rose, το οποίο θεωρώ ένα από τα λιγότερο ικανά της παρτίδας, δεν υποστηρίζει καν το UML.)

Η μηχανική μετ 'επιστροφής είναι μια βασικά ελαττωματική διαδικασία

Όχι μόνο αυτά τα εργαλεία δεν λειτουργούν καλά, το κόλπο που κάνουν αυτά τα εργαλεία - δημιουργία κώδικα - είναι άχρηστο. Σχεδόν όλα τα εργαλεία σχεδιασμού OO ακολουθούν την έννοια του μηχανική μετ 'επιστροφής στο οποίο ξεκινάτε με ένα εργαλείο σχεδίασης καθορίζοντας το σχέδιό σας στο UML. Δημιουργείτε δύο βασικά σύνολα διαγραμμάτων: το στατικό μοντέλο που δείχνει τις τάξεις στο σχεδιασμό, τις σχέσεις τους μεταξύ τους και τις μεθόδους που περιέχουν. και το δυναμικό μοντέλο, το οποίο είναι μια στοίβα διαγραμμάτων που δείχνουν τα αντικείμενα στο σύστημα που εκτελούν διάφορες εργασίες κατά το χρόνο εκτέλεσης.

Μόλις ολοκληρώσετε το μοντέλο, πατάτε ένα μαγικό κουμπί και το εργαλείο δημιουργεί κώδικα. Ωστόσο, ο κώδικας που δημιουργείται από το εργαλείο δεν είναι ιδιαίτερα καλός για δύο λόγους: Πρώτον, σε πολλά εργαλεία, δημιουργούνται σκελετοί για τους ορισμούς της τάξης, αλλά οι μέθοδοι είναι απλά κενά - το δυναμικό μοντέλο αγνοείται. Δεύτερον, κανένα εργαλείο δεν υποστηρίζει πλήρως το UML, κυρίως επειδή κανένα δεν μπορεί. Το UML είναι μια γλώσσα από μόνη της, η οποία ενθαρρύνει τον αυτοσχεδιασμό, και μεγάλο μέρος του πραγματικού περιεχομένου σχεδιασμού εκφράζεται σε σχόλια που συνήθως αγνοούνται από το εργαλείο σχεδίασης.

Ως αποτέλεσμα, παραβιάζετε τον παραγόμενο κώδικα (τα περισσότερα καταστήματα το κάνουν hack). Μέσα σε λίγες εβδομάδες, ο κωδικός συνήθως δεν έχει καμία σχέση με το αρχικό σχέδιο. Στην πραγματικότητα, πετάτε αποτελεσματικά το σχέδιό σας και επιστρέφετε στο σύνδρομο WHISKEY (Γιατί δεν είναι ακόμη κάποιος "κωδικοποίηση";). Χρόνια και χρόνια αποτυχημένων προγραμμάτων μου αποδεικνύουν ότι η κωδικοποίηση χωρίς σχέδιο αυξάνει τον συνολικό χρόνο ανάπτυξης κατά τουλάχιστον έναν παράγοντα τριών και οδηγεί σε πολύ buggier κώδικα.

Τώρα έρχεται η διαδικασία μετ 'επιστροφής: Ανοίγετε το εργαλείο σας, πατάτε το μαγικό κουμπί και εισάγετε τον κωδικό, δημιουργώντας θεωρητικά το σχέδιο έτσι ώστε να αντικατοπτρίζει την πραγματική κατάσταση του κώδικα. Ωστόσο, αυτή η αντίστροφη μηχανική δεν λειτουργεί. Τα εργαλεία δημιουργούν συνήθως νέα διαγράμματα κλάσης, αλλά ποτέ δεν ενημερώνουν το δυναμικό μοντέλο. Δεδομένου ότι το δυναμικό μοντέλο είναι το επίκεντρο της διαδικασίας, το σχέδιό σας είναι πλέον άχρηστο, εκτός αν επιστρέψετε και το ενημερώσετε με το χέρι, κάτι που σπάνια γίνεται.

Με τον κίνδυνο να επαναλάβω τον εαυτό μου, η διαδικασία μετ 'επιστροφής ενθαρρύνει τους προγραμματιστές να αγνοούν εντελώς τον σχεδιασμό και απλώς κώδικα, και στη συνέχεια να αναστρέφουν τον κώδικα σε εικόνες τόσο συχνά. Σε αυτήν την περίπτωση, ωστόσο, οι προγραμματιστές δεν σχεδιάζουν. χακαρίζουν τον κώδικα και δημιουργούν εικόνες από το χάος που προκύπτει. Η εισβολή δεν είναι ίση με το σχεδιασμό.

Ενώ ο σχεδιασμός είναι πράγματι μια επαναληπτική διαδικασία (ο σχεδιασμός αλλάζει καθώς ο κώδικας αναπτύσσεται), θα πρέπει να ξεκινήσετε μια επανάληψη τροποποιώντας πρώτα το σχέδιο και, στη συνέχεια, επαναπροσδιορίζοντας τον κώδικα για να αντικατοπτρίζει το νέο σχέδιο. Για να το κάνετε αυτό, θα πρέπει να μπορείτε να καθορίσετε ολόκληρο το προϊόν λογισμικού μέσα στο εργαλείο (όταν πατάτε το μαγικό κουμπί, θα εξέρχεται ένα πλήρως λειτουργικό πρόγραμμα) και η διαδικασία θα είναι μονόδρομη χωρίς αντίστροφη μηχανική μηχανισμός.

Τα εργαλεία CASE

Εργαλεία CASE (μηχανοργάνωση λογισμικού), όπως η Rational Rose, τυπικά θέτουν τη μηχανική μετ 'επιστροφής στον πυρήνα του προϊόντος. Ωστόσο, δεδομένου ότι η μηχανική μετ 'επιστροφής δεν κάνει τίποτα χρήσιμο, πολλοί προγραμματιστές χρησιμοποιούν τα εργαλεία ως ακριβά προγράμματα σχεδίασης. Από τα διαθέσιμα εργαλεία, νομίζω ότι αξίζει να εξεταστούν τρία (αν και δεν χρησιμοποιώ κανένα από αυτά):

  • Το δωρεάν, ανοιχτού κώδικα εργαλείο ArgoUML, γραμμένο σε Java, κάνει μια αρκετά καλή δουλειά του διαγράμματος UML. Η τελευταία έκδοση προσπαθεί ακόμη και να σας καθοδηγήσει στη διαδικασία (με οριακή επιτυχία μέχρι στιγμής, αλλά είναι μια καλή αρχή).
  • Το GDPro του Embarcadero, που προηγουμένως διανεμήθηκε από το Advanced Software, προσφέρει καλή υποστήριξη για μια ομάδα που εργάζεται σε έναν σχεδιασμό λογισμικού, αλλά έχει επίσης ελλείψεις σε αυτό το τμήμα. Για παράδειγμα, ένας σχεδιαστής δεν μπορεί να δει ένα διάγραμμα δυναμικού μοντέλου ενώ κλειδώνει αυτόματα τις κλάσεις που σχετίζονται με αντικείμενα στο δυναμικό μοντέλο.
  • Το Together ControlCenter του TogetherSoft παρακάμπτει το πρόβλημα αντίστροφης διαδρομής χωρίς να το κάνει. Ο κωδικός και ο σχεδιασμός εμφανίζονται ταυτόχρονα στην οθόνη και όταν αλλάζετε έναν, ο άλλος αλλάζει αυτόματα. Μαζί το ControlCenter δεν υποστηρίζει καλά ομάδες προγραμματιστών.
  • Θα πρέπει επίσης να αναφέρω εν συντομία το Microsoft Visio. Το Visio είναι ένα πρόγραμμα σχεδίασης που υποστηρίζει UML μετά από μια μόδα, αλλά η υποστήριξή του μιμείται το άθλιο περιβάλλον εργασίας της Rational Rose. Διάφορα πρότυπα σχεδίασης για σχήματα UML στο Visio λειτουργούν καλύτερα από την ενσωματωμένη υποστήριξη UML, συμπεριλαμβανομένου ενός στην ενότητα "Goodies" του ιστότοπού μου.

Αν λοιπόν πιστεύω τόσο άσχημα από αυτά τα εργαλεία, τι χρησιμοποιώ; Μακράν τα πιο παραγωγικά εργαλεία σχεδιασμού OO είναι ένας πίνακας (ένα δωμάτιο με τοίχους από τοίχο σε τοίχο, πίνακες από το δάπεδο μέχρι την οροφή είναι ιδανικός) και μαξιλάρια Post-it σε μέγεθος flip chart, φύλλα από τα οποία μπορείτε να ξεκολλήσετε και κολλήστε στον τοίχο. Τα χρησιμοποίησα για να σχεδιάσω σημαντικά έργα με μεγάλη επιτυχία. Επιπλέον, η εργασία σε έναν πίνακα καταναλώνει πολύ λιγότερο χρόνο από την πάλη με ένα εργαλείο OO CASE.

Η μόνη δυσκολία με την προσέγγιση του πίνακα είναι η καταγραφή των πληροφοριών στον πίνακα. Υπάρχουν λευκοί πίνακες που τυπώνουν, αλλά είναι ακριβοί, άσχημοι και πολύ μικροί. Ένα τακτοποιημένο προϊόν υλικού που παρακολουθεί την κίνηση μιας πένας σε έναν πίνακα και καταγράφει τις κινήσεις της πένας στον υπολογιστή. Άλλοι πίνακες λειτουργούν σαν δισκία ψηφιδωτών. Ωστόσο, αυτές οι λύσεις αποδεικνύονται πολύ περιοριστικές. Ο σχεδιασμός πραγματοποιείται ταυτόχρονα σε λευκούς πίνακες σε πολλά γραφεία, σε χαρτοπετσέτες, σε απορρίμματα χαρτιού και ούτω καθεξής. Δεν μπορείτε να μεταφέρετε έναν πίνακα εκτύπωσης 300 λιβρών στο τοπικό καφέ.

Λοιπόν, τι λειτουργεί

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

Η λύση:

  1. Μια ψηφιακή φωτογραφική μηχανή
  2. Ένα υπέροχο προϊόν λογισμικού που ονομάζεται Whiteboard Photo από το Pixid

Δυστυχώς, μια ψηφιακή φωτογραφία παράγει εικόνες μη ικανοποιητικές για τεκμηρίωση. Για αντιστάθμιση, το Whiteboard Photo μετατρέπει τις ψηφιακές εικόνες σε κάτι χρήσιμο. Οι εικόνες αξίζουν πραγματικά χίλιες λέξεις, εδώ. Το Σχήμα 1 δείχνει μια τυπική ψηφιακή φωτογραφία ενός πίνακα.

Το σχήμα 2 απεικονίζει ένα άλλο παράδειγμα.

Το Σχήμα 3 δείχνει τον τρόπο με τον οποίο η Λευκή Πίνακα μετατρέπει το Σχήμα 1.

Και πώς φαίνεται το Σχήμα 2, το Whiteboard Photo έκανε τη μαγεία του.

Όπως δείχνουν οι εικόνες, η διαφορά είναι εκπληκτική. Για να μεταμορφώσω την αρχική εικόνα στην εκκαθαρισμένη έκδοση, απλά χτύπησα Ctrl-L. Το λογισμικό βρήκε αυτόματα τα όρια του πίνακα, διορθώθηκε για την παραμόρφωση που προκλήθηκε από τη λήψη της εικόνας από γωνία (απαραίτητο για να αποφευχθεί το έντονο φως από το φλας), επέλεξε τις γραμμές του σχεδίου και τα σχεδίασε. Όλο το προϊόν που χρειάζεται για να επιτύχει την τελειότητα είναι η αναγνώριση γραφής με το χέρι, αλλά είμαι γαργαλημένος ροζ με αυτό που ισχύει. Τώρα μπορώ να παράγω σχέδια ποιότητας τεκμηρίωσης απευθείας από τον αρχικό πίνακα, χωρίς να σπαταλάω ώρες εισάγοντας το σχέδιο σε κάποια κουτσό δικαιολογία για ένα εργαλείο CASE.

Κρατήστε το απλό

Σύμφωνα με την εμπειρία μου, όσον αφορά το σχεδιασμό OO, τα εργαλεία χαμηλής τεχνολογίας λειτουργούν καλύτερα. Πράγματι, είναι ταχύτερα, ευκολότερα στη χρήση και έχουν καλή απόδοση σε συνεργατικά περιβάλλοντα. Μέχρι στιγμής, έχω διαπιστώσει ότι ο συνδυασμός ενός λευκού πίνακα, μιας ψηφιακής φωτογραφικής μηχανής και της φωτογραφίας Whiteboard προσφέρει την καλύτερη μέθοδο για τη σχεδίαση προγραμμάτων σε ένα μηχάνημα.

Το Allen Holub παρέχει συμβουλευτικές υπηρεσίες, εκπαίδευση και καθοδήγηση στον σχεδιασμό OO, στη διαδικασία OO και στον προγραμματισμό Java. Παρουσιάζει τακτικά ένα εντατικό εργαστήριο σχεδιασμού OO για όσους ενδιαφέρονται να αναπτύξουν γρήγορα τις δεξιότητές τους OO. (Βρείτε περισσότερες πληροφορίες στη διεύθυνση //www.holub.com.) Η Allen εργάζεται στον κλάδο των υπολογιστών από το 1979, πιο πρόσφατα ως επικεφαλής τεχνολογίας στην NetReliance, Inc. Δημοσιεύεται ευρέως σε περιοδικά (Dr. Dobb's Journal, Programmers Journal, Byte, και MSJ, μεταξύ άλλων). Ο Allen έχει οκτώ βιβλία προς τιμήν του, τα τελευταία εκ των οποίων - Taming Java Threads (APpress, 2000; ISBN: 1893115100) - καλύπτει τις παγίδες και τις παγίδες του Java threading. Διδάσκει OO design και Java για το Πανεπιστήμιο της Καλιφόρνια, Berkeley Extension (από το 1982).

Μάθετε περισσότερα σχετικά με αυτό το θέμα

  • Για το δωρεάν εργαλείο σχεδιασμού ανοιχτού κώδικα ArgoUML, μεταβείτε στη διεύθυνση

    //argouml.tigris.org/

  • Το GDPro του Embarcadero βρίσκεται στη διεύθυνση

    //www.embarcadero.com

  • Θα βρείτε περισσότερες πληροφορίες για το TogetherSoft's Together ControlCenter στο

    //www.togethersoft.com

  • Η αρχική σελίδα του Microsoft Visio

    //www.microsoft.com/office/visio/default.htm

  • Μεταβείτε στη σελίδα προϊόντος του Pixid Whiteboard Photo για περισσότερες πληροφορίες σχετικά με αυτό το ενδιαφέρον εργαλείο

    //www.pixid.com/home.html

  • Ο ιστότοπος του Allen Holub διαθέτει τη σελίδα "Goodies" του, όπου θα βρείτε συμβουλές σχεδιασμού OO, κανόνες προγραμματισμού και σημειώσεις από μερικές από τις συνομιλίες του Allen

    //www.holub.com/goodies/goodies.html

  • JavaWorld'μικρό Αντικειμενοστρεφής σχεδιασμός και προγραμματισμός Το ευρετήριο διαθέτει πολλά άρθρα που αφορούν το σχεδιασμό

    //www.javaworld.com/channel_content/jw-oop-index.shtml

  • Θα βρείτε περισσότερες υπέροχες κριτικές προϊόντων στο JavaWorld'μικρό Δείκτης Κριτικές Προϊόντων

    //www.javaworld.com/news-reviews/jw-nr-product-reviews.shtml

  • Διαβάστε περισσότερα σχόλια στο JavaWorld'μικρό Ευρετήριο σχολίων

    //www.javaworld.com/news-reviews/jw-nr-commentary.shtml

  • Για συμβουλές και σεμινάρια που καλύπτουν μοτίβα σχεδιασμού, εργαλεία ανάπτυξης, ρύθμιση απόδοσης, ασφάλεια, δοκιμές και πολλά άλλα, εγγραφείτε στο δικό μας Εφαρμοσμένη Java ενημερωτικό δελτίο

    //www.javaworld.com/subscribe

  • Μίλα στο μας Θεωρία & Πρακτική Προγραμματισμού συζήτηση

    //forums.idg.net/[email protected]@.ee6b806

  • Θα βρείτε πληθώρα άρθρων που σχετίζονται με την πληροφορική από τις αδελφές εκδόσεις μας στο .net

Αυτή η ιστορία, "Όσον αφορά τον καλό σχεδιασμό OO, κρατήστε την απλή" δημοσιεύθηκε αρχικά από την JavaWorld.