Tεχνολογία Λογισµικού II ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών ΠΛHPOΦOPIKH Θεµατική Ενότητα ΣΧΕ∆ΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ Τόµος B' Tεχνολογία Λογισµικού II BAΣIΛEIOΣ BEΣKOYKHΣ ∆ιδάκτωρ Hλεκτρολόγος Mηχανικός και Mηχανικός Yπολογιστών ΠATPA 2001 ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Σχολή Θετικών Επιστηµών και Τεχνολογίας Πρόγραµµα Σπουδών ΠΛHPOΦOPIKH Θεµατική Ενότητα ΣΧΕ∆ΙΑΣΜΟΣ ΛΟΓΙΣΜΙΚΟΥ Τόµος B' Tεχνολογία Λογισµικού II Συγγραφή BAΣIΛEIOΣ BEΣKOYKHΣ ∆ιδάκτωρ Hλεκτρολόγος Mηχανικός και Mηχανικός Yπολογιστών Κριτική Ανάγνωση AXIΛΛEAΣ KAMEAΣ ∆ρ Mηχανικός H/Y και Πληροφορικής Ακαδηµαϊκός Υπεύθυνος για την επιστηµονική επιµέλεια του τόµου ΣΩKPATHΣ KATΣIKAΣ Καθηγητής Tµήµατος Mαθηµατικών Πανεπιστηµίου Aιγαίου Επιµέλεια στη µέθοδο της εκπαίδευσης από απόσταση ΓEPAΣIMOΣ MΩPAΊTHΣ Γλωσσική Επιµέλεια BAΣIΛIKH ∆HMHTPOΠOYΛOY Τεχνική Επιµέλεια ΕΣΠΙ ΕΚ∆ΟΤΙΚΗ Ε.Π.Ε. Καλλιτεχνική Επιµέλεια – Σελιδοποίηση TYPORAMA Συντονισµός ανάπτυξης εκπαιδευτικού υλικού και γενική επιµέλεια των εκδόσεων ΟΜΑ∆Α ΕΚΤΕΛΕΣΗΣ ΕΡΓΟΥ ΕΑΠ / 2001 ISBN: 960–538–292–X Kωδικός Έκδοσης: ΠΛH 24/2 Copyright 2000 για την Ελλάδα και όλο τον κόσµο ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ Οδός Παπαφλέσσα & Υψηλάντη, 26222 Πάτρα – Τηλ: (0610) 314094, 314206 Φαξ: (0610) 317244 Σύµφωνα µε το Ν. 2121/1993, απαγορεύεται η συνολική ή αποσπασµατική αναδηµοσίευση του βιβλίου αυτού ή η αναπαραγωγή του µε οποιοδήποτε µέσο χωρίς την άδεια του εκδότη. ¶ÂÚȯfiÌÂÓ· Πρόλογος 9 ............................................................................................................................................................ K∂º∞§∞π√ 1 TÔ §ÔÁÈÛÌÈÎfi Û‹ÌÂÚ· Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά Eισαγωγικές παρατηρήσεις 13 ............................................................................................................... 1.1 H πορεία της δοµηµένης ανάλυσης και σχεδίασης 15 .................................... Σύνοψη ενότητας 17 ....................................................................................................................... 1.2 Xαρακτηριστικά του σύγχρονου λογισµικού 17 .................................................. Σύνοψη ενότητας 19 ....................................................................................................................... 1.3 Eξελίξεις και τάσεις στην ανάπτυξη του λογισµικού 20 ............................... 1.4 Πηγές πληροφοριών και εργαλεία Case για τον αναγνώστη του βιβλίου 22 ...................................................................................................... 1.4.1 Σελίδες στο Internet 22 ................................................................................................. 1.4.2 Ένα χρήσιµο εργαλείο 23 ........................................................................................... Σύνοψη κεφαλαίου 24 .................................................................................................................................... K∂º∞§∞π√ 2 EÈÛ·ÁˆÁ‹ ÛÙËÓ AÓÙÈÎÂÈÌÂÓÔÛÙÚÂÊ‹ T¯ÓÔÏÔÁ›· Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά Eισαγωγικές παρατηρήσεις 25 ............................................................................................................... 2.1 Aδυναµίες της δοµηµένης ανάλυσης και σχεδίασης 27 ................................. 2.2 Bασικές έννοιες της αντικειµενοστρεφούς τεχνολογίας 29 ........................ 2.2.1 Oρισµοί 30 ............................................................................................................................... 2.2.2 Σχέσεις µεταξύ κλάσεων 35 ..................................................................................... Σύνοψη ενότητας 42 ....................................................................................................................... 2.3 Ένας άλλος τρόπος παράστασης του κόσµου 42 ................................................. Σύνοψη ενότητας 46 ....................................................................................................................... 2.4 Συµβολισµοί και πρότυπα 46 ................................................................................................ Σύνοψη κεφαλαίου 50 ................................................................................................................................... K∂º∞§∞π√ 3 EÈÛ·ÁˆÁ‹ ÛÙËÓ AÓÙÈÎÂÌÂÓÔÛÙÚÂÊ‹ AÓ¿Ï˘ÛË Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά 6 TEXNO§O°IA §O°I™MIKOY II Eισαγωγικές παρατηρήσεις 51 ............................................................................................................... 3.1 Ένα γενικό πλαίσιο για αντικειµενοστρεφή ανάπτυξη λογισµικού 53 ............................................................................................................. Σύνοψη ενότητας 56 ....................................................................................................................... 3.2 H έννοια της Περίπτωσης Xρήσης 57 ........................................................................... 3.2.1 Eισαγωγή 57 .......................................................................................................................... 3.2.2 Tι είναι «Περίπτωση Xρήσης»; 58 ..................................................................... 3.2.3 Πώς προδιαγράφεται µια περίπτωση χρήσης; 64 .................................. 3.2.4 Ένα σηµείο αναφοράς 69 ........................................................................................... Σύνοψη ενότητας 71 ....................................................................................................................... 3.3 Προσδιορισµός των λειτουργικών απαιτήσεων ως περιπτώσεων χρήσης 72 .................................................................................................... Σύνοψη ενότητας 74 ....................................................................................................................... 3.4 Aπό τις περιπτώσεις χρήσης στο µοντέλο ανάλυσης 82 ............................... 3.4.1 Tο µοντέλο ανάλυσης 82 ............................................................................................ 3.4.2 Kλάσεις στο µοντέλο ανάλυσης 84 ................................................................... 3.4.3 Πακέτα ανάλυσης 86 ...................................................................................................... Σύνοψη ενότητας 87 ....................................................................................................................... 3.5 Bήµατα στην ανάλυση 87 ........................................................................................................ 3.5.1 Aρχιτεκτονική ανάλυση 89 ....................................................................................... 3.5.2 Aνάλυση περιπτώσεων χρήσης 94 ..................................................................... 3.5.3 Aνάλυση κλάσεων 102 ................................................................................................. 3.5.4 Aνάλυση πακέτων 104 .................................................................................................. Σύνοψη ενότητας 106 .................................................................................................................... Σύνοψη κεφαλαίου 106 ................................................................................................................................ K∂º∞§∞π√ 4 EÚÁ·Ï›· Case Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά Eισαγωγικές παρατηρήσεις 109 ............................................................................................................ 4.1 Xαρακτηριστικά και πλαίσιο λειτουργίας 111 ....................................................... Σύνοψη ενότητας 115 .................................................................................................................... 4.2 Tαξινόµηση των εργαλείων Case 116 ........................................................................... 4.2.1 Tαξινόµηση σύµφωνα µε τη λειτουργία 116 ............................................. 4.2.2 Tαξινόµηση σύµφωνα µε την εµβέλεια 122 .............................................. 4.3 Kριτήρια αξιολόγησης και επιλογής εργαλείων Case 124 .......................... Σύνοψη κεφαλαίου 127 ................................................................................................................................ ¶EPIEXOMENA 7 K∂º∞§∞π√ 5 ¢ÈÔ›ÎËÛË ™¯ËÌ·ÙÈÛÌÒÓ §ÔÁÈÛÌÈÎÔ‡ Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά Eισαγωγικές παρατηρήσεις 129 ............................................................................................................ 5.1 Bασικές έννοιες 131 ...................................................................................................................... 5.1.1 H έννοια του σχηµατισµού λογισµικού 131 ............................................... 5.1.2 H έννοια της βασικής γραµµής 133 ................................................................... Σύνοψη ενότητας 134 .................................................................................................................... 5.2 ∆ιοίκηση σχηµατισµών Λογισµικού 134 .................................................................... 5.3 Eργασίες διοίκησης σχηµατισµών Λογισµικού 137 .......................................... 5.3.1 Kαθορισµός σχηµατισµών 137 .............................................................................. 5.3.2 Έλεγχος µεταβολών σχηµατισµών 143 .......................................................... 5.3.3 Έλεγχος Ποιότητας σχηµατισµών 146 ............................................................ 5.3.4 Έκθεση κατάστασης σχηµατισµών 147 ......................................................... Σύνοψη ενοτήτων 5.2 και 5.3 148 ...................................................................................... 5.4 Eργαλεία διοίκησης σχηµατισµών Λογισµικού 148 ......................................... Σύνοψη κεφαλαίου 150 ................................................................................................................................ K∂º∞§∞π√ 6 ¢È·ÛÊ¿ÏÈÛË ¶ÔÈfiÙËÙ·˜ §ÔÁÈÛÌÈÎÔ‡ Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά Eισαγωγικές παρατηρήσεις 151 ............................................................................................................ 6.1 Ποιότητα Λογισµικού 153 ....................................................................................................... Σύνοψη ενότητας 157 .................................................................................................................... 6.2 Eπιθεωρήσεις ποιότητας Λογισµικού 157 ................................................................. 6.3 Πρότυπα Λογισµικού 161 ........................................................................................................ 6.3.1 Πρότυπα και διασφάλιση ποιότητας Λογισµικού 161 ...................... 6.3.2 Πρότυπα τεκµηρίωσης Λογισµικού 163 ....................................................... Σύνοψη κεφαλαίου 167 ................................................................................................................................. Aπαντήσεις Aσκήσεων Aυτοαξιολόγησης 168 ...................................................................... Aπαντήσεις ∆ραστηριοτήτων 174 ...................................................................................................... Γλωσσάρι 192 ..................................................................................................................................................... Συµπληρωµατική Bιβλιογραφία 196 .............................................................................................. Bιβλιογραφία προαιρετική 199 ............................................................................................................ Φίλε αναγνώστη, Το βιβλίο που κρατάς είναι το δεύτερο από τα εκπαιδευτικά εγχειρίδια του Ελληνι- κού Ανοιχτού Πανεπιστηµίου µε αντικείµενο την «Τεχνολογία Λογισµικού», την περιοχή εκείνη της επιστήµης της Μηχανικής η οποία ασχολείται µε την επιστηµο- νική θεµελίωση του τρόπου κατασκευής του Λογισµικού. Αποτελεί πλέον κοινή θέση ότι το Λογισµικό είναι ένα από τα περισσότερο κρίσιµα τεχνικά κατασκευάσµατα του ανθρώπου. Παρά το γεγονός ότι είναι διάχυτη η προσδοκία όλων το λογισµικό να υποστηρίζει την εκτέλεση µεγάλων και σύνθετων εργασιών σε ολοένα και περισ- σότερους τοµείς της ανθρώπινης ζωής, είναι επίσης διάχυτη στους κατασκευαστές λογισµικού η θέση ότι η ανάπτυξη του λογισµικού είναι και η ίδια µια ιδιαίτερα σύν- θετη και απαιτητική, σε όλα τα επίπεδα, εργασία. Η Τεχνολογία Λογισµικού έκανε τα πρώτα της βήµατα µέσα σ' ένα περιβάλλον στο οποίο ο ρυθµός των αλλαγών που συντελούνται στην τεχνολογία των υπολογιστών, αλλά και σε όλους τους τοµείς των δραστηριοτήτων µας όπου αυτοί χρησιµοποιούνται, δεν ήταν συνειδητός, σίγουρα όχι στο βαθµό που είναι σήµερα, όπου όλοι µιλούν για εντυπωσιακά ραγδαίες εξε- λίξεις στην τεχνολογία, τη νέα οικονοµία, τις επικοινωνίες και αλλού. Οι πρωτοπόροι στην έρευνα και στην πρακτική της ανάπτυξης λογισµικού αναζη- τούσαν τον καλύτερο τρόπο να κατασκευάζεται και να συντηρείται λογισµικό, χωρίς τη συνείδηση ότι η έννοια «καλύτερο» είναι σχετική για τα ανθρώπινα πράγµατα και, ασφαλώς, χωρίς να µπορούν να φανταστούν ούτε πόσο γρήγορα θα «εξαπλώνονταν» οι απαιτήσεις των χρηστών των υπολογιστικών συστηµάτων, ούτε ποια µορφή θα έχουν οι υπολογιστές στο µέλλον. Σήµερα, γνωρίζουµε ότι οι υπολογιστές και το λογι- σµικό βρίσκονται πρακτικά παντού και µας υποστηρίζουν σε πολλές από τις δρα- στηριότητές µας, ακόµη και χωρίς να το αντιλαµβανόµαστε άµεσα. Η αίσθηση και η µορφή του λογισµικού έχει εξελιχθεί. Η αλληλεπίδραση των χρηστών µε το λογισµι- κό σήµερα, δε γίνεται µε λίγες και µεγάλες εφαρµογές, όπως στο παρελθόν, αλλά µε πολλές και µικρές. Μάλιστα, οι εφαρµογές λογισµικού που χρησιµοποιούµε συχνά βρίσκονται κατανεµηµένες σε κάποιο δίκτυο, στο οποίο πρόκειται να συνυπάρξουν στο κοντινό µέλλον όλα τα πληροφοριακά και επικοινωνιακά συστήµατα. 10 TEXNO§O°IA §O°I™MIKOY II Είναι, ως εκ τούτου, φανερό, ότι ο τρόπος και η φιλοσοφία της ανάπτυξης λογισµι- κού πρέπει να εξελίσσονται συνεχώς, ώστε να ικανοποιούνται οι νέες απαιτήσεις. Οι γλώσσες δοµηµένου προγραµµατισµού, οι οποίες ήταν επί µακρόν το κύριο εργα- λείο για την ανάπτυξη του λογισµικού, διέθεταν δοµικές µονάδες µε τις οποίες έπρε- πε να χτιστούν οι οσοδήποτε σύνθετες εφαρµογές και καθοδηγούσαν τη σκέψη µας κατά την δόµηση των εφαρµογών αυτών. Μιλώντας µεταφορικά, ήταν τα οικοδοµι- κά υλικά που καθόριζαν τον τρόπο σκέψης του χτίστη και όχι η σύλληψη του για το οικοδόµηµα. Ωστόσο, η πολυπλοκότητα και η ανάγκη επεξεργασίας µεγάλου όγκου δεδοµένων έφεραν στην επιφάνεια σηµαντικές αδυναµίες της δοµηµένης φιλοσο- φίας µε αποτέλεσµα την εξέλιξη του τρόπου σκέψης όσων ασχολούνται µε κατα- σκευή λογισµικού, η οποία, ασφαλώς, υποστηρίχτηκε και από την εξέλιξη του υλι- κού των υπολογιστών. Η νέα θεώρηση που έγινε δηµοφιλής, επικράτησε να ονοµάζεται αντικειµενοστρε- φής φιλοσοφία ή παράδειγµα (object–oriented philosophy, paradigm) και αντιµετω- πίζει µε έναν εντελώς διαφορετικό από τη δοµηµένη προσέγγιση, τρόπο, τη σύλλη- ψη, την ανάλυση και τη σχεδίαση του λογισµικού. Με την αντικειµενοστρεφή φιλο- σοφία ασχολούµαστε στα τρία πρώτα κεφάλαια του βιβλίου αυτού, επιχειρώντας να εισάγουµε τον αναγνώστη στις πλέον σύγχρονες (για την στιγµή που γράφονται οι γραµµές αυτές) προσεγγίσεις στην ανάπτυξη του λογισµικού. Στο κεφάλαιο 1 γίνεται µια σύνδεση µε τον πρώτο τόµο, η µελέτη του οποίου απο- τελεί ουσιαστικά προαπαιτούµενο για την απρόσκοπτη παρακολούθηση της ύλης τουλάχιστον των τριών πρώτων κεφαλαίων του ανά χείρας βιβλίου. Αναφέρονται τα σύγχρονα χαρακτηριστικά του λογισµικού και οι εξελίξεις που χαρακτηρίζουν το χώρο του λογισµικού γενικότερα, έτσι ώστε να εισαχθεί µε τρόπο φυσικό η νέα θεώ- ρηση της αντικειµενοστρεφούς φιλοσοφίας. Στο κεφάλαιο 2 δίνονται οι βασικές έννοιες της αντικειµενοστρεφούς φιλοσοφίας µε έµφαση στην αποκάλυψη των στοιχείων ενός διαφορετικού από τη δοµηµένη προ- σέγγιση τρόπου σκέψης. Επίσης, εισάγεται η UML, ένα πρότυπο για την παράστα- ση συστατικών στοιχείων λογισµικού, η έλλειψη του οποίου ταλαιπώρησε επί µακρόν την κοινότητα των κατασκευαστών λογισµικού και τους αποξένωνε µεταξύ τους. Ο αναγνώστης µε βασική εµπειρία στην ανάπτυξη λογισµικού, θα συµφωνή- σει µε τη θέση ότι, παρά την απλότητα και το «αυτονόητο» της ανάγκης για χρήση κοινών συµβολισµών από όλους τους κατασκευαστές λογισµικού, κάτι τέτοιο δεν επετεύχθη για µεγάλο χρονικό διάστηµα, οπότε αποτελεί ουσιώδες βήµα προόδου από µόνο του, η εισαγωγή της UML. XXX 11 Στο κεφάλαιο 3 ο αναγνώστης εισάγεται στην Ενοποιηµένη Προσέγγιση ανάπτυξης λογισµικού και ειδικότερα στην αντικειµενοστρεφή ανάλυση σύµφωνα µε αυτή. Επι- λέξαµε να αναφερθούµε στην προσέγγιση αυτή λόγω του ότι αποτελεί το αποτέλε- σµα της «συγχώνευσης» τριών από τις επικρατέστερες προσεγγίσεις και συγκεκρι- µένα των Jacobson, Booch και Rumbaugh και συγκεντρώνει τα καλύτερα από τα στοι- χεία των τριών ανεξάρτητων προσεγγίσεων. Υπάρχουν, ασφαλώς, και άλλες προ- σεγγίσεις αντικειµενοστρεφούς ανάπτυξης λογισµικού τις οποίες ο αναγνώστης προ- τρέπεται να αναζητήσει στην προτεινόµενη βιβλιογραφία. Ωστόσο, και µε δεδοµένο τον εισαγωγικό χαρακτήρα και την έκταση της δικής µας παρουσίασης, µπορούµε µε ασφάλεια να ισχυριστούµε ότι η Ενοποιηµένη Προσέγγιση είναι κατάλληλη για το σκοπό µας, επιτρέποντάς µας να εντοπίσουµε ορισµένα σηµαντικά χαρακτηριστικά της αντικειµενοστρεφούς φιλοσοφίας και να αναδείξουµε τη χρήση της UML. Στα τρία κεφάλαια που ακολουθούν, ο αναγνώστης εισάγεται σε τρία σηµαντικά θέµατα που ολοκληρώνουν την πρώτη επαφή µε την Τεχνολογία Λογισµικού η οποία επιχειρείται στους δύο τόµους του βιβλίου αυτού. Στο κεφάλαιο 4 υπάρχει µια εισα- γωγή στα εργαλεία CASE, ένα σύνολο από εφαρµογές λογισµικού οι οποίες στο- χεύουν στην υποστήριξη ή και την αυτοµατοποίηση της ίδιας της κατασκευής του λογισµικού. Τα εργαλεία CASE, αν και υποσχέθηκαν πολλά, στην αρχή τουλάχιστον δεν είχαν τα αναµενόµενα αποτελέσµατα, θέση η οποία φαίνεται να φθίνει καθώς η κοινότητα του λογισµικού ωριµάζει. Έχοντας κατά νου το πλαίσιο αυτό, επιχειρού- µε µια εισαγωγή και µια ταξινόµηση των εργαλείων CASE, καθώς και µια σύντοµη αναφορά σε κριτήρια επιλογής τους. Στο κεφάλαιο 5 εισάγεται το πρόβληµα της ∆ιοίκησης Σχηµατισµών Λογισµικού (configuration management). Πρόκειται για µια εργασία η οποία πρέπει να εκτελεί- ται σε κάθε οργανισµό κατασκευής λογισµικού, ανεξάρτητα από τη µεθοδολογία, τη φιλοσοφία και τα εργαλεία ανάπτυξης που κατά τα άλλα ο οργανισµός χρησιµο- ποιεί και παράλληλα µε τη ροή των εργασιών ανάπτυξης λογισµικού. Μπορούµε να πούµε πως η ∆ιοίκηση Σχηµατισµών είναι συχνά δύσκολα αντιληπτή από τους κατα- σκευαστές, τόσο σε επίπεδο αναγκαιότητας, όσο και σε επίπεδο εκτέλεσης. Αποτε- λεί, λοιπόν, ελάχιστη υποχρέωση ενός πανεπιστηµιακού βιβλίου να εισάγει το θέµα και να παρουσιάσει τις πλευρές του και την κρισιµότητά του, ακόµη και αν οι ίδιοι οι κατασκευαστές λογισµικού δεν ασχολούνται όσο θα έπρεπε µε το αντικείµενο. Τέλος, στο κεφάλαιο 6 γίνεται µια εισαγωγή στο θέµα της διασφάλισης ποιότητας λογισµικού, αντικείµενο µε το οποίο καταπιάνεται σε βάθος ένας τίτλος µιας άλλης θεµατικής ενότητας του προγράµµατος σπουδών πληροφορικής του ΕΑΠ. Πολλοί υποστηρίζουν ότι οι λέξεις «ποιότητα» και «λογισµικό» έχουν ακόµη αρκετό δρόµο να διανύσουν µέχρις ότου βρεθούν και σηµασιολογικά κοντά. Αυτό δεν αποτρέπει, ίσα–ίσα επιβάλλει έστω και την εισαγωγική αναφορά στο θέµα της ποιότητας λογι- σµικού, την οποία επιχειρούµε στο κεφάλαιο αυτό. Σε πολλά από τα αναφερόµενα στο ανά χείρας βιβλίο, ενδέχεται, φίλε αναγνώστη, είτε να έχεις ο ίδιος είτε να συναντήσεις διαφορετική άποψη στην προτεινόµενη, ή και σε άλλη βιβλιογραφία. Αυτό είναι όχι µόνο «ενδεικτικό της ρευστότητας των πραγµάτων», αλλά και καλό γιατί θα σε αναγκάσει να προβληµατιστείς. Θα επανα- λάβουµε τη διατύπωση της εισαγωγής του πρώτου τόµου ότι «το ζητούµενο δεν είναι να αποµνηµονεύσεις ούτε να αποδεχτείς γνώση 'άνευ όρων'. Είναι να µάθεις πώς να µαθαίνεις, να κρίνεις και να αξιολογείς». Αυτό που θα πρέπει να κρατήσεις, δεν είναι κάποιες γνώσεις που σε λίγο ενδεχοµένως να είναι ξεπερασµένες, αλλά ακριβώς η ικανότητα να αµφισβητείς, να κρίνεις και να συνθέτεις ώστε να ξεπερνάς τη γνώση του σήµερα και να µπορείς να προάγεις, µε δικές σου δυνάµεις, την επιστήµη. Σε αυτό ελπίζουµε να συµβάλλουµε µε τις µικρές µας δυνάµεις, µαχόµενοι µε την ανά- γκη αναφοράς πολλών και σύνθετων εννοιών σε εύλογο χώρο. Κλείνω το σύντοµο αυτό σηµείωµα µε τις φαινοµενικά τυπικές, αλλά ειλικρινείς ευχαριστίες σε όλους τους συντελεστές του ΕΑΠ για την πολύ καλή συνεργασία µας τα τρία τελευταία χρόνια, προς τους φίλους και συναδέλφους Γιάννη Ψαροµήλιγκο, Νίκο Παπασπύρου και Νίκο Λεβογιάννη, καθώς και προς όλους εκείνους που µε υπέφεραν κατά τη συγγραφή του ανά χείρας. Επιθυµώ να αφιερώσω και αυτό το βιβλίο στους µαχόµενους πληροφορικάριους, σε όλους εκείνους που παράγουν και δεν «διαχειρίζονται». Βασίλειος Χ. Βεσκούκης Αθήνα, ∆εκέµβριος 2000