265

pli42a

Embed Size (px)

Citation preview

Page 1: pli42a
Page 2: pli42a

Tυπικές Προδιαγραφές

ΣηµείωσηΤο ΕΑΠ είναι υπεύθυνο για την επιµέλεια έκδοσης και την ανάπτυξη των κειµένων σύµφωνα µε τη Μεθο-δολογία της εξ Αποστάσεως Εκπαίδευσης. Για την επιστηµονική αρτιότητα και πληρότητα των συγγραµ-µάτων την αποκλειστική ευθύνη φέρουν οι συγγραφείς, κριτικοί αναγνώστες και ακαδηµαϊκοί υπεύθυνοιπου ανέλαβαν το έργο αυτό.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 1

Page 3: pli42a

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 2

Page 4: pli42a

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ

Σχολή Θετικών Επιστηµών και Τεχνολογίας

Πρόγραµµα Σπουδών

ΠΛHPOΦOPIKH

Θεµατική Ενότητα

EI∆IKA ΘEMATA TEXNOΛOΓIAΣ ΛOΓIΣMIKOY

Τόµος A'

Tυπικές Προδιαγραφές

ΑΧΙΛΛΕΑΣ ΚΑΜΕΑΣ

∆ρ Mηχανικός H/Y & Πληροφορικής

ΠATPA 2004

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 3

Page 5: pli42a

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ

Σχολή Θετικών Επιστηµών και Τεχνολογίας

Πρόγραµµα Σπουδών

ΠΛHPOΦOPIKH

Θεµατική Ενότητα

EI∆IKA ΘEMATA TEXNOΛOΓIAΣ ΛOΓIΣMIKOY

Τόµος A'

TYΠIKEΣ ΠPO∆IAΓPAΦEΣ

Συγγραφή

AXIΛΛEAΣ KAMEAΣ

∆ρ Mηχανικός H/Y & Πληροφορικής

Κριτική Ανάγνωση

ΠΑΝΑΓΙΩΤΗΣ ΠΙΝΤΕΛΑΣ

Kαθηγητής Tµήµατος Mαθηµατικών

Πανεπιστηµίου Πατρών

Ακαδηµαϊκός Υπεύθυνος για την επιστηµονική επιµέλεια του τόµου

ΠΑΝΑΓΙΩΤΗΣ ΠΙΝΤΕΛΑΣ

Kαθηγητής Tµήµατος Mαθηµατικών

Πανεπιστηµίου Πατρών

Επιµέλεια στη µέθοδο της εκπαίδευσης από απόσταση

IΩANNHΣ KOYTΣONIKOΣ

Γλωσσική Επιµέλεια

KΩNΣTANTINOΣ KΛAMΠANIΣTHΣ

Τεχνική Επιµέλεια

EΣΠI EK∆OTIKH E.Π.E.

Συντονισµός ανάπτυξης εκπαιδευτικού υλικού και γενική επιµέλεια των εκδόσεων

ΟΜΑ∆Α ΕΚΤΕΛΕΣΗΣ ΕΡΓΟΥ ΕΑΠ / 1997 – 2004

ISBN: 960–538–220–2

Kωδικός Έκδοσης: ΠΛH 42/1

Copyright 2004 για την Ελλάδα και όλο τον κόσµο

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ

Οδός Παπαφλέσσα & Υψηλάντη, 26222 Πάτρα – Τηλ: 2610 314094, 314206 Φαξ: 2610 317244

Σύµφωνα µε το Ν. 2121/1993, απαγορεύεται η συνολική ή αποσπασµατική αναδηµοσίευση του βιβλίου αυτού

ή η αναπαραγωγή του µε οποιοδήποτε µέσο χωρίς την άδεια του εκδότη.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 4

Page 6: pli42a

¶ÂÚȯfiÌÂÓ·

Πρόλογος ............................................................................................................................................................................. 11

K ∂ º ∞ § ∞ π √ 1EÈÛ·ÁˆÁ‹

Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά, Eισαγωγικές παρατηρήσεις .................................................................................................................................... 15

1.1 Oι δραστηριότητες παραγωγής προδιαγραφών .................................................................. 17

1.2 Tαξινόµηση µεθόδων παραγωγής προδιαγραφών µε βάση το «βαθµό

τυπικότητας» .................................................................................................................................................... 19

1.3 Mη τυπικές προδιαγραφές .................................................................................................................... 20

Σύνοψη ................................................................................................................................................................................... 22

Bιβλιογραφία ..................................................................................................................................................................... 22

K ∂ º ∞ § ∞ π √ 2HÌÈ–Ù˘ÈΤ˜ Ù¯ÓÈΤ˜ ·Ú·ÁˆÁ‹˜ ÚԉȷÁÚ·ÊÒÓ

Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά, Eισαγωγικές παρατηρήσεις .................................................................................................................................... 23

2.1 ∆ιαγράµµατα ροής δεδοµένων ......................................................................................................... 25

2.1.1 Kατασκευή ενός ∆P∆ ............................................................................................................... 26

2.1.2 Tο λεξικό δεδοµένων ................................................................................................................ 29

2.2 ∆οµηµένη γλώσσα ....................................................................................................................................... 32

2.3 ∆ιαγράµµατα ροής συστήµατος ...................................................................................................... 34

2.3.1 Kατασκευή των ∆PΣ ................................................................................................................... 35

2.4 ∆ιαγράµµατα οντοτήτων–συσχετίσεων .................................................................................... 37

2.4.1 Kατασκευή των ∆OΣ ................................................................................................................ 38

2.5 ∆ιαγράµµατα Warnier–Orr ................................................................................................................... 41

2.6 ∆ιαγράµµατα Jackson ............................................................................................................................... 43

2.7 Eπιλογή της κατάλληλης τεχνικής ................................................................................................. 45

Σύνοψη ................................................................................................................................................................................... 46

Bιβλιογραφία ..................................................................................................................................................................... 46

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 5

Page 7: pli42a

6 T Y ¶ I K E ™ ¶ P O ¢ I A ° PA º E ™

K ∂ º ∞ § ∞ π √ 3T ÈΤ˜ ÁÏÒÛÛ˜: B·ÛÈΤ˜ ¤ÓÓÔȘ

Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά, Eισαγωγικές παρατηρήσεις .................................................................................................................................... 47

3.1 Eίδη τυπικών µεθόδων ............................................................................................................................. 50

3.2 Προτασιακός λογισµός ............................................................................................................................ 51

3.3 Λογικές συναρτήσεις ................................................................................................................................ 56

3.4 Kατηγορηµατικός λογισµός ................................................................................................................ 57

3.5 Θεωρία συνόλων ........................................................................................................................................... 58

Σύνοψη ................................................................................................................................................................................... 61

K ∂ º ∞ § ∞ π √ 4T ÈΤ˜ ̤ıÔ‰ÔÈ Ô˘ ÂÚÈÁÚ¿ÊÔ˘Ó È‰ÈfiÙËÙ˜ ÙÔ˘ ÏÔÁÈÛÌÈÎÔ‡

Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά, Eισαγωγικές παρατηρήσεις .................................................................................................................................... 63

4.1 Aξιωµατική προδιαγραφή ..................................................................................................................... 64

4.2 Aλγεβρικές προδιαγραφές αφαιρετικών τύπων δεδοµένων .................................... 67

4.3 Άλλοι συµβολισµοί αλγεβρικών προδιαγραφών ............................................................... 72

4.3.1 Προδιαγραφές µε εξισώσεις και σχέσεις ................................................................. 73

4.3.2 Aναδροµικές σχέσεις ................................................................................................................ 73

4.3.3 Kανονικές εκφράσεις ................................................................................................................ 73

Σύνοψη ................................................................................................................................................................................... 75

Bιβλιογραφία ..................................................................................................................................................................... 75

K ∂ º ∞ § ∞ π √ 5H Ù˘È΋ ÁÏÒÛÛ· Larch

Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά, Eισαγωγικές παρατηρήσεις .................................................................................................................................... 77

5.1 Προδιαγραφές δύο επιπέδων .............................................................................................................. 79

5.2 Bασικές δοµές ................................................................................................................................................. 80

5.3 Θεωρίες ................................................................................................................................................................. 83

5.4 Σύνθεση γνωρισµάτων ............................................................................................................................. 83

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 6

Page 8: pli42a

5.5 Περισσότερα για το συµβολισµό .................................................................................................... 85

5.6 Προδιαγραφές επιπέδου LIL .............................................................................................................. 88

Σύνοψη ................................................................................................................................................................................... 95

Bιβλιογραφία ..................................................................................................................................................................... 95

K ∂ º ∞ § ∞ π √ 6H Ù˘È΋ ÁÏÒÛÛ· VDM

Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά, Eισαγωγικές παρατηρήσεις .................................................................................................................................... 97

6.1 Συναρτήσεις ...................................................................................................................................................... 99

6.2 Έτοιµες εκφράσεις ................................................................................................................................... 101

6.3 Mερικές συναρτήσεις ............................................................................................................................ 101

6.4 Λειτουργίες ..................................................................................................................................................... 103

6.5 Aπλοί και σύνθετοι τύποι δεδοµένων ...................................................................................... 105

6.5.1 Bασικοί τύποι ............................................................................................................................... 105

6.5.2 Oρισµός τύπων από σύνολα ............................................................................................ 106

6.5.3 Προαιρετικά στοιχεία ............................................................................................................ 108

6.6 Σύνθετοι τύποι εγγραφών .................................................................................................................. 108

6.6.1 Aναλλοίωτο τύπου ................................................................................................................... 110

6.7 Aπεικονίσεις .................................................................................................................................................. 112

6.7.1 Tελεστές ............................................................................................................................................ 113

6.7.2 Oρισµός τύπων ............................................................................................................................ 116

6.7.3 Πολυ σύνολα ................................................................................................................................. 117

6.8 Aκολουθίες....................................................................................................................................................... 120

6.8.1 Tελεστές ............................................................................................................................................... 121

Σύνοψη ................................................................................................................................................................................ 125

Bιβλιογραφία .................................................................................................................................................................. 125

K ∂ º ∞ § ∞ π √ 7O Û˘Ì‚ÔÏÈÛÌfi˜ Z

Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά,

7¶ E P I E X O M E N A

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 7

Page 9: pli42a

Eισαγωγικές παρατηρήσεις ................................................................................................................................ 127

7.1 Bασικός συµβολισµός ........................................................................................................................... 129

7.2 Aναπαράσταση κατάστασης ........................................................................................................... 131

7.2.1 Mετάβαση κατάστασης ........................................................................................................ 133

7.3 Προδιαγραφή λειτουργίας ................................................................................................................. 136

7.4 Xειρισµός λαθών ....................................................................................................................................... 137

7.5 Σχεσιακή εικόνα........................................................................................................................................... 139

7.6 Σχεσιακή αναστροφή ............................................................................................................................. 140

7.7 Περιορισµός και αντι περιορισµός ............................................................................................. 142

7.8 Άλλοι τελεστές ............................................................................................................................................ 144

7.8.1 Σύνθεση σχέσεων ...................................................................................................................... 144

7.8.2 Προσαρµογή .................................................................................................................................. 144

7.8.3 Mετονοµασία ................................................................................................................................ 146

7.8.4 Aπόκρυψη ....................................................................................................................................... 146

7.8.5 Eπαναχρησιµοποίηση ............................................................................................................ 146

7.9 Προδιαγραφή του διαλόγου ............................................................................................................. 150

7.10 Συναρτήσεις ................................................................................................................................................... 151

7.11 Aκολουθίες ..................................................................................................................................................... 153

7.12 Πολυ σύνολα ................................................................................................................................................. 154

Σύνοψη ................................................................................................................................................................................ 160

Bιβλιογραφία .................................................................................................................................................................. 160

K ∂ º ∞ § ∞ π √ 8¢›ÎÙ˘· PETRI

Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά, Eισαγωγικές παρατηρήσεις ................................................................................................................................ 161

8.1 Eνεργητικές οντότητες, παθητικές οντότητες, τεκµήρια ........................................ 164

8.2 Tυπικός ορισµός των PN .................................................................................................................... 166

8.3 PN χαµηλού επιπέδου ........................................................................................................................... 169

8.3.1 Mηχανές καταστάσεων ........................................................................................................ 170

8.3.2 Σηµειωµένοι γράφοι ............................................................................................................... 170

8 ™ ∆∞∆ π ™ ∆ π ∫ ∂ ™ ∫ ∞ π O π ∫ √ ¡ √ ª ∂ ∆ ƒ π ∫ ∂ ™ M ∂ £ √ ¢ √ π

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 8

Page 10: pli42a

8.3.3 ∆ίκτυα ελεύθερης επιλογής .............................................................................................. 170

8.3.4 Σύγκριση µοντέλων LLPN ............................................................................................... 170

8.4 ∆ίκτυα συνθήκης–γεγονότος ........................................................................................................... 173

8.4.1 Σύγκρουση ...................................................................................................................................... 177

8.4.2 Eπαφή .................................................................................................................................................. 179

8.5 ∆ίκτυα θέσης–µετάβασης .................................................................................................................. 181

8.6 ∆ίκτυα διακριτών τεκµηρίων .......................................................................................................... 184

8.6.1 Eπεκτάσεις ...................................................................................................................................... 188

8.6.2 Mεταβλητές ως ετικέτες βελών .................................................................................... 189

8.7 Άλλα δίκτυα υψηλού επιπέδου ...................................................................................................... 190

Σύνοψη ................................................................................................................................................................................ 193

Bιβλιογραφία .................................................................................................................................................................. 194

K ∂ º ∞ § ∞ π √ 9ÕÏÏ· ÌÔÓ٤Ϸ Ù˘ÈÎÒÓ ÚԉȷÁÚ·ÊÒÓ

Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά, Eισαγωγικές παρατηρήσεις ................................................................................................................................ 195

9.1 Eπικοινωνούσες ακολουθιακές διεργασίες ......................................................................... 196

9.1.1 ∆ιεργασίες ....................................................................................................................................... 196

9.1.2 Ίχνη ....................................................................................................................................................... 198

9.1.3 Tαυτόχρονες διεργασίες ...................................................................................................... 199

9.1.4 Eπικοινωνία .................................................................................................................................... 201

9.1.5 Aκολουθιακές διεργασίες .................................................................................................. 202

9.1.6 Aναπαράσταση στοιχείων προγραµµάτων ......................................................... 202

9.2 Tυπική περιγραφή διαλογικών συστηµάτων ..................................................................... 203

9.2.1 Aναπαράσταση του διαλόγου χρήστη–συστήµατος ................................... 204

9.2.2 Iδιότητες διαλογικών συστηµάτων ............................................................................ 205

9.2.3 Iδιότητες παραθυρικών εφαρµογών .......................................................................... 208

9.3 Anna ..................................................................................................................................................................... 209

9.3.1 Eπεξηγήσεις ................................................................................................................................... 209

9.3.2 Προδιαγραφή πακέτων ......................................................................................................... 214

9¶ E P I E X O M E N A

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 9

Page 11: pli42a

1 0 T Y ¶ I K E ™ ¶ P O ¢ I A ° PA º E ™

Σύνοψη ................................................................................................................................................................................ 220

Bιβλιογραφία .................................................................................................................................................................. 220

K ∂ º ∞ § ∞ π √ 1 0N· Â›Ó·È Î·Ó›˜ Ù˘ÈÎfi˜ ‹ Ó· ÌËÓ Â›Ó·È;

Σκοπός, Προσδοκώµενα αποτελέσµατα, Έννοιες κλειδιά, Eισαγωγικές παρατηρήσεις ................................................................................................................................ 221

10.1 Πλεονεκτήµατα και µειονεκτήµατα από τη χρήση

τυπικών προδιαγραφών ........................................................................................................................ 222

10.2 ∆ιαλύοντας τους µύθους γύρω από τις τυπικές προδιαγραφές .......................... 224

10.3 Oι δέκα εντολές εφαρµογής των τυπικών τεχνικών .................................................... 228

Σύνοψη ................................................................................................................................................................................ 232

Bιβλιογραφία .................................................................................................................................................................. 232

Eπίλογος ............................................................................................................................................................................. 233

Aπαντήσεις Aσκήσεων Aυτοαξιολόγησης ............................................................................................... 235

Bιβλιογραφία γενική ................................................................................................................................................ 252

Προτεινόµενη βιβλιογραφία .............................................................................................................................. 254

Γλωσσάρι .......................................................................................................................................................................... 258

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 10

Page 12: pli42a

¶ÚfiÏÔÁÔ˜

Στο παρελθόν, ήταν σχεδόν αδύνατη η πρακτική εφαρµογή τυπικών τεχνικών. Καθε-

µία από αυτές βασιζόταν σε διαφορετικό µαθηµατικό εργαλείο, οι συµβολισµοί ήταν

σχεδόν ακατανόητοι, η υποστήριξη µε εργαλεία λογισµικού ήταν ανύπαρκτη και οι

τεχνικές δεν ήταν εφαρµόσιµες σε συστήµατα µεγάλου µεγέθους. Οι µηχανικοί λογι-

σµικού µε δυσκολία µπορούσαν να πειστούν για την αξία των τυπικών τεχνικών και

σχεδόν κανείς τους δεν ήταν διατεθειµένος να επενδύσει στην εκµάθησή τους.

Τα τελευταία χρόνια, όµως, η κατάσταση άρχισε να αλλάζει. Εµφανίστηκαν «κατα-

νοητές» τεχνικές (Ζ, VDM, Larch κ.ά.), οι οποίες εφαρµόστηκαν µε επιτυχία στην

πράξη. Οι τελικοί αποδέκτες των συστηµάτων λογισµικού απαιτούν όλο και περισ-

σότερη ακρίβεια στη σχεδίαση και την περιγραφή του λογισµικού, πριν συµφωνή-

σουν στην τελική του µορφή. Η αύξηση της ισχύος των υπολογιστών και η εµφάνι-

ση νέων εργαλείων προγραµµατισµού έκαναν δυνατή την ανάπτυξη ολοκληρωµέ-

νων εργαλείων ανάπτυξης λογισµικού, τα οποία βασίζονται σε τυπικές τεχνικές.

Τότε, έγινε εµφανές το κενό που υπήρχε στην εκπαίδευση των µηχανικών πληρο-

φορικής σχετικά µε την εκµάθηση και την εφαρµογή τυπικών τεχνικών. Αρκετά τρι-

τοβάθµια εκπαιδευτικά ιδρύµατα έχουν ήδη συµπεριλάβει τη διδασκαλία τυπικών

τεχνικών στα µεταπτυχιακά τους προγράµµατα, ενώ προσανατολίζονται και στην

εισαγωγή αντίστοιχων µαθηµάτων στα προπτυχιακά προγράµµατα σπουδών. Το

Ε.Α.Π., αναγνωρίζοντας την αξία των τυπικών τεχνικών και ακολουθώντας τις διε-

θνείς εξελίξεις, συµπεριέλαβε την παρούσα Θεµατική Υπο ενότητα στο Πρόγραµ-

µα Σπουδών Πληροφορικής και διαθέτει για πρώτη φορά έναν τόµο στον οποίο

συνοψίζονται οι περισσότερο διαδεδοµένες τυπικές τεχνικές.

Τα πρώτα τρία κεφάλαια του τόµου είναι εισαγωγικά και σας προτείνω να τα µελε-

τήσετε πριν προχωρήσετε στα επόµενα. Στο Kεφάλαιο 1, περιγράφονται οι δραστη-

ριότητες παραγωγής τυπικών προδιαγραφών και τοποθετούνται στον κύκλο ανά-

πτυξης λογισµικού. Ταυτόχρονα, κατηγοριοποιούνται οι τεχνικές παραγωγής προ-

διαγραφών σε µη – τυπικές, ηµι – τυπικές και τυπικές.

Στους γονείς µου

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 11

Page 13: pli42a

1 2 M ∂ ∆∞ ° § ø ∆ ∆ π ™ ∆ ∂ ™

Οι περισσότερο διαδεδοµένες ηµι – τυπικές τεχνικές προδιαγραφών παρουσιάζονται

στο Kεφάλαιο 2. Σε αυτές περιλαµβάνονται τα ∆ιαγράµµατα Ροής ∆εδοµένων, τα

∆ιαγράµµατα Ροής Συστήµατος, τα ∆ιαγράµµατα Jackson κ.ά. Οι τεχνικές αυτές

είναι εύκολο να εφαρµοστούν και για το λόγο αυτό είναι αρκετά διαδεδοµένες. Όµως,

δεν κατέχουν το βασικό χαρακτηριστικό των τυπικών τεχνικών, δηλαδή την ικανό-

τητα να αποδείξει κανείς την ορθότητα των προδιαγραφών του λογισµικού µε µαθη-

µατικά εργαλεία.

Η µελέτη των υπόλοιπων κεφαλαίων του τόµου απαιτεί από την πλευρά σας µια σχε-

τική εξοικείωση µε απλά µαθηµατικά εργαλεία και τεχνικές. Τα απολύτως απαραί-

τητα παρουσιάζονται συνοπτικά στο Kεφάλαιο 3, ώστε να µπορείτε να προχωρήσε-

τε στη µελέτη του τόµου. Θα σας βοηθήσει όµως να µελετήσετε σε βάθος τα ζητή-

µατα αυτά, ανατρέχοντας σε κάποια από τις Θ.Ε. του Ε.Α.Π. ή σε σχετικά µε τα αντι-

κείµενα βιβλία Μαθηµατικών.

Στα Kεφάλαια 4 έως 9 περιγράφεται ένα σύνολο τυπικών τεχνικών για την προδια-

γραφή λογισµικού. Στην πραγµατικότητα, µπορείτε να µελετήσετε τα κεφάλαια αυτά

µε όποια σειρά θεωρείτε καλύτερη ή να παραλείψετε τη µελέτη τεχνικών που δε σας

ενδιαφέρουν. Πάντως, η µελέτη κάθε κεφαλαίου απαιτεί αυξηµένη συγκέντρωση και

προσοχή, αλλά και αποθέµατα επιµονής και υποµονής, καθώς το αντικείµενο είναι

από τη φύση του δύσκολο να περιγραφεί µε λέξεις (οι τυπικές προδιαγραφές χρησι-

µοποιούνται επειδή ακριβώς η περιγραφή του λογισµικού µε λέξεις θεωρείται ότι

προσθέτει ασάφειες σχετικά µε τη λειτουργικότητά του).

Στο Kεφάλαιο 4 περιγράφονται οι αλγεβρικές και οι αξιωµατικές προδιαγραφές.

Πρόκειται για τις δύο πιο απλές και βασικές τεχνικές. Οι αλγεβρικές προδιαγραφές

περιγράφουν τις λειτουργίες που είναι δυνατό να εκτελέσουν τα τµήµατα του λογι-

σµικού, ενώ οι αξιωµατικές προδιαγραφές περιγράφουν την είσοδο και την έξοδο

των τµηµάτων που υλοποιούν τις λειτουργίες αυτές.

Στο Kεφάλαιο 5 περιγράφεται η γλώσσα Larch, η περισσότερο διαδεδοµένη γλώσ-

σα αλγεβρικών προδιαγραφών. Η περιγραφή του λογισµικού σε γλώσσα Larch περι-

λαµβάνει υψηλού επιπέδου προδιαγραφές, αλλά και προδιαγραφές που εξαρτώνται

από την υλοποίηση. Το βασικό αντικείµενο των προδιαγραφών καλείται «γνώρισµα»

και συνήθως περιγράφει έναν αφαιρετικό τύπο δεδοµένων.

Στο Kεφάλαιο 6 παρουσιάζεται η γλώσσα VDM, η οποία αποτελεί τµήµα της µεθο-

δολογίας Vienna Development Method. Η VDM βασίζεται στον κατηγορηµατικό

λογισµό και περιγράφει το λογισµικό ως ένα σύνολο συναρτήσεων ή λειτουργιών

(συναρτήσεων µε εσωτερική κατάσταση). Πρόκειται για µια αρκετά διαδεδοµένη

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 12

Page 14: pli42a

τεχνική, η οποία έχει αποδείξει την αξία της σε πολυάριθµες πρακτικές εφαρµογές.

Στο Kεφάλαιο 7 συναντάµε µια άλλη διαδεδοµένη τεχνική, τη γλώσσα Ζ, η οποία

βασίζεται στη θεωρία τυποποιηµένων συνόλων. Το βασικό αντικείµενο των προ-

διαγραφών είναι το «σχήµα», το οποίο περιγράφει είτε τµήµα προγράµµατος, είτε

αφαιρετικό τύπο δεδοµένων. Σε ένα σχήµα συµπεριλαµβάνεται η προδιαγραφή τόσο

της κατάστασης ενός αντικειµένου, όσο και των λειτουργιών που επιδρούν σε αυτή.

Επειδή ακριβώς η γλώσσα βασίζεται σε σχετικά «απλά» µαθηµατικά εργαλεία, οι

προδιαγραφές που είναι γραµµένες σε Ζ είναι εύκολα κατανοητές και από µη ειδι-

κούς. Έτσι εξηγείται και η µεγάλη διάδοση της γλώσσας.

Στο Kεφάλαιο 8 περιγράφεται η πιο γνωστή γραφική τεχνική, τα ∆ίκτυα Petri. Με

την τεχνική αυτή είναι δυνατό να προδιαγραφεί οποιοδήποτε δυναµικό σύστηµα απο-

κρίνεται σε διακριτά γεγονότα, δηλαδή οποιοδήποτε σύστηµα λογισµικού. Παρόλο

που η τεχνική είναι τόσο γενική που µπορεί να εφαρµοστεί σε οποιοδήποτε σύστη-

µα, συνηθίζεται να παράγονται υψηλού επιπέδου µοντέλα (ενισχύοντας τα χαµηλού

επιπέδου ∆ίκτυα Petri µε σηµασιολογική πληροφορία) για να ταιριάζουν καλύτερα

στο υπό µελέτη σύστηµα. Στο κεφάλαιο αυτό παρουσιάζονται οι βασικοί ορισµοί,

τα χαµηλού επιπέδου ∆ίκτυα Petri και ορισµένα διαδεδοµένα υψηλού επιπέδου

µοντέλα.

Στο Kεφάλαιο 9 περιγράφονται σύντοµα τρεις τεχνικές που δεν «χώρεσαν» σε προη-

γούµενο κεφάλαιο: η γλώσσα Anna (χρησιµοποιείται για την τυπική προδιαγραφή

αντικειµενοστραφών προγραµµάτων γραµµένων στη γλώσσα προγραµµατισµού

Ada), το µοντέλο CSP – Communicating Sequential Processes (χρησιµοποιείται για

την προδιαγραφή παράλληλων συστηµάτων) και το µοντέλο ΡΙΕ (εφαρµόζεται στην

τυπική περιγραφή διαλογικών συστηµάτων).

Το τελευταίο Kεφάλαιο 10 του βιβλίου καταγράφει τη «διαµάχη» που υπάρχει στην

κοινότητα των µηχανικών και των επιστηµόνων πληροφορικής σχετικά µε την αξία

και την δυνατότητα πρακτικής εφαρµογής των τυπικών τεχνικών. Η αρχική µου

σκέψη ήταν να τοποθετήσω ένα τέτοιο κεφάλαιο στην αρχή του τόµου, ώστε να είστε

προετοιµασµένοι (και πεπεισµένοι) για την αξία των τυπικών προδιαγραφών. Τελι-

κά, θεώρησα περισσότερο επωφελές να σας «εµπλέξω» στη συζήτηση, αφού θα έχετε

πρώτα γνωρίσει τις τυπικές τεχνικές, ώστε να έχετε διαµορφώσει τη δική σας προ-

σωπική άποψη (βέβαια, µπορείτε πάντα να διαβάσετε πρώτα το Kεφάλαιο 10 και

µετά το υπόλοιπο βιβλίο). Σε κάθε περίπτωση το κεφάλαιο αυτό είναι σηµαντικό,

καθώς συνοψίζει τις απόψεις διακεκριµένων επιστηµόνων και παραπέµπει σε άρθρα

όπου αυτές αναλύονται περισσότερο (τα οποία σας συνιστώ να µελετήσετε).

1 3¶ P O § O ° O ™

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 13

Page 15: pli42a

1 4 T Y ¶ I K E ™ ¶ P O ¢ I A ° PA º E ™

Περισσότερα στοιχεία για την παραγωγή τυπικών προδιαγραφών αλλά και για καθε-

µία από τις τυπικές τεχνικές µπορείτε να βρείτε σε κάποιο από τα άρθρα ή τα βιβλία

που σας προτείνω στο τέλος του τόµου. Όπως θα διαπιστώσετε, η υπάρχουσα βιβλιο-

γραφία είναι εκτενής, κάτι που αποτελεί ένδειξη της βαρύτητας του αντικειµένου.

Οφείλω να σας προειδοποιήσω ότι, µελετώντας τον τόµο, θα συναντήσετε αρκετές

νέες και δύσκολες έννοιες. Θα χρειαστεί επιµονή και προσπάθεια από την πλευρά

σας για να τις «κατακτήσετε». Στον τόµο (και περισσότερο στα Kεφάλαια 4–8)

περιέχεται πλήθος παραδειγµάτων, ασκήσεων αυτοαξιολόγησης και δραστηριοτή-

των. Οι απαντήσεις στις δραστηριότητες δίνονται µέσα στο ίδιο το κείµενο, ενώ οι

ασκήσεις αυτοαξιολόγησης απαντώνται συγκεντρωτικά στο τέλος του τόµου. Σας

συνιστώ να δοκιµάσετε όλες τις ασκήσεις και τις δραστηριότητες. Οι δεξιότητες ανά-

πτυξης τυπικών προδιαγραφών αποκτώνται µόνο µέσα από την πρακτική εφαρµογή

και η επίλυση ασκήσεων αποτελεί ένα καλό σηµείο εκκίνησης. Από την άλλη πλευ-

ρά, επιλύνοντας τις ασκήσεις θα µπορέσετε να αυτοαξιολογείτε την πρόοδό σας και

να εντοπίζετε έγκαιρα τα σηµεία που σας δυσκολεύουν, ώστε να µπορέσετε να τα

αντιµετωπίσετε (µε τη βοήθεια του διδάσκοντα, αν χρειαστεί). Μη διστάσετε να ανα-

τρέξετε και στο γλωσσάριο όρων που παρατίθεται στο τέλος του τόµου, όταν συνα-

ντήσετε µια δύσκολη έννοια.

Τελικά, ο στόχος του βιβλίου δεν είναι µόνο να σας διδάξει ορισµένες τυπικές τεχνι-

κές, αλλά και να σας «εµπλέξει» στον προβληµατισµό που συνοδεύει τη χρήση

αυτών των τόσο ισχυρών εργαλείων. Πράγµατι, οι τυπικές τεχνικές είναι εργαλεία

και ως εκ τούτου η εκµάθησή τους είναι δυνατή µόνο µέσα από την πρακτική εφαρ-

µογή τους. Αυτή όµως απαιτεί µια ανάλογη στάση από το µηχανικό λογισµικού υπέρ

των τυπικών τεχνικών, ώστε να δηµιουργεί τις ευκαιρίες για την εφαρµογή τους.

Ελπίζω ότι θα υιοθετήσετε κι εσείς τον «συγκαλυµµένο» αυτό στόχο, ο οποίος µπο-

ρεί να σας οδηγήσει στην ανάπτυξη περισσότερο ποιοτικού λογισµικού.

Εάν δεν σας έπεισα ακόµη για την αξία µελέτης του τόµου, παραθέτω ένα τελευταίο

επιχείρηµα. Ορισµένοι διεθνώς αναγνωρισµένοι επιστήµονες ισχυρίζονται ότι στο

µέλλον είναι πιθανό να εµφανιστεί το επάγγελµα του «µηχανικού προδιαγραφών»,

ο οποίος, κατέχοντας τη θεωρία και την πράξη ορισµένων τυπικών τεχνικών, θα µπο-

ρεί να παράγει τυπικές προδιαγραφές για οποιοδήποτε πρόβληµα κατ’ απαίτηση του

πελάτη. Μελετήστε, λοιπόν, τον τόµο αυτό και προετοιµαστείτε για το µέλλον…

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 14

Page 16: pli42a

EÈÛ·ÁˆÁ‹

™ÎÔfi˜

Το πρώτο κεφάλαιο αποτελεί µια εισαγωγή στις βασικές έννοιες που σχετίζονται µε

προδιαγραφές λογισµικού, το ρόλο τους στον κύκλο ζωής του λογισµικού και τις κατη-

γορίες τεχνικών που µπορούµε να χρησιµοποιήσουµε για να τις παράγουµε.

¶ÚÔÛ‰ÔÎÒÌÂÓ· ·ÔÙÂϤÛÌ·Ù·

Όταν θα έχετε µελετήσει αυτό το κεφάλαιο, θα µπορείτε να:

• περιγράψετε τί σηµαίνει ο όρος «προδιαγραφές λογισµικού»,

• τοποθετήσετε τις δραστηριότητες παραγωγής προδιαγραφών µέσα στον κύκλο ζωής

του λογισµικού,

• αναφέρετε τις τρεις κατηγορίες προδιαγραφών ανάλογα µε το βαθµό τυπικότητας

καθώς και δύο τουλάχιστον αντιπροσωπευτικά παραδείγµατα τεχνικών παραγω-

γής προδιαγραφών από κάθε κατηγορία,

• εξηγήσετε γιατί η φυσική γλώσσα είναι ακατάλληλη ως εργαλείο παραγωγής προ-

διαγραφών.

ŒÓÓÔȘ ÎÏÂȉȿ

1∫ ∂ º ∞ § ∞ π √

• aνάλυση απαιτήσεων

• oρισµός απαιτήσεων

• προδιαγραφές των απαιτήσεων

• τυπικές προδιαγραφές

• απαιτήσεις

• προδιαγραφές

• τυπικές µέθοδοι

• τεχνικές παραγωγής προδιαγραφών

• µη τυπικές τεχνικές

• ηµι τυπικές τεχνικές

• διαγραµµατικές τεχνικές

• τυπικές τεχνικές

• θεωρητικό µοντέλο προδιαγραφών

• φυσική γλώσσα

∂ÈÛ·ÁˆÁÈΤ˜ ·Ú·ÙËÚ‹ÛÂȘ

Η παραγωγή προδιαγραφών για ένα υπό ανάπτυξη σύστηµα λογισµικού είναι µια πολύ

σηµαντική δραστηριότητα που περιλαµβάνεται στην αρχική φάση όλων των µοντέ-

λων λογισµικού (software life – cycle models). Πριν προχωρήσουµε στην παρουσία-

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 15

Page 17: pli42a

1 6 K E º A § A I O 1 : E I ™ A ° ø ° H

ση των τεχνικών παραγωγής προδιαγραφών, είναι σκόπιµο, στο πρώτο κεφάλαιο του

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

των προδιαγραφών (και ειδικότερα των τυπικών προδιαγραφών) µέσα στον κύκλο

ζωής του λογισµικού. Μετά την παρουσίαση αυτού του θέµατος που γίνεται στην ενό-

τητα 1.1, θα δούµε πώς ταξινοµούνται οι τεχνικές παραγωγής προδιαγραφών (ενό-

τητα 1.2). Στην ενότητα 1.3 θα γνωρίσουµε την πρώτη κατηγορία τεχνικών παραγω-

γής προδιαγραφών, τις µη τυπικές τεχνικές, και θα εξετάσουµε τα χαρακτηριστικά και

τις αδυναµίες τους.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 16

Page 18: pli42a

1.1 OÈ ‰Ú·ÛÙËÚÈfiÙËÙ˜ ·Ú·ÁˆÁ‹˜ ÚԉȷÁÚ·ÊÒÓ

Η παραγωγή προδιαγραφών ακολουθεί τις δραστηριότητες ανάλυσης και ορισµού

απαιτήσεων και χρησιµοποιεί τα έγγραφα και την τεκµηρίωση που παράγεται από

αυτές. Οπως ήδη γνωρίζετε, κατά την ανάλυση απαιτήσεων (requirements analysis),

ο µηχανικός λογισµικού καταγράφει τις απαιτήσεις των χρηστών από το σύστηµα.

Κατά τον ορισµό των απαιτήσεων (requirements definition), οι πληροφορίες που

έχουν συλλεχθεί «µετασχηµατίζονται» σε ένα ενιαίο κείµενο (Έγγραφο Ορισµού

Απαιτήσεων – ΕΟΑ), το οποίο είναι κατανοητό τόσο από τους διαχειριστές και τους

χρήστες, όσο και από τους σχεδιαστές του συστήµατος. Με βάση το ΕΟΑ, παράγο-

νται οι προδιαγραφές των απαιτήσεων (specification of requirements) και γίνεται

η σχεδίαση της αρχιτεκτονικής του συστήµατος.

Οι απαιτήσεις (requirements) περιγράφουν τι θα κάνει ένα σύστηµα λογισµικού,

δηλαδή περιλαµβάνουν τις υπηρεσίες που θα παρέχει το σύστηµα, τις λειτουργίες

που θα υποστηρίζει και τους περιορισµούς κάτω από τους οποίους θα λειτουργεί.

Αντίθετα, οι προδιαγραφές (specifications) προκύπτουν από τις απαιτήσεις και περι-

γράφουν, σε διαφορετικό βαθµό λεπτοµέρειας, πώς το σύστηµα θα υλοποιηθεί ώστε

να ικανοποιεί τις απαιτήσεις.

1 71 . 1 O π ¢ ƒ∞ ™ ∆ ∏ ƒ π √ ∆ ∏ ∆ ∂ ™ ¶ ∞ ƒ∞ ° ø ° ∏ ™ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ø ¡

Μετά την επεξεργασία των απαιτήσεων, ακολουθεί, ως τελευταίο βήµα της φάσης,

η παραγωγή των τυπικών προδιαγραφών. Οι τυπικές προδιαγραφές αποτελούν µια

συγκροτηµένη και αφηρηµένη περιγραφή του λογισµικού, η οποία είναι µαθηµατι-

κά αυστηρή και µπορεί να χρησιµοποιηθεί ως αφετηρία για τη σχεδίαση, την ανά-

πτυξη αλλά και τον έλεγχο του λογισµικού.

Κατά τη διαδικασία αυτή, ο µηχανικός λογισµικού αποκτά µια αναλυτική εικόνα του

τελικού συστήµατος, ενώ ανακαλύπτει και διάφορα λάθη ή παρανοήσεις που είχαν

ξεφύγει κατά τον έλεγχο των αρχικών προδιαγραφών. Το Έγγραφο Τυπικών Προ-

διαγραφών (ΕΤΠ) που παράγεται είναι συνήθως κατανοητό µόνο από ανθρώπους

που έχουν ικανότητες προγραµµατισµού ή χειρισµού µαθηµατικών µοντέλων.

Με τον όρο «προδιαγραφές ενός συστήµατος λογισµικού» εννοούµε µια όσο το

δυνατό πλήρη και συγκροτηµένη περιγραφή των δυνατοτήτων του συστήµατος

και του τρόπου που αυτές θα υλοποιηθούν από το σύστηµα.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 17

Page 19: pli42a

1 8 K E º A § A I O 1 : E I ™ A ° ø ° H

Η θέση όλων των δραστηριοτήτων παραγωγής προδιαγραφών κατά την αρχική φάση

του κύκλου ζωής του λογισµικού φαίνεται στο Σχήµα 1.1 (Sommerville[96]). Από

την εµπειρία σας µπορείτε να συµπεράνετε ότι οι δραστηριότητες αυτές δεν εκτε-

λούνται ακολουθιακά, ενώ υπάρχει συνεχής αλληλεπίδραση µεταξύ τους. Το απο-

τέλεσµα είναι, κάθε φορά που δύο δραστηριότητες αλληλεπιδρούν, να απαιτούνται

διορθώσεις στα έγγραφα που αποτελούν εξαγόµενα της καθεµίας από αυτές.

ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 1.1

Πριν προχωρήσετε στην ανάγνωση του κειµένου, προσπαθήστε να χαρακτηρίσε-

τε ως σωστό ή λάθος καθένα από τους παρακάτω ισχυρισµούς:

Σ Λ

1. Οι απαιτήσεις του λογισµικού

(α) προέρχονται από τον πελάτη,

(β) περιγράφουν πώς θα υλοποιηθεί το σύστηµα λογισµικού.

2. Οι προδιαγραφές των απαιτήσεων

(α) αποτελούν ένα δοµηµένο τρόπο έκφρασης

των απαιτήσεων,

(β) πρέπει να είναι κατανοητές µόνο από τους τεχνικούς.

3. Οι τυπικές προδιαγραφές

(α) περιγράφουν µε αυστηρό και πέρα από αµφισβήτηση

τρόπο τις δυνατότητες του συστήµατος,

(β) πρέπει να είναι κατανοητές τόσο από τον πελάτη

όσο και από τους τεχνικούς.

™¯‹Ì· 1.1

Οι δραστηριότη-

τες παραγωγής

προδιαγραφών

Προδιαγραφές|Aπαιτήσεων

Tυπικές|Προδιαγραφές

Σχεδίαση|Yψηλού|Eπιπέδου

Aρχιτεκτονική|Σχεδίαση

Mοντέλα|Συστήµατος

Oρισµός|Aπαιτήσεων

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 18

Page 20: pli42a

1.2 T·ÍÈÓfiÌËÛË ÌÂıfi‰ˆÓ ·Ú·ÁˆÁ‹˜ ÚԉȷÁÚ·ÊÒÓ Ì ‚¿ÛË ÙÔ «‚·ıÌfi Ù˘ÈÎfiÙËÙ·˜»

Όπως έχουµε αναφέρει, οι τυπικές προδιαγραφές παράγονται µετασχηµατίζοντας

κατάλληλα τις απαιτήσεις και τις προδιαγραφές των απαιτήσεων του συστήµατος.

Ενας τέτοιος µετασχηµατισµός βασίζεται στα µαθηµατικά, καλείται τυπική µέθοδος

και περιλαµβάνει ένα σύνολο τεχνικών περιγραφής των ιδιοτήτων του συστήµατος

και ένα θεωρητικό µοντέλο, µε τη χρήση του οποίου είναι δυνατή η επαλήθευση των

προδιαγραφών κι ο έλεγχος του συστήµατος. Στη βιβλιογραφία, οι τεχνικές παρα-

γωγής προδιαγραφών κατατάσσονται στις ακόλουθες τρεις κατηγορίες, ανάλογα µε

το «βαθµό τυπικότητας» της περιγραφής του συστήµατος λογισµικού (Fraser[94]):

• µη τυπικές: Στις τεχνικές αυτές δεν υπάρχει κάποιο σύνολο κανόνων που να περιο-

ρίζει τους δυνατούς τρόπους περιγραφής. Οι περισσότερο διαδεδοµένες τέτοιες

τεχνικές είναι οι προδιαγραφές που αναπαρίστανται µε φυσική γλώσσα ή εικόνες.

• ηµι τυπικές: Oι τεχνικές αυτές περιλαµβάνουν κανόνες που καθορίζουν ακριβώς

τις επιτρεπόµενες λεκτικές και συντακτικές δοµές, ώστε να είναι δυνατός ο περιο-

ρισµένης έκτασης έλεγχος του συστήµατος. Στην κατηγορία αυτή ανήκουν κυρίως

τεχνικές που χρησιµοποιούν δοµηµένη γλώσσα ή διαγράµµατα (π.χ. ∆ιαγράµµα-

τα Ροής ∆εδοµένων ή Ελέγχου, ∆ιαγράµµατα Οντοτήτων – Συσχετίσεων, Τεχνι-

κή ∆οµηµένης Ανάλυσης και Σχεδίασης κ.ά.).

• τυπικές: Oι τεχνικές αυτές έχουν αυστηρά καθορισµένη σύνταξη και σηµασιο-

λογία και βασίζονται σε κάποιο θεωρητικό µοντέλο. Αυτό χρησιµοποιείται για την

επαλήθευση των προδιαγραφών, αφού αυτές πρώτα εκφραστούν µε µαθηµατικά

σύµβολα. Αντιπροσωπευτικά παραδείγµατα τυπικών προδιαγραφών είναι τα

∆ίκτυα Petri, οι Μηχανές Καταστάσεων, οι Εκτελέσιµες Προδιαγραφές, τα µοντέ-

λα Ζ, VDM, ο Λογισµός των Επικοινωνούντων Συστηµάτων και οι Επικοινω-

νούσες Ακολουθιακές ∆ιεργασίες, οι γλώσσες προδιαγραφών GIST, Refine, κ.ά.

1 91 . 2 T∞ • π ¡ √ ª ∏ ™ ∏ ª ∂ £ √ ¢ ø ¡ ¶ ∞ ƒ∞ ° ø ° ∏ ™ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ø ¡ ª ∂ µ ∞ ™ ∏ ∆ √ « µ ∞ £ ª √ ∆ À ¶ π ∫ √ ∆ ∏ ∆∞ ™ »

ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 1.2

Πριν προχωρήσετε στην ανάγνωση του κειµένου, προσπαθήστε να συµπληρώσε-

τε τα κενά στις ακόλουθες φράσεις χρησιµοποιώντας τις λέξεις φυσική γλώσσα,

δοµηµένη γλώσσα, διαγράµµατα, θεωρητικό µοντέλο:

Οι τεχνικές µη τυπικών προδιαγραφών περιγράφουν το σύστηµα λογισµικού χρη-

σιµοποιώντας ………………………… Οι τεχνικές ηµιτυπικών προδιαγραφών χρησιµο-

ποιούν ………………………… για τη γραφική περιγραφή και ………………………… για τη λεκτι-

κή περιγραφή του συστήµατος Οι τεχνικές τυπικών προδιαγραφών παράγουν περι-

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 19

Page 21: pli42a

2 0 K E º A § A I O 1 : E I ™ A ° ø ° H

1.3 MË Ù˘ÈΤ˜ ÚԉȷÁڷʤ˜

Πολλές φορές οι προδιαγραφές των απαιτήσεων (που συνήθως συνοδεύουν τα µοντέ-

λα του συστήµατος που αναπτύχθηκαν κατά τη φάση της ανάλυσης) εκφράζονται σε

φυσική γλώσσα (natural language). Όµως η φυσική γλώσσα δεν είναι ο καλύτερος

τρόπος περιγραφής της σχεδίασης ενός συστήµατος µε στόχο την αµοιβαία συµφω-

νία πελάτη–µηχανικού λογισµικού. Οι κυριότεροι λόγοι είναι οι εξής:

• Oι λέξεις της φυσικής γλώσσας είναι ασαφείς και η ερµηνεία τους είναι υποκει-

µενική.

• Oι προδιαγραφές που παράγονται είναι πολύ ευέλικτες, αφού µπορεί κανείς να

εκφράσει το ίδιο πράγµα µε πολλούς τρόπους.

• ∆εν µπορεί κανείς να διακρίνει ποιες προδιαγραφές είναι ίδιες και ποιες διαφο-

ρετικές, ούτε να τις οµαδοποιήσει, µε αποτέλεσµα να είναι δύσκολη η ανεύρεση

και διόρθωση λαθών.

γραφές µε αυστηρά καθορισµένη σύνταξη και σηµασιολογία και βασίζονται σε

κάποιο …………………………

¢Ú·ÛÙËÚÈfiÙËÙ· 1.1

Βασιζόµενοι στην εµπειρία σας, προσπαθήστε να ανακαλύψετε ασάφειες στην ακό-

λουθη περιγραφή µε φυσική γλώσσα του τρόπου υπολογισµού της καθαρής αµοι-

βής ενός εργαζόµενου:

«Ο µεικτός µισθός κάθε υπαλλήλου είναι διαφορετικός. Περιλαµβάνει το βασικό

µισθό, τα διάφορα επιδόµατα, τις υπερωρίες, τις ανταµοιβές και ίσως οδοιπορικά.

Από τα χρήµατα αυτά αφαιρούνται οι κρατήσεις που γίνονται υπέρ των ασφαλι-

στικών ταµείων και η προκαταβολή του φόρου. Το ποσό που αποµένει αποτελεί

την καθαρή αµοιβή του υπαλλήλου».

Σίγουρα έχετε καταγράψει πολλά από τα προβλήµατα που έχει αυτή η περιγραφή.

Μερικά από αυτά θα αναφερθούν στη συνέχεια. Κατ’ αρχήν είναι ελλιπής (π.χ. δεν

αναφέρονται αναλυτικά οι επιµέρους κρατήσεις και τα ποσοστά των διαφόρων

συντελεστών). Έπειτα δεν διευκρινίζεται εάν οι κρατήσεις υπολογίζονται επί του

βασικού µισθού ή επί του µεικτού µισθού. Βέβαια κάποιος έµπειρος υπάλληλος ή

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 20

Page 22: pli42a

κάποιος γνώστης της σχετικής νοµοθεσίας καταλαβαίνει την περιγραφή χωρίς άλλες

εξηγήσεις. Οι υπόλοιποι όµως;

Για τους λόγους αυτούς έχουν αναπτυχθεί εναλλακτικές τεχνικές, οι οποίες προσθέ-

τουν κάποιου είδους δοµή στην περιγραφή των προδιαγραφών. Αυτές είναι οι εξής:

• δοµηµένη φυσική γλώσσα: H περιγραφή γίνεται µε τη χρήση τυποποιηµένων

εκφράσεων ή φορµών.

• γλώσσες περιγραφής της σχεδίασης: Πρόκειται για γλώσσες που µοιάζουν

συντακτικά µε τις γλώσσες προγραµµατισµού, αλλά χρησιµοποιούν περισσότερο

αφηρηµένες δοµές.

• γλώσσες προδιαγραφών των απαιτήσεων: Γλώσσες ειδικού σκοπού για την

έκφραση των προδιαγραφών (π.χ. PSL/PSA, RSL κ.ά.).

• γραφικοί (διαγραµµατικοί) συµβολισµοί: Oι οντότητες της περιγραφής είναι

γραφικά σύµβολα (π.χ. SADT).

• µαθηµατικές προδιαγραφές: Συµβολισµοί που χρησιµοποιούν µαθηµατικές

έννοιες (π.χ. δίκτυα Petri, µηχανές πεπερασµένων καταστάσεων κ.ά.).

• γλώσσες τυπικών προδιαγραφών: Eίναι τυπικές γλώσσες µε τις οποίες εκφρά-

ζονται οι τυπικές προδιαγραφές. Παρέχουν ένα σύνολο συντακτικών συµβόλων,

ένα σύνολο σηµασιολογικών αντικειµένων και ακριβείς κανόνες που περιγράφουν

τα αντικείµενα που ικανοποιούν κάποια προδιαγραφή.

Οι πρώτες τέσσερις τεχνικές οδηγούν στην παραγωγή ηµι τυπικών προδιαγραφών,

ενώ οι υπόλοιπες δύο αποτελούν τις δύο µεγάλες κατηγορίες τυπικών προδιαγρα-

φών. Οι τεχνικές και τα εργαλεία παραγωγής ηµι τυπικών προδιαγραφών περιγρά-

φονται στο Kεφάλαιο 2 του βιβλίου. Στα υπόλοιπα κεφάλαια παρουσιάζονται διά-

φορες τεχνικές παραγωγής τυπικών προδιαγραφών, ενώ στο τελευταίο κεφάλαιο θα

περιγραφούν περιπτώσεις εφαρµογής των τυπικών τεχνικών παραγωγής προδια-

γραφών και θα συζητηθεί η δυνατότητα πρακτικής εφαρµογής τους.

2 11 . 3 M ∏ ∆ À ¶ π ∫ ∂ ™ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ∂ ™

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 21

Page 23: pli42a

2 2 K E º A § A I O 1 : E I ™ A ° ø ° H

™‡ÓÔ„Ë

Στο πρώτο κεφάλαιο του βιβλίου που κρατάτε έγινε µια σύντοµη εισαγωγή στην

έννοια των «προδιαγραφών», η οποία διαχωρίστηκε από άλλες συναφείς έννοιες

όπως «απαιτήσεις» και «σχεδίαση συστήµατος». Είδαµε ότι οι δραστηριότητες παρα-

γωγής προδιαγραφών ανήκουν στη φάση της ανάλυσης και ακολουθούν χρονικά τις

δραστηριότητες ορισµού των απαιτήσεων του συστήµατος. Οι τεχνικές που µπορούν

να χρησιµοποιηθούν για την παραγωγή των προδιαγραφών είναι τριών ειδών: οι µη

τυπικές, όπως η φυσική γλώσσα, οι ηµι τυπικές, που χρησιµοποιούν κυρίως δια-

γράµµατα, και οι τυπικές, οι οποίες στηρίζονται σε αυστηρά µαθηµατικά µοντέλα.

Έχουµε ήδη δει ότι η φυσική γλώσσα είναι ακατάλληλη για την περιγραφή των προ-

διαγραφών ενός συστήµατος. Στο επόµενο κεφάλαιο θα εξετάσουµε την καταλληλό-

τητα των ηµι τυπικών προδιαγραφών.

BÈ‚ÏÈÔÁÚ·Ê›·

[1]M. Fraser, K. Kumar and V. Vaishnavi (1994), Strategies for incorporating formal

specifications in software development. Communications of the ACM, 37(10),

pp74–86.

[2] Ι. Sommerville (1996), Software Engineering. Addison – Wesley.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 22

Page 24: pli42a

HÌÈ–Ù˘ÈΤ˜ Ù¯ÓÈΤ˜ ·Ú·ÁˆÁ‹˜ ÚԉȷÁÚ·ÊÒÓ

™ÎÔfi˜

Μελετώντας το κεφάλαιο αυτό θα γνωρίσετε (και θα µάθετε να εφαρµόζετε) τις περισ-

σότερο διαδεδοµένες από τις ηµι τυπικές τεχνικές παραγωγής προδιαγραφών.

¶ÚÔÛ‰ÔÎÒÌÂÓ· ·ÔÙÂϤÛÌ·Ù·

Όταν θα έχετε µελετήσει αυτό το κεφάλαιο, θα µπορείτε να:

• αναφέρετε πέντε διαφορετικές διαγραµµατικές ηµι τυπικές τεχνικές παραγωγής

προδιαγραφών,

• κατασκευάσετε και ερµηνεύσετε διαγράµµατα που έχουν κατασκευασθεί χρησιµο-

ποιώντας καθεµία από αυτές τις πέντε τεχνικές,

• διαλέξετε την περισσότερο κατάλληλη ηµι τυπική τεχνική για να περιγράψετε τις

προδιαγραφές ενός συστήµατος λογισµικού.

ŒÓÓÔȘ ÎÏÂȉȿ

2∫ ∂ º ∞ § ∞ π √

• διάγραµµα Ροής ∆εδοµένων

• ροή δεδοµένων

• πηγή / καταβόθρα

• αποθήκη δεδοµένων

• διεργασία

• λεξικό δεδοµένων

• δοµηµένη γλώσσα

• διάγραµµα Warnier – Orr

• διάγραµµα Jackson

• διάγραµµα Ροής Συστήµατος

• ροή ελέγχου

• διάγραµµα Οντοτήτων – Συσχετίσεων

• οντότητα

• κατηγόρηµα

• τιµή κατηγορήµατος

• εγγραφή

• συσχέτιση

• κλειδί

∂ÈÛ·ÁˆÁÈΤ˜ ·Ú·ÙËÚ‹ÛÂȘ

Όπως αναφέραµε στο Kεφάλαιο 1, οι ηµι τυπικές τεχνικές παραγωγής προδιαγρα-

φών περιλαµβάνουν ένα καλά ορισµένο λεξιλόγιο και ένα σύνολο κανόνων για τη

σύνταξη των προδιαγραφών του συστήµατος. Οι κανόνες αυτοί εφαρµόζονται περισ-

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 23

Page 25: pli42a

2 4 K E º A § A I O 2 : H ª π – ∆ À ¶ π ∫ ∂ ™ ∆ ∂ à ¡ π ∫ ∂ ™ ¶ ∞ ƒ∞ ° ø ° ∏ ™ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ø ¡

σότερο ως οδηγίες και όχι ως απαράβατοι νόµοι. Συνεπώς, η περιγραφή ενός συστή-

µατος λογισµικού µε µια τέτοια τεχνική δεν είναι αυστηρή και πέρα από κάθε αµφι-

σβήτηση.

Παρ’ όλα αυτά, οι τεχνικές αυτής της κατηγορίας είναι αρκετά διαδεδοµένες και προ-

τιµούνται έναντι των τυπικών τεχνικών για την περιγραφή συστηµάτων µικρού ή

µεσαίου µεγέθους. Αυτό οφείλεται κυρίως στο γραφικό χαρακτήρα των τεχνικών:

επειδή είναι διαγραµµατικές, οι προδιαγραφές που παράγονται είναι περιεκτικές, ευα-

νάγνωστες και εύκολα κατανοητές από όλους εκείνους που εµπλέκονται στην υλο-

ποίηση του συστήµατος. Επιπλέον, είναι σχετικά εύκολη η παραγωγή και η συντήρη-

σή τους, αφού υπάρχουν διαθέσιµα αρκετά εργαλεία που υποστηρίζουν τις πιο γνω-

στές τεχνικές.

Σε αυτό το κεφάλαιο θα γνωρίσουµε τις πέντε περισσότερο διαδεδοµένες διαγραµµα-

τικές ηµι τυπικές τεχνικές παραγωγής προδιαγραφών, δηλαδή τα ∆ιαγράµµατα Ροής

∆εδοµένων (ενότητα 2.1), τα ∆ιαγράµµατα Ροής Συστήµατος (ενότητα 2.3), τα ∆ια-

γράµµατα Οντοτήτων – Συσχετίσεων (ενότητα 2.4), τα ∆ιαγράµµατα Warnier – Orr

(ενότητα 2.5) και τα ∆ιαγράµµατα Jackson (ενότητα 2.6). Ενδιάµεσα (ενότητα 2.2) θα

παρουσιαστεί και η ∆οµηµένη Γλώσσα (θυµηθείτε την ακαταλληλότητα της Φυσικής

Γλώσσας που είχαµε συζητήσει στο κεφάλαιο 1), ως µια αντιπροσωπευτική µη δια-

γραµµατική τεχνική της κατηγορίας. Καθώς θα µελετάτε το δεύτερο κεφάλαιο, θα σας

ζητηθεί να εφαρµόσετε καθεµία από τις τεχνικές αυτές για να προδιαγράψετε ένα

σύστηµα λογισµικού. Αφού θα έχετε εξοικειωθεί µε όλες τις τεχνικές, στην ενότητα 2.7

θα συζητήσουµε την επιλογή της πλέον κατάλληλης κατά περίπτωση τεχνικής.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 24

Page 26: pli42a

2.1 ¢È·ÁÚ¿ÌÌ·Ù· ÚÔ‹˜ ‰Â‰Ô̤ӈÓ

Τα ∆ιαγράµµατα Ροής ∆εδοµένων – ∆Ρ∆ (Data Flow Diagrams – DFDs)

(DeMarco[79]) αναπαριστούν ένα σύστηµα λογισµικού µε βάση τα δεδοµένα που

παράγονται ή διακινούνται σ’ αυτό. Αποτελούν µια λογική αναπαράσταση του

συστήµατος, χωρίς να περιέχουν πληροφορίες για το υλικό, το λογισµικό ή τα αρχεία

που το αποτελούν. Για τους λόγους αυτούς, τα ∆Ρ∆ είναι κατάλληλα για την κατα-

νόηση της λειτουργίας του συστήµατος και από µη ειδικούς.

2 52 . 1 ¢ π ∞ ° ƒ∞ ª ª ∞∆∞ ƒ √ ∏ ™ ¢ ∂ ¢ √ ª ∂ ¡ ø ¡

Σε κάθε ∆Ρ∆ αναπαρίσταται η πορεία (ροή) που ακολουθεί κάθε τµήµα δεδοµένων

από το σηµείο δηµιουργίας του, έως το σηµείο εξόδου από το σύστηµα.

Στο Σχήµα 2.1 σας υπενθυµίζουµε τα σύµβολα που χρησιµοποιούνται πιο συχνά σε

ένα ∆Ρ∆. Η βασική οντότητα είναι η ροή δεδοµένων (data flow), η οποία απεικονί-

ζει την ανταλλαγή δεδοµένων ανάµεσα στα συστατικά µέρη του συστήµατος. Τα

δεδοµένα εισέρχονται στο σύστηµα από τις πηγές δεδοµένων (data sources) και

εγκαταλείπουν το σύστηµα στις καταβόθρες δεδοµένων (data sinks). Οι δύο αυτές

οντότητες αναπαριστούν το περιβάλλον του συστήµατος.

P1

∆ιεργασία

Aποθήκη ∆εδοµένωνD1

Pοή ∆εδοµένων

S1™¯‹Ì· 2.1

Τα σύµβολα

των ∆Ρ∆

Σύµφωνα µε τα ∆Ρ∆, ένα σύστηµα θεωρείται ότι επεξεργάζεται πληροφορίες που

παράγουν οι πηγές και στέλνει τα αποτελέσµατα στις καταβόθρες. Οι οντότητες του

συστήµατος που εκτελούν την επεξεργασία καλούνται διεργασίες (processes). Μέσα

σ’ ένα σύστηµα λογισµικού, οι ροές δεδοµένων εισέρχονται σε µια διεργασία, υφί-

στανται την κατάλληλη επεξεργασία και εξέρχονται από αυτή.

Τέλος, πολλές φορές είναι απαραίτητη η προσωρινή ή όχι αποθήκευση των δεδοµέ-

νων σε οντότητες που λέγονται αποθήκες δεδοµένων (data stores). Με τις αποθή-

κες δεδοµένων επικοινωνούν µόνο οι διεργασίες, οι οποίες είτε γράφουν είτε δια-

βάζουν δεδοµένα (δηλαδή δεν επιτρέπεται να συνδεθούν απευθείας δύο αποθήκες

δεδοµένων χρησιµοποιώντας µια ροή δεδοµένων).

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 25

Page 27: pli42a

2 6 K E º A § A I O 2 : H ª π – ∆ À ¶ π ∫ ∂ ™ ∆ ∂ à ¡ π ∫ ∂ ™ ¶ ∞ ƒ∞ ° ø ° ∏ ™ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ø ¡

2.1.1 K·Ù·Û΢‹ ÂÓfi˜ ¢P¢

Ένα σύστηµα µπορεί να αναπαρασταθεί µε ∆Ρ∆ σε οποιοδήποτε επίπεδο λεπτοµέ-

ρειας. Συνήθως, στο πρώτο βήµα (∆ιάγραµµα Μηδενικού Επιπέδου) αναπαριστού-

µε το σύστηµα µε ένα ∆Ρ∆ που έχει µόνο µια διεργασία, στην οποία εισέρχονται οι

ροές δεδοµένων που προέρχονται από το περιβάλλον του συστήµατος, και από την

οποία εξέρχονται οι ροές δεδοµένων προς το περιβάλλον (το περιβάλλον αναπαρί-

σταται µε πηγές και καταβόθρες δεδοµένων). Στη συνέχεια, η διεργασία αυτή ανα-

λύεται σε άλλες διεργασίες, και κάθε διεργασία αναλύεται µε τη σειρά της, έως ότου

φτάσουµε σε ένα ικανοποιητικό επίπεδο λεπτοµέρειας. Για παράδειγµα, ένα σηµείο

τερµατισµού της ανάλυσης ορίζεται ως το επίπεδο όπου κάθε περιεχόµενη διεργα-

σία µπορεί να περιγραφεί µε ακρίβεια το πολύ σε µια σελίδα. Η διαδικασία κατα-

σκευής ενός ∆Ρ∆ φαίνεται καλύτερα στη µελέτη περίπτωσης που ακολουθεί.

Μελέτη περίπτωσης

Ο κ. Νικολόπουλος είναι ιδιοκτήτης µιας βιοτεχνίας παραγωγής παιδικών ρούχων.

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

σχετικά µικρό τζίρο, απασχολούσε δε και δύο υπαλλήλους. Τον τελευταίο χρόνο,

όµως, η Ελένη, κόρη του κ. Νικολόπουλου, ανέλαβε τη διεύθυνση της επιχείρησης.

Η Ελένη προχώρησε σε αναδιοργάνωση της επιχείρησης και παράλληλα προώθησε

νέα προϊόντα στην αγορά, κάτω από την επωνυµία CHILDWARE, µε αποτέλεσµα

ο κύκλος εργασιών της βιοτεχνίας να µεγαλώσει και να προσληφθούν νέοι εργαζό-

µενοι. Ταυτόχρονα, η Ελένη αποφάσισε τη µηχανοργάνωση της επιχείρησης σε δύο

στάδια: πρώτα θα µηχανοργανωθεί δοκιµαστικά το τµήµα µισθοδοσίας, έπειτα η

αποθήκη και τα καταστήµατα πώλησης.

ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 2.1

Πριν προχωρήσουµε στην κατασκευή ∆Ρ∆, προσπαθήστε να διευκρινίσετε το ρόλο

των οντοτήτων που αποτελούν ένα ∆Ρ∆ χαρακτηρίζοντας καθένα από τους παρα-

κάτω ισχυρισµούς ως «σωστό» ή «λάθος».

Σ Λ

Μια διεργασία αναπαριστά ένα πρόγραµµα.

Μια αποθήκη δεδοµένων είναι ισοδύναµη µε ένα αρχείο.

Μια ροή δεδοµένων αναπαριστά δεδοµένα που ανταλλάσσονται.

Μια αποθήκη δεδοµένων είναι ένα σηµείο φύλαξης δεδοµένων.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 26

Page 28: pli42a

Για το σκοπό αυτό, η Ελένη αποφάσισε να συνεργαστεί µε την εταιρεία πληροφο-

ρικής Thundersoft, η οποία ανέθεσε το έργο στον Βύρωνα, ένα νέο µηχανικό λογι-

σµικού. Ο Βύρων άρχισε αµέσως την ανάλυση του προβλήµατος, και συνέλεξε τα

ακόλουθα στοιχεία:

Το τµήµα µισθοδοσίας είναι υπεύθυνο για τη µισθοδοσία των υπαλλήλων. Η διαδι-

κασία που ακολουθείται είναι η εξής: Aπό το τµήµα προσωπικού έρχονται οι «κάρ-

τες εργασίας» των υπαλλήλων, στις οποίες αναγράφονται οι ώρες που ο καθένας

τους εργάστηκε κάθε µήνα. Στο τµήµα µισθοδοσίας φυλάσσονται τα στοιχεία µισθο-

δοσίας του κάθε υπαλλήλου (π.χ. ωροµίσθιο, υπερωρίες, επιπλέον αµοιβές, επιδό-

µατα κτλ.). Το τµήµα υπολογίζει στο τέλος κάθε µήνα το µισθό κάθε υπαλλήλου,

ενηµερώνει το λογιστήριο και διανέµει τις επιταγές στους υπαλλήλους. Στο τέλος

του έτους, το τµήµα διανέµει στους υπαλλήλους εκκαθαριστικά σηµειώµατα.

Με βάση αυτές τις πληροφορίες, ο Βύρων επιχειρεί την κατασκευή ενός ∆Ρ∆, το οποίο

θα αποτελέσει τη βάση διαπραγµάτευσης µε την Ελένη για το νέο σύστηµα λογισµι-

κού του τµήµατος µισθοδοσίας. Πρώτα κατασκευάζει έναν κατάλογο των οντοτήτων

που θα περιέχονται στο ∆Ρ∆ και το ∆ιάγραµµα Μηδενικού Επιπέδου (Σχήµα 2.2), στο

οποίο φαίνεται ότι στη µισθοδοσία ρέουν δεδοµένα από το τµήµα προσωπικού, ενώ

από αυτό ρέουν δεδοµένα προς τους υπαλλήλους και το λογιστήριο.

2 72 . 1 ¢ π ∞ ° ƒ∞ ª ª ∞∆∞ ƒ √ ∏ ™ ¢ ∂ ¢ √ ª ∂ ¡ ø ¡

P0

S1

S2S3

Tµήµα|Προσωπικού

Λογιστήριο

Tµήµα|Mισθοδοσίας

Yπάλληλοι

™¯‹Ì· 2.2

Το ∆ιάγραµµα

Μηδενικού Επιπέδου

για το τµήµα

µισθοδοσίας

Έπειτα ο Βύρων κατασκευάζει το ∆Ρ∆ Επιπέδου 1, στο οποίο η διεργασία «τµήµα

µισθοδοσίας» αναλύεται σ’ ένα νέο ∆Ρ∆ (Σχήµα 2.3), το οποίο αναπαριστά τη ροή

των δεδοµένων µισθοδοσίας: στο σύστηµα εισέρχονται από το τµήµα προσωπικού

τα στοιχεία εργασίας, τα οποία αφού ελεγχθούν, χρησιµοποιούνται για την παρα-

γωγή των καταστάσεων µισθοδοσίας και των επιταγών, ενώ στο τέλος του έτους

παράγονται οι ετήσιες καταστάσεις.

Ο Βύρων αγνοεί προς το παρόν τυχόν διαδικασίες αντιµετώπισης λαθών, αρχικοποίη-

σης ή τερµατισµού για να διατηρήσει το ∆Ρ∆ όσο απλό και κατανοητό γίνεται. Για τον

ίδιο σκοπό φροντίζει σε κάθε ∆Ρ∆ να µην υπάρχουν πάρα πολλές διεργασίες (έρευνες

έχουν δείξει ότι ένας άνθρωπος µπορεί να εργάζεται ταυτόχρονα µε 7±2 διαφορετικά

αντικείµενα) και αυτό να µην είναι µεγαλύτερο από µια σελίδα. Κατασκευάζει το διά-

γραµµα ώστε η κατεύθυνση της ροής δεδοµένων να είναι από πάνω αριστερά προς κάτω

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 27

Page 29: pli42a

2 8 K E º A § A I O 2 : H ª π – ∆ À ¶ π ∫ ∂ ™ ∆ ∂ à ¡ π ∫ ∂ ™ ¶ ∞ ƒ∞ ° ø ° ∏ ™ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ø ¡

δεξιά και δίνει σε κάθε οντότητα του διαγράµµατος ένα και µοναδικό όνοµα. Για να

υποδηλώσει τον τύπο της οντότητας, χρησιµοποιεί τα προθέµατα P για τις διεργασίες,

D για τις αποθήκες, S για τις πηγές και τις καταβόθρες και F για τις ροές δεδοµένων.

™¯‹Ì· 2.3

Το ∆Ρ∆ επιπέδου 1

™¯‹Ì· 2.4

Το ∆Ρ∆ επιπέδου 2

P1 P2 P3 P4

P5 P6

D1 D2

D3 D4 D5

Tµήµα|Προσωπικού

Yπάλληλοι

Στοιχεία Eργασίας Eτήσια Στοιχεία

∆ιανοµήEνηµέρωση|Λογιστηρίου

Λογιστήριο

Kαταστάσεις Mισθοδοσίας Eπιταγές Eτήσιες Aναφορές

Συλλογή|∆εδοµένων

Eπαλήθευση|∆εδοµένων

Eπεξεργασία|Mισθοδοσίας

Eπεξεργασία|Eτήσιων|

αναφορών

S1

S2 S3

Στο Σχήµα 2.4 φαίνεται το ∆Ρ∆ που περιγράφει αναλυτικότερα (στο επίπεδο 2) τη

διεργασία «Ρ3: Επεξεργασία µισθοδοσίας». Όταν επιχειρείται ένα τέτοιο βήµα ανά-

λυσης µιας διεργασίας, ο Βύρων γνωρίζει ότι πρέπει να προσέξει κάποια σηµεία:

• Kάθε νέο διάγραµµα πρέπει να διατηρεί «τη συνέχεια της ροής». Αυτό σηµαίνει

ότι όλες οι ροές που εισέρχονταν σε ή εξέρχονταν από µια διεργασία σ’ ένα ∆Ρ∆

επιπέδου 1, πρέπει να εµφανίζονται εισερχόµενες ή εξερχόµενες σε διεργασίες του

∆Ρ∆ επιπέδου 2, όπου αναλύεται αυτή η διεργασία.

• ∆εν πρέπει να υπάρχουν διεργασίες που «καταπίνουν» δεδοµένα χωρίς να παρά-

γουν έξοδο, ούτε πρέπει να υπάρχουν διεργασίες που παράγουν δεδοµένα µε

«µαγικό» τρόπο, χωρίς να δέχονται καµία είσοδο.

• Mια αποθήκη δεδοµένων πρέπει να περιέχει όλα τα δεδοµένα που, µε διάφορες

ροές δεδοµένων, φαίνεται ότι εισέρχονται σε ή εξέρχονται από αυτή.

P3.1 P3.2 P3.3 P3.4 P3.5 P3.6

D1 D2

D3

D4Στοιχεία Eργασίας Eτήσια Στοιχεία

Eνηµέρωση|Eτήσιων|

∆εδοµένων

Kαταστάσεις Mισθοδοσίας

Eπιταγές

Eίσοδος|∆εδοµένων

Yπολογισµός|Aµοιβής

Eκτύπωση|Kαταστάσεων

Yπολογισµός|Eτήσιων|

∆εδοµένων

Eκτύπωση|Eπιταγών

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 28

Page 30: pli42a

2 92 . 1 ¢ π ∞ ° ƒ∞ ª ª ∞∆∞ ƒ √ ∏ ™ ¢ ∂ ¢ √ ª ∂ ¡ ø ¡

ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 2.2

Προσπαθήστε να βάλετε στη σωστή χρονική σειρά τα βήµατα κατασκευής ενός ∆Ρ∆.

ΤΥΧΑΙΑ ΣΕΙΡΑ ΣΩΣΤΗ ΣΕΙΡΑ

Κατασκευή ∆Ρ∆ επιπέδου 1 1.

Κατασκευή καταλόγου οντοτήτων του ∆Ρ∆ 2.

∆ιαδοχική ανάλυση διεργασιών 3.

Κατασκευή ∆Ρ∆ µηδενικού επιπέδου 4.

¢Ú·ÛÙËÚÈfiÙËÙ· 2.1

Προσπαθήστε να συνοψίσετε τους κανόνες ορθής κατασκευής, όπως παρουσιά-

στηκαν στην ενότητα αυτή. Έπειτα καλό θα ήταν να ελέγξετε εάν τα ∆Ρ∆ που κατα-

σκεύασε ο Βύρων ακολουθούν τους κανόνες αυτούς. Μπορείτε να χρησιµοποιή-

σετε τον ακόλουθο κατάλογο µε τα περισσότερο συνηθισµένα σηµεία στα οποία

µπορεί να γίνει λάθος κατά την κατασκευή ενός ∆Ρ∆:

• Λείπουν ονόµατα οντοτήτων του ∆Ρ∆.

• Λείπουν ροές δεδοµένων ή διεργασίες ή υπάρχουν άσχετες προς το σύστηµα

ροές δεδοµένων.

• Pοές εισέρχονται σε αποθήκες δεδοµένων χωρίς ποτέ να εξέρχονται ή από απο-

θήκες δεδοµένων εξέρχονται ροές δεδοµένων που ποτέ δεν εισήλθαν σ’ αυτές.

• Yπάρχουν διεργασίες που έχουν µόνο εξερχόµενες ή µόνο εισερχόµενες ροές

δεδοµένων.

• Tο ∆Ρ∆ είναι πολύπλοκο και όχι ευκρινές.

• Oι διεργασίες που επικοινωνούν µε τις πηγές ή τις καταβόθρες του ∆Ρ∆ εκτε-

λούν επεξεργασίες που ουσιαστικά ανήκουν στις πηγές ή τις καταβόθρες.

• Tο ∆Ρ∆ είναι τεχνικά ορθό, αλλά δεν αναπαριστά το σωστό σύστηµα.

2.1.2 TÔ ÏÂÍÈÎfi ‰Â‰Ô̤ӈÓ

Ένα ∆Ρ∆ δεν είναι από µόνο του ικανό να προδιαγράψει τις απαιτήσεις από ένα

σύστηµα λογισµικού, αφού δεν περιέχει περιγραφές των οντοτήτων που το αποτε-

λούν (π.χ. τι ακριβώς περιέχεται σε µια αποθήκη δεδοµένων, τι κάνει µια διεργασία

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 29

Page 31: pli42a

3 0 K E º A § A I O 2 : H ª π – ∆ À ¶ π ∫ ∂ ™ ∆ ∂ à ¡ π ∫ ∂ ™ ¶ ∞ ƒ∞ ° ø ° ∏ ™ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ø ¡

κ.ά.). Οι πληροφορίες αυτές περιέχονται συνήθως στο λεξικό δεδοµένων – Λ∆ (Data

Dictionary), ή αλλιώς λεξικό απαιτήσεων, το οποίο συνοδεύει ένα ∆Ρ∆.

Στη βιβλιογραφία (Yourdon[90]), το Λ∆ ορίζεται ως «ένας οργανωµένος κατάλογος

όλων των στοιχείων δεδοµένων που ενυπάρχουν στο σύστηµα, µε ακριβείς και

αυστηρούς ορισµούς ώστε τόσο ο τελικός χρήστης όσο και ο µηχανικός λογισµικού

να αντιλαµβάνονται µε τον ίδιο τρόπο τις εισόδους και εξόδους, τα περιεχόµενα των

αποθηκών δεδοµένων και τους ενδιάµεσους υπολογισµούς».

Ένα Λ∆ είναι µια συλλογή δεδοµένων για τα δεδοµένα.

Το Λ∆ εξυπηρετεί πολλούς και σηµαντικούς σκοπούς (Pressman[94]):

• Aποτελεί ένα κοινό και κατανοητό έγγραφο αναφοράς τόσο για τους τεχνικούς,

όσο και τους τελικούς χρήστες.

• Xρησιµοποιείται για τη βελτίωση της διασύνδεσης και της επικοινωνίας µεταξύ

διαφορετικών τµηµάτων λογισµικού (τα οποία µπορεί να αναπτύσσονται από δια-

φορετικές οµάδες).

• ∆ιευκολύνει την κατοπινή αναβάθµιση του συστήµατος λογισµικού.

• Mπορεί να χρησιµοποιηθεί για τον έλεγχο της ορθότητας και της σωστής επεξερ-

γασίας των δεδοµένων.

• Aποτελεί το πρώτο βήµα δηµιουργίας των βάσεων δεδοµένων του συστήµατος.

Το Λ∆ αποτελεί µια συλλογή καρτελών: κάθε καρτέλα περιγράφει ένα στοιχείο δεδο-

µένων. Έτσι, είναι εύκολη η ενηµέρωση του Λ∆ µε τυχόν αλλαγές: η νέα καρτέλα

για το στοιχείο δεδοµένων τοποθετείται στη θέση της παλαιάς. Ένας ενδεικτικός

κατάλογος µε πληροφορίες που συνήθως διατηρούνται για κάθε στοιχείο δεδοµένων

ενός Λ∆ είναι οι εξής:

• Γενικές πληροφορίες: περιλαµβάνουν το όνοµα του στοιχείου, πιθανά ψευδώνυ-

µα (διαφορετικά ονόµατα που όµως περιγράφουν ουσιαστικά το ίδιο στοιχείο) και

µια λεκτική περιγραφή.

• Πληροφορίες µορφής: περιγράφουν χαρακτηριστικά αποθήκευσης και εµφάνισης

του στοιχείου (π.χ. τύπος δεδοµένων, µέγεθος, κ.ά.).

• Χαρακτηριστικά ελέγχου και χρήσης: περιγράφουν τους σωστούς τρόπους χρή-

σης του στοιχείου (π.χ. πεδίο τιµών, συχνότητα και εµβέλεια χρήσης, τιµές υπό

συνθήκη, κ.ά.) και δίνουν στοιχεία ελέγχου της ορθότητας χρήσης (πότε και από

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 30

Page 32: pli42a

πού παράγεται, πού χρησιµοποιείται, ποια διεργασία έχει δικαίωµα προσπέλασης,

τροποποίησης ή διαγραφής, κ.ά.).

• Πληροφορίες για την οµάδα δεδοµένων στην οποία ανήκει το στοιχείο (π.χ. σε

ποιες δοµές δεδοµένων ανήκει ή αποθηκεύεται, κ.ά.).

3 12 . 1 ¢ π ∞ ° ƒ∞ ª ª ∞∆∞ ƒ √ ∏ ™ ¢ ∂ ¢ √ ª ∂ ¡ ø ¡

¢Ú·ÛÙËÚÈfiÙËÙ· 2.2

Με βάση τα προηγούµενα, προσπαθήστε να κατασκευάσετε τις καρτέλες του Λ∆

για τα στοιχεία δεδοµένων «κρατήσεις» και «οικογενειακό επίδοµα». Μπορείτε να

συγκρίνετε τις καρτέλες σας µε αυτές που συνέταξε ο Βύρων για την επιχείρηση

του κ. Νικολόπουλου (Σχήµα 2.5), οι οποίες περιέχουν τα περισσότερο σηµαντικά

πεδία. Ακόµη, καλό θα ήταν να ανατρέξετε σε βιβλία Τεχνολογίας Λογισµικού, για

να δείτε πώς δηµιουργείται ένα Λ∆.

™¯‹Ì· 2.5

Μέρος του Λ∆

για το ∆Ρ∆

της µισθοδοσίας

ΟΝΟΜΑ Κρατήσεις

ΠΕΡΙΓΡΑΦΗ ΕΙΝΑΙ «ασφ. ταµείο» + «χαρτόσηµο» + «παρακράτηση φόρου»

ΤΥΠΟΣ ∆εκαδικός Αριθµός, 2 δεκαδικά ψηφία

ΠΕ∆ΙΟ ΤΙΜΩΝ > = 0

ΕΜΦΑΝΙΣΗ D2, D3

ΠΑΡΑΓΕΤΑΙ P3.2

ΧΡΗΣΗ P3.3, P3.4, P3.6

ΑΠΟΘΗΚΕΥΣΗ D2, D3

ΟΝΟΜΑ Οικογενειακό επίδοµα

ΠΕΡΙΓΡΑΦΗ ΕΙΝΑΙ «επίδοµα άγαµου» ΕΙΤΕ «επίδοµα έγγαµου»

ΤΥΠΟΣ ∆εκαδικός Αριθµός, 2 δεκαδικά ψηφία

ΠΕ∆ΙΟ ΤΙΜΩΝ µία από επίδοµα αγάµου, επίδοµα εγγάµου

ΕΜΦΑΝΙΣΗ D2, D3

ΠΑΡΑΓΕΤΑΙ P3.1

ΧΡΗΣΗ P3.3, P3.4, P3.6

ΑΠΟΘΗΚΕΥΣΗ D6

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 31

Page 33: pli42a

3 2 K E º A § A I O 2 : H ª π – ∆ À ¶ π ∫ ∂ ™ ∆ ∂ à ¡ π ∫ ∂ ™ ¶ ∞ ƒ∞ ° ø ° ∏ ™ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ø ¡

¢Ú·ÛÙËÚÈfiÙËÙ· 2.3

Προσπαθήστε να περιγράψετε πώς τα ∆Ρ∆ και το Λ∆ που κατασκεύασε ο Βύρων

µπορούν να χρησιµοποιηθούν για:

1. την επικοινωνία του συστήµατος λογισµικού της µισθοδοσίας µε το Λογιστήριο,

2. την αναβάθµιση του συστήµατος µε την προσθήκη µιας διεργασίας για ενηµέ-

ρωση των ατοµικών στοιχείων ενός υπαλλήλου.

Συγκρίνετε την απάντησή σας µε την πρόταση του Βύρωνα, όπως περιγράφεται

στο κείµενο που ακολουθεί και στο Σχήµα 2.6.

Η επικοινωνία του συστήµατος λογισµικού της µισθοδοσίας µε αυτό του λογιστη-

ρίου γίνεται µέσα από την αποθήκη «D3: Καταστάσεις µισθοδοσίας» (οι οποίες

στέλνονται από τη µισθοδοσία στο λογιστήριο), και µέσα από την αποθήκη «D6:

Ατοµικά στοιχεία» (τα οποία στέλνονται από το λογιστήριο στη µισθοδοσία). Προς

το παρόν, η επικοινωνία γίνεται µε τις διεργασίες Ρ5 και Ρ7. Η µελλοντική πλήρης

µηχανοργάνωση της επιχείρησης θα αυτοµατοποιήσει τη διαδικασία ανταλλαγής

δεδοµένων. Η αναβάθµιση του συστήµατος γίνεται µε τις προσθήκες που έχουν

ζωγραφιστεί µε έντονες γραµµές στο Σχήµα 2.6.

™¯‹Ì· 2.6

Το αναβαθµισµέ-

νο σύστηµα της

µισθοδοσίας

P1P2

P3 P4

P5 P6P7

D1 D2

D3 D3 D4 D5

Tµήµα|Προσωπικού

Yπάλληλοι

Στοιχεία Eργασίας Eτήσια Στοιχεία

∆ιανοµήEνηµέρωση|Λογιστηρίου

Λογιστήριο

Kαταστάσεις|Mισθοδοσίας

Eπιταγές Eτήσιες Aναφορές

Συλλογή|∆εδοµένων

Eπαλήθευση|∆εδοµένων Eπεξεργασία|

Mισθοδοσίας

Eπεξεργασία|Eτήσιων|

Aναφορών

Aτοµικά|Στοιχεία

Eνηµέρωση|Aτοµικών|Στοιχείων

S1

S2 S3

2.2 ¢ÔÌË̤ÓË ÁÏÒÛÛ·

Η δοµηµένη γλώσσα (Structured Language) (Davis[83]) είναι στην πραγµατικότητα

µια περιορισµένη µορφή της φυσικής γλώσσας, από την οποία δανείζεται κάποιες

λέξεις – κλειδιά, ενώ δανείζεται τις δοµές ελέγχου από τις γλώσσες προγραµµατισµού.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 32

Page 34: pli42a

Μια απλή δοµηµένη γλώσσα µπορεί να περιέχει τρεις δοµές ελέγχου: ακολουθία,

απόφαση, επανάληψη, ενώ υποστηρίζει και τον ορισµό ολοκληρωµένων τµηµάτων.

Ως ακολουθία (Πίνακας 2.1) ορίζεται οποιαδήποτε σειρά οδηγιών (προτιµούµε να

χρησιµοποιήσουµε εδώ τη λέξη «οδηγία» αντί της λέξης «εντολή», για να τονίσου-

µε το γεγονός ότι η δοµηµένη γλώσσα δεν είναι γλώσσα προγραµµατισµού). Εάν µια

σειρά οδηγιών πρόκειται να χρησιµοποιηθεί πολλές φορές µέσα στην περιγραφή,

καλό είναι να την ορίσουµε ως ολοκληρωµένο τµήµα (block). Η δοµή απόφασης

δηλώνει επιλογή ανάµεσα σε δύο εναλλακτικές οδηγίες, µε βάση την τιµή µιας συν-

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

απόφασης ή ένα ολοκληρωµένο τµήµα. Οι δοµές επανάληψης περιγράφουν µε διά-

φορους τρόπους την επανάληψη µιας ή περισσότερων οδηγιών ή τµηµάτων.

¶›Ó·Î·˜ 2.1

Οι δοµές µιας απλής δοµηµένης γλώσσας

3 32 . 2 ¢ √ ª ∏ ª ∂ ¡ ∏ ° § ø ™ ™ ∞

¢Ú·ÛÙËÚÈfiÙËÙ· 2.4

Χρησιµοποιώντας δοµηµένη γλώσσα προσπαθήστε να περιγράψετε τις διεργασίες

υπολογισµού της «µεικτής µηνιαίας αµοιβής» και της «ετήσιας αναφοράς» ενός

υπαλλήλου. Συγκρίνετε την απάντησή σας µε µια προτεινόµενη λύση που περι-

γράφεται στο Σχήµα 2.7.

Μια δοµηµένη γλώσσα έχει την συντακτική αυστηρότητα που έχει µια γλώσσα προ-

γραµµατισµού, ενώ αντί για εντολές προγραµµατισµού, χρησιµοποιεί συγκεκριµέ-

νες λέξεις µιας φυσικής γλώσσας µε τέτοιο τρόπο ώστε αυτές να µην είναι ασαφείς.

Ακολουθία ∆οµές επανάληψης

<οδηγία 1>

<οδηγία 2>

ΕΠΑΝΕΛΑΒΕ ΜΕΧΡΙ <συνθήκη>

Ολοκληρωµένο τµήµα

Ολοκληρωµένο τµήµα

ΚΑΝΕ <όνοµα τµήµατος>

∆οµή απόφασης

ΕΑΝ <συνθήκη> ΤΟΤΕ <οδηγία>

ΑΛΛΙΩΣ <συνθήκη> ΟΠΟΤΕ <οδηγία>

ΕΝΟΣΩ <συνθήκη>

ΕΠΑΝΕΛΑΒΕ ολοκληρωµένο τµήµα

ΕΠΑΝΕΛΑΒΕ ν ΦΟΡΕΣ

Ολοκληρωµένο τµήµα

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 33

Page 35: pli42a

3 4 K E º A § A I O 2 : H ª π – ∆ À ¶ π ∫ ∂ ™ ∆ ∂ à ¡ π ∫ ∂ ™ ¶ ∞ ƒ∞ ° ø ° ∏ ™ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ø ¡

Για να περιορίσουµε ακόµη περισσότερο τις ασάφειες σε µια δοµηµένη γλώσσα,

µπορεί να προδιαγράψουµε τις απαιτήσεις µε τρόπο διαδικαστικό, ο οποίος θα δεί-

χνει και τον τρόπο υλοποίησης των αντίστοιχων τµηµάτων λογισµικού. Για το σκοπό

αυτό χρησιµοποιούνται οι Γλώσσες Περιγραφής Προγραµµάτων (Program

Description Languages – PDL). Πολλές φορές, αντί της δοµηµένης γλώσσας, χρη-

σιµοποιούνται φόρµες, τα πεδία των οποίων συµπληρώνει ο µηχανικός λογισµικού.

2.3 ¢È·ÁÚ¿ÌÌ·Ù· ÚÔ‹˜ Û˘ÛÙ‹Ì·ÙÔ˜

Τα ∆ιαγράµµατα Ροής Συστήµατος – ∆ΡΣ (System Flow Charts) (Bohl[78]) ανα-

παριστούν τα τµήµατα ενός συστήµατος λογισµικού και τη ροή ελέγχου ανάµεσα σ’

αυτά. Η βασική ιδέα είναι να αναπαρασταθεί διαφορετικά κάθε τµήµα του συστή-

µατος (π.χ. πρόγραµµα, διαδικασία, αρχείο κ.λπ.), αλλά χωρίς λεπτοµέρειες υλο-

ποίησης. Έτσι, κάθε τµήµα του συστήµατος αντιµετωπίζεται σαν ένα κλειστό κουτί:

ο µηχανικός λογισµικού δεν ενδιαφέρεται να περιγράψει τα περιεχόµενά του, αλλά

µόνο το είδος του και τη θέση του στη ροή µιας συγκεκριµένης διαδικασίας στην

οποία αυτό λαµβάνει µέρος.

ΥΠΟΛΟΓΙΣΜΟΣ µεικτής µηνιαίας αµοιβής υπαλλήλου

∆ΙΑΒΑΣΕ ηµέρες εργασίας ΑΠΟ στοιχεία εργασίας

∆ΙΑΒΑΣΕ ηµεροµίσθιο ΑΠΟ ατοµικά στοιχεία

Μεικτή µηνιαία αµοιβή = ηµέρες εργασίας * ηµεροµίσθιο

ΥΠΟΛΟΓΙΣΜΟΣ ετήσιας αναφοράς υπαλλήλου

Ετήσια αναφορά = 0

ΕΠΑΝΕΛΑΒΕ 12 ΦΟΡΕΣ

ΚΑΝΕ ΥΠΟΛΟΓΙΣΜΟΣ µεικτής µηνιαίας αµοιβής υπαλλήλου

Ετήσια αναφορά = ετήσια αναφορά + µεικτή µηνιαία αµοιβή

Ενώ τα ∆Ρ∆ αποτελούν ένα λογικό µοντέλο του συστήµατος µε βάση τα δεδοµέ-

να που διακινούνται σ’ αυτό, τα ∆ΡΣ αποτελούν ένα φυσικό µοντέλο του συστή-

µατος µε βάση τη ροή των εργασιών που γίνονται σε αυτό.

™¯‹Ì· 2.7

Περιγραφή κάποιων

διεργασιών

της µισθοδοσίας µε

δοµηµένη γλώσσα

Τα ∆ΡΣ αποτελούν άλλη µια διαγραµµατική τεχνική αναπαράστασης των προδια-

γραφών ενός συστήµατος. Ένα υποσύνολο του οµολογουµένως µεγάλου «λεξιλογί-

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 34

Page 36: pli42a

ου» των ∆ΡΣ περιέχεται στο Σχήµα 2.8. Η βασική οντότητα είναι η ροή (flowline),

η οποία αναπαριστά απλά τη διαδοχική εµπλοκή των τµηµάτων του συστήµατος σε

µια διαδικασία.

Τα ∆ΡΣ αποτελούν µια υψηλού επιπέδου αναπαράσταση ενός φυσικού συστήµατος

και συνεπώς είναι κατανοητά από οποιονδήποτε αναγνωρίζει τα σύµβολα που χρη-

σιµοποιούν (κάτι όχι και πολύ δύσκολο, έτσι δεν είναι;). Σε σχέση µε τα ∆Ρ∆ που

είδαµε στην ενότητα 2.1, οι διεργασίες έχουν αντικατασταθεί από προγράµµατα και

οι αποθήκες δεδοµένων από συγκεκριµένες συσκευές αποθήκευσης.

3 52 . 3 ¢ π ∞ ° ƒ∞ ª ª ∞∆∞ ƒ √ ∏ ™ ™ À ™ ∆ ∏ ª ∞∆ √ ™

∆ιεργασία /|Πρόγραµµα

Mαγνητική|Tαινία

Mαγνητικός|∆ίσκος

Aπόφαση Έγγραφο

Eίσοδος /|Έξοδος|

∆εδοµένων

Xειρωνακτική|Eργασία

Bοηθητική|Eργασία

Tερµατικός|ΣταθµόςXειρωνακτική|

Eίσοδος

Συσκευή Online|Aποθήκευσης

Pοή

™¯‹Ì· 2.8

Τα βασικά

σύµβολα ενός ∆ΡΣ

2.3.1 K·Ù·Û΢‹ ÙˆÓ ¢P™

Κατά την κατασκευή ενός ∆ΡΣ καλό είναι να ακολουθούµε τους κανόνες που ανα-

φέρθηκαν στα ∆Ρ∆. Γενικά, η ροή σ’ ένα σύστηµα που αναπαρίσταται µε ∆ΡΣ είναι

από πάνω προς τα κάτω και από αριστερά προς τα δεξιά. Καλό είναι να µην έχουµε

οντότητες χωρίς όνοµα (µόνο που εδώ δεν χρειάζεται να ονοµατίσουµε και τις ροές,

αφού δεν αναπαριστούν κάτι συγκεκριµένο, αλλά δείχνουν απλά τη σειρά εκτέλεσης),

ούτε να στριµώχνουµε πολλές οντότητες σ’ ένα διάγραµµα. Στην πραγµατικότητα,

εάν το ∆ΡΣ είναι πολύπλοκο, µπορούµε να χρησιµοποιήσουµε τις οντότητες διασύν-

δεσης, είτε µέσα στην ίδια σελίδα, είτε σε άλλη σελίδα. Επειδή όµως δεν είναι καλή

πρακτική να απλώσουµε ένα ∆ΡΣ σε πολλές σελίδες, µπορούµε να αναλύσουµε

κάποια οντότητα (συνήθως διεργασία) σε ένα ∆ΡΣ χαµηλότερου επιπέδου, ακολου-

θώντας τους ίδιους κανόνες που πρέπει να ισχύουν κατά την ανάλυση ενός ∆Ρ∆.

Μελέτη περίπτωσης (συνέχεια)

Ο Βύρων, αφού κατασκεύασε το ∆Ρ∆ µε το οποίο κατάφερε να αναπαραστήσει λογι-

κά το σύστηµα της µισθοδοσίας, επιχειρεί να κατασκευάσει και το ∆ΡΣ µε στόχο να

συµφωνήσει µε την Ελένη σε µια αρχική µορφή του τελικού συστήµατος.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 35

Page 37: pli42a

3 6 K E º A § A I O 2 : H ª π – ∆ À ¶ π ∫ ∂ ™ ∆ ∂ à ¡ π ∫ ∂ ™ ¶ ∞ ƒ∞ ° ø ° ∏ ™ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ø ¡

Μετά από ένα νέο κύκλο συνεντεύξεων, ο Βύρων έχει συνθέσει την εικόνα της δια-

δικασίας µισθοδοσίας που ακολουθείται για τους υπαλλήλους της CHILDWARE. Με

βάση τα στοιχεία αυτά, ο Βύρων κατασκευάζει το ∆ΡΣ που φαίνεται στο Σχήµα 2.9.

™¯‹Ì· 2.9

Το ∆ΡΣ

του τµήµατος

µισθοδοσίας

Kάρτες Eργασίας

Πληκτρολόγηση

TερµατικόAναφορές Eπιταγές

Eτήσιες|Aναφορές

Πρόγραµµα|Eτήσιων|

Aναφορών

Πρόγραµµα|Συλλογής Kαι|Eπαλήθευσης|∆εδοµένων

Πρόγραµµα|Mισθοδοσίας

Aρχεία|Mισθοδοσίας

Eτήσια|Aρχεία

ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 2.3

Κοιτάζοντας τη διαδικασία µισθοδοσίας που αναπαριστά το ∆ΡΣ του Σχήµατος

2.9, µπορείτε να συµπεράνετε την απάντηση (σωστό ή λάθος) που πήρε ο Βύρων

όταν έκανε τις ακόλουθες ερωτήσεις στην Ελένη;

Σ Λ

1. Οι κάρτες εργασίας έρχονται ηλεκτρονικά στο τµήµα

µισθοδοσίας.

2. Χρησιµοποιείται ειδικό πρόγραµµα επαλήθευσης

των δεδοµένων εργασίας πριν τον υπολογισµό της µισθοδοσίας.

3. Το πρόγραµµα µισθοδοσίας εκτυπώνει τις αναφορές για

το λογιστήριο.

4. Το πρόγραµµα ετήσιων αναφορών εκτυπώνει τις επιταγές.

5. Τα ετήσια αρχεία πληρωµών φυλάσσονται µαζί µε τα µηνιαία

αρχεία µισθοδοσίας.

6. Οι ετήσιες αναφορές τυπώνονται είτε από το πρόγραµµα

µισθοδοσίας, είτε από το πρόγραµµα ετήσιων αναφορών.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 36

Page 38: pli42a

™¯‹Ì· 2.10

Το ∆ΡΣ του νέου

συστήµατος

της µισθοδοσίας

3 72 . 4 ¢ π ∞ ° ƒ∞ ª ª ∞∆∞ √ ¡ ∆ √ ∆ ∏ ∆ ø ¡ – ™ À ™ à ∂ ∆ π ™ ∂ ø ¡

¢Ú·ÛÙËÚÈfiÙËÙ· 2.5

Ο Βύρων έχει ήδη ανακαλύψει αρκετές ατέλειες στη διαδικασία µισθοδοσίας που

ακολουθείται και σκέφτεται να προτείνει τις ακόλουθες βελτιώσεις: Oι κάρτες εργα-

σίας να είναι ηλεκτρονικές, δηλαδή τα δεδοµένα εργασίας του κάθε υπαλλήλου να

πληκτρολογούνται και να ελέγχονται απευθείας στο τµήµα προσωπικού, ενώ το

τµήµα µισθοδοσίας θα τα διαβάζει από κάποιο αποθηκευτικό χώρο (π.χ. µια κεντρι-

κή βάση δεδοµένων). Το ίδιο µπορεί να γίνει και µε τα ατοµικά στοιχεία των υπαλ-

λήλων. Επιπλέον, το τµήµα µισθοδοσίας µπορεί µε τη σειρά του να ενηµερώνει

την κεντρική βάση µε τα στοιχεία µισθοδοσίας, ώστε να έχει πρόσβαση σε αυτά

το λογιστήριο, αλλά και η διοίκηση. Βέβαια, καλό είναι, για λόγους ασφαλείας, να

διατηρηθούν για ένα ή δύο χρόνια και τα έντυπα αρχεία που κρατά η επιχείρηση.

Προσπαθήστε να σχεδιάσετε το ∆ΡΣ του καινούριου συστήµατος που προτείνει ο

Βύρων, ώστε οι αλλαγές να γίνουν κατανοητές και από την Ελένη. Μπορείτε να

συγκρίνετε την απάντησή σας µε την πρόταση του Βύρωνα που φαίνεται στο Σχήµα

2.10 (οι βελτιώσεις έχουν ζωγραφιστεί µε έντονες γραµµές). Εάν υπάρχουν διαφο-

ρές φροντίστε να επιβεβαιώσετε ότι το ∆ΡΣ που κατασκευάσατε αντικατοπτρίζει την

παραπάνω περιγραφή, πριν συζητήσετε την απάντησή σας µε το διδάσκοντα της ΘΕ.

Aναφορές Eπιταγές

TερµατικόΠρόγραµµα|

Eτήσιων|Aναφορών

Πρόγραµµα|Συλλογής |∆εδοµένων

Πρόγραµµα|Mισθοδοσίας

Aρχεία|Mισθοδοσίας

∆ιανοµή∆εδοµένα|Mισθοδοσίας

Aρχεία|Προσωπικού

Eτήσιες|Aναφορές

Eτήσια Aρχεία∆εδοµένα|Eργασίας

2.4 ¢È·ÁÚ¿ÌÌ·Ù· ÔÓÙÔÙ‹ÙˆÓ – ™˘Û¯ÂÙ›ÛˆÓ

Τα ∆ιαγράµµατα Οντοτήτων – Συσχετίσεων – ∆ΟΣ (Entity – Relationship

Diagrams) (Chen[76], Hull[87]) χρησιµοποιούνται για να προδιαγράψουν τη λογι-

κή µορφή των δεδοµένων που επεξεργάζεται ένα σύστηµα λογισµικού. Τα δεδοµέ-

να µπορεί να είναι οργανωµένα µε δοµηµένο ή όχι τρόπο. Στην πρώτη περίπτωση

έχουµε στην πραγµατικότητα µια βάση δεδοµένων. Στη δεύτερη περίπτωση µπορεί

απλά να χρησιµοποιούνται αρχεία δεδοµένων.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 37

Page 39: pli42a

3 8 K E º A § A I O 2 : H ª π – ∆ À ¶ π ∫ ∂ ™ ∆ ∂ à ¡ π ∫ ∂ ™ ¶ ∞ ƒ∞ ° ø ° ∏ ™ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ø ¡

Το Σχήµα 2.11 σας υπενθυµίζει τα σύµβολα που χρησιµοποιούνται σε ένα ∆ΟΣ. Τα

∆ΟΣ πολλές φορές χρησιµοποιούνται συµπληρωµατικά προς τα ∆Ρ∆ και το Λ∆, γιατί

είναι ταυτόχρονα ακριβή και εύκολα κατανοητά από µη εξειδικευµένο προσωπικό.

Επιπλέον, µια βάση δεδοµένων που έχει προδιαγραφεί µε ∆ΟΣ µπορεί πολύ εύκολα

να σχεδιαστεί χρησιµοποιώντας το σχεσιακό µοντέλο δεδοµένων.

Τα ∆ΟΣ απεικονίζουν διαγραµµατικά τις οντότητες που συνθέτουν µια βάση δεδο-

µένων, τα κατηγορήµατα που περιγράφουν κάθε οντότητα και τις συσχετίσεις ανά-

µεσα στις οντότητες.

™¯‹Ì· 2.11

Τα σύµβολα που

χρησιµοποιούνται

σε ένα ∆ΟΣ

Όντότητα Συσχέτιση Kατηγόρηµα Kλειδί Σύνδεση

2.4.1 K·Ù·Û΢‹ ÙˆÓ ¢O™

Πριν προχωρήσουµε στην κατασκευή ενός ∆ΟΣ, ας θυµηθούµε τις οντότητες που

συµµετέχουν σε µια βάση δεδοµένων (Korth[86]). Η οντότητα (entity) αναπαριστά

κάθε ξεχωριστό συστατικό µέρος του «κόσµου» που περιγράφεται από τα δεδοµένα

που αποθηκεύονται στη βάση δεδοµένων. Συνήθως πολλά τέτοια µέρη ανήκουν στην

ίδια οντότητα. Κάθε οντότητα περιγράφεται από ένα σύνολο χαρακτηριστικών που

λέγονται κατηγορήµατα (attributes). Κάθε κατηγόρηµα είναι µια «θέση» στην οποία

αποθηκεύεται µια «µονάδα πληροφορίας» για την οντότητα, η οποία καλείται τιµή

(value) του κατηγορήµατος. Τα µέλη της ίδιας οντότητας περιγράφονται από το ίδιο

σύνολο κατηγορηµάτων (λέγονται και πεδία), αλλά για κάθε µέλος µπορεί να απο-

θηκεύεται διαφορετική πληροφορία στη βάση δεδοµένων.

Οι τιµές όλων των κατηγορηµάτων για ένα µέλος µιας οντότητας αποτελούν την

εγγραφή (record) που γίνεται στη βάση δεδοµένων για το µέλος αυτό. Σε κάθε οντό-

τητα πρέπει να υπάρχει ένα κατηγόρηµα, η τιµή του οποίου είναι διαφορετική για

κάθε µέλος, και δεν επιτρέπεται δύο µέλη να έχουν την ίδια τιµή σε αυτό το κατη-

γόρηµα. Αυτό το κατηγόρηµα λέγεται «κλειδί» (primary key) και είναι ο ασφαλέ-

στερος τρόπος διαχωρισµού των οντοτήτων. Ας σηµειωθεί ότι ένα κλειδί µπορεί να

προκύψει και από το συνδυασµό δύο ή περισσότερων κατηγορηµάτων.

Σε µια βάση δεδοµένων, λοιπόν, οι οντότητες αποτελούν τα «πρώτου βαθµού» δεδο-

µένα. Επιπλέον, σε µια βάση επιτρέπεται ο συνδυασµός οντοτήτων για τη δηµιουρ-

γία συσχετίσεων (relationships), οι οποίες περιγράφουν δεδοµένα που προκύπτουν

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 38

Page 40: pli42a

από το συνδυασµό άλλων δεδοµένων ή δεδοµένα που περιγράφουν άλλα δεδοµένα

(«δεύτερου βαθµού» δεδοµένα).

Μελέτη περίπτωσης (συνέχεια)

Αφού προσδιόρισε στο ∆ΡΣ τα αρχεία που θα διατηρεί το σύστηµα λογισµικού του

τµήµατος µισθοδοσίας, ο Βύρων αποπειράται να προδιαγράψει τον τρόπο µε τον

οποίο θα φυλάσσονται τα δεδοµένα που βρίσκονται σε αυτά. Η πρότασή του για την

ύπαρξη µιας κεντρικής βάσης δεδοµένων έχει γίνει δεκτή, οπότε επικεντρώνεται

στην περιγραφή της δοµής της βάσης µε τη χρήση ∆ΟΣ (Σχήµα 2.12).

3 92 . 4 ¢ π ∞ ° ƒ∞ ª ª ∞∆∞ √ ¡ ∆ √ ∆ ∏ ∆ ø ¡ – ™ À ™ à ∂ ∆ π ™ ∂ ø ¡

™¯‹Ì· 2.12

Το ∆ΟΣ που περι-

γράφει τη βάση

δεδοµένων της

µισθοδοσίας

HµεροµηνίαΏρα|

ΠροσέλευσηςΏρα|

Aποχώρησης

Στοιχεία Eργασίας

Eργάστηκε

EπώνυµοΌνοµα

Bαθµός Hµεροµίσθιο AΦM

Yπάλληλος

∆ιέυθυνση Tηλέφωνο Kρατήσεις Eπιδόµατα

Έλαβε

Eπιταγές

Kωδικός|Eπιταγής

Hµεροµηνία|Eξόφλησης

Tράπεζα Ποσό Παρελήφθη

¢Ú·ÛÙËÚÈfiÙËÙ· 2.6

Προσπαθήστε σε 5–10 γραµµές να περιγράψετε το τµήµα της Βάσης ∆εδοµένων

που αναπαριστά το ∆ΟΣ του Σχήµατος 2.12. Έπειτα συγκρίνετε την απάντησή σας

µε το κείµενο που ακολουθεί.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 39

Page 41: pli42a

4 0 K E º A § A I O 2 : H ª π – ∆ À ¶ π ∫ ∂ ™ ∆ ∂ à ¡ π ∫ ∂ ™ ¶ ∞ ƒ∞ ° ø ° ∏ ™ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ø ¡

Ένα τµήµα της βάσης δεδοµένων αποτελείται από τις οντότητες «στοιχεία εργα-

σίας» (µε κλειδί το κατηγόρηµα «ηµεροµηνία»), «υπάλληλος» (µε κλειδί το κατη-

γόρηµα «επώνυµο») και «επιταγές» (µε κλειδί το κατηγόρηµα «κωδικός επιταγής»).

Οι δυο πρώτες συνδυάζονται µε τη συσχέτιση «εργάστηκε», η οποία δίνει τα στοι-

χεία εργασίας του κάθε υπαλλήλου. Οι δύο τελευταίες συνδυάζονται µε τη συσχέ-

τιση «έλαβε», η οποία αντιστοιχίζει επιταγές µε υπαλλήλους που τις παρέλαβαν.

¢Ú·ÛÙËÚÈfiÙËÙ· 2.7

Πριν προχωρήσετε, προσπαθήστε να ανακαλύψετε προβλήµατα στο ∆ΟΣ του Σχή-

µατος 2.12. Μερικά από αυτά παρατίθενται στη συνέχεια. ∆οκιµάστε να σχεδιά-

σετε ένα νέο ∆ΟΣ που θα επιλύει τα προβλήµατα που ανακαλύψατε.

Ο Βύρων, αφού συζήτησε το ∆ΟΣ της µισθοδοσίας µε την Ελένη, ανακάλυψε κάποια

σηµαντικά λάθη και χρειάστηκε να διορθώσει το αρχικό ∆ΟΣ όπως φαίνεται στο

Σχήµα 2.13. Κατ’ αρχήν, είχε χρησιµοποιήσει ακατάλληλα κατηγορήµατα ως κλει-

διά των οντοτήτων «στοιχεία εργασίας» και «υπάλληλος». Στην πρώτη περίπτωση,

η ηµεροµηνία δεν είναι αρκετή για να διαχωρίσει τις εγγραφές, αφού πολλοί υπάλ-

ληλοι εργάζονται την ίδια ηµεροµηνία. Στη δεύτερη περίπτωση, υπήρχε πρόβληµα

µε δύο υπαλλήλους που είχαν το ίδιο επώνυµο. Ετσι, στην πρώτη οντότητα προσθέτει

ως κλειδί το πεδίο «κωδικός κάρτας εργασίας» (κάθε υπάλληλος έχει µια µόνο κάρτα

εργασίας) και στην οντότητα «υπάλληλος» προσθέτει ως κλειδί το κατηγόρηµα

«αριθµός µητρώου» (κάθε υπάλληλος έχει ένα και µοναδικό αριθµό µητρώου). Εναλ-

λακτικά, ο Βύρων είχε εξετάσει την πιθανότητα να χρησιµοποιήσει το κατηγόρηµα

ΑΦΜ ως κλειδί, αλλά υπήρχε πρόβληµα στην περίπτωση συζύγων που υπέβαλαν

κοινή δήλωση.

Επιπλέον, το κατηγόρηµα «διεύθυνση» είναι σύνθετο και µπορεί να αναλυθεί στα

ατοµικά κατηγορήµατα «οδός», «ΤΚ» και «πόλη». Το ίδιο πρέπει να γίνει και µε τα

κατηγορήµατα «επιδόµατα» και «κρατήσεις». Τέλος, στην οντότητα «στοιχεία εργα-

σίας» προσθέτει το κατηγόρηµα «παρών» για να καλύψει την περίπτωση απουσίας

ενός υπαλλήλου.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 40

Page 42: pli42a

2.5 ¢È·ÁÚ¿ÌÌ·Ù· Warnier – ORR

Τα διαγράµµατα αυτά είχαν αρχικά αναπτυχθεί από τον J.D. Warnier για την ιεραρ-

χική αναπαράσταση των δεδοµένων (Warnier[74], Warnier[81]) και επεκτάθηκαν

από τον K. Orr ώστε να είναι κατάλληλα για τη σχεδίαση συστηµάτων (Orr[81]).

Ετσι, ένα διάγραµµα Warnier – Orr (∆ΓΟ) µπορεί να χρησιµοποιηθεί για την περι-

γραφή των δοµών δεδοµένων, της λογικής του προγράµµατος ή ακόµη και της συνο-

λικής δοµής του λογισµικού.

Η βασική ιδέα πίσω από τα ∆ΓΟ είναι ότι ένα καλογραµµένο σύστηµα λογισµικού

είναι στενά συνδεδεµένο µε τα δεδοµένα που χρησιµοποιεί. Συνεπώς, η περιγραφή

και η σχεδίαση του συστήµατος µπορεί να αρχίσει προδιαγράφοντας τα δεδοµένα.

4 12 . 5 ¢ π ∞ ° ƒ∞ ª ª ∞∆∞ WA R N I E R – O R R

™¯‹Ì· 2.13

Το ∆ΟΣ

που περιγράφει

τη νέα βάση

δεδοµένων

της µισθοδοσίας

HµεροµηνίαΏρα|

ΠροσέλευσηςΏρα|

Aποχώρησης

Eργάστηκε

Eπώνυµο Όνοµα Bαθµός Hµεροµίσθιο A.Φ.M.

Yπάλληλος

Tηλέφωνο Kρατήσεις Eπιδόµατα

Έλαβε

Kωδικός|Eπιταγής

Hµεροµηνία|Eξόφλησης

Tράπεζα Ποσό Παρελήφθη

ΠαρώνKωδικός Kάρτας|

Eργασίας

Aριθµός|Mητρώου

Oδός

T.K.

Πόλη

Στοιχεία Eργασίας

Eπιταγές

Όµως, ένα ∆ΓΟ δεν περιγράφει µόνο τη δοµή (ιεραρχία) των δεδοµένων και των

τµηµάτων του συστήµατος λογισµικού, αλλά και τη λογική ροή της λειτουργίας του

συστήµατος (Σχήµα 2.14). Ο συµβολισµός που χρησιµοποιείται είναι σχετικά απλός:

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 41

Page 43: pli42a

4 2 K E º A § A I O 2 : H ª π – ∆ À ¶ π ∫ ∂ ™ ∆ ∂ à ¡ π ∫ ∂ ™ ¶ ∞ ƒ∞ ° ø ° ∏ ™ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ø ¡

το σύµβολο δηλώνει την ιεραρχία, η κατακόρυφη σειρά παράθεσης των τµηµάτων

δηλώνει τη σειρά εκτέλεσης ή χρήσης, και ένας αριθµός (1..Ν) σε παρένθεση κάτω

από κάθε οντότητα δηλώνει τον αριθµό των επαναλήψεων χρήσης της οντότητας.

Το σύµβολο ≈ δηλώνει την αποκλειστική διάζευξη ανάµεσα σε δύο οντότητες (κάθε

φορά µπορεί να χρησιµοποιηθεί µια µόνο από αυτές).

™¯‹Ì· 2.14

Κάποια ∆ΓΟ

που περιγράφουν

τµήµατα

του συστήµατος

µισθοδοσίας

Yπάλληλοι|(N)

Eπιταγές|(K)

Όνοµα|(1)

Hµεροµηνία|(1)

Eπώνυµο|(1)

Tράπεζα|(1)

Ποσό|(1)

Mισθοδοσία|Yπαλλήλου|

(N)

Eισαγωγή ∆εδοµένων|(1)

Yπολογισµός|Aµοιβης|(1)

Yπολογισµός|Eτήσιων ∆εδοµένων|(1)

Eκτύπωση|(1)

(α) (β)

Έτσι, στο Σχήµα 2.14(α) φαίνεται ότι η επιχείρηση έχει Ν υπαλλήλους, καθένας από

τους οποίους λαµβάνει Κ επιταγές. Σε κάθε επιταγή αναγράφονται µια φορά τα στοι-

χεία «όνοµα», «επώνυµο», «τράπεζα», «ηµεροµηνία» και «ποσό». Το Σχήµα 2.14(β)

δηλώνει ότι η µισθοδοσία κάθε υπαλλήλου υπολογίζεται Ν φορές (όσες και οι υπάλ-

ληλοι) και περιλαµβάνει τα βήµατα «εισαγωγή δεδοµένων», «υπολογισµός αµοι-

βής», «υπολογισµός ετήσιων δεδοµένων» (που εκτελούνται µια φορά για κάθε υπάλ-

ληλο) και «εκτύπωση» (που εκτελείται Κ φορές για κάθε υπάλληλο).

¢Ú·ÛÙËÚÈfiÙËÙ· 2.8

Προσπαθήστε να επεκτείνετε το ∆ΓΟ του Σχήµατος 2.14 ώστε να προδιαγράφει

πλήρως τη διεργασία υπολογισµού της µισθοδοσίας ενός υπαλλήλου. Μια αποδε-

κτή απάντηση (που κατασκεύασε ο Βύρων) φαίνεται στο Σχήµα 2.15.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 42

Page 44: pli42a

2.6 ¢È¿ÁÚ·ÌÌ· Jackson

Το ∆ιάγραµµα Jackson (∆Τ) επινοήθηκε από τον M.A. Jackson ως το βασικό εργα-

λείο αναπαράστασης της µεθοδολογίας ανάπτυξης συστηµάτων που ο ίδιος προτεί-

νει (Jackson[83]).

4 32 . 6 ¢ π ∞ ° ƒ∞ ª ª ∞ J A C K S O N

Yπολογισµός|Aµοιβης|(1)

Eπιταγές|(N)

Όνοµα|(1)

Hµεροµηνία|(1)

Eπώνυµο|(1)

Tράπεζα|(1)

Ποσό|(1)

Mισθοδοσία|Yπαλλήλου|

(N)

Eισαγωγή|∆εδοµένων|(1)

Yπολογισµός|Eτήσιων |∆εδοµένων|(1)

Eκτύπωση|(K)

Bασικός Mισθός|(1)

Yπερωρίες|(X)

Eπιδόµατα|(Ψ)

Aσφάλεια|(Z)

Φόρος|(1)

Xαρτόσηµο|(1)

Έγγαµος

Άγαµος|Mε Παιδιά

Xωρίς Παιδιά

Eισαγωγή Στοιχείων|Eργασίας|(M)

Eισαγωγή Aτοµικών|Στοιχείων|(1)

Eισαγωγή Eτήσιων|Στοιχείων|(1)

Yπολογισµός|Mεικτής Aµοιβής|(1)

Yπολογισµός|Kρατήσεων|(1)

Yπολογισµός|Kαθαρής Aµοιβής|(1)

Yπολογισµός Eτήσιων|Mεικτών Aποδοχών|(1)

Yπολογισµός Eτήσιων|Kρατήσεων|(1)

Yπολογισµός Eτήσιων|Kαθαρών Aποδοχών|(1)

Eκτύπωση Eπιταγών|(N)

Eκτύπωση |Kαταστάσεων|Mισθοδοσίας|(1)

™¯‹Ì· 2.15

Το ∆ΓΟ που

περιγράφει

το σύστηµα

µισθοδοσίας

Το ∆Τ παρέχει τη δυνατότητα προδιαγραφής των ενεργειών που εκτελούνται πάνω

σε µια οντότητα του συστήµατος µε χρονικά ταξινοµηµένο τρόπο, ενώ µπορεί να

συνοδεύεται και από περιγραφικό κείµενο. Για τους λόγους αυτούς αποτελεί ένα

καλύτερο εργαλείο αναπαράστασης του πραγµατικού κόσµου σε σχέση µε τα εργα-

λεία που χρησιµοποιούν µόνο οντότητες και γεγονότα.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 43

Page 45: pli42a

4 4 K E º A § A I O 2 : H ª π – ∆ À ¶ π ∫ ∂ ™ ∆ ∂ à ¡ π ∫ ∂ ™ ¶ ∞ ƒ∞ ° ø ° ∏ ™ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ø ¡

Στο Σχήµα 2.16 φαίνονται τρία ∆Τ που κατασκεύασε ο Βύρων για το τµήµα µισθο-

δοσίας. Το Σχήµα 2.16(α) περιγράφει µια ακολουθία ενεργειών (σε µια κάρτα εργα-

σίας πρώτα γίνεται ανάγνωση, έπειτα επαλήθευση και τέλος επεξεργασία). Το Σχήµα

2.16(β) ορίζει τα ετήσια δεδοµένα ως αποτέλεσµα της επαναλαµβανόµενης επεξερ-

γασίας των µηνιαίων δεδοµένων (το σύµβολο «*» δηλώνει ότι η ενέργεια επανα-

λαµβάνεται).Το Σχήµα 2.16(γ) δείχνει πώς µετά την επαλήθευσή της, µια κάρτα

εργασίας γίνεται αποδεκτή ή απορρίπτεται (το σύµβολο «ο» δηλώνει ότι οι αντί-

στοιχες ενέργειες εκτελούνται εναλλακτικά).

™¯‹Ì· 2.16

Τρία ∆Τ από

το διάγραµµα

της µισθοδοσίας

™¯‹Ì· 2.17

Το πλήρες ∆Τ

της µισθοδοσίας

Kάτρα|Eργασίας

Aνάγνωση Eπαλήθευση

Eτήσια|∆εδοµένα

Eπεξεργασία

Eπαλήθευση|Kάρτας Eργασίας

(α) (β) (γ)

Aπόρριψη|Kάρτας

Aποδοχή|Kάρτας

Eπεξεργασία|Mηνιαίων ∆εδοµένων

*

Tµήµα|Mισθοδοσίας

Eπεξεργασία|Mηνιαίων Aναφορών

Eπεξεργασία|Eτήσιων Aναφορών

Eπεξεργασία Aναφορών

Aνάγνωση|Στοιχείων|Eργασίας

Eπαλήθευση|Στοιχείων|Eργασίας

Eπεξεργασία|Στοιχείων|Eργασίας

Eπεξεργασία|Eτήσιων|

Στοιχείων

Eπεξεργασία|Eτήσιων|

Στοιχείων

Eκτύπωση|Eτήσιας|

Aναφοράς

Eκτύπωση|Mηνιαίας|Aναφοράς

∆ιανοµή|Eτήσιας|

Aναφοράς

∆ιανοµή|Mηνιαίας|Aναφοράς

Aποδοχή|Kάρτας

Aπόρριψη|Kάρτας

Eπεξεργασία|Mηνιαίων ∆εδοµένων

Eτήσια ∆εδοµένα

Eτήσια|Aναφορά

Eπεξεργασία Mισθοδοσίας

Eπεξεργασία|Στοιχείων|Eπιταγής

Eκτύπωση|Eπιταγής

∆ιανοµή|Eπιταγής

EπιταγήKάρτα Eργασίας

Aνάγνωση Kαρτών|Eργασίας

Mισθοδοσία|Yπαλλήλου

*

*

¢Ú·ÛÙËÚÈfiÙËÙ· 2.9

Προσπαθήστε να κατασκευάσετε το ∆Τ για το συνολικό σύστηµα µισθοδοσίας.

Συγκρίνετε την απάντησή σας µε το ∆Τ που κατασκεύασε ο Βύρων (Σχήµα 2.17).

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 44

Page 46: pli42a

2.7 EÈÏÔÁ‹ Ù˘ ηٿÏÏËÏ˘ Ù¯ÓÈ΋˜

4 52 . 7 E ¶ π § √ ° ∏ ∆ ∏ ™ ∫ ∞∆∞ § § ∏ § ∏ ™ ∆ ∂ Ã ¡ π ∫ ∏ ™

ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 2.4

Πριν προχωρήσετε στο επόµενο κεφάλαιο, προσπαθήστε να συµπληρώσετε τα κενά

στις ακόλουθες φράσεις χρησιµοποιώντας τις λέξεις φυσικό, πραγµατικό, λογικό,

δεδοµένα, γεγονότα, τµήµα, δοµή, σύστηµα, µορφή:

Το ∆Ρ∆ αναπαριστά ένα ………....………… λογισµικού σε ………....………… επίπεδο µε βάση

τα ………....………… που παράγονται ή διακινούνται σ’ αυτό. Το Λ∆ περιέχει πληρο-

φορίες σε µορφή κειµένου για τα ………....………… του συστήµατος. Το ∆ΡΣ αναπαρι-

στά διαφορετικά σε ………....………… επίπεδο κάθε ………....………… του συστήµατος. Το

∆ΟΣ περιγράφει διαγραµµατικά τη ………....………… και τη ………....………… των δεδοµέ-

νων που µεταχειρίζεται ένα σύστηµα. Ένα ∆ΓΟ µπορεί να χρησιµοποιηθεί για την

περιγραφή σε ………....………… επίπεδο της ………....………… του συστήµατος ξεκινώντας

από την περιγραφή των ………....………… Το ∆Τ περιγράφει µε χρονικά ταξινοµηµένο

τρόπο τα ………....………… που συµβαίνουν σε τµήµατα του συστήµατος, γι’ αυτό και

θεωρείται ότι περιγράφει το ………....………… σύστηµα.

Συνοψίζοντας, λοιπόν, το ∆Ρ∆ και το ∆ΡΣ περιγράφουν συµπληρωµατικές απόψεις

του συστήµατος λογισµικού, ενώ το Λ∆ και το ∆ΟΣ περιγράφουν τα δεδοµένα. Το

∆Ρ∆ περιγράφει το σύστηµα µε βάση τη ροή, την αποθήκευση και τους µετασχη-

µατισµούς που υφίστανται τα δεδοµένα, ενώ το ∆ΡΣ περιγράφει το σύστηµα µε

βάση τα διαφορετικά τµήµατα που το αποτελούν.

Καθεµία, λοιπόν, από τις τεχνικές παραγωγής ηµι τυπικών προδιαγραφών που παρου-

σιάσθηκαν περιγράφει και µια διαφορετική όψη του συστήµατος. Στην καλύτερη περί-

πτωση, θα πρέπει να χρησιµοποιούνται όλες οι τεχνικές µαζί, ώστε τόσο ο µηχανικός

λογισµικού, όσο και ο πελάτης να είναι σίγουροι ότι έχουν µία σωστή και, το κυριό-

τερο, κοινή εικόνα του συστήµατος λογισµικού που πρόκειται να αναπτυχθεί.

Στην πράξη, όµως, αυτό είναι αδύνατο. Έτσι, οι έµπειροι µηχανικοί λογισµικού προ-

τιµούν να χρησιµοποιούν τις τρεις πρώτες τεχνικές (∆Ρ∆, ∆ΡΣ και ∆ΟΣ) µαζί µε το

λεξικό δεδοµένων και τη δοµηµένη γλώσσα. Οι άλλες δύο τεχνικές είναι σχετικά και-

νούριες και χρησιµοποιούνται περισσότερο σε συστήµατα µε ειδικά χαρακτηριστικά.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 45

Page 47: pli42a

4 6 K E º A § A I O 2 : H ª π – ∆ À ¶ π ∫ ∂ ™ ∆ ∂ à ¡ π ∫ ∂ ™ ¶ ∞ ƒ∞ ° ø ° ∏ ™ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ø ¡

™‡ÓÔ„Ë

Στο δεύτερο κεφάλαιο του τόµου παρουσιάστηκαν αναλυτικά πέντε διαγραµµατικές

τεχνικές περιγραφής των προδιαγραφών ενός συστήµατος λογισµικού (∆ιαγράµµατα

Ροής ∆εδοµένων, ∆ιαγράµµατα Ροής Συστήµατος, ∆ιαγράµµατα Οντοτήτων Συσχε-

τίσεων, ∆ιαγράµµατα Warnier–Orr και ∆ιαγράµµατα Jackson). Οι τεχνικές αυτές,

µαζί µε τη δοµηµένη γλώσσα, παράγουν ηµι τυπικές προδιαγραφές: τα σύµβολα και

η σύνταξη που χρησιµοποιούν είναι αυστηρά καθορισµένα, αλλά δεν είναι δυνατός

ο αναλυτικός έλεγχος της ορθότητας των προδιαγραφών.

BÈ‚ÏÈÔÁÚ·Ê›·

[1] M. Bohl (1978), Tools for structured design. SRA: Chicago.

[2] P. Chen (1976), The entity – relationship model: towards a unified view of data.

ACM Transactions on Database Systems, 1(1), pp9–36.

[3] W.S. Davis (1983), Systems Analysis and Design: a structured approach.

Addison – Wesley

[4] T. DeMarco (1979), Structured Analysis and System Specification. Prentice – Hall.

[5] R. Hull and R. King (1987), Semantic database modeling: survey, applications

and research issues. ACM Computing Surveys, 19(3), pp 201–260

[6] M.A. Jackson (1983), System Development. Prentice – Hall.

[7] H. Korth and A. Silberschatz (1986), Database system concepts. McGraw – Hill.

[8] K. Orr (1981), Structured requirements definition. Ken Orr & Associates.

[9] R.S. Pressman (1994), Software Engineering: a practitioner’s approach. McGraw

– Hill.

[10] J.D. Warnier (1974), Logical construction of programs. Van Nostrand Reinhold.

[11] J.D. Warnier (1981), Logical construction of systems. Van Nostrand Reinhold.

[12] E.N. Yourdon (1990), Modern Structured Analysis. Prentice – Hall.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 46

Page 48: pli42a

T ÈΤ˜ °ÏÒÛÛ˜: B·ÛÈΤ˜ ¤ÓÓÔȘ

™ÎÔfi˜

Το κεφάλαιο αυτό αποτελεί µία εισαγωγή στα χαρακτηριστικά των γλωσσών τυπικών

προδιαγραφών, ενώ παρουσιάζει και στοιχεία από τα µαθηµατικά εργαλεία στα οποία

αυτές βασίζονται.

¶ÚÔÛ‰ÔÎÒÌÂÓ· ·ÔÙÂϤÛÌ·Ù·

Όταν θα έχετε µελετήσει το κεφάλαιο αυτό, θα µπορείτε να:

• αναφέρετε τα τρία στοιχεία και τις δύο ιδιότητες µιας τυπικής γλώσσας,

• αναφέρετε τα οκτώ είδη τυπικών µεθόδων,

• περιγράψετε τη διαφορά των τυπικών µεθόδων που χτίζουν ένα µαθηµατικό µοντέ-

λο του λογισµικού από αυτές που επικεντρώνονται στις ιδιότητες του λογισµικού,

• κατασκευάσετε τον πίνακα αλήθειας µιας πρότασης του προτασιακού λογισµού,

• ορίσετε µια συνάρτηση και µια λογική συνάρτηση,

• γράψετε µια πρόταση του προτασιακού λογισµού χρησιµοποιώντας τον καθολικό

και τον υπαρξιακό τελεστή,

• ορίσετε ένα σύνολο και να γράψετε εκφράσεις µε σύνολα.

ŒÓÓÔȘ ÎÏÂȉȿ

3∫ ∂ º ∞ § ∞ π √

• Τυπικές µέθοδοι που βασίζονται σε

µαθηµατικά µοντέλα

• πρόταση

• προτασιακός τελεστής

• αξιωµατικές µέθοδοι

• αλγεβρικές µέθοδοι

• συνάρτηση / λογική συνάρτηση

• πεδίο ορισµού / τιµών

• σύνολο

• πίνακας αλήθειας

• υπογραφή

• κατηγόρηµα

• καθολικός τελεστής

• υπαρξιακός τελεστής

∂ÈÛ·ÁˆÁÈΤ˜ ·Ú·ÙËÚ‹ÛÂȘ

Όπως έχουµε ήδη αναφέρει στο Kεφάλαιο 1, οι τυπικές µέθοδοι παρέχουν ένα πλαί-

σιο µέσα στο οποίο οι µηχανικοί λογισµικού µπορούν να προδιαγράψουν, να ανα-

πτύξουν και να εγκυροποιήσουν ένα σύστηµα λογισµικού µε ένα συστηµατικό τρόπο.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 47

Page 49: pli42a

4 8 K E º A § A I O 3 : T À ¶ π ∫ ∂ ™ ° § ø ™ ™ ∂ ™ : B ∞ ™ π ∫ ∂ ™ ∂ ¡ ¡ √ π ∂ ™

Για να το επιτύχουν αυτό, οι τυπικές µέθοδοι παρέχουν ένα σύνολο τεχνικών για την

προδιαγραφή του λογισµικού, οι οποίες έχουν ισχυρή µαθηµατική θεµελίωση. Η

έκφραση των προδιαγραφών γίνεται µε µία τυπική γλώσσα προδιαγραφών (ενότητα

3.1), η οποία ουσιαστικά παρέχει στο µηχανικό λογισµικού τον τρόπο να εφαρµόσει

την τυπική µέθοδο.

Μια τυπική γλώσσα προδιαγραφών συµπεριλαµβάνει:

• συµβολισµό: Ένα σύνολο συµβόλων µαζί µε ένα σύνολο κανόνων µε τους οποί-

ους αυτά µπορούν να συνδυαστούν σε ορθές φράσεις (λέγονται συνήθως «κανό-

νες γραµµατικής»). Τα σύµβολα µπορεί να είναι συνηθισµένοι χαρακτήρες, ειδικά

µαθηµατικά ή άλλα σύµβολα, ακόµη και γραφικά στοιχεία, όπως κύκλοι, βέλη κ.λπ.

• σηµασιολογία: Ένα σύνολο αντικειµένων µε ορισµένη σηµασία. Αυτά καθορίζουν

και το πεδίο εφαρµογής της γλώσσας. Τέτοια αντικείµενα µπορεί να είναι π.χ. αφαι-

ρετικοί τύποι δεδοµένων, καταστάσεις συστήµατος και µεταβάσεις καταστάσεων,

συναρτήσεις, συσχετίσεις κ.λπ.

• κανόνες «ικανοποίησης»: Ένα σύνολο αυστηρών κανόνων µε τους οποίους ορίζε-

ται ποια αντικείµενα ικανοποιούν ποιες προδιαγραφές. Κάθε σύνολο τέτοιων κανό-

νων περιγράφει µία άποψη του λογισµικού, όπως είναι η δοµή ή η συµπεριφορά του.

Οι προδιαγραφές δοµής συνήθως αποτελούν περιορισµούς στον τρόπο µε τον οποίο

συντίθενται πολύπλοκα αντικείµενα από απλά. Οι προδιαγραφές συµπεριφοράς περι-

γράφουν περιορισµούς στην παρατηρήσιµη συµπεριφορά του αντικειµένου.

Κάθε προδιαγραφή είναι µία φράση γραµµένη µε κάποια από τα αποδεκτά

σύµβολα, η οποία περιγράφει ένα σύνολο από σηµασιολογικά ορθά αντικεί-

µενα. Τα αντικείµενα αυτά, ικανοποιώντας την προδιαγραφή, προσδίδουν

νόηµα στα σύµβολα µε τα οποία περιγράφονται.

Οι προδιαγραφές που συντάσσουµε σε µία τυπική γλώσσα προδιαγραφών θέλουµε να

έχουν κάποιες ιδιότητες. ∆ύο είναι οι σηµαντικότερες:

• έλλειψη αµφισηµίας: Kάθε προδιαγραφή γραµµένη σε µία τυπική γλώσσα πρέπει να

είναι ακριβής και να επιδέχεται µόνο µία ερµηνεία. Αυτός είναι ο κύριος λόγος για τον

οποίο δεν χρησιµοποιούνται φυσικές γλώσσες ως γλώσσες τυπικών προδιαγραφών.

• συνέπεια: Tο αποτέλεσµα ενός κανόνα είναι πάντα το ίδιο, όταν αυτός εφαρµό-

ζεται στα ίδια αντικείµενα. Συνεπώς, δεν είναι δυνατό να υπάρχουν προδιαγραφές

που οδηγούν σε αλληλοσυγκρουόµενες ερµηνείες.

Αντίθετα, ένα σύνολο προδιαγραφών δε χρειάζεται να είναι πλήρες (στην πράξη, έτσι

κι αλλιώς, κάτι τέτοιο είναι συνήθως αδύνατο).

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 48

Page 50: pli42a

Στην πραγµατικότητα, όταν χρησιµοποιείτε τυπικές προδιαγραφές, πρέπει να

φροντίσετε να διατηρήσετε µία λεπτή ισορροπία ανάµεσα στο να είστε «λακω-

νικοί» και στο να είστε «φλύαροι». Στην πρώτη περίπτωση, οι ατελείς προ-

διαγραφές µπορεί να παρερµηνευθούν από τους προγραµµατιστές. Στη δεύτε-

ρη περίπτωση, οι προγραµµατιστές αισθάνονται «φυλακισµένοι» και δεν παίρ-

νουν καµιά πρωτοβουλία.

Όταν γράφουµε τυπικές προδιαγραφές, είναι βολικό να χρησιµοποιούµε διαδεδοµέ-

νους µαθηµατικούς συµβολισµούς. Αναπόφευκτα λοιπόν, για να κατανοήσετε καλύ-

τερα το υπόλοιπο του τόµου είναι απαραίτητες κάποιες µαθηµατικές γνώσεις, κυρίως

σχετικά µε τη µαθηµατική λογική. Στη συνέχεια του κεφαλαίου θα παρουσιαστούν

συνοπτικά:

• ο προτασιακός λογισµός (propositional calculus) στην ενότητα 3.2, µε τον οποίο

µπορούµε να συνθέσουµε λογικές εκφράσεις (δηλαδή, εκφράσεις καθεµία από τις

οποίες είναι είτε «αληθής» είτε «ψευδής»),

• οι συναρτήσεις και οι λογικές συναρτήσεις (truth – valued functions) στην ενό-

τητα 3.3,

• ο κατηγορηµατικός λογισµός (predicate calculus) στην ενότητα 3.4, µε τον οποίο

µπορούµε να περιγράψουµε ιδιότητες και περιορισµούς χρησιµοποιώντας ποσοτι-

κούς και υπαρξιακούς τελεστές,

• η θεωρία συνόλων (set theory) στην ενότητα 3.5, µε την οποία περιγράφουµε λει-

τουργίες πάνω σε συλλογές (σύνολα) από αντικείµενα

Η παρουσίαση δεν έχει στόχο να σας µεταδώσει το σύνολο των γνώσεων και των

δεξιοτήτων που σχετίζονται µε αυτά τα µαθηµατικά «εργαλεία» (περισσότερα θα βρεί-

τε στις Θ.Ε. «∆ιακριτά Μαθηµατικά» και «Μαθηµατική Λογική»), αλλά περισσότε-

ρο σκοπεύει να λειτουργήσει ως ένα σηµείο αναφοράς όταν θα µελετάτε τις τυπικές

γλώσσες που παρουσιάζονται στη συνέχεια. Αυτός είναι ο λόγος για τον οποίο στο

κεφάλαιο αυτό δεν περιλαµβάνονται καθόλου ασκήσεις.

Βέβαια, το κεφάλαιο είναι σηµαντικό–θεµελιώδες θα έλεγα. Μην «ξεγελαστείτε» και

δείξετε επιπολαιότητα: αν και σας συστήνω ένα «γρήγορο» διάβασµα την πρώτη φορά

που θα το συναντήσετε, είναι πιθανό ότι θα χρειαστεί να επιστρέψετε εδώ αρκετές

φορές από τα κεφάλαια των τυπικών µεθόδων.

4 9∂ π ™ ∞ ° ø ° π ∫ ∂ ™ ¶ ∞ ƒ∞∆ ∏ ƒ ∏ ™ ∂ π ™

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 49

Page 51: pli42a

5 0 K E º A § A I O 3 : T À ¶ π ∫ ∂ ™ ° § ø ™ ™ ∂ ™ : B ∞ ™ π ∫ ∂ ™ ∂ ¡ ¡ √ π ∂ ™

3.1 E›‰Ë Ù˘ÈÎÒÓ ÌÂıfi‰ˆÓ

Οι τυπικές µέθοδοι µπορούν να ταξινοµηθούν µε βάση διάφορα κριτήρια, όπως εάν

χρησιµοποιούν µαθηµατικά µοντέλα ή περιγράφουν ιδιότητες του λογισµικού, εάν

χρησιµοποιούν χαρακτήρες ή γραφικά σύµβολα, εάν παράγουν ή όχι εκτελέσιµες

προδιαγραφές, εάν µπορούν να υποστηριχθούν ή όχι από αυτοµατοποιηµένα εργα-

λεία επαλήθευσης, κ.ά.

Με τη βοήθεια µίας µεθόδου που βασίζεται σε µαθηµατικό µοντέλο, προδιαγράφουµε

άµεσα τη συµπεριφορά του λογισµικού, κατασκευάζοντας ένα µοντέλο του και χρησι-

µοποιώντας µαθηµατικούς όρους, όπως ν – άδες, σύνολα, ακολουθίες, σχέσεις κ.λπ.

Αντίθετα, µία µέθοδος που επικεντρώνεται στις ιδιότητες προδιαγράφει έµµεσα τη

συµπεριφορά του λογισµικού, δηλώνοντας ένα σύνολο ιδιοτήτων (συνήθως µε τη

µορφή αξιωµάτων) τις οποίες το λογισµικό πρέπει να ικανοποιεί. Είναι λοιπόν αναµε-

νόµενο, όταν χρησιµοποιούµε τέτοιες µεθόδους, να προσπαθούµε να δηλώσουµε µόνο

τους απαραίτητους περιορισµούς στη συµπεριφορά του συστήµατος, ώστε να περιο-

ρίσουµε όσο το δυνατό λιγότερο τους πιθανούς τρόπους υλοποίησης του λογισµικού.

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

µηχανές καταστάσεων (state machines), η VDM και ο συµβολισµός Ζ. Εάν πρόκει-

ται για ταυτόχρονο ή κατανεµηµένο σύστηµα, χρησιµοποιούνται τα ∆ίκτυα Petri

(Petri nets), ο Λογισµός των Επικοινωνούντων Συστηµάτων (Calculus of

Communicating Systems), οι Επικοινωνούσες Ακολουθιακές ∆ιεργασίες

(Communicating Sequential Processes), κ.ά.

Οι µέθοδοι που επικεντρώνονται στις ιδιότητες του λογισµικού διακρίνονται σε:

• αξιωµατικές, οι οποίες χρησιµοποιούν προ–συνθήκες και µετα συνθήκες κατη-

γορηµατικής λογικής για να προδιαγράψουν κάθε λειτουργία που εφαρµόζεται

στους αφαιρετικούς τύπους δεδοµένων του λογισµικού (τέτοιες µέθοδοι είναι η

OBJ, η Anna και η Larch),

• αλγεβρικές, στις οποίες τα αξιώµατα που περιγράφουν τις ιδιότητες του λογι-

σµικού εµφανίζονται µόνο µε τη µορφή εξισώσεων. Οι περισσότερο γνωστές

γλώσσες αυτής της κατηγορίας (η οποία είναι η λιγότερο διαδεδοµένη) είναι η

Clear και η ActOne.

Οι ίδιες αυτές µέθοδοι έχουν επεκταθεί, ώστε να είναι κατάλληλες και για κατανεµη-

µένα συστήµατα. Η περισσότερο διαδεδοµένη γλώσσα είναι η LOTOS (Language Of

Temporal Ordering of Specifications–Γλώσσα Χρονικής ∆ιάταξης των Προδιαγραφών).

Οι περισσότερες σύγχρονες µέθοδοι είναι γραφικές, σε αντίθεση µε τις παλαιότερες,

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 50

Page 52: pli42a

οι οποίες προτιµούν τις λεκτικές προδιαγραφές. Φαίνεται ακόµη πως οι µέθοδοι που

επικεντρώνονται στη δηµιουργία µοντέλων χρησιµοποιούν τα γραφικά σύµβολα

περισσότερο από τις άλλες µεθόδους. Η πιο διαδεδοµένη γραφική µέθοδος είναι τα

Petri nets, ενώ η πιο σύγχρονη είναι οι Χάρτες Κατάστασης (State Charts). Στην

κατηγορία αυτή ανήκουν και οι περισσότερες µέθοδοι που περιγράφουν καταστά-

σεις και µεταβάσεις καταστάσεων.

Κάποιες τυπικές µέθοδοι παράγουν εκτελέσιµες προδιαγραφές, δηλαδή προδιαγρα-

φές οι οποίες µπορούν να εκτελεστούν από έναν υπολογιστή. Αυτές οι µέθοδοι έχουν

εξ ορισµού περισσότερο περιορισµένη δυνατότητα έκφρασης από τις µη εκτελέσι-

µες, αφού οι συναρτήσεις που χρησιµοποιούν πρέπει να είναι εκτελέσιµες και το

πλήθος των συµβόλων που επιτρέπονται είναι πεπερασµένο. Από την άλλη, οι εκτε-

λέσιµες προδιαγραφές επιτρέπουν τη γρήγορη πρωτοτυποποίηση του λογισµικού

(αφού οι προδιαγραφές ουσιαστικά αποτελούν ένα πρωτότυπό του) και τη δοκιµή

των προδιαγραφών µέσα από την εκτέλεσή τους. Γλώσσες που παράγουν εκτελέσι-

µες προδιαγραφές είναι οι State Charts, η OBJ, η Prolog, αλλά και οποιαδήποτε

γλώσσα προγραµµατισµού.

Τέλος, για κάποιες από τις γλώσσες έχουν αναπτυχθεί εργαλεία τα οποία µπορούν

να ελέγξουν την ορθότητα των προδιαγραφών. ∆ιαδεδοµένα εργαλεία είναι ο Larch

prover (για τη γλώσσα Larch), o Boyer – Moore theorem prover (για τη γλώσσα

Gypsy), FDM (για τη γλώσσα Ina Jo) κ.ά.

3.2 ¶ÚÔÙ·ÛÈ·Îfi˜ ÏÔÁÈÛÌfi˜

Ο κλασικός δίτιµος προτασιακός λογισµός, περιλαµβάνει προτάσεις (propositions),

καθεµία από τις οποίες µπορεί να θεωρηθεί ως παράσταση, η ερµηνεία της οποίας

της καταχωρίζει µία από τις δύο λογικές τιµές, αληθής (true – T) ή ψευδής (false –

F), αλλά όχι και τις δύο µαζί. ∆εν επιτρέπεται καµία άλλη (τρίτη) τιµή, ούτε είναι

δυνατό η ερµηνεία κάποιας πρότασης να µην έχει τιµή.

Οι προτάσεις συντίθενται χρησιµοποιώντας προτασιακούς (λογικούς) τελεστές για

να συσχετίσουν όρους (terms). Ένας όρος µπορεί να είναι ατοµικός (δηλαδή να απο-

τελείται από σταθερές µόνο) ή σύνθετος (δηλαδή να αποτελείται από σταθερές που

συσχετίζονται µε σχεσιακούς ή προτασιακούς τελεστές). Οι σχεσιακοί, αλγεβρικοί

και λογικοί τελεστές φαίνονται στον Πίνακα 3.1.

5 13 . 2 ¶ ƒ √ ∆∞ ™ π ∞ ∫ √ ™ § √ ° π ™ ª √ ™

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 51

Page 53: pli42a

5 2 K E º A § A I O 3 : T À ¶ π ∫ ∂ ™ ° § ø ™ ™ ∂ ™ : B ∞ ™ π ∫ ∂ ™ ∂ ¡ ¡ √ π ∂ ™

¶›Ó·Î·˜ 3.1

Σχεσιακοί, αλγεβρικοί και λογικοί τελεστές

ΣΧΕΣΙΑΚΟΙ ΤΕΛΕΣΤΕΣ ΑΛΓΕΒΡΙΚΟΙ ΤΕΛΕΣΤΕΣ

Ισότητα = Πρόσθεση +

Ανισότητα (διαφορά) ≠ Αφαίρεση –

Μεγαλύτερος από ή ίσος µε ≥ Πολλαπλασιασµός *

Αυστηρά µεγαλύτερος από > Ακέραια διαίρεση div

Μικρότερος από ή ίσος µε ≤ ΛΟΓΙΚΟΙ ΤΕΛΕΣΤΕΣ

Αυστηρά µικρότερος από < Άρνηση ÿ

Σύζευξη Ÿ

∆ιάζευξη ⁄

Συνεπαγωγή fifi

Ισοδυναµία ¤

Οι πέντε βασικοί τελεστές που περιλαµβάνει ο προτασιακός λογισµός δηλώνουν τις

εξής λογικές πράξεις (πάνω σε δύο προτάσεις P και Q):

• άρνηση (ÿ): Aντιστρέφει την τιµή µιας πρότασης.

• σύζευξη (Ÿ): Eίναι αληθής µόνο όταν και οι δύο προτάσεις είναι αληθείς.

• διάζευξη (⁄): Eίναι αληθής όταν τουλάχιστον µία από τις προτάσεις είναι αληθής.

• συνεπαγωγή (fifi): Eίναι αληθής όταν η πρόταση που βρίσκεται στο αριστερό της

τµήµα (λέγεται και «προϋπόθεση») είναι ψευδής, ή όταν οι προτάσεις που βρί-

σκονται τόσο στο αριστερό όσο και στο δεξιό της τµήµα (λέγεται και «συνέπεια»)

είναι αληθείς.

• ισοδυναµία (¤), ή αλλιώς, διπλή συνεπαγωγή: ∆ηλώνει τη λογική ισότητα και

είναι αληθής όταν και οι δύο προτάσεις έχουν την ίδια τιµή.

Κάθε λογικός τελεστής εφαρµόζεται σε µία πρόταση (µοναδικός) ή σε δύο προτά-

σεις (δυαδικός) του προτασιακού λογισµού και παράγει µία νέα πρόταση. Η λογική

τιµή της νέας πρότασης προκύπτει από την τιµή των αρχικών προτάσεων, µε βάση

τον πίνακα αλήθειας που συνοδεύει κάθε τελεστή. Ο πίνακας αλήθειας των λογικών

τελεστών του Πίνακα 3.1 φαίνεται στον Πίνακα 3.2.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 52

Page 54: pli42a

¶›Ó·Î·˜ 3.2

Οι πίνακες αλήθειας των τελεστών του προτασιακού λογισµού

P Q ÿ P P Ÿ Q P ⁄ Q P fi Q P ¤ Q

T T F T T T T

T F F F T F F

F T T F T T F

F F T F F T T

Επιπρόσθετα, στον προτασιακό λογισµό περιλαµβάνονται και δύο παραστάσεις µε

σταθερές, η true, η οποία έχει πάντα τιµή Τ, και η false, η οποία έχει πάντα τιµή F.

Με τη χρήση των προτασιακών τελεστών, µπορούµε να κατασκευάσουµε σύνθετες

λογικές προτάσεις και να βρούµε τους αντίστοιχους πίνακες αλήθειας. Σε τέτοια περί-

πτωση, χρειάζεται να γνωρίζουµε τις προτεραιότητες µεταξύ των τελεστών ή µπο-

ρούµε να χρησιµοποιούµε παρενθέσεις.

¶·Ú¿‰ÂÈÁÌ· 3.1 ¶ÚÔÙÂÚ·ÈfiÙËÙ˜

Έχουµε συµφωνήσει ότι µεγαλύτερη προτεραιότητα ανάµεσα στους λογικούς τελε-

στές έχει ο ÿ (ΝΟΤ ) και ακολουθούν (µε τη σειρά) οι Ÿ (AND), ⁄ (OR), fi (ΣΥΝΕ-

ΠΑΓΕΤΑΙ), ¤ (ΙΣΟ∆ΥΝΑΜΕΙ). Η τιµή των παραστάσεων του προτασιακού λογι-

σµού υπολογίζεται ξεκινώντας από το αριστερό άκρο και από την παράσταση που

βρίσκεται στο πιο εσωτερικό επίπεδο παρενθέσεων. Στη συνέχεια δίνεται στην αρι-

στερή στήλη ένα σύνολο παραστάσεων και στη δεξιά ο τρόπος υπολογισµού µε

χρήση παρενθέσεων:

P ⁄ Q Ÿ R fi P (P ⁄ (Q Ÿ R)) fi P

P Ÿ Q Ÿ R fi P fi R (((P Ÿ Q) Ÿ R) fi P) fi R

ÿ P ⁄ Q (ÿ P) ⁄ Q

P ⁄ Q Ÿ R ¤ P ⁄ Q Ÿ P ⁄ R (P ⁄ (Q Ÿ R)) ¤ ((P ⁄ (Q Ÿ P)) ⁄ R)

¶·Ú¿‰ÂÈÁÌ· 3.2. YÔÏÔÁÈÛÌfi˜ ÙÈÌ‹˜

Ας θεωρήσουµε την έκφραση P ⁄ Q Ÿ (R fi ÿ P), για την οποία θα κατασκευάσουµε

τον πίνακα αλήθειας. Πριν προχωρήσουµε, θυµηθείτε το προηγούµενο παράδειγµα

για την προτεραιότητα των τελεστών και προσέξτε τη χρήση των παρενθέσεων. Στον

πίνακα αλήθειας που ακολουθεί αποδίδουµε τιµή σε κάθε επί µέρους παράσταση,

πριν συνθέσουµε τη συνολική τιµή:

5 33 . 2 ¶ ƒ √ ∆∞ ™ π ∞ ∫ √ ™ § √ ° π ™ ª √ ™

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 53

Page 55: pli42a

5 4 K E º A § A I O 3 : T À ¶ π ∫ ∂ ™ ° § ø ™ ™ ∂ ™ : B ∞ ™ π ∫ ∂ ™ ∂ ¡ ¡ √ π ∂ ™

P Q R ÿ P R fi ÿ P Q Ÿ (R fi ÿ P) P ⁄ Q Ÿ (R fi ÿ P)

T T T F F F T

T T F F T T T

T F T F F F T

T F F F T F T

F T T T T T T

F T F T T T T

F F T T T F F

F F F T T F F

Μία συναγωγή (sequent) είναι ένα διατεταγµένο ζεύγος αποτελούµενο από ένα

σύνολο λογικών προτάσεων Γ (οι υποθέσεις) και µία µοναδική έκφραση Ρ (το συµπέ-

ρασµα). Μπορούµε να θεωρήσουµε ότι η συναγωγή αποτελεί έναν ισχυρισµό για τις

λογικές προτάσεις από τις οποίες απαρτίζεται: ισχυρίζεται ότι το συµπέρασµα προ-

κύπτει από τις υποθέσεις. Ο συµβολισµός που θα χρησιµοποιήσουµε για να αναπα-

ραστήσουµε συναγωγές είναι Γ ¢ Ρ.

Μία συναγωγή Γ ¢ Ρ ισχύει (δηλαδή, αποτελεί έγκυρο ισχυρισµό) αν και µόνο αν

δεν υπάρχει περίπτωση κάθε µέλος του Γ να έχει τιµή Τ ενώ η Ρ να έχει τιµή F. Με

άλλα λόγια, χρειάζεται να βρούµε τη λογική τιµή του συµπεράσµατος µόνο για εκεί-

νες τις γραµµές του πίνακα αλήθειας, όπου όλες οι υποθέσεις έχουν τιµή Τ.

Όταν η συναγωγή Γ ¢ Ρ ισχύει, λέµε ότι η Ρ είναι συνέπεια του Γ και γράφουµε

Γ ¢ Ρ (όταν Γ = ∆, γράφουµε ¢ Ρ). Η έκφραση Γ ¢ Ρ είναι µία εξίσωση της οποίας

η τιµή µπορεί να προκύψει µε τη χρήση ενός πίνακα αλήθειας.

¶·Ú¿‰ÂÈÁÌ· 3.3

Έστω η συναγωγή Ρ, Ρ fi Q ¢ Q. Για να εξετάσουµε την εγκυρότητα του ισχυρι-

σµού αυτής της συναγωγής κατασκευάζουµε τον πίνακα αλήθειας:

P Q P fi Q Ρ, Ρ fi Q ¢ Q

T T T T

T F F F

F T T T

F F T F

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 54

Page 56: pli42a

Για να διαπιστώσουµε ότι αυτή η συναγωγή ισχύει, αρκεί να εξετάσουµε µόνο την

πρώτη γραµµή, όπου όλες οι υποθέσεις έχουν τιµή T. Στην περίπτωσή µας, το συµπέ-

ρασµα Q στην πρώτη γραµµή έχει τιµή T, άρα η συναγωγή ισχύει.

H ταυτολογία είναι µία παράσταση η ερµηνεία της οποίας της καταχωρίζει πάντα

την τιµή T, ενώ η αντίφαση είναι µια παράσταση, η ερµηνεία της οποίας της κατα-

χωρίζει πάντα την τιµή F.

¶·Ú¿‰ÂÈÁÌ· 3.4

∆ύο πολύ απλές και γνωστές ταυτολογίες είναι οι Ρ ⁄ ¬ P και P fi Ρ. Για να δεί-

ξουµε ότι αυτές οι εκφράσεις είναι πραγµατικά ταυτολογίες, κατασκευάζουµε τους

δύο πίνακες αλήθειας.

P Ρ ⁄ ¬ P P P fi Ρ

T T T T

F T F T

Υπάρχει στενή σύνδεση ανάµεσα στην εγκυρότητα ενός ισχυρισµού και στην ιδιό-

τητα της ταυτολογίας. Ισχύει ότι ∆ fi Q αν και µόνο αν η παράσταση Q είναι ταυ-

τολογία. Ακόµη, ισχύει P fi Q αν και µόνο αν Ρ fi Q είναι ταυτολογία.

∆ύο εκφράσεις Ρ και Q είναι ισοδύναµες αν και µόνο αν και οι δύο συναγωγές

P ¢ Q και Q ¢ P ισχύουν. Σηµειώστε ότι οι Ρ και Q είναι σηµασιολογικά ισοδύνα-

µες αν και µόνο αν Ρ ¤ Q είναι ταυτολογία. Ο συµβολισµός που χρησιµοποιούµε

είναι Ρ £ Q.

¶·Ú¿‰ÂÈÁÌ· 3.5

Για να δείξουµε ότι οι παραστάσεις Ρ fi Q και ¬ P ⁄ Q είναι ισοδύναµες, πρέπει να δεί-

ξουµε ότι και οι δύο συναγωγές Ρ fi Q ¢ ¬ P ⁄ Q και Ρ fi Q ¢ ¬ P ⁄ Q ¢ Ρ fi Qισχύουν. Για το σκοπό αυτό κατασκευάζουµε δύο πίνακες αλήθειας, από τους οποίους

συµπεραίνουµε ότι πραγµατικά οι δύο συναγωγές αποτελούν έγκυρους ισχυρισµούς.

P Q Ρ fi Q P fi Q ¢ ¬ P ⁄ Q

T T T T

T F F F

F T T T

F F T T

5 53 . 2 ¶ ƒ √ ∆∞ ™ π ∞ ∫ √ ™ § √ ° π ™ ª √ ™

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 55

Page 57: pli42a

5 6 K E º A § A I O 3 : T À ¶ π ∫ ∂ ™ ° § ø ™ ™ ∂ ™ : B ∞ ™ π ∫ ∂ ™ ∂ ¡ ¡ √ π ∂ ™

P Q ¬ P ⁄ Q P fi Q ¢ ¬ P ⁄ Q ¢ P fi Q

T T T T

T F F F

F T T T

F F T T

3.3 §ÔÁÈΤ˜ Û˘Ó·ÚÙ‹ÛÂȘ

Μια συνάρτηση (function) είναι ουσιαστικά µία αντιστοίχηση ανάµεσα σε δύο σύνο-

λα τιµών. Από αυτά, το πεδίο ορισµού (domain) περιλαµβάνει τις τιµές στις οποίες

έχει νόηµα (έχει οριστεί) η συνάρτηση. Το πεδίο τιµών (range) περιλαµβάνει όλες

τις τιµές που προκύπτουν από τη συνάρτηση σε κάθε τιµή του πεδίου ορισµού της.

Γράφουµε την υπογραφή (signature) µιας συνάρτησης f, η οποία έχει πεδίο ορισµού

Α και πεδίο τιµών Β, ως εξής:

f: A Æ B

Όταν το πεδίο τιµών µιας συνάρτησης είναι το σύνολο των λογικών τιµών B = T,

F, τότε αυτή λέγεται «λογική συνάρτηση» (truth – valued function).

¶·Ú¿‰ÂÈÁÌ· 3.6

Θεωρούµε τη συνάρτηση square, η οποία επιστρέφει το τετράγωνο ενός ακέραιου

αριθµού (το οποίο είναι επίσης ακέραιος). Η υπογραφή της είναι:

square: Ÿ Æ Ÿ

Ο ορισµός της µπορεί να γίνει ως εξής:

square(x) D x * x

Το x είναι το όρισµα (argument), ή αλλιώς παράµετρος της συνάρτησης, και παίρ-

νει τιµές από το πεδίο ορισµού Ÿ. Χρησιµοποιούµε το ειδικό σύµβολο «D» κατά τον

ορισµό συναρτήσεων, για να τον διαχωρίσουµε από την ισότητα δύο συναρτήσεων.

Μία λογική συνάρτηση είναι η is – odd: Ÿ Æ B, η οποία επιστρέφει Τ όταν κάποι-

ος αριθµός είναι περιττός, αλλιώς επιστρέφει F. Η συνάρτηση αυτή ορίζεται, λοιπόν,

ως εξής:

is – odd(x) D if x mod 2 = 0 then F else T,

και χρησιµοποιείται ως εξής:

is – odd(7) = T,

is – odd(4) = F, κλπ.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 56

Page 58: pli42a

3.4 K·ÙËÁÔÚËÌ·ÙÈÎfi˜ ÏÔÁÈÛÌfi˜

Ως κατηγόρηµα (predicate) θεωρούµε µία πρόταση στους όρους της οποίας επι-

τρέπουµε να χρησιµοποιούνται µεταβλητές. Ως µεταβλητή θεωρείται µια ποσότητα

η οποία αναπαρίσταται µε µια ακολουθία χαρακτήρων και παίρνει διαφορετικές

τιµές ανάλογα µε τη χρήση της έκφρασης στην οποία συµµετέχει. Τότε, η µαθηµα-

τική λογική που χρησιµοποιούµε για να διαπιστώνουµε την αλήθεια ή το ψεύδος των

κατηγορηµάτων καλείται «κατηγορηµατικός λογισµός» και αποτελεί ουσιαστικά µία

επέκταση του προτασιακού λογισµού.

Με τον κατηγορηµατικό λογισµό µπορούµε να δώσουµε αφαιρετικές περιγραφές

των ιδιοτήτων των αντικειµένων που περιέχονται σε προδιαγραφές. Για το σκοπό

αυτό χρησιµοποιούµε δύο ποσοτικούς τελεστές (quantifiers):

• τον καθολικό τελεστή «για κάθε» ο οποίος περιγράφει ιδιότητες που έχουν όλα

τα αντικείµενα ενός συνόλου και παριστάνεται µε ", και

• τον υπαρξιακό τελεστή «υπάρχει» ο οποίος περιγράφει ιδιότητες που έχουν

κάποια από τα αντικείµενα ενός συνόλου και παριστάνεται µε $.

¶·Ú¿‰ÂÈÁÌ· 3.7. K·ıÔÏÈÎfi˜ ÙÂÏÂÛÙ‹˜

Για να περιγράψουµε τη φράση «όλα τα νησιά του Αιγαίου, των οποίων ο πληθυ-

σµός είναι µεγαλύτερος των 50.000 κατοίκων, διαθέτουν αεροδρόµιο», πρέπει να

γράψουµε την εξής πρόταση του κατηγορηµατικού λογισµού:

" x: Νησί – Αιγαίου | πληθυσµός(x) > 50.000 ∑ αεροδρόµιο(x)

• Στην πρόταση αυτή: µετά τον καθολικό τελεστή " ακολουθεί το τµήµα δηλώσε-

ων, στο οποίο δηλώνεται η µεταβλητή x. Μετά το σύµβολο | ακολουθεί το τµήµα

εκφράσεων, όπου γράφονται οι διάφορες ιδιότητες και περιορισµοί της x. Το αρι-

στερό µέρος του τµήµατος εκφράσεων περιορίζει τα αντικείµενα στα οποία ισχύ-

ουν οι ιδιότητες που ακολουθούν µετά το σύµβολο ∑.

• H x είναι µεταβλητή τύπου «Νησί – Αιγαίου» (δηλαδή, παίρνει τιµές από το σύνο-

λο Νησί – Αιγαίου). Ο τύπος αυτός υποτίθεται ότι έχει ήδη δηλωθεί (π.χ. σαν ένα

σύνολο) και είναι γνωστός,

• Eπειδή η x δηλώνεται στο τµήµα δηλώσεων, θεωρείται ως «δεσµευµένη µετα-

βλητή». Εάν στο τµήµα εκφράσεων εµφανιστεί κάποια µεταβλητή, η οποία δεν

έχει δηλωθεί στο τµήµα δηλώσεων, αυτή καλείται «ελεύθερη µεταβλητή».

• H συνάρτηση πληθυσµός (x) περιγράφει τον πληθυσµό του x, ενώ η λογική συνάρ-

τηση αεροδρόµιο(x) έχει τιµή Τ, εάν το x διαθέτει αεροδρόµιο, αλλιώς έχει τιµή F.

5 73 . 4 K ∞∆ ∏ ° √ ƒ ∏ ª ∞∆ π ∫ √ ™ § √ ° π ™ ª √ ™

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 57

Page 59: pli42a

5 8 K E º A § A I O 3 : T À ¶ π ∫ ∂ ™ ° § ø ™ ™ ∂ ™ : B ∞ ™ π ∫ ∂ ™ ∂ ¡ ¡ √ π ∂ ™

Έτσι η έκφραση αεροδρόµιο(x) ισοδυναµεί µε αεροδρόµιο(x)=T, ενώ η ισοδύναµη

έκφραση για την αεροδρόµιο(x)=F είναι η ÿÿ αεροδρόµιο(x).

¶·Ú¿‰ÂÈÁÌ· 3.8. Y·ÚÍÈ·Îfi˜ ÙÂÏÂÛÙ‹˜

Για να περιγράψουµε τώρα τη φράση «υπάρχουν κάποια νησιά του Αιγαίου των

οποίων ο πληθυσµός είναι µεγαλύτερος των 30.000 και µικρότερος των 50.000

κατοίκων, τα οποία διαθέτουν αεροδρόµιο», πρέπει να γράψουµε την εξής πρόταση

του κατηγορηµατικού λογισµού:

$ x: Νησί – Αιγαίου | 50.000 > πληθυσµός(x) > 30.000 ∑ αεροδρόµιο(x).

Εάν υπάρχει µόνο ένα τέτοιο νησί, γράφουµε:

$1 x: Νησί – Αιγαίου | 50.000 > πληθυσµός(x) > 30.000 ∑ αεροδρόµιο(x).

¶·Ú¿‰ÂÈÁÌ· 3.9

Μπορούµε να χρησιµοποιήσουµε φράσεις του κατηγορηµατικού λογισµού για να

περιγράψουµε ιδιότητες που ισχύουν για όλα τα µέλη ενός συνόλου, χωρίς περιορι-

σµό στο τµήµα εξισώσεων. Έτσι, η φράση

" x: Νησί – Αιγαίου ∑ λιµάνι(x),

δηλώνει ότι όλα τα νησιά του Αιγαίου έχουν λιµάνι.

Ως δήλωση θεωρείται κάθε έκφραση στο τµήµα δηλώσεων όπου εµφανίζονται για

πρώτη φορά οι µεταβλητές µε τους αντίστοιχους τύπους.

Εάν D είναι δήλωση, και P και Q είναι εξισώσεις, υπάρχουν οι εξής νόµοι που συσχε-

τίζουν τη χρήση των δύο τελεστών µε και χωρίς περιορισµούς στο τµήµα εξισώσεων:

(" D | P ∑ Q) ¤ (" D ∑ Pfi Q)

($ D | P ∑ Q) ¤ ($ D ∑ P Ÿ Q)

($1 D | P ∑ Q) ¤ ($1 D ∑ P Ÿ Q)

3.5 £ÂˆÚ›· Û˘ÓfiψÓ

Ως σύνολο (set) ορίζεται µία µη διατεταγµένη συλλογή αντικειµένων, τα οποία ικα-

νοποιούν κάποια ιδιότητα. Υπάρχουν δύο τρόποι µε τους οποίους µπορούµε να περι-

γράψουµε ένα σύνολο:

• µε απαρίθµηση των µελών του ή

• µε περιγραφή των ιδιοτήτων των µελών του.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 58

Page 60: pli42a

¶·Ú¿‰ÂÈÁÌ· 3.10. A·Ú›ıÌËÛË

Το σύνολο των µηνών του έτους που έχουν 30 ηµέρες (θα τους αποκαλούµε «µικρούς

µήνες») µπορεί να γραφεί ως:

Μικρός – µήνας = Απρίλιος, Ιούνιος, Σεπτέµβριος, Νοέµβριος.

Εναλλακτικά, ένα µέλος του συνόλου περιγράφεται από τον ακόλουθο ορισµό:

Μικρός – µήνας::= Απρίλιος | Ιούνιος | Σεπτέµβριος | Νοέµβριος

Ο ορισµός έχει δύο τµήµατα (τα οποία διαχωρίζονται από το σύµβολο «::=»): το αρι-

στερό, όπου ορίζεται το όνοµα του συνόλου, και το δεξιό, όπου καταχωρίζεται κάθε

µέλος του (το σύµβολο «|» σηµαίνει ότι τα τµήµατα του δεξιού µέρους του ορισµού

είναι αµοιβαία αποκλειόµενα).

¶·Ú¿‰ÂÈÁÌ· 3.11. ¶ÂÚÈÁÚ·Ê‹

Το ίδιο σύνολο µπορεί να περιγραφεί ως εξής:

Μικρός – µήνας == x: µήνας | ηµέρες(x) = 30 ∑ x.

Εάν η µεταβλητή του τµήµατος δηλώσεων είναι ίδια µε τον όρο µετά το σύµβολο ∑,

ο όρος αυτός µπορεί να παραληφθεί.

Υπάρχουν δύο είδη συνόλων τα οποία µεταχειριζόµαστε µε ιδιαίτερο τρόπο:

• το κενό σύνολο (συµβολίζεται µε ∆): πρόκειται για το σύνολο που δεν περιέχει

κανένα µέλος,

• το δυναµοσύνολο ενός συνόλου Χ (συµβολίζεται µε √ Χ): πρόκειται για το σύνο-

λο όλων των υποσυνόλων του Χ.

Όταν έχουµε ορίσει ένα σύνολο Χ, µπορούµε να ελέγξουµε εάν κάποιο αντικείµενο

v είναι µέλος του (δηλαδή να ελέγξουµε εάν η έκφραση v Œ Χ έχει τιµή Τ). Αν το Χ

έχει οριστεί µε απαρίθµηση, αρκεί να εξετάσουµε ένα προς ένα τα µέλη του. Αν το

Χ έχει οριστεί µε περιγραφή, πρέπει να δείξουµε ότι ισχύει (η µεταβλητή v δεν δηλώ-

νεται στο D):

v Œ D | √ ∑ t ¤ $ D | √ ∑ t = v

Επεκτείνοντας την έννοια του µέλους, ορίζουµε την έννοια του υποσυνόλου: ένα

σύνολο Υ είναι υποσύνολο ενός συνόλου Χ, αν και µόνο αν κάθε µέλος του Υ είναι

και µέλος του Χ.

Ακόµη, ορίζουµε ένα σύνολο βασικών πράξεων πάνω στα σύνολα, από τις οποίες

µπορούν να οριστούν περισσότερο σύνθετες πράξεις:

5 93 . 5 £ ∂ ø ƒ π ∞ ™ À ¡ √ § ø ¡

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 59

Page 61: pli42a

6 0 K E º A § A I O 3 : T À ¶ π ∫ ∂ ™ ° § ø ™ ™ ∂ ™ : B ∞ ™ π ∫ ∂ ™ ∂ ¡ ¡ √ π ∂ ™

ένωση Ζ = Χ » Υ Το Ζ περιέχει όλα τα µέλη του Χ και όλα τα µέλη του Υ:

x Œ Z ¤ (x Œ X ⁄ x Œ Y)

τοµή Ζ = Χ « Υ Το Ζ περιέχει όλα τα µέλη του Χ τα οποία ανήκουν επί-

σης στο Υ:

x Œ Z ¤ (x Œ X Ÿ x Œ Y)

διαφορά Ζ = Χ \ Υ Το Ζ περιέχει όλα τα µέλη του Χ τα οποία δεν ανήκουν

στο Υ:

x Œ Z ¤ (x Œ X Ÿ x œ Y)

συµµετρική Ζ = Χ — Υ Το Ζ περιέχει όλα τα µέλη του Χ τα οποία δεν ανήκουν

διαφορά στο Υ και όλα τα µέλη του Υ τα οποία δεν ανήκουν

στο Χ:

x Œ Z ¤ (x Œ X » Y Ÿ x œ X « Y)

Ο ορισµός της ένωσης και της τοµής συνόλων µπορεί να γενικευθεί και σε περισ-

σότερα από δύο σύνολα, ενώ ορίζεται και ο πληθικός αριθµός (cardinality):

• »S, P, Q = S » P » Q

• «S, P, Q = S « P « Q

• card S είναι το πλήθος των στοιχείων του S (το S πρέπει να είναι πεπερασµένο)

Eάν Α και Β είναι σύνολα, τότε Α ¥ Β είναι το Καρτεσιανό γινόµενό τους. Πρόκει-

ται για ένα σύνολο το οποίο περιλαµβάνει όλα τα διατεταγµένα ζεύγη των οποίων

το πρώτο στοιχείο ανήκει στο Α και το δεύτερο στο Β. Κάθε διατεταγµένο ζεύγος (a,

b) είναι ένα δοµηµένο αντικείµενο, στο οποίο το τµήµα a προηγείται του τµήµατος

b. Για το λόγο αυτό υιοθετούµε τον εναλλακτικό συµβολισµό a Æ b.

Τέλος, ένας τρόπος για να ορίζουµε νέους τύπους συνόλων είναι µε τη χρήση του

τελεστή «– set», ο οποίος στην πραγµατικότητα (όταν το Χ είναι ένα πεπερασµένο

σύνολο) επιστρέφει ένα υποσύνολο του √ Χ.

¶·Ú¿‰ÂÈÁÌ· 3.12

Αν B είναι το σύνολο των λογικών τιµών, µπορούµε να ορίσουµε το:

B – set = , T, F, T, F, T, T, F.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 60

Page 62: pli42a

™‡ÓÔ„Ë

Στο κεφάλαιο αυτό παρουσιάστηκε συνοπτικά ένα σύνολο µαθηµατικών γνώσεων, τις

οποίες θα χρειαστείτε για να κατανοήσετε τις τυπικές γλώσσες που παρουσιάζονται στη

συνέχεια του τόµου. Όπως θα δούµε στη συνέχεια, όλες αυτές οι γλώσσες χρησιµοποι-

ούν τα µαθηµατικά εργαλεία που παρουσιάστηκαν σε αυτή την ενότητα, δηλαδή:

• τον προτασιακό λογισµό,

• τον κατηγορηµατικό λογισµό,

• τις συναρτήσεις και τις λογικές συναρτήσεις και

• τη θεωρία συνόλων

Όσο καλύτερα είστε εξοικειωµένοι µε το περιεχόµενο αυτού του κεφαλαίου, τόσο πιο

εύκολα θα κατανοήσετε τα επόµενα κεφάλαια. Βέβαια, σε κάθε περίπτωση µπορείτε

να επιστρέψετε και να επαναλάβετε όποιες ενότητες χρειαστεί.

6 1™ Y N O æ H

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 61

Page 63: pli42a

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 62

Page 64: pli42a

T ÈΤ˜ ̤ıÔ‰ÔÈ Ô˘ ÂÚÈÁÚ¿ÊÔ˘Ó È‰ÈfiÙËÙ˜ ÙÔ˘ ÏÔÁÈÛÌÈÎÔ‡

™ÎÔfi˜

Ο σκοπός του κεφαλαίου είναι να σας παρουσιάσει κάποιες από τις τυπικές µεθόδους

προδιαγραφών που επικεντρώνονται στην περιγραφή των ιδιοτήτων του λογισµικού.

¶ÚÔÛ‰ÔÎÒÌÂÓ· ·ÔÙÂϤÛÌ·Ù·

Όταν θα έχετε µελετήσει το κεφάλαιο αυτό, θα µπορείτε να:

• αναφέρετε και χρησιµοποιήσετε τα έξι βήµατα αλγεβρικής προδιαγραφής λογισµικού,

• γράψετε την αλγεβρική προδιαγραφή ενός αφαιρετικού τύπου δεδοµένων,

• γράψετε προδιαγραφές λογισµικού χρησιµοποιώντας εξισώσεις, αναδροµικές σχέ-

σεις και κανονικές εκφράσεις.

ŒÓÓÔȘ ÎÏÂȉȿ

4∫ ∂ º ∞ § ∞ π √

• αξιωµατική προδιαγραφή

• προ συνθήκες,

• µετα συνθήκες

• αλγεβρική προδιαγραφή

• κανονική έκφραση

∂ÈÛ·ÁˆÁÈΤ˜ ·Ú·ÙËÚ‹ÛÂȘ

Η περιγραφή των ιδιοτήτων του λογισµικού µπορεί να γίνει µε δύο τυπικούς τρόπους:

• µε τη χρήση αλγεβρικών εξισώσεων, οπότε πρόκειται για αλγεβρική προδιαγραφή, ή

• µε τη χρήση συνθηκών, οι οποίες ισχύουν πριν και µετά την εκτέλεση του λογι-

σµικού, οπότε πρόκειται για αξιωµατική προδιαγραφή.

Η εφαρµογή των αλγεβρικών προδιαγραφών (algebraic specification) οδηγεί στην

περιγραφή ενός αντικειµένου ή τµήµατος λογισµικού µε βάση τις σχέσεις ανάµεσα

στις λειτουργίες που είναι δυνατό να εφαρµοστούν πάνω στο αντικείµενο. Η µέθοδος

αυτή είναι περισσότερο κατανοητή, όταν εφαρµόζεται σε αντικείµενα που περιγρά-

φουν αφαιρετικούς τύπους δεδοµένων (abstract data types) κάποιας γλώσσας προ-

γραµµατισµού, καθώς αυτό ήταν και το πρώτο πεδίο εφαρµογής της (Guttag[77]).

Στη συνέχεια του κεφαλαίου θα έχετε µια πρώτη γνωριµία µε τη µέθοδο της αξιω-

µατικής προδιαγραφής λογισµικού (ενότητα 4.1), ενώ θα παρουσιαστεί και µία απλή

και γενική µέθοδος για την προδιαγραφή αφαιρετικών τύπων δεδοµένων (ενότητα

4.2). Στην τελευταία ενότητα (ενότητα 4.3) θα παρουσιαστούν σύντοµα τρεις συµβο-

λισµοί αλγεβρικών τυπικών προδιαγραφών.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 63

Page 65: pli42a

6 4 K E º A § A I O 4 : T À ¶ π ∫ ∂ ™ ª ∂ £ √ ¢ √ π ¶ √ À ¶ ∂ ƒ π ° ƒ∞ º √ À ¡ π ¢ π √ ∆ ∏ ∆ ∂ ™ ∆ √ À § √ ° π ™ ª π ∫ √ À

4.1 AÍȈ̷ÙÈ΋ ÚԉȷÁÚ·Ê‹

Η αξιωµατική προδιαγραφή (axiomatic specification) ενός συστήµατος λογισµι-

κού θεωρεί το σύστηµα ως ένα σύνολο λειτουργιών χωρίς εσωτερική κατάσταση και

προδιαγράφει κάθε λειτουργία (συνάρτηση) µε ένα σύνολο συνθηκών (περιορισµών),

οι οποίες πρέπει να ισχύουν πριν (προ συνθήκες – pre – conditions) ή µετά (µετα –

συνθήκες – post – conditions) την εκτέλεσή της.

Οι συνθήκες αυτές είναι λογικές (boolean) προτάσεις, των οποίων οι µεταβλητές είναι

στην πραγµατικότητα οι παράµετροι της υπό προδιαγραφή λειτουργίας. Όπως ήδη γνω-

ρίζουµε, κάθε τέτοια έκφραση µπορεί να πάρει τιµή «αληθής» (T) ή «ψευδής» (F).

Η ανάπτυξη της αξιωµατικής περιγραφής µιας συνάρτησης περιλαµβάνει τα ακό-

λουθα βήµατα:

• Προσδιορισµό, για κάθε παράµετρο εισόδου στη συνάρτηση, του πεδίου τιµών

για το οποίο η συνάρτηση συµπεριφέρεται ορθά.

• Προδιαγραφή µε τη µορφή κατηγορήµατος, των περιορισµών που ισχύουν σε

κάθε παράµετρο εισόδου.

• Προδιαγραφή µε τη µορφή κατηγορήµατος, των συνθηκών που πρέπει να ισχύ-

ουν στην έξοδο της συνάρτησης, όταν αυτή έχει εκτελεστεί ορθά.

• Προδιαγραφή των όποιων τροποποιήσεων κάνει η συνάρτηση στις παραµέτρους

εισόδου, όταν το πέρασµά τους γίνεται µε αναφορά.

• Προδιαγραφή µε τη µορφή κατηγορήµατος, των συνθηκών που θα ισχύουν στην

έξοδο της συνάρτησης, όταν αυτή έχει δεν εκτελεστεί ορθά.

• Σύνθεση, µε βάση τις προδιαγραφές αυτές, των προ – και µετα – συνθηκών για

τη συνάρτηση.

¶·Ú¿‰ÂÈÁÌ· 4.1

Θεωρήστε µία συνάρτηση ΑΝΑΖΗΤΗΣΗ, η οποία δέχεται στην είσοδο ένα πίνακα

ακεραίων Ρ (για να απλοποιήσουµε το πρόβληµα, ας θεωρήσουµε ότι όλα τα στοι-

χεία του πίνακα είναι διαφορετικά µεταξύ τους) και ένα στοιχείο ΚΕΥ και επιστρέ-

φει τη θέση POS του στοιχείου στον πίνακα, χωρίς να τροποποιεί τα περιεχόµενα

του πίνακα (δηλαδή, το πέρασµα των παραµέτρων γίνεται µε τιµή). Η δήλωση της

συνάρτησης γίνεται ως εξής:

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 64

Page 66: pli42a

ΣΥΝΑΡΤΗΣΗ ΑΝΑΖΗΤΗΣΗ(P, ΚΕΥ, POS)

∆ΙΕΠΑΦΗ

ΕΙΣΟ∆ΟΣ

ƒ: ARRAY[FIRST.. LAST] OF INTEGER

KEY: INTEGER

ΕΞΟ∆ΟΣ

POS: INTEGER

Ο υπολογισµός των κατηγορηµάτων γίνεται ως εξής:

1. Η συνάρτηση επιστρέφει ορθή έξοδο όταν η ΚΕΥ είναι ίση µε κάποιο από τα

στοιχεία του Ρ. Συνεπώς πρέπει να ισχύει

$ I Œ Ÿ Ÿ FIRST ≤ I ≤ LAST: P[I] = KEY

2. Η συνάρτηση επιστρέφει την τιµή του δείκτη της πρώτης θέσης του πίνακα στην

οποία βρέθηκε τιµή ίση µε ΚΕΥ. Συνεπώς, πρέπει να ισχύει

ƒ’[∞¡∞∑∏∆∏™∏(ƒ, ∫∂À, POS)] = ∫∂À

όπου Ρ είναι ο πίνακας εισόδου και Ρ’ ο πίνακας µετά την εκτέλεση της συνάρτησης.

3. Η συνάρτηση βρίσκει τη θέση του στοιχείου χωρίς να τροποποιεί τον εισερχό-

µενο πίνακα. Συνεπώς

ƒ = ƒ’

4. Σε περίπτωση κατά την οποία το στοιχείο ΚΕΥ δεν βρίσκεται µέσα στον πίνακα

Ρ (περίπτωση λανθασµένης εισόδου σύµφωνα µε τον ορισµό της συνάρτησης),

η συνάρτηση επιστρέφει στη µεταβλητή POS µία τιµή µεγαλύτερη από το άνω

όριο του δείκτη του πίνακα:

¬ ($ I Œ Ÿ Ÿ FIRST ≤ I ≤ LAST: P[I] = KEY) fi POS = LAST + 1

Με τις παραπάνω προδιαγραφές µπορούµε τώρα να συνθέσουµε τη συνολική αξιω-

µατική προδιαγραφή της συνάρτησης ΑΝΑΖΗΤΗΣΗ:

6 54 . 1 A • π ø ª ∞∆ π ∫ ∏ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ∏

ΣΥΝΑΡΤΗΣΗ ΑΝΑΖΗΤΗΣΗ(P, ΚΕΥ, POS)

∆ΙΕΠΑΦΗ

ΕΙΣΟ∆ΟΣ

ƒ: ARRAY[FIRST.. LAST] OF INTEGER

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 65

Page 67: pli42a

6 6 K E º A § A I O 4 : T À ¶ π ∫ ∂ ™ ª ∂ £ √ ¢ √ π ¶ √ À ¶ ∂ ƒ π ° ƒ∞ º √ À ¡ π ¢ π √ ∆ ∏ ∆ ∂ ™ ∆ √ À § √ ° π ™ ª π ∫ √ À

Στην προηγούµενη προδιαγραφή µπορούµε να κάνουµε δύο επιπλέον παρατηρήσεις:

• Eάν θεωρήσουµε ότι ο πίνακας εισόδου είναι ταξινοµηµένος (οπότε µπορούµε

π.χ. να εφαρµόσουµε µια συνάρτηση δυαδικής αναζήτησης), τότε πρέπει στις προ-

διαγραφές εισόδου να προσθέσουµε και το κατηγόρηµα

" I, J Œ Ÿ Ÿ FIRST ≤ I, J ≤ LAST: I < J fi P[I] < P[J]

• Για να αποφύγουµε την απότοµη αύξηση της πολυπλοκότητας των προδιαγρα-

φών, µπορούµε να «παραµετροποιήσουµε» κάποιες από αυτές. Για παράδειγµα,

η προηγούµενη προδιαγραφή µπορεί να γραφεί ως:

∆∞•π¡√ª∏ª∂¡√™(ƒ: ARRAY [FIRST.. LAST] OF INTEGER) = " I,

J Œ Ÿ Ÿ FIRST ≤ I, J ≤ LAST: I < J fi P[I] < P[J]

οπότε µπορεί να εφαρµοστεί για οποιοδήποτε πίνακα Ρ χρησιµοποιώντας µόνο το

όνοµά της (ΤΑΞΙΝΟΜΗΜΕΝΟΣ), χωρίς να ξαναγράψουµε τον ορισµό της.

KEY: INTEGER

ΕΞΟ∆ΟΣ

POS: INTEGER

ΠΡΙΝ

$ I Œ Ÿ Ÿ FIRST ≤ I ≤ LAST: P[I] = KEY

ΜΕΤΑ

ƒ’[∞¡∞∑∏∆∏™∏(ƒ, ∫∂À, POS)] = ∫∂À Ÿ

ƒ = ƒ’

ΣΦΑΛΜΑ

¬ (($ I Œ Ÿ Ÿ FIRST ≤ I ≤ LAST: P[I] = KEY) fi POS = LAST + 1

Συνοψίζοντας, η αναλυτική εξέταση του απλού προβλήµατος της προδιαγραφής µιας

συνάρτησης αναζήτησης µας αποκάλυψε ότι για τη σύνθεση µιας τυπικής προδιαγρα-

φής απαιτείται ένα σύνολο βηµάτων, στα οποία περιλαµβάνεται ο προσδιορισµός των

συνθηκών κάτω από τις οποίες η συνάρτηση λειτουργεί ορθά, η επίδραση των παρα-

¢Ú·ÛÙËÚÈfiÙËÙ· 4.1

Προσπαθήστε να θυµηθείτε και να αναφέρετε τα 6 βήµατα σύνθεσης των προδια-

γραφών ενός αντικειµένου.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 66

Page 68: pli42a

4.2 AÏÁ‚ÚÈΤ˜ ÚԉȷÁڷʤ˜ ·Ê·ÈÚÂÙÈÎÒÓ Ù‡ˆÓ ‰Â‰Ô̤ӈÓ

Μετά την απλή σχετικά τεχνική που παρουσιάστηκε στην ενότητα 4.1, θα εµβαθύ-

νουµε στις αλγεβρικές προδιαγραφές περιγράφοντας ένα σύνολο από αφαιρετικούς

τύπους δεδοµένων. ∆ύο είναι οι λόγοι για την επιλογή αυτή:

• Όλοι είµαστε εξοικειωµένοι µε τη χρήση τέτοιων τύπων στις γλώσσες προγραµ-

µατισµού (π.χ. πίνακες, λίστες κ.λπ.), οπότε το ενδιαφέρον θα εστιαστεί στις προ-

διαγραφές και όχι στους τύπους δεδοµένων.

• Eίναι συνηθισµένο να διαθέτει ο κάθε µηχανικός λογισµικού ένα σύνολο από επα-

ναχρησιµοποιήσιµες βιβλιοθήκες προδιαγραφών, µε βάση τις οποίες «χτίζει»

αυξητικά τις προδιαγραφές πολύπλοκων συστηµάτων. Είναι βέβαιο ότι στη βάση

τέτοιων βιβλιοθηκών βρίσκονται οι αφαιρετικοί τύποι δεδοµένων.

6 74 . 2 A § ° ∂ µ ƒ π ∫ ∂ ™ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ∂ ™ ∞ º ∞ π ƒ ∂ ∆ π ∫ ø ¡ ∆ À ¶ ø ¡ ¢ ∂ ¢ √ ª ∂ ¡ ø ¡

µέτρων εισόδου, ο µετασχηµατισµός τους σε παραµέτρους εξόδου, ο προσδιορισµός

των συνθηκών κάτω από τις οποίες η συνάρτηση δεν λειτουργεί όπως αναµένεται και

η περιγραφή των εξόδων, όταν η συνάρτηση δεν λειτουργεί όπως αναµένεται.

Κάθε προδιαγραφή από αυτές που θα µελετήσουµε στην ενότητα αυτή αποτελεί-

ται από τέσσερα τµήµατα (Σχήµα 4.1):

• Tο εισαγωγικό τµήµα, όπου αναφέρεται το όνοµα και ο τύπος του αντικειµένου που

προδιαγράφεται, καθώς και το όνοµα άλλων προδιαγραφών που χρησιµοποιούνται,

• µία µη τυπική (λεκτική) περιγραφή του αντικειµένου και των λειτουργιών που

εφαρµόζονται σε αυτό,

• το τµήµα ορισµού, όπου αναφέρονται οι λειτουργίες που εφαρµόζονται στο αντι-

κείµενο και οι παράµετροι που αυτές χρησιµοποιούν,

• το τµήµα αξιωµάτων, όπου ορίζονται οι σχέσεις ανάµεσα στις διάφορες λειτουργίες.

ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 4.1

∆οκιµάστε να γράψετε τις αξιωµατικές προδιαγραφές της συνάρτησης SQRT, η

οποία επιστρέφει την τετραγωνική ρίζα SQX ενός ακεραίου Χ.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 67

Page 69: pli42a

6 8 K E º A § A I O 4 : T À ¶ π ∫ ∂ ™ ª ∂ £ √ ¢ √ π ¶ √ À ¶ ∂ ƒ π ° ƒ∞ º √ À ¡ π ¢ π √ ∆ ∏ ∆ ∂ ™ ∆ √ À § √ ° π ™ ª π ∫ √ À

<ΟΝΟΜΑ ΑΝΤΙΚΕΙΜΕΝΟΥ> (ΓΕΝΙΚΕΣ ΠΑΡΑΜΕΤΡΟΙ)

TYPE <√¡√ª∞ ∆À¶√À>

USES <∫∞∆∞§√°√™ √¡√ª∞∆ø¡ ∞¡∆π∫∂πª∂¡ø¡>

<ª∏ ∆À¶π∫∏ §∂∫∆π∫∏ ¶∂ƒπ°ƒ∞º∏ ∆√À ∆À¶√À ∫∞π ∆ø¡ §∂π∆√Àƒ°πø¡>

<√¡√ª∞ §∂π∆√Àƒ°π∞™ 1> (∫∞∆∞§√°√™ ¶∞ƒ∞ª∂∆ƒø¡) f ∂•√¢√™

<√¡√ª∞ §∂π∆√Àƒ°π∞™ 2> (∫∞∆∞§√°√™ ¶∞ƒ∞ª∂∆ƒø¡) f ∂•√¢√™

∞•πøª∞ 1

∞•πøª∞ 2

™¯‹Ì· 4.1

Πρότυπο

αλγεβρικής

προδιαγραφής

¶·Ú¿‰ÂÈÁÌ· 4.2

Χρησιµοποιώντας αλγεβρικές προδιαγραφές θα περιγράψουµε τον πιο απλό αφαι-

ρετικό τύπο δεδοµένων που υποστηρίζουν οι σύγχρονες γλώσσες προγραµµατισµού:

τον πίνακα (array)[1]. Η προδιαγραφή βρίσκεται στο Σχήµα 4.2.

AARRRRAAYY ((EELLEEMM:: [[UUNNDDEEFFIINNEEDD ff EELLEEMM]]))

TYPE ARRAY

USES INTEGER

Η προδιαγραφή αυτή ορίζει τους πίνακες ως συλλογές στοιχείων του γενικού τύπου

ELEM. Κάθε πίνακας έχει ένα άνω και ένα κάτω όριο, τα οποία επιστρέφουν οι λει-

τουργίες FIRST και LAST. Τα στοιχεία του πίνακα προσπελαύνονται µέσω ενός

αριθµητικού δείκτη των θέσεων του πίνακα και η τιµή τους επιστρέφεται από την

λειτουργία EVAL.

Η λειτουργία CREATE αρχικοποιεί το σύνολο των στοιχείων του πίνακα, όπως

προκύπτει από τα όριά του, στην τιµή UNDEFINED, ενώ η ASSIGN καταχωρίζει

τιµή σε ένα στοιχείο του πίνακα.

CREATE(INTEGER, INTEGER) f ARRAY

ASSIGN(ARRAY, INTEGER, ELEM) f ARRAY

FIRST(ARRAY) f INTEGER

LAST(ARRAY) f INTEGER

EVAL(ARRAY, INTEGER) f ELEM

[1] Το παράδειγµα αυτό βρίσκεται στο Sommerville[96].

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 68

Page 70: pli42a

FIRST(CREATE(x, y)) ¢ x

FIRST(ASSIGN(a, n, v)) ¢ FIRST(a)

LAST(CREATE(x, y)) ¢ y

LAST(ASSIGN(a, n, v)) ¢ LAST(a)

EVAL(CREATE(x, y), n) ¢ UNDEFINED

EVAL(ASSIGN(a, n, v), m) ¢ IF m = n THEN v ELSE EVAL(a, m)

6 94 . 2 A § ° ∂ µ ƒ π ∫ ∂ ™ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ∂ ™ ∞ º ∞ π ƒ ∂ ∆ π ∫ ø ¡ ∆ À ¶ ø ¡ ¢ ∂ ¢ √ ª ∂ ¡ ø ¡

™¯‹Ì· 4.2

Aλγεβρική

προδιαγραφή

του τύπου

«Πίνακας»

Η προδιαγραφή του τύπου «Πίνακας» είναι παραµετροποιηµένη, αφού ορίζει πίνα-

κες του οποιουδήποτε τύπου ELEM, οπότε µπορεί να επαναχρησιµοποιηθεί για διά-

φορα είδη πινάκων (π.χ. πίνακες ακεραίων, χαρακτήρων κ.λπ.). Από την άλλη, όµως,

η γενικότητα της προδιαγραφής µας επιτρέπει να ορίσουµε µόνο γενικές λειτουρ-

γίες, οι οποίες είναι σίγουρο ότι θα εφαρµόζονται σε κάθε είδος πίνακα.

Το εισαγωγικό τµήµα σηµειώνει ότι στην προδιαγραφή χρησιµοποιείται και η προ-

διαγραφή του τύπου INTEGER, οπότε είναι διαθέσιµες όλες οι λειτουργίες που

εφαρµόζονται σε ακέραιους αριθµούς (δεν χρειάζεται να τις προδιαγράψουµε τυπι-

κά, αφού είναι λίγο–πολύ αυτονόητες).

Μετά το τµήµα λεκτικής περιγραφής, ακολουθεί ο κατάλογος µε τις λειτουργίες που

µπορούν να εφαρµοστούν σε ένα πίνακα. Γενικά, οι λειτουργίες είναι δύο ειδών:

• λειτουργίες δηµιουργίας ή τροποποίησης αντικειµένων του τύπου που προδια-

γράφεται, όπως CREATE, UPDATE, ADD κ.λπ.,

• λειτουργίες επισκόπησης, οι οποίες επιστρέφουν ή εξετάζουν την τιµή κάποιου

χαρακτηριστικού του τύπου, όπως EVAL, GET κ.λπ.

Στην περίπτωση του πίνακα, στην πρώτη κατηγορία ανήκουν οι λειτουργίες CREATE

(δηµιουργεί ένα νέο, κενό πίνακα, µε βάση δύο ακεραίους, οι οποίοι αποτελούν τους

δείκτες του πρώτου και του τελευταίου στοιχείου του πίνακα) και ASSIGN (κατα-

χωρίζει τιµή σε µία θέση του πίνακα, η οποία περιγράφεται από έναν ακέραιο, που

αποτελεί το δείκτη του πίνακα). Στη δεύτερη κατηγορία ανήκουν οι λειτουργίες

FIRST (επιστρέφει τον ακέραιο που αποτελεί το δείκτη του πρώτου στοιχείου, δηλα-

δή, το κάτω όριο του πίνακα), LAST (επιστρέφει τον ακέραιο που αποτελεί το δεί-

κτη του τελευταίου στοιχείου, δηλαδή, το άνω όριο του πίνακα) και EVAL (επι-

στρέφει την τιµή ενός στοιχείου του πίνακα, το οποίο ανευρίσκει µε βάση το δείκτη

στη θέση του µέσα στον πίνακα).

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 69

Page 71: pli42a

7 0 K E º A § A I O 4 : T À ¶ π ∫ ∂ ™ ª ∂ £ √ ¢ √ π ¶ √ À ¶ ∂ ƒ π ° ƒ∞ º √ À ¡ π ¢ π √ ∆ ∏ ∆ ∂ ™ ∆ √ À § √ ° π ™ ª π ∫ √ À

Τα αξιώµατα δείχνουν τα εξής:

• Oι λειτουργίες FIRST και LAST επιστρέφουν τα (κάτω και άνω, αντίστοιχα) όρια

του πίνακα, όπως αυτά είχαν οριστεί από την CREATE κατά τη δηµιουργία του

πίνακα. Πρόκειται ουσιαστικά για το δείκτη της θέσης του πρώτου και του τελευ-

ταίου, αντίστοιχα, στοιχείου του πίνακα.

• H καταχώριση τιµής σε ένα στοιχείο δεν µεταβάλλει το µέγεθος του πίνακα, αφού

η λειτουργία FIRST επιστρέφει τον ίδιο δείκτη της θέσης του πρώτου στοιχείου

του πίνακα τόσο πριν, όσο και µετά την εκτέλεση της ASSIGN. Το ίδιο ισχύει και

για τη λειτουργία LAST, η οποία επιστρέφει τον ίδιο δείκτη της θέσης του τελευ-

ταίου στοιχείο του πίνακα πριν και µετά την εκτέλεση της ASSIGN.

• Eάν δεν έχει στο παρελθόν καταχωρισθεί τιµή σε ένα στοιχείο, η τιµή του είναι

UNDEFINED.

• Aντίθετα, εάν έχει στο παρελθόν καταχωρισθεί τιµή σε ένα στοιχείο, η τιµή του

στοιχείου αυτού παραµένει αναλλοίωτη µέχρι να γίνει νέα καταχώριση.

Το τελευταίο τµήµα περιέχει έξι αξιώµατα, τα οποία περιγράφουν όλες τις δυνα-

τές συσχετίσεις ανάµεσα σε λειτουργίες επισκόπησης και λειτουργίες δηµιουργίας

(είναι ένας καλός πρακτικός τρόπος για να βρίσκουµε πόσα αξιώµατα χρειαζόµα-

στε, αν και σε πολλές περιπτώσεις µπορούµε στη συνέχεια να µειώσουµε τον αριθ-

µό των αξιωµάτων).

¢Ú·ÛÙËÚÈfiÙËÙ· 4.2

Στο Σχήµα 4.3 φαίνεται η προδιαγραφή µιας δυναµικής λίστας. ∆οκιµάστε να

συµπληρώσετε το τµήµα λεκτικής περιγραφής µε βάση τις λειτουργίες και τα αξιώ-

µατα. Στη συνέχεια, συγκρίνετε το κείµενό σας µε την ενδεικτική απάντηση που

σας δίνουµε.

LLIISSTT ((EELLEEMM:: [[UUNNDDEEFFIINNEEDD ff EELLEEMM]]))

TYPE LIST

USES INTEGER

????

CREATE f LIST

CONS(LIST, ELEM) f LIST

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 70

Page 72: pli42a

TAIL(LIST) f LIST

HEAD(LIST) f ELEM

LENGTH(LIST) f INTEGER

HEAD(CREATE) ¢ UNDEFINED

HEAD(CONS(L, v)) ¢ IF L=CREATE THEN v ELSE HEAD(L)

LENGTH(CREATE) ¢ 0

LENGTH(CONS(L, v)) ¢ LENGTH(L) + 1

TAIL(CREATE) ¢ CREATE

TAIL(CONS(L, v)) ¢ CONS(TAIL(L), v)

7 14 . 2 A § ° ∂ µ ƒ π ∫ ∂ ™ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ∂ ™ ∞ º ∞ π ƒ ∂ ∆ π ∫ ø ¡ ∆ À ¶ ø ¡ ¢ ∂ ¢ √ ª ∂ ¡ ø ¡

¢Ú·ÛÙËÚÈfiÙËÙ· 4.3

Με βάση την προδιαγραφή του τύπου «Λίστα», δοκιµάστε ως επέκταση αυτού, να

προδιαγράψετε τον τύπο «Ουρά (QUEUE)». Η δική µας, ενδεικτική απάντηση δίνε-

ται στο Σχήµα 4.4 και αναλύεται στη συνέχεια.

™¯‹Ì· 4.3

Aλγεβρική

προδιαγραφή

του τύπου «Λίστα»

Η προδιαγραφή αυτή περιγράφει µία λίστα της οποίας τα στοιχεία προστίθενται στο

ένα άκρο και αφαιρούνται από το άλλο. Χρησιµοποιείται ο γνωστός τύπος INTEGER.

Η λίστα δηµιουργείται από την CREATE και αρχικά είναι κενή. Η CONS προσθέ-

τει ένα στοιχείο στο τέλος µιας λίστας. Η LENGTH επιστρέφει έναν ακέραιο αριθ-

µό που είναι το µήκος της λίστας (το µήκος µιας λίστας που µόλις έχει δηµιουργη-

θεί είναι 0). Η HEAD επιστρέφει το πρώτο στοιχείο µιας λίστας (το οποίο είναι

UNDEFINED, όταν η λίστα έχει µόλις δηµιουργηθεί και είναι κενή). Η πρόσθεση

ενός στοιχείου στη λίστα µέσω της CONS δεν επηρεάζει το αποτέλεσµα της HEAD

(εκτός και αν η λίστα ήταν πριν κενή), οπότε συµπεραίνουµε ότι η πρόσθεση γίνε-

ται από το άλλο άκρο της λίστας.

Τέλος, η λειτουργία TAIL ορίζεται αναδροµικά (κάτι διαδεδοµένο στις αλγεβρικές

προδιαγραφές) και επιστρέφει τη λίστα χωρίς το πρώτο της στοιχείο.

QQUUEEUUEE((EELLEEMM:: [[UUNNDDEEFFIINNEEDD ff EELLEEMM]]))

TYPE QUEUE ENRICHES LIST

USES INTEGER

Η προδιαγραφή αυτή ορίζει την ουρά ως µία δοµή δεδοµένων κατά την οποία το

πρώτο στοιχείο που «εισέρχεται» είναι και το πρώτο που µπορεί να «εξέλθει» (first

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 71

Page 73: pli42a

7 2 K E º A § A I O 4 : T À ¶ π ∫ ∂ ™ ª ∂ £ √ ¢ √ π ¶ √ À ¶ ∂ ƒ π ° ƒ∞ º √ À ¡ π ¢ π √ ∆ ∏ ∆ ∂ ™ ∆ √ À § √ ° π ™ ª π ∫ √ À

– in, first – out). Κατά συνέπεια, η ουρά µπορεί να οριστεί ως µία λίστα, στην οποία

η λειτουργία CONS προσθέτει ένα στοιχείο στο τέλος της.

Η λίστα χρειάζεται να εµπλουτιστεί µε τη λειτουργία GET, η οποία επιστρέφει το

πρώτο στοιχείο της ουράς και ταυτόχρονα δηµιουργεί µια νέα ουρά χωρίς αυτό.

GET(QUEUE) f (ELEM, QUEUE)

GET(CREATE) ¢ (UNDEFINED, CREATE)

GET(CONS(Q, v)) ¢ (HEAD(Q), TAIL(CONS(Q, v)))

™¯‹Ì· 4.4

Αλγεβρική

προδιαγραφή

του τύπου

«Ουρά»

Παρατηρήστε τον τρόπο µε τον οποίο επαναχρησιµοποιείται και εµπλουτίζεται η

προδιαγραφή του τύπου «Λίστα». Βέβαια, καταλαβαίνετε ότι όλες οι λειτουργίες

που είχαν οριστεί για τη λίστα πρέπει να «προσαρµοστούν» στον τύπο «Ουρά”:

CREATE f QUEUE

CONS(QUEUE, ELEM) f QUEUE

TAIL(QUEUE) f QUEUE

HEAD(QUEUE) f ELEM

LENGTH(QUEUE) f INTEGER

Εάν, κατά την επαναχρησιµοποίηση, δεν χρειαζόµαστε όλες τις λειτουργίες, µπο-

ρούµε να αναφέρουµε αυτές που δεν χρησιµοποιούµε µετά τη λέξη «ΕΚΤΟΣ ΤΩΝ».

Για παράδειγµα, στην προδιαγραφή του αντικειµένου «Σωρός», δεν χρειαζόµαστε

λειτουργίες για το τέλος της λίστας, αφού σε µία δοµή σωρού, όλες οι προσθήκες

και οι διαγραφές στοιχείων γίνονται από το ίδιο άκρο. Συνεπώς, στο εισαγωγικό

τµήµα θα γράψουµε

TYPE STACK ENRICHES LIST EXCEPT (TAIL)

Μετά την προδιαγραφή των αντικειµένων δεδοµένων, πρέπει να συνεχίσουµε προ-

διαγράφοντας την κάθε λειτουργία ξεχωριστά, χρησιµοποιώντας αξιωµατικές προ-

διαγραφές, όπως στην ενότητα 4.1. Στο σηµείο αυτό µπορούµε να προσθέσουµε και

λειτουργίες χειρισµού σφαλµάτων, τις οποίες έχουµε έως τώρα σιωπηρά αποφύγει.

4.3 ÕÏÏÔÈ Û˘Ì‚ÔÏÈÛÌÔ› ·ÏÁ‚ÚÈÎÒÓ ÚԉȷÁÚ·ÊÒÓ

Έως τώρα παρουσιάστηκαν κάποιοι διαδεδοµένοι και ισχυροί συµβολισµοί αλγεβρι-

κών τυπικών προδιαγραφών. Εκτός από αυτούς, χρησιµοποιείται και ένας αριθµός

συµβολισµών, οι οποίοι είναι απλούστεροι και περισσότερο «αρχέγονοι». Αυτοί, όπως

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 72

Page 74: pli42a

και η αξιωµατική προδιαγραφή, βρίσκουν εφαρµογή στην προδιαγραφή απλών σχετι-

κά συστηµάτων ή χρησιµοποιούνται ως τµήµατα περισσότερο πολύπλοκων τεχνικών.

4.3.1 ¶ÚԉȷÁڷʤ˜ Ì ÂÍÈÛÒÛÂȘ Î·È Û¯¤ÛÂȘ

Η χρήση εξισώσεων µας επιτρέπει να περιγράψουµε τις ιδιότητες µιας λειτουργίας

χωρίς να περιγράφουµε τον τρόπο µε τον οποίο αυτές επιτυγχάνονται.

¶·Ú¿‰ÂÈÁÌ· 4.3

Η περιγραφή της συνάρτησης υπολογισµού της τετραγωνικής ρίζας ενός αριθµού που

ανήκει στο κλειστό διάστηµα [0, Υ] µε τη χρήση εξίσωσης µπορεί να γίνει ως εξής:

(0 ≤ X ≤ Y) [ABS(SQRT(X)**2) – X) < e]

Η εξίσωση αυτή δηλώνει ότι ο υπολογισµός της τετραγωνικής ρίζας του Χ και η

ύψωση του αποτελέσµατος στο τετράγωνο διαφέρει από τον αρχικό αριθµό Χ κατά

µία πάρα πολύ µικρή τιµή e.

4.3.2 AÓ·‰ÚÔÌÈΤ˜ Û¯¤ÛÂȘ

Μία αναδροµική σχέση αποτελείται από ένα αρχικό τµήµα (καλείται «βάση») και

ένα ή περισσότερα αναδροµικά τµήµατα, τα οποία προδιαγράφουν κάποια τιµή της

σχέσης χρησιµοποιώντας προηγούµενες τιµές της.

¶·Ú¿‰ÂÈÁÌ· 4.4

Ο υπολογισµός των αριθµών Fibonacci γίνεται µε τη χρήση µιας αναδροµικής σχέσης:

FIB(0) = 0

FIB(1) = 1

" N > 1, FIB(N) = FIB(N – 1) + FIB(N – 2)

Η προδιαγραφή αυτή δηλώνει ως βάση των αριθµών Fibonacci τους αριθµούς 0 και

1, ενώ κάθε άλλος αριθµός Fibonacci παράγεται αθροίζοντας τον προηγούµενο και

τον προ – προηγούµενό του αριθµό στην ακολουθία.

4.3.3 K·ÓÔÓÈΤ˜ ÂÎÊÚ¿ÛÂȘ

Οι κανονικές εκφράσεις χρησιµοποιούνται κυρίως για την περιγραφή συµβολοσει-

ρών (strings), οι οποίες χτίζονται από ένα γνωστό σύνολο συµβόλων Α (το οποίο

καλείται «αλφάβητο»). Κάθε σύνολο συµβολοσειρών που ορίζεται από µία κανονι-

κή έκφραση αποτελεί µία τυπική γλώσσα. Οι αποδεκτές λεκτικές και συντακτικές

7 34 . 3 ∞ § § √ π ™ À ª µ √ § π ™ ª √ π ∞ § ° ∂ µ ƒ π ∫ ø ¡ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ø ¡

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 73

Page 75: pli42a

7 4 K E º A § A I O 4 : T À ¶ π ∫ ∂ ™ ª ∂ £ √ ¢ √ π ¶ √ À ¶ ∂ ƒ π ° ƒ∞ º √ À ¡ π ¢ π √ ∆ ∏ ∆ ∂ ™ ∆ √ À § √ ° π ™ ª π ∫ √ À

δοµές των γλωσσών προγραµµατισµού µπορούν να περιγραφούν µε ένα σύνολο

κανονικών εκφράσεων.

Οι κανόνες σχηµατισµού κανονικών εκφράσεων είναι πέντε:

1. Άτοµα: Eίναι τα βασικά σύµβολα του αλφαβήτου.

2. Εναλλαγή: Eάν Ρ1 και Ρ2 είναι κανονικές εκφράσεις, τότε η (Ρ1 | Ρ2) είναι κανο-

νική έκφραση. Ο συµβολισµός ορίζει τη γλώσσα που προκύπτει από την ένωση

των γλωσσών που περιγράφουν οι Ρ1 και Ρ2.

3. Σύνθεση: Eάν Ρ1 και Ρ2 είναι κανονικές εκφράσεις, τότε η (Ρ1 Ρ2) είναι κανονι-

κή έκφραση. Ο συµβολισµός ορίζει τη γλώσσα που προκύπτει από την ένωση

κάθε συµβολοσειράς της γλώσσας που περιγράφει η Ρ1 µε κάθε συµβολοσειρά

της γλώσσας που περιγράφει η Ρ2.

4. Ολοκλήρωση: Eάν Ρ1 είναι κανονική έκφραση, τότε και η (Ρ1)* είναι κανονική

έκφραση. Ο συµβολισµός ορίζει τη γλώσσα που προκύπτει από την ένωση µηδέν

ή περισσότερων συµβολοσειρών της γλώσσας που περιγράφει η Ρ1 µε µηδέν ή

περισσότερες συµβολοσειρές της γλώσσας που περιγράφει η Ρ1.

5. Πληρότητα: Τίποτε άλλο δεν είναι κανονική έκφραση.

¶·Ú¿‰ÂÈÁÌ· 4.5

Στη συνέχεια δίνεται ένα σύνολο κανονικών εκφράσεων, οι οποίες περιγράφουν την ορθή

δοµή ενός προγράµµατος Pascal. Τα άτοµα γράφονται µε πεζά, ενώ τα ενδιάµεσα σύµ-

βολα µε κεφαλαία. Για να είναι πλήρης η περιγραφή, πρέπει κάθε ενδιάµεσο σύµβολο

να αντικαθίσταται µε ένα σύνολο ατόµων (κάτι που δεν ισχύει για το παράδειγµα).

¶ƒ√°ƒ∞ªª∞ = ∫∂º∞§π¢∞ ™øª∞

∫∂º∞§π¢∞ = program IDENTIFIER | program IDENTIFIER

( (IDENTIFIER ;)* )

™øª∞ = L C T V P begin (STATEMENT ;)* end.

L = LABEL–DECLARATION–PART | ∆

C = CONSTANT–DEFINITION–PART | ∆

V = VARIABLE–DEFINITION–PART | ∆

P = (PROCEDURE–AND–FUNCTION–DEFINITION–PART)* | ∆

IDENTIFIER = LETTER (DIGIT | LETTER)*

DIGIT = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

κ. ά.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 74

Page 76: pli42a

™‡ÓÔ„Ë

Στο κεφάλαιο αυτό γνωρίσαµε στην πράξη κάποιες από τις µεθόδους αξιωµατικών

και αλγεβρικών προδιαγραφών, οι οποίες περιγράφουν το λογισµικό µε βάση τις ιδιό-

τητές του. Το σύνολο των αξιωµατικών προδιαγραφών ενός συστήµατος περιγράφει

κάθε λειτουργία του λογισµικού χρησιµοποιώντας περιορισµούς που πρέπει να ισχύ-

ουν πριν και µετά την εκτέλεσή της. Οι περιορισµοί αυτοί είναι λογικές προτάσεις και

καλούνται «προ – συνθήκες» και «µετα – συνθήκες», αντίστοιχα.

Οι αλγεβρικές προδιαγραφές περιλαµβάνουν τον ορισµό του συνόλου των λειτουρ-

γιών που είναι δυνατό να εφαρµοστούν σε ένα αντικείµενο του συστήµατος (π.χ. µια

δοµή δεδοµένων), αλλά και ένα σύνολο αξιωµάτων, τα οποία περιγράφουν τις συσχε-

τίσεις ανάµεσα στις λειτουργίες αυτές.

Πρόκειται για απλές σχετικά µεθόδους, οι οποίες εφαρµόζονται στην περιγραφή

µικρών συστηµάτων ή τµηµάτων λογισµικού. Αποτελούν όµως το απαραίτητο υπό-

βαθρο για την κατανόηση των ισχυρών γλωσσών τυπικών προδιαγραφών που παρου-

σιάζονται στη συνέχεια: της Larch (Kεφάλαιο 5) και της VDM (Kεφάλαιο 6).

BÈ‚ÏÈÔÁÚ·Ê›·

[1] J. Guttag (1977), Abstract data types and the development of data structures.

Communications of the ACM 20(6), pp 396–405.

[2] Ι. Sommerville (1996), Software Engineering. Addison – Wesley, USA.

7 5B I B § I O ° PA º I A

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 75

Page 77: pli42a

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 76

Page 78: pli42a

H Ù˘È΋ ÁÏÒÛÛ· Larch

™ÎÔfi˜

Ο σκοπός του κεφαλαίου είναι να σας γνωρίσει την τυπική γλώσσα αλγεβρικών προ-

διαγραφών Larch. Το κεφάλαιο επικεντρώνεται στο συµβολισµό και τις κυριότερες

δοµές της γλώσσας.

¶ÚÔÛ‰ÔÎÒÌÂÓ· ·ÔÙÂϤÛÌ·Ù·

Όταν θα έχετε µελετήσει αυτό το κεφάλαιο, θα µπορείτε να:

• aναφέρετε τρεις λόγους για τους οποίους πρέπει να διαχωρίζονται οι υψηλού επι-

πέδου προδιαγραφές από τις προδιαγραφές υλοποίησης ενός συστήµατος,

• γράψετε προδιαγραφές Larch στο επίπεδο κοινής γλώσσας (LIL),

• γράψετε προδιαγραφές Larch στο επίπεδο γλώσσας υλοποίησης (LSL).

ŒÓÓÔȘ ÎÏÂȉȿ

5∫ ∂ º ∞ § ∞ π √

• επίπεδο κοινής γλώσσας

• επίπεδο γλώσσας υλοποίησης

• γνώρισµα

• θεωρία

∂ÈÛ·ÁˆÁÈΤ˜ ·Ú·ÙËÚ‹ÛÂȘ

Τελειώνοντας µε τη διαδικασία ανάπτυξης αλγεβρικών τυπικών προδιαγραφών, πρέ-

πει να υλοποιήσουµε τα προδιαγραµµένα αντικείµενα προγραµµατίζοντας τις λει-

τουργίες τους. Ένα από τα πρακτικά προβλήµατα που θα αντιµετωπίσετε, όταν χρη-

σιµοποιήσετε αλγεβρικές προδιαγραφές, είναι να διασφαλίσετε ότι ο κώδικας που

έχει γραφεί σε µια γλώσσα προγραµµατισµού αντιστοιχεί στις τυπικές προδιαγραφές

ενός αντικειµένου.

Στη βιβλιογραφία έχουν προταθεί δύο τρόποι αντιµετώπισης:

• H επέκταση της γλώσσας προγραµµατισµού µε ειδικά σχόλια που αποτελούν προ-

διαγραφές. Τέτοιο παράδειγµα είναι ο συµβολισµός Anna, ο οποίος βασίζεται στη

γλώσσα Ada.

• O διαχωρισµός των προδιαγραφών σε δύο τµήµατα: ένα ανεξάρτητο από τη γλώσ-

σα προγραµµατισµού και ένα εξαρτώµενο από αυτή. Έτσι, επαναχρησιµοποιείται

αυτούσιο το πρώτο τµήµα, ενώ υλοποιείται ένα διαφορετικό δεύτερο για κάθε

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 77

Page 79: pli42a

7 8 K E º A § A I O 5 : H ∆ À ¶ π ∫ ∏ ° § ø ™ ™ ∞ L A R C H

γλώσσα προγραµµατισµού. Αυτή είναι η προσέγγιση που υιοθετείται από το συµ-

βολισµό Larch (Guttag κ.ά.[85])

Το κεφάλαιο αυτό παρουσιάζει την τυπική γλώσσα Larch και τις προδιαγραφές που

µπορεί κανείς να γράψει µε αυτή. Η Larch, όπως θα δούµε στην ενότητα 5.1, επι-

τρέπει να γράψουµε δύο επίπεδα προδιαγραφών για ένα τµήµα λογισµικού: το επί-

πεδο των προδιαγραφών που εξαρτώνται από τη γλώσσα υλοποίησης και το επίπεδο

εκείνων που είναι ανεξάρτητες (και συνεπώς, γενικότερες).

Η γνωριµία µας µε τη Larch επικεντρώνεται στο επίπεδο των γενικών προδιαγρα-

φών και αρχίζει από τις βασικές δοµές της γλώσσας (ενότητα 5.2), δηλαδή τους

απλούς τελεστές, τα γνωρίσµατα και τα είδη, και συνεχίζει µε τους τελεστές που χρη-

σιµοποιούνται για το σχηµατισµό θεωριών (ενότητα 5.3). Στη συνέχεια, παρουσιά-

ζεται ο τρόπος σύνθεσης πολύπλοκων γνωρισµάτων από απλά (ενότητα 5.4) και

κάποιοι περισσότερο πολύπλοκοι τελεστές (ενότητα 5.5). Στην τελευταία ενότητα του

κεφαλαίου (ενότητα 5.6) παρουσιάζονται οι προδιαγραφές που εξαρτώνται από τη

γλώσσα υλοποίησης.

Στο κεφάλαιο αυτό συναντάµε για πρώτη φορά έναν ολοκληρωµένο συµβολισµό τυπι-

κών προδιαγραφών. Την πρώτη φορά που θα µελετήσετε το κεφάλαιο, είναι σχεδόν

σίγουρο ότι θα σας φανεί κουραστικό και δυσνόητο. Μην απογοητεύεστε, όµως.

Πραγµατικά, η γλώσσα Larch είναι πλούσια και ισχυρή, ο δε συµβολισµός της είναι

δυσνόητος για τον απαίδευτο αναγνώστη.

Για την κατανόησή του ίσως απαιτηθεί η επανάληψη τµηµάτων της ύλης του κεφα-

λαίου, η οποία έχει κατατµηθεί σε µικρές ενότητες για να διευκολύνει τη µελέτη σας.

Ακόµη, το κεφάλαιο περιέχει αρκετά παραδείγµατα, δραστηριότητες και ασκήσεις για

να σας βοηθήσει να κατανοήσετε την ύλη, αλλά και µία εκτεταµένη µελέτη περίπτω-

σης στο τέλος. Φροντίστε να µην παραλείψετε καµία δραστηριότητα ή άσκηση, όσο

δύσκολη και αν φαίνεται. Μελετώντας, να θυµάστε ότι ο στόχος σας δεν είναι να απο-

µνηµονεύσετε το συµβολισµό της Larch, αλλά να κατανοήσετε τη φιλοσοφία της

γλώσσας και τον τρόπο µε τον οποίο χρησιµοποιείται στην παραγωγή τυπικών προ-

διαγραφών.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 78

Page 80: pli42a

5.1 ¶ÚԉȷÁڷʤ˜ ‰‡Ô ÂȤ‰ˆÓ

Οι γλώσσες προδιαγραφών που βασίζονται στη Larch υιοθετούν την περιγραφή των

προδιαγραφών ενός συστήµατος λογισµικού σε δύο επίπεδα:

• στο επίπεδο της κοινής γλώσσας (Larch Shared Language – LSL), όπου περιέ-

χονται προδιαγραφές ανεξάρτητες από τη γλώσσα υλοποίησης του λογισµικού, και

• στο επίπεδο της γλώσσας υλοποίησης (Larch Interface Language – LIL), το

οποίο περιλαµβάνει τις προδιαγραφές που έχουν σχεδιαστεί για τη συγκεκριµένη

γλώσσα στην οποία θα αναπτυχθεί το λογισµικό.

Οι προδιαγραφές σε γλώσσα υλοποίησης (δηλαδή, επιπέδου LIL) περιγράφουν τον

τρόπο επικοινωνίας και τις διεπαφές των τµηµάτων που συνθέτουν το λογισµικό.

Επειδή οι µηχανισµοί επικοινωνίας διαφέρουν στις διάφορες γλώσσες προγραµµα-

τισµού, είναι ευκολότερο να γράψουµε ακριβείς προδιαγραφές όταν η γλώσσα προ-

διαγραφών είναι πολύ κοντά στη γλώσσα υλοποίησης. Ακόµη, οι προδιαγραφές που

παράγονται είναι πιο σύντοµες, ακριβείς και κατανοητές από κάποιες που θα είχαν

γραφεί σε µία γενικού σκοπού γλώσσα περιγραφής διεπαφών. Μέχρι τώρα έχουν

σχεδιαστεί και χρησιµοποιούνται γλώσσες του επιπέδου LIL για τις πιο διαδεδοµέ-

νες γλώσσες προγραµµατισµού, όπως C, Ada, Modula – 3, C++ κ.ά.

Όταν γράφουµε προδιαγραφές σε µία γλώσσα υλοποίησης LIL, αναγκαζόµαστε να

χρησιµοποιήσουµε πρωτογενείς όρους, οι οποίοι θεωρούµε ότι έχουν µία «ευκόλως

εννοούµενη» ερµηνεία. Μία τέτοια προσέγγιση είναι σχεδόν σίγουρο ότι θα οδηγή-

σει σε παρανοήσεις ανάµεσα σε σχεδιαστές, προγραµµατιστές και χρήστες του λογι-

σµικού. Για να αποφευχθεί τέτοιος κίνδυνος, καλό είναι να προδιαγράφουµε τους

όρους που εµφανίζονται σε προδιαγραφές επικοινωνίας χρησιµοποιώντας την κοινή

γλώσσα (δηλαδή, τη γλώσσα επιπέδου LSL).

7 95 . 1 ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ∂ ™ ¢ À √ ∂ ¶ π ¶ ∂ ¢ ø ¡

¢Ú·ÛÙËÚÈfiÙËÙ· 5.1

Η γλώσσα Larch «ενθαρρύνει» το διαχωρισµό των προδιαγραφών σε αυτές που

περιγράφουν βασικές δοµές του λογισµικού και σε αυτές που περιγράφουν λεπτο-

µέρειες υλοποίησης. Προσπαθήστε να σκεφτείτε τρία τουλάχιστον επιχειρήµατα

υπέρ αυτής της προσέγγισης.

Η τοποθέτηση των γενικών προδιαγραφών στο επίπεδο LSL και των προδιαγραφών

υλοποίησης στο επίπεδο LIL έχει τα ακόλουθα βασικά πλεονεκτήµατα:

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 79

Page 81: pli42a

8 0 K E º A § A I O 5 : H ∆ À ¶ π ∫ ∏ ° § ø ™ ™ ∞ L A R C H

• Eίναι πιο πιθανό να επαναχρησιµοποιήσουµε προδιαγραφές γραµµένες σε κοινή

γλώσσα LSL από προδιαγραφές γραµµένες σε γλώσσα υλοποίησης LIL.

• H σύνταξη και η σηµασιολογία µιας κοινής γλώσσας LSL είναι απλούστερη από

τις γλώσσες προγραµµατισµού (και κατ’ επέκταση από τις γλώσσες υλοποίησης

του επιπέδου LIL), οπότε οι σχεδιαστές µάλλον θα κάνουν λιγότερα λάθη, ενώ τα

λάθη που θα κάνουν είναι ανιχνεύσιµα πιο εύκολα.

• Eίναι δυνατό να διαµοιραστεί ο φόρτος των προδιαγραφών ανάµεσα σε υψηλού

επιπέδου σχεδιαστές, οι οποίοι θα τις γράψουν στην κοινή γλώσσα LSL και σε

χαµηλού επιπέδου σχεδιαστές (ή έµπειρους προγραµµατιστές), οι οποίοι θα χρη-

σιµοποιήσουν τη αντίστοιχη γλώσσα υλοποίησης LIL. Έτσι, οι δύο οµάδες µπο-

ρεί να εργάζονται παράλληλα.

• Παρέχεται µεγαλύτερη «ελευθερία» στους προγραµµατιστές να εφαρµόσουν τις

ικανότητές τους στην υλοποίηση των προδιαγραφών επιπέδου LSL, παράγοντας

προδιαγραφές επιπέδου LIL.

• Eίναι ευκολότερο να διατυπωθούν και να ελεγχθούν ισχυρισµοί για τις προδια-

γραφές της κοινής γλώσσας LSL από οποιεσδήποτε προδιαγραφές κάποιας γλώσ-

σας υλοποίησης LIL.

Για τους λόγους αυτούς, οι δηµιουργοί της γλώσσας µας προτείνουν να προδιαγρά-

ψουµε το µεγαλύτερο και πιο πολύπλοκο µέρος του λογισµικού στην κοινή γλώσσα

LSL, µε την οποία θα ασχοληθούµε στη συνέχεια της ενότητας.

5.2 B·ÛÈΤ˜ ‰Ô̤˜

Για να γράψουµε προδιαγραφές στην κοινή γλώσσα LSL χρησιµοποιούµε δύο βασι-

κά σύµβολα:

• τους τελεστές (operators), οι οποίοι αναπαριστούν συναρτήσεις (από ένα σύνο-

λο τιµών σε ένα άλλο), και

• τα είδη (sorts), τα οποία αναπαριστούν ξένα µεταξύ τους, µη κενά σύνολα τιµών

που χρησιµεύουν ως πεδία ορισµού και τιµών των τελεστών.

Η ερµηνεία των συµβόλων αυτών τα κάνει να µοιάζουν µε τις προγραµµατιστικές

έννοιες της «διαδικασίας» και του «τύπου δεδοµένων». Όµως, οι έννοιες αυτές χρη-

σιµοποιούνται µόνο στις γλώσσες υλοποίησης LIL και είναι σηµαντικό να προσπα-

θήσουµε να µη συγχέουµε τα σύµβολα των δύο επιπέδων.

Το βασικό αντικείµενο των προδιαγραφών που γράφονται σε LSL καλείται «γνώ-

ρισµα» (trait). Mε ένα γνώρισµα συνήθως προδιαγράφουµε κάποιους τελεστές και

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 80

Page 82: pli42a

το σύνολο των ιδιοτήτων τους. Μερικές φορές, ένα γνώρισµα προδιαγράφει πλήρως

έναν αφαιρετικό τύπο δεδοµένων, αλλά, συνήθως, χρησιµοποιείται για την προδια-

γραφή ενός υποσυνόλου των ιδιοτήτων ενός τύπου.

Η δοµή ενός γνωρίσµατος µοιάζει αρκετά µε τη δοµή των απλών αλγεβρικών προ-

διαγραφών που συναντήσαµε στο Kεφάλαιο 4. Όπως φαίνεται και στο Παράδειγµα

5.1, ένα γνώρισµα περιλαµβάνει:

• το όνοµα του τύπου που ορίζει,

• το τµήµα Includes, στο οποίο αναφέρονται οι γνωστοί (ήδη προδιαγραµµένοι)

τύποι που χρησιµοποιούνται,

• το τµήµα Introduces, στο οποίο δηλώνεται ένα σύνολο τελεστών. Για κάθε τελε-

στή (ο οποίος αντιµετωπίζεται ως συνάρτηση) ορίζεται το είδος του πεδίου ορι-

σµού και του πεδίου τιµών του, δηλαδή η υπογραφή του,

• το κύριο τµήµα, το οποίο αρχίζει µε τη δεσµευµένη λέξη «Αsserts» και περιλαµ-

βάνει εξισώσεις ανάµεσα σε τελεστές και µεταβλητές. Οι εξισώσεις προδιαγρά-

φουν (περιορίζουν) τη συµπεριφορά των τελεστών. Σηµειώστε πως όλοι οι τελε-

στές που χρησιµοποιούνται στο τµήµα αυτό πρέπει να έχουν δηλωθεί στο τµήµα

Ιntroduces, η σε κάποιο από τα γνωρίσµατα που αναφέρονται στο τµήµα Ιncludes.

¶·Ú¿‰ÂÈÁÌ· 5.1[1]

Το ακόλουθο γνώρισµα προδιαγράφει τον τύπο «Πίνακας» (Table):

TTaabbllee:: ttrraaiitt

IInncclluuddeess

Integer

IInnttrroodduucceess

new: # Tab

add: Tab, Ind, Val # Tab

_ Œ_ : Ind, Tab # B

lookup: Tab, Ind # Val

isEmpty: Tab # B

size: Tab # Int

8 15 . 2 B ∞ ™ π ∫ ∂ ™ ¢ √ ª ∂ ™

[1] Το παράδειγµα αυτό και πολλά από αυτά που ακολουθούν βρίσκονται στο Guttag[93]

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 81

Page 83: pli42a

8 2 K E º A § A I O 5 : H ∆ À ¶ π ∫ ∏ ° § ø ™ ™ ∞ L A R C H

AAsssseerrttss " i, i1: Ind, v: Val,t: Tab

¬(i Œ new) ;

i Œ add(t, i1, v) ¢ i = i1 ⁄ i Œ t ;lookup(add(t, i, v), i1) ¢ if i = i1 then v else lookup(t, i1) ;

size(new) ¢ 0 ;

size(add(t, i, v)) ¢ if i Œ t then size(t) else size(t)+1 ;

isEmpty(t) ¢ size(t) = 0 ;

Παρατηρήστε τα εξής:

• Tο όνοµα ενός γνωρίσµατος είναι ανεξάρτητο από τους τελεστές ή τα είδη που

περιλαµβάνει και δεν πρέπει να συγχέεται µε κάποιο από αυτά.

• Tab, Ind, Val, Int, B είναι είδη που έχουν ήδη οριστεί (προσέξτε, γιατί τα ονόµα-

τα κάποιων ειδών µοιάζουν µεταξύ τους). Το γνώρισµα B και όλοι οι τελεστές της

µαθηµατικής λογικής συµπεριλαµβάνονται στα βασικά γνωρίσµατα της κοινής

γλώσσας LSL.

• O συµβολισµός add: Tab, Ind, Val # Tab ορίζει τον τελεστή add, ο οποίος εφαρ-

µόζεται σε τρία ορίσµατα µε τύπους Tab, Ind και Val, και επιστρέφει µία τιµή

τύπου Tab.

• O συµβολισµός ― Œ ― : Ind, Tab # B ορίζει τον τελεστή Œ που δέχεται δύο ορί-

σµατα τύπου Ind και Tab, αντίστοιχα (στην περίπτωση αυτή, πρόκειται για infix

τελεστή). Η εφαρµογή του τελεστή στα δύο ορίσµατα επιστρέφει µία τιµή T ή F.

• Στον ορισµό κάθε εξίσωσης χρησιµοποιείται ο τελεστής «D» αντί του συνηθισµέ-

νου «=», ο οποίος χρησιµοποιείται ως ο τελεστής της ισότητας. Οι δύο τελεστές

έχουν την ίδια σηµασιολογία, αλλά διαφορετική προτεραιότητα (ο «D» έχει τη χαµη-

λότερη προτεραιότητα ανάµεσα σε όλους τους τελεστές της κοινής γλώσσας LSL).

• Oι τελεστές 0, 1 και + δεν ορίζονται στο γνώρισµα Table, αλλά στο γνώρισµα

Integer, το οποίο περιλαµβάνεται στο Table. Εκεί, ορίζεται ότι:

0, 1 # Int

_ + _ : Int, Int # Int

• O τελεστής απόφασης «if _ then _ else» συµπεριλαµβάνεται στα βασικά γνωρί-

σµατα της LSL και έχει τη γνωστή σηµασία.

Η κοινή γλώσσα LSL επιβάλλει ένα απλό σχήµα προτεραιοτήτων ανάµεσα στους

τελεστές που υποστηρίζει. Έτσι, ο τελεστής ∑ έχει τη µεγαλύτερη προτεραιότητα.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 82

Page 84: pli42a

Ακολουθούν οι τελεστές που ορίζουν οι χρήστες και ο λογικός τελεστής «¬», οι οποί-

οι έχουν µεγαλύτερη προτεραιότητα από τους τελεστές «=» και «≠». Στη συνέχεια

ακολουθούν οι τελεστές του προτασιακού λογισµού, ο τελεστής απόφασης και ο

τελεστής ορισµού εξίσωσης.

5.3 £ÂˆÚ›Â˜

Κάθε γνώρισµα ορίζει µία θεωρία (theory), δηλαδή ένα κλειστό ως προς τη λογική

συνέπεια σύνολο προτάσεων. Κάθε τέτοια θεωρία περιλαµβάνει τους ισχυρισµούς

του γνωρίσµατος, τα γνωστά αξιώµατα της λογικής, όλα όσα συνεπάγονται από αυτά,

και τίποτε άλλο. Σηµειώστε ότι οι εξισώσεις µιας θεωρίας προκύπτουν µόνο από την

παρουσία ισχυρισµών σε ένα γνώρισµα και ποτέ από την απουσία τους!

Έως τώρα έχουµε γνωρίσει θεωρίες που χρησιµοποιούν εξισώσεις (δηλαδή, λογικές

προτάσεις µε τον τελεστή D). Στην κοινή γλώσσα LSL µπορούµε να ορίσουµε ισχυ-

ρότερες θεωρίες µε τις ακόλουθες δύο δοµές:

• generated by: Περιλαµβάνονται φράσεις µε τις οποίες περιγράφουµε επαγω-

γικά τον τρόπο υπολογισµού των τιµών ενός είδους. Για παράδειγµα, κάθε

αντικείµενο του είδους Tab µπορεί να παραχθεί εφαρµόζοντας διαδοχικά τους

τελεστές new και add. Αυτό περιγράφεται από τον ισχυρισµό

Tab generated by new, add

• partitioned by: Περιλαµβάνονται τελεστές, µε τους οποίους µπορούµε µε

ασφάλεια να κατηγοριοποιήσουµε όλες τις τιµές ενός είδους. Για παράδειγ-

µα, δύο αντικείµενα t1 και t2 του είδους Tab είτε είναι ίσα (όταν κάθε στοι-

χείο του t1 βρίσκεται στην ίδια θέση και στο t2) είτε όχι, δηλαδή

" i1: Ind (i1 Πt1 = i1 Πt2),

" i1: Ind (lookup(t1, i1) = lookup(t2, i2)) fi t1 = t2

Μπορούµε λοιπόν να ισχυριστούµε ότι

Tab partitioned by Œ, lookup

5.4 ™‡ÓıÂÛË ÁÓˆÚÈÛÌ¿ÙˆÓ

Η κοινή γλώσσα LSL µας επιτρέπει, κατά τον ορισµό ενός γνωρίσµατος Α, να επα-

ναχρησιµοποιούµε τελεστές και είδη που έχουµε σε κάποιο άλλο γνώρισµα Β, γρά-

φοντας στο γνώρισµα Α τη φράση «Includes B». Τότε, η θεωρία που συσχετίζεται

µε το γνώρισµα Α είναι η ένωση των φράσεων που περιλαµβάνονται στα τµήµατα

Introduces και Asserts του Α µε τις φράσεις των αντίστοιχων τµηµάτων του γνωρί-

8 35 . 4 ™ À ¡ £ ∂ ™ ∏ ° ¡ ø ƒ π ™ ª ∞∆ ø ¡

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 83

Page 85: pli42a

8 4 K E º A § A I O 5 : H ∆ À ¶ π ∫ ∏ ° § ø ™ ™ ∞ L A R C H

σµατος Β. Σηµειώστε ότι περισσότερα από ένα γνωρίσµατα µπορεί να δηλώνονται

στο τµήµα Includes ενός γνωρίσµατος.

Κατά την επαναχρησιµοποίηση ενός γνωρίσµατος Β µέσα σε ένα γνώρισµα Α, µπο-

ρούµε να µετονοµάσουµε κάποια ονόµατα του Β. Έτσι, η φράση «Includes B (y for

x)»σηµαίνει ότι κατά την ενσωµάτωση των φράσεων του Β στο Α, κάθε εµφάνιση

του ονόµατος x θα αντικατασταθεί από το όνοµα y.

¶·Ú¿‰ÂÈÁÌ· 5.2

Κατά τον ορισµό του γνωρίσµατος «Πίνακας» στο Παράδειγµα 1, χρησιµοποιήσα-

µε ορισµούς τελεστών που περιλαµβάνονται στο γνώρισµα Integer. Για το λόγο αυτό,

στον ορισµό του γνωρίσµατος υπάρχει η φράση: Includes Integer.

Θυµηθείτε ότι από το γνώρισµα Integer χρησιµοποιήσαµε και τον τελεστή «+» της

πρόσθεσης. Εάν όµως είχαµε γράψει Includes Integer(PLUS for +), τότε οι φράσεις

του Table που περιέχουν τον τελεστή + θα έπρεπε να γραφούν µε τον τελεστή PLUS:

size(add(t, i, v)) ¢ if i Œ t then size(t) else size(t) PLUS 1 ;

¢Ú·ÛÙËÚÈfiÙËÙ· 5.2

Έστω η ακόλουθη προδιαγραφή του γνωρίσµατος SparseArray:

SparseArray: trait

Includes

Table(Arr for Tab, defined for Œ, assign for add,__ [ __ ] for lookup, Int for Ind)

Προσπαθήστε να γράψετε την αναλυτική προδιαγραφή του γνωρίσµατος

SparseArray, θεωρώντας ότι δεν υπάρχει το γνώρισµα Table.

Η ζητούµενη προδιαγραφή θα µπορούσε να είναι η ακόλουθη:

SSppaarrsseeAArrrraayy:: ttrraaiitt

IInncclluuddeess

Integer

IInnttrroodduucceess

new: # Arr

assign: Arr, Int, Val # Arr

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 84

Page 86: pli42a

defined: Int, Arr # B

__ [ __ ]: Arr, Int # Val

isEmpty: Arr # B

size: Arr # Int

AAsssseerrttss

Arr ggeenneerraatteedd bbyy new, assign

Arr ppaarrttiittiioonneedd bbyy defined, _ [ _ ]

" i, i1: Int, v: Val, t: Arr

¬ defined(i, new) ;

defined(i, assign(t, i1, v)) ¢ i = i1 ⁄ defined(i, t) ;

assign(t, i, v) [i1] ¢ if i = i1 then v else t[i1] ;

size(new) ¢ 0 ;

size(assign(t, i, v)) ¢ if defined(i, t) then size(t) else

size(t)+1 ;

isEmpty(t) ¢ size(t) = 0 ;

Αν και οποιοδήποτε είδος ή τελεστής µπορεί να µετονοµασθεί όταν ένα γνώρισµα

χρησιµοποιείται από ένα άλλο γνώρισµα, κάποια από αυτά συγκεντρώνουν περισ-

σότερες πιθανότητες µετονοµασίας. Είναι πολλές φορές βολικό να σηµειώνουµε

τέτοια είδη ή τελεστές δίπλα στο όνοµα του γνωρίσµατος όπου ορίζονται.

Εάν, λοιπόν, το γνώρισµα SparseArray είχε οριστεί ως SparseArray(Val) (χωρίς αυτό

να έχει κάποια επίπτωση στο περιεχόµενο του γνωρίσµατος), οι φράσεις Includes

SparseArray(Int) και Includes SparseArray(Int for Val) θα ήταν ισοδύναµες.

5.5 ¶ÂÚÈÛÛfiÙÂÚ· ÁÈ· ÙÔ Û˘Ì‚ÔÏÈÛÌfi

Η κοινή γλώσσα LSL περιλαµβάνει πολύ λίγα προκαθορισµένα σύµβολα, εκτός από

τις δεσµευµένες λέξεις που χρησιµοποιεί (όπως trait, asserts, introduces κ.ά.). Σε

αυτά περιλαµβάνονται οι τελεστές της λογικής, οι τελεστές «=», «≠» και «if_then _

else _» και οι δεκαδικοί αριθµοί.

Οι υπόλοιποι τελεστές και τα άλλα είδη πρέπει να οριστούν µε τη µορφή γνωρι-

σµάτων. Επειδή όµως δεν είναι δυνατό να ορίζει κανείς τα πάντα κάθε φορά που

προδιαγράφει ένα πρόγραµµα, η LSL επιτρέπει στους σχεδιαστές να δηµιουργούν

βιβλιοθήκες προδιαγραφών, τις οποίες επαναχρησιµοποιούν κάθε φορά µε τη µορφή

αρχείων αρχικοποίησης. Πολλά βασικά γνωρίσµατα, λοιπόν (π.χ. οι ακέραιοι αριθ-

µοί), έχουν οριστεί στη βιβλιογραφία, ώστε να µπορούν να τους χρησιµοποιήσουν

οι σχεδιαστές λογισµικού.

8 55 . 5 ¶ ∂ ƒ π ™ ™ √ ∆ ∂ ƒ∞ ° π ∞ ∆ √ ™ À ª µ √ § π ™ ª √

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 85

Page 87: pli42a

8 6 K E º A § A I O 5 : H ∆ À ¶ π ∫ ∏ ° § ø ™ ™ ∞ L A R C H

Εάν τα διαθέσιµα γνωρίσµατα δεν επαρκούν, ένας σχεδιαστής µπορεί:

• να ορίσει νέα, δικά του γνωρίσµατα, τα οποία στη συνέχεια επαναχρησιµοποιεί

ελεύθερα, ή

• να ορίσει µε διαφορετικό τρόπο κάποια από τα διαθέσιµα γνωρίσµατα, µέσα από

τη διαδικασία της προσαρµογής (overloading).

Τέλος, η κοινή γλώσσα LSL παρέχει και τις εξής συντοµογραφίες:

• Aπαρίθµηση (enumeration), µε την οποία ορίζουµε ένα πεπερασµένο, διατεταγ-

µένο σύνολο στοιχείων και ένα τελεστή που τα απαριθµεί.

Orientation enumeration of north, east, south, west

• ν – άδα (n–tuple), µε την οποία ορίζουµε διατεταγµένες δοµές ν στοιχείων (κατ’

αναλογία µε τη δοµή δεδοµένων record) καθώς και τελεστές χειρισµού του κάθε

µέλους της δοµής:

Date tuple of day: Int, month: Str, year: Int

¶·Ú¿‰ÂÈÁÌ· 5.3

Η πλήρης ανάπτυξη των δύο συντοµογραφιών έχει ως εξής:

OOrriieennttaattiioonn:: ttrraaiitt DDaattee:: ttrraaiitt

IInnttrroodduucceess

north, south, east, west:

Direction

turn: Direction # Direction

IInnttrroodduucceess

[_, _, _]: Int, Str, Int # Date

_. day: Date # Int

_. month: Date # Str

_. year: Date # Int

set–day: Date, Int # Date

set–month: Date, Str # Date

set–year: Date, Int # Date

AAsssseerrttss

Direction ggeenneerraatteedd bbyy north,

east, south, west ;

AAsssseerrttss

Date ggeenneerraatteedd bbyy [_, _] ;

Date ppaarrttiittiioonneedd

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 86

Page 88: pli42a

8 75 . 5 ¶ ∂ ƒ π ™ ™ √ ∆ ∂ ƒ∞ ° π ∞ ∆ √ ™ À ª µ √ § π ™ ª √

QQuueeuuee((EE,, CC)):: ttrraaiitt SSttaacckk((EE,, CC)):: ttrraaiitt

IInncclluuddeess

Integer

IInncclluuddeess

Integer

IInnttrroodduucceess

empty: # C

append: E, C # C

count: E, C # Int

_ Π_: E, C # B

head: C # E

tail: C # C

len: C # Int

isEmpty: C # B

IInnttrroodduucceess

empty # C

push: E, C # C

top: C # E

pop: C # C

count: E, C # Int

_ Π_: E, C # B

size: C # Int

isEmpty: C # B

eeqquuaattiioonnss

north ≠ east ;

north ≠ south ;

north ≠ west ;

east ≠ south ;

east ≠ west ;

south ≠ west ;

turn(north) ¢ east ;

turn(east) ¢ south ;

turn(south) ¢ west ;

turn(west) ¢ north ;

bbyy .day,.month,.year ;

" d, d1, y, y1: Int, m, m1: Str

([d, m, y]).day ¢ d ;

([d, m, y]).month ¢ m ;

([d, m, y]).year ¢ y ;

set–day([d, m, y], d1) ¢

[d1, m, y] ;

set–month([d, m, y], m1) ¢

[d, m1, y] ;

set–year([d, m, y], y1) ¢

[d, m, y1] ;

¢Ú·ÛÙËÚÈfiÙËÙ· 5.3

Χρησιµοποιώντας τις γνώσεις της κοινής γλώσσας LSL που αποκοµίσατε µελετώντας

την ενότητα αυτή, προσπαθήστε να προδιαγράψετε τα γνωρίσµατα Queue και Stack.

Έπειτα, συγκρίνετε τις προδιαγραφές σας µε τη δική µας πρόταση που ακολουθεί.

Οι ζητούµενες προδιαγραφές των δύο γνωρισµάτων είναι οι ακόλουθες:

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 87

Page 89: pli42a

8 8 K E º A § A I O 5 : H ∆ À ¶ π ∫ ∏ ° § ø ™ ™ ∞ L A R C H

5.6 ¶ÚԉȷÁڷʤ˜ ÂȤ‰Ô˘ LIL

Η προδιαγραφή ενός τµήµατος λογισµικού που είναι γραµµένη σε µία γλώσσα υλο-

ποίησης LIL πρέπει να παρέχει τις πληροφορίες που χρειάζεται κάποιος για να χρη-

σιµοποιήσει ή να υλοποιήσει το τµήµα αυτό. Κατά συνέπεια, στον πυρήνα κάθε

γλώσσας επιπέδου LIL βρίσκεται ένα µοντέλο της κατάστασης του λογισµικού, όπως

αναπαρίσταται στη σχετική γλώσσα προγραµµατισµού.

Η κατάσταση είναι µία απεικόνιση αφαιρετικών θέσεων µνήµης (locs) σε ένα σύνολο

τιµών (values). Κάθε µεταβλητή έχει τύπο και συσχετίζεται µε µία θέση του τύπου

αυτού. Κάθε γλώσσα υλοποίησης LIL παρέχει τελεστές, οι οποίοι µπορούν να εφαρ-

µοστούν σε µία θέση µνήµης και να επιστρέψουν την τιµή της σε κάποια κατάσταση.

Όπως κάθε θέση έχει συγκεκριµένο τύπο, έτσι και κάθε όρος της κοινής γλώσσας LSL

ανήκει σε συγκεκριµένο είδος. Για να συνδεθούν τα δύο επίπεδα προδιαγραφών, χρει-

άζεται µία απεικόνιση των τύπων της γλώσσας υλοποίησης LIL στα είδη της κοινής

γλώσσας LSL: κάθε τύπος βασίζεται σε ένα είδος της LSL. Έτσι, οι προδιαγραφές

των διεπαφών γράφονται χρησιµοποιώντας τύπους και τιµές, ενώ οι ιδιότητες των

AAsssseerrttss

C ggeenneerraatteedd bbyy empty, append

" q: C, e, e1: E

count(e, empty) ¢ 0 ;

count(e, append(e1, q)) ¢

count(e, q) + (if e=e1 then

1 else 0) ;

e Œ q ¢ count(e, q) > 0 ;

head(append(e, q)) ¢ if q =

empty then e else head(q) ;

tail(append(e, q)) ¢ if q =

empty then empty else

append(e, tail(q));

len(empty) ¢ 0 ;

len(append(e, q)) ¢ len(q) + 1 ;

isEmpty(q) ¢ q = empty ;

AAsssseerrttss

C ggeenneerraatteedd bbyy empty, push

" e: E, stk: C

top(push(e, stk)) ¢ e ;

pop(push(e, stk)) ¢ stk ;

size(empty) ¢ 0 ;

size(push(e, stk)) ¢

size(stk) + 1 ;

isEmpty(stk) ¢ stk = empty ;

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 88

Page 90: pli42a

τιµών ορίζονται στην LSL χρησιµοποιώντας τελεστές στα αντίστοιχα είδη.

Για κάθε γλώσσα υλοποίησης LIL υπάρχει ένα τυποποιηµένο γνώρισµα της κοινής

γλώσσας LSL όπου ορίζονται οι τελεστές που µπορούν να εφαρµοστούν στις τιµές

των ειδών στα οποία βασίζονται οι τύποι της γλώσσας προγραµµατισµού.

¶·Ú¿‰ÂÈÁÌ· 5.4

Στη συνέχεια φαίνεται η προδιαγραφή διεπαφής του γνωρίσµατος «Πίνακας» γραµ-

µένη στη γλώσσα LCL (πρόκειται για γλώσσα επιπέδου LIL που συσχετίζεται µε τη

Standard C). Η προδιαγραφή διεπαφής βασίζεται στην προδιαγραφή LSL του Παρα-

δείγµατος 5.1.

mmuuttaabbllee ttyyppee ttaabbllee ;;

uusseess Table (table for Tab, char for Ind, char for Val, int

for Int) ;

ccoonnssttaanntt int maxTabSize ;

table table_create(void)

eennssuurreess result’ = new Ÿ fresh(result) ;

B table_add(table t, char i, char c)

mmooddiiffiieess t ;

eennssuurreess result = (size(t^) < maxTabSize ⁄ i Œ t^) Ÿ(if result then t’ = add(t^, i, c) else t’ = t^) ;

char table_read(table t, char i)

rreeqquuiirreess i Πt^ ;

eennssuurreess result = lookup(t^, i) ;

Παρατηρούµε ότι η προδιαγραφή µιας διαδικασίας αποτελείται από:

• την κεφαλίδα του προγράµµατος, όπου δηλώνονται οι τύποι των παραµέτρων,

• το τµήµα requires, όπου δηλώνονται οι περιορισµοί στην κατάσταση και τις τιµές

των παραµέτρων που πρέπει να ισχύουν κατά τη στιγµή της κλήσης της διαδικασίας,

8 95 . 6 ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ∂ ™ ∂ ¶ π ¶ ∂ ¢ √ À L I L

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 89

Page 91: pli42a

9 0 K E º A § A I O 5 : H ∆ À ¶ π ∫ ∏ ° § ø ™ ™ ∞ L A R C H

• το τµήµα modifies, όπου αναφέρονται οι θέσεις µνήµης των οποίων τις τιµές επι-

τρέπεται στη διαδικασία να τροποποιήσει, και

• το τµήµα ensures, όπου περιγράφεται η κατάσταση της διαδικασίας µετά την

κλήση της και ο τρόπος µε τον οποίο παράγεται το αποτέλεσµά της.

Η φράση του τµήµατος requires περιγράφει την κατάσταση κατά την κλήση της δια-

δικασίας (pre – state), ενώ οι φράσεις στα τµήµατα modifies και ensures περιγρά-

φουν περιορισµούς στη συµπεριφορά της διαδικασίας, όταν αυτή καλείται σωστά.

Οι περιορισµοί αυτοί συσχετίζουν την κατάσταση της διεργασίας κατά την κλήση

της και την κατάσταση όταν τερµατιστεί η εκτέλεση της διεργασίας (post – state).

Σηµειώστε ότι εάν δεν υπάρχει τµήµα modifies, η διαδικασία δεν µπορεί να τροπο-

ποιήσει καµία µεταβλητή!

Το αποτέλεσµα της εκτέλεσης της διαδικασίας βρίσκεται στο αντικείµενο «result»,

ενώ µπορεί να χρησιµοποιηθεί και το αντικείµενο «control» για να καθορίσει το

σηµείο όπου θα µεταφερθεί ο έλεγχος µετά το τέλος της διαδικασίας (συνήθως περιέ-

χει τη διεύθυνση επιστροφής).

Μελέτη περίπτωσης

Η Ελένη Νικολοπούλου, ιδιοκτήτρια της επιχείρησης CHILDWARE ανέθεσε στο

γνωστό µηχανικό πληροφορικής Βύρωνα να αναπτύξει µία βάση δεδοµένων για τους

υπαλλήλους της επιχείρησης.

Για κάθε υπάλληλο, η Ελένη θέλει να καταγράφει τον αριθµό µητρώου του, το ονο-

µατεπώνυµό του, το βασικό του µισθό, το γένος του και τη θέση του στην επιχείρη-

ση (δυνατές θέσεις είναι: προϊστάµενος, πωλητής).

Ο Βύρων αποφάσισε να χρησιµοποιήσει Larch για να καταγράψει τις προδιαγραφές

της βάσης των υπαλλήλων. ∆ηµιoυργεί αρχικά ένα γνώρισµα µε τις γενικές προδια-

γραφές της βάσης, τις οποίες βασίζει στα γνωρίσµατα για τα σύνολα που περιλαµ-

βάνονται στη βιβλιοθήκη της LSL:

EEmmppllDDBBaasseeBBaassiiccss:: ttrraaiitt

IInncclluuddeess

Set(employee for E, emplset for C)

gender eennuummeerraattiioonn ooff MALE, FEMALE, gender–ANY

job eennuummeerraattiioonn ooff MNGR, SALES, job–ANY

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 90

Page 92: pli42a

employee ttuuppllee ooff am: int,

name: employee–name,

salary: int,

gen: gender,

j: job

Μια τέτοια προσέγγιση είναι συνηθισµένη όταν το λογισµικό υπό προδιαγραφή είναι

αρκετά πολύπλοκο, ώστε να µην είναι δυνατό να έχει κανείς ολοκληρωµένη εικόνα

από την αρχή.

Στη συνέχεια, ο Βύρων προδιαγράφει τη βάση των υπαλλήλων, χρησιµοποιώντας

τους περιορισµούς που αναφέρονται στο γνώρισµα EmplDBaseBasics.

EEmmppllDDBBaassee:: ttrraaiitt

AAssssuummeess

dbaseAssumptions

IInncclluuddeess

Set(employee for E, db for C, new for , hire for insert)

db–Q ttuuppllee ooff g: gender, j: job, l: int, h: int

db–status eennuummeerraattiiÔÔnn ooff db–OK, salERR, genderERR, jobERR,

duplERR

IInnttrroodduucceess

query: db, db–Q # emplset

match: gender, gender # B

match: job, job # B

fire, promote: db, int # db

setSal: db, int, int # db

find: db, int # employee

employed: db, int # B

numEmployees: db # int

AAsssseerrttss " e: employee, k: int, g, gq: gender, j, jq: job,

9 15 . 6 ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ∂ ™ ∂ ¶ π ¶ ∂ ¢ √ À L I L

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 91

Page 93: pli42a

9 2 K E º A § A I O 5 : H ∆ À ¶ π ∫ ∏ ° § ø ™ ™ ∞ L A R C H

q: db–q, sal: int, d: db

query(new, q) ¢ ;

query(hire(e, d), q) ¢ if match(q.g, e.gen) Ÿ match(q.j,e.j) Ÿ q.l ≤ e.salary Ÿ e.salary ≤ q.h then insert(e,

query(d, q)) else query(d, q) ;

match(gq, g) D gq = gender–ANY ⁄ g = gq ;

match(jq, j) ¢ jq = job–ANY ⁄ j = jq ;

fire(new, k) ¢ new ;

fire(hire(e, d), k) ¢ if e.am = k then fire(d, k) else

hire(e, fire(d, k)) ;

promote(new, k) ¢ new ;

promote(hire(e, d), k) ¢ if e.am = k then hire(set–j(e,

MNGR), promote(d, k)) else hire(e, promote(d, k)) ;

setSal(new, k, sal) ¢ new ;

setSal(hire(e, d), k, sal)) ¢ if e.am = k then hire

(set–salary(e, sal), setSal(d, k, sal)) else hire

(e, setSal(d, k, sal)) ;

employed(d, k) SIN (find(d, k).am = k ٠find(d, k) Πd) ;

employed(new, k) ¢ false ;

employed(hire(e, d), k) ¢ e.am = k ⁄ employed(d, k) ;

numEmployees(new) ¢ 0 ;

numEmployees(hire(e, d)) ¢ numEmployees(d) +

(if employed(d, e.am) then 0 else 1) ;

Η προδιαγραφή αυτή ορίζει ένα σύνολο λειτουργιών πάνω στη βάση δεδοµένων, µε

τις οποίες µπορεί ο χρήστης να:

• προσλάβει (hire), προάγει (promote) ή απολύσει (fire) έναν υπάλληλο: όλες αυτές

οι λειτουργίες (εδώ ορίζονται βέβαια ως τελεστές) επιδρούν πάνω στη βάση δεδο-

µένων db,

• βρει (find) εάν κάποιος υπάλληλος περιέχεται στη βάση χρησιµοποιώντας τον

αριθµό µητρώου του (δεν επιτρέπεται δύο υπάλληλοι να έχουν τον ίδιο αριθµό

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 92

Page 94: pli42a

µητρώου – αυτό ελέγχεται µε την employed), καθώς και το συνολικό αριθµό των

υπαλλήλων (numEmployees),

• αναζητήσει (query) έναν υπάλληλο µε βάση τον αριθµό µητρώου του, τη θέση του

και το µισθό του (ο οποίος µπορεί να βρίσκεται στο διάστηµα που ορίζουν δύο τιµές).

9 35 . 6 ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ∂ ™ ∂ ¶ π ¶ ∂ ¢ √ À L I L

¢Ú·ÛÙËÚÈfiÙËÙ· 5.4

∆οκιµάστε να γράψετε σε LCL τις προδιαγραφές για τις εξής λειτουργίες της βάσης

των υπαλλήλων: hire(employee e), fire(int am), promote(int am) και setSalary(int

am, int sal). Μπορείτε να χρησιµοποιήσετε την db – status ως οδηγό για τα µηνύ-

µατα που πρέπει να χειρίζεται το λογισµικό. Στη συνέχεια, να συγκρίνετε την απά-

ντησή σας µε αυτή που προτείνουµε.

Με βάση όσα αναφέρθηκαν στην ενότητα 5.6 και το Παράδειγµα 4, οι προδιαγρα-

φές είναι οι ακόλουθες:

db–status hire(employee e) db d ;

mmooddiiffiieess d ;

eennssuurreess

(if result = db–OK then d’ = hire(e, d^) else d’ = d^) Ÿresult =

(if e.gen = gender–ANY then genderERR

else if e.j = job–ANY then jobERR

else if e.salary < 0 then salERR

else if employed(d^, e.am) then duplERR

else db–OK) ;

B fire(int am) db d ;

mmooddiiffiieess d ;

eennssuurreess result = employed(d^, am) Ÿ d’ = fire(d^, am) ;

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 93

Page 95: pli42a

9 4 K E º A § A I O 5 : H ∆ À ¶ π ∫ ∏ ° § ø ™ ™ ∞ L A R C H

B promote(int am) db d ;

mmooddiiffiieess d ;

eennssuurreess result = (employed(d^, am) Ÿ find(d^, am).j

= SALES) Ÿ(if result then d’ = promote(d , am) else d’ = d ) ;

db–status setSalary(int am, int sal) db d ;

mmooddiiffiieess d ;

eennssuurreess result =

(if employed(d^, am) then

(if sal < 0 then salERR else db–OK)

else missERR) Ÿ

(if result = db–OK then

d’ = setSal(d^, am, sal) else d’

d^) ;

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 94

Page 96: pli42a

™‡ÓÔ„Ë

Στο κεφάλαιο αυτό, µελετήσαµε τη γλώσσα τυπικών προδιαγραφών Larch. H Larch

µας «αναγκάζει» να προδιαγράψουµε ένα σύστηµα λογισµικού σε δύο επίπεδα:

• στο επίπεδο της κοινής γλώσσας (LSL), όπου περιέχονται γενικές προδιαγραφές

που είναι ανεξάρτητες από τη γλώσσα υλοποίησης του λογισµικού, και

• στο επίπεδο της γλώσσας υλοποίησης (LIL), το οποίο περιλαµβάνει τις προδια-

γραφές που έχουν αντανακλούν τη συγκεκριµένη γλώσσα στην οποία θα αναπτυ-

χθεί το λογισµικό.

∆όθηκε έµφαση στις προδιαγραφές της κοινής γλώσσας LSL, µέσα από την παρου-

σίαση των τελεστών, των τύπων δεδοµένων και των βασικών δοµών (γνώρισµα,

είδος) που υποστηρίζει η γλώσσα. Εάν δυσκολεύεστε να κατανοήσετε τους µηχανι-

σµούς και την εφαρµογή της γλώσσας, καλύτερα να επαναλάβετε τα παραδείγµατα

και τις δραστηριότητες. Παρ’ όλο που είναι αδύνατο να παρουσιαστεί το συνολικό

εύρος ενός τέτοιου συµβολισµού, η κατανόηση του τρόπου µε τον οποίο αυτός εφαρ-

µόζεται αποτελεί προϋπόθεση, τόσο για τη συνέχεια του τόµου, όσο και για την περαι-

τέρω µελέτη σας.

Όπως είδαµε, η Larch «δανείζεται» πολλά στοιχεία από τις αλγεβρικές και τις αξιω-

µατικές προδιαγραφές, των οποίων αποτελεί έναν αρκετά διαδεδοµένο εκπρόσωπο.

Στο επόµενο κεφάλαιο θα γνωρίσουµε άλλη µια γλώσσα αυτού του είδους, τη VDM.

BÈ‚ÏÈÔÁÚ·Ê›·

[1] J. Guttag, J.J. Horning and J. Wing (1985), The Larch family of specification

languages. IEEE Software 2(5), pp 24 – 36.

[2] J. Guttag and J.J. Horning (1993), Larch: languages and tools for formal

specification.

9 5B I B § I O ° PA º I A

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 95

Page 97: pli42a

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 96

Page 98: pli42a

H Ù˘È΋ ÁÏÒÛÛ· VDM

™ÎÔfi˜

Ο στόχος του κεφαλαίου είναι να σας παρουσιάσει τον τρόπο µε τον οποίο µπορείτε να

προδιαγράψετε τις ιδιότητες ενός λογισµικού χρησιµοποιώντας την τυπική γλώσσα VDM.

¶ÚÔÛ‰ÔÎÒÌÂÓ· ·ÔÙÂϤÛÌ·Ù·

Όταν θα έχετε µελετήσει αυτό το κεφάλαιο, θα µπορείτε να:

• oρίζετε συναρτήσεις VDM µε έµµεσο ή άµεσο τρόπο,

• χρησιµοποιείτε τις τρεις έτοιµες εκφράσεις της VDM,

• γράφετε τα τέσσερα µέρη της προδιαγραφής µιας λειτουργίας VDM,

• χρησιµοποιείτε τους βασικούς τύπους δεδοµένων της VDM,

• ορίζετε σύνθετους τύπους χρησιµοποιώντας την κατασκευαστική συνάρτηση,

• ορίζετε σύνθετους τύπους χρησιµοποιώντας τις απεικονίσεις και τους σχετικούς

τελεστές,

• ορίζετε σύνθετους τύπους χρησιµοποιώντας τα πολυ – σύνολα και τους σχετικούς

τελεστές,

• ορίζετε σύνθετους τύπους χρησιµοποιώντας τις ακολουθίες και τους σχετικούς τελεστές.

ŒÓÓÔȘ ÎÏÂȉȿ

6∫ ∂ º ∞ § ∞ π √

• έµµεσος/άµεσος ορισµός συνάρτησης

• βασικός/σύνθετος τύπος δεδοµένων

• κατασκευαστική συνάρτηση

• επιλογείς

• πολυ σύνολο

• ακολουθία

• συνένωση

• λειτουργία

• προ–συνθήκη

• µετα–συνθήκη

• αναλλοίωτο τύπου δεδοµένων

• απεικόνιση

• προσαρµογή

• περιορισµός

∂ÈÛ·ÁˆÁÈΤ˜ ·Ú·ÙËÚ‹ÛÂȘ

Η τυπική γλώσσα προδιαγραφών VDM (Jones[90a]) είναι τµήµα µιας ολόκληρης

µεθοδολογίας ανάπτυξης λογισµικού, γνωστής ως Vienna Development Method. Πρό-

κειται για µία γλώσσα περιγραφής µοντέλων της συµπεριφοράς του λογισµικού, η

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 97

Page 99: pli42a

9 8 K E º A § A I O 6 : H ∆ À ¶ π ∫ ∏ ° § ø ™ ™ ∞ V D M

οποία βασίζεται στον κατηγορηµατικό λογισµό πρώτης τάξης (first – order predicate

calculus), ενώ υιοθετεί στοιχεία από τις συναρτήσεις και τη θεωρία συνόλων.

Μία προδιαγραφή γραµµένη σε VDM έχει συνήθως τέσσερα µέρη:

• εξισώσεις τύπων, µε τις οποίες ορίζονται τα ονόµατα νέων τύπων χρησιµοποιώ-

ντας εκφράσεις που περιέχουν άλλους τύπους που έχουν ήδη ορισθεί,

• σύνθετα αντικείµενα (αλλιώς λέγονται «τύποι εγγραφών»),

• συναρτήσεις, οι οποίες δέχονται κάποιες παραµέτρους και επιστρέφουν αποτελέ-

σµατα,

• λειτουργίες, οι οποίες δέχονται µεν παραµέτρους και επιστρέφουν αποτελέσµατα,

αλλά έχουν πρόσβαση και στην αναπαράσταση της κατάστασης του λογισµικού.

Στη συνέχεια του κεφαλαίου θα µελετήσουµε τον τρόπο µε τον οποίο η γλώσσα VDM µας

επιτρέπει να γράψουµε καθένα από τα µέρη αυτά. Αρχίζουµε από τις συναρτήσεις (ενό-

τητα 6.1), τις έτοιµες εκφράσεις (ενότητα 6.2) και τις µερικές συναρτήσεις (ενότητα 6.3),

όπου παρουσιάζονται οι επεκτάσεις της κλασικής λογικής που χρησιµοποιεί η VDM. Στην

ενότητα 6.4 παρουσιάζονται οι λειτουργίες ως συναρτήσεις µε εσωτερική κατάσταση.

Η προδιαγραφή µιας λειτουργίας (και κατ’ επέκταση, ενός λογισµικού σαν ένα σύνο-

λο αλληλεπιδρωσών λειτουργιών) απαιτεί την προδιαγραφή των τύπων των δεδοµέ-

νων τα οποία αυτή µεταχειρίζεται. Στην ενότητα 6.5 παρουσιάζονται οι βασικοί τύποι

δεδοµένων που υποστηρίζει η VDM, αλλά και απλοί τρόποι περιγραφής σύνθετων

τύπων δεδοµένων. Στη συνέχεια (ενότητα 6.6) περιγράφεται ο τρόπος προδιαγραφής

σύνθετων τύπων δεδοµένων (εγγραφών) µε τη χρήση της κατασκευαστικής συνάρτη-

σης.

Οι επόµενες ενότητες παρουσιάζουν τρόπους προδιαγραφής σύνθετων τύπων δεδοµέ-

νων µε τη χρήση απεικονίσεων και πολυ–συνόλων (ενότητα 6.7) και ακολουθιών (ενό-

τητα 6.8), µαζί µε τους ειδικούς τελεστές VDM που χρησιµοποιούνται κατά περίπτωση.

Η VDM είναι µια «στρυφνή» γλώσσα τυπικών προδιαγραφών, η οποία όµως γνωρί-

ζει µεγάλη διάδοση, καθώς έχει αποδείξει την αξία της στην προδιαγραφή µεγάλων

συστηµάτων. Το κεφάλαιο θα σας φέρει σε µια πρώτη επαφή µε τη γλώσσα, την οποία

µπορείτε να «κατακτήσετε» µόνο µέσα από τη συνεχή εφαρµογή σε πραγµατικά προ-

βλήµατα. Προς την κατεύθυνση αυτή λειτουργεί το πλήθος από παραδείγµατα, ασκή-

σεις και δραστηριότητες, που περιλαµβάνει το κεφάλαιο. Όλα αυτά, βέβαια, χρειά-

ζονται προσεκτική και επίµονη µελέτη, καθώς µερικά είναι αρκετά δύσκολα. Σε καµία

περίπτωση δεν πρέπει να απογοητευθείτε και να εγκαταλείψετε την προσπάθεια. Σας

συµβουλεύω να επιχειρήσετε να απαντήσετε σε όλες τις ασκήσεις και τις δραστηριό-

τητες πριν µελετήσετε τη δική µας απάντηση (η οποία δεν είναι η µόνη σωστή στην

περίπτωση των δραστηριοτήτων).

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 98

Page 100: pli42a

6.1 ™˘Ó·ÚÙ‹ÛÂȘ

Η προδιαγραφή µιας συνάρτησης αποτελείται από τέσσερα τµήµατα (Fields[92]):

• το τµήµα όπου δηλώνεται το όνοµα και η υπογραφή της συνάρτησης,

• το κυρίως τµήµα, όπου περιγράφονται οι υπολογισµοί που εκτελεί η συνάρτηση

στα δεδοµένα εισόδου και το αποτέλεσµα που παράγει,

• το τµήµα pre, όπου αναγράφονται οι προ–συνθήκες, οι οποίες περιγράφουν τις

συνθήκες που πρέπει να ισχύουν για να εκτελεστεί σωστά η συνάρτηση,

• το τµήµα post, όπου αναγράφονται οι µετα–συνθήκες, οι οποίες περιγράφουν το

αποτέλεσµα της συνάρτησης.

Γενικά, η VDM υποστηρίζει δύο τρόπους ορισµού µιας συνάρτησης:

• τον έµµεσο ορισµό, µε τον οποίο περιγράφεται η συµπεριφορά της συνάρτησης πριν

και µετά την εκτέλεσή της, χρησιµοποιώντας προ–συνθήκες και µετα–συνθήκες,

• τον άµεσο ορισµό, µε τον οποίο περιγράφεται ο τρόπος υπολογισµού του αποτε-

λέσµατος της συνάρτησης, χρησιµοποιώντας εξισώσεις.

Από τους δύο αυτούς τρόπους, προτιµάται ο έµµεσος ορισµός των συναρτήσεων για

διάφορους λόγους: οι προδιαγραφές είναι περισσότερο συµπαγείς, δεν µας δεσµεύ-

ει ως προς την υλοποίηση της συνάρτησης, επιτρέπει τον ορισµό ενός συνόλου απο-

δεκτών αποτελεσµάτων της συνάρτησης, κ.λπ.

¶·Ú¿‰ÂÈÁÌ· 6.1

Η ακόλουθη συνάρτηση δέχεται ένα σύνολο φυσικών αριθµών και επιστρέφει τον

µεγαλύτερο από αυτούς:

maxs (s: Õ – set) r: Õ

pprree s ≠ ∆

ppoosstt r Œ s Ÿ " i Œ s ◊ i £ r

Παρατηρήστε ότι έχουµε παραλείψει το κυρίως τµήµα της συνάρτησης, αφού προ-

τιµήσαµε την έµµεση προδιαγραφή της, χρησιµοποιώντας προ – και µετα – συνθή-

κες. Μόνο οι τιµές των παραµέτρων εισόδου µπορεί να εµφανίζονται στις προ – συν-

θήκες, ενώ οι µετα – συνθήκες µπορεί να αναφέρονται και στο αποτέλεσµα. Οι αντί-

στοιχες υπογραφές είναι:

9 96 . 1 ™ À ¡ ∞ ƒ ∆ ∏ ™ ∂ π ™

[1] Τα παραδείγµατα και οι ασκήσεις του κεφαλαίου προέρχονται από ή βασίζονται σε υλικό που

περιέχεται στα Jones[90a], Jones[90b], Jones[90c].

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 99

Page 101: pli42a

1 0 0 K E º A § A I O 6 : H ∆ À ¶ π ∫ ∏ ° § ø ™ ™ ∞ V D M

pre – maxs: Õ – set # B

post – maxs: Õ – set x Õ # B

Ας θεωρήσουµε τώρα µία συνάρτηση, η οποία επιστρέφει το µεγαλύτερο από δύο

ακέραιους αριθµούς. Στη συνέχεια δίνεται η έµµεση και η άµεση προδιαγραφή της:

Έµµεση

max (i: Ÿ, j: Ÿ) r:Ÿ

ppoosstt (r = i ⁄ r = j) Ÿ

i ≤ r Ÿ j ≤ r

Άµεση

max (i: Ÿ, j: Ÿ) # Ÿ

max(i, j) ¢ if i ≤ j then j else i

Παρατηρούµε ότι το τµήµα pre της έµµεσης προδιαγραφής λείπει. Αυτό σηµαίνει ότι δεν

υπάρχουν περιορισµοί για την εκτέλεση της συνάρτησης (είναι ισοδύναµο µε pre Τ).

Στην άµεση προδιαγραφή παρατηρήστε ότι δεν αναφέρονται συνθήκες, αφού περι-

γράφουµε ρητά τον υπολογισµό του αποτελέσµατος. Όταν ορίζουµε τον τρόπο µε

τον οποίο µία συνάρτηση υπολογίζει ένα αποτέλεσµα, χρησιµοποιούµε τον τελεστή

«D», ειδικά για να µπορούµε να διαχωρίσουµε ανάµεσα σε µία εξίσωση που περι-

γράφει ορισµό και σε µία άλλη που περιγράφει ισότητα.

ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 6.1

Προσπαθήστε να:

α) προδιαγράψετε έµµεσα τη συνάρτηση mod για θετικούς ακέραιους αριθµούς,

β) προδιαγράψετε έµµεσα και άµεσα τη συνάρτηση double, η οποία διπλασιάζει

τον ακέραιο που δέχεται στην είσοδό της,

γ) προδιαγράψετε άµεσα τη συνάρτηση F – to – C µετατροπής βαθµών Φαρενάιτ

σε βαθµούς Κελσίου.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 100

Page 102: pli42a

6.2 ŒÙÔÈ̘ ÂÎÊÚ¿ÛÂȘ

Η γλώσσα VDM συµπεριλαµβάνει έναν αριθµό από εκφράσεις, η καθεµία από τις

οποίες αποτελεί «συντοµογραφία» ενός συνόλου εξισώσεων. Ανάµεσα σε αυτές είναι

(Πίνακας 6.1) οι εξής:

• H έκφραση της επιλογής υπό συνθήκη, η οποία έχει τιµή T όταν c = T, F όταν

c = F και undefined όταν c = undefined,

• H έκφραση της πολλαπλής επιλογής υπό συνθήκη, όπου η έκφραση Ε είναι στοι-

χείο ενός τύπου ένωσης, οι εκφράσεις pati συµπεριλαµβάνουν συναρτήσεις δηµι-

ουργίας, ενώ η τιµή της έκφρασης είναι Ε1, αν η Ε ταιριάζει µε την pat1, Ε2, αν η

Ε ταιριάζει µε την pat2, κ.λπ. Εάν η Ε δεν ταιριάζει µε καµία pati, η τιµή της

έκφρασης είναι Ο,

• H έκφραση αντικατάστασης, µε την οποία στην έκφραση Κ, κάθε εµφάνιση της

µεταβλητής v (ή ενός συνόλου µεταβλητών, στη δεύτερη περίπτωση) αντικαθί-

σταται από την έκφραση E.

¶›Ó·Î·˜ 6.1

Οι σύνθετες εκφράσεις που παρέχει η VDM

1 0 16 . 3 M ∂ ƒ π ∫ ∂ ™ ™ À ¡ ∞ ƒ ∆ ∏ ™ ∂ π ™

Επιλογή υπό συνθήκη if c then x else y

Πολλαπλή επιλογή υπό συνθήκη cases E of

pat1 # E1

pat2 # E2

others O

end

Αντικατάσταση let v = E in K

let v ΠE in K

6.3 MÂÚÈΤ˜ Û˘Ó·ÚÙ‹ÛÂȘ

Μία ολική συνάρτηση δίνει ένα αποτέλεσµα που ανήκει στο πεδίο τιµών της για κάθε

τιµή που ανήκει στο πεδίο ορισµού της, όπως αυτά περιγράφονται στην υπογραφή της.

Υπάρχουν όµως συναρτήσεις, οι οποίες δεν δίνουν πάντα κάποια τιµή για κάθε στοι-

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 101

Page 103: pli42a

1 0 2 K E º A § A I O 6 : H ∆ À ¶ π ∫ ∏ ° § ø ™ ™ ∞ V D M

χείο του πεδίου ορισµού τους. Οι συναρτήσεις αυτές λέγονται «µερικές συναρτή-

σεις» (partial functions) και είναι ιδιαίτερα χρήσιµες όταν θέλουµε να περιγράψου-

µε τη συµπεριφορά προγραµµάτων.

Οι µερικές συναρτήσεις ξεχωρίζουν επειδή αναγκαζόµαστε να χρησιµοποιήσουµε

προ – συνθήκες για να περιγράψουµε το υποσύνολο του πεδίου ορισµού για το οποίο

αυτές δίνουν κάποια τιµή. Μπορούµε τότε να θεωρήσουµε ότι για το υποσύνολο

αυτό, η µερική συνάρτηση συµπεριφέρεται ως ολική.

Τι γίνεται όµως µε τις υπόλοιπες τιµές του πεδίου ορισµού; Ποια λογική τιµή παίρ-

νει µία εξίσωση που περιλαµβάνει µία µερική συνάρτηση, η οποία εφαρµόζεται σε

µία τιµή του πεδίου ορισµού που δεν ικανοποιεί την προ – συνθήκη της; Τεχνικά, η

τιµή που επιστρέφει η µερική συνάρτηση για κάθε τέτοια τιµή είναι µη ορισµένη

(undefined). Αν και µία τέτοια περίπτωση ίσως δεν παρουσιάζει ενδιαφέρον από

µαθηµατική σκοπιά (αφού µπορούµε να θεωρήσουµε ότι η τιµή µιας λογικής εξί-

σωσης είναι πάντα T, όταν η προϋπόθεση είναι F και ανεξάρτητα από την τιµή της

συνέπειας), εν τούτοις, από προγραµµατιστική σκοπιά, θέλουµε να γνωρίζουµε τη

συµπεριφορά του προγράµµατός µας όταν εκτελείται µε µη ορθά δεδοµένα.

Για να καλυφθεί το κενό που παρουσιάζει ο προτασιακός λογισµός στην περίπτωση

µη ορισµένων τιµών των λογικών εξισώσεων, επεκτείνουµε τους πίνακες αλήθειας

των λογικών τελεστών, ώστε να συµπεριλάβουν και την τιµή “*”, η οποία δεν απο-

τελεί νέα τιµή, αλλά στην πραγµατικότητα σηµαίνει «απουσία τιµής». Οι προκύ-

πτοντες πίνακες αλήθειας για τους πέντε βασικούς λογικούς τελεστές φαίνονται στον

Πίνακα 6.2, ο οποίος επεκτείνει τον Πίνακα 3.2.

¶›Ó·Î·˜ 6.2

Επέκταση των πινάκων αλήθειας

P Q ÿ P P Ÿ Q P ⁄ Q P fi Q P ¤ Q

T T F T T T T

T F F F T F F

T * F * T * *

F T T F T T F

F F T F F T T

F * T F * T *

* T * * T T *

* F * * * * *

* * * F * * *

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 102

Page 104: pli42a

6.4 §ÂÈÙÔ˘ÚÁ›Â˜

Εάν σε µία συνάρτηση, όπως έχει παρουσιαστεί ως τώρα, προσθέσουµε την έννοια

της «κατάστασης», τότε αυτή µετατρέπεται σε λειτουργία (operation). Οι λειτουρ-

γίες είναι κατάλληλες για την αναπαράσταση προγραµµάτων, ενώ οι συναρτήσεις

απλά αναπαριστούν ένα προκαθορισµένο τρόπο παραγωγής της εξόδου από την είσο-

δό τους. Η κατάσταση µιας λειτουργίας αναπαρίσταται ως µία συλλογή εξωτερικών

µεταβλητών, την τιµή των οποίων αυτή µπορεί να διαβάσει ή να τροποποιήσει.

Η προδιαγραφή µιας λειτουργίας αποτελείται από τέσσερα µέρη:

• την κεφαλίδα, όπου δηλώνεται το όνοµα της λειτουργίας, τα ονόµατα και οι τύποι

των παραµέτρων εισόδου και (προαιρετικά) τα ονόµατα και οι τύποι των αποτε-

λεσµάτων,

• το τµήµα ext, όπου δηλώνονται οι εξωτερικές (µη τοπικές) µεταβλητές, τις οποί-

ες η λειτουργία µπορεί να διαβάσει (rd) ή να γράψει (wr),

• το τµήµα pre, όπου δηλώνεται µία προ–συνθήκη στην αρχική κατάσταση και τις

παραµέτρους εισόδου της λειτουργίας, και

• το τµήµα post, όπου µε µία µετα–συνθήκη περιγράφεται τι ισχύει µετά την εκτέ-

λεση της λειτουργίας. Η µετά συνθήκη µπορεί να εφαρµόζεται στις παραµέτρους

εισόδου, στα αποτελέσµατα, στην αρχική και την τελική κατάσταση.

Σηµειώστε ότι:

• εάν µια λειτουργία έχει µόνο δυνατότητα ανάγνωσης µιας εξωτερικής µεταβλη-

τής s, αυτή αναφέρεται ως s σε ολόκληρη την προδιαγραφή της λειτουργίας,

• εάν µία λειτουργία έχει και δυνατότητα τροποποίησης µιας εξωτερικής µεταβλη-

τής s, η κατάστασή της πριν την εκτέλεση της λειτουργίας (παλιά κατάσταση)

αναφέρεται ως και η κατάστασή της µετά την εκτέλεση της λειτουργίας (νέα

κατάσταση) αναφέρεται ως s.

¶·Ú¿‰ÂÈÁÌ· 6.2

Θα περιγράψουµε µια απλή αριθµοµηχανή, η οποία διαθέτει ένα εσωτερικό κατα-

χωρητή, όπου αποθηκεύεται ένας φυσικός αριθµός. Θα προδιαγράψουµε τις εξής

λειτουργίες: καταχώρηση ενός αριθµού στον καταχωρητή, εµφάνιση των περιεχο-

µένων του καταχωρητή, πρόσθεση ενός αριθµού στον αριθµό που περιέχει ο κατα-

χωρητής και διαίρεση των περιεχοµένων του καταχωρητή µε έναν αριθµό. Η τιµή

του καταχωρητή reg αποτελεί την εξωτερική κατάσταση στην οποία έχουν πρόσβα-

ση αυτές οι λειτουργίες.

ws

1 0 36 . 4 § ∂ π ∆ √ À ƒ ° π ∂ ™

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 103

Page 105: pli42a

1 0 4 K E º A § A I O 6 : H ∆ À ¶ π ∫ ∏ ° § ø ™ ™ ∞ V D M

LOAD (x: Õ) ADD (x: Õ)

EExxtt wr reg: Õ eexxtt wr reg: Õ

PPoosstt reg = x ppoosstt reg = + x

SHOW ( ) r: Õ DIVIDE (d: Õ) r: Õ

EExxtt rd reg: Õ eexxtt wr reg: Õ

PPoosstt r = pprree d ≠ 0

ppoosstt d * r + reg = Ÿ reg < d

Παρατηρήστε τα εξής:

• ∆ηλώνουµε το είδος της προσπέλασης που έχει µία λειτουργία στις εξωτερικές

µεταβλητές µε τις λέξεις rd (ανάγνωση µόνο) και wr (ανάγνωση και τροποποίη-

ση). Συνεπώς, όλες οι λειτουργίες, εκτός της SHOW, έχουν δικαίωµα ανάγνωσης

και τροποποίησης της reg.

• Oι µετα–συνθήκες είναι λογικές εξισώσεις και όχι εντολές καταχώρισης τιµών.

regw

regw

regw

ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 6.2

Νοµίζετε ότι η ακόλουθη προδιαγραφή της λειτουργίας SHOW είναι σωστή; Γιατί;

SHOW ( ) r: Õ

eexxtt rd reg: Õ

ppoosstt r = reg

¢Ú·ÛÙËÚÈfiÙËÙ· 6.1

Προσπαθήστε να προδιαγράψετε τη λειτουργία της ακέραιης διαίρεσης IDIVIDE.

Ο ακέραιος διαιρετέος m βρίσκεται στον καταχωρητή, ενώ η λειτουργία διαβάζει

τον ακέραιο διαιρέτη n στην είσοδο και γράφει το ακέραιο πηλίκο Q στην έξοδο,

ενώ το υπόλοιπο γράφεται, µετά το τέλος της λειτουργίας, στον καταχωρητή. Εφαρ-

µόστε περιορισµούς στις τιµές των m και n. Μη χρησιµοποιείτε διαίρεση ή τον

τελεστή mod στην µετα – συνθήκη. Αφού γράψετε την προδιαγραφή, να τη συγκρί-

νετε µε τη δική µας πρόταση που ακολουθεί.

Η ζητούµενη προδιαγραφή είναι η ακόλουθη:

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 104

Page 106: pli42a

6.5 AÏÔ› Î·È Û‡ÓıÂÙÔÈ Ù‡ÔÈ ‰Â‰Ô̤ӈÓ

Στη VDM θεωρούµε ότι ένας τύπος δεδοµένων χαρακτηρίζει ένα είδος συµπεριφοράς.

Ως «συµπεριφορά» θεωρούµε τη σχέση ανάµεσα στα αποτελέσµατα των τελεστών

που είναι δυνατό να εφαρµοστούν στον τύπο δεδοµένων. Με τον τρόπο αυτό, µια τιµή

ενός σύνθετου τύπου µπορεί να αναλυθεί σε τιµές άλλων, περισσότερο βασικών τύπων.

Συνεπώς, εάν γνωρίζουµε πλήρως τη συµπεριφορά ενός τύπου δεδοµένων, µπορού-

µε να τον χρησιµοποιήσουµε χωρίς να χρειάζεται να γνωρίζουµε τον τρόπο µε τον

οποίο υλοποιείται αυτή η συµπεριφορά. Μια διάκριση των τύπων δεδοµένων είναι

ανάµεσα σε συναρτησιακούς (functional) και κατασταστικούς (state – based). Οι

πρώτοι επιστρέφουν αποτελέσµατα που βασίζονται αποκλειστικά στα ορίσµατά τους,

ενώ τα αποτελέσµατα που επιστρέφουν οι τελευταίοι εξαρτώνται και από την κατά-

σταση του συστήµατος.

Η προδιαγραφή του µοντέλου ενός καταστατικού τύπου περιλαµβάνει:

• τον ορισµό του συνόλου των δυνατών καταστάσεων,

• το σύνολο των αρχικών καταστάσεων (συνήθως είναι µια), και

• ένα σύνολο λειτουργιών, των οποίων οι εξωτερικές µεταβλητές είναι τµήµατα της

κατάστασης.

Σε ένα καταστατικό τύπο δεδοµένων, το ιστορικό των λειτουργιών συνεισφέρει στην

αναπαράσταση της συµπεριφοράς, η οποία αποτελεί και την ουσία του τύπου. Όµως,

ο χρήστης ενός τύπου δεν ενδιαφέρεται για εσωτερικές λεπτοµέρειες που δεν επι-

δρούν στην παρατηρήσιµη συµπεριφορά του τύπου: οι λεπτοµέρειες που δεν γίνο-

νται ορατές µέσω λειτουργιών πρέπει να αγνοούνται.

6.5.1 B·ÛÈÎÔ› Ù‡ÔÈ

Η VDM περιλαµβάνει ένα σύνολο βασικών τύπων (Πίνακας 6.3). Για τους τύπους

αυτούς, υπάρχουν καλά ορισµένες λειτουργίες.

1 0 56 . 5 A ¶ § √ π ∫ ∞ π ™ À ¡ £ ∂ ∆ √ π ∆ À ¶ √ π ¢ ∂ ¢ √ ª ∂ ¡ ø ¡

IDIVIDE (n: Ÿ) q: Ÿ

eexxtt wr m: Ÿ

pprree m ≥ 0 Ÿ n > 0

ppoosstt q * n + m = Ÿ 0 ≤ m < n wm

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 105

Page 107: pli42a

1 0 6 K E º A § A I O 6 : H ∆ À ¶ π ∫ ∏ ° § ø ™ ™ ∞ V D M

¶›Ó·Î·˜ 6.3

Οι βασικοί τύποι που υποστηρίζει η VDM

Σύµβολο Τύπος Περιγραφή

B Boolean (Λογικός) T, F

Õ Φυσικοί αριθµοί 0, 1, 2, 3,...

Õ1 Μη µηδενικοί φυσικοί 1, 2, 3,...

Ÿ Ακέραιοι αριθµοί ..., – 2, – 1, 0, 1, 2,...

– Ρητοί αριθµοί n / m, όπου m, n Œ Ÿ Ÿ m ≠ 0

Επιπλέον, παρέχεται και η τιµή NIL, η οποία χρησιµοποιείται για την αναπαράστα-

ση συγκεκριµένων λανθασµένων τιµών.

¶·Ú¿‰ÂÈÁÌ· 6.3

Από ξεχωριστά στοιχεία των απλών τύπων µπορούµε να ορίσουµε νέους τύπους, είτε

ως σύνολα στοιχείων

Month = Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec,

είτε απαριθµώντας, απλά, τα στοιχεία

Month = JAN | FEB | MAR | APR | MAY | JUN | JUL | AUG | SEP | OCT | NOV | DEC.

Ο τελευταίος τρόπος ορισµού µπορεί να γενικευθεί ώστε να επιτρέπει τον ορισµό

ενός τύπου ως την ένωση επιµέρους τύπων. Έτσι, εάν ορίσουµε τους δύο τύπους

First – sem = Jan, Feb, Mar, Apr, May, Jun

Second – sem = Jul, Aug, Sep, Oct, Nov, Dec,

τότε µπορούµε να ορίσουµε τον τύπο Month ως

Month = First – sem | Second – sem

6.5.2 OÚÈÛÌfi˜ Ù‡ˆÓ ·fi Û‡ÓÔÏ·

Η VDM παρέχει τον τελεστή «X – set», µε τον οποίο µπορούµε να ορίσουµε τον

τύπο που περιλαµβάνει πεπερασµένα σύνολα στοιχείων του τύπου Χ (ο Χ είναι

κάποιος βασικός τύπος ή µια έκφραση περιγραφής ενός τύπου). Στους τύπους που

έχουν οριστεί µε τον τρόπο αυτό επιτρέπεται η εφαρµογή όλων των τελεστών που

παρέχει η θεωρία συνόλων.

Με παρόµοιο τρόπο, µπορούµε να ορίσουµε ένα νέο τύπο T ως το καρτεσιανό γινό-

µενο A ¥ B δύο άλλων τύπων A και B. Τότε, ορίζουµε και τις συναρτήσεις:

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 106

Page 108: pli42a

• fst: A ¥ B # A, η οποία επιστρέφει το πρώτο στοιχείο του ζεύγους, και

• snd: A ¥ B # B, η οποία επιστρέφει το δεύτερο στοιχείο του ζεύγους

Εύκολα µπορούµε να γενικεύσουµε τον ορισµό αυτό και σε τύπους που ορίζονται

ως το καρτεσιανό γινόµενο περισσότερων από δύο άλλων τύπων. Έτσι, εάν T = A ¥B ¥ C, τότε ισοδύναµα θεωρούµε ότι T = A ¥ (B ¥ C).

¶·Ú¿‰ÂÈÁÌ· 6.4

Έστω ότι θέλουµε να ορίσουµε τον τύπο Date, ο οποίος περιέχει την ηµέρα, το µήνα

και το έτος µιας ηµεροµηνίας. Ο τύπος αυτός γράφεται

Date = Õ1 ¥ Month ¥ Õ,

και ένα στοιχείο του είναι το

(12, SEP, 1999)

1 0 76 . 5 A ¶ § √ π ∫ ∞ π ™ À ¡ £ ∂ ∆ √ π ∆ À ¶ √ π ¢ ∂ ¢ √ ª ∂ ¡ ø ¡

¢Ú·ÛÙËÚÈfiÙËÙ· 6.2

Ο Βύρων έχει δηµιουργήσει µια βάση δεδοµένων µε τα ατοµικά στοιχεία κάθε

υπαλλήλου της CHILDWARE. Μέσα σε αυτά περιλαµβάνεται το φύλο και η οικο-

γενειακή κατάσταση. Μπορείτε να θεωρήσετε ότι οι υπάλληλοι χωρίζονται σε δύο

υποσύνολα (male, female) ενώ το σύνολο married περιέχει τους έγγαµους. Βοη-

θήστε το Βύρωνα να ορίσει:

• τη λειτουργία MARMALE, η οποία επιστρέφει το σύνολο των έγγαµων ανδρών, και

• τη λειτουργία NEWFEM, η οποία προσθέτει το όνοµα µιας νεοπροσληφθείσας

γυναίκας στη βάση.

Υπόδειξη: Xρησιµοποιήστε το σύνολο Name ως το πρωταρχικό σύνολο των ονο-

µάτων των υπαλλήλων, θεωρώντας ότι κάθε υπάλληλος έχει διαφορετικό όνοµα.

Μια (προτεινόµενη) απάντηση είναι η ακόλουθη:

MARMALE ( ) rs: Name–set

eexxtt rd male: Name–set,

rd married: Name–set

ppoosstt rs = male « married

NEWFEM (f: Name)

eexxtt wr female: Name–set,

rd male: Name–set

pprree f œ (female » male)

ppoosstt female = » f femalew

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 107

Page 109: pli42a

1 0 8 K E º A § A I O 6 : H ∆ À ¶ π ∫ ∏ ° § ø ™ ™ ∞ V D M

Παρατηρήστε ότι:

• τα σύνολα male, female, rs και married ορίζονται ως σύνολα του τύπου Name µε

τον τελεστή « – set»,

• πριν προσθέσουµε το όνοµα µιας νέας υπαλλήλου, εξετάζουµε τη βάση µήπως

υπάρχει άλλη (ή άλλος) υπάλληλος µε το ίδιο όνοµα.

6.5.3. ¶ÚÔ·ÈÚÂÙÈο ÛÙÔȯ›·

Είναι πιθανό κάποια από τα στοιχεία ενός τύπου T, που έχει οριστεί ως το καρτε-

σιανό γινόµενο άλλων τύπων Τ1 ¥ T2 ¥ T3 (ή ως σύνθετος τύπος εγγραφών, τους οποί-

ους θα µελετήσουµε στη συνέχεια), να µην είναι «πλήρη»: ίσως η θέση που αντι-

στοιχεί σε κάποιον από τους επιµέρους τύπους (π.χ. T3) να παραµένει µερικές φορές

κενή. Ο τύπος στον οποίο αντιστοιχεί η θέση αυτή καλείται «προαιρετικός»

(optional) και συµβολίζεται ως εξής:

Τ = Τ1 ¥ T2 ¥ [T3]

¶·Ú¿‰ÂÈÁÌ· 6.5

Έστω ότι στη βάση των ατοµικών στοιχείων των υπαλλήλων διατηρούµε και την

ηµεροµηνία γέννησης. Εάν όµως δε γνωρίζουµε την ηµέρα γέννησης κάθε υπαλλή-

λου, πρέπει να ορίσουµε τον τύπο BirthDate ως εξής:

BirthDate = [Day] ¥ Month ¥ Year

Τότε, τα στοιχεία

(14, Aug, 1967) Î·È (NIL, Oct, 1921)

είναι δυνατό να ανήκουν στη βάση. Παρατηρήστε ότι στη θέση της τιµής που λείπει

έχουµε προσθέσει την τιµή NIL.

6.6 ™‡ÓıÂÙÔÈ Ù‡ÔÈ ÂÁÁÚ·ÊÒÓ

Ένας σύνθετος τύπος (composite type) αποτελείται από έναν αριθµό πεδίων (σε

κάθε πεδίο καταχωρίζεται µια τιµή) και δηµιουργείται µε τη χρήση µιας κατασκευ-

αστικής συνάρτησης (make function). Όταν αυτή εφαρµοστεί σε κατάλληλες τιµές

για ένα πεδίο, επιστρέφει µια τιµή του σύνθετου τύπου.

Μια κατασκευαστική συνάρτηση σχετίζεται αποκλειστικά µε έναν τύπο: δεν είναι

ποτέ δυνατό δύο διαφορετικές κατασκευαστικές συναρτήσεις να επιστρέψουν την

ίδια τιµή. Ακόµη, η ίδια κατασκευαστική συνάρτηση επιστρέφει διαφορετικό απο-

τέλεσµα (σύνθετη τιµή) για διαφορετικά ορίσµατα.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 108

Page 110: pli42a

Για να προσπελάσουµε την τιµή ενός πεδίου, χρησιµοποιούµε τους επιλογείς

(selectors), οι οποίοι είναι συναρτήσεις που όταν εφαρµοστούν στην τιµή ενός σύν-

θετου τύπου, επιστρέφουν την τιµή ενός από τα πεδία του.

Πολλές φορές χρειάζεται να τροποποιήσουµε την τιµή ενός µόνο πεδίου από ένα σύν-

θετο τύπο, αφήνοντας τις ίδιες τιµές στα άλλα πεδία. Αντί να χρησιµοποιήσουµε την

κατασκευαστική συνάρτηση, προτιµούµε να χρησιµοποιήσουµε τον τελεστή µ.

¶·Ú¿‰ÂÈÁÌ· 6.6

Θα περιγράψουµε τώρα τον τύπο Date, ως ένα σύνθετο τύπο του οποίου το πρώτο

πεδίο περιγράφει µια ηµέρα, το δεύτερο ένα µήνα και το τρίτο ένα έτος:

ccoommppoossee Date ooff

day: Õ1,

month: Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep,

Oct, Nov, Dec,

year: Õ

eenndd

Το αντίστοιχο σύνολο αντικειµένων ορίζεται από την κατασκευαστική συνάρτηση

mk–Date(d, m, y) | d Œ Õ1 Ÿ m ŒJan, Feb, Mar, Apr, May,Jun, Jul, Aug, Sep, Oct, Nov, Dec Ÿ y Œ Õ

Η κατασκευαστική συνάρτηση έχει την υπογραφή

mk–Date: Õ1 ¥ Jan, Feb, Mar, Apr, May, Jun, Jul, Aug,

Sep, Oct, Nov, Dec ¥ Õ # Date

Οι επόµενοι δύο τρόποι ορισµού είναι ισοδύναµοι µε τον πρώτο:

Date:: day: Õ1

month: Jan, Feb, Mar, Apr, May, Jun, Jul, Aug,

Sep, Oct, Nov, Dec

year: Õ

Date:: day: Day

month: Month

year: Year

1 0 96 . 6 ™ À ¡ £ ∂ ∆ √ π ∆ À ¶ √ π ∂ ° ° ƒ∞ º ø ¡

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 109

Page 111: pli42a

1 1 0 K E º A § A I O 6 : H ∆ À ¶ π ∫ ∏ ° § ø ™ ™ ∞ V D M

Day = Õ1

Month = Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep,

Oct, Nov, Dec

Year = Õ

Οι επιλογείς, τους οποίους µπορούµε να συσχετίσουµε µε τον σύνθετο τύπο Date για

να επιστρέφουν την τιµή του κάθε πεδίου του είναι

day: Date # Õ1

month: Date # Month

year: Date # Õ

Εάν, λοιπόν, d = mk – Date(21, Sep, 1999), ένα παράδειγµα εφαρµογής τους είναι

το εξής:

day(d) = 21

month(d) = Sep

year(d) = 1999

Έστω ότι θέλουµε να αυξήσουµε κατά ένα την ηµέρα του d. Μπορούµε να χρησι-

µοποιήσουµε την κατασκευαστική συνάρτηση

mk–Date(day(d) + 1, month(d), year(d))

ή τον τελεστή

Ì(d, day # day(d) + 1).

Και στις δύο περιπτώσεις το αποτέλεσµα είναι mk – Date(22, Sep, 1999). Με τη

χρήση του τελεστή µ, η έκφραση είναι περισσότερο συγκροτηµένη, χωρίς να χρειά-

ζεται να επαναλάβουµε όλα τα πεδία του τύπου.

6.6.1 AÓ·ÏÏÔ›ˆÙÔ Ù‡Ô˘

Η VDM µας επιτρέπει να ορίσουµε υπο – τύπους κάποιου τύπου δεδοµένων T, δια-

λέγοντας εκείνα τα αντικείµενα του T που ικανοποιούν µια ιδιότητα. Για το σκοπό

αυτό µπορούµε να χρησιµοποιήσουµε µια έκφραση η οποία περιγράφει το

αναλλοίωτο του τύπου T (type invariant).

¶·Ú¿‰ÂÈÁÌ· 6.7

Στον ορισµό του τύπου Date δεν έχουµε επιβάλει κανένα περιορισµό, µε αποτέλε-

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 110

Page 112: pli42a

σµα να επιτρέπονται στοιχεία όπως (48, Jul, 1845), (29, Feb, 1987), κ.ά., τα οποία

είναι προφανώς λανθασµένα. Ορίζουµε λοιπόν, τον τύπο Correct – Date, ως εξής:

Correct – Date:: day: Õ1,

month: Month,

year: Year

iinnvv if month ΠApr, Jun, Nov, Sep then

day ≤ 30

else

if month = Feb then

if IsLeapYear(year) then

day ≤ 29

else

day ≤ 28

else

day ≤ 31

όπου IsLeapYear είναι µια λογική συνάρτηση.

Το τµήµα inv περιορίζει τις ορθές τιµές των πεδίων: τα στοιχεία που δεν ικανοποι-

ούν το αναλλοίωτο απλά δεν ανήκουν στον τύπο.

1 1 16 . 6 ™ À ¡ £ ∂ ∆ √ π ∆ À ¶ √ π ∂ ° ° ƒ∞ º ø ¡

¢Ú·ÛÙËÚÈfiÙËÙ· 6.3

Ο Βύρων θέλει να προδιαγράψει µια λειτουργία, η οποία θα χειρίζεται τον αριθµό

του γραφείου ενός υπαλλήλου. Για το σκοπό αυτό χρειάζεται να ορίσει ένα σύν-

θετο τύπο δεδοµένων, ο οποίος θα ικανοποιεί τους εξής περιορισµούς:

• Tο κτίριο της επιχείρησης CHILDWARE αποτελείται από τέσσερις ορόφους και

το ισόγειο,

• το ισόγειο περιλαµβάνει δύο µεγάλους χώρους µόνο,

• σε κάθε όροφο περιλαµβάνονται το πολύ 28 χώροι, οι οποίοι αριθµούνται από

1 έως 28,

• σε κάθε τρία γραφεία αντιστοιχεί και ένας κοινόχρηστος χώρος,

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 111

Page 113: pli42a

1 1 2 K E º A § A I O 6 : H ∆ À ¶ π ∫ ∏ ° § ø ™ ™ ∞ V D M

Ο σύνθετος τύπος RoomNo αποτελείται από δύο πεδία: το πεδίο floor, το οποίο περι-

γράφει τον όροφο και το πεδίο office, το οποίο περιγράφει το γραφείο. Ορίζεται λοι-

πόν, ως εξής:

RoomNo:: floor: 0,…, 4,

office: 1,…, 28

Η κατασκευαστική συνάρτηση για αντικείµενα του τύπου έχει την υπογραφή:

mk–RoomNo: Õ ¥ Õ1 # RoomNo

Το αναλλοίωτο του τύπου, µε το οποίο περιγράφονται οι περιορισµοί που ισχύουν

για τα αντικείµενα του τύπου, είναι το ακόλουθο:

iinnvv (mk–RoomNo(floor, office)) ¢

(if floor = 0 then office = 0 ⁄ office = 1) Ÿ(office MOD 4 ≠ 0) Ÿ (if floor = 4 then

is–even(office))

6.7 AÂÈÎfiÓÈÛË

Μια απεικόνιση (map) αναπαριστά κάποιου είδους συσχέτιση ανάµεσα σε ένα ζεύ-

γος τιµών. Οι απεικονίσεις µοιάζουν µε τις συναρτήσεις στο ότι ορίζουν ένα τρόπο

αντιστοίχησης των στοιχείων ενός συνόλου (πεδίο ορισµού) στα στοιχεία ενός άλλου

συνόλου (πεδίο τιµών). ∆ιαφέρουν όµως από αυτές στον τρόπο ορισµού της αντι-

στοίχησης:

• Oι συναρτήσεις χρησιµοποιούν για τον υπολογισµό του πεδίου τιµών µια γενική

έκφραση, η τιµή της οποίας υπολογίζεται για κάθε στοιχείο του πεδίου ορισµού.

• Oι απεικονίσεις επιτρέπουν την απλή καταγραφή των ζευγών που περιλαµβάνουν,

οπότε η εύρεση µιας τιµής απαιτεί απλή αναζήτηση.

¶·Ú¿‰ÂÈÁÌ· 6.8

Ας δούµε δύο τρόπους ορισµού της απεικόνισης που συσχετίζει κάθε ακέραιο αριθµό

• ο τελευταίος όροφος περιλαµβάνει τα διευθυντικά γραφεία, τα οποία έχουν µόνο

άρτιους αριθµούς

Με ποιον τρόπο πρέπει, κατά τη γνώµη σας, ο Βύρων να προδιαγράψει τον τύπο

RoomNo; ∆οκιµάστε να απαντήσετε, πριν µελετήσετε την πρόταση του Βύρωνα.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 112

Page 114: pli42a

του συνόλου 0, …, 4 µε το τετράγωνό του. Πρώτα η απλή καταγραφή των ζευγών

0 # 0, 1 # 1, 2 # 4, 3 # 9, 4 # 16,

και έπειτα ένας περισσότερο συνοπτικός ορισµός

i # i2 Œ Õ ¥ Õ | i Œ 0,..., 4

Στο παράδειγµα είδαµε ότι µια απεικόνιση πρέπει να αντιµετωπίζεται ως ένα πεπε-

ρασµένο σύνολο από διατεταγµένα ζεύγη. Έτσι, η διάταξη των ζευγών µέσα στο

σύνολο δεν έχει σηµασία. Για να είναι δυνατό να χρησιµοποιηθεί για ένα τέτοιο

σύνολο συµβολισµός παρόµοιος µε αυτόν των συναρτήσεων, επιβάλλουµε τον περιο-

ρισµό ότι δεν επιτρέπεται να υπάρχουν δύο ζεύγη που έχουν το ίδιο πρώτο (αριστε-

ρό) στοιχείο. Με άλλα λόγια, µια απεικόνιση ορίζει µια συσχέτιση του πεδίου ορι-

σµού µε το πεδίο τιµών.

Συνεπώς, ένας εναλλακτικός τρόπος ορισµού µιας απεικόνισης είναι

x # y | q(x, y),

µε τον περιορισµό ότι η q δεν συσχετίζει δύο διαφορετικές τιµές y µε την ίδια τιµή x.

Η αντίστροφη σχέση µιας πολλά – προς – ένα απεικόνισης δεν είναι απεικόνιση. Για

το λόγο αυτό, ορίζεται και η ένα – προς – ένα απεικόνιση, της οποίας η αντίστρο-

φη σχέση είναι απεικόνιση, στην οποία κάθε στοιχείο του πεδίου ορισµού µπορεί να

συσχετιστεί µε ένα µόνο στοιχείο του πεδίου τιµών και αντίστροφα.

6.7.1 TÂÏÂÛÙ¤˜

Στη συνέχεια θα µελετήσουµε, µέσα από ένα παράδειγµα, κάποιους από τους τελε-

στές που εφαρµόζονται σε απεικονίσεις.

¶·Ú¿‰ÂÈÁÌ· 6.9

Για το παράδειγµα θα χρησιµοποιήσουµε τις απεικονίσεις

m1 = a # 1, c # 3, d # 1 και

m2 = b # 4, c # 5.

Ο υπολογισµός του πεδίου ορισµού γίνεται εφαρµόζοντας τον τελεστή dom:

dom m1 = a, c, d και dom m2 = b, c.

Για την κενή απεικόνιση ισχύει dom = .

Έτσι, µπορούµε να εφαρµόσουµε µια απεικόνιση στα στοιχεία του πεδίου ορισµού:

1 1 36 . 7 A ¶ ∂ π ∫ √ ¡ π ™ ∏

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 113

Page 115: pli42a

1 1 4 K E º A § A I O 6 : H ∆ À ¶ π ∫ ∏ ° § ø ™ ™ ∞ V D M

m1(a) = 1, m1(c) = 3, m2(b) = 4, κ.λπ.

Το πεδίο τιµών µιας απεικόνισης υπολογίζεται εφαρµόζοντας τον τελεστή rng, ο

οποίος ορίζεται ως εξής:

rng m = m(d) | d Πdom m.

Έτσι έχουµε

rng m1 = 1, 3, rng m2 = 4, 5 και rng = .

Ο τελεστής card επιστρέφει το πλήθος των στοιχείων ενός συνόλου:

card dom m1 = 3, card rng m1 = 2, card dom m2 = 2, card rng m2 = 2.

Παρατηρήστε ότι η απεικόνιση m1 είναι πολλά – προς – ένα, οπότε ισχύει

card rng m1 ≤ card dom m1.

Ο τελεστής προσαρµογής (override) †, όταν εφαρµοστεί σε δύο απεικονίσεις m1

και m2, επιστρέφει µια νέα απεικόνιση, η οποία περιέχει όλα τα ζεύγη της m2 και

εκείνα τα ζεύγη της m1, των οποίων τα πρώτα στοιχεία δεν ανήκουν στο πεδίο ορι-

σµού της m2:

ma † mb ∆ d # (if d Œ dom mb then mb(d) else ma(d)) |

d Œ (dom ma » dom mb).

Έτσι,

m1 † m2 = a # 1, b # 4, c # 5, d # 1,

m2 † m1 = a # 1, b # 4, c # 3, d # 1,

m † = m = † m.

Όταν τα πεδία ορισµού δύο απεικονίσεων είναι σύνολα ξένα µεταξύ τους, η προ-

σαρµογή της µιας στην άλλη υπολογίζεται µε τον τελεστή της ένωσης:

m2 » a # 7 = a # 7, b # 4, c # 5.

Ο τελεστής περιορισµού (restriction) εφαρµόζεται σε ένα σύνολο s και µια απει-

κόνιση m και επιστρέφει όλα τα ζεύγη της m των οποίων το πρώτο στοιχείο ανήκει

στο s:

s m D d # m(d) | d Œ (s « dom m).

Έτσι

a, d, e m1 = a # 1, d # 1,

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 114

Page 116: pli42a

m1 = και s = .

Με τον ίδιο τρόπο ορίζεται και ο «συµπληρωµατικός» τελεστής διαγραφής του

πεδίου ορισµού , ο οποίος για ένα σύνολο s και µια απεικόνιση m επιστρέφει όλα

τα ζεύγη της m των οποίων το πρώτο στοιχείο δεν ανήκει στο s:

s m D d # m(d) | d Œ (dom m – s) και

m = m,

ma † mb = (dom mb ma) » mb.

Έτσι

a, d, e m1 = c # 3.

1 1 56 . 7 A ¶ ∂ π ∫ √ ¡ π ™ ∏

ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 6.3

Εάν

m1 = a # x, b # y, c # x και

m2 = b # x, d # x,

να επιλέξετε τη σωστή απάντηση από τις τρεις που δίνονται για κάθε ερώτηση:

1. Ποια είναι η τιµή της έκφρασης m1(c);

(α) x (β) y (γ) δεν ορίζεται

2. Ποια είναι η τιµή της έκφρασης m1(x);

(α) a (β) c (γ) δεν ορίζεται

3. Ποια είναι η τιµή της έκφρασης dom m1;

(α) b, a, c (β) x, y (γ) b, d

4. Ποια είναι η τιµή της έκφρασης rng m2;

(α) d, b (β) x (γ) x, y

5. Ποια είναι η τιµή της έκφρασης m1 † m2;

(α) a # x, b # y, c # x, b # x, d # x

(β) a # x, b # x, c # x, d # x

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 115

Page 117: pli42a

1 1 6 K E º A § A I O 6 : H ∆ À ¶ π ∫ ∏ ° § ø ™ ™ ∞ V D M

6.7.2 OÚÈÛÌfi˜ Ù‡ˆÓ

Οι απεικονίσεις χρησιµοποιούνται κυρίως για τον ορισµό σύνθετων τύπων. Έτσι,

ένας τύπος Τ, του οποίου οι τιµές είναι απεικονίσεις η καθεµιά µε µέγιστο πεδίο ορι-

σµού D και µέγιστο πεδίο τιµών R, ορίζεται ως εξής:

Τ = D R

Τότε, κάθε τιµή του τύπου Τ είναι µια απεικόνιση, της οποίας το πεπερασµένο πεδίο

ορισµού είναι υποσύνολο του D και το πεδίο τιµών είναι υποσύνολο του R.

Αντίστοιχα, µια ένα – προς – ένα απεικόνιση ορίζεται ως

Τ = D R = m Œ (D R) | isoneone(m),

όπου

isoneone: (D R) # B,

isoneone(m) D card rng m = card dom m

mæ Ææ

mæ Ææ

m¨ Ææ

mæ Ææ

(γ) δεν ορίζεται

6. Ποια είναι η τιµή της έκφρασης m2 † m1;

(α) a # x, b # y, c # x, b # x, d # x

(β) a # x, b # y, c # x, d #x

(γ) δεν ορίζεται

7. Ποια είναι η τιµή της έκφρασης m1 » m2;

(α) a # x, b # y, c # x, b # x, d # x

(β) a # x, b # x, c # x, d #x

(γ) δεν ορίζεται

8. Ποια είναι η τιµή της έκφρασης a, e m1;

(α) b # y, c # x (β) a #x (γ) δεν ορίζεται

9. Ποια είναι η τιµή της έκφρασης d, e m2;

(α) b # x (β) d # x (γ) δεν ορίζεται

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 116

Page 118: pli42a

¶·Ú¿‰ÂÈÁÌ· 6.10

Εάν Α = a, b και B = 1, 2, τότε ο τύπος Τ = Α B ορίζεται ως ένα σύνολο

απεικονίσεων που περιέχει τα στοιχεία

, a # 1, a # 2, b # 1, b # 2, a # 1, b # 1, a # 1, b # 2,

a # 2, b # 1, a # 2, b # 2.

mæ Ææ

1 1 76 . 7 A ¶ ∂ π ∫ √ ¡ π ™ ∏

¢Ú·ÛÙËÚÈfiÙËÙ· 6.4

Έστω η απεικόνιση T = Floor RoomNo – set. ∆οκιµάστε να γράψετε µια

έκφραση η οποία θα περιγράφει ποια δωµάτια είναι σε κάθε όροφο της

CHILDWARE. Έπειτα, συγκρίνετε την απάντησή σας µε τη δική µας πρόταση.

mæ Ææ

Η ζητούµενη έκφραση είναι η εξής:

0 # mk – RoomNo(0, j) | j Œ 1, 2 »

i # mk – RoomNo(i, j) | 1 ≤ j ≤ 28 | 1 ≤ i ≤ 3 Ÿ j MOD 4 ≠ 0 »

4 # mk – RoomNo(4, j) | 1 ≤ j ≤ 28 Ÿ is – even(j)

6.7.3 ¶ÔÏ˘ – Û‡ÓÔÏ·

Ένα πολυ – σύνολο (multi – set) µπορεί να περιέχει πολλαπλές εµφανίσεις του ίδιου

στοιχείου, χωρίς η σειρά εµφάνισης των στοιχείων να έχει σηµασία. Ένα πολυ –

σύνολο, που βασίζεται σε ένα σύνολο Χ, ορίζεται ως η απεικόνιση

Bag = X Õ1,

η οποία αντιστοιχίζει σε κάθε στοιχείο του Χ έναν µη µηδενικό θετικό αριθµό, ο οποί-

ος δείχνει τη συχνότητα εµφάνισης του στοιχείου. Χρησιµοποιούµε τη συνάρτηση

mpc: X ¥ Bag # Õ για να υπολογίσουµε τις συχνότητες:

mpc(e, m) D if e Πdom m then m(e) else 0.

Τότε, η λειτουργία που µετρά τις συχνότητες εµφάνισης προδιαγράφεται ως εξής:

COUNT(e: X) c: Õ

eexxtt rd b: Bag

ppoosstt c = mpc(e, b)

mæ Ææ

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 117

Page 119: pli42a

1 1 8 K E º A § A I O 6 : H ∆ À ¶ π ∫ ∏ ° § ø ™ ™ ∞ V D M

¢Ú·ÛÙËÚÈfiÙËÙ· 6.5

ADD(e: X)

eexxtt wr b: Bag

ppoosstt b = † e # mpc(e, ) + 1

REM(e: X)

eexxtt wr b: Bag

pprree mpc(e, b) ≥ 1

ppoosstt if mpc(e, b) = 1 then

b = e

else

b = † e #

mpc (e, ) – 1 wb

wb

wb

wb

wb

¢Ú·ÛÙËÚÈfiÙËÙ· 6.6

Θεωρήστε την ακόλουθη προδιαγραφή ενός απλού τραπεζικού συστήµατος:

Bank:: am: Acno Acdata

odm: Cno Overdraft

iinnvv (mk – Bank(am, odm) ¢ " mk – Acdata(cno, bal) Œrng am ∑ cno Œ dom odm Ÿ bal ≥ – odm(cno)

Acdata:: own: Cno

bal: Balance

Οι πελάτες της τράπεζας διαχωρίζονται από κωδικούς αριθµούς, οι οποίοι ανήκουν

στο σύνολο Cno, ενώ οι τραπεζικοί λογαριασµοί διαχωρίζονται από κωδικούς που

ανήκουν στο σύνολο Acno. Κάθε λογαριασµός έχει ένα υπόλοιπο χρηµάτων

(Balance = Ÿ) και χαρακτηρίζεται από ένα επιτρεπτό όριο υπέρβασης (Overdraft =

Õ). Ένας πελάτης µπορεί να διατηρεί πολλούς λογαριασµούς, το υπόλοιπο του καθε-

νός διατηρείται ξεχωριστά.

Προσπαθήστε να ορίσετε τις λειτουργίες:

• NEWC(od: Overdraft) r: Cno, η οποία προσθέτει ένα νέο πελάτη στο

mæ Ææ

mæ Ææ

Πριν προχωρήσετε στη δική µας πρόταση, δοκιµάστε, χρησιµοποιώντας τη συνάρ-

τηση mpc, να προδιαγράψετε τις λειτουργίες:

ADD(e: X), η οποία προσθέτει ένα νέο στοιχείο στο πολυ – σύνολο Bag,

REM(e: X), η οποία διαγράφει ένα στοιχείο από το πολυ – σύνολο Bag.

Οι ζητούµενες προδιαγραφές είναι οι ακόλουθες:

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 118

Page 120: pli42a

Η λειτουργία προσθήκης ενός νέου πελάτη δέχεται στην είσοδο το ποσό επιτρεπό-

µενης υπέρβασης και επιστρέφει τον κωδικό του πελάτη:

NEWC(od:Overdraft)r:Cno

eexxtt wr odm: Cno Overdraft

ppoosstt r œ dom Ÿ odm = » r # od

Η λειτουργία ενεργοποίησης ενός νέου λογαριασµού δέχεται στην είσοδο τον κωδι-

κό του πελάτη και επιστρέφει τον κωδικό του λογαριασµού:

NEWAC(cu:Cno)r:Acno

eexxtt rd odm: Cno Overdraft,

wr am: Acno Acdata

pprree cu Πdom odm

ppoosstt r œ dom Ÿ am = » r # mk–Acdata(cu, 0)

Η λειτουργία που επιστρέφει το υπόλοιπο των λογαριασµών ενός πελάτη δοθέντος

ams

ams

mæ Ææ

mæ Ææ

odmw

odmw

mæ Ææ

1 1 96 . 7 A ¶ ∂ π ∫ √ ¡ π ™ ∏

σύστηµα και επιστρέφει τον κωδικό του,

• NEWAC(cu: Cno) r: Acno, η οποία ανοίγει ένα νέο λογαριασµό στο σύστη-

µα και επιστρέφει τον κωδικό του,

• ACINF(cu: Cno) r: Acno Balance, η οποία επιστρέφει το υπό-

λοιπο ενός λογαριασµού,

• CLOSEAC(ac: Acno) r: Balance, η οποία κλείνει ένα λογαριασµό και υπο-

λογίζει το υπόλοιπό του,

• REMC(cu: Cno), η οποία διαγράφει ένα πελάτη,

• TRANSF(f: Acno, t: Acno, a: Õ), η οποία µεταφέρει το ποσό a από

το λογαριασµό f στον t.

Η δραστηριότητα αυτή είναι πολύ δύσκολη και απαιτεί επίµονη προσπάθεια και καλή

γνώση των τελεστών της VDM. Οι ζητούµενες λειτουργίες προδιαγράφονται στη συνέ-

χεια, σύµφωνα µε τη δική µας άποψη. Μελετήστε τις µόνο αφού έχετε προσπαθήσει

να γράψετε πλήρως τις δικές σας προδιαγραφές, χωρίς να απογοητεύεστε από τις

δυσκολίες που θα συναντήσετε. Η µελέτη της προτεινόµενης απάντησης πρέπει να γίνει

συγκριτικά, µε στόχο όχι µόνο να εντοπίσετε τα σφάλµατα που ίσως έχετε κάνει, αλλά

και να τεκµηριώσετε την όποια διαφορετική προσέγγιση έχετε ακολουθήσει.

mæ Ææ

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 119

Page 121: pli42a

1 2 0 K E º A § A I O 6 : H ∆ À ¶ π ∫ ∏ ° § ø ™ ™ ∞ V D M

του κωδικού του:

ACINF(cu:Cno)r:Acno Balance

eexxtt rd am: Acno Acdata

ppoosstt r = (acno # bal(am(acno)) | acno Œ dom am Ÿown(am(acno)) = cu

Η λειτουργία µε την οποία «κλείνει» ένας λογαριασµός, αφού υπολογισθεί το υπό-

λοιπό του:

CLOSEAC(ac:Acno)r:Balance

eexxtt wr am: Acno Acdata

pprree ac Πdom am

ppoosstt am = ac Ÿ r = bal( (ac))

Για να διαγράψουµε έναν πελάτη, θεωρούµε ότι όλοι οι λογαριασµοί του έχουν κλείσει:

REMC(cu: Cno)

eexxtt wr dom: Cno Overdraft

rd am: Acno Acdata

pprree cu Œ dom odm Ÿ ± ac Œ dom am ◊◊ own(am(ac)) = cu

ppoosstt odm = cu

Η µεταφορά ποσού a από ένα λογαριασµό f σε ένα λογαριασµό t, µε την προϋπόθε-

ση ότι στον πρώτο δεν υπάρχει υπέρβαση:

TRANSF(f:Acno,t:Acno,a:Õ)

eexxtt rd odm: Cno Overdraft

wr am: Acno Acdata

pprree f, t Œ dom am Ÿ f ≠ t Ÿ

bal(am(f)) – a ≥ odm(own(am(f)))

ppoosstt am = †

f # Ì( (f), bal # bal( (f)) – a), t #

Ì( (t), bal # bal( (t)) + a)

6.8 AÎÔÏÔ˘ı›Â˜

Μια ακολουθία (sequence) µπορεί να θεωρηθεί ως µια απεικόνιση µε περιορισµέ-

νο πεδίο ορισµού. Σε µια ακολουθία, τόσο η θέση των στοιχείων, όσο και ο αριθµός

ams

ams

ams

ams

ams

mæ Ææ

mæ Ææ

odmw

mæ Ææ

mæ Ææ

ams

ams

mæ Ææ

mæ Ææ

mæ Ææ

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 120

Page 122: pli42a

των εµφανίσεων κάθε στοιχείου είναι σηµαντικά. Συνεπώς, µια ακολουθία µπορεί

να οριστεί σαν µια ειδική µορφή απεικόνισης ως εξής:

Sequence = Õ1 X

iinnvv (s) ¢ $ n Œ Õ ∑ dom s = 1,..., n

Συνήθως γράφουµε τα στοιχεία µιας ακολουθίας ως q1 = [b, a]. Εάν q2 = [a, b], τότε

q1 ≠ q2. Εάν q3 = [a, a, b], τότε q1 ≠ q3. Η κενή ακολουθία ορίζεται ως q0 = [ ].

Μπορούµε να δηµιουργήσουµε µεγαλύτερες ακολουθίες συνδυάζοντας µικρότερες

µε τον τελεστή της συνένωσης (concatenation):

[a, b, c] [d, e] = [a, b, c, d, e].

¶·Ú¿‰ÂÈÁÌ· 6.11

Χρησιµοποιώντας ακολουθίες θα προδιαγράψουµε τον τύπο ουράς (queue). Αρχικά,

ορίζουµε ότι µια ουρά Queue αποτελείται από ακολουθίες οµοειδών στοιχείων Qel:

Queue = Qel *.

Τότε, µπορούµε να ορίσουµε τις λειτουργίες πρόσθεσης και αφαίρεσης ενός στοι-

χείου από την ουρά:

ENQUEUE(e:Qel)

eexxtt wr q: Queue

ppoosstt q = [e]

DEQUEUE( )e:Qel

eexxtt wr q: Queue

pprree q ≠ [ ]

ppoosstt = [e] q

6.8.1 Tελεστές

Όπως και πριν, θα παρουσιάσουµε τους τελεστές των ακολουθιών µέσα από ένα

εκτεταµένο παράδειγµα.

¶·Ú¿‰ÂÈÁÌ· 6.12

Για τις ανάγκες του παραδείγµατος θα χρησιµοποιήσουµε τις ακολουθίες:

s1 = [b, b, c] και s2 = [a].

Ορίζουµε τον τελεστή len, ο οποίος επιστρέφει το µήκος (δηλαδή, τον αριθµό των

sq

sq

mæ Ææ

1 2 16 . 8 A ∫ √ § √ À £ π ∂ ™

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 121

Page 123: pli42a

1 2 2 K E º A § A I O 6 : H ∆ À ¶ π ∫ ∏ ° § ø ™ ™ ∞ V D M

στοιχείων) της ακολουθίας:

len s1 = 3, len s2 = 1 και len[ ] = 0.

Ακόµη, ορίζουµε τον τελεστή hd, ο οποίος επιστρέφει το πρώτο στοιχείο µιας όχι

κενής ακολουθίας και τον τελεστή tl, ο οποίος επιστρέφει την υπόλοιπη ακολουθία,

όταν έχει αφαιρεθεί το πρώτο στοιχείο της:

hd s1 = b, tl s1 = [b, c], hd s2 = a και tl s2 = [ ].

Σε µια ακολουθία επιτρέπεται η αναζήτηση κάποιου στοιχείου που βρίσκεται σε

κάποια θέση. Η αναζήτηση γίνεται µέσω ενός απαριθµητή (index) της ακολουθίας,

ο οποίος έχει την ιδιότητα:

s Œ X* Ÿ 1 ≤ i ≤ len s fi s(i) Œ X.

Συνεπώς

s1(1) = b, s2(1) = a, s1(2) = b, κ.λπ.

Το σύνολο των έγκυρων απαριθµητών για µια ακολουθία δίνεται από τον τελεστή

inds, ενώ το σύνολο των στοιχείων (χωρίς τις πολλαπλές εµφανίσεις) δίνεται από

τον τελεστή elems:

inds s = 1,..., len s και elems s = s(i) | i Œ inds s.

Συνεπώς

inds s1 = 1, 2, 3, inds s2 = 1, inds [ ] = , elems s1 = b, c, elems s2 =

a και elems [ ] = .

Κατά την εξέταση της ισότητας δύο ακολουθιών χρειάζεται να λάβουµε υπόψη τόσο

τη θέση, όσο και τις επαναλήψεις των στοιχείων:

sa = sb fi len sa = len sb Ÿ " i Œ inds sa ◊◊ sa(i) = sb(i).

ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 6.4

Προσπαθήστε να επιλέξετε τη σωστή απάντηση από τις τρεις που δίνονται για κάθε

ερώτηση:

1. Ποια είναι η τιµή της έκφρασης tl[a, b];

(α) a (β) b (γ) [b]

2. Ποια είναι η τιµή της έκφρασης len[[a, b], [b,a]];

(α) 4 (β) 2 (γ) δεν ορίζεται

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 122

Page 124: pli42a

1 2 36 . 8 A ∫ √ § √ À £ π ∂ ™

¢Ú·ÛÙËÚÈfiÙËÙ· 6.7

Έστω η στοίβα Stack = X*, η οποία ορίζεται ως µια ακολουθία µε αρχική τιµή s0

= [ ]. Προσπαθήστε να προδιαγράψετε τις λειτουργίες PUSH(e: X), POP( ) e: X

και ISEMPTY( ) r: B, όταν η στοίβα

(α) έχει απεριόριστη χωρητικότητα,

(β) µπορεί να δεχθεί το πολύ 256 στοιχεία τύπου Χ,

Υπόδειξη: στη δεύτερη περίπτωση, χρειάζεται να ορίσετε ένα νέο τύπο, τον Stackf,

και τη λειτουργία ISFULL( ) r: B

Στην περίπτωση στοίβας µε απεριόριστη χωρητικότητα, οι λειτουργίες ορίζονται

ως εξής:

PUSH(e:X)

eexxtt wr s: Stack

3. Ποια είναι η τιµή της έκφρασης hd[a];

(α) a (β) [a] (γ) b

4. Ποια είναι η τιµή της έκφρασης tl[a];

(α) a (β) [a] (γ) [ ]

5. Ποια είναι η τιµή της έκφρασης hd[[a, b], [c]];

(α) [a, b] (β) a (γ) a, b

6. Ποια είναι η τιµή της έκφρασης elems [a, b, a];

(α) a, b (β) a, b (γ) 3

7. Ποια είναι η τιµή της έκφρασης elems [a, a, [a], a];

(α) a (β) a, a, [a] (γ) a

8. Ποια είναι η τιµή της έκφρασης [a] CONC [a];

(α) [a, a] (β) [a] (γ) δεν ορίζεται

9. Ποια είναι η τιµή της έκφρασης [a] CONC [[b]];

(α) [a, b] (β) [a, [b]] (γ) δεν ορίζεται

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 123

Page 125: pli42a

1 2 4 K E º A § A I O 6 : H ∆ À ¶ π ∫ ∏ ° § ø ™ ™ ∞ V D M

ppoosstt s = [e]

POP( ) e: X

eexxtt wr s: Stack

pprree s ≠ [ ]

ppoosstt = [e] s

ISEMPTY( )r:B

eexxtt rd s: Stack

ppoosstt r ¤ (s = [ ])

Εάν θέσουµε ως άνω όριο τα 256 στοιχεία, τότε χρειαζόµαστε τον τύπο

Stackf = X*

iinnvv (s) ¢ len s ≤ 256

Οι λειτουργίες POP και ISEMPTY προδιαγράφονται µε τον ίδιο τρόπο. H λειτουρ-

γία PUSH επηρεάζεται από το άνω όριο, ενώ ορίζουµε και τη λειτουργία ISFULL:

PUSH(e:X)

eexxtt wr s: Stackf

pprree len s < 256

ppoosstt s = [e]

ISFULL( )r:B

eexxtt rd s: Stackf

ppoosstt r ¤ (len s = 256)

ws

ws

ws

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 124

Page 126: pli42a

™‡ÓÔ„Ë

Στο κεφάλαιο αυτό µελετήσαµε την τυπική γλώσσα προδιαγραφών VDM, η οποία

βασίζεται στην κλασική λογική µε κάποιες επεκτάσεις. Ένα σύστηµα λογισµικού προ-

διαγράφεται στη VDM ως ένα σύνολο λειτουργιών, οι οποίες µεταχειρίζονται τύπους

δεδοµένων. H VDM παρέχει τον απαραίτητο συµβολισµό για την αναπαράσταση των

λειτουργιών ως συναρτήσεις, οι οποίες έχουν πρόσβαση σε κάποια αναπαράσταση

της κατάστασης του λογισµικού. Ακόµη, η γλώσσα παρέχει ένα σύνολο βασικών

τύπων δεδοµένων και επιπλέον µηχανισµούς για τον ορισµό σύνθετων τύπων. Οι

µηχανισµοί αυτοί µπορεί να είναι απλοί, όπως τα σύνολα και η κατασκευαστική

συνάρτηση, ή σύνθετοι, όπως οι απεικονίσεις, τα πολυ – σύνολα και οι ακολουθίες.

Η γλώσσα VDM είναι αρκετά διαδεδοµένη ανάµεσα στους µηχανικούς λογισµικού

κυρίως εξαιτίας των αυστηρών κανόνων και των ισχυρών µηχανισµών αναπαρά-

στασης του λογισµικού που παρέχει.

BÈ‚ÏÈÔÁÚ·Ê›·

[1]B. Fields (1992), A guide to reading VDM specifications. Technical report, Dept.

of Computer Science, Univ. of Manchester.

[2]C. Jones (1990a), Systematic software development using VDM. Prentice – Hall.

[3]C. Jones (1990b), Systematic software development using VDM – teaching notes.

Prentice – Hall.

[4]C. Jones and R. Shaw (eds) (1990c), Case studies in systematic software

development. Prentice – Hall.

1 2 5B I B § I O ° PA º I A

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 125

Page 127: pli42a

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 126

Page 128: pli42a

O Û˘Ì‚ÔÏÈÛÌfi˜ Z

™ÎÔfi˜

Ο στόχος του κεφαλαίου είναι να σας παρουσιάσει µέσω της περιγραφής ενός µοντέ-

λου του λογισµικού, το συµβολισµό Ζ, την περισσότερο διαδεδοµένη γλώσσα τυπικών

προδιαγραφών.

¶ÚÔÛ‰ÔÎÒÌÂÓ· ·ÔÙÂϤÛÌ·Ù·

Όταν θα έχετε µελετήσει το κεφάλαιο αυτό, θα µπορείτε να:

• γράφετε και να ερµηνεύετε ένα σχήµα Ζ,

• προδιαγράφετε µε σχήµατα Ζ τη µεταβολή ή το αναλλοίωτο της κατάστασης ενός

τµήµατος λογισµικού,

• προδιαγράφετε µε σχήµατα Ζ τις λειτουργίες ενός λογισµικού, το διάλογο µε το

χρήστη και τις διαδικασίες χειρισµού λαθών,

• προδιαγράφετε µε σχήµατα Ζ λειτουργίες χειρισµού δεδοµένων,

• γράφετε σύνθετα σχήµατα Ζ,

• προδιαγράφετε σύνθετες λειτουργίες του λογισµικού χρησιµοποιώντας συναρτή-

σεις, ακολουθίες και πολυ – σύνολα.

ŒÓÓÔȘ ÎÏÂȉȿ

7∫ ∂ º ∞ § ∞ π √

• σχήµα

• χώρος καταστάσεων

• σχεσιακή εικόνα

• προσαρµογή

• ακολουθία

• περιορισµός και αντι περιορισµός

• σύνθεση σχέσεων/σχηµάτων

• συµπερίληψη σχηµάτων

• διοχέτευση σχηµάτων

• πολυ–σύνολο/σάκος

∂ÈÛ·ÁˆÁÈΤ˜ ·Ú·ÙËÚ‹ÛÂȘ

Η γλώσσα προδιαγραφών Ζ βασίζεται στη θεωρία τυποποιηµένων συνόλων και ανα-

πτύχθηκε αρχικά από τον Abrial (Abrial[80]) και στη συνέχεια από ερευνητές στο

Πανεπιστήµιο της Οξφόρδης (Hayes[87]).

Η γλώσσα Ζ περιλαµβάνει έναν πλούσιο συµβολισµό, ο οποίος, σε αντίθεση µε άλλες

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 127

Page 129: pli42a

1 2 8 K E º A § A I O 7 : O ™ À ª µ √ § π ™ ª √ ™ Z

γλώσσες τυπικών προδιαγραφών, βασίζεται σε «κλασικά» µαθηµατικά. Έτσι, οι προ-

διαγραφές που είναι γραµµένες σε γλώσσα Ζ µπορούν εύκολα να γίνουν κατανοητές

από µη ειδικούς, ενώ διατηρούν την αυστηρότητα των µαθηµατικών και των γλωσ-

σών προγραµµατισµού.

Η παρουσίαση της γλώσσας ξεκινά από το βασικό συµβολισµό (ενότητα 7.1) και την

αναπαράσταση της κατάστασης και της αλλαγής της κατάστασης (ενότητα 7.2). Στην

ενότητα 7.3 προδιαγράφονται οι λειτουργίες του λογισµικού µε την εφαρµογή του

απλού αυτού συµβολισµού, ενώ στην ενότητα 7.4 προδιαγράφεται ο χειρισµός λαθών.

Οι δύο αυτές ενότητες είναι συµπληρωµατικές και είναι καλύτερα να τις µελετήσετε

µαζί. Ήδη, στο σηµείο αυτό θα είστε ικανοί να γράφετε προδιαγραφές τµηµάτων λογι-

σµικού σε γλώσσα Ζ.

Στις επόµενες τέσσερις ενότητες (7.5 έως 7.8) περιγράφεται ένα σύνολο πιο ισχυρών

τελεστών της γλώσσας, τους οποίους θα χρησιµοποιήσετε στην προδιαγραφή ειδικών

ή σύνθετων καταστάσεων. Στην ενότητα 7.9 παρουσιάζεται ο τρόπος προδιαγραφής

του διαλόγου µε το χρήστη. Πρόκειται για µια σηµαντική ενότητα, η οποία ουσιαστι-

κά ολοκληρώνει τις γνώσεις που είναι απαραίτητες για την περιγραφή σε υψηλό επί-

πεδο ενός λογισµικού.

Οι επόµενες ενότητες περιλαµβάνουν ειδικότερες γνώσεις, οι οποίες θα είναι απα-

ραίτητες όταν επιχειρήσετε λεπτοµερή περιγραφή του λογισµικού. Έτσι, στην ενότη-

τα 7.10 παρουσιάζονται οι συναρτήσεις, στην ενότητα 7.11 οι ακολουθίες και στην

ενότητα 7.12 τα πολυ – σύνολα. Το κεφάλαιο ολοκληρώνεται µε µια εκτενή ανακε-

φαλαιωτική άσκηση, την οποία πρέπει να µελετήσετε καλά.

Το κεφάλαιο αυτό, όπως και τα προηγούµενα, είναι γεµάτο ειδικούς συµβολισµούς

και απαιτεί προσεκτική ανάγνωση. Η µελέτη του κεφαλαίου δεν θα σας κάνει ειδι-

κούς στην εφαρµογή της γλώσσας Ζ. Με λίγη προσοχή, όµως, θα είστε ικανοί να δια-

βάζετε και να γράφετε απλές προδιαγραφές µε τη γλώσσα Ζ.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 128

Page 130: pli42a

7.1 B·ÛÈÎfi˜ Û˘Ì‚ÔÏÈÛÌfi˜

Οι τυπικές προδιαγραφές ενός λογισµικού στη γλώσσα Ζ παρουσιάζονται ως ένα

σύνολο σχηµάτων (schemas), τα οποία καλό είναι να συµπληρώνονται και µε ένα

σύνολο µη τυπικών περιγραφών σε µορφή κειµένου. Έτσι, η γραφική αναπαράστα-

ση ενός σχήµατος επιλέχθηκε ώστε αυτό να ξεχωρίζει µέσα στο κείµενο (Σχήµα 7.1).

Κάθε σχήµα περιλαµβάνει:

• τον τίτλο του, ο οποίος αναγράφεται στην κορυφή του σχήµατος,

• το τµήµα δηλώσεων (αλλιώς καλείται «υπογραφή του σχήµατος»), όπου δηλώ-

νονται όλα τα αντικείµενα που θα χρησιµοποιηθούν στο σχήµα, και

• το τµήµα εξισώσεων (ή τµήµα κατηγορηµάτων), όπου καταγράφονται εξισώσεις,

οι οποίες περιγράφουν τη συµπεριφορά του αντικειµένου το οποίο προδιαγράφει

το σχήµα.

1 2 97 . 1 B ∞ ™ π ∫ √ ™ ™ À ª µ √ § π ™ ª √ ™

Τίτλος Σχήµατος

Τµήµα ∆ηλώσεων (Υπογραφή Σχήµατος)

Τµήµα Εξισώσεων (ή Κατηγορηµάτων)

™¯‹Ì· 7.1

Ένα απλό σχήµα

της γλώσσας Ζ

¶·Ú¿‰ÂÈÁÌ· 7.1

Στη συνέχεια φαίνεται το σχήµα που περιγράφει το αντικείµενο ενός προγράµµατος,

το οποίο χρησιµοποιείται για τη µετατροπή βαθµών Φαρενάιτ (F) σε βαθµούς Κελ-

σίου (C).

F – to – C

F?, C!: Ÿ

F? > – 459,76

C! = 5/9 * (F? – 32)

Στο σχήµα F – to – C παρατηρήστε τα εξής:

• O τίτλος του σχήµατος είναι F – to – C και γράφεται πάνω στην περικλείουσα

γραµµή.

• Στο τµήµα δηλώσεων δηλώνονται δύο ακέραιες µεταβλητές, η F? (για τους βαθ-

µούς Φαρενάιτ) και η C! (για τους βαθµούς Κελσίου). Ο τύπος «ακέραιος αριθ-

µός Ÿ» είναι ο µόνος που αναγνωρίζεται χωρίς περαιτέρω περιγραφή από τη

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 129

Page 131: pli42a

1 3 0 K E º A § A I O 7 : O ™ À ª µ √ § π ™ ª √ ™ Z

γλώσσα Ζ. Για τον τύπο αυτό, εκτός από τους σχεσιακούς και αλγεβρικούς τελε-

στές, η Ζ υποστηρίζει και τις πράξεις που φαίνονται στον Πίνακα 7.1.

• Tο «?» στο τέλος του ονόµατός της µεταβλητής F? δηλώνει ότι αυτή είναι µετα-

βλητή εισόδου.

• Tο «!» στο τέλος του ονόµατός της µεταβλητής C! δηλώνει ότι αυτή είναι µετα-

βλητή εξόδου.

• Tο τµήµα εξισώσεων διαχωρίζεται από το τµήµα δηλώσεων µε µία οριζόντια γραµ-

µή και περιλαµβάνει δύο εξισώσεις. Η πρώτη ορίζει τη µικρότερη θερµοκρασία

που µπορεί να δοθεί σε βαθµούς Φαρενάιτ (το «απόλυτο µηδέν»). Η δεύτερη ορί-

ζει τον τρόπο υπολογισµού της µεταβλητής εξόδου από τη µεταβλητή εισόδου.

¶›Ó·Î·˜ 7.1

Οι πράξεις και οι σχέσεις επί των ακεραίων αριθµών που υποστηρίζει η γλώσσα Ζ

Υπόλοιπο mod

Συνάρτηση αρνητικού προσήµου –

Συνάρτηση επόµενου αριθµού succ(i) = i+1

¢Ú·ÛÙËÚÈfiÙËÙ· 7.1

∆οκιµάστε να προδιαγράψετε µε ένα σχήµα Ζ έναν τραπεζικό λογαριασµό, ο οποί-

ος περιγράφεται από έναν θετικό ακέραιο κωδικό id µεγαλύτερο από 1.000.000,

έχει ένα τρέχον υπόλοιπο bal και επιτρέπει ένα όριο υπέρβασης ovr. Ακολουθεί µια

ενδεικτική προδιαγραφή, µε την οποία µπορείτε να συγκρίνετε την απάντησή σας.

Το ζητούµενο σχήµα έχει ως εξής:

AAccccoouunntt

id, bal, ovr: Ÿ

id > 1.000.000

ovr ≥ 0

ovr + bal ≥ 0

Παρατηρήστε τους περιορισµούς που περιγράφονται στο τµήµα εξισώσεων:

• Tο όριο υπέρβασης µπορεί να είναι και µηδέν, αλλά όχι αρνητικό.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 130

Page 132: pli42a

• Tο υπόλοιπο του λογαριασµού µπορεί να είναι αρνητικό, αφού επιτρέπεται η υπέρ-

βαση δηλαδή η ανάληψη χωρίς να υπάρχει το ποσό (δηλώνεται έµµεσα, αφού η

µεταβλητή bal παίρνει ακέραιες τιµές χωρίς περιορισµό).

• ∆εν επιτρέπεται η ανάληψη από λογαριασµό µε µηδενικό υπόλοιπο ποσού µεγα-

λύτερου του ορίου υπέρβασης.

7.2 AÓ··Ú¿ÛÙ·ÛË Î·Ù¿ÛÙ·Û˘

Ένα σχήµα ουσιαστικά αποτελεί ένα δισδιάστατο γραφικό συµβολισµό, ο οποίος

οµαδοποιεί όλες τις πληροφορίες που σχετίζονται µε την περιγραφή της κατάστα-

σης (state) ενός αντικειµένου. Όπως θα δείτε στη µελέτη περίπτωσης που ακολου-

θεί, ένα σχήµα κατάστασης µπορεί να περιγράψει επακριβώς το χώρο καταστάσε-

ων (state space) µιας προδιαγραφής.

Μελέτη περίπτωσης [1]

Θυµάστε το Βύρωνα που είχε αναλάβει τη σχεδίαση του πληροφοριακού συστήµα-

τος της CHILDWARE; Τού ζητήθηκε, µεταξύ άλλων, να προδιαγράψει µία βάση

δεδοµένων, όπου θα φυλάσσονται οι εσωτερικοί αριθµοί τηλεφώνων όλων των υπαλ-

λήλων και στελεχών της επιχείρησης. Η βάση έχει τα εξής χαρακτηριστικά:

• Mόνο όσοι είναι υπάλληλοι της CHILDWARE µπορούν να περιλαµβάνονται σ’ αυτή.

• Kάποιος υπάλληλος µπορεί να απαντά σε περισσότερους από έναν αριθµούς κλήσης.

• ∆ύο ή περισσότεροι υπάλληλοι µπορεί να µοιράζονται τον ίδιο αριθµό κλήσης.

Επιπρόσθετα, η βάση πρέπει να υποστηρίζει τις εξής λειτουργίες:

• πρόσθεση ενός νέου υπαλλήλου

• καταχώριση ενός αριθµού κλήσης σε υπάλληλο

• διαγραφή της αντιστοίχησης αριθµού κλήσης µε κάποιον υπάλληλο

• διαγραφή της εγγραφής ενός υπαλλήλου µαζί µε τους αριθµούς κλήσης µε τους

οποίους έχει συσχετισθεί

• αναζήτηση των αριθµών κλήσης ενός υπαλλήλου

• αναζήτηση των υπαλλήλων που απαντούν σε κάποιον αριθµό κλήσης

Για να προδιαγράψει ο Βύρων τη βάση δεδοµένων των εσωτερικών αριθµών τηλε-

1 3 17 . 2 A ¡ ∞ ¶ ∞ ƒ∞ ™ ∆∞ ™ ∏ ∫ ∞∆∞ ™ ∆∞ ™ ∏ ™

[1] Η µελέτη περίπτωσης και τα παραδείγµατα του κεφαλαίου αποτελούν µεταφορά ή προσαρµογή

παραδειγµάτων που βρίσκονται στο Diller [94]

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 131

Page 133: pli42a

1 3 2 K E º A § A I O 7 : O ™ À ª µ √ § π ™ ª √ ™ Z

φωνικής κλήσης, χρειάζεται να µπορεί να αναφέρεται σε όλους τους υπαλλήλους

της επιχείρησης και σε όλους τους αριθµούς που µπορεί να χειριστεί το τηλεφωνι-

κό κέντρο. Ορίζει λοιπόν δύο αφαιρετικούς τύπους:

• τον τύπο Employee, ο οποίος αναπαριστά όλους τους υπαλλήλους της

CHILDWARE, και

• τον τύπο Extension, ο οποίος αναφέρεται σε όλους τους πιθανούς αριθµούς κλήσης

Τότε µπορεί να ορίσει τη σχέση telephones ανάµεσα σε υπαλλήλους και τηλέφωνα

ως εξής:

telephones: Employee ´ Extension,

το οποίο σηµαίνει ότι telephones Õ Employee x Extension.

Στη γλώσσα Ζ, οι σχέσεις (relations) ανάµεσα σε αντικείµενα θεωρούνται ως δια-

τεταγµένα ζεύγη. Έτσι, η σχέση Κ ανάµεσα στα Α και Β είναι ένα υποσύνολο του

καρτεσιανού γινοµένου Α ¥ Β και γράφεται: K Ã A ¥ B. Το σύνολο όλων των σχέ-

σεων ανάµεσα σε στοιχεία του Α και του Β είναι στην πραγµατικότητα το δυναµο-

σύνολο του καρτεσιανού τους γινοµένου. Αντί όµως του συµβολισµού √(Α ¥ Β)

υιοθετούµε τον συµβολισµό A ´ B.

Σε µία σχέση όπως η Κ:

• το σύνολο όλων µελών του Α που συµµετέχουν στην Κ καλείται πεδίο ορισµού

(domain) της Κ και συµβολίζεται ως dom K,

• το σύνολο όλων µελών του Β που συµµετέχουν στην Κ καλείται πεδίο τιµών

(range) της Κ και συµβολίζεται ως ran K

Έτσι, ένας υπάλληλος x που βρίσκεται στο Employee ανήκει στο πεδίο ορισµού της

σχέσης telephones, αν και µόνο αν υπάρχει κάποιος αριθµός κλήσης από το

Extension µε τον οποίο έχει συσχετισθεί µέσω της telephones:

x Œ dom telephones ¤ $ y: Extension ∑ x Æ y Œ telephones

Σηµειώστε ότι ο τύπος του συνόλου dom telephones είναι √ Employee (δηλαδή τα

στοιχεία του dom telephones προέρχονται από το δυναµοσύνολο του Employee,

αφού περισσότεροι από ένας υπάλληλοι µπορεί να έχουν τον ίδιο αριθµό κλήσης).

Ανάλογα, ένας αριθµός κλήσης y που βρίσκεται στο Extension ανήκει στο πεδίο

τιµών της telephones αν και µόνο αν υπάρχει κάποιος υπάλληλος από το Employee

µε τον οποίο έχει συσχετισθεί µέσω της telephones:

y Œ ran telephones ¤ $ x: Employee ∑ x Æ y Œ telephones

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 132

Page 134: pli42a

Ο τύπος του συνόλου ran telephones είναι √ Extension.

Έχοντας όλα αυτά υπόψη του, ο Βύρων ορίζει το σχήµα CWPhoneDir, µε το οποίο

προδιαγράφει το χώρο καταστάσεων της βάσης τηλεφωνικών δεδοµένων:

CCWWPPhhoonneeDDiirr

members: √ Employee

telephones: Employee ´ Extension

dom telephones Õ members

Η εξίσωση που βρίσκεται στο τµήµα εξισώσεων περιγράφει ένα χαρακτηριστικό της

βάσης δεδοµένων που δεν µπορεί ποτέ να αλλάξει, όσες αλλαγές κατάστασης και αν

συµβούν σε αυτή (µόνο υπάλληλοι της εταιρείας επιτρέπεται να έχουν αριθµό κλή-

σης). Ένα τέτοιο χαρακτηριστικό καλείται «αναλλοίωτο κατάστασης» (state

invariant).

7.2.1 MÂÙ¿‚·ÛË Î·Ù¿ÛÙ·Û˘

Για να αναπαραστήσει τη µεταβολή της κατάστασης ενός αντικειµένου Α, η γλώσ-

σα Ζ χρησιµοποιεί το σύµβολο ∆ πριν το σχήµα όπου περιγράφεται ο χώρος κατα-

στάσεων του αντικειµένου. Στο όνοµα των µεταβλητών που αναφέρονται στην προ-

κύπτουσα κατάσταση προστίθεται ένας τόνος (για παράδειγµα, η µεταβλητή x γίνε-

ται x¢), ώστε να διαχωρίζονται από τις µεταβλητές που αναφέρονται στην προηγού-

µενη της µεταβολής κατάσταση.

Μελέτη περίπτωσης (συνέχεια)

Το σχήµα CWPhoneDir περιγράφει την κατάσταση της βάσης πριν οποιαδήποτε

µεταβολή. Για να περιγράψουµε την αλλαγή της κατάστασης του CWPhoneDir χρη-

σιµοποιούµε το σχήµα:

¢¢ CCWWPPhhoonneeDDiirr

members, members': √ Employee

telephones, telephones': Employee ´ Extension

Dom telephones Õ members

Dom telephones' Õ members'

Για καλύτερη κατανόηση του συµβολισµού, ας υποθέσουµε ότι το ακόλουθο σχήµα

περιγράφει τη νέα κατάσταση της βάσης, η οποία προκύπτει µόλις συµβεί κάποια

µεταβολή:

1 3 37 . 2 A ¡ ∞ ¶ ∞ ƒ∞ ™ ∆∞ ™ ∏ ∫ ∞∆∞ ™ ∆∞ ™ ∏ ™

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 133

Page 135: pli42a

1 3 4 K E º A § A I O 7 : O ™ À ª µ √ § π ™ ª √ ™ Z

CCWWPPhhoonneeDDiirr¢¢

members': √ Employee

telephones': Employee ´ Extension

Dom telephones' Õ members'

Τότε, µπορούµε να θεωρήσουµε ότι το σχήµα ∆ CWPhoneDir προκύπτει συνδυά-

ζοντας τα σχήµατα της αρχικής (CWPhoneDir) και της τελικής κατάστασης

(CWPhoneDir¢)[2]. Συνοπτικά, αυτό γράφεται

¢¢ CCWWPPhhoonneeDDiirr

CWPhoneDir

CWPhoneDir'

ή

∆ CWPhoneDir CWPhoneDir Ÿ CWPhoneDir¢

Η πρώτη αναπαράσταση καλείται «συµπερίληψη σχηµάτων» (schema inclusion)

και µάς επιτρέπει να συµπεριλάβουµε ένα σχήµα Α στο τµήµα δηλώσεων ενός άλλου

σχήµατος Β, µε τον εξής περιορισµό: αν µία µεταβλητή x δηλώνεται και στα δύο

σχήµατα, πρέπει να έχει τον ίδιο τύπο και στις δύο δηλώσεις. Το αποτέλεσµα της

συµπερίληψης είναι ότι οι δηλώσεις του Α αποτελούν τµήµα των δηλώσεων του Β

και οι εξισώσεις του Α αναγράφονται µαζί µε τις εξισώσεις του Β.

Η δεύτερη αναπαράσταση περιγράφει µία πράξη ανάµεσα στα δύο σχήµατα µε τη

χρήση ενός τελεστή του προτασιακού λογισµού. Όλοι οι τελεστές που περιγράφο-

νται στην ενότητα 3.2 µπορούν να χρησιµοποιηθούν, εκτός βέβαια του ΝΟΤ. Το σύµ-

βολο χρησιµοποιείται για το µη γραφικό ορισµό ενός σχήµατος. Για να είναι επι-

τρεπτός ο συνδυασµός σχηµάτων, πρέπει να ισχύει ο περιορισµός που αναφέρθηκε

και στη συµπερίληψη σχηµάτων. Σε αντίθετη περίπτωση, ίσως χρειαστεί να εφαρ-

µόσουµε µία διαδικασία που λέγεται «κανονικοποίηση σχηµάτων», όπως φαίνεται

στο ακόλουθο παράδειγµα.

[2] Σηµειώστε βέβαια, ότι στη γλώσσα Ζ δεν επιτρέπεται η χρήση τόνων στους τίτλους σχηµάτων,

οπότε το σχήµα CWPhoneDir’ είναι ανεπίτρεπτο. Για το λόγο αυτό έχει εισαχθεί ο συµβολισµός

∆CWPhoneDir.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 134

Page 136: pli42a

¶·Ú¿‰ÂÈÁÌ· 7.2

Έστω τα ακόλουθα δύο σχήµατα Α και Β:

Α Β

x: 1.. 10 x: Õ

M: √ Ÿ M: √ Õ

x ΠM x > 6

Στη µορφή αυτή, τα δύο σχήµατα δεν µπορούν να συνδυαστούν µε κάποιο λογικό

τελεστή. Προχωρούµε λοιπόν στην κανονικοποίησή τους και έχουµε:

NormΑ NormΒ

x: Õ x: Õ

M: √ Ÿ M: √ Ÿ

x Œ 1.. 10 M Œ √ Õx Œ M x > 6

Μπορούµε τώρα να ορίσουµε το σχήµα C ως εξής: C A fi B. Τότε, το σχήµα C

περιγράφεται ως εξής:

C

x: Õ

M: √ Ÿ

(x Œ 1.. 10 Ÿ x Œ M) fi (M Œ √ Õ Ÿ x > 6)

Εάν θέλουµε να δηλώσουµε ότι η κατάσταση ενός σχήµατος παραµένει αµετάβλη-

τη, χρησιµοποιούµε τον συµβολισµό Ξ, ως εξής:

•• CCWWPPhhoonneeDDiirr

¢ CWPhoneDir

members' = members

telephones' = telephones

1 3 57 . 2 A ¡ ∞ ¶ ∞ ƒ∞ ™ ∆∞ ™ ∏ ∫ ∞∆∞ ™ ∆∞ ™ ∏ ™

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 135

Page 137: pli42a

1 3 6 K E º A § A I O 7 : O ™ À ª µ √ § π ™ ª √ ™ Z

Η ζητούµενη προδιαγραφή είναι η ακόλουθη:

WWiitthhddrraaww

¢ Account

amount?: Ÿ

0 < amount? ≤ bal + ovr

bal = bal – amount?

ovr' = ovr

Σύµφωνα µε την προδιαγραφή αυτή, η ανάληψη αφορά στο ποσό amount?, το οποίο

αποτελεί πληροφορία εισόδου για το πρόγραµµα χειρισµού του τραπεζικού λογα-

ριασµού. Παρατηρήστε το γεγονός ότι η λειτουργία αυτή δεν τροποποιεί το ποσό

υπέρβασης.

7.3 ¶ÚԉȷÁÚ·Ê‹ ÏÂÈÙÔ˘ÚÁ›·˜

Έχοντας ορίσει το χώρο και τον τρόπο µεταβολής των καταστάσεων του λογισµι-

κού, θα προδιαγράψουµε στη συνέχεια µία λειτουργία που υποστηρίζει το λογισµι-

κό, η οποία είναι ικανή να µεταβάλει την κατάσταση του συστήµατος.

Μελέτη περίπτωσης (συνέχεια)

Χρησιµοποιώντας τα προηγούµενα, ο Βύρων προδιαγράφει τη λειτουργία εισαγω-

γής µίας εγγραφής στη βάση δεδοµένων µε το ακόλουθο σχήµα:

AAddddRReeccoorrdd

¢ CWPhoneDir

name?: Employee

newnumber?: Extension

name? Πmembers

name? Æ newnumber? œ telephones

telephones' = telephones » name? Æ newnumber?

members' = members

¢Ú·ÛÙËÚÈfiÙËÙ· 7.2

Προσπαθήστε να προδιαγράψετε τη λειτουργία Withdraw, µε την οποία αναπαρί-

σταται η ανάληψη χρηµάτων από ένα τραπεζικό λογαριασµό, όπως αυτός που περι-

γράφηκε στη ∆ραστηριότητα 1. Ακολουθεί µια προτεινόµενη απάντηση.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 136

Page 138: pli42a

Η συνάρτηση AddRecord δέχεται στην είσοδο δύο µεταβλητές, τις name? και

newnumber?. Οι δύο πρώτες εξισώσεις αποτελούν προϋποθέσεις (προ συνθήκες) της

συνάρτησης AddRecord αφού δεν µπορεί να προστεθεί στη βάση κάποιος που δεν

ανήκει στην επιχείρηση, ούτε µπορεί να προστεθεί µία εγγραφή που ήδη υπάρχει

στη βάση. Η τρίτη εξίσωση περιγράφει τι ακριβώς κάνει η συνάρτηση AddRecord,

ενώ η τελευταία δηλώνει το γεγονός ότι το σύνολο των υπαλλήλων της επιχείρησης

δεν επηρεάζεται από αυτή τη συνάρτηση.

1 3 77 . 4 X ∂ π ƒ π ™ ª √ ™ § ∞ £ ø ¡

ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 7.1

Προσπαθήστε να γράψετε τον πλήρη (αναλυτικό) ορισµό του AddRecord, ενσω-

µατώνοντας τον ορισµό του CWPhoneDir.

7.4 XÂÈÚÈÛÌfi˜ Ï·ıÒÓ

Όπως είδαµε στην προηγούµενη ενότητα, µία λειτουργία περιγράφεται από εξισώ-

σεις, οι οποίες περιγράφουν:

• το αναλλοίωτο της κατάστασης και ουσιαστικά λειτουργούν ως σφαιρικές προ

– συνθήκες,

• τις προ–συνθήκες της συγκεκριµένης συνάρτησης που υλοποιεί τη λειτουργία,

• την περιγραφή του τρόπου µεταβολής της κατάστασης και

• τις µετα – συνθήκες, δηλαδή την κατάσταση µετά την εκτέλεση της λειτουργίας

Τι θα συµβεί, όµως, εάν κάποιες από τις προ – συνθήκες δεν ισχύουν; Πρόκειται για

σφάλµα εκτέλεσης, ο χειρισµός του οποίου θα προδιαγραφεί µε νέα σχήµατα, όπως

θα δούµε στη συνέχεια της µελέτης περίπτωσης.

Σηµειώστε ότι δεν χρειάζεται να γράψουµε σχήµατα για να προδιαγράψουµε το χει-

ρισµό σφαλµάτων, τα οποία θα προκύψουν σε περίπτωση που δεν ικανοποιούνται

οι συνθήκες του αναλλοίωτου της κατάστασης. Τέτοια περίπτωση δεν πρόκειται ποτέ

να υπάρξει!

Μελέτη περίπτωσης (συνέχεια)

Όταν συµβεί κάποιο σφάλµα στο λογισµικό, ο Βύρων αποφάσισε να εµφανίζεται ένα

κατάλληλο µήνυµα σφάλµατος και να διατηρείται αναλλοίωτη η κατάσταση της

βάσης. Σχεδίασε, λοιπόν, τα ακόλουθα δύο σχήµατα:

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 137

Page 139: pli42a

1 3 8 K E º A § A I O 7 : O ™ À ª µ √ § π ™ ª √ ™ Z

NNoottMMeemmbbeerr

• CWPhoneDir

name?: Employee

rep!: Message

name? œ members

rep! = ‘This person is not an employee of CHILDWARE’

RReeccoorrddAAllrreeaaddyyEExxiissttss

• CWPhoneDir

name?: Employee

newnumber?: Extension

rep!: Message

name? Æ newnumber? Œ telephones

rep! = ‘This record already exists in the telephones

database’

Με την ευκαιρία αυτή, ο Βύρων αποφάσισε να σχεδιάσει και ένα µήνυµα, το οποίο

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

SSuucccceessss

rep!: Message

rep! = ‘The requested operation was successfully executed’

ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 7.2

Ο Βύρων µπορεί τώρα να γράψει την ολοκληρωµένη προδιαγραφή της συνάρτη-

σης AddRecord, ως εξής:

CommitAddRecord AddRecord Ÿ Success ⁄ NotMember ⁄RecordAlreadyExists

∆οκιµάστε να γράψετε αναλυτικά το σχήµα CommitAddRecord.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 138

Page 140: pli42a

Παρατηρήστε στο δεύτερο σχήµα τη χρήση του τελεστή Ξ, µε τον οποίο δηλώνου-

µε ότι η κατάσταση του τραπεζικού λογαριασµού παραµένει αµετάβλητη. Έτσι, η

συνολική λειτουργία του προγράµµατος περιγράφεται από την εξίσωση:

DOWithdraw Withdraw Ÿ Success ⁄ NotEnoughMoney

7.5 ™¯ÂÛȷ΋ ÂÈÎfiÓ·

Η σχεσιακή εικόνα (relational image) (| U |) ενός συνόλου U αναφορικά µε µία

σχέση F είναι το σύνολο των µελών του πεδίου τιµών της F, τα οποία προκύπτουν

εάν αυτή εφαρµοστεί στο U:

y Œ F (| U |) ¤ ($ x: X ∑∑ x Œ U Ÿ x Æ y Œ F),

όπου: y: Y, F: X ´ Y και U: √ X.

Καλό είναι να γνωρίζετε ότι ισχύουν οι εξής νόµοι για τον τελεστή της σχεσιακής

εικόνας:

• F (| U1 » U2 |) = F (| U1 |) » F (| U2 |)

1 3 97 . 5 ™ Ã ∂ ™ π ∞ ∫ ∏ ∂ π ∫ √ ¡ ∞

¢Ú·ÛÙËÚÈfiÙËÙ· 7.3

Το πρόγραµµα ανάληψης χρηµάτων πρέπει να ενηµερώνει το χειριστή για την εξέ-

λιξη της διαδικασίας ανάληψης. Εάν λοιπόν αυτή ήταν επιτυχής, επιστρέφει το

µήνυµα Success. Αλλιώς, πρέπει να αντιµετωπίσει την περίπτωση το αιτούµενο

ποσό να είναι µεγαλύτερο από το υπόλοιπο του λογαριασµού µαζί µε την επιτρε-

πόµενη υπέρβαση. Στην περίπτωση αυτή, το πρόγραµµα πρέπει να εµποδίζει τη

λειτουργία της ανάληψης και να εµφανίζει σχετικό µήνυµα. ∆οκιµάστε να προ-

διαγράψετε τις λειτουργίες Success και NotEnoughMoney, πριν µελετήσετε την

απάντηση που σας προτείνουµε.

Οι ζητούµενες προδιαγραφές µπορεί να είναι ως εξής:

SSuucccceessss NNoottEEnnoouugghhMMoonneeyy

reply!: Message • Account

amount?: Ÿ

reply!: Message

reply! = ‘Please take the money’ amount? > bal + ovr

reply! = ‘There is not enough money in

your account’

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 139

Page 141: pli42a

1 4 0 K E º A § A I O 7 : O ™ À ª µ √ § π ™ ª √ ™ Z

• F (| U1 « U2 |) Ã F (| U1 |) « F (| U2 |),

όπου: F: X ´ Y και U1, U2: √ X.

Μελέτη περίπτωσης (συνέχεια)

Στη συνέχεια, ο Βύρων προδιαγράφει τη λειτουργία FindExtension µε την οποία µπο-

ρεί κάποιος, δίνοντας το όνοµα ενός υπαλλήλου, να ανακαλέσει από τη βάση τα

τηλέφωνα στα οποία µπορεί να τον βρει. Σύµφωνα µε τα προηγούµενα, το πρό-

γραµµα διαβάζει το όνοµα του υπαλλήλου στη µεταβλητή εισόδου name? και επι-

στρέφει τα τηλέφωνά του (τα οποία αποτελούν τη σχεσιακή εικόνα της name? ανα-

φορικά µε την telephones) στη µεταβλητή εξόδου emplnumbers! Σηµειώστε ότι αυτή

η λειτουργία πρέπει να αφήνει αµετάβλητη την κατάσταση της βάσης.

FFiinnddEExxtteennssiioonn

• CWPhoneDir

name?: Employee

emplnumbers!: √ Extension

name? Πdom telephones

numbers! = telephones (|name?|)

ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 7.3

∆οκιµάστε να προδιαγράψετε τη λειτουργία UnknownEmployee, η οποία χειρίζε-

ται το σφάλµα που προκύπτει όταν δεν ισχύει η προ – συνθήκη της FindExtension.

Με ποια εξίσωση περιγράφεται η συνολική λειτουργία CommitFindExtension;

7.6 ™¯ÂÛȷ΋ ·Ó·ÛÙÚÔÊ‹

Με δεδοµένη µία σχέση F, η οποία είναι µέλος του X ´ Y, µπορούµε να ορίσουµε

την ανάστροφη σχέση F~ να είναι µέλος του Υ ´ Χ:

y Æ x Œ F~ ¤ x Æ y Œ F

Οι ακόλουθοι νόµοι θα σας φανούν χρήσιµοι:

• (F~)~ = F,

• dom (F~) = ran F,

• ran (F~) = dom F.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 140

Page 142: pli42a

Μελέτη περίπτωσης (συνέχεια)

Αντιστρέφοντας τη σχέση telephones, ο Βύρων µπορεί να προδιαγράψει τη λει-

τουργία FindEmployee, µε την οποία κάποιος βρίσκει σε ποιον υπάλληλο ανήκει

ένας αριθµός κλήσης.

FFiinnddEEmmppllooyyeeee

• CWPhoneDir

Number?: Extension

Names!: √ Employee

Number? Πran telephones

Names! = telephones~ (|number?|)

1 4 17 . 6 ™ Ã ∂ ™ π ∞ ∫ ∏ ∞ ¡ ∞ ™ ∆ ƒ √ º ∏

¢Ú·ÛÙËÚÈfiÙËÙ· 7.4

Προσπαθήστε να βοηθήσετε το Βύρωνα να

(α)προδιαγράψει τη λειτουργία RemoveRecord, µε την οποία µπορεί κάποιος να

διαγράψει µία συσχέτιση από τη βάση δίνοντας το όνοµα του υπαλλήλου και

το τηλέφωνό του,

(β)σκεφτεί τι σφάλµα µπορεί να συµβεί και να προδιαγράψει το πρόγραµµα, το

οποίο θα το χειρίζεται,

(γ) γράψει την εξίσωση που περιγράφει τη συνολική λειτουργία

CommitRemoveRecord

Έπειτα, να συγκρίνετε τις απαντήσεις σας µε τις επιλογές του Βύρωνα που ακολουθούν.

Το ζητούµενο σχήµα Ζ είναι το εξής:

RReemmoovveeRReeccoorrdd

¢ CWPhoneDir

Name?: Employee

Oldnumber?: Extension

Name? Æ oldnumber? Œ telephones

Telephones' = telephones \ name? Æ oldnumber?

Members' = members

Το µοναδικό σφάλµα που µπορεί να συµβεί σχετίζεται µε την προ – συνθήκη name?

Æ oldnumber? Œ telephones (σηµαίνει ότι µπορούµε να διαγράψουµε µία εγγραφή

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 141

Page 143: pli42a

1 4 2 K E º A § A I O 7 : O ™ À ª µ √ § π ™ ª √ ™ Z

µόνο αν αυτή βρίσκεται στη βάση) και το χειρίζεται το πρόγραµµα UnknownRecord:

UUnnkknnoowwnnRReeccoorrdd

• CWPhoneDir

Name?: Employee

Oldnumber?: Extension

Rep!: Message

Name? Æ oldnumber? telephones

Rep! = ‘There is no record of this employee answering

to this phone number’

Η προδιαγραφή της συνολικής λειτουργίας περιγράφεται από την εξίσωση

CommitRemoveRecord RemoveRecord Ÿ Success ⁄UnknownRecord

ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 7.4

∆οκιµάστε να προδιαγράψετε τη λειτουργία UnknownExtension, η οποία χειρίζε-

ται το σφάλµα που προκύπτει όταν δεν ισχύει η προ–συνθήκη της FindEmployee.

Με ποια εξίσωση περιγράφεται η συνολική λειτουργία CommitFindEmployee;

7.7 ¶ÂÚÈÔÚÈÛÌfi˜ Î·È ·ÓÙÈ–ÂÚÈÔÚÈÛÌfi˜

Έστω το σύνολο των ζευγών που ικανοποιούν µία σχέση F και έστω ότι από αυτά

επιλέγουµε ένα υποσύνολο U µε βάση το πρώτο στοιχείο κάθε ζεύγους, το οποίο

προέρχεται από το πεδίο ορισµού Χ της σχέσης (π.χ. έστω ότι επιλέγουµε όλα τα

ζεύγη των οποίων το πρώτο στοιχείο ικανοποιεί κάποιον περιορισµό). Το προκύπτον

υποσύνολο των ζευγών που ικανοποιούν τη σχέση καλείται «περιορισµός του πεδί-

ου ορισµού» (domain restriction) της σχέσης F, συµβολίζεται ως U F και τα στοι-

χεία του ικανοποιούν την εξίσωση

x Æ y Œ U F ¤ (x Œ U Ÿ x Æ y Œ F),

όπου x: X, y: Y, U: √ X και F: X ´ Y.

Αντίστοιχα ορίζεται και ο «αντι – περιορισµός του πεδίου ορισµού» (domain anti –

restriction) µιας σχέσης F (συµβολίζεται µε U F), ως το υποσύνολο U, το οποίο περιέ-

χει εκείνα τα ζεύγη, των οποίων το πρώτο µέλος δεν ικανοποιεί κάποια ιδιότητα (µε την

προϋπόθεση ότι δεν υπάρχουν ζεύγη των οποίων το πρώτο µέλος και ικανοποιεί και δεν

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 142

Page 144: pli42a

ικανοποιεί την ιδιότητα). Τα στοιχεία του συνόλου αυτού ικανοποιούν την εξίσωση

x Æ y Œ U F ¤ (x œ U Ÿ x Æ y Œ F),

όπου x: X, y: Y, U: √ X και F: X ´ Y.

Για τους δύο αυτούς τελεστές ισχύουν οι ακόλουθοι νόµοι:

• (U F) » (U F) = F,

• U F Ã F,

• dom (U F) = U « (dom F),

• U1 (U2 F) = (U1 « U2) F,

• (U1 » U2) F = (U1 F) » (U2 F),

• U (F » G) = (U F) » (U G),

• U (F » G) = (U F) » (U G),

όπου U, U1, U2: √ X και F, G: X ´ Y.

Αντίστοιχα, ορίζονται:

• ο περιορισµός του πεδίου τιµών (range restriction), ως ο τελεστής που επι-

στρέφει ένα υποσύνολο των ζευγών που ικανοποιούν µία συνάρτηση, τέτοιο ώστε

το δεύτερο στοιχείο κάθε ζεύγους να ικανοποιεί κάποιον περιορισµό,

• ο αντι – περιορισµός του πεδίου τιµών (range anti – restriction), ως ο τελεστής

που επιστρέφει ένα υποσύνολο των ζευγών που ικανοποιούν µία συνάρτηση, τέτοιο

ώστε το δεύτερο στοιχείο κάθε ζεύγους να µην ικανοποιεί κάποιον περιορισµό.

Μελέτη περίπτωσης (συνέχεια)

Ο Βύρων θέλει τώρα να προδιαγράψει τη λειτουργία η οποία διαγράφει έναν υπάλλη-

λο από τη βάση, µαζί µε όλες τις εγγραφές που σχετίζονται µε αυτόν. Προσέξτε: πρό-

κειται για λειτουργία διαφορετική από αυτή που παρουσιάστηκε στη ∆ραστηριότητα

4, η οποία διαγράφει µόνο τη συσχέτιση ανάµεσα σε υπάλληλο και αριθµό κλήσης.

RReemmoovveeEEmmppllooyyeeee

• CWPhoneDir

name?: Employee

name? Πmembers

members’ = members \ name?

telephones’ = name? telephones

1 4 37 . 7 ¶ ∂ ƒ π √ ƒ π ™ ª √ ™ ∫ ∞ π ∞ ¡ ∆ π ¶ ∂ ƒ π √ ƒ π ™ ª √ ™

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 143

Page 145: pli42a

1 4 4 K E º A § A I O 7 : O ™ À ª µ √ § π ™ ª √ ™ Z

Για το χειρισµό του πιθανού λάθους (που είναι η απόπειρα διαγραφής κάποιου που δεν

ανήκει στους υπαλλήλους της επιχείρησης) αρκεί η συνάρτηση NotMember που

παρουσιάσθηκε πιο πάνω. Έτσι, ο πλήρης ορισµός της CommitRemoveEmployee είναι

CommitRemoveEmployee RemoveEmployee Ÿ Success ⁄NotMember

7.8 ÕÏÏÔÈ ÙÂÏÂÛÙ¤˜

Ο συµβολισµός Ζ είναι τόσο πλούσιος σε τελεστές, που η φιλοδοξία αυτής της ενό-

τητας είναι να παρουσιάσει µόνο τους πιο συνηθισµένους από αυτούς. Στην υποε-

νότητα αυτή θα γνωρίσουµε συνοπτικά τέσσερις ακόµη από αυτούς.

7.8.1 ™‡ÓıÂÛË Û¯¤ÛˆÓ

Ο τελεστής ; της «έµπροσθεν σχεσιακής σύνθεσης» (forward relational

composition) δύο σχέσεων Α και Β, για τις οποίες ισχύει ότι το πεδίο τιµών της Α

είναι το πεδίο ορισµού της Β, ορίζεται ως εξής:

x Æ z Œ F ; G ¤ ($ y: Y ∑∑ x Æ y Œ F Ÿ y Æ z Œ G),

όπου x: X, z: Ÿ, F: X ´ Y και G: Y ´ Ÿ.

Μερικές από τις ιδιότητες του τελεστή αυτού είναι οι ακόλουθες:

• (F ; G) ; H = F ; (G ; H),

• F ; (G1 » G2) = (F ; G1) » (F ; G2),

• (F1 » F2) ; G = (F1 ; G) » (F2 ; G),

• (F ; G) ~ = G~ ; F~,

όπου F, F1, F2: X1 ´ X2, G, G1, G2: X2 ´ X3 και H: X3 ´ X4.

Αντίστοιχα ορίζεται και ο τελεστής Î της «όπισθεν σχεσιακής σύνθεσης» (backward

relational composition) ως εξής:

z Æ x Œ G Î F ¤ x Æ z Œ F ; G

7.8.2 ¶ÚÔÛ·ÚÌÔÁ‹

Ο τελεστής ≈ της προσαρµογής (overriding), όταν εφαρµόζεται σε µία σχέση F, επι-

τρέπει την επαύξηση των ζευγών που ικανοποιούν την F µε τα ζεύγη που ικανοποι-

ούν µία σχέση G, ως

x Æ y Œ F ≈ G ¤ (x Æ y Œ G ⁄ (x Æ y Œ F Ÿ x œ dom G),

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 144

Page 146: pli42a

όπου x: X, y: Y, F,G: X ´ Y.

Μερικές ιδιότητες του τελεστή αυτού είναι οι ακόλουθες:

• F ≈ G = G » ((dom G) F),

• F ≈ F = F,

• (F ≈ G) ≈ H = F ≈ (G ≈ H),

• F ≈ ∆ = F,

• ∆ ≈ F = F,

• U (F ≈ G) = (U F) ≈ (U G),

• (F ≈ G) V Ã (F V) ≈ (G V),

όπου F, G, H: X ´ Y, U: √ X και V: √ Y.

Μελέτη περίπτωσης (συνέχεια)

Ας θεωρήσουµε τη γνωστή µας σχέση Telephones: Employee ´ Extension. Θεω-

ρήστε ότι η επιχείρηση CHILDWARE διαθέτει τέσσερις µονάδες συντήρησης των

τηλεφωνικών συνδέσεων, ως εξής:

ServiceUnit = Unit1, Unit2, RemoteUnit1, RemoteUnit2

Μπορεί λοιπόν να οριστεί η σχέση ExtensionService: Extension ´ ServiceUnit, η

οποία περιγράφει ποια µονάδα συντήρησης είναι υπεύθυνη για κάθε τηλεφωνική

σύνδεση.

Για να βρούµε για κάθε υπάλληλο τη µονάδα συντήρησης, την οποία θα πρέπει να

καλέσει εάν η σύνδεσή του παρουσιάσει προβλήµατα, χρησιµοποιούµε τον τελεστή

σύνθεσης:

CallService = Telephones ; ServiceUnit

Όταν η σύνδεση κάποιου υπαλλήλου παρουσιάζει προβλήµατα, η επιχείρηση του δια-

θέτει προσωρινά µια άλλη τηλεφωνική σύνδεση, µέχρι να επισκευαστεί η αρχική σύν-

δεση. Επειδή ο χρόνος επισκευής είναι συνήθως µία εβδοµάδα, στην αρχή κάθε εβδο-

µάδας καταρτίζεται ένα σύνολο ζευγών TemporaryTelephones: Employee ´ Extension,

µε τα προσωρινά τηλέφωνα που θα ισχύουν κατά την εβδοµάδα αυτή, τα οποία είναι

διαθέσιµα στη βάση µέσα από τη σχέση UpdatedTelephones:

UpdatedTelephones = Telephones ≈ TemporaryTelephones

1 4 57 . 8 ∞ § § √ π ∆ ∂ § ∂ ™ ∆ ∂ ™

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 145

Page 147: pli42a

1 4 6 K E º A § A I O 7 : O ™ À ª µ √ § π ™ ª √ ™ Z

7.8.3 MÂÙÔÓÔÌ·Û›·

Λέγοντας «µετονοµασία» (renaming) ενός σχήµατος εννοούµε την αλλαγή των ονο-

µάτων των τοπικών του µεταβλητών. Έτσι, ο συµβολισµός S[m/x] σηµαίνει ότι κάθε

ελεύθερη εµφάνιση της x στο S αντικαθίσταται από τη m.

7.8.4 AfiÎÚ˘„Ë

Ο συµβολισµός S\(x) σηµαίνει ότι αποκρύπτεται η µεταβλητή x από το τµήµα δηλώ-

σεων του S.

¶·Ú¿‰ÂÈÁÌ· 7.3

Στη συνέχεια αναγράφονται τρία σχήµατα: το αρχικό σχήµα S, το σχήµα Τ S[m/x]

και το σχήµα U S\(x):

S T

x, y: Õ m, y: Õ

V: √ Õ V: √ Õ

x ΠV fi y ΠV m ΠV fi y ΠV

U

y: Õ

V: √ Õ

$ x: Õ ∑∑ (x Œ V fi y Œ V)

7.8.5 E·Ó·¯ÚËÛÈÌÔÔ›ËÛË

Η αυστηρή δοµή και η γραφική φύση του συµβολισµού Ζ τον καθιστούν ιδανικό για

επαναχρησιµοποίηση των προδιαγραφών. Θα περιγράψουµε στην ενότητα αυτή δύο

τρόπους επαναχρησιµοποίησης: τη σύνθεση και τη διοχέτευση σχηµάτων.

Σύνθεση

Κατά τη σύνθεση S ; T δύο σχηµάτων (schema composition) συσχετίζουµε τις µετα-

βλητές της προκύπτουσας κατάστασης (after – state) του σχήµατος S µε τις µετα-

βλητές αρχικής κατάστασης (before – state) του σχήµατος Τ. Οι συσχετιζόµενες

µεταβλητές πρέπει να έχουν το ίδιο βασικό όνοµα (είναι το όνοµα της µεταβλητής,

όταν αφαιρεθούν όλοι οι ειδικοί συµβολισµοί όπως ?, ! κ.ά.). Οι µεταβλητές εισό-

δου και εξόδου δεν επηρεάζονται.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 146

Page 148: pli42a

¶·Ú¿‰ÂÈÁÌ· 7.4

Έστω τα ακόλουθα σχήµατα S και Τ:

S T

x?, s, s¢, y!: Õ x?, s, s¢: Õs¢ = s – x? s < x?

y! = s s¢ = s

Για να υπολογίσουµε το σχήµα S ; T χρειάζεται να ακολουθήσουµε τα εξής τέσσε-

ρα βήµατα:

1. Μετονοµάζουµε όλες τις µεταβλητές προκύπτουσας κατάστασης του S χρησιµο-

ποιώντας εντελώς καινούρια ονόµατα. Στο παράδειγµά µας τέτοια είναι η µετα-

βλητή s¢, την οποία µετονοµάζουµε σε ss, οπότε σχηµατίζουµε το σχήµα Alpha

S[ss/s¢].

2. Μετονοµάζουµε όλες τις µεταβλητές αρχικής κατάστασης του Τ χρησιµοποιώ-

ντας εντελώς καινούρια ονόµατα. Φροντίζουµε να χρησιµοποιήσουµε το ίδιο

όνοµα για κάθε µεταβλητή, η οποία περιγράφει αρχική κατάσταση στο σχήµα Τ

και προκύπτουσα κατάσταση στο σχήµα S. Στο παράδειγµά µας τέτοια είναι η

µεταβλητή s, την οποία µετονοµάζουµε σε ss (θυµηθείτε ότι µετονοµάσαµε την

s¢ σε ss) οπότε σχηµατίζουµε το σχήµα Beta T[ss/s].

3. Υπολογίζουµε τη σύζευξη των δύο µετονοµασµένων σχηµάτων, δηλαδή το σχήµα

Gamma S[ss/s¢] Ÿ T[ss/s].

4. Αποκρύπτουµε τις καινούριες µεταβλητές και προκύπτει το σχήµα Delta

(S[ss/s¢] Ÿ T[ss/s]) \ (ss). Τότε S ; T Delta.

Τα τέσσερα σχήµατα Alpha, Beta, Gamma και Delta φαίνονται στη συνέχεια.

Alpha Beta

x?, s, ss, y!: Õ x?, ss, s¢: Õ

ss = s – x? ss < x?

y! = s s¢ = ss

1 4 77 . 8 ∞ § § √ π ∆ ∂ § ∂ ™ ∆ ∂ ™

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 147

Page 149: pli42a

1 4 8 K E º A § A I O 7 : O ™ À ª µ √ § π ™ ª √ ™ Z

Gamma Delta

x?, s, s¢, ss, y!: Õ x?, s, s¢, y!: Õ

ss = s – x? $ ss: Õ ∑∑y! = s (ss = s – x? Ÿss < x? y! = s Ÿs¢ = ss ss < x? Ÿ

s¢ = ss)

Το σχήµα Delta µπορεί περαιτέρω να απλοποιηθεί ως εξής:

Delta

x?, s, s¢, y!: Õ

s¢ = s – x?

y! = s

s¢ < x?

¢Ú·ÛÙËÚÈfiÙËÙ· 7.5

Προσπαθήστε να συνθέσετε τα σχήµατα RemoveRecord και AddRecord της τηλε-

φωνικής βάσης για να προδιαγράψετε τη λειτουργία ChangeRecord που επιτρέπει

σε έναν υπάλληλο να αλλάξει τον αριθµό κλήσης του.

Υπόδειξη: Προσπαθήστε να ορίσετε τα ακόλουθα ενδιάµεσα σχήµατα:

Alpha RemoveRecord[members” / members’][telephones” / telephones’]

Beta AddRecord[members” / members’][telephones” / telephones’]

Gamma RemoveRecord[members” / members’][telephones” / telephones’]

Ÿ AddRecord[members” / members’][telephones” / telephones’]

Delta (RemoveRecord[members” / members’][telephones” / telephones’]

Ÿ AddRecord[members” / members’][telephones” / telephones’])

\ (members”, telephones”)

Τότε ChangeRecords RemoveRecord ; AddRecord

∆ιοχέτευση

Με τη διοχέτευση (schema piping) S >> T των σχηµάτων S και T µπορούµε να

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 148

Page 150: pli42a

κατασκευάσουµε ένα νέο σχήµα στο οποίο οι µεταβλητές εξόδου του S συσχετίζο-

νται µε τις µεταβλητές εισόδου του Τ. Όπως και πριν, οι συσχετιζόµενες µεταβλη-

τές πρέπει να έχουν το ίδιο βασικό όνοµα.

¶·Ú¿‰ÂÈÁÌ· 7.5

Έστω τα ακόλουθα σχήµατα S και Τ:

S T

x?, s, s¢, y!: Õ y?, t, t¢: Õ

s¢ = s + x? y? > t

y! = 2 * s¢ t¢ = t + y?

Για να υπολογίσουµε το σχήµα S >> T χρειάζεται να ακολουθήσουµε τα εξής τέσ-

σερα βήµατα:

1. Μετονοµάζουµε (χρησιµοποιώντας εντελώς καινούρια ονόµατα) κάθε µεταβλη-

τή εξόδου του S, της οποίας το βασικό όνοµα είναι ίδιο µε το βασικό όνοµα µιας

µεταβλητής εισόδου του Τ. Στο παράδειγµά µας αυτή είναι η µεταβλητή y!, οπότε

σχηµατίζουµε το σχήµα Alpha S[p/y!].

2. Μετονοµάζουµε κάθε µεταβλητή εισόδου του Τ, της οποίας το βασικό όνοµα είναι

ίδιο µε το βασικό όνοµα µιας µεταβλητής εξόδου του S στο ίδιο όνοµα που δώσα-

µε στη µεταβλητή εξόδου. Στο παράδειγµά µας αυτή είναι η µεταβλητή y?, οπότε

σχηµατίζουµε το σχήµα Beta S[p/y?].

3. Υπολογίζουµε τη σύζευξη των δύο µετονοµασµένων σχηµάτων, δηλαδή το σχήµα

Gamma S[p/y!] Ÿ T[p/y?].

4. Αποκρύπτουµε τις καινούριες µεταβλητές και προκύπτει το σχήµα

Delta (S[p/y!] Ÿ T[p/y?]) \ (p). Τότε S >> T Delta.

Τα τέσσερα σχήµατα Alpha, Beta, Gamma και Delta φαίνονται στη συνέχεια:

Alpha Beta

x?, s, s¢, p: Õ p, t, t¢: Õ

s¢ = s + x? p > t

p = 2 * s¢ t¢ = t + p

1 4 97 . 8 ∞ § § √ π ∆ ∂ § ∂ ™ ∆ ∂ ™

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 149

Page 151: pli42a

1 5 0 K E º A § A I O 7 : O ™ À ª µ √ § π ™ ª √ ™ Z

Gamma Delta

x?, s, s¢, p, t, t¢: Õ x?, s, s¢, t, t¢: Õ

s¢ = s + x? $ p: Õ ∑p = 2 * s¢ (s¢ = s + x? Ÿp > t p = 2 * s¢ Ÿt¢ = t + p p > t Ÿ

t¢ = t + p)

το οποίο απλοποιείται ως εξής:

Delta

x?, s, s¢, t, t¢: Õ

s¢ = s + x?

p = 2 * s¢ > t

t¢ = t + 2 * s¢

7.9 ¶ÚԉȷÁÚ·Ê‹ ÙÔ˘ ‰È·ÏfiÁÔ˘

Μέχρι τώρα έχουµε χρησιµοποιήσει το παράδειγµα της επιχείρησης CHILDWARE

για να δείξουµε τις ιδιότητες και τον τρόπο χρήσης των βασικών συµβόλων της

γλώσσας Ζ. Το σύνολο των προδιαγραφών που σχεδίασε ο Βύρων περιγράφουν τη

λειτουργία της βάσης δεδοµένων, χωρίς να περιγράφουν µία διαλογική εφαρµογή

µε την οποία οι χρήστες θα µπορούν να τη χειρίζονται. Αυτό είναι το αντικείµενο

αυτής της ενότητας.

Μελέτη περίπτωσης (συνέχεια)

Το βασικό στοιχείο µιας διαλογικής εφαρµογής είναι οι εντολές που παρέχει στο χρή-

στη. Στην περίπτωσή µας, αυτές συγκροτούν τον τύπο Command, ο οποίος περι-

λαµβάνει τουλάχιστον τις εξής εντολές:

ar Πρόσθεση εγγραφής fn Ανεύρεση υπαλλήλου

rr ∆ιαγραφή εγγραφής fe Ανεύρεση αριθµού κλήσης

am Προσθήκη υπαλλήλου rm ∆ιαγραφή υπαλλήλου

Στη συνέχεια, ο Βύρων συσχετίζει καθεµία από τις εντολές µε την αντίστοιχη λει-

τουργία του συστήµατος, από αυτές που έχει ήδη προδιαγράψει. Έτσι, για την εντο-

λή ar ορίζει το σχήµα CommitAddRecordCommand:

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 150

Page 152: pli42a

CCoommmmiittAAddddRReeccoorrddCCoommmmaanndd

cmd?: Command

cmd? = ar

ή εναλλακτικά:

CommitAddRecordCommand [cmd?: Command | cmd? = ar].

Ο δεύτερος ορισµός βασίζεται στον οριζόντιο τρόπο ορισµού ενός σχήµατος και είναι

ισοδύναµος µε το γραφικό (κατακόρυφο) τρόπο ορισµού.

Αυτό που τώρα χρειάζεται ο Βύρων είναι να ορίσει τι γίνεται, όταν ο χρήστης εκτε-

λέσει κάποια από τις εντολές του συστήµατος. Προδιαγράφει λοιπόν το σχήµα

EXECCommitAddRecord, το οποίο ορίζει ότι η λειτουργία CommitAddRecord εκτε-

λείται µόνο όταν υποβληθεί στο σύστηµα η εντολή ar:

EXECCommitAddRecord CommitAddRecordCommand ŸCommitAddRecord

1 5 17 . 1 0 ™ À ¡ ∞ ƒ ∆ ∏ ™ ∂ π ™

ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 7.5

Πριν προχωρήσετε, προσπαθήστε να προδιαγράψετε:

(α)το συσχετισµό εντολής – λειτουργίας για τις υπόλοιπες πέντε εντολές του

συστήµατος και

(β)τι γίνεται όταν ο χρήστης εκτελέσει κάποια από τις υπόλοιπες πέντε εντολές του

συστήµατος.

7.10 ™˘Ó·ÚÙ‹ÛÂȘ

Στη γλώσσα Ζ, µία συνάρτηση f από το σύνολο Χ στο σύνολο Υ είναι µία σχέση

ειδικού τύπου, η οποία αντιστοιχίζει ένα µέλος του Χ σε ένα το πολύ µέλος του Υ.

Εάν υπάρχουν στοιχεία του Χ, τα οποία δεν αντιστοιχίζονται σε κανένα στοιχείο του

Υ, η συνάρτηση καλείται «µερική» (partial function) και συµβολίζεται µε Χ Æ/ Y,

αλλιώς καλείται «ολική» (total function) και συµβολίζεται µε Χ Æ Y. Για παρά-

δειγµα, το σύνολο των µερικών συναρτήσεων ορίζεται ως εξής:

X Æ/ Y == f: X ´ Y | (" x: X, y, z: Y ∑∑ x Æ Y Œ f Ÿ x Æ z Œ f fi y = z)

Μία συνάρτηση ουσιαστικά είναι ένα σύνολο διατεταγµένων ζευγών. Συνεπώς, µπο-

ρεί να οριστεί είτε απαριθµώντας τα ζεύγη, είτε περιγράφοντας τις ιδιότητές τους.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 151

Page 153: pli42a

1 5 2 K E º A § A I O 7 : O ™ À ª µ √ § π ™ ª √ ™ Z

Μελέτη περίπτωσης (συνέχεια)

Ο Βύρων προδιαγράφει τη λειτουργία BranchPersonnel, η οποία καταγράφει τον

αριθµό των υπαλλήλων σε κάθε υποκατάστηµα της επιχείρησης. Αρχικά έχει ορίσει

τον τύπο Region, ο οποίος αποτελεί το σύνολο όλων των νοµών της χώρας. Στην

προδιαγραφή του σχήµατος χρησιµοποιεί τη µεταβλητή branch για να αναπαραστή-

σει το σύνολο των νοµών στους οποίους υπάρχει υποκατάστηµα της επιχείρησης,

και τη συνάρτηση personnel, η οποία επιστρέφει τον αριθµό των υπαλλήλων για

κάποιο υποκατάστηµα.

BBrraanncchhPPeerrssoonnnneell

branch: √ Region

personnel: Region Æ/ Ÿ

dom personnel = branch

Εάν αλλάξει ο αριθµός των υπαλλήλων σε ένα υποκατάστηµα, χρησιµοποιείται η

λειτουργία BranchUpdate:

BBrraanncchhUUppddaattee

¢ BranchPersonnel

branchid?: Region

newpers?: Ÿ

branchid? Πbranch

personnel’ = personnel ≈ branchid? Æ newpers?

branch' = branch

¶·Ú¿‰ÂÈÁÌ· 7.6

Στη γλώσσα Ζ µπορούµε να αναπαραστήσουµε έναν πίνακα ως ολική συνάρτηση

από ένα σύνολο αριθµών σε ένα σύνολο αντικειµένων από τα οποία προέρχονται τα

στοιχεία του:

table: IndexMin..IndexMax Æ ElementSet

Για παράδειγµα, ένας πίνακας µε τους υπαλλήλους ενός υποκαταστήµατος µπορεί

να οριστεί ως:

Staff: 1..StaffSize Æ Person

Τότε, εάν i Œ IndexMin.. IndexMax, table(i) είναι το στοιχείο που βρίσκεται στη

θέση i του πίνακα.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 152

Page 154: pli42a

Η ενηµέρωση των στοιχείων ενός πίνακα γίνεται µε τον τελεστή προσαρµογής. Έτσι,

εάν στη θέση i θέλουµε να προσθέσουµε το στοιχείο newelement, γράφουµε

table' = table ≈ i Æ newelement

Τέλος, εάν θέλουµε ο πίνακας να έχει και κενές θέσεις, τον αναπαριστούµε ως µερι-

κή συνάρτηση.

7.11 AÎÔÏÔ˘ı›Â˜

Συµβολίζουµε το σύνολο όλων των πεπερασµένων ακολουθιών από στοιχεία του

συνόλου Χ µε seq X και το ορίζουµε ως εξής:

seq X = f: Õ Ø= X | dom f = 1.. # f ,

όπου µε # f συµβολίζουµε τον αριθµό των µελών του συνόλου που αναπαριστά η

συνάρτηση f, η οποία ορίζεται ως µία πεπερασµένη µερική συνάρτηση (finite

partial function) από το σύνολο Õ στο σύνολο Χ (µία πεπερασµένη µερική συνάρ-

τηση g: A Ø= B είναι µία µερική συνάρτηση της οποίας το πεδίο ορισµού είναι πεπε-

ρασµένο υποσύνολο του Α).

Σε µια ακολουθία σ: seq X ορίζονται οι λειτουργίες:

• εύρεση ενός µέλους της (π.χ. σ(2)),

• εύρεση του πρώτου και του τελευταίου στοιχείου της (head σ, tail σ),

• εύρεση του αρχικού τµήµατος της, αποκλείοντας το τελευταίο στοιχείο της (front σ),

• εύρεση του τελικού τµήµατός της, αποκλείοντας το πρώτο στοιχείο της (tail σ),

• αναστροφή της σειράς των στοιχείων της (rev σ).

Ακόµη, εάν V Õ X, τότε σ C V είναι η ακολουθία που προκύπτει από τη σ διαλέγο-

ντας µόνο τα στοιχεία της σ που ανήκουν στο σύνολο V και διατηρώντας αναλλοί-

ωτη τη διάταξή τους.

Τέλος, εάν π: seq X, τότε ορίζεται η σύνθεση π [ σ των δύο ακολουθιών π και σ, µε

την προϋπόθεση ότι αυτές είναι του ίδιου τύπου.

¶·Ú¿‰ÂÈÁÌ· 7.7

Έστω σ = Ä10, 20, 30ê, π = Ä100, 200, 300, 400ê και V = 300, 100. Είναι φανε-

ρό ότι σ, π: seq Õ. Σύµφωνα µε τα προηγούµενα:

• σ(1) = 10, σ(3) = 30, π(2) = 100

• head(σ) = 10, head(π) = 100

1 5 37 . 1 1 A ∫ √ § √ À £ π ∂ ™

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 153

Page 155: pli42a

1 5 4 K E º A § A I O 7 : O ™ À ª µ √ § π ™ ª √ ™ Z

• last(σ) = 30, last(π) = 400

• front(σ) = Ä10, 20ê, front(π) = Ä100, 200, 300ê

• tail(σ) = Ä20, 30ê, tail(π) = Ä200, 300, 400ê

• rev(σ) = Ä30, 20, 10ê, rev(π) = Ä400, 300, 200, 100ê

• π C V = Ä100, 300ê

• σ [ π = Ä10, 20, 30, 100, 200, 300, 400ê

7.12 ¶ÔÏ˘–Û‡ÓÔÏ·

Ένα πολυ–σύνολο (multiset), αλλιώς γνωστό και ως «σάκος» (bag), είναι ένα ειδι-

κού τύπου σύνολο, του οποίου κάθε στοιχείο µπορεί να εµφανίζεται περισσότερες

από µία φορές. Όπως και στα σύνολα, η σειρά παράθεσης των στοιχείων δεν έχει

σηµασία:

bag X == X Æ/ Õ

Σε ένα πολυ – σύνολο Μ: bag X ορίζονται όλες οι πράξεις που ορίζονται στα σύνο-

λα, δηλαδή:

• το στοιχείο x: X ανήκει στο Μ (x Œ M),

• το πολυ – σύνολο K: bag X είναι υποσύνολο του Μ (K m M),

• η ένωση των δύο πολυ – συνόλων Κ και Μ (Κ + M).

Ακόµη, ορίζονται πράξεις που σχετίζονται µε το γεγονός των πιθανών πολλαπλών

εµφανίσεων κάθε στοιχείου ενός πολυ – συνόλου:

• ο αριθµός των εµφανίσεων ενός στοιχείου x στο πολυ – σύνολο Μ (count Μ x)

• ο κατ’ αντιστοιχία ελάχιστος αριθµός εµφανίσεων κάθε στοιχείου των πολυ –

συνόλων Κ και Μ (Κ * M)

• ο κατ’ αντιστοιχία µέγιστος αριθµός εµφανίσεων κάθε στοιχείου των πολυ – συνό-

λων Κ και Μ (Κ + M)

¶·Ú¿‰ÂÈÁÌ· 7.8

Έστω τα πολυ – σύνολα Κ = [[ 1, 1, 2, 3, 3, 3 ]] και Μ = [[1, 2, 2, 3, 3, 4]]. Τότε, σύµ-

φωνα µε τα προηγούµενα:

• 1 Œ K, 1 Œ M

• αν L = [[2, 3, 3]], τότε L m M

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 154

Page 156: pli42a

• K + M = [[1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 4]]

• count K 1 = 2, count K 3 = 3, count M 2 = 2, count M 4 = 1

• K * M = [[1, 2, 3, 3]]

1 5 57 . 1 2 ¶ √ § À ™ À ¡ √ § ∞

¢Ú·ÛÙËÚÈfiÙËÙ· 7.6 (ανακεφαλαιωτική)

Ταυτόχρονα µε τη βάση των εσωτερικών αριθµών κλήσης, ζητήθηκε από το Βύρω-

να να προδιαγράψει ένα πρόγραµµα µε το οποίο η Ελένη θα µπορεί να αποδίδει

κάθε µήνα στους πωλητές της επιχείρησης την προµήθεια και το επίδοµα παρα-

γωγικότητας που τους αναλογεί. Το σύστηµα θα πρέπει:

• Nα διατηρεί µία βάση δεδοµένων µε τις ηµερήσιες πωλήσεις κάθε πωλητή. Για

λόγους διακριτικότητας, κάθε πωλητής αναπαρίσταται µε τον αριθµό µητρώου του.

• Nα αρχικοποιεί τη βάση σε µηδενικές τιµές, µόνο µετά από εντολή της Ελένης.

• Nα υποστηρίζει την εισαγωγή των στοιχείων πωλήσεων σε ηµερήσια βάση από

δύο υπαλλήλους γραφείου, ώστε να αποφεύγονται λάθη δακτυλογράφησης.

• Nα υπολογίζει την προµήθεια και το επίδοµα µόνο µετά από εντολή της Ελένης.

Ο υπολογισµός γίνεται µε βάση την επίδοση του πωλητή σε σύγκριση µε τους

υπόλοιπους πωλητές στο υποκατάστηµα όπου εργάζεται.

• Nα επιστρέφει, όταν η Ελένη δώσει τον αριθµό µητρώου ενός πωλητή, το ποσό

της προµήθειας ή του επιδόµατος που δικαιούται.

Ένας πωλητής λαµβάνει προµήθεια µόνο όταν η αξία των πωλήσεών του υπερ-

βαίνει ένα ποσό κατωφλίου, το οποίο ορίζεται στα δύο τρίτα της µέσης τιµής της

αθροιστικής αξίας των πωλήσεων του υποκαταστήµατος. Τότε, το ποσό της προ-

µήθειας είναι το 10% του ποσού κατά το οποίο η αξία των πωλήσεων ξεπερνά το

ποσό κατωφλίου. Εάν δε η αξία των πωλήσεων ενός πωλητή ξεπερνά κατά 115%

τη µέση τιµή της αθροιστικής αξίας των πωλήσεων του υποκαταστήµατος, τότε ο

πωλητής λαµβάνει επίδοµα ίσο µε το 0,5% της συνολικής αξίας των πωλήσεων του

υποκαταστήµατος.

Προσπαθήστε να προδιαγράψετε µε τη γλώσσα Ζ:

1. το χώρο καταστάσεων του προγράµµατος CWSalespersons,

2. την αρχική κατάσταση του προγράµµατος,

3. τις λειτουργίες µε τις οποίες µπορεί κανείς να προσθέσει στοιχεία πωλήσεων,

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 155

Page 157: pli42a

1 5 6 K E º A § A I O 7 : O ™ À ª µ √ § π ™ ª √ ™ Z

να υπολογίσει την προµήθεια και το επίδοµα, και να ανακαλέσει τα στοιχεία

ενός πωλητή µε βάση τον αριθµό µητρώου του,

4. τα µηνύµατα λάθους που εκδίδει το πρόγραµµα, και

5. το διάλογο χρήστη – προγράµµατος

Υποδείξεις: Kαλύτερα να ξεκινήσετε από την εξίσωση µε την οποία µπορούµε να

ορίσουµε το συνολικό πρόγραµµα SalesPersonsDB. Θεωρήστε ότι έχει γίνει η

δήλωση του πλήθους των πωλητών που ανήκουν σε κάποιο υποκατάστηµα ως

StaffSize: Õ, ότι το σύνολο Ν είναι γνωστό, όπως και η συνάρτηση SumArray(X),

η οποία επιστρέφει το άθροισµα των στοιχείων του πίνακα Χ. Θεωρήστε ότι το

σύνολο Message περιλαµβάνει όλα τα µηνύµατα του συστήµατος.

Η εξίσωση που περιγράφει τη συνολική λειτουργία του συστήµατος είναι

SalesPersonsDB EXECInitCWSalesPersons ⁄ EXECCommitAddSales ⁄EXECCommitCommision ⁄ EXECCommitBonus ⁄

EXECCommitFindData ⁄ UnknownCommand

Το σύνολο των εντολών που υποστηρίζει το σύστηµα είναι

Command = in, as, cc, cb, fi

και οι λειτουργίες χειρισµού των εντολών αυτών προδιαγράφονται ως εξής:

InitCWSalesPersonsCommand [cmd?: Command | cmd? = in],

CommitAddSalesCommand [cmd?: Command | cmd? = as],

CommitCommisionCommand [cmd?: Command | cmd? = cc],

CommitBonusCommand [cmd?: Command | cmd? = cb],

CommitFindDataCommand [cmd?: Command | cmd? = fi].

Τώρα ορίζουµε τα σχήµατα που περιγράφουν την εκτέλεση των εντολών ενεργο-

ποιώντας τις αντίστοιχες λειτουργίες του συστήµατος:

EXECInitCWSalesPersons InitCWSalesPersonsCommand Ÿ InitCWSalesPersons’

EXECCommitAddSales CommitAddSalesCommand Ÿ CommitAddSales

EXECCommitCommision CommitCommisionCommand Ÿ CommitCommision

EXECCommitBonus CommitBonusCommand Ÿ CommitBonus

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 156

Page 158: pli42a

EXECCommitFindData CommitFindDataCommand Ÿ CommitFindData

Το ζητούµενο σχήµα κατάστασης είναι το εξής:

CCWWSSaalleessppeerrssoonnss

salesfigures, commission, bonus: 1.. StaffSize Æ Õ

totalsales, avgsales, threshvalue: Õ

totalsales = SumArray(sales)

avgsales = totalsales div StaffSize

threshvalue = (2 * avgsales) div 3

Παρατηρήστε ότι δηλώνουµε τρεις πίνακες µε διαστάσεις από 1 έως StaffSize. Σε

καθένα από αυτούς θα διατηρούµε τα στοιχεία πωλήσεων, προµηθειών και επιδο-

µάτων κάθε πωλητή του υποκαταστήµατος.

Η αρχική κατάσταση του προγράµµατος προδιαγράφεται από το σχήµα

InitCWSalesPersons’, το οποίο προκύπτει προσθέτοντας έναν «τόνο» σε όλες τις

µεταβλητές του InitCWSalesPersons:

IInniittCCWWSSaalleessPPeerrssoonnss

CWSalesPersons

" i: 1.. StaffSize ∑ salesfigures(i) = commission(i) =

bonus(i) = 0

Στη συνέχεια προδιαγράφουµε τις υπόλοιπες τέσσερις λειτουργίες:

AAddddSSaalleess

¢ CWSalesPersons

emplid?, sales?, salesconf?: Õ

emplid? Π1.. StaffSize

sales? = salesconf?

salesfigures' = salesfigures ≈ emplid? Æsalesfigures(emplid?) + sales?

totalsales' = totalsales + sales

commission' = commission

bonus' = bonus

Η µεταβλητή emplid? αναπαριστά τον αριθµό µητρώου του υπαλλήλου, ενώ οι µετα-

βλητές sales? και salesconf? αναπαριστούν τη διπλή εισαγωγή του ποσού των πωλή-

1 5 77 . 1 2 ¶ √ § À ™ À ¡ √ § ∞

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 157

Page 159: pli42a

1 5 8 K E º A § A I O 7 : O ™ À ª µ √ § π ™ ª √ ™ Z

σεων, ώστε να αποφευχθεί κάποιο λάθος πληκτρολόγησης.

CCoommmmiissssiioonn

¢ CWSalesPersons

" i: 1.. StaffSize ∑ commission' = commission ≈ i Æ(if salesfigures(i) > threshvalue 100 then

(salesfigures(i) – threshvalue) div 10 else 0)

salesfigures' = salesfigures

totalsales' = totalsales

bonus' = bonus

avgsales' = avgsales

threshvalue' = threshvalue

Στο σχήµα αυτό χρησιµοποιήσαµε την έκφραση επιλογής υπό συνθήκη που παρέχει

η γλώσσα Ζ, η οποία στη γενική της µορφή γράφεται

if √ then t else u

BBoonnuuss

¢ CWSalesPersons

" i: 1.. StaffSize ∑ bonus' = bonus ≈ i Æ (if

salesfigures(i) > (115 * avgsales) div 100 then

totalsales div 200 else 0)

salesfigures' = salesfigures

totalsales' = totalsales

commission' = commission

avgsales' = avgsales

threshvalue' = threshvalue

FFiinnddDDaattaa

• CWSalesPersons

emplid?: Õ

empldata!: Õ X Õ X Õ

emplid? Π1.. StaffSize

empldata! = (salesfigures(emplid?), commission(emplid?),

bonus(emplid?))

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 158

Page 160: pli42a

Το σύνολο των µηνυµάτων που χρειάζεται να εκδίδει το σύστηµα είναι

Message::= ‘Operation concluded successfully’ | ‘This

employee id does not exist’ | ‘The two sales figures are

not equal’ | ‘This command is unknown’

Για κάθε µήνυµα προδιαγράφουµε ένα σχήµα. Το δεύτερο και το τρίτο µήνυµα σχε-

τίζονται µε πιθανά σφάλµατα της λειτουργίας AddSales (το τρίτο µπορεί να εµφα-

νιστεί και κατά τη λειτουργία FindData), ενώ το τέταρτο µήνυµα εµφανίζεται όταν

ο χρήστης χρησιµοποιήσει λάθος εντολή.

Με βάση τα σχήµατα αυτά, ορίζουµε και τα εξής σχήµατα:

CommitAddSales AddSales Ÿ Success ⁄ UnknownSalesperson ⁄SalesMismatch

CommitCommission Commission Ÿ Success

CommitBonus Bonus Ÿ Success

CommittFindData FindData Ÿ Success ⁄ UnknownSalesperson

1 5 97 . 1 2 ¶ √ § À ™ À ¡ √ § ∞

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 159

Page 161: pli42a

1 6 0 K E º A § A I O 7 : O ™ À ª µ √ § π ™ ª √ ™ Z

™‡ÓÔ„Ë

Στο κεφάλαιο αυτό παρουσιάσθηκε η γλώσσα τυπικών προδιαγραφών Ζ. Όπως είδα-

µε, η γλώσσα αυτή είναι κατάλληλη για την προδιαγραφή συστηµάτων λογισµικού

γιατί χρησιµοποιεί τις έννοιες της λειτουργίας και της κατάστασης. Η µελέτη των βασι-

κών τελεστών της γλώσσας (µε τη βοήθεια των παραδειγµάτων) σας βοήθησε να

κατανοήσετε τον τρόπο µε τον οποίο είναι δυνατό να αναπαρασταθεί µε σχήµατα Ζ

η λειτουργικότητα ενός τµήµατος λογισµικού, ξεκινώντας από την αναπαράσταση των

δεδοµένων και της κατάστασης, του τρόπου µεταβολής της κατάστασης και φτάνο-

ντας έως το χειρισµό λαθών και την αναπαράσταση του διαλόγου µε το χρήστη. Στις

τελευταίες ενότητες παρουσιάστηκαν τρόποι προδιαγραφής σύνθετων τύπων δεδο-

µένων και λειτουργιών µε τους τελεστές σύνθεσης και διοχέτευσης, τις ακολουθίες,

τις συναρτήσεις και τα πολυ σύνολα.

Σας υπενθυµίζω ότι ο στόχος του κεφαλαίου δεν είναι να γίνετε ειδικοί στην εφαρ-

µογή του συµβολισµού Ζ, αλλά να κατανοήσετε τις δυνατότητες και τη φιλοσοφία του.

Προς το στόχο αυτό συµβάλλει και η ανακεφαλαιωτική δραστηριότητα 6, η οποία

παρουσιάζει την προδιαγραφή ενός ολοκληρωµένου τµήµατος λογισµικού. Βεβαιω-

θείτε ότι έχετε κατανοήσει την απάντηση στη δραστηριότητα αυτή πριν προχωρήσε-

τε στα επόµενα κεφάλαια.

BÈ‚ÏÈÔÁÚ·Ê›·

[1] J. R. Abrial (1980), The specification language Z: basic library. Oxford University

PRG.

[2]A. Diller (1994), Z: an introduction to formal methods. J. Wiley & sons, NY.

[3] I. Hayes (ed) (1987), Specification case studies. Prentice – Hall: London.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 160

Page 162: pli42a

¢›ÎÙ˘· PETRI

™ÎÔfi˜

Στο κεφάλαιο αυτό θα παρουσιαστούν τα δίκτυα Petri, τα οποία αποτελούν την περισ-

σότερο διαδεδοµένη γραφική τυπική τεχνική σχεδίασης συστηµάτων.

¶ÚÔÛ‰ÔÎÒÌÂÓ· ·ÔÙÂϤÛÌ·Ù·

Όταν θα έχετε µελετήσει το κεφάλαιο αυτό, θα µπορείτε να:

• περιγράψετε τις βασικές έννοιες των δικτύων Petri: θέση, µετάβαση, τεκµήριο,

• δώσετε τον τυπικό ορισµό των δικτύων Petri,

• περιγράψετε τον κανόνα πυροδότησης των δικτύων Petri,

• περιγράψετε τις ιδιότητες των δικτύων Petri χαµηλού επιπέδου,

• αναγνωρίσετε και σχεδιάσετε δίκτυα Petri χαµηλού επιπέδου,

• περιγράψετε τις ιδιότητες και τον κανόνα πυροδότησης των δικτύων συνθήκης –

γεγονότος, των δικτύων θέσης–µετάβασης και των δικτύων διακριτών τεκµηρίων,

• αναγνωρίσετε και αποφύγετε καταστάσεις σύγκρουσης και επαφής,

• προδιαγράψετε ένα σύστηµα χρησιµοποιώντας δίκτυα συνθήκης–γεγονότος, δίκτυα

θέσης–µετάβασης ή δίκτυα διακριτών τεκµηρίων.

ŒÓÓÔȘ ÎÏÂȉȿ

8∫ ∂ º ∞ § ∞ π √

• ενεργητικές οντότητες

• παθητικές οντότητες

• τεκµήρια

• βάρος

• χωρητικότητα

• πηγαία/απορροφητική µετάβαση

• αυτο ανακύκλωση

• σύγκρουση

• επαφή

• θέσεις

• µεταβάσεις

• σηµείωση

• αρχική σηµείωση

• πυροδότηση

• σύνηθες ΡΝ

• αγνό ΡΝ

• µετασχηµατισµός συµπληρωµατικών

θέσεων

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 161

Page 163: pli42a

1 6 2 K E º A § A I O 8 : ¢ π ∫ ∆ À∞ P E T R I

∂ÈÛ·ÁˆÁÈΤ˜ ·Ú·ÙËÚ‹ÛÂȘ

Τα ∆ίκτυα Petri (Petri Nets – PN) είναι ένα γραφικό εργαλείο προδιαγραφών, το

οποίο συνδυάζει την αµεσότητα της γραφικής αναπαράστασης µε την αυστηρότητα

της µαθηµατικής σκέψης. Ο συνδυασµός των δύο αυτών παραγόντων κάνει τα ΡΝ

ένα εργαλείο κατάλληλο τόσο για τυπική προδιαγραφή, όσο και για µη τυπική περι-

γραφή της δοµής και της λειτουργίας ενός συστήµατος.

Θα παρατηρήσατε ότι χρησιµοποίησα την λέξη «σύστηµα» και όχι «λογισµικό». Πραγ-

µατικά, η βασική ιδέα πίσω από τα ΡΝ είναι τόσο γενική, ώστε µπορεί να αναπαρα-

στήσει οποιοδήποτε δυναµικό σύστηµα ικανό να επεξεργαστεί διακριτά γεγονότα. Τα

συστήµατα λογισµικού, ιδιαίτερα αυτά που υλοποιούν κατανεµηµένες ή παράλληλες

αρχιτεκτονικές (π.χ. κατανεµηµένες βάσεις δεδοµένων, παράλληλα προγράµµατα,

αλλά και αλληλεπιδραστικά συστήµατα, λειτουργικά συστήµατα, τυπικές γλώσσες

κ.ά.), αποτελούν ένα υποσύνολο αυτής της κατηγορίας συστηµάτων.

Άλλες εφαρµογές των ΡΝ που έχουν κατά καιρούς προταθεί στη βιβλιογραφία περι-

λαµβάνουν συστήµατα βιοµηχανικού ελέγχου, πρωτόκολλα επικοινωνιών, συστήµα-

τα ανεκτικά σε σφάλµατα, VLSI, ασύγχρονα κυκλώµατα, τοπικά δίκτυα, νευρωνικά

δίκτυα, ψηφιακά φίλτρα, δίκτυα αποφάσεων κ.ά.

Όλα αυτά τα συστήµατα χαρακτηρίζονται ως ασύγχρονα, κατανεµηµένα ή παράλληλα, µη

ντετερµινιστικά ή στοχαστικά και εµφανίζουν φαινόµενα συγχρονισµού και διαµοίρασης

πόρων. Τα ΡΝ είναι κατάλληλα για την προδιαγραφή τέτοιων συστηµάτων επειδή:

• Παρέχουν τη δυνατότητα αναπαράστασης αιτιοκρατικών συσχετισµών ανάµεσα στα

συστατικά µέρη του συστήµατος,

• Επιτρέπουν την προδιαγραφή της δοµής του συστήµατος σε διαφορετικά επίπεδα

αφαιρετικότητας χωρίς να αλλάζει το εργαλείο αναπαράστασης, παρέχοντας τη

δυνατότητα αντικατάστασης ενός τµήµατος της προδιαγραφής από ένα νέο ΡΝ,

• Υποστηρίζουν την αναπαράσταση των ιδιοτήτων του συστήµατος χρησιµοποιώντας

όρους του ίδιου του συστήµατος, και επιτρέπουν τον τυπικό έλεγχο της ορθότητας

του συστήµατος µε τη χρήση του ίδιου του εργαλείου προδιαγραφής.

Το µεγάλο µειονέκτηµα των ΡΝ είναι η έκρηξη της πολυπλοκότητας των δικτύων που

περιγράφουν ακόµη και συστήµατα µεσαίου µεγέθους. Για να περιοριστεί το µέγεθος

των προδιαγραφών που προκύπτουν, προτείνονται στη βιβλιογραφία ΡΝ τα οποία

ενσωµατώνουν στο συµβολισµό ένα µεγάλο µέρος της σηµασιολογικής πληροφορίας

που σχετίζεται µε το χώρο εφαρµογής του υπό περιγραφή συστήµατος. Αυτά καλού-

νται ΡΝ Υψηλού Επιπέδου (High Level Petri Nets – HLPN), και διαφέρουν από τα

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 162

Page 164: pli42a

βασικά, Χαµηλού Επιπέδου ΡΝ (Low Level Petri Nets – LLPN) σε δύο σηµεία:

• Τα HLPN οδηγούν στην ανάπτυξη συνεκτικών προδιαγραφών που είναι πλούσιες

σε σηµασιολογική πληροφορία, ενώ οι προδιαγραφές που αναπτύσσονται µε τα

LLPN είναι εκτενείς, λεπτοµερείς και ίσως δυσνόητες,

• Έχουν αναπτυχθεί τεχνικές τυπικής ανάλυσης µόνο για τα LLPN. Στην πραγµατι-

κότητα, κάθε HLPN πρέπει να «µεταφραστεί» σε ένα LLPN για να υποστεί τυπική

ανάλυση, κάτι που δεν είναι πάντα εφικτό µε τη χρήση περιορισµένων πόρων.

Για τους λόγους αυτούς, η πρακτική εφαρµογή των ΡΝ γίνεται πάντα µε τη χρήση αυτο-

µατοποιηµένων εργαλείων. Συνήθως, κάθε ερευνητική οµάδα που αναπτύσσει ένα νέο

HLPN, υλοποιεί και χρησιµοποιεί και ένα περιβάλλον λογισµικού, το οποίο επιτρέπει

τη γραφική προδιαγραφή συστηµάτων και την ανάλυση των δικτύων που προκύπτουν.

Σηµειώνεται, τέλος, ότι ο γραφικός χαρακτήρας των ΡΝ επιτρέπει, εκτός από την

εφαρµογή τυπικών τεχνικών, την ανάλυση των προδιαγραφών µε την προσοµοίωση

της συµπεριφοράς του συστήµατος. Σε τέτοια περίπτωση, η αναπαράσταση του συστή-

µατος ξεκινά από µια αρχική κατάσταση και προσοµοιώνεται η ακολουθία των κατα-

στάσεων από τις οποίες περνά το σύστηµα.

Ιστορικά, η σύλληψη των ΡΝ βρίσκεται στη διατριβή του Carl Adam Petri, η οποία

υποβλήθηκε το 1962 στο University of Darmstadt της Γερµανίας. Η εργασία του Petri

υπέπεσε (µετά το 1965) στην αντίληψη του A. W. Holt, ο οποίος τη χρησιµοποίησε

στο Information Systems Theory Project, στις Η.Π.Α. Κατά τα έτη 1970 – 75, το

Computation Structure Group του M.I.T. (Η.Π.Α.) διεξήγαγε έντονη έρευνα πάνω

στη θεωρία και τις εφαρµογές των ΡΝ, ενώ από το 1975 και µετά η πρωτοβουλία

πέρασε στους Ευρωπαίους ερευνητές. Σήµερα, διεξάγεται παγκοσµίως ένας αριθµός

από συνέδρια και τεχνικές συναντήσεις µε θέµα τα ΡΝ, κάτι που απορρέει από τη

µεγάλη διάδοση της τεχνικής και την ευρεία εφαρµογή των HLPN.

Στο κεφάλαιο αυτό παρουσιάζονται αρχικά οι βασικές έννοιες των ΡΝ (Ενότητα 8.1),

δηλαδή οι έννοιες της θέσης, της µετάβασης και των τεκµηρίων. Στη συνέχεια ορί-

ζονται µε µαθηµατικά τα ΡΝ και περιγράφεται ο κανόνας πυροδότησης, ο οποίος προ-

καλεί την αλλαγή κατάστασης σε ένα ΡΝ (Ενότητα 8.2). Στην ενότητα 8.3 περιγρά-

φονται τρία στοιχειώδη ΡΝ, οι µηχανές κατάστασης, οι σηµειωµένοι γράφοι και τα

δίκτυα ελεύθερης επιλογής. Στις επόµενες τρεις ενότητες περιγράφονται τρία ΡΝ υψη-

λού επιπέδου, καθένα από τα οποία έχει σταδιακά µεγαλύτερη εκφραστικότητα: τα

δίκτυα συνθήκης – γεγονότος (Ενότητα 8.4), τα δίκτυα θέσης – µετάβασης (Ενότητα

8.5) και τα δίκτυα διακριτών τεκµηρίων (Ενότητα 8.6). Τέλος, στην Ενότητα 8.7 ανα-

φέρονται µερικά ακόµη δίκτυα Petri υψηλού επιπέδου.

1 6 3∂ π ™ ∞ ° ø ° π ∫ ∂ ™ ¶ ∞ ƒ∞∆ ∏ ƒ ∏ ™ ∂ π ™

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 163

Page 165: pli42a

1 6 4 K E º A § A I O 8 : ¢ π ∫ ∆ À∞ P E T R I

8.1 EÓÂÚÁËÙÈΤ˜ ÔÓÙfiÙËÙ˜, ·ıËÙÈΤ˜ ÔÓÙfiÙËÙ˜, ÙÂÎÌ‹ÚÈ·

Τα Petri Nets βασίζονται στην απλή και γενική παρατήρηση ότι ένα σύστηµα απο-

τελείται από ενεργητικές οντότητες (active components), οι οποίες, όταν συµβεί

κάποιο γεγονός (event), µεταχειρίζονται παθητικές οντότητες (passive components)

για να εξαγάγουν ένα αποτέλεσµα.

¶·Ú¿‰ÂÈÁÌ· 8.1[1]

Για να κατανοήσετε καλύτερα τι είναι ενεργητική και παθητική οντότητα, ας προ-

σπαθήσουµε να αναπαραστήσουµε χρησιµοποιώντας ΡΝ τον τρόπο λειτουργίας της

δανειστικής βιβλιοθήκης του ΕΑΠ, η οποία προσφέρει υπηρεσίες δανεισµού και επι-

στροφής βιβλίων. Για να δανειστεί ένα βιβλίο, ο φοιτητής συµπληρώνει µια φόρµα

στο ταµείο της βιβλιοθήκης και την παραδίδει στον βιβλιοθηκονόµο. Ο τελευταίος,

αναζητά το βιβλίο και το παραδίδει στο φοιτητή. Κατά την επιστροφή, ο φοιτητής

παραδίδει το βιβλίο στο βιβλιοθηκονόµο που εργάζεται στο ταµείο της βιβλιοθήκης,

ο οποίος το τοποθετεί στη θέση του.

Στο Σχήµα 8.1 φαίνεται το ΡΝ που αναπαριστά τις δύο αυτές διαδικασίες. Το σύστη-

µα αποτελείται από ενεργητικές οντότητες (φοιτητής, αφαίρεση βιβλίου, τοποθέτη-

ση βιβλίου) και παθητικές οντότητες (ταµείο, ράφια).

[1] Το παράδειγµα αυτό και η µελέτη περίπτωσης που περιλαµβάνονται στο κεφάλαιο αυτό αποτελούν

προσαρµογή παραδειγµάτων από το Reisig[92].

™¯‹Ì· 8.1

Η βιβλιοθήκη

του ΕΑΠ

οργανωµένη ως

ένα σύνολο

ενεργητικών και

παθητικών

οντοτήτων

Φοιτητής

Aφαίρεση|Bιβλίου

Tοποθέτηση|Bιβλίου

Pάφια

Tαµείο

Οι παθητικές οντότητες έχουν τη δυνατότητα να αποθηκεύουν αντικείµενα και να

βρίσκονται σε διαφορετικές καταστάσεις. Οι ενεργητικές οντότητες είναι ικανές

να παράγουν, µεταφέρουν ή τροποποιήσουν αντικείµενα. Στα ΡΝ, οι ενεργητικές

οντότητες καλούνται µεταβάσεις (transitions) και συµβολίζονται µε ένα ορθογώ-

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 164

Page 166: pli42a

Το σύστηµα της βιβλιοθήκης µπορεί να αναλυθεί ακόµη περισσότερο εάν θεωρή-

σουµε ότι:

• η βιβλιοθήκη του ΕΑΠ διαθέτει ξεχωριστά ταµεία για καθεµία από τις διαδικα-

σίες (Σχήµα 8.2(α)),

• οι βιβλιοθηκονόµοι διατηρούν ένα ευρετήριο δανεισθέντων βιβλίων, στο οποίο

καταγράφουν κάθε δανεισµό ή επιστροφή βιβλίου (Σχήµα 8.2(β)).

1 6 58 . 1 E ¡ ∂ ƒ ° ∏ ∆ π ∫ ∂ ™ √ ¡ ∆ √ ∆ ∏ ∆ ∂ ™ , ¶ ∞ £ ∏ ∆ π ∫ ∂ ™ √ ¡ ∆ √ ∆ ∏ ∆ ∂ ™ , ∆ ∂ ∫ ª ∏ ƒ π ∞

Από τα παραπάνω, συµπεραίνουµε ότι ένα ΡΝ µπορεί να επεκταθεί µε δύο τρόπους:

• Αναλύοντας µια οντότητα (π.χ. ταµείο) σε περισσότερες

• Προσθέτοντας µια εντελώς νέα οντότητα (π.χ. ευρετήριο)

νιο ή δύο παράλληλες γραµµές. Οι παθητικές οντότητες καλούνται θέσεις (places)

και συµβολίζονται µε κύκλους. Οι κατευθυνόµενες πλευρές (βέλη) συµβολίζουν

τη λειτουργική συσχέτιση ανάµεσα σε µεταβάσεις και θέσεις. Ένα βέλος ποτέ δεν

αναπαριστά µια οντότητα του συστήµατος και πάντα συσχετίζει µια µετάβαση µε

µια θέση ή το αντίστροφο.

Aίτηση Aίτηση

Παραλαβή Παραλαβή

Eπιστροφή Eπιστροφή

Tαµείο|Aιτήσεων

Tαµείο|Aιτήσεων

Tαµείο|Παραλαβών

Tαµείο|Παραλαβών

Tαµείο|Eπιστροφών

Tαµείο|Eπιστροφών

Aφαίρεση|Bιβλίου

Aφαίρεση|Bιβλίου

Tοποθέτηση|Bιβλίου

Tοποθέτηση|Bιβλίου

Pάφια Pάφια

(α) (β)

Eυρετήριο

™¯‹Ì· 8.2

Ανάλυση του ΡΝ

που αναπαριστά

τη βιβλιοθήκη

του ΕΑΠ

Ας δούµε τώρα πώς λειτουργεί στην πράξη η βιβλιοθήκη του ΕΑΠ. Αρχικά, υπάρ-

χει ένα σύνολο βιβλίων στα ράφια, τα οποία αναπαρίστανται µε µαύρα στίγµατα στο

Σχήµα 8.3. Τα στίγµατα αυτά, στην ορολογία των ΡΝ, καλούνται τεκµήρια (tokens).

Όταν ένας φοιτητής επιθυµεί να δανειστεί ένα βιβλίο, απευθύνεται στο ταµείο αιτή-

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 165

Page 167: pli42a

1 6 6 K E º A § A I O 8 : ¢ π ∫ ∆ À∞ P E T R I

σεων. Το γεγονός αυτό δηµιουργεί ένα τεκµήριο στην αντίστοιχη θέση (Σχήµα

8.3(α)). Ενεργοποιείται τότε ο υπεύθυνος βιβλιοθηκονόµος και «χρησιµοποιεί» την

αίτηση του φοιτητή για να ανακαλέσει το βιβλίο από τα ράφια, να το παραδώσει στο

φοιτητή και να ενηµερώσει το ευρετήριο (Σχήµα 8.3(β)).

™¯‹Ì· 8.3

Αναπαράσταση

µε ΡΝ της λει-

τουργίας

της βιβλιοθήκης

του ΕΑΠ

Aίτηση

Παραλαβή

Eπιστροφή

Tαµείο|Aιτήσεων

Tαµείο|Παραλαβών

Tαµείο|Eπιστροφών

Aφαίρεση|Bιβλίου

Tοποθέτηση|Bιβλίου

Pάφια

(α) (β)

Eυρετήριο

Aίτηση

Παραλαβή

Eπιστροφή

Tαµείο|Aιτήσεων

Tαµείο|Παραλαβών

Tαµείο|Eπιστροφών

Aφαίρεση|Bιβλίου

Tοποθέτηση|Bιβλίου

Pάφια

Eυρετήριο

Παρατηρήστε ότι η κατάσταση του συστήµατος ουσιαστικά αναπαρίσταται από

την κατανοµή των τεκµηρίων στις θέσεις. Η κατανοµή αυτή καλείται σηµείωση

(marking) του ΡΝ. Η κατάσταση του συστήµατος αλλάζει όταν αλλάξει η κατα-

νοµή αυτή. Κάθε αλλαγή κατάστασης συµβαίνει ως αποτέλεσµα της ενεργοποίη-

σης (πυροδότησης) µιας µετάβασης, οπότε προκύπτει µια νέα σηµείωση του ΡΝ.

ÕÛÎËÛË ·˘ÙÔÍÈÔÏfiÁËÛ˘ 8.1

Είναι σηµαντικό να κατανοήσετε τον τρόπο µε τον οποίο η πυροδότηση µιας µετά-

βασης τροποποιεί την κατάσταση του ΡΝ. Προσπαθήστε, λοιπόν, να σχεδιάσετε

τις διαδοχικές καταστάσεις στις οποίες θα βρέθει το ΡΝ του Σχήµατος 8.3 κατά την

εκτέλεση της διαδικασίας επιστροφής ενός βιβλίου.

8.2 T ÈÎfi˜ ÔÚÈÛÌfi˜ ÙˆÓ PN

Μετά την λεκτική περιγραφή των Petri Nets που µελετήσαµε ως τώρα, η στιγµή είναι

κατάλληλη για να µελετήσουµε και τον τυπικό ορισµό ενός συστήµατος ΡΝ. Το βασι-

σµένο σε PN µοντέλο ενός συστήµατος ορίζεται ως µια πεντάδα N = (P, T, F, W,

M0), όπου:

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 166

Page 168: pli42a

• P = p1, …, pm είναι ένα πεπερασµένο σύνολο θέσεων,

• T = t1, …, tn είναι ένα πεπερασµένο σύνολο µεταβάσεων,

• F Õ (P ¥ T) » (T ¥ P) είναι η σχέση ροής, δηλαδή το σύνολο των βελών (πλευ-

ρών) που συνδέουν γραφικά τις θέσεις µε τις µεταβάσεις,

• W: F Æ 1, 2, 3, … είναι µια συνάρτηση βαρών, η οποία αντιστοιχίζει ένα µη

αρνητικό αριθµό σε κάθε πλευρά, και

• M0: P Æ 0, 1, 2, 3, … είναι η αρχική σηµείωση, η οποία αντιστοιχίζει ένα µη

αρνητικό αριθµό σε κάθε θέση, ο οποίος είναι µικρότερος ή ίσος από τη χωρητι-

κότητα της θέσης.

Σηµειώστε ότι ισχύει:

• P » T ≠ ∆ και P « T = ∆.

Τα βέλη αναπαριστούν τη σχέση ροής F, ορίζοντας προ συνθήκες και µετα συνθή-

κες για τις θέσεις και τις µεταβάσεις. Για µια θέση p Œ P και µια µετάβαση t Œ T:

• η p καλείται θέση εισόδου της t αν και µόνο αν (p, t) Œ F, δηλαδή, υπάρχει ένα

βέλος από την p στην t,

• η p καλείται θέση εξόδου της t αν και µόνο αν (t, p) Œ F, δηλαδή, υπάρχει ένα

βέλος από την t στην p.

Για µια µετάβαση t:

• το σύνολο των θέσεων εισόδου καλείται το προ σύνολο της t και συµβολίζεται ως ∑∑ t,

• το σύνολο των θέσεων εξόδου καλείται το µετα – σύνολο της t και συµβολίζεται

ως t ∑∑.

Με παρόµοιο τρόπο ορίζεται και συµβολίζεται το προ – σύνολο και το µετα – σύνο-

λο µιας θέσης p.

Κατά τη γραφική αναπαράσταση, είναι δυνατό να επιγράφεται ένα βέλος µε κάποιο

θετικό αριθµό, ο οποίος αποτελεί το βάρος (weight) του. Ένα βέλος που επιγράφεται

µε βάρος k νοείται ως k παράλληλα βέλη. Βάρος ίσο µε 1 συνήθως δεν αναφέρεται. Ένα

ΡΝ του οποίου όλες οι πλευρές έχουν βάρος ίσο µε 1 καλείται σύνηθες (ordinary).

¶·Ú¿‰ÂÈÁÌ· 8.2

Ανατρέξτε στο Σχήµα 8.3(α), για το οποίο έχουµε:

• P = Γραφείο Αιτήσεων, Ταµείο Παραλαβών, Ταµείο Επιστροφών, Ευρετήριο,

Ράφια

1 6 78 . 2 T À ¶ π ∫ √ ™ √ ƒ π ™ ª √ ™ ∆ ø ¡ P N

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 167

Page 169: pli42a

1 6 8 K E º A § A I O 8 : ¢ π ∫ ∆ À∞ P E T R I

• Τ = Αίτηση, Παραλαβή, Επιστροφή, Αφαίρεση Βιβλίου, Τοποθέτηση Βιβλίου

• M0 = 1, 0, 0, 0, 3

Το ΡΝ του Σχήµατος 8.3 είναι σύνηθες, αφού δεν επιγράφονται οι πλευρές µε βάρη

(εννοείται ότι το βάρος κάθε πλευράς είναι 1, δηλαδή ένα µόνο τεκµήριο µπορεί να

ρέει µέσα από αυτή).

Για τη µετάβαση «Αφαίρεση Βιβλίου», ισχύουν:

• ∑∑ t = Γραφείο Αιτήσεων, Ράφια

• t ∑∑ = Ταµείο Παραλαβών, Ευρετήριο

Αντίστοιχα, για τη θέση «Ράφια» ισχύουν:

• ∑∑ p = Τοποθέτηση Βιβλίου

• p ∑∑ = Αφαίρεση Βιβλίου

Η σηµείωση Μ ενός ΡΝ ορίζεται ως µια συνάρτηση M: P Æ 0, 1, 2, 3, … » v, έτσι

ώστε σε κάθε θέση pi Œ P να αντιστοιχεί είτε ένας µη αρνητικός αριθµός, είτε το σύµ-

βολο v. Μια σηµείωση γράφεται ως ένα διάνυσµα (m1, m2, …, mm), όπου mi = M(pi).

Η σηµείωση ενός ΡΝ αναπαρίσταται γραφικά µε την κατανοµή των τεκµηρίων

(τα οποία αναπαρίστανται µε µαύρα σηµεία) στις θέσεις του γραφήµατος. Ένας µη

αρνητικός αριθµός περιγράφει το πλήθος των τεκµηρίων που βρίσκονται σε µια θέση,

ενώ το σύµβολο v χρησιµοποιείται όταν ο αριθµός αυτός είναι απεριόριστα µεγάλος.

Τα τεκµήρια χρησιµοποιούνται για να περιγράψουν το δυναµικό χαρακτήρα ενός

ΡΝ, καθώς η κατανοµή τους στις θέσεις µεταβάλλεται µε διάφορα γεγονότα. Η

σηµείωση ενός δικτύου καταγράφει ουσιαστικά ένα στιγµιότυπο της συµπεριφοράς

του ΡΝ, το οποίο αντιστοιχεί σε µια κατάσταση του υπό περιγραφή λογισµικού. Η

αρχική σηµείωση περιγράφει την αρχική κατάσταση του συστήµατος.

Η µεταβολή της σηµείωσης συµβαίνει µε την πυροδότηση (firing) µιας µετάβασης

t, κατά την οποία «καταναλώνεται» ένας αριθµός από τα τεκµήρια που βρίσκονται

στις θέσεις εισόδου της t και «παράγεται» ένας αριθµός από τεκµήρια στις θέσεις

εξόδου της t, σύµφωνα µε τον κανόνα πυροδότησης.

Σε κάθε σηµείωση ενός ΡΝ υπάρχει ένα σύνολο έτοιµων προς πυροδότηση µετα-

βάσεων, µία από τις οποίες πυροδοτείται την επόµενη στιγµή.

Μια µετάβαση t θεωρείται ότι είναι ενεργοποιηµένη (δηλαδή, έτοιµη προς πυροδότη-

ση) σε µια σηµείωση Μ, αν και µόνο αν κάθε θέση pi Œ ∑∑ t περιέχει τουλάχιστον W(pi,

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 168

Page 170: pli42a

Μια µετάβαση t για την οποία ισχύει ∑∑ t = ∆ καλείται πηγαία µετάβαση, ενώ µια

µετάβαση t για την οποία ισχύει t ∑∑ = ∆ καλείται απορροφητική µετάβαση. Μια

πηγαία µετάβαση είναι πάντα έτοιµη προς πυροδότηση. Μια απορροφητική µετά-

βαση καταναλώνει τεκµήρια χωρίς να παράγει νέα.

Ένα ζεύγος µιας µετάβασης t και µιας θέσης p καλείται αυτο ανακύκλωση εάν η p

ανήκει τόσο στο προ – σύνολο, όσο και στο µετα – σύνολο της t. Ένα ΡΝ χωρίς αυτο

– ανακυκλώσεις καλείται αγνό (pure).

¶·Ú¿‰ÂÈÁÌ· 8.3

Ανατρέξτε ξανά στο Σχήµα 8.3(α), στο οποίο η µετάβαση t = «Αφαίρεση βιβλίου»

είναι έτοιµη προς πυροδότηση, αφού όλες οι θέσεις pi Œ ∑∑ t περιέχουν ένα τουλάχι-

στον τεκµήριο και το βάρος των πλευρών είναι 1. ∆εν υπάρχει άλλη µετάβαση έτοι-

µη προς πυροδότηση στο ΡΝ αυτό. Αντίθετα, στο Σχήµα 8.3(β), έτοιµη προς πυρο-

δότηση είναι η µετάβαση «Παραλαβή» (παρατηρήστε προσεκτικά ότι λείπει ένα τεκ-

µήριο από τη θέση «Γραφείο Αιτήσεων», το οποίο εµποδίζει την πυροδότηση της

µετάβασης «Αφαίρεση Βιβλίου», ενώ η µετάβαση «Τοποθέτηση Βιβλίου» δεν µπο-

ρεί να πυροδοτηθεί, επειδή λείπει τεκµήριο από τη θέση «Ταµείο Επιστροφών»).

Στο ίδιο σχήµα, οι µεταβάσεις «Αίτηση» και «Επιστροφή» είναι πηγαίες, ενώ η µετά-

βαση «Παραλαβή» είναι απορροφητική. Το ΡΝ του Σχήµατος 8.3 είναι αγνό.

8.3 PN ¯·ÌËÏÔ‡ ÂȤ‰Ô˘

Θα ξεκινήσουµε την παρουσίαση των ΡΝ από τα µοντέλα χαµηλού επιπέδου (Low

Level Petri Nets – LLPN). Τα µοντέλα αυτά είναι γενικά και εφαρµόσιµα σε κάθε

περίπτωση προδιαγραφής συστηµάτων. Σύµφωνα µε όσα αναφέρθηκαν στις εισα-

γωγικές παρατηρήσεις, τα LLPN ενσωµατώνουν λίγη σηµασιολογική πληροφορία,

µε αποτέλεσµα να παράγονται πολύπλοκες και δύσχρηστες προδιαγραφές, ακόµη

και για µεσαίας πολυπλοκότητας συστήµατα. Συνεπώς, η εφαρµογή τους περιορίζε-

ται στην προδιαγραφή των µονάδων ενός συστήµατος.

1 6 98 . 3 P N Ã ∞ ª ∏ § √ À ∂ ¶ π ¶ ∂ ¢ √ À

t) τεκµήρια, όπου W(pi, t) είναι το βάρος της πλευράς από την pi στην t.

Μια µετάβαση t, η οποία στη σηµείωση Μ είναι έτοιµη προς πυροδότηση, µπορεί

να πυροδοτηθεί, αλλά µπορεί και να µην πυροδοτηθεί.

Εάν µια µετάβαση t πυροδοτηθεί, οδηγεί σε µια νέα σηµείωση Μ¢, στην οποία

έχουν αφαιρεθεί W(pi, t) τεκµήρια από κάθε θέση pi Œ ∑∑ t ενώ έχουν προστεθεί

W(t, pi) τεκµήρια σε κάθε θέση pi Œ t ∑∑.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 169

Page 171: pli42a

1 7 0 K E º A § A I O 8 : ¢ π ∫ ∆ À∞ P E T R I

8.3.1 M˯·Ó¤˜ ηٷÛÙ¿ÛˆÓ

Μια µηχανή καταστάσεων (state machine) είναι ένα σύνηθες ΡΝ, στο οποίο κάθε

µετάβαση t έχει ακριβώς µια θέση εισόδου και µια θέση εξόδου, δηλαδή ισχύει

" t Œ T, |∑∑ t| = |t ∑∑| = 1

8.3.2 ™ËÌÂȈ̤ÓÔÈ ÁÚ¿ÊÔÈ

Ένας σηµειωµένος γράφος (marked graph) είναι ένα σύνηθες ΡΝ, στο οποίο κάθε

θέση p έχει ακριβώς µια µετάβαση εισόδου και µια µετάβαση εξόδου, δηλαδή ισχύ-

ει

" p Œ P, |∑∑ p| = |p ∑∑| = 1

8.3.3 ¢›ÎÙ˘· ÂχıÂÚ˘ ÂÈÏÔÁ‹˜

Ένα δίκτυο ελεύθερης επιλογής (free choice net) είναι ένα σύνηθες ΡΝ, στο οποίο

κάθε βέλος που συσχετίζεται µε µια θέση είναι είτε το µοναδικό εισερχόµενο είτε το

µοναδικό εξερχόµενο βέλος που συσχετίζεται µε µια µετάβαση, δηλαδή ισχύει

" p Œ P, |p ∑∑| ≤ 1⁄ ∑∑(p ∑∑) = p, ή, ισοδύναµα,

" p1, p2 Œ P, p1∑∑ « p2∑∑ ≠ ∆ fi |p1∑∑| = |p2∑∑| = 1

Ένα εκτεταµένο δίκτυο ελεύθερης επιλογής (extended free choice net) είναι ένα

σύνηθες ΡΝ, στο οποίο ισχύει

" p1, p2 Œ P, p1∑∑ « p2∑∑ ≠ ∆ fi p1∑∑ = p2∑∑

Ένα δίκτυο ασύµµετρης επιλογής (asymmetric choice net), γνωστό και ως «απλό

δίκτυο», είναι ένα σύνηθες ΡΝ, στο οποίο ισχύει

" p1, p2 Œ P, p1∑∑ « p2∑∑≠ ∆ fi p1∑∑ Õ p2∑∑ ⁄ p2∑∑ Õ p1∑∑

8.3.4 ™‡ÁÎÚÈÛË ÌÔÓÙ¤ÏˆÓ LLPN

Τα µοντέλα που αναφέρθηκαν συνήθως συνδυάζονται σε ένα µεγάλο LLPN, για να

προδιαγραφούν καλύτερα τα ιδιαίτερα χαρακτηριστικά του συστήµατος. Μελετώ-

ντας το Σχήµα 8.4, όπου φαίνεται η βασική δοµή του κάθε µοντέλου, θα µπορείτε

να αναγνωρίζετε την εµφάνιση καθενός από αυτά σε ένα LLPN.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 170

Page 172: pli42a

Η κατάσταση που περιγράφει µια µηχανή καταστάσεων (Σχήµα 8.4(α)) καλείται

«απόφαση» ή «σύγκρουση». Οι µηχανές καταστάσεων µπορούν να αναπαραστή-

σουν δοµές απόφασης, αλλά δεν µπορούν να προδιαγράψουν ταυτόχρονες δοµές ή

σηµεία συγχρονισµού. Για το σκοπό αυτό, χρησιµοποιούµε τους σηµειωµένους γρά-

φους (Σχήµα 8.4(β)).

Τα δίκτυα ελεύθερης επιλογής αποτελούν γενίκευση των δοµών που είναι κοινές στις

µηχανές καταστάσεων και τους σηµειωµένους γράφους. Συνεπώς, επιτρέπουν την

προδιαγραφή δοµών απόφασης ή συγχρονισµού, αλλά δεν επιτρέπουν την εµφάνι-

ση σύγχυσης, δηλαδή την ταυτόχρονη αναπαράσταση απόφασης και συγχρονισµού.

Μια κατάσταση συµµετρικής σύγχυσης µπορεί να προδιαγραφεί µε ένα εκτεταµένο

δίκτυο ελεύθερης επιλογής (Σχήµα 8.4(γ)), ενώ για την περιγραφή µιας κατάστασης

µη συµµετρικής σύγχυσης, πρέπει να χρησιµοποιήσουµε ένα δίκτυο ασύµµετρης επι-

λογής (Σχήµα 8.4(δ)).

Ένα εκτεταµένο δίκτυο ελεύθερης επιλογής µπορεί να µετατραπεί σε ένα ισοδύνα-

µο δίκτυο ελεύθερης επιλογής, µε την προσθήκη µιας ενδιάµεσης µετάβασης και

µιας θέσης. Τα δίκτυα ελεύθερης επιλογής εµφανίζουν την ακόλουθη ιδιότητα: Eάν

t1 και t2 έχουν µια κοινή θέση εισόδου p, τότε δεν υπάρχει καµία σηµείωση στην

οποία η µια είναι ενεργοποιηµένη και η άλλη απενεργοποιηµένη. Έτσι, η επιλογή

της µετάβασης που θα πυροδοτηθεί είναι τρόπον τινά «ελεύθερη».

1 7 18 . 3 P N Ã ∞ ª ∏ § √ À ∂ ¶ π ¶ ∂ ¢ √ À

(α) (β) (γ) (δ)

™¯‹Ì· 8.4

Βασικά µοντέλα

των ΡΝ χαµηλού

επιπέδου

¢Ú·ÛÙËÚÈfiÙËÙ· 8.1

Το πολύ σε δέκα γραµµές προσπαθήστε να συνοψίσετε τις ιδιότητες των µοντέλων

LLPN που αναφέρθηκαν στην ενότητα αυτή. Έπειτα συγκρίνετε την απάντησή σας

µε το κείµενο στο πλαίσιο που ακολουθεί.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 171

Page 173: pli42a

1 7 2 K E º A § A I O 8 : ¢ π ∫ ∆ À∞ P E T R I

ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 8.2

Προσπαθήστε να αναγνωρίσετε ποια µοντέλα LLPN εµφανίζονται σε καθένα από

τα ΡΝ του Σχήµατος 8.5.

Υπόδειξη: Σε κάθε ΡΝ µπορεί να εµφανίζονται περισσότερα από ένα µοντέλα.

Συνοψίζοντας:

• Οι µηχανές κατάστασης δεν προδιαγράφουν δοµές συγχρονισµού.

• Οι σηµειωµένοι γράφοι δεν προδιαγράφουν συγκρούσεις.

• Τα δίκτυα ελεύθερης επιλογής δεν προδιαγράφουν καταστάσεις σύγχυσης.

• Τα δίκτυα ασύµµετρης επιλογής επιτρέπουν τη συµµετρική σύγχυση, αλλά δεν

προδιαγράφουν µη συµµετρική σύγχυση.

™¯‹Ì· 8.5

Μερικά ΡΝ για την

άσκηση

αυτοαξιολόγησης 2

p2

t3

p3 p1

t1 t2

p4 t4

p1

t1

p2 p3

t2 t3

p4 p5

t4

p2

t1 t2

p1

t4

p4p3

t3

p2

t1

p1

t2

t4

p4

t3

p5

p5

p2

t2

p3

t1

(α) (β) (γ)

(ε)

(δ)

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 172

Page 174: pli42a

8.4 ¢›ÎÙ˘· Û˘Óı‹Î˘ – ÁÂÁÔÓfiÙÔ˜

Τα δίκτυα συνθήκης–γεγονότος (condition–event nets) είναι τα απλούστερα ΡΝ

υψηλού επιπέδου (χωρίς αυτό να σηµαίνει ότι δεν παρέχουν ικανοποιητικές δυνα-

τότητες προδιαγραφής συστηµάτων). Στα δίκτυα αυτά θεωρούµε ότι:

• οι µεταβάσεις του ΡΝ αναπαριστούν γεγονότα,

• οι θέσεις του ΡΝ αναπαριστούν συνθήκες που σχετίζονται µε τα γεγονότα,

• κάθε θέση p από την οποία ξεκινά ένα βέλος που καταλήγει σε µια µετάβαση t

καλείται προ–συνθήκη της t,

• κάθε θέση p στην οποία καταλήγει ένα βέλος που ξεκινά από µια µετάβαση t

καλείται µετα–συνθήκη της t,

• κάθε θέση µπορεί να περιέχει το πολύ ένα τεκµήριο,

• ένα τεκµήριο σε µια θέση δηλώνει ότι η αντίστοιχη συνθήκη ικανοποιείται, ενώ

η απουσία τεκµηρίου δηλώνει ότι η συνθήκη δεν ικανοποιείται στη συγκεκριµέ-

νη σηµείωση.

Στη γενική περίπτωση, ένα γεγονός µπορεί να συµβεί αν και µόνο αν όλες οι προ –

συνθήκες του ικανοποιούνται, ενώ δεν ικανοποιείται καµία µετα – συνθήκη του. Τα

γεγονότα αυτά καλούνται ενεργοποιηµένα (activated). Όταν συµβεί ένα ενεργοποι-

ηµένο γεγονός, τα τεκµήρια που βρίσκονται στις θέσεις εισόδου διαγράφονται, ενώ

εµφανίζονται νέα τεκµήρια στις θέσεις εξόδου. Στο Σχήµα 8.6 αναπαρίσταται γρα-

φικά η εκτέλεση ενός ενεργοποιηµένου γεγονότος.

1 7 38 . 4 ¢ π ∫ ∆ À∞ ™ À ¡ £ ∏ ∫ ∏ ™ – ° ∂ ° √ ¡ √ ∆ √ ™

™¯‹Ì· 8.6

Η εκτέλεση

(πυροδότηση)

ενός γεγονότος

σε ένα δίκτυο

συνθήκης–γεγονότος

Πριν Mετά

Μελέτη περίπτωσης

Ο Βύρων χρησιµοποιεί ΡΝ για να αναπαραστήσει τη δραστηριότητα πώλησης και δια-

νοµής παιδικών ενδυµάτων µέσω του φορτηγού οχήµατος της εταιρείας (Σχήµα 8.7).

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 173

Page 175: pli42a

1 7 4 K E º A § A I O 8 : ¢ π ∫ ∆ À∞ P E T R I

Παρατηρήστε ότι εκτελούνται παράλληλα δύο δραστηριότητες:

• η παραγωγή των αγαθών, η οποία γίνεται στην επιχείρηση, και

• η κατανάλωση των αγαθών από τους πελάτες.

H επικοινωνία των δύο πλευρών γίνεται µέσα από ένα κανάλι, το οποίο αναπαριστά

το φορτηγό όχηµα.

Για λόγους απλότητας, θεωρούµε ότι:

• το τµήµα παραγωγής µπορεί να παράγει ένα αγαθό (ρούχο) ανά κύκλο δραστη-

ριότητας,

• ο καταναλωτής µπορεί να αγοράσει ένα αγαθό ανά κύκλο,

• το φορτηγό µπορεί να µεταφέρει ένα µόνο αγαθό.

Η αρχική κατάσταση ενός τέτοιου συστήµατος αναπαριστά το τµήµα παραγωγής ως

έτοιµο προς παραγωγή και τον καταναλωτή ως έτοιµο προς παραλαβή (παρατηρή-

στε τα τεκµήρια που βρίσκονται στις θέσεις «δυνατότητα παραγωγής» και «δυνα-

τότητα παραλαβής» – Σχήµα 8.8(α)). Η παρουσία αυτού του τεκµηρίου προκαλεί

την πυροδότηση της µετάβασης «παραγωγή» και την εµφάνιση ενός τεκµηρίου στη

θέση «δυνατότητα διανοµής» (Σχήµα 8.8(β)). Τότε πυροδοτείται η µετάβαση «δια-

νοµή» και ένα τεκµήριο εµφανίζεται στη θέση «κανάλι» (Σχήµα 8.8(γ)), ενώ ενερ-

γοποιείται ξανά και η θέση «δυνατότητα παραγωγής».

™¯‹Ì· 8.7

Το δίκτυο

συνθήκης–

γεγονότος που

προδιαγράφει τη

δραστηριότητα

πώλησης και

διανοµής

∆υνατότητα|∆ιανοµής

∆υνατότητα|Παραγωγής

∆ιανοµήΠαραγωγή

Kανάλι

Παραλαβή

∆υνατότητα|Kατανάλωσης

Kατανάλωση

∆υνατότητα|Παραλαβής

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 174

Page 176: pli42a

1 7 58 . 4 ¢ π ∫ ∆ À∞ ™ À ¡ £ ∏ ∫ ∏ ™ – ° ∂ ° √ ¡ √ ∆ √ ™

™¯‹Ì· 8.8

∆ιαδοχικές

σηµειώσεις του

ΡΝ που αναπαρι-

στά τη διαδικασία

πώλησης και

διανοµής

(α)

∆υνατότητα|∆ιανοµής

∆υνατότητα|Παραγωγής

∆ιανοµήΠαραγωγή

Kανάλι

Παραλαβή

∆υνατότητα|Kατανάλωσης

Kατανάλωση

∆υνατότητα|Παραλαβής

(β)

∆υνατότητα|∆ιανοµής

∆υνατότητα|Παραγωγής

∆ιανοµήΠαραγωγή

Kανάλι

Παραλαβή

∆υνατότητα|Kατανάλωσης

Kατανάλωση

∆υνατότητα|Παραλαβής

(γ)

∆υνατότητα|∆ιανοµής

∆υνατότητα|Παραγωγής

∆ιανοµήΠαραγωγή

Kανάλι

Παραλαβή

∆υνατότητα|Kατανάλωσης

Kατανάλωση

∆υνατότητα|Παραλαβής

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 175

Page 177: pli42a

1 7 6 K E º A § A I O 8 : ¢ π ∫ ∆ À∞ P E T R I

Αν εξετάσετε προσεκτικά το Σχήµα 8.9, θα παρατηρήσετε ότι η πυροδότηση της

µετάβασης «παραλαβή» απαιτεί την ύπαρξη ενός τεκµηρίου σε καθεµία από τις

θέσεις εισόδου «κανάλι» και «δυνατότητα παραλαβής». Στην σηµείωση του σχή-

µατος, µόνο η πρώτη από αυτές περιέχει τεκµήριο.

¢Ú·ÛÙËÚÈfiÙËÙ· 8.2

∆οκιµάστε να περιγράψετε την εξέλιξη της δραστηριότητας του καταναλωτή, ξεκι-

νώντας από την κατάσταση του συστήµατος που φαίνεται στο Σχήµα 8.9. Γιατί δεν

είναι δυνατό να πυροδοτηθεί εξαρχής η µετάβαση «παραλαβή»;

Έπειτα, συγκρίνετε την απάντησή σας µε το κείµενο που ακολουθεί.

¢Ú·ÛÙËÚÈfiÙËÙ· 8.3

Πριν µελετήσετε τη συνέχεια του κειµένου, δοκιµάστε να συνοψίσετε την ακο-

λουθία των καταστάσεων στις οποίες µπορεί να βρεθεί το ΡΝ του Σχήµατος 8.9.

Ξεκινώντας από τη σηµείωση στην οποία βρίσκεται το ΡΝ του σχήµατος 8.9, είναι

δυνατό να πυροδοτηθούν δύο µεταβάσεις, η «παραγωγή» και η «κατανάλωση».

Όµως δεν µπορούµε να καθορίσουµε ποια θα πυροδοτηθεί πρώτη, γι’ αυτό θα µελε-

τήσουµε τη συµπεριφορά του συστήµατος σε δύο περιπτώσεις (η σειρά µε την

οποία θα συµβούν δεν είναι δυνατό να καθοριστεί, γι’ αυτό και θα πρέπει να τις

θεωρήσετε ως ανεξάρτητα γεγονότα):

• Εάν πυροδοτηθεί πρώτη η µετάβαση «παραγωγή», τότε θα καταναλωθεί το τεκ-

µήριο της θέσης «δυνατότητα παραγωγής» και θα παραχθεί ένα τεκµήριο στη

θέση «δυνατότητα διανοµής». Στο σηµείο αυτό, δεν είναι δυνατή η πυροδότη-

™¯‹Ì· 8.9

Το ΡΝ

της δραστηριότητας 2

∆υνατότητα|∆ιανοµής

∆υνατότητα|Παραγωγής

∆ιανοµήΠαραγωγή

Kανάλι

Παραλαβή

∆υνατότητα|Kατανάλωσης

Kατανάλωση

∆υνατότητα|Παραλαβής

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 176

Page 178: pli42a

8.4.1 ™‡ÁÎÚÔ˘ÛË

Μελετώντας τα παραδείγµατα των δικτύων συνθήκης–γεγονότος που έχουν έως τώρα

αναφερθεί, συµπεραίνουµε ότι η λειτουργία τους είναι κατά βάση µη ντετερµινιστι-

κή: Eάν σε κάποια σηµείωση εµφανίζονται δύο ενεργοποιηµένες µεταβάσεις, οποι-

αδήποτε από αυτές µπορεί τελικά να πυροδοτηθεί. Ο µη ντετερµινισµός είναι εγγε-

νής ιδιότητα της φύσης των ΡΝ, η οποία µπορεί π.χ. να χρησιµοποιηθεί για την ανα-

παράσταση παράλληλων διαδικασιών. Στην ενότητα αυτή θα εστιάσουµε την προ-

σοχή µας σε µια ειδική περίπτωση αυτής της ιδιότητας των ΡΝ, η οποία καλείται

«σύγκρουση» (conflict).

1 7 78 . 4 ¢ π ∫ ∆ À∞ ™ À ¡ £ ∏ ∫ ∏ ™ – ° ∂ ° √ ¡ √ ∆ √ ™

ση της µετάβασης «διανοµή», αφού υπάρχει τεκµήριο στη θέση εξόδου «κανά-

λι», οπότε στη συνέχεια θα πυροδοτηθεί υποχρεωτικά η µετάβαση «κατανάλω-

ση» και έπειτα η µετάβαση «παραλαβή».

• Εάν πυροδοτηθεί πρώτη η µετάβαση «κατανάλωση», θα καταναλωθεί το τεκ-

µήριο της θέσης «δυνατότητα κατανάλωσης» και θα παραχθεί ένα τεκµήριο στη

θέση «δυνατότητα παραλαβής». Στο σηµείο αυτό, µπορεί να πυροδοτηθεί είτε η

µετάβαση «παραλαβή», είτε η «παραγωγή». Στην πρώτη περίπτωση, θα κατα-

ναλωθούν τα τεκµήρια από τις θέσεις «κανάλι» και «δυνατότητα παραλαβής»

και θα παραχθεί τεκµήριο στη θέση «δυνατότητα κατανάλωσης». Η πυροδότη-

ση της µετάβασης «παραγωγή» έχει περιγραφεί στην προηγούµενη περίπτωση.

Εάν έχει ήδη πυροδοτηθεί η µετάβαση «παραγωγή», θα είναι δυνατή και η πυρο-

δότηση της µετάβασης «διανοµή».

∆υο γεγονότα (µεταβάσεις) ενός δικτύου συνθήκης–γεγονότος βρίσκονται σε

σύγκρουση, εάν:

(α) υπάρχει σηµείωση κατά την οποία και τα δύο είναι δυνατό να είναι ενεργοποι-

ηµένα

(β) σε τέτοια περίπτωση, η πυροδότηση οποιουδήποτε από τα δύο (η οποία γίνε-

ται µε τυχαίο τρόπο) εµποδίζει την πυροδότηση του άλλου.

∆ύο γεγονότα που βρίσκονται σε σύγκρουση έχουν τουλάχιστο µια κοινή προ ή

µετα–συνθήκη, και ανταγωνίζονται µεταξύ τους για την κατανάλωση του τεκµη-

ρίου που αυτή περιέχει. Στο Σχήµα 8.10 φαίνονται µερικές τυπικές περιπτώσεις

όπου εµφανίζεται σύγκρουση.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 177

Page 179: pli42a

1 7 8 K E º A § A I O 8 : ¢ π ∫ ∆ À∞ P E T R I

Μελέτη περίπτωσης (συνέχεια) / Κεφάλαιο 8

Η επιχείρηση CHILDWARE αγόρασε ένα ακόµη φορτηγό για τις διανοµές της. Ο

Βύρων, για να ενσωµατώσει την εξέλιξη αυτή, αναγκάσθηκε να ξανασχεδιάσει το

ΡΝ του Σχήµατος 8.7. Το νέο ΡΝ φαίνεται στο Σχήµα 8.11. Όπως µπορείτε να δείτε,

το δίκτυο αυτό µπορεί να βρεθεί σε κατάσταση σύγκρουσης.

™¯‹Ì· 8.10

Τυπικές

περιπτώσεις

σύγκρουσης

™¯‹Ì· 8.11

Το ΡΝ που

προδιαγράφει

τη διαδικασία

πώλησης και

διανοµής µε δύο

φορτηγά

∆υνατότητα|∆ιανοµής

∆υνατότητα|Παραγωγής

∆ιανοµή 1

∆ιανοµή 2

Παραγωγή Παραλαβή

∆υνατότητα|Kατανάλωσης

Kατανάλωση

∆υνατότητα|Παραλαβής

Kανάλι 1

Kανάλι 2

¢Ú·ÛÙËÚÈfiÙËÙ· 8.4

Πριν µελετήσετε το κείµενο που ακολουθεί, προσπαθήστε να δικαιολογήσετε τον

ισχυρισµό «το ΡΝ του Σχήµατος 8.11 βρίσκεται σε κατάσταση σύγκρουσης».

Ανατρέχοντας στις περιπτώσεις σύγκρουσης που περιγράφονται στο Σχήµα 8.10,

παρατηρούµε ότι στο Σχήµα 8.11, οι µεταβάσεις «διανοµή1» και «διανοµή2» είναι

ταυτόχρονα ενεργοποιηµένες. Όµως, η πυροδότηση οποιασδήποτε από τις δύο (έστω

της «διανοµή1») θα καταναλώσει το τεκµήριο της θέσης «δυνατότητα διανοµής»

και θα απενεργοποιήσει την άλλη µετάβαση. Συνεχίζοντας την ανάλυση, βλέπουµε

ότι µετά την πυροδότηση της «διανοµή1» είναι αδύνατη η πυροδότηση της «παρα-

λαβή», αλλά δυνατή η πυροδότηση της «παραγωγή». Όταν αυτό συµβεί, θα παρα-

χθεί τεκµήριο στη θέση «δυνατότητα διανοµής», αλλά επειδή η πυροδότηση της

«διανοµή1» είναι τώρα αδύνατη (υπάρχει τεκµήριο στη θέση εξόδου της), θα πυρο-

δοτηθεί η «διανοµή2». Τότε, θα ενεργοποιηθούν η «παραγωγή» και η «παραλαβή»

και ο κύκλος µπορεί να επαναληφθεί.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 178

Page 180: pli42a

8.4.2 E·Ê‹

Από τον ορισµό του τρόπου εµφάνισης ενός γεγονότος, προκύπτει ότι αυτή εξαρτά-

ται τόσο από τις προ – συνθήκες αυτού όσο και από τις µετα – συνθήκες του. Η ανε-

πιθύµητη αυτή κατάσταση καλείται επαφή (contact) και µπορεί να αντιµετωπιστεί

µε το «µετασχηµατισµό συµπληρωµατικών θέσεων».

1 7 98 . 4 ¢ π ∫ ∆ À∞ ™ À ¡ £ ∏ ∫ ∏ ™ – ° ∂ ° √ ¡ √ ∆ √ ™

Η επαφή εµφανίζεται όταν η πυροδότηση µιας ενεργοποιηµένης µετάβασης t είναι

αδύνατη εξαιτίας της ανεπαρκούς χωρητικότητας τουλάχιστον µιας εκ των θέσε-

ων στις οποίες «παρέχει» τεκµήρια η t. Για να αποφύγουµε την εµφάνιση επαφής,

εφαρµόζουµε το µετασχηµατισµό συµπληρωµατικών θέσεων, ο οποίος περιλαµ-

βάνει τα ακόλουθα βήµατα:

1. Για κάθε συνθήκη p του δικτύου, προσθέτουµε µια συµπληρωµατική συνθήκη

p¢ (µε την προϋπόθεση ότι δεν περιλαµβάνεται ήδη τέτοια θέση στο δίκτυο). Η

αρχική σηµείωση της p¢ είναι αντίστροφη της σηµείωσης της p.

2. Συνδέουµε χρησιµοποιώντας βέλη τη συνθήκη p¢ µε κάθε γεγονός t µε το οποίο

συνδέεται και η p, έτσι ώστε:

• η p¢ να είναι µετα συνθήκη όλων των γεγονότων για τα οποία η p είναι προ

συνθήκη,

• η p¢ να είναι προ συνθήκη όλων των γεγονότων για τα οποία η p είναι µετα

συνθήκη.

Μετά την εφαρµογή του µετασχηµατισµού, η συµπεριφορά του συνολικού δικτύ-

ου δεν αλλάζει, ενώ, σε κάθε σηµείωση, µόνο µια εκ των p, p¢ µπορεί να περιέχει

τεκµήριο.

Στο Σχήµα 8.12(α) εµφανίζεται µια περίπτωση επαφής, ενώ στο Σχήµα 8.12(β) φαί-

νεται το ΡΝ που προκύπτει µετά την εφαρµογή του µετασχηµατισµού συµπληρω-

µατικών θέσεων.

(α) (β)

™¯‹Ì· 8.12

Εµφάνιση της κατά-

στασης επαφής (α)

και τροποποίηση

του ΡΝ µε το µετα-

σχηµατισµό

συµπληρωµατικών

θέσεων (β)

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 179

Page 181: pli42a

1 8 0 K E º A § A I O 8 : ¢ π ∫ ∆ À∞ P E T R I

Το ΡΝ του Σχήµατος 8.9 θα βρεθεί σε κατάσταση επαφής µόλις πυροδοτηθεί η µετά-

βαση «παραγωγή». Τότε η πυροδότηση της µετάβασης «διανοµή» δεν είναι δυνατή

µέχρι να πυροδοτηθεί η µετάβαση «παραλαβή» και να αδειάσει η θέση «κανάλι».

Στο Σχήµα 8.13, η εισαγωγή της θέσης «κανάλι άδειο» διορθώνει το πρόβληµα.

¢Ú·ÛÙËÚÈfiÙËÙ· 8.5

Πριν προχωρήσετε στη µελέτη των προτάσεών µας:

(α)δικαιολογήσετε τον ισχυρισµό «το ΡΝ του Σχήµατος 8.9 βρίσκεται σε κατά-

σταση επαφής»,

(β)προσπαθήστε να εφαρµόσετε τον µετασχηµατισµό συµπληρωµατικών θέσεων

στο ΡΝ του Σχήµατος 8.9, ώστε να αποφεύγεται η επαφή. Έπειτα, συγκρίνετε

την απάντησή σας µε το Σχήµα 8.13.

ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 8.3

Στην επιχείρηση CHILDWARE, η διαδικασία εκτέλεσης µιας τηλεφωνικής παραγ-

γελίας περιλαµβάνει (από πλευράς παραστατικών) την ακόλουθη σειρά βηµάτων:

συµπλήρωση δελτίου παραγγελίας, ενηµέρωση δελτίου αποθήκης, έκδοση φορ-

τωτικής. Η επιχείρηση απασχολεί δύο υπαλλήλους στο τµήµα παραγγελιών: το

Νίκο και τον Άγη. Παρόλο που και οι δύο δέχονται τηλεφωνικές παραγγελίες, ο

πρώτος είναι υπεύθυνος για την ενηµέρωση του δελτίου αποθήκης, ενώ ο δεύτε-

ρος είναι υπεύθυνος για την έκδοση της φορτωτικής. ∆οκιµάστε να σχεδιάσετε το

δίκτυο συνθήκης–γεγονότος, το οποίο αναπαριστά τη δοµή και τη λειτουργία του

τµήµατος παραγγελιών, καταγράφοντας και την αρχική σηµείωση του δικτύου.

™¯‹Ì· 8.13

Αποµάκρυνση

της κατάστασης

επαφής στο ΡΝ

του Σχήµατος 8.9

∆υνατότητα|∆ιανοµής

∆υνατότητα|Παραγωγής

∆ιανοµήΠαραγωγή

Kανάλι|Γεµάτο

Kανάλι|Άδειο

Παραλαβή

∆υνατότητα|Kατανάλωσης

Kατανάλωση

∆υνατότητα|Παραλαβής

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 180

Page 182: pli42a

8.5 ¢›ÎÙ˘· ı¤Û˘ – MÂÙ¿‚·Û˘

Τα δίκτυα συνθήκης–γεγονότος που µελετήσαµε στην ενότητα 8.4 έχουν ένα σηµα-

ντικό περιορισµό: επιτρέπουν την εµφάνιση το πολύ ενός τεκµηρίου σε κάθε θέση.

Το πρόβληµα έγινε εµφανές στην περίπτωση όπου η επιχείρηση CHILDWARE αγό-

ρασε και δεύτερο όχηµα µεταφοράς εµπορευµάτων: ο Βύρων αναγκάστηκε να εισά-

γει στο ΡΝ ένα ακόµη γεγονός, το οποίο ήταν ίδιο µε το υπάρχον. Όπως καταλαβαί-

νετε, αυτή η λύση δεν είναι εφαρµόσιµη στην περίπτωση όπου π.χ. η επιχείρηση αγο-

ράσει 30 οχήµατα.

Για να ξεπεραστεί το πρόβληµα αυτό, ορίζονται τα δίκτυα θέσης – µετάβασης

(place – transition nets), στα οποία χρησιµοποιούµε τις έννοιες της «θέσης» και της

«µετάβασης» αντί των εννοιών «γεγονός» και «συνθήκη», αντίστοιχα. Τα βέλη, τα

τεκµήρια και η έννοια της «σηµείωσης» χρησιµοποιούνται µε τον ίδιο τρόπο.

1 8 18 . 5 ¢ π ∫ ∆ À∞ £ ∂ ™ ∏ ™ – M ∂ ∆∞ µ ∞ ™ ∏ ™

ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 8.4

Ένας βαρκάρης θέλει να µεταφέρει από τη µια όχθη ενός ποταµού στην άλλη ένα

λύκο, µία κατσίκα και ένα λάχανο. Σε κάθε µεταφορά µπορεί να µεταφέρει, εκτός

από τον εαυτό του, έναν ακόµη από τους τρεις «επιβάτες». ∆οκιµάστε να σχεδιά-

σετε το δίκτυο συνθήκης – γεγονότος που λύνει το πρόβληµα, λαµβάνοντας υπόψη

ότι (για ευνόητους λόγους) δεν πρέπει να βρεθούν στην ίδια όχθη ο λύκος µε την

κατσίκα ή το λάχανο µε την κατσίκα, χωρίς να βρίσκεται και ο βαρκάρης µαζί τους.

Η λειτουργικότητα των δικτύων θέσης–µετάβασης επεκτείνεται, σε σχέση µε τα

δίκτυα συνθήκης–γεγονότος, ως εξής:

• Με κάθε θέση συσχετίζεται το µέγεθος Κ, το οποίο καλείται «χωρητικότητα»

(capacity) της θέσης. Εάν για µια θέση p ισχύει Kp = n, τότε στη θέση αυτή µπο-

ρεί να αποθηκεύονται το πολύ n όµοια τεκµήρια. Σηµειώστε ότι η χωρητικότη-

τα µιας θέσης µπορεί να είναι άπειρη.

• Με κάθε βέλος συσχετίζεται το µέγεθος W, το οποίο καλείται «βάρος» του

βέλους. Εάν ένα βέλος επιγράφεται µε W = m, τότε, κάθε φορά που λαµβάνει

χώρα η µετάβαση µε την οποία συνδέεται το βέλος, m τεκµήρια ρέουν µέσα από

αυτό.

Στο Σχήµα 8.14 περιγράφεται η πυροδότηση µιας µετάβασης σε ένα δίκτυο

θέσης–µετάβασης. Αυτός ο κανόνας πυροδότησης, ο οποίος περιγράφηκε τυπικά

στην ενότητα 8.2, καλείται ασθενής κανόνας πυροδότησης.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 181

Page 183: pli42a

1 8 2 K E º A § A I O 8 : ¢ π ∫ ∆ À∞ P E T R I

™¯‹Ì· 8.14

Πυροδότηση

µετάβασης σε

δίκτυο

θέσης–µετάβασης

µε βάρη

™¯‹Ì· 8.15

∆ίκτυο

θέσης–µετάβασης

1

1

1

1

2 2 2 2

22

Πρίν Mετά

Μελέτη περίπτωσης (συνέχεια)

Στο Σχήµα 8.15 φαίνεται το δίκτυο θέσης–µετάβασης που προδιαγράφει τη λει-

τουργία της επιχείρησης όταν αυτή διαθέτει δέκα οχήµατα.

∆υνατότητα|∆ιανοµής

∆υνατότητα|Παραγωγής

∆ιανοµήΠαραγωγή Παραλαβή

∆υνατότητα|Kατανάλωσης

Kατανάλωση

∆υνατότητα|Παραλαβής

Kανάλι

K=10

Εάν στον κανόνα αυτό ενσωµατωθεί και η έννοια της χωρητικότητας, προκύπτει ο

ακόλουθος επιπλέον περιορισµός:

• Kάθε θέση pi Œ t ∑∑ πρέπει να περιέχει το πολύ n τεκµήρια, ώστε W(t, pi) + n ≤

K(pi), όπου W(t, pi) είναι το βάρος της πλευράς από την t στην pi και K(pi) είναι

η χωρητικότητα της pi.

Ο νέος αυτός κανόνας καλείται αυστηρός κανόνας πυροδότησης.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 182

Page 184: pli42a

Η απάντηση που σκεφτόµαστε πρώτη είναι να προσθέσουµε έναν ακόµη κύκλο

παραγωγής στο αριστερό τµήµα και δύο κύκλους κατανάλωσης στο δεξιό τµήµα του

διαγράµµατος. Σωστά, αλλά υπάρχει και καλύτερη λύση. Στο Σχήµα 8.16 έχουµε

προσθέσει δύο τεκµήρια στον κύκλο παραγωγής και τρία στον κύκλο κατανάλωσης.

Ακόµη, τα δύο τεκµήρια που βρίσκονται στο κανάλι δείχνουν ότι δύο φορτηγά µετα-

φέρουν εµπορεύµατα από την παραγωγή στην κατανάλωση, ενώ συνολικά τα δια-

θέσιµα φορτηγά είναι 10.

1 8 38 . 5 ¢ π ∫ ∆ À∞ £ ∂ ™ ∏ ™ – M ∂ ∆∞ µ ∞ ™ ∏ ™

¢Ú·ÛÙËÚÈfiÙËÙ· 8.6

Στο Σχήµα 8.15 έχουµε θεωρήσει ότι υπάρχει ένας µόνο παραγωγός και ένας κατανα-

λωτής ρούχων. Προσπαθήστε να σχεδιάσετε ένα νέο ΡΝ, στο οποίο θα υπάρχουν δύο

παραγωγοί και τρεις καταναλωτές. Συγκρίνετε την απάντησή σας µε το Σχήµα 8.16.

¢Ú·ÛÙËÚÈfiÙËÙ· 8.7

Η σύγκρουση στα δίκτυα θέσης–µετάβασης ορίζεται µε τον τρόπο που ορίζεται

στα δίκτυα συνθήκης–γεγονότος. Όµως, ο ορισµός της επαφής είναι γενικότερος.

Προσπαθήστε να δώσετε τον ορισµό αυτό και να περιγράψετε τον αλγόριθµο του

µετασχηµατισµού συµπληρωµατικών θέσεων. Έπειτα, συγκρίνετε την απάντησή

σας µε τη δική µας πρόταση που ακολουθεί.

™¯‹Ì· 8.16

Επέκταση του ΡΝ

ώστε να υποστηρίζει

δύο παραγωγούς και

τρεις καταναλωτές

∆υνατότητα|∆ιανοµής

∆υνατότητα|Παραγωγής

∆ιανοµήΠαραγωγή Παραλαβή

∆υνατότητα|Kατανάλωσης

Kατανάλωση

∆υνατότητα|Παραλαβής

Kανάλι

K=10

Τυπικά, τα δίκτυα συνθήκης–γεγονότος είναι ειδική περίπτωση των δικτύων θέσης

–µετάβασης και προκύπτουν εάν στα τελευταία εφαρµοστούν δύο περιορισµοί:

• Η χωρητικότητα κάθε θέσης είναι 1, και

• το βάρος κάθε πλευράς είναι 1.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 183

Page 185: pli42a

1 8 4 K E º A § A I O 8 : ¢ π ∫ ∆ À∞ P E T R I

Επειδή στα δίκτυα θέσης–µετάβασης η πυροδότηση εξαρτάται από τις χωρητικότη-

τες των θέσεων και τα βάρη των πλευρών, η επαφή εµφανίζεται όταν η πυροδότη-

ση µιας ενεργοποιηµένης µετάβασης t είναι αδύνατη, επειδή:

$ p Œ t ∑∑: M(p) + W(t, p) > K(p)

Στον µετασχηµατισµό συµπληρωµατικών θέσεων πρέπει τώρα να λάβουµε υπόψη

µας και τα βάρη. Για κάθε συνθήκη p του δικτύου, προσθέτουµε µια συµπληρωµα-

τική συνθήκη p¢ (K(p¢) = K(p)), η αρχική σηµείωση της οποίας είναι ίση µε τη δια-

φορά της χωρητικότητας της p µείον την αρχική σηµείωση της p.

Συνδέουµε χρησιµοποιώντας βέλη τη συνθήκη p¢ µε κάθε γεγονός t µε το οποίο συν-

δέεται και η p, έτσι ώστε:

• η p¢ να είναι µετα – συνθήκη όλων των γεγονότων για τα οποία η p είναι προ –

συνθήκη,

• η p¢ να είναι προ – συνθήκη όλων των γεγονότων για τα οποία η p είναι µετα –

συνθήκη.

Για κάθε βέλος που προσθέτουµε, φροντίζουµε να ισχύει W(p¢, t) = W(t, p) και

W(t, p¢) = W(p, t).

8.6 ¢›ÎÙ˘· ‰È·ÎÚÈÙÒÓ ÙÂÎÌËÚ›ˆÓ

Ένα δίκτυο διακριτών τεκµηρίων (individual tokens net) βασίζεται στις έννοιες

«θέση», «µετάβαση», «βέλος» και «σηµείωση» των δικτύων θέσης–µετάβασης, τα

οποία επεκτείνει ως εξής:

• Τα τεκµήρια διαχωρίζονται µεταξύ τους, ανάλογα µε το αντικείµενο που αναπα-

ριστούν.

• Κάθε βέλος επιγράφεται, ανάλογα µε το είδος των τεκµηρίων στα οποία επιτρέ-

πεται να ρέουν πάνω του.

Σε ένα τέτοιο δίκτυο:

• Μια µετάβαση t είναι ενεργοποιηµένη αν και µόνο αν κάθε θέση pi Œ ∑∑ t περιέχει

ένα τεκµήριο ίδιου είδους µε το βέλος που συνδέει την pi µε την t.

• Όταν συµβεί η πυροδότηση µιας ενεργοποιηµένης µετάβασης (Σχήµα 8.17):

• αφαιρείται από κάθε θέση pi Œ ∑∑ t ένα τεκµήριο ίδιου είδους µε το βέλος που

συνδέει την pi µε την t, και

• αροστίθεται σε κάθε θέση pi Œ t ∑∑ ένα τεκµήριο ίδιου είδους µε το βέλος που

συνδέει την t µε την pi.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 184

Page 186: pli42a

Μελέτη περίπτωσης (συνέχεια)

Θα µελετήσουµε την προδιαγραφή του σηµείου πωλήσεων της επιχείρησης

CHILDWARE, µε στόχο να κατανοήσετε καλύτερα πώς και γιατί γίνεται η µετάβα-

ση από το ένα είδος ΡΝ στο άλλο. Έστω, λοιπόν, ότι στο σηµείο πώλησης βρίσκο-

νται δύο πελάτες (ο Γιώργος και η Μαρία) και ένας πωλητής (ο Τάκης), ο οποίος εξυ-

πηρετεί κάθε πελάτη ξεχωριστά. Στο Σχήµα 8.18 φαίνεται το δίκτυο συνθήκης–γεγο-

νότος που αναπαριστά τις πιθανές συναλλαγές ανάµεσα στα τρία αυτά άτοµα.

Παρατηρήστε ότι:

• Μόλις γίνει η συναλλαγή ανάµεσα σε πωλητή και πελάτη, ο πωλητής φέρνει και-

νούρια ρούχα προς πώληση, ενώ ο πελάτης φέρνει περισσότερα χρήµατα και ο

κύκλος επαναλαµβάνεται.

• Ο Τάκης µπορεί να εξυπηρετήσει έναν πελάτη κάθε φορά (το ΡΝ βρίσκεται σε

σύγκρουση). Εάν επιλέξει τη Μαρία, ο Γιώργος θα πρέπει να περιµένει, και αντί-

στροφα.

Στο ΡΝ του Σχήµατος 8.18 φαίνεται ποιον πελάτη εξυπηρετεί κάθε φορά ο Τάκης,

αλλά δεν φαίνεται τι του πουλάει και σε ποια τιµή. Σηµειώστε ότι, εάν έλθουν και

άλλοι πελάτες (οπότε θα προστεθούν και νέοι πωλητές), το δίκτυο θα γίνει αρκετά

πολύπλοκο και δυσανάγνωστο. Κατασκευάζουµε λοιπόν το δίκτυο θέσης–µετάβα-

σης που φαίνεται στο Σχήµα 8.19, σε µια προσπάθεια να µειώσουµε την πολυπλο-

κότητα της αναπαράστασης.

1 8 58 . 6 ¢ π ∫ ∆ À∞ ¢ π ∞ ∫ ƒ π ∆ ø ¡ ∆ ∂ ∫ ª ∏ ƒ π ø ¡

™¯‹Ì· 8.17

Πυροδότηση

µετάβασης σε

δίκτυο διακριτών

τεκµηρίων

BC

BC

BC

AB

A

AA

B B

B

B B

B B

C

C

C

C

C

AB

Πρίν Mετά

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 185

Page 187: pli42a

1 8 6 K E º A § A I O 8 : ¢ π ∫ ∆ À∞ P E T R I

™¯‹Ì· 8.18

∆ίκτυο συνθή-

κης–γεγονότος

που αναπαριστά

ένα πωλητή και

δύο πελάτες

™¯‹Ì· 8.19

∆ίκτυο

θέσης–µετάβασης

που αναπαριστά

έναν πωλητή και

δύο πελάτες

Tάκης Έτοιµος Γιώργος Έτοιµος

Tάκης|Φέρνει Nέα|

Pούχα

Tάκης Έχει|Xρήµατα

Συναλλαγή µε|Γιώργο

Συναλλαγή µε|Mαρία

Mαρία Έχει|Pούχα

Mαρία Φέρνει|Nέα Xρήµατα

Mαρία Έτοιµη

Γιώργος Έχει|Pούχα

Γιώργος|Φέρνει Nέα|Xρήµατα

Πωλητής|Έτοιµος

Πελάτης|Έτοιµος

Πωλητής|Φέρνει Nέα|

Pούχα

Πωλητής Έχει|Xρήµατα

Συναλλαγή

Πελάτης Έχει|Pούχα

Πελάτης|Φέρνει Nέα|Xρήµατα

Στο ΡΝ του Σχήµατος 8.19 µπορούµε εύκολα να προσθέσουµε πελάτες και πωλη-

τές, αυξάνοντας τη χωρητικότητα των θέσεων «πελάτης έτοιµος» και «πωλητής έτοι-

µος». Όµως, προσέξτε ότι, κατά τη γενίκευση της προδιαγραφής της δοµής του

συστήµατος, χάθηκε η σηµασιολογική πληροφορία που περιγράφει ποιον πελάτη

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 186

Page 188: pli42a

εξυπηρετεί κάθε φορά ο κάθε πωλητής. Προσπαθώντας να συνδυάσουµε τα πλεο-

νεκτήµατα και των δύο αναπαραστάσεων, επιλέγουµε να ονοµατίσουµε τα τεκµή-

ρια, ώστε να αναπαριστούν τους πωλητές και τους πελάτες. Έτσι, προκύπτει το

δίκτυο διακριτών τεκµηρίων του Σχήµατος 8.20.

1 8 78 . 6 ¢ π ∫ ∆ À∞ ¢ π ∞ ∫ ƒ π ∆ ø ¡ ∆ ∂ ∫ ª ∏ ƒ π ø ¡

T

T T

T T

T

M

M

M

M

Γ Γ

ΓΓ

T ΓM

Πωλητής|Έτοιµος

Πελάτης|Έτοιµος

Πωλητής|Φέρνει Nέα|

Pούχα

Πωλητής Έχει|Xρήµατα

Πελάτης Έχει|Pούχα

Συναλλαγή|Tάκη – Γιώργου

Συναλλαγή|Tάκη – Mαρίας

Mαρία Φέρνει|Nέα Xρήµατα

Γιώργος Φέρνει|Nέα Xρήµατα

™¯‹Ì· 8.20

∆ίκτυο διακριτών

τεκµηρίων που

αναπαριστά

ένα πωλητή και

δύο πελάτες

Στο ΡΝ του Σχήµατος 8.20 καταφέραµε να προδιαγράψουµε ακριβώς µε ποιον πελά-

τη συνδιαλλάσσεται ο Τάκης και τι του πουλάει. Επιπλέον, η πρόσθεση νέων πελα-

τών οδηγεί στην πρόσθεση νέων µεταβάσεων, αλλά όχι νέων θέσεων.

Αναπαριστούµε µε τρία τεκµήρια A, B και C τα προϊόντα, ενώ µε τα τεκµήρια P και

R αναπαριστούµε τον παραγωγό και τον καταναλωτή, αντίστοιχα. Στη διαδικασία

παραγωγής, η οποία οδηγεί στην παραγωγή των τριών προϊόντων, µετέχει ο παρα-

γωγός. Αντίστοιχα, η κατανάλωση των τριών προϊόντων γίνεται από τον καταναλω-

τή. Τα τρία προϊόντα, µόλις παραχθούν, µεταφέρονται µε το φορτηγό για να παρα-

ληφθούν από τον καταναλωτή.

¢Ú·ÛÙËÚÈfiÙËÙ· 8.8

∆οκιµάστε να προδιαγράψετε µε δίκτυο διακριτών τεκµηρίων τη δραστηριότητα

πώλησης και διανοµής τριών προϊόντων Α, Β, C, τα οποία παράγει ο P και κατα-

ναλώνει ο R. Τα προϊόντα διανέµονται από τον P στον R µέσω του φορτηγού της

επιχείρησης. Έπειτα, συγκρίνετε την απάντησή σας µε το Σχήµα 8.21.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 187

Page 189: pli42a

1 8 8 K E º A § A I O 8 : ¢ π ∫ ∆ À∞ P E T R I

8.6.1 EÂÎÙ¿ÛÂȘ

Τα βασικά δίκτυα απλών τεκµηρίων που µελετήσαµε έως τώρα είναι δυνατό να επε-

κταθούν µε διάφορους τρόπους:

• Ορίζοντας µια γενική (αθροιστική) χωρητικότητα για κάθε θέση, ή ορίζοντας ξεχω-

ριστή χωρητικότητα για κάθε είδος τεκµηρίου. Γενικά, σε ένα τέτοιο δίκτυο, εµφα-

νίζεται ένα πλήθος διαφορετικών τεκµηρίων στην ίδια ή σε διαφορετικές θέσεις.

• Ορίζοντας το βάρος κάθε βέλους ως µια έκφραση επί των διαφορετικών τεκµη-

ρίων που είναι δυνατό να διακινηθούν µέσα από αυτό. Έτσι, επιτρέπεται η ταυ-

τόχρονη διάβαση τεκµηρίων διαφόρων ειδών (καθώς και ένα συγκεκριµένο πλή-

θος από κάθε είδος) µέσα από το ίδιο βέλος.

• Συµπεριλαµβάνοντας στο είδος κάθε τεκµηρίου και το στοχευόµενο παραλήπτη

(θέση ή µετάβαση). Τότε, το τεκµήριο ορίζεται ως ένα ζεύγος της µορφής (είδος,

παραλήπτης), ενώ αντίστοιχα αλλάζουν και τα βάρη των βελών.

• Επιτρέποντας την ύπαρξη ανακυκλώσεων, δηλαδή επιτρέποντας σε µια θέση p να

ανήκει τόσο στο ∑∑ t, όσο και στο t ∑∑, µιας µετάβασης t. Ένα τέτοιο δίκτυο είναι χρή-

σιµο όταν τα δύο βέλη που συνδέουν την p µε την t φέρουν διαφορετική επιγραφή.

™¯‹Ì· 8.21

Απάντηση στη

δραστηριότητα 7

∆υνατότητα|∆ιανοµής

Παραγωγή

∆υνατότητα|παραγωγής

Kανάλι

Παραλαβή A

Παραλαβή B

Παραλαβή C

∆ιανοµή A

∆ιανοµή B

∆ιανοµή C

∆υνατότητα|Kατανάλωσης

Kατανάλωση

∆υνατότητα|Παραλαβής

P

P

P

P

P

P

P

P

C C

AA

B B

R

R

R

RR

R

R

R

ÕÛÎËÛË ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘ 8.5

Προσπαθήστε να λύσετε το πρόβληµα του βαρκάρη που πρέπει να µεταφέρει το

λύκο, την κατσίκα και το λάχανο χρησιµοποιώντας ένα δίκτυο διακριτών τεκµη-

ρίων που έχει τον ελάχιστο δυνατό αριθµό θέσεων.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 188

Page 190: pli42a

8.6.2 MÂÙ·‚ÏËÙ¤˜ ˆ˜ ÂÙÈΤÙ˜ ‚ÂÏÒÓ

Η γενικότητα της εφαρµογής ενός δικτύου διακριτών τεκµηρίων µπορεί να επεκτα-

θεί, χωρίς να προκληθεί «έκρηξη» του πλήθους των µεταβάσεων εάν επιτρέψουµε

τη χρήση µεταβλητών ως ετικέτες στα βέλη του.

Σε ένα δίκτυο διακριτών τεκµηρίων µε µεταβλητές ως ετικέτες βελών:

• Ορίζεται η έννοια της «αντικατάστασης» των µεταβλητών, σε σχέση µε µια µετά-

βαση t, όταν κάθε µεταβλητή που επιγράφει τα βέλη που ξεκινούν ή καταλήγουν

στην t αντικαθίσταται από ένα διακριτό τεκµήριο. Εάν η ίδια µεταβλητή εµφανί-

ζεται σε περισσότερα από ένα βέλη, αντικαθίσταται παντού από το ίδιο τεκµήριο.

• Μια µετάβαση t ενεργοποιείται σε σχέση µε µια αντικατάσταση, αν κάθε θέση pi Œ∑∑ t περιέχει τα τεκµήρια που προκύπτουν από την αντικατάσταση των µεταβλητών

που επιγράφουν το βέλος από την pi στην t.

• Κατά την πυροδότηση µιας µετάβασης που είναι ενεργοποιηµένη σε σχέση µε µια

αντικατάσταση:

• αφαιρούνται από κάθε θέση pi Œ ∑∑ t τα τεκµήρια που προέκυψαν από την αντι-

κατάσταση των µεταβλητών που επιγράφουν το βέλος από την pi στην t, και

• προστίθενται σε κάθε θέση pi Œ t ∑∑ τα τεκµήρια που προέκυψαν από την αντι-

κατάσταση των µεταβλητών που επιγράφουν το βέλος από την t στην pi.

Στο Σχήµα 8.22 δείχνεται η πυροδότηση ενός ΡΝ διακριτών τεκµηρίων µε µετα-

βλητές ετικέτες βελών. Η πυροδότηση συµβαίνει για x = B και y = A.

1 8 98 . 6 ¢ π ∫ ∆ À∞ ¢ π ∞ ∫ ƒ π ∆ ø ¡ ∆ ∂ ∫ ª ∏ ƒ π ø ¡

™¯‹Ì· 8.22

Πυροδότηση

µετάβασης σε

δίκτυο διακριτών

τεκµηρίων µε

µεταβλητές ως

ετικέτες βελών

Πριν Mετά

BC AB

AB

ABAB

B

B B

A C

x x x x

y y y

y

y

y

Μελέτη περίπτωσης (συνέχεια)

Θυµηθείτε ότι ορίσαµε τα δίκτυα διακριτών τεκµηρίων για να εκµεταλλευθούµε τα

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 189

Page 191: pli42a

1 9 0 K E º A § A I O 8 : ¢ π ∫ ∆ À∞ P E T R I

πλεονεκτήµατα των δικτύων συνθήκης–γεγονότος και θέσης–µετάβασης, σε µια προ-

σπάθεια να αποφύγουµε την πολύ µεγάλη αύξηση της πολυπλοκότητας του ΡΝ

καθώς αυξάνονται τα µέρη του υπό προδιαγραφή συστήµατος. Η µελέτη περίπτω-

σης στην αρχή της ενότητας έδειξε ότι η προσθήκη ενός νέου πελάτη στο δίκτυο δια-

κριτών τεκµηρίων µε σταθερές ως επιγραφές βελών κάνει αναγκαία την προσθήκη

ενός τεκµηρίου νέου είδους και πολλών νέων µεταβάσεων, ενώ δεν αυξάνει τον αριθ-

µό των θέσεων.

Για να επιτύχουµε πλήρως τον αρχικό µας στόχο χρειαζόµαστε µια αναπαράσταση

η οποία δεν οδηγεί σε τροποποίηση της δοµής του δικτύου, όταν προστίθενται νέοι

πωλητές ή πελάτες. Μια τέτοια αναπαράσταση, η οποία χρησιµοποιεί µεταβλητές

ως επιγραφές των βελών, δείχνεται στο Σχήµα 8.23.

™¯‹Ì· 8.23

∆ίκτυο διακριτών

τεκµηρίων µε

µεταβλητές ως

ετικέτες βελών

που αναπαριστά

έναν πωλητή και

δύο πελάτες

Πωλητής|Έτοιµος

Πελάτης|Έτοιµος

Συναλλαγη|x µε y

Πελάτης Έχει|Pούχα

Πωλητής Έχει|Xρήµατα

O x Φέρνει|Nέα Pούχα

O y Φέρνει|NέαXρήµατα

Γ MT

x

x x

x y

y

y

y

8.7 ÕÏÏ· ‰›ÎÙ˘· ˘„ËÏÔ‡ ÂȤ‰Ô˘

Τα τρία βασικά ΡΝ που µελετήσαµε έως τώρα είναι αρκετά για την περιγραφή οποι-

ουδήποτε συστήµατος, η συµπεριφορά του οποίου περιλαµβάνει τη µετάβαση ανά-

µεσα σε διαδοχικές καταστάσεις. Τα τρία µοντέλα που µελετήσαµε έχουν σχετικά

απλή σύνταξη και η εφαρµογή τους είναι άµεση. Όµως, ως αποτέλεσµα της απλό-

τητας αυτής, οδηγούν στην ανάπτυξη µεγάλων και δύσχρηστων δικτύων.

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

ΡΝ και της δυνατότητας για εύκολη προσαρµογή σε νέες απαιτήσεις, οδήγησε στην

ανάπτυξη ενός πλήθους µοντέλων ΡΝ υψηλού επιπέδου. Καθένα από αυτά ουσια-

στικά προσθέτει την σηµασιολογία που απαιτείται για το πεδίο εφαρµογής του, οδη-

γώντας σε περισσότερο συνεκτικές αλλά και πιο «βαριές» αναπαραστάσεις. Βέβαια,

όλα αυτά τα µοντέλα είναι δυνατό να αναχθούν σε κάποιο από τα βασικά ΡΝ, για τα

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 190

Page 192: pli42a

οποία υπάρχουν θεµελιωµένες τεχνικές ανάλυσης.

Στην ενότητα αυτή θα παρουσιάσουµε πολύ συνοπτικά µερικά ακόµη ΡΝ υψηλού

επιπέδου. Ο ενδιαφερόµενος αναγνώστης µπορεί να βρει περισσότερα στην εργασία

(Gerogiannis [98]). Μερικά από τα µοντέλα που κατά καιρούς έχουν προταθεί είναι

τα εξής:

• Χρωµατισµένα ΡΝ (Coloured PN): Eπεκτείνουν τα ΡΝ θέσης–µετάβασης συσχε-

τίζοντας χρώµατα µε τις θέσεις, τις µεταβάσεις ή τα τεκµήρια του δικτύου. Το

χρώµα χρησιµοποιείται για το διαχωρισµό των στοιχείων του συστήµατος σε κλά-

σεις που έχουν κοινές ιδιότητες. Ο κανόνας πυροδότησης επεκτείνεται µε την

απαίτηση να ισχύει κάποια ιδιότητα βασισµένη σε χρώµα (π.χ. µπορεί να κατα-

ναλώνονται µόνο όσα τεκµήρια εισόδου έχουν το ίδιο χρώµα µε τη µετάβαση).

Αν και η προσθήκη χρωµάτων επεκτείνει το χώρο των καταστάσεων που µπορεί

να αναπαραστήσει το δίκτυο, τα χρωµατισµένα ΡΝ έχουν τελικά την ίδια ισχύ

αναπαράστασης µε τα κλασικά ΡΝ θέσης–µετάβασης.

• ΡΝ κατηγορηµάτων–µετάβασης (Predicate–Transition PN): Aκολουθούν προ-

σέγγιση παρόµοια µε τα χρωµατισµένα ΡΝ και συσχετίζουν κατηγορήµατα µε τις

µεταβάσεις. Πρόκειται για εξισώσεις, οι οποίες περιγράφουν τις συνθήκες και τον

τρόπο κατανάλωσης ή παραγωγής των τεκµηρίων. Περισσότεροι περιορισµοί ανα-

παρίστανται ως ετικέτες στα βέλη.

• FIFO PN (First In First Out PN): Στα δίκτυα αυτά, οι θέσεις αντικαθίστανται µε

ουρές (δοµές κατά τις οποίες η σειρά κατανάλωσης των τεκµηρίων ακολουθεί τη

σειρά άφιξης αυτών στη θέση). Τα τεκµήρια αναπαρίστανται µε γράµµατα ενός

συγκεκριµένου αλφαβήτου. Τότε, οι θέσεις αποθηκεύουν συµβολοσειρές (strings)

και τα βέλη επιγράφονται µε γράµµατα. Με τον τρόπο αυτό αυξάνεται η εκφρα-

στικότητα του µοντέλου (τα δίκτυα αυτά έχουν την ίδια εκφραστική δύναµη µε

τις µηχανές Turing), αλλά ο περιορισµός στη σειρά κατανάλωσης των τεκµηρίων

µπορεί να οδηγήσει σε αδιέξοδο την εκτέλεση του συστήµατος. Η κατάσταση

αυτή αποφεύγεται στα Κανονικοποιηµένα FIFO PN.

• ΡΝ θέσης–µετάβασης µε πιστωτικά βέλη (PN with Debit arcs): Ένα πιστωτικό

βέλος συνδέει µια θέση p µε µια µετάβαση t και έχει την εξής ιδιότητα: η µετά-

βαση p µπορεί να πυροδοτηθεί χωρίς να περιέχεται τεκµήριο στη θέση t. Κατά την

πυροδότηση, χρεώνεται η θέση p µε ένα αντι – τεκµήριο, το οποίο θα «συντηχθεί»

(αλληλοεξουδετερωθεί) µε το πρώτο τεκµήριο που θα εµφανιστεί στη θέση p. Με

τον τρόπο αυτό, το σύστηµα µπορεί να επεξεργαστεί ένα γεγονός χωρίς να ισχύ-

ουν όλες οι προ – συνθήκες.

1 9 18 . 7 ∞ § § ∞ ¢ π ∫ ∆ À∞ À æ ∏ § √ À ∂ ¶ π ¶ ∂ ¢ √ À

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 191

Page 193: pli42a

1 9 2 K E º A § A I O 8 : ¢ π ∫ ∆ À∞ P E T R I

• Εκτεταµένα ΡΝ (Extended PN): Eπεκτείνουν το βασικό µοντέλο υιοθετώντας έξι

διαφορετικούς τύπους θέσεων, ώστε να αναπαρίστανται όλα τα είδη συνθηκών

που µπορεί να εµφανιστούν σε ένα κατασκευαστικό σύστηµα (manufacturing

system). Είναι κατάλληλα για τη ρητή αναπαράσταση της ροής ελέγχου, πόρων,

τµηµάτων και πληροφοριών µέσα στο υπό αναπαράσταση σύστηµα. Κάθε τέτοιο

δίκτυο αναπτύσσεται µε µια συγκεκριµένη ιεραρχική µεθοδολογία συνθέτοντας

σηµειωµένους γράφους.

• Αλληλεπιδραστικοί Γράφοι Πολλαπλής Ροής (Interactive Multi Flow Graph –

IMFG): Πρόκειται για ένα ΡΝ υψηλού επιπέδου, το οποίο είναι κατάλληλο για την

προδιαγραφή του διαλόγου ανάµεσα σε µια εφαρµογή και τους χρήστες της. Το

µοντέλο αυτό συσχετίζει τύπους τόσο µε τις θέσεις όσο και µε τις µεταβάσεις, ώστε

να είναι δυνατή η αναπαράσταση των στόχων, πλάνων και ενεργειών του χρήστη,

αλλά και της ροής γεγονότων, ελέγχου και επεξεργασίας του συστήµατος.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 192

Page 194: pli42a

™‡ÓÔ„Ë

Τα ΡΝ είναι η τελευταία τεχνική τυπικών προδιαγραφών που παρουσιάζουµε αναλυ-

τικά στον τόµο αυτό. Πρόκειται για µια αρκετά διαδεδοµένη τεχνική, ιδιαίτερα στις

διάφορες παραλλαγές των HLPN, η οποία συνδυάζει την ευχρηστία ενός γραφικού

µοντέλου µε την ισχύ και την αυστηρότητα των τεχνικών ανάλυσης που βασίζονται

στα Μαθηµατικά.

Ένα ΡΝ είναι ένας διµερής γράφος, µε κορυφές που αντιστοιχούν σε θέσεις (αναπα-

ριστούν αποθήκευση δεδοµένων) ή µεταβάσεις (αναπαριστούν επεξεργασία δεδοµέ-

νων). Οι κορυφές συνδέονται µεταξύ τους µε βέλη, πάνω στα οποία ρέουν τεκµήρια

(τα οποία αναπαριστούν αφαιρετικές δοµές δεδοµένων). Η διάταξη των τεκµηρίων

στις θέσεις του γράφου καλείται σηµείωση του ΡΝ και αναπαριστά την κατάσταση

του υπό µελέτη συστήµατος. Η αλλαγή της κατάστασης συµβαίνει µε την πυροδότη-

ση µιας µετάβασης, η οποία προκαλεί την κατανάλωση τεκµηρίων από τις θέσεις

εισόδου και την παραγωγή τεκµηρίων στις θέσεις εξόδου της µετάβασης. Η ακριβής

περιγραφή της αλλαγής κατάστασης γίνεται µε τον κανόνα πυροδότησης, ο οποίος

εφαρµόζεται διαφορετικά σε κάθε µοντέλο ΡΝ.

Τα ΡΝ διακρίνονται σε χαµηλού και υψηλού επιπέδου. Τα πρώτα περιέχουν λίγη σηµα-

σιολογική πληροφορία, µε αποτέλεσµα η αναπαράσταση ενός συστήµατος να κατα-

λαµβάνει πολλές σελίδες. Όµως, υποστηρίζουν την ανάλυση των δικτύων µε τυπικές

τεχνικές, µε στόχο την ανακάλυψη απρόσιτων καταστάσεων ή άχρηστων µεταβάσεων.

Τα ΡΝ υψηλού επιπέδου προσθέτουν σηµασιολογική πληροφορία στα βασικά ΡΝ, µε

αποτέλεσµα να αποκτούν µεγάλη ισχύ αναπαράστασης, αυξηµένη ευχρηστία και καλή

προσαρµογή στο πεδίο του υπό µελέτη συστήµατος. Όµως, η τυπική ανάλυση ενός

ΡΝ υψηλού επιπέδου είναι σχεδόν αδύνατη, οπότε είµαστε αναγκασµένοι να το ανά-

γουµε σε ένα ΡΝ χαµηλού επιπέδου. Αντίθετα, ένα ΡΝ υψηλού επιπέδου µπορεί να

µελετηθεί ποιοτικά (αλλά όχι να αναλυθεί) µε τη χρήση προσοµοίωσης.

Στο επόµενο και τελευταίο κεφάλαιο του τόµου θα παρουσιαστούν συνοπτικά µερικά

λιγότερο διαδεδοµένα (και περισσότερο εξειδικευµένα) µοντέλα τυπικών προδιαγραφών.

1 9 3™ Y N O æ H

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 193

Page 195: pli42a

1 9 4 K E º A § A I O 8 : ¢ π ∫ ∆ À∞ P E T R I

µÈ‚ÏÈÔÁÚ·Ê›·

[1]V. Gerogiannis, A. Kameas and P. Pintelas (1998), «Comparative study and

categorization of High – level Petri Nets». The Journal of Systems and Software,

43, pp 133–160.

[2]T. Murata (1989), «Petri Nets: Properties, Analysis and Applications».

Proceedings of the IEEE, 77(4).

[3]W. Reisig (1992), «A primer in Petri Net design». Springer – Verlag.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 194

Page 196: pli42a

ÕÏÏ· ÌÔÓ٤Ϸ Ù˘ÈÎÒÓ ÚԉȷÁÚ·ÊÒÓ

™ÎÔfi˜

Ο σκοπός του κεφαλαίου είναι απλά να σας γνωρίσει µερικές ακόµη, λιγότερο δια-

δεδοµένες τεχνικές τυπικών προδιαγραφών.

¶ÚÔÛ‰ÔÎÒÌÂÓ· ·ÔÙÂϤÛÌ·Ù·

Όταν θα έχετε µελετήσει το κεφάλαιο αυτό, θα µπορείτε να:

• περιγράψετε ένα λογισµικό χρησιµοποιώντας Επικοινωνούσες Ακολουθιακές ∆ιερ-

γασίες,

• περιγράψετε ένα διαλογικό λογισµικό χρησιµοποιώντας το µοντέλο ΡΙΕ,

• προδιαγράψετε ένα αντικειµενοστραφές λογισµικό χρησιµοποιώντας Anna.

ŒÓÓÔȘ ÎÏÂȉȿ

9∫ ∂ º ∞ § ∞ π √

• γεγονότα

• διεργασίες

• αλφάβητο

• ίχνος

• επικοινωνία

• επεξηγήσεις

• αξίωµα

• διάλογος χρήστη – συστήµατος

• επανεκκίνηση

• ισοδυναµία εντολών

• παρατήρηση

• πληρότητα

• πακέτο

• υπο–πρόγραµµα

∂ÈÛ·ÁˆÁÈΤ˜ ·Ú·ÙËÚ‹ÛÂȘ

Στο κεφάλαιο αυτό θα παρουσιάσουµε τρεις ακόµη τυπικές µεθόδους, των οποίων

η εφαρµογή είναι περιορισµένη σε ειδικές κατηγορίες λογισµικών. Για το λόγο αυτό,

το κεφάλαιο έχει ενηµερωτικό χαρακτήρα και δεν περιέχει ασκήσεις ή δραστηριό-

τητες. Αυτό δε σηµαίνει βέβαια ότι πρέπει να το µελετήσετε πρόχειρα.

Στην πρώτη ενότητα του κεφαλαίου παρουσιάζονται οι Επικοινωνούσες Ακολου-

θιακές ∆ιεργασίες, ένα µοντέλο κατάλληλο για την προδιαγραφή ταυτόχρονων συστη-

µάτων. Στην ενότητα 9.2 περιγράφεται το µοντέλο ΡΙΕ, το οποίο µπορεί να εφαρ-

µοστεί στην προδιαγραφή διαλογικών συστηµάτων χρήστη – µηχανής. Στην τελευ-

ταία ενότητα περιγράφεται ο συµβολισµός Anna, ο οποίος χρησιµοποιείται για την

προδιαγραφή αντικειµενοστραφών προγραµµάτων γραµµένων σε Ada.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 195

Page 197: pli42a

1 9 6 K E º A § A I O 9 : ∞ § § ∞ ª √ ¡ ∆ ∂ § ∞ ∆ À ¶ π ∫ ø ¡ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ø ¡

9.1 EÈÎÔÈÓˆÓÔ‡Û˜ ·ÎÔÏÔ˘ıȷΤ˜ ‰ÈÂÚÁ·Û›Â˜

Αυτή η µέθοδος προδιαγραφών, η οποία προτάθηκε και αναπτύχθηκε από τον Tony

Hoare (Hoare[85]), θεωρεί ότι ένα σύστηµα λογισµικού βρίσκεται σε συνεχή αλλη-

λεπίδραση µε το περιβάλλον του. Αυτή η αλληλεπίδραση αναπαρίσταται µε γεγο-

νότα (events), τα οποία ανταλλάσσονται ανάµεσα στο σύστηµα και το περιβάλλον

του (το οποίο µπορεί να απαρτίζεται από άλλα συστήµατα) µε τη µορφή µηνυµά-

των. Τότε, η λειτουργία του συστήµατος ουσιαστικά «περιορίζεται» στην επεξερ-

γασία αυτών των γεγονότων. Η αντίδρασή του στα γεγονότα προκαλεί την παρατη-

ρήσιµη συµπεριφορά του συστήµατος.

Συνεπώς, για να προδιαγράψουµε ένα σύστηµα, αρκεί να προδιαγράψουµε την

συµπεριφορά που αυτό επιδεικνύει αντιδρώντας σε εξωτερικά γεγονότα, δηλαδή να

προδιαγράψουµε την ακολουθία των παρατηρήσιµων καταστάσεων από τις οποίες

αυτό θα «περάσει» µέχρι να τερµατιστεί (ή να µην τερµατιστεί) η λειτουργία του.

Πρόκειται για το λεγόµενο «ίχνος» του συστήµατος.

Προδιαγράφοντας την εξωτερική συµπεριφορά δείχνουµε να µην ενδιαφερόµαστε

για την εσωτερική δοµή του συστήµατος και τον τρόπο µε τον οποίο προκύπτει η

παρατηρήσιµη συµπεριφορά του. Πραγµατικά, ένα σύστηµα λογισµικού µπορεί να

διασπαστεί σε µικρότερα τµήµατα (υπο–συστήµατα), τα οποία µπορεί να λειτουρ-

γούν ταυτόχρονα, αλληλεπιδρώντας τόσο µεταξύ τους, όσο και µε το (κοινό) περι-

βάλλον. Σε αφαιρετικό επίπεδο, τα τµήµατα αυτά ονοµάζονται «διεργασίες».

Έχοντας όλα αυτά στο µυαλό µας, µπορούµε να δηλώσουµε τώρα πως η µέθοδος

των Επικοινωνούντων Ακολουθιακών ∆ιεργασιών (Communicating Sequential

Processes–CSP) ισχυρίζεται ότι η προδιαγραφή του ίχνους ενός συστήµατος προ-

κύπτει συνθέτοντας µε ακολουθιακό τρόπο τις προδιαγραφές των αλληλεπιδρωσών

διεργασιών που αποτελούν το σύστηµα. Η προδιαγραφή του ίχνους ενός συστήµα-

τος, όταν γίνει µε την τυπική γλώσσα της CSP, είναι αρκετή για την τυπική επαλή-

θευση της συµπεριφοράς του.

9.1.1 ¢ÈÂÚÁ·Û›Â˜

Λέγοντας διεργασία (process) Ρ εννοούµε τη συµπεριφορά ενός αντικειµένου (π.χ.

ενός τµήµατος του λογισµικού), η οποία περιγράφεται µε βάση ένα πεπερασµένο

σύνολο γεγονότων (πρόκειται για το αλφάβητο αΡ της διεργασίας).

Το αλφάβητο αποτελεί µία µόνιµη, προκαθορισµένη ιδιότητα κάθε διεργασίας: είναι

αδύνατο για µία διεργασία να αντιδράσει σε κάποιο γεγονός που δεν ανήκει στο

αλφάβητό της. Συνεπώς, πρέπει να διαχωρίζουµε τις διεργασίες µε διαφορετικά

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 196

Page 198: pli42a

αλφάβητα, ακόµη και αν η παρατηρήσιµη συµπεριφορά τους είναι όµοια. Τέλος, δεν

διαχωρίζουµε ανάµεσα σε γεγονότα που προέρχονται από το περιβάλλον ή από την

ίδια τη διεργασία: όλα τα γεγονότα, στα οποία αντιδρά η διεργασία, ανήκουν στο

αλφάβητό της.

Εάν x, y είναι γεγονότα και P, Q είναι διεργασίες, τότε ορίζουµε τους εξής τελεστές:

• Πρόθεµα (prefix) x Æ P: περιγράφει µία διεργασία η οποία πρώτα διαχειρίζεται

το γεγονός x και στη συνέχεια συµπεριφέρεται όπως η Ρ. Ισχύει α(x Æ P) = αP,

µε την προϋπόθεση ότι x Œ αP.

• Eπιλογή (choice) x Æ P | y Æ Q: περιγράφει µία διεργασία, η οποία πρώτα δια-

χειρίζεται είτε το γεγονός x είτε το y. Στη συνέχεια, ανάλογα µε το πρώτο γεγο-

νός, η διεργασία αυτή συµπεριφέρεται όπως η Ρ ή η Q. Ισχύει α(x Æ P | y Æ Q)

= αP, µε την προϋπόθεση ότι x, y Õ αP και αP = αQ.

Με τον τελεστή «πρόθεµα» διαχωρίζουµε αποτελεσµατικά τα γεγονότα από τις διερ-

γασίες που τα µεταχειρίζονται: ο τελεστής αυτός δέχεται πάντα ένα γεγονός αριστε-

ρά του και µία διεργασία δεξιά του. Με τον τελεστή «επιλογή» προδιαγράφουµε τη

συµπεριφορά µιας διεργασίας µε βάση µία αρχική ακολουθία γεγονότων: ο τελεστής

αυτός δεν εφαρµόζεται σε διεργασίες, αλλά µόνο σε γεγονότα.

¶·Ú¿‰ÂÈÁÌ· 9.1[1]

Θεωρήστε µία αυτόµατη µηχανή πώλησης καφέ CVM. Τα γεγονότα τα οποία αυτή

διαχειρίζεται περιγράφονται από το αλφάβητο αCVM = coin5, coin10, filter –

coffee, espresso – coffee, όπου τα δύο πρώτα αναπαριστούν την εισαγωγή νοµι-

σµάτων από τον πελάτη (η µηχανή αναγνωρίζει νοµίσµατα των 5 και 10 €) και τα

δύο τελευταία αναπαριστούν τη δυνατότητα της µηχανής να γεµίσει ένα πλαστικό

κύπελλο µε καφέ φίλτρου ή καφέ εσπρέσσο, ανάλογα µε το νόµισµα του πελάτη.

Τότε µπορούµε να προδιαγράψουµε (το αλφάβητο όλων των προδιαγραφόµενων

µηχανών είναι αCVM):

• µία χαλασµένη µηχανή, η οποία δεν αντιδρά σε κανένα γεγονός, µε τη διεργασία

(STOPαCVM),

• µία χαλασµένη µηχανή, η οποία πρώτα καταναλώνει ένα νόµισµα των 5 € και γεµί-

ζει ένα ποτήρι εσπρέσσο πριν χαλάσει εντελώς, µε τη διεργασία (coin5 Æ(espresso – coffee Æ STOPαCVM)),

1 9 79 . 1 E ¶ π ∫ √ π ¡ ø ¡ √ À ™ ∂ ™ ∞ ∫ √ § √ À £ π ∞ ∫ ∂ ™ ¢ π ∂ ƒ °∞ ™ π ∂ ™

[1] Το παράδειγµα αυτό και αυτά που ακολουθούν σε αυτή την ενότητα είναι βασισµένα στο

βιβλίο Hoare[85].

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 197

Page 199: pli42a

1 9 8 K E º A § A I O 9 : ∞ § § ∞ ª √ ¡ ∆ ∂ § ∞ ∆ À ¶ π ∫ ø ¡ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ø ¡

• µία µηχανή, η οποία, για κάθε πελάτη, πρώτα καταναλώνει ένα νόµισµα των 10

€ και έπειτα γεµίζει ένα ποτήρι µε καφέ φίλτρου (η µηχανή αυτή πουλά και καφέ

εσπρέσσο, αλλά η σχισµή των 5 € είναι χαλασµένη), µε τη διεργασία: CVMF =

(coin10 Æ (filter – coffee Æ CVMF))

Στην περίπτωση αυτή χρησιµοποιούµε αναδροµική περιγραφή της συµπεριφοράς

της µηχανής για να δείξουµε ότι αυτή µπορεί να επαναληφθεί για απροσδιόριστο

αριθµό πελατών,

• µία µηχανή, η οποία, για κάθε πελάτη, πουλά ένα ποτήρι εσπρέσσο προς 5 € ή ένα

ποτήρι καφέ φίλτρου προς 10 € (ή 2 ¥ 5 €), µε τη διεργασία:

CVM = (coin10 Æ (filter – coffee Æ CVM) |

coin5 Æ (espresso – coffee Æ CVM |

coin5 Æ (filter – coffee Æ CVM)))

• µία µηχανή, η οποία επιτρέπει σε κάθε πελάτη (µέσω ενός διακόπτη δύο θέσεων)

να επιλέξει το είδος του καφέ (και τα δύο είδη πωλούνται προς 5 €), µε τις διερ-

γασίες:

SWITCH = (set – filter Æ F | set – espr Æ E)

F = (coin5 Æ filter – coffee Æ F | set – espr Æ E)

E = (coin5 Æ espr – coffee Æ E | set – filter Æ F)

9.1.2 ÿ¯ÓË

Το ίχνος (trace) της συµπεριφοράς µιας διεργασίας Ρ είναι µία πεπερασµένη ακο-

λουθία συµβόλων από το αΡ, η οποία καταγράφει την ακολουθία των γεγονότων, τα

οποία διαχειρίστηκε η Ρ µέχρι κάποια συγκεκριµένη χρονική στιγµή. Ένα ίχνος τριών

γεγονότων συµβολίζεται ως Óx, y, z˛ (το κενό ίχνος συµβολίζεται µε Ó ˛).

Εάν s, t, u είναι ίχνη και P, Q είναι διεργασίες, τότε ορίζουµε τους εξής τελεστές:

• Σύνθεση (catenation) s^t: δηµιουργεί ένα νέο ίχνος, το οποίο πρώτα περιέχει τα

στοιχεία του s και έπειτα τα στοιχεία του t.

• Φίλτρο (restriction) t C A: δηµιουργεί ένα νέο ίχνος, στο οποίο δεν περιέχονται τα

στοιχεία του t που δεν ανήκουν στο Α, χωρίς να αλλάξει τη διάταξη των στοιχεί-

ων που αποµένουν.

• Kεφαλή (head) s0 και ουρά (tail) s¢: το πρώτο σύµβολο ενός µη κενού ίχνους s

καλείται κεφαλή s0 ενώ το ίχνος που αποµένει εάν αφαιρεθεί η κεφαλή καλείται

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 198

Page 200: pli42a

ουρά s’. Κανείς από τους δύο τελεστές δεν ορίζεται για κενό ίχνος.

• Πρόθεµα (prefix): το s είναι πρόθεµα του t αν και µόνο αν είναι δυνατό να βρεθεί

ένα ίχνος u τέτοιο ώστε s^u = t.

• Mήκος (length) # t: επιστρέφει το πλήθος των µελών του t. Ακόµη, ορίζεται και

το πλήθος των εµφανίσεων ενός συµβόλου x στο ίχνος s: s Ø x = # (s C x).

• Συνέχεια (after) P / s: πρόκειται για µία διεργασία, η οποία συµπεριφέρεται όπως

συµπεριφέρεται και η Ρ από τη στιγµή που αρχίζει να διαχειρίζεται την ακολου-

θία γεγονότων που περιλαµβάνονται στο s.

• Aναστροφή (reversal) rev s: πρόκειται για το ίχνος s µε τη σειρά των στοιχείων

του ανεστραµµένη.

¶·Ú¿‰ÂÈÁÌ· 9.2

Συνεχίζουµε µε την προδιαγραφή της µηχανής αυτόµατης πώλησης καφέ. Το ίχνος

της µηχανής, αφού έχει εξυπηρετήσει δύο πελάτες που αγόρασαν εσπρέσσο, είναι v

= Ócoin5, espresso – coffee, coin5, espresso – coffee ˛

9.1.3 ∆·˘Ùfi¯ÚÔÓ˜ ‰ÈÂÚÁ·Û›Â˜

∆ύο ταυτόχρονες διεργασίες P και Q του ίδιου συστήµατος µπορεί να αλληλεπιδρούν

ή να µην αλληλεπιδρούν. Στη δεύτερη περίπτωση µπορούµε απλά να τις προδια-

γράψουµε ως ανεξάρτητες διεργασίες. Στην πρώτη όµως περίπτωση, χρειάζεται να

αναπαραστήσουµε την αλληλεπίδραση ως ένα σύνολο γεγονότων, ο χειρισµός των

οποίων απαιτεί την ταυτόχρονη συµµετοχή και των δύο διεργασιών.

Στη γενική περίπτωση, αρκεί η τοµή των δύο αλφαβήτων να µην είναι κενή (αP «αQ ≠ ∆). Τότε, το αλφάβητο του «σύνθετου» συστήµατος είναι α(P || Q) = αP » αQ,

αλλά η ταυτόχρονη εκτέλεση των διεργασιών (P || Q) νοείται µόνο για τα γεγονότα

που είναι κοινά και στα δύο αλφάβητα, καθώς καµία από τις δύο δεν µπορεί να ανα-

γνωρίσει ή να ελέγξει τα υπόλοιπα γεγονότα.

Ας αρχίσουµε τη µελέτη των ταυτόχρονων διεργασιών από την απλούστερη περί-

πτωση, όπου οι δύο διεργασίες έχουν το ίδιο αλφάβητο (αP = αQ). Τότε ισχύουν τα

εξής (c, d Œ αP):

• P || Q = Q || P, P || (Q || R) = (P || Q) || R και P || STOP = STOP,

• (c Æ P) || (c Æ Q) = (c Æ (P || Q)),

• (c Æ P) || (d Æ Q) = STOP, όταν c ≠ d.

1 9 99 . 1 E ¶ π ∫ √ π ¡ ø ¡ √ À ™ ∂ ™ ∞ ∫ √ § √ À £ π ∞ ∫ ∂ ™ ¢ π ∂ ƒ °∞ ™ π ∂ ™

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 199

Page 201: pli42a

2 0 0 K E º A § A I O 9 : ∞ § § ∞ ª √ ¡ ∆ ∂ § ∞ ∆ À ¶ π ∫ ø ¡ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ø ¡

Η τελευταία εξίσωση µας επιτρέπει να προδιαγράψουµε τη συµπεριφορά του σύν-

θετου συστήµατος. Παρατηρήστε ότι για να µη βρεθεί το συνολικό σύστηµα σε αδιέ-

ξοδο, θα πρέπει οι δύο διεργασίες να µεταχειρίζονται κάποια κοινά αρχικά γεγονό-

τα, δηλ. (x: A Æ P(x)) || (y: B Æ Q(y)) = (z: A « B Æ (P(z) || Q(z)).

¶·Ú¿‰ÂÈÁÌ· 9.3

Η ιδέα των διεργασιών είναι τόσο γενική, ώστε µας βολεύει να αναπαριστούµε ως

διεργασία και το περιβάλλον του συστήµατος που προδιαγράφουµε. Θεωρήστε λοι-

πόν ένα πελάτη του αυτόµατου πωλητή καφέ, ο οποίος πίνει είτε καφέ φίλτρου είτε

εσπρέσσο. Το αλφάβητο του πελάτη είναι ίδιο µε εκείνο της µηχανής:

αCUST = αCVM = coin5, coin10, filter – coffee, espresso – coffee

Όµως, στον αυτόµατο πωλητή έχει τελειώσει ο καφές εσπρέσσο και µπορεί να δώσει

µόνο καφέ φίλτρου αντί 10 €:

CVM = (coin10 Æ (filter – coffee Æ CVM)) |

(coin5 Æ (coin5 Æ (filter – coffee Æ CVM)))

Ο πελάτης δε γνωρίζει για το πρόβληµα του πωλητή και διαβάζει τις οδηγίες χρή-

σης. Η αναµενόµενη συµπεριφορά του, καθώς διαθέτει ένα κέρµα των 5 € και ένα

κέρµα των 10 € είναι

CUST = (coin10 Æ (filter – coffee Æ CUST)) |

(coin5 Æ (espresso – coffee Æ CUST))

Ας δούµε την κοινή συµπεριφορά του συστήµατος:

CVM || CUST = (coin10 Æ (filter – coffee Æ Χ)) |

(coin5 Æ STOP), όπου Χ = CVM | CUST

Εάν λοιπόν ο πελάτης ρίξει πρώτα το νόµισµα των 10 € τότε θα µπορέσει να πιει ένα

ποτήρι καφέ φίλτρου. Αλλιώς, θα χάσει το νόµισµα των 5 € χωρίς να µπορεί να πιει

καφέ εσπρέσσο, καθώς δεν υπάρχει «κοινή» συµπεριφορά του πελάτη και της µηχα-

νής µετά το κέρµα των 5 € (η µηχανή αναµένει και άλλο κέρµα, το οποίο ο πελάτης

δεν διαθέτει).

Ας θεωρήσουµε τώρα ότι ο αυτόµατος πωλητής κάνει ένα συγκεκριµένο ήχο, όταν

κάποιος πελάτης ρίξει ένα νόµισµα. Αυτή τη φορά, η µηχανή διαθέτει µόνο καφέ

εσπρέσσο, ενώ η σχισµή των 10 € είναι χαλασµένη. Τότε

αCVM = coin5, coin10, clink, filter – coffee, espresso – coffee και

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 200

Page 202: pli42a

CVM = coin5 Æ clink Æ espresso – coffee Æ CVM

Ο πελάτης αυτός πίνει µόνο καφέ φίλτρου. ∆ιαθέτει δύο κέρµατα των 5 € και τη

συνήθεια να βρίζει όταν του σερβίρουν καφέ εσπρέσσο:

αCUST = coin5, curse, filter – coffee, espresso – coffee και

CUST = coin5 Æ (coin5 Æ filter – coffee Æ CUST | curse Æ espresso – coffee ÆCUST).

Το ζήτηµα είναι πότε ο πελάτης θα ανακαλύψει ότι ο πωλητής δεν διαθέτει καφέ φίλ-

τρου και θα αρχίσει να βρίζει:

CVM || CUST = coin5 Æ (clink Æ curse Æ espresso – coffee Æ X | curse Æ clink

Æ espresso – coffee Æ X)

9.1.4 ∂ÈÎÔÈÓˆÓ›·

Μέχρι τώρα χρησιµοποιήσαµε τα γεγονότα ως ενέργειες χωρίς διάρκεια, ο χειρισµός

των οποίων χρειάζεται τη συµµετοχή µιας ή περισσότερων διεργασιών, οι οποίες

προδιαγράφονται ανεξάρτητα.

Στη γλώσσα CSP ορίζεται µία ειδική κατηγορία γεγονότων, οι επικοινωνίες

(communications). Μία επικοινωνία περιγράφεται από ένα ζεύγος c.v, όπου c είναι

το όνοµα του καναλιού επικοινωνίας και v είναι το περιεχόµενο του µηνύµατος που

ανταλλάσσεται. Ορίζεται, λοιπόν, το σύνολο όλων των µηνυµάτων µε τα οποία µια

διεργασία Ρ µπορεί να επικοινωνήσει µέσα από το κανάλι c ως αc(P) = v | c.v ŒαP. Εάν τώρα v Œ αc(P), τότε ορίζουµε ως:

• (c!v Æ P) µια διεργασία, η οποία πρώτα εξάγει (γράφει) το µήνυµα v στο κανάλι

c και στη συνέχεια συµπεριφέρεται όπως η Ρ,

• (c?x Æ P(x)) µια διεργασία, η οποία είναι έτοιµη να εισαγάγει (διαβάσει) ένα

µήνυµα x από το κανάλι c και στη συνέχεια να συµπεριφερθεί όπως η Ρ για την

τιµή x.

Στην περίπτωση όπου δύο ταυτόχρονες διεργασίες P || Q χρησιµοποιούν το κανάλι

c (το c είναι κανάλι εξόδου για την Ρ και εισόδου για την Q), η επικοινωνία είναι

δυνατή κάθε φορά που η Ρ γράφει ένα µήνυµα και η Q το διαβάζει εκείνη τη στιγ-

µή (τα γεγονότα είναι στιγµιαία). Η Ρ αποδίδει µία µοναδική τιµή στο µήνυµα, ενώ

η Q είναι έτοιµη να διαβάσει οποιαδήποτε τιµή. Συνεπώς, θα συµβεί το γεγονός c.v,

όπου η τιµή του v καθορίζεται από την Ρ (είναι φανερό ότι θα πρέπει να ισχύει ο

περιορισµός αc(P) = αc(Q)).

2 0 19 . 1 E ¶ π ∫ √ π ¡ ø ¡ √ À ™ ∂ ™ ∞ ∫ √ § √ À £ π ∞ ∫ ∂ ™ ¢ π ∂ ƒ °∞ ™ π ∂ ™

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 201

Page 203: pli42a

2 0 2 K E º A § A I O 9 : ∞ § § ∞ ª √ ¡ ∆ ∂ § ∞ ∆ À ¶ π ∫ ø ¡ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ø ¡

¶·Ú¿‰ÂÈÁÌ· 9.4

Έστω µία διεργασία SQ, η οποία δέχεται στην είσοδο έναν αριθµό y και παράγει στην

έξοδο το τετράγωνο του αριθµού (ισχύει αinp = αout = N):

SQ = (inp ? y Æ out ! (y ¥ y) Æ P).

Έστω µια διεργασία SEQ, η οποία δέχεται στην είσοδο δύο µηνύµατα, τα οποία διο-

χετεύει στην έξοδό της (αinp1 = αinp2 = αout):

SEQ = (inp1 ? x Æ out ! x Æ SEQ | inp2 ? x Æ out ! x Æ SEQ).

9.1.5 ∞ÎÔÏÔ˘ıȷΤ˜ ‰ÈÂÚÁ·Û›Â˜

Μία διεργασία Ρ λέγεται ακολουθιακή (sequential), εάν µπορούµε να διαχωρίσου-

µε τον επιτυχή τερµατισµό της από το αδιέξοδο. Έχουµε ήδη αναπαραστήσει το αδιέ-

ξοδο µε τη διεργασία STOP. Έτσι, αναπαριστούµε τον επιτυχή τερµατισµό µε το σύµ-

βολο ÷, το οποίο ανήκει στο αλφάβητο της Ρ.

Εάν P και Q είναι ακολουθιακές διεργασίες µε το ίδιο αλφάβητο, ορίζουµε ως ακο-

λουθιακή σύνθεση των P και Q τη διεργασία P ; Q, η οποία πρώτα συµπεριφέρεται

όπως η Ρ και, όταν αυτή τερµατίσει επιτυχώς, συµπεριφέρεται όπως η Q. Εάν η Ρ

δεν τερµατίζει ποτέ επιτυχώς, το ίδιο συµβαίνει και µε την P ; Q.

¶·Ú¿‰ÂÈÁÌ· 9.5

Έστω ένας αυτόµατος πωλητής καφέ, ο οποίος εξυπηρετεί µόνο έναν πελάτη:

CVM – ONE = (coin10 Æ (filter – coffee Æ SKIP) |

coin50 Æ (espresso – coffee Æ SKIP |

coin50 Æ (filter – coffee Æ SKIP))

Έτσι προδιαγράφεται ο αυτόµατος πωλητής που εξυπηρετεί δύο πελάτες στη σειρά:

CVM – TWO = CVM – ONE ; CVM – ONE. Τότε, ο αυτόµατος πωλητής που εξυ-

πηρετεί οποιοδήποτε αριθµό πελατών προδιαγράφεται ως CVM = * CVM – ONE.

Μια τέτοια διεργασία καλείται ανακύκλωση (loop). Γενικά ισχύει

* Ρ = Ρ ; Ρ ; Ρ ;..., όπου α(*Ρ) = αΡ – ÷

9.1.6 ∞Ó··Ú¿ÛÙ·ÛË ÛÙÔȯ›ˆÓ ÚÔÁÚ·ÌÌ¿ÙˆÓ

Η γλώσσα CSP είναι ένας αρκετά ισχυρός φορµαλισµός, εκφραστικά ισοδύναµος µε

τις κανονικές εκφράσεις (regular expressions). Ο τελεστής της ακολουθιακής σύν-

θεσης µπορεί να χρησιµοποιηθεί για να ορισθεί η έννοια της «πρότασης» µιας διερ-

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 202

Page 204: pli42a

γασίας Ρ ως µία ακολουθία συµβόλων, τα οποία αναπαριστούν γεγονότα που δια-

χειρίζεται η διεργασία Ρ και στη συνέχεια τερµατίζει επιτυχώς.

Ακόµη, µε τη γλώσσα CSP µπορούµε να ορίσουµε τυπικά και τα τρία συστατικά του

δοµηµένου, διαδικασιακού προγραµµατισµού, δηλαδή

• την καταχώριση (assignment): αν x είναι µία µεταβλητή προγράµµατος, e µία

έκφραση (εξίσωση) και P µία διεργασία, τότε η διεργασία (x:= e ; P) συµπεριφέ-

ρεται όπως η Ρ, µε τη διαφορά ότι η αρχική τιµή της x ορίζεται ως η αρχική τιµή

της e (οι αρχικές τιµές των άλλων µεταβλητών παραµένουν αναλλοίωτες).

Ισχύει (x:= e) = (x:= e ; SKIP),

• την επιλογή υπό συνθήκη (conditional choice): αν x είναι µία έκφραση που µπο-

ρεί να πάρει µόνο τις τιµές TRUE ή FALSE και P, Q είναι διεργασίες, τότε η διερ-

γασία P Ñ x u Q συµπεριφέρεται όπως η Ρ, αν η αρχική τιµή της x είναι TRUE,

ή όπως η Q, αν η αρχική τιµή της x είναι FALSE,

• την επανάληψη υπό συνθήκη (conditional loop): αν x είναι µία έκφραση που µπο-

ρεί να πάρει µόνο τις τιµές TRUE ή FALSE και P είναι µια διεργασία, τότε η διερ-

γασία x*P συµπεριφέρεται συνεχώς όπως η Ρ, όσο η τιµή της x είναι TRUE και

τερµατίζει επιτυχώς µόλις η τιµή της x γίνει FALSE.

9.2 T È΋ ÂÚÈÁÚ·Ê‹ ‰È·ÏÔÁÈÎÒÓ Û˘ÛÙËÌ¿ÙˆÓ

Στην ενότητα αυτή θα περιγράψουµε ένα τυπικό µοντέλο µε το οποίο µπορούµε να

προδιαγράψουµε τη συµπεριφορά διαλογικών συστηµάτων, δηλαδή συστηµάτων τα

οποία αντιδρούν στις εντολές που υποβάλλει ο χρήστης. Οι εντολές υποβάλλονται

µέσα από το διαπροσωπείο χρήστη–συστήµατος (user interface), το οποίο κάνει τα

εξής:

• Απεικονίζει κάθε φορά την κατάσταση του συστήµατος, καθώς ο χρήστης δεν έχει

πρόσβαση σε άλλα, εσωτερικά τµήµατα του λογισµικού

• Αναγνωρίζει και ερµηνεύει το σύνολο των εντολών του χρήστη, µε αποτέλεσµα

να προκαλούνται αλλαγές στην ορατή κατάστασή του.

Η ακολουθία των εντολών που υποβάλλει ο χρήστης του λογισµικού καλείται πρό-

γραµµα (program) P. Ο χρήστης επιλέγει τις εντολές του προγράµµατος από το σύνο-

λο C των εντολών που αναγνωρίζει το σύστηµα και τις υποβάλλει ακολουθιακά στο

σύστηµα. Αυτό ερµηνεύει τις εντολές χρησιµοποιώντας µια ερµηνευτική συνάρτη-

ση Ι, µε συνέπεια να παρατηρείται το αποτέλεσµα Ε. Το απλό αυτό µοντέλο καλεί-

ται ΡΙΕ (Dix, 1985).

2 0 39 . 2 T À ¶ π ∫ ∏ ¶ ∂ ƒ π ° ƒ∞ º ∏ ¢ π ∞ § √ ° π ∫ ø ¡ ™ À ™ ∆ ∏ ª ∞∆ ø ¡

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 203

Page 205: pli42a

2 0 4 K E º A § A I O 9 : ∞ § § ∞ ª √ ¡ ∆ ∂ § ∞ ∆ À ¶ π ∫ ø ¡ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ø ¡

9.2.1 ∞Ó··Ú¿ÛÙ·ÛË ÙÔ˘ ‰È·ÏfiÁÔ˘ ¯Ú‹ÛÙË–Û˘ÛÙ‹Ì·ÙÔ˜

Όπως έχουµε ήδη αναφέρει, ο χρήστης υποβάλλει µια µια τις εντολές προς το σύστη-

µα, το οποίο τελικά ερµηνεύει το πρόγραµµα που σχηµατίζεται. Χρησιµοποιούµε τη

συνάρτηση \ για να σχηµατίσουµε το πρόγραµµα Ρ¢ από το πρόγραµµα Ρ και την

εντολή c Œ C (P¢ = P \ c):

\: Ρ ¥ C Æ P, και αφού µια εντολή είναι ένα πρόγραµµα µε µήκος 1,

\: P ¥ P Æ P

Για λόγους πληρότητας της αναπαράστασης, το σύµβολο ∆ χρησιµοποιείται για να

περιγράψει την κατάσταση κατά την οποία ο χρήστης δεν έχει υποβάλει καµία εντο-

λή (παρόλο που ένα σύστηµα δε χρειάζεται να υλοποιεί µια τέτοια εντολή!).

¶·Ú¿‰ÂÈÁÌ· 9.6[2]

Ας θεωρήσουµε µια αριθµοµηχανή τσέπης ικανή να εκτελέσει τις τέσσερις βασικές

πράξεις σε ακέραιους αριθµούς µόνο. Η αριθµοµηχανή αυτή αποτελεί ένα πολύ απλό

διαλογικό σύστηµα, το οποίο µπορεί να ανάβει, να σβήνει και να καθαρίζει την

οθόνη του. Το σύνολο εντολών του είναι:

C = ON, OFF, AC, +, –, *, /, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Η αριθµοµηχανή διαθέτει οθόνη 5 ψηφίων και τη δυνατότητα να εµφανίζει το σύµ-

βολο R, όταν οι υπολογιζόµενοι αριθµοί είναι πολύ µεγάλοι. Ο χώρος αποτελεσµά-

των ορίζεται από το σύνολο

Ε = – 999999 … 99999, R, ∆

Θυµηθείτε ότι η αριθµοµηχανή αναπαριστά µόνο ακέραιους, ενώ το σύµβολο ∆ ανα-

παριστά την κατάσταση της οθόνης, όταν αυτή είναι κλειστή.

Ας περιγράψουµε τυπικά µερικά προγράµµατα που εκτελεί αυτή η αριθµοµηχανή:

• Ι(∆) = ∆: O χρήστης πατάει τα πλήκτρα της αριθµοµηχανής ενώ αυτή είναι κλειστή.

• Ι(ΟΝ) = 0: Mόλις ανοίξει η αριθµοµηχανή, εµφανίζει τον αριθµό 0.

• Ι(ΟΝ 1) = 1: Eάν αµέσως µετά το άνοιγµα ο χρήστης πατήσει τον αριθµό 1, αυτός

εµφανίζεται στην οθόνη.

[2] Το παράδειγµα αυτό και τα υπόλοιπα που περιέχονται σε αυτή την ενότητα είναι βασισµένα στο

(Dix, 1985)

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 204

Page 206: pli42a

• Ι(ΟΝ 1 +) = 1: Eάν αµέσως µετά πατηθεί το πλήκτρο +, κανένα ορατό αποτέλε-

σµα δεν παρατηρείται.

• Ι(ΟΝ 1 + 2) = 2: Eάν αµέσως µετά πατηθεί ο αριθµός 2, αυτός εµφανίζεται στην

οθόνη.

• Ι(ΟΝ 1 + 2 =) = 3: Πατώντας = προκαλούµε την εµφάνιση του αποτελέσµατος

της πράξης.

• Ι(ΟΝ 1 1 1 1 1 1) = R: Όταν πατηθεί το ψηφίο 1 περισσότερες από πέντε φορές,

η αριθµοµηχανή εµφανίζει µήνυµα λάθους.

Μπορούµε έπ’ άπειρον να περιγράφουµε διάλογους αυτής της µορφής. Η χρησιµό-

τητα του µοντέλου θα µεγαλώσει, εάν καταφέρουµε να περιγράψουµε και µερικούς

γενικότερους κανόνες λειτουργίας της αριθµοµηχανής, όπως:

• I(… OFF) = ∆: Εάν η τελευταία εντολή είναι η OFF, τότε η οθόνη του κλείνει.

• I(… OFF p) = ∆: Γενικεύοντας τον παραπάνω κανόνα, µπορούµε να ισχυριστούµε

ότι η οθόνη σβήνει µόλις δοθεί η εντολή OFF και παραµένει σβηστή για οποιο-

δήποτε πρόγραµµα p δοθεί στη συνέχεια, µε την προϋπόθεση ότι ΟΝ œ p.

• I(p ON) = I(q AC): Oι εντολές ON και AC έχουν το ίδιο αποτέλεσµα (θυµηθείτε

ότι Ι(ΟΝ) = 0).

• Ι(p d1 d2) = 10 ¥ I(p d1) + d2, όπου d1 και d2 ψηφία: Eάν ο χρήστης πατήσει δύο

ψηφία στη σειρά, τότε η αξία του πρώτου πολλαπλασιάζεται επί 10 και προστί-

θεται σε αυτό η αξία του δεύτερου.

Τέλος, µε το µοντέλο ΡΙΕ, µπορούµε να ορίσουµε και αφαιρετικές συναρτήσεις ερµη-

νείας των προγραµµάτων χρήστη, ώστε να µελετήσουµε ορισµένους µόνο τρόπους

λειτουργίας του διαλογικού συστήµατος. Για παράδειγµα:

• ION(p) = I(ON p): H συνάρτηση ION λειτουργεί ακριβώς όπως η Ι, µε τη διαφορά

ότι υποθέτουµε ότι η αριθµοµηχανή είναι ανοικτή. Τότε, ισχύει ακόµα CON = C –

OFF και EON = E – ∆

9.2.2 π‰ÈfiÙËÙ˜ ‰È·ÏÔÁÈÎÒÓ Û˘ÛÙËÌ¿ÙˆÓ

Στην ενότητα αυτή θα δείξουµε πώς µπορούµε να περιγράψουµε τυπικά µε το µοντέ-

λο ΡΙΕ ορισµένες απλές ιδιότητες διαλογικών συστηµάτων.

Επανεκκίνηση

Τα διαλογικά συστήµατα που υποστηρίζουν τη δυνατότητα επανεκκίνησης

2 0 59 . 2 T À ¶ π ∫ ∏ ¶ ∂ ƒ π ° ƒ∞ º ∏ ¢ π ∞ § √ ° π ∫ ø ¡ ™ À ™ ∆ ∏ ª ∞∆ ø ¡

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 205

Page 207: pli42a

2 0 6 K E º A § A I O 9 : ∞ § § ∞ ª √ ¡ ∆ ∂ § ∞ ∆ À ¶ π ∫ ø ¡ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ø ¡

(restartability) έχουν εντολές, έστω q, µε τις οποίες επανέρχονται στην αρχική τους

κατάσταση. Οι εντολές αυτές µπορούν να εφαρµοστούν σε οποιαδήποτε κατάστα-

ση του συστήµατος (δηλαδή, µετά από οποιοδήποτε πρόγραµµα p) και είτε είναι δια-

φορετικές, ανάλογα µε την τρέχουσα κατάσταση

Restartable " p $q: I(p \ q) = I(∆)

Eίτε µπορεί να είναι η ίδια ακολουθία εντολών για όλες τις καταστάσεις:

Uniform – restartable $q " p: I(p \ q) = I(∆)

Ισοδυναµία εντολών

Έως τώρα έχουµε χρησιµοποιήσει το συµβολισµό Ι(p) = I(q) για να δείξουµε ότι τα

δύο προγράµµατα p και q οδηγούν το σύστηµα στην ίδια κατάσταση, δηλαδή οι ακο-

λουθίες εντολών p και q είναι ισοδύναµες (equivalent).

Σε ένα διαλογικό σύστηµα, όµως, δεν έχει σηµασία µόνο η κατάσταση στην οποία

βρίσκεται, αλλά και ο τρόπος λειτουργίας του (mode of operation). Για παράδειγ-

µα, σκεφτείτε ότι, αφού πληκτρολογήσετε µια λέξη σε ένα επεξεργαστή κειµένου,

µπορείτε στη συνέχεια να πατήσετε το πλήκτρο Ins, χωρίς να αλλάξει τίποτε στην

παρατηρήσιµη κατάσταση της οθόνης. Όµως, το πρόγραµµα άλλαξε τρόπο λει-

τουργίας, από overwrite σε insert. Η (έως τώρα αόρατη) αλλαγή στον τρόπο λει-

τουργίας θα φανεί µόλις πατήσετε τον επόµενο χαρακτήρα.

Χρειαζόµαστε λοιπόν έναν ισχυρότερο τύπο ισοδυναµίας δύο προγραµµάτων, ~

–ισοδυναµία, ο οποίος ορίζει ότι τα προγράµµατα p και q αφήνουν το σύστηµα στην

ίδια κατάσταση και στον ίδιο τρόπο λειτουργίας:

p ~ q "r ΠP: I(p \ r) = I(q \ r)

Επειδή στην περίπτωση " r περιλαµβάνεται και η περίπτωση r = ∆, ισχύει p ~ q fiΙ(p) = I(q).

Η ~ –ισοδυναµία αφορά σε ακολουθίες εντολών p και q που περιλαµβάνουν όλες τις

εντολές που έδωσε ο χρήστης από την εκκίνηση της διαλογικής εφαρµογής. Μπο-

ρούµε να ορίσουµε και έναν ακόµη ισχυρότερο τύπο ισοδυναµίας, ª –ισοδυναµία,

ο οποίος είναι ανεξάρτητος της αρχικής κατάστασης

p Šq "s ΠP: s \ p ~ s \ q

"r, s ΠP: I(s \ p \ r) = I(s \ q \ r)

Παρατήρηση

Ο χρήστης συµπεραίνει την κατάσταση και τον τρόπο λειτουργίας µιας διαλογικής

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 206

Page 208: pli42a

εφαρµογής από τα αποτελέσµατα που παρατηρεί στην οθόνη. Συνεπώς, εάν δύο προ-

γράµµατα p και q φέρουν το σύστηµα στην ίδια παρατηρήσιµη κατάσταση και τρόπο

λειτουργίας, ο χρήστης δεν µπορεί να συµπεράνει τίποτα για την εσωτερική κατά-

σταση του συστήµατος. Η πληροφορία αυτή, όµως, µπορεί να έχει καθοριστική

σηµασία για την επόµενη εντολή που πρέπει να δώσει.

Θεωρήστε, για παράδειγµα, την οθόνη µιας διαλογικής εφαρµογής, στην οποία έχει

ενεργοποιηθεί το πρόγραµµα screen saver. Ο χρήστης δεν µπορεί µε κανένα τρόπο

να γνωρίζει την κατάσταση της διαλογικής εφαρµογής χωρίς να πατήσει ένα πλή-

κτρο. Η ενέργειά του αυτή, όµως, µπορεί να έχει διαφορετικό αποτέλεσµα, ανάλο-

γα µε την εσωτερική κατάσταση της εφαρµογής.

Ισχυριζόµαστε ότι το παρατηρήσιµο αποτέλεσµα e εντολών, όπως η ενεργοποίηση

του screen saver, είναι ασαφές (ambiguous):

Ambiguous(e) $p, q ΠP: I(p) = e = I(q) ٠p L q

Εάν δεν υπάρχει ασαφές αποτέλεσµα στη συµπεριφορά ενός διαλογικού συστήµα-

τος, τότε δύο αποτελέσµατα που φαίνονται ίδια αναπαριστούν την ίδια εσωτερική

κατάσταση, την οποία ο χρήστης µπορεί να συµπεράνει από αυτά που παρατηρεί

στην οθόνη. Η ιδιότητα αυτή αποτελεί την τυπική έκφραση της πολύ γνωστής ιδιό-

τητας WYSIWYG (What You See Is What You Get) των διαλογικών συστηµάτων.

Ένα µοντέλο µε αυτή την ιδιότητα καλείται µονότονο (monotone):

Monotone " p, q ΠP: I(p) = I(q) fi p ~ q

Πληρότητα

Η πληρότητα (completeness) ορίζει ότι ο χρήστης µπορεί µε κάποια ακολουθία εντο-

λών να προκαλέσει όλα τα δυνατά αποτελέσµατα στη συµπεριφορά του διαλογικού

συστήµατος:

Complete " e ΠE: $p ΠP: e = I(p)

Η ιδιότητα αυτή ορίζει ότι σε ένα διαλογικό σύστηµα που την κατέχει, ο χρήστης

µπορεί να φτάσει σε οποιαδήποτε κατάσταση. Ακόµη ισχυρότερη είναι η εφικτό-

τητα (reachability), η οποία ορίζει ότι ο χρήστης µπορεί να φτάσει σε οποιαδήποτε

κατάσταση από οποιαδήποτε κατάσταση:

Reachable "e ΠE: "p ΠP: $ r ΠP: I(p \ r) = e

Εάν το σύστηµα είναι complete, τότε

Reachable "p, q ΠP: $ r ΠP: I(p \ r) = I(q)

2 0 79 . 2 T À ¶ π ∫ ∏ ¶ ∂ ƒ π ° ƒ∞ º ∏ ¢ π ∞ § √ ° π ∫ ø ¡ ™ À ™ ∆ ∏ ª ∞∆ ø ¡

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 207

Page 209: pli42a

2 0 8 K E º A § A I O 9 : ∞ § § ∞ ª √ ¡ ∆ ∂ § ∞ ∆ À ¶ π ∫ ø ¡ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ø ¡

Εάν το σύστηµα δεν είναι monotone, δεν αρκεί να ορίσουµε τη reachability σε σχέση

µε το παρατηρήσιµο αποτέλεσµα e, αλλά πρέπει να συµπεριλάβουµε και την εσω-

τερική κατάσταση του συστήµατος:

Mega Рreachable "p, q ΠP: $ r ΠP: p \ r ~ q

Η ιδιότητα αυτή περιγράφεται ως εξής: σε οποιαδήποτε κατάσταση και αν βρίσκε-

ται η διαλογική εφαρµογή, στην οποία έφτασε ερµηνεύοντας ένα πρόγραµµα p,

υπάρχει µια ακολουθία εντολών r, την οποία µπορεί να υποβάλλει ο χρήστης, µετά

από την οποία, το σύστηµα θα συµπεριφέρεται σαν να βρίσκονταν από την αρχή

στην ισοδύναµη κατάσταση q. Η διαφορά ανάµεσα στη reachability και τη mega –

reachability είναι ότι η µεν πρώτη περιγράφει πως ο χρήστης µπορεί να επιτύχει ένα

αποτέλεσµα e, ενώ η δεύτερη περιγράφει πως ο χρήστης µπορεί να επιτύχει το e και

να προσδιορίσει την µετέπειτα συµπεριφορά του συστήµατος. Ένα σύστηµα που

είναι monotone και reachable, είναι mega – reachable.

9.2.3 π‰ÈfiÙËÙ˜ ·Ú·ı˘ÚÈÎÒÓ ÂÊ·ÚÌÔÁÒÓ

Ο διαχειριστής µιας παραθυρικής εφαρµογής επιτρέπει στο χρήστη να συµµετέχει

ταυτόχρονα σε πολλούς διάλογους, καθένας από τους οποίους διεξάγεται σε διαφο-

ρετική περιοχή της οθόνης, η οποία καλείται παράθυρο (window). Μπορούµε να

αναπαραστήσουµε το διαχειριστή µιας παραθυρικής εφαρµογής µε ένα ΡΙΕ, το οποίο

ελέγχει ένα σύνολο από άλλα ΡΙΕ, καθένα από τα οποία αναπαριστά το διάλογο που

διεξάγεται σε καθένα από τα παράθυρα. Τότε, το διαπροσωπείο χρήστη – µηχανής

µπορεί να θεωρηθεί ως η σύνθεση του ΡΙΕwm του διαχειριστή και του ΡΙΕi του κάθε

παράθυρου (i Œ 1 … n για n παράθυρα).

Για λόγους απλότητας, ας υποθέσουµε ότι όλα τα ΡΙΕi αναγνωρίζουν ένα κοινό σύνο-

λο εντολών C (C = » Ci). Τότε, ορίζουµε:

• Το σύνολο εντολών του διαχειριστή Cwm = C » select(i). Ο διαχειριστής ουσια-

στικά υποστηρίζει µια εντολή επιλογής ενός από τα παράθυρα. Οποιαδήποτε άλλη

εντολή από το σύνολο C διαδίδεται στο επιλεγµένο παράθυρο.

• Το χώρο αποτελεσµάτων Ewm = E1 ¥ E2 ¥ … ¥ En (το οποίο µπορεί να γραφεί πιο

συνοπτικά ως Ewm = En, εάν ταυτίζονται µεταξύ τους οι χώροι αποτελεσµάτων των

επιµέρους παραθύρων). Θεωρούµε ότι δεν υπάρχει κάποιο αποτέλεσµα που να

οφείλεται στον ίδιο το διαχειριστή.

• Τη συνάρτηση ερµηνείας Iwm ως τη σύνθεση δύο άλλων συναρτήσεων: της Ι¢ που

ερµηνεύει την εντολή select(i) και της Ι¢¢, που ερµηνεύει τις υπόλοιπες εντολές,

καλώντας κάθε φορά την Ιi που αντιστοιχεί στο ΡΙΕi.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 208

Page 210: pli42a

9.3 Anna

Η Anna (Annotaded Ada) χρησιµοποιείται για την τυπική προδιαγραφή προγραµ-

µάτων που είναι γραµµένα στην αντικειµενοστραφή γλώσσα Ada. Καθώς η γλώσ-

σα αυτή χρησιµοποιείται όλο και περισσότερο για την προδιαγραφή αντικειµενο-

στραφών συστηµάτων, θεωρούµε χρήσιµο να παρουσιάσουµε σύντοµα τον τρόπο

χρήσης της. Οι εντολές της Anna αποτελούν επέκταση των εντολών της Ada και

συνήθως εµφανίζονται σαν σχόλια µέσα στον κώδικα, έτσι ώστε ένας µεταφραστής

της Ada να µην τις απορρίπτει. Τέτοιες εντολές αρχίζουν µε το σύµβολο --|.

Οι εντολές της Anna περιέχουν:

• λογικές εκφράσεις, στις οποίες περιλαµβάνονται ο υπαρξιακός και ο καθολικός

τελεστής,

• τους έξι σχεσιακούς τελεστές,

• τους τελεστές in, not in, isin, not isin που εφαρµόζονται σε σύνολα,

• τη δοµή if.. then.. else (το else τµήµα πρέπει να εµφανίζεται υποχρεωτικά),

• τους τελεστές in (περιγράφει την αρχική κατάσταση µιας µεταβλητής) και out

(περιγράφει την τελική της κατάσταση – µπορεί να εµφανίζεται µόνο στην αρχή

µιας εντολής Anna),

• εικονικό κώδικα Ada, δηλαδή εντολές Ada που χρησιµοποιούνται ως προδιαγρα-

φές. Οι εντολές αυτές αρχίζουν µε το σύµβολο:--

9.3.1 ∂ÂÍËÁ‹ÛÂȘ

Η προδιαγραφή ενός προγράµµατος Ada αποτελείται από δύο τµήµατα Anna:

• Την περιγραφή της σφαιρικής συµπεριφοράς του προγράµµατος,

• Την τοπική επεξήγηση (annotation) τµηµάτων του. Τα τµήµατα ενός προγράµµα-

τος Ada είναι αντικείµενα, τύποι, εντολές, υπο – προγράµµατα, πακέτα, δοµή προ-

γράµµατος, εξαιρέσεις και γενικευµένες ενότητες.

¶·Ú¿‰ÂÈÁÌ· 9.7

Επεξήγηση αντικειµένου

Η τιµή της Χ είναι άρτιος αριθµός:

X: Integer;

--| X mod 2 = 0;

2 0 99 . 3 A N N A

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 209

Page 211: pli42a

2 1 0 K E º A § A I O 9 : ∞ § § ∞ ª √ ¡ ∆ ∂ § ∞ ∆ À ¶ π ∫ ø ¡ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ø ¡

Η επεξήγηση δηλωτικού αντικειµένου είναι µια λογική έκφραση που τοποθετείται

σε µια λίστα δηλώσεων. Η εµβέλεια της επεξήγησης είναι ίδια µε την εµβέλεια που

θα είχε µια δήλωση στο ίδιο σηµείο (συνήθως η δοµηµένη εντολή µετά τη λογική

έκφραση):

Declare A: array (1.. 10) of Integer;

--| forall J: A’range => A(J) < F(J);

begin

...

end;

¶·Ú¿‰ÂÈÁÌ· 9.8

Επεξήγηση τύπου

Περιγράφει το σύνολο τιµών που µπορεί να έχουν τα αντικείµενα ενός τύπου.

Κάθε αντικείµενο του τύπου Even πρέπει να είναι άρτιος:

Subtype Even is Integer;

--| where X: Even => X mod 2 = 0;

Κάθε αντικείµενο του τύπου Letters πρέπει να ανήκει στο Αγγλικό αλφάβητο:

Subtype Letters is Character;

--| where S: Letters => S isin Character range ‘A’.. ‘Z’ or

--| S isin Character range ‘a’.. ‘z’;

¶·Ú¿‰ÂÈÁÌ· 9.9

Επεξήγηση εντολής

Περιορίζει τη συµπεριφορά απλών ή σύνθετων εντολών. Η εµβέλεια της επεξήγη-

σης µιας σύνθετης εντολής είναι η σύνθετη εντολή που την ακολουθεί (η επεξήγη-

ση πρέπει να παραµένει αναλλοίωτη σε όλη την έκταση της σύνθετης εντολής).

Η τιµή της Χ µετά την εκτέλεση της εντολής πρέπει να είναι µεγαλύτερη από την

αρχική της τιµή:

X:= X + 1;

--| X > in X;

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 210

Page 212: pli42a

Αναζήτηση:

--| with in Low <= Low and High <= in High,

--| Low <= Mid + 1 and Mid <= High,

--| Ordered(A(in Low.. in High)),

--| In – Interval(X, A(in Low.. in High)) fiIn – Interval(X, A(Low.. High));

while Low < High loop

Mid:= (Low + High) / 2;

If X > A(Mid) then

Low:= Mid + 1;

Else

High:= Mid;

End – if;

End loop;

¶·Ú¿‰ÂÈÁÌ· 9.10

Επεξήγηση υπο–προγράµµατος

Περιορίζει τις παραµέτρους και τα αποτελέσµατα των συναρτήσεων. Οι επεξηγή-

σεις in προδιαγράφουν τις τιµές των παραµέτρων in και in out, όταν συµβεί η κλήση

της συνάρτησης. Οι επεξηγήσεις out προδιαγράφουν τις τιµές των παραµέτρων out

και in out, όταν η εκτέλεση της συνάρτησης τερµατίσει κανονικά. Οι επεξηγήσεις

result προδιαγράφουν τις τιµές που επιστρέφει η συνάρτηση.

Η συνάρτηση Double πρέπει να επιστρέφει έναν άρτιο:

Function Double(X: Integer) return Integer

--| where return Y: Integer => Even(Y);

Ύψωση στο τετράγωνο:

Function Square(N: Integer) return Integer;

--| where return N*N;

Υπολογισµός τετραγωνικής ρίζας:

2 1 19 . 3 A N N A

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 211

Page 213: pli42a

2 1 2 K E º A § A I O 9 : ∞ § § ∞ ª √ ¡ ∆ ∂ § ∞ ∆ À ¶ π ∫ ø ¡ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ø ¡

Function Square – Root(N: Natural) return Natural;

--| where N >= 0,

--| return S: Natural => S ** 2 <= N < (S + 1) ** 2;

Χειρισµός τραπεζικού λογαριασµού (ο τελεστής “/=” σηµαίνει «όχι ίσο µε»):

Procedure Transfer(Amount: Positive; Out – Acct: in out

Positive; In – Acct: in out Positive);

--| where in (Amount <= Balance(Out – Acct),

--| out (Balance(Out – Acct) = in Balance(Out – Acct) –

Amount),

--| out (Balance(In – Acct) = in Balance(In – Acct) +

Amount),

--| out (forall A: Positive => A /= Out – Act and A /=

In – Acct – >

--| Balance(A) = in Balance(A);

¶·Ú¿‰ÂÈÁÌ· 9.11

Επεξήγηση πακέτου (λέγεται και αξίωµα)

Περιορίζει τη συµπεριφορά ενός πακέτου.

Πακέτο που υλοποιεί µια δοµή στοίβας:

Package Integer – stack is

Type Stack is private;

Stack – error: exception;

Function Create return Stack

--| where return S: Stack => IsEmpty(S);

Function Push(S: Stack; I: Integer) return Stack

--| where return T: Stack => Top(T) = I, Pop(T) = S,

not IsEmpty(T);

Function Pop(S: Stack) return Stack

--| where IsEmpty(S) => raise Stack – Error;

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 212

Page 214: pli42a

Function Top(S: Stack) return Integer

--| where IsEmpty(S) => raise Stack – Error;

Function IsEmpty(S: Stack) return Boolean;

End Integer – Stack

Επεξήγηση δοµής προγράµµατος: µόνο η σφαιρική µεταβλητή Size µπορεί να χρη-

σιµοποιηθεί στο σώµα του πακέτου Queue

--| limited to Size;

package body Queue is

...

end Queue;

¶·Ú¿‰ÂÈÁÌ· 9.12

Επεξήγηση εξαίρεσης

Περιγράφει πότε ενεργοποιείται µια εξαίρεση και πώς αλλάζει η κατάσταση του προ-

γράµµατος, όταν αυτό συµβεί.

Η εξαίρεση NotFound ενεργοποιείται όταν ο πίνακας Α είναι κενός – όταν ενεργο-

ποιηθεί η NotFound, η κατάσταση του Α δεν πρέπει να αλλάξει:

Procedure Search(A: in out Array; Key: in Integer;

Position: out Integer);

--| where IsEmpty(A) => raise NotFound,

--| raise NotFound => out (A = in A);

¶·Ú¿‰ÂÈÁÌ· 9.13

Επεξήγηση γενικευµένων τµηµάτων

Περιορίζει τις παραµέτρους ενός γενικευµένου τµήµατος και κάθε ενεργοποίηση αυτού.

Generic Size: Integer;

--| Size > 0;

Pacakage Data2 is

Bound: Integer;

--| 0 < Bound < Size;

2 1 39 . 3 A N N A

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 213

Page 215: pli42a

2 1 4 K E º A § A I O 9 : ∞ § § ∞ ª √ ¡ ∆ ∂ § ∞ ∆ À ¶ π ∫ ø ¡ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ø ¡

End Data2;

9.3.2 ¶ÚԉȷÁÚ·Ê‹ ·Î¤ÙˆÓ

Στην Ada, τα πακέτα χρησιµοποιούνται για να περιγράψουν τη συµπεριφορά τµη-

µάτων ενός προγράµµατος. Η προδιαγραφή της συµπεριφοράς ενός πακέτου είναι

ανεξάρτητη από την επικείµενη υλοποίησή του (το σώµα του πακέτου). Ένα πακέ-

το µπορεί να επεξηγηθεί σε τέσσερα επίπεδα (τα τρία τελευταία είναι κρυµµένα από

το χρήστη):

• Ορατό επίπεδο: επεξήγηση των τύπων και λειτουργιών του πακέτου που βλέπει ο

χρήστης

• Επίπεδο δεδοµένων: επεξήγηση των τύπων και των αντικειµένων

• Επίπεδο υπο – προγραµµάτων: επεξήγηση υπο – προγραµµάτων στο σώµα του

πακέτου

• Επίπεδο εντολών: επεξήγηση εντολών στο σώµα του πακέτου

¶·Ú¿‰ÂÈÁÌ· 9.14

Η προδιαγραφή ενός πακέτου Ada ακολουθεί τέσσερα βήµατα:

1. Ορισµός της προδιαγραφής σε Ada

2. Πρόσθεση µη τυπικών σχολίων

3. Τυποποίηση των σχολίων σε Anna

4. Έλεγχος της γενικότητας και πληρότητας της προδιαγραφής

Για τον ορισµό της προδιαγραφής ενός πακέτου Ada θα ακολουθήσουµε τα εξής βήµατα:

1. Προσδιορισµός των τύπων και των λειτουργιών του πακέτου

2. Προσδιορισµός των κατασκευαστών (constructors), παρατηρητών (observers),

βασικών κατασκευαστών και βασικών παρατηρητών

3. Oρισµός των πραγµατικών τύπων και υπο – προγραµµάτων στο ορατό τµήµα

4. Oρισµός των µη πραγµατικών (εικονικών) τύπων και λειτουργιών

Θα δείξουµε την εφαρµογή της διαδικασίας αυτής στην προδιαγραφή του χειριστή

ενός πίνακα συµβόλων Table – Manager για δοµηµένες γλώσσες. Σας συστήνουµε

να επικεντρωθείτε στην κατανόηση της διαδικασίας και όχι του κώδικα. Στον δια-

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

(identifier), όταν αυτός δηλωθεί, και η ανεύρεσή του, εάν ήδη βρίσκεται σε χρήση.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 214

Page 216: pli42a

Στη δεύτερη περίπτωση θέλουµε ακόµη να γνωρίζουµε τη διαφορά της τρέχουσας

εµβέλειας και αυτής στην οποία έχει δηλωθεί ο προσδιοριστής. Προσθέτουµε και

µια εξαίρεση για τα πιθανά λάθη στο πακέτο:

Package Table – Manager is

Type Table is limited private;

Table – Error: exception;

Function Initialize return Table;

Function Begin – New – Scope(T: Table) return Table;

Function End – Scope(T: Table) return Table;

Function Enter(T: Table; id: String) return Table;

Function Find(T: Table; S: String) return Integer;

Function Size(T: Table) return Integer;

Function Current – Scope(T: Table) return Integer;

End package;

Στη συνέχεια προσθέτουµε µη τυπικά σχόλια σε κάθε υπο – πρόγραµµα:

Package Table – Manager is

Type Table is limited private;

Table – Error: exception;

Function Initialize return Table;

-- ∞Ú¯ÈÎÔÔÈ› ¤Ó·Ó ›Ó·Î· Û˘Ì‚fiψÓ.

Function Begin – New – Scope(T: Table) return Table;

-- •ÂÎÈÓ¿ ÌÈ· Ó¤· ÂÌ‚¤ÏÂÈ·.

Function End – Scope(T: Table) return Table;

-- ∆ÂÚÌ·Ù›˙ÂÈ ÌÈ· ÂÌ‚¤ÏÂÈ· Î·È ‰È·ÁÚ¿ÊÂÈ fiÏÔ˘˜ ÙÔ˘˜

ÚÔÛ‰ÈÔÚÈÛÙ¤˜ Ù˘.

Function Enter(T: Table; id: String) return Table;

-- ¶ÚÔÛı¤ÙÂÈ ¤Ó·Ó ÚÔÛ‰ÈÔÚÈÛÙ‹ (ˆ˜ ·ÎÔÏÔ˘ı›· ¯·Ú·ÎÙ‹-

ÚˆÓ) ÛÙËÓ

2 1 59 . 3 A N N A

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 215

Page 217: pli42a

2 1 6 K E º A § A I O 9 : ∞ § § ∞ ª √ ¡ ∆ ∂ § ∞ ∆ À ¶ π ∫ ø ¡ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ø ¡

ÙÚ¤¯Ô˘Û· ÂÌ‚¤ÏÂÈ·.

Function Find(T: Table; S: String) return Integer;

-- µÚ›ÛÎÂÈ ÙËÓ ·ÎÔÏÔ˘ı›· ¯·Ú·ÎÙ‹ÚˆÓ ÛÙÔÓ ›Ó·Î·.

Function Size(T: Table) return Integer;

-- ∂ÈÛÙÚ¤ÊÂÈ ÙÔ Ï‹ıÔ˜ ÙˆÓ ÚÔÛ‰ÈÔÚÈÛÙÒÓ Ô˘ ÂÚȤ¯ÂÈ

Ô ›Ó·Î·˜.

Function Current – Scope(T: Table) return Integer;

-- ∂ÈÛÙÚ¤ÊÂÈ ÙËÓ ÙÚ¤¯Ô˘Û· ÂÌ‚¤ÏÂÈ·.

End package;

Τώρα προσθέτουµε τις επεξηγήσεις των υπο – προγραµµάτων (χρησιµοποιούµε την

βοηθητική εικονική συνάρτηση In – Table):

Package Table – Manager is

Type Table is limited private;

Table – Error: exception;

Function Initialize return Table;

--∞Ú¯ÈÎÔÔÈ› ¤Ó· ›Ó·Î· Û˘Ì‚fiψÓ.

--| return T: Table => Size(T) = 0,

--| Current – Scope(T) = 0,

--| forall S: String; Scope:

Integer => not(In – Table(T, S, Scope));

--: function In – Table(T: Table; S: String; Scope:

Integer) return Boolean;

--EÈÛÙÚ¤ÊÂÈ True, ·Ó Î·È ÌfiÓÔ ·Ó Ë ·ÎÔÏÔ˘ı›·

¯·Ú·ÎÙ‹ÚˆÓ S ÔÚ›˙ÂÙ·È.

--M¤Û· ÛÙËÓ ÂÌ‚¤ÏÂÈ· Scope ÙÔ˘ ›Ó·Î· ∆.

Function Begin – New – Scope(T: Table) return Table;

--•ÂÎÈÓ¿ ÌÈ· Ó¤· ÂÌ‚¤ÏÂÈ·.

--| where return S: Table => Size(S) = Size(T),

--| Current – Scope(S) = Current – Scope(T) + 1,

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 216

Page 218: pli42a

--| forall id: String; Scope: Integer =>

--| In – Table(S, id, Scope) = In – Table(T, id, Scope)

Function End – Scope(T: Table) return Table;

--Τερµατίζει µια εµβέλεια και διαγράφει όλους τους προσδιοριστές της.

--| where return S: Table => Current – Scope(S) =

Current – Scope(T) – 1,

--| forall id: String; Scope: Integer =>

--| if Scope < Current – Scope(T) then

--| In – Table(S, id, Scope) = In – Table(T, id, Scope)

--| else not In – Table(S, id, Scope)

--| end if,

--| (Current – Scope(T) = 0) => raise Table – Error;

Function Enter(T: Table; id: String) return Table;

--Προσθέτει έναν προσδιοριστή (ως ακολουθία χαρακτήρων) στη

τρέχουσα εµβέλεια.

--| where return Scope: Integer => In – Table(T, S,

Scope),

--| (forall Scope2: Integer => In – Table(T, S, Scope2) –

> (Scope2 <= Scope)),

--| (forall Scope3: Integer => not In – Table(T, S, Scope3)))

=>

--| raise Table – Error;

Function Find(T: Table; S: String) return Integer;

--Βρίσκει την ακολουθία χαρακτήρων στον πίνακα.

Function Size(T: Table) return Integer;

--Επιστρέφει το πλήθος των προσδιοριστών που περιέχει ο πίνακας.

Function Current – Scope(T: Table) return Integer;

--Επιστρέφει την τρέχουσα εµβέλεια.

End package;

2 1 79 . 3 A N N A

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 217

Page 219: pli42a

2 1 8 K E º A § A I O 9 : ∞ § § ∞ ª √ ¡ ∆ ∂ § ∞ ∆ À ¶ π ∫ ø ¡ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ø ¡

Στη συνέχεια πρέπει να εξετάσουµε τις προδιαγραφές για πληρότητα και συνέπεια

(το αποτέλεσµα εξαρτάται από τη στοχευόµενη χρήση του πακέτου).

Ένα πακέτο µπορεί να διατηρεί τοπικά δεδοµένα στο σώµα του, τα οποία περιγρά-

φουν την κατάστασή του. Στην Anna, ο τύπος της κατάστασης ενός πακέτου Ρ συµ-

βολίζεται µε το κατηγόρηµα P’type. Τα υπο προγράµµατα ενός πακέτου είναι λει-

τουργίες του τύπου P’type. Αν το S είναι τύπου P’type, τότε ο συµβολισµός S.F

δηλώνει την κλήση του υπο – προγράµµατος F στην κατάσταση S. Η αρχική και η

τρέχουσα κατάσταση ενός πακέτου Ρ δηλώνονται αντίστοιχα ως P’initial και P’state

(η τρέχουσα κατάσταση µπορεί να δηλώνεται απλά ως P). Η κατάσταση ενός πακέ-

του αλλάζει κατά την κλήση ενός υπο προγράµµατος. Η νέα κατάσταση που προ-

κύπτει δηλώνεται µε το κατηγόρηµα new – state.

¶·Ú¿‰ÂÈÁÌ· 9.15

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

τοπικά δεδοµένα και συναρτήσεις αλλαγής της κατάστασης ενός πίνακα (εισαγωγής

και ανάκλησης ενός στοιχείου):

Package Table – Manager is

Subtype Data is String(1.. 10);

Type Priority is range 0.. 255;

Type Item is record

D: Data;

P: Priority;

End record;

--: function Full return Boolean;

--: function Member(X: Item) return Boolean;

procedure Insert(New – Item: in Item);

--| where in Table – Manager.Full =

> raise Table – Full;

--| raise Table – Full => Table – Manager =

in Table – Manager,

--| in New – Item.Priority’defined,

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 218

Page 220: pli42a

--| out Table – Manager.Member(New – Item),

--| out (in Table – Manager.Member(New – Item) – >

--| Table – Manager = in Table – Manager);

procedure Retrieve(First – Item: out Item);

--| where out (in Table – Manager.Member(First – Item)),

--| out (not Table – Manager.Member(First – Item)),

--| out (forall X: Item => Table – Manager.Member(X) – >

--| X.Priority >= First – Item.Priority);

end Table – Manager;

Μετά το τέλος της προδιαγραφής, ακολουθεί η υλοποίηση του πακέτου, η οποία

περιλαµβάνει τα βήµατα:

1. Eπιλογή της δοµής δεδοµένων που θα υλοποιεί τους πίνακες

2. Mετάφραση των περιορισµών που θέτουν οι προδιαγραφές

3. Προσδιορισµός των υπο – προγραµµάτων

4. Yλοποίηση των υπο – προγραµµάτων στο σώµα

2 1 99 . 3 A N N A

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 219

Page 221: pli42a

2 2 0 K E º A § A I O 9 : ∞ § § ∞ ª √ ¡ ∆ ∂ § ∞ ∆ À ¶ π ∫ ø ¡ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ø ¡

™‡ÓÔ„Ë

Στο κεφάλαιο αυτό, παρουσιάστηκαν τρεις λιγότερο διαδεδοµένες τυπικές τεχνικές,

οι οποίες έχουν περιορισµένη εφαρµογή σε ειδικού τύπου λογισµικά:

• Oι Επικοινωνούσες Ακολουθιακές ∆ιεργασίες, που εφαρµόζονται κυρίως στην προ-

διαγραφή ταυτόχρονων συστηµάτων.

• Tο µοντέλο ΡΙΕ, το οποίο είναι κατάλληλο για την προδιαγραφή διαλογικών συστη-

µάτων χρήστη – µηχανής

• O συµβολισµός Anna, ο οποίος χρησιµοποιείται για την προδιαγραφή αντικειµε-

νοστραφών προγραµµάτων γραµµένων σε Ada.

Με το κεφάλαιο αυτό κλείνει το σύνολο των τυπικών τεχνικών που παρουσιάζονται

στο βιβλίο. Στο επόµενο κεφάλαιο θα συζητήσουµε για την αξία των τυπικών τεχνι-

κών και τις προϋποθέσεις εφαρµογής τους.

µÈ‚ÏÈÔÁÚ·Ê›·

[1] J. Dix και C. Runciman, «Abstract models of interactive systems». Proceedings

of the British Society Conference on People and Computers (P. Johnson and S.

Cook, eds), pp13 – 22, Cambridge Univ. Press.

[2]C.A.R. Hoare,1985, «Communicating Sequential Processes».Prentice – Hall,

1985.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 220

Page 222: pli42a

N· Â›Ó·È Î·Ó›˜ Ù˘ÈÎfi˜ ‹ Ó· Ó· ÌËÓ Â›Ó·È;

™ÎÔfi˜

Ο σκοπός του κεφαλαίου είναι να σας οδηγήσει να προβληµατιστείτε για την πρα-

κτική αξία εφαρµογής των τυπικών προδιαγραφών στην ανάπτυξη λογισµικού.

¶ÚÔÛ‰ÔÎÒÌÂÓ· ·ÔÙÂϤÛÌ·Ù·

Όταν θα έχετε µελετήσει το τελευταίο αυτό κεφάλαιο, θα µπορείτε να:

• υιοθετήσετε θετική στάση απέναντι στην εφαρµογή τυπικών τεχνικών προδιαγρα-

φής λογισµικού,

• αναιρέσετε 14 από τους µύθους γύρω από την εφαρµογή τυπικών τεχνικών,

• αναφέρετε τουλάχιστον δύο αυτοµατοποιηµένα εργαλεία για καθεµία από τις περισ-

σότερο διαδεδοµένες τυπικές τεχνικές,

• αναφέρετε και εφαρµόσετε 10 εντολές σωστής πρακτικής εφαρµογής τυπικών τεχνικών.

∂ÈÛ·ÁˆÁÈΤ˜ ·Ú·ÙËÚ‹ÛÂȘ

Όπως έχουµε αναφέρει από το πρώτο κεφάλαιο του τόµου, υπάρχει µια ασάφεια γύρω

από την αξία και την ευκολία εφαρµογής τυπικών τεχνικών στην ανάπτυξη λογισµι-

κού. Αν και η διάδοση των τυπικών τεχνικών αυξήθηκε σηµαντικά τα τελευταία χρό-

νια, υπάρχουν ακόµη σηµεία και ορισµοί που πρέπει να διευκρινιστούν, εάν θέλου-

µε να αυξηθεί η χρησιµότητα της εφαρµογής των τυπικών τεχνικών. Για παράδειγ-

µα, η ΙΕΕΕ δίνει τους εξής δύο ορισµούς της έννοιας «τυπικές προδιαγραφές»:

• προδιαγραφές που γράφονται και εγκρίνονται σύµφωνα µε καθιερωµένα πρότυπα

• προδιαγραφές που γράφονται σε κάποιο τυπικό συµβολισµό και χρησιµοποιούνται

κυρίως για την απόδειξη της ορθότητας του λογισµικού

Αν και οι µηχανικοί λογισµικού έχουν υιοθετήσει το δεύτερο ορισµό, στη βιοµηχανία

είναι περισσότερο διαδεδοµένος ο πρώτος!

10∫ ∂ º ∞ § ∞ π √

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 221

Page 223: pli42a

2 2 2 K E º A § A I O 1 0 : N ∞ ∂ π ¡ ∞ π ∫ ∞ ¡ ∂ π ™ ∆ À ¶ π ∫ √ ™ ∏ ¡ ∞ ¡ ∞ ª ∏ ¡ ∂ π ¡ ∞ π ;

Όπως θα δείτε στη συνέχεια, δεν υπάρχει πειστική απάντηση υπέρ ή εναντίον της

χρήσης τυπικών προδιαγραφών. ∆ιάφοροι γνωστοί επιστήµονες και µηχανικοί πλη-

ροφορικής παίρνουν θετική ή αρνητική στάση, ανάλογα µε την εµπειρία τους. Παρό-

λο που οι περισσότεροι από αυτούς υιοθετούν θετική θέση, αυτό γίνεται πάντα υπό

τις προϋποθέσεις ότι η σηµερινή κατάσταση που επικρατεί όσον αφορά στην εκπαί-

δευση και τα διαθέσιµα εργαλεία υποστήριξης θα βελτιωθεί.

Στην ενότητα 10.1 αναφέρονται τα πλεονεκτήµατα και τα ενδεχόµενα µειονεκτή-

µατα που µπορεί να προκύψουν από την εφαρµογή τυπικών προδιαγραφών. Στην

ενότητα 10.2 περιγράφονται και αναιρούνται 14 διαδεδοµένοι µύθοι γύρω από την

αξία και την εφαρµογή των τυπικών τεχνικών. Τέλος, στην ενότητα 10.3 δίνονται 10

οδηγίες για την αποδοτική πρακτική εφαρµογή των τυπικών τεχνικών.

10.1 ¶ÏÂÔÓÂÎÙ‹Ì·Ù· Î·È ÌÂÈÔÓÂÎÙ‹Ì·Ù· ·fi ÙË ¯Ú‹ÛË Ù˘ÈÎÒÓ ÚԉȷÁÚ·ÊÒÓ

Στα πλεονεκτήµατα που προκύπτουν από τη χρήση τυπικών προδιαγραφών περι-

λαµβάνονται τα ακόλουθα:

1. Βελτίωση της κατανόησης των προδιαγραφών, που επιτυγχάνεται:

• επειδή οι τυπικές προδιαγραφές βοηθούν στην αποκρυσταλλοποίηση των αόρι-

στων ιδεών του πελάτη και στην ανακάλυψη και αποφυγή αντιθέσεων, ασαφειών

και ελλείψεων στις προδιαγραφές, µε αποτέλεσµα να βοηθούν στην καλύτερη

κατανόηση των απαιτήσεων του πελάτη,

• επειδή οι τυπικές προδιαγραφές παρέχουν µια ενοποιηµένη και συγκροτηµένη

θεώρηση των συντακτικών και σηµασιολογικών απόψεων των προδιαγραφών,

βοηθούν στην κατανόηση των απαιτήσεων,

¢Ú·ÛÙËÚÈfiÙËÙ· 10.1

Έχετε φτάσει πια στο τέλος του τόµου. Σας αξίζουν συγχαρητήρια για την υποµονή και

την επιµονή σας. Πριν προχωρήσετε στη µελέτη του τελευταίου κεφαλαίου, σας προ-

σκαλώ να αναρωτηθείτε γιατί ή πότε πρέπει ή δεν πρέπει κάποιος να εφαρµόζει τεχνι-

κές τυπικών προδιαγραφών. Για να βοηθηθείτε, προσπαθήστε να καταγράψετε τα πλε-

ονεκτήµατα και τα µειονεκτήµατα που έχει η χρήση τους (κατά τη γνώµη σας). Μπο-

ρείτε να ανατρέξετε στον ιστοχώρο www.comlab.ox.ac.uk, ο οποίος αποτελεί τη µεγα-

λύτερη δικτυακή αποθήκη υλικού αναφοράς για τις τυπικές τεχνικές προδιαγραφών.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 222

Page 224: pli42a

• ανάλογα µε τη γλώσσα τυπικών προδιαγραφών που χρησιµοποιείται, είναι δυνα-

τό να υλοποιηθούν προσοµοιώσεις του πρωτότυπου ενός συστήµατος, ώστε να

µελετηθεί η συµπεριφορά του.

2. Βοήθεια στην επαλήθευση των προδιαγραφών και των προγραµµάτων που παρά-

γονται από αυτές:

• επειδή οι τυπικές προδιαγραφές µπορούν να αναλυθούν µε τη χρήση µαθηµατι-

κών τελεστών, µαθηµατικές διαδικασίες απόδειξης µπορούν να χρησιµοποιηθούν

για τον έλεγχο και απόδειξη της εσωτερικής συνέπειας και της συντακτικής ορθό-

τητας των προδιαγραφών,

• επιπλέον, µπορεί να ελεγχθεί η πληρότητα των προδιαγραφών,

• ενώ οι ίδιες τυπικές διαδικασίες απόδειξης µπορεί να χρησιµοποιηθούν για την

επαλήθευση του βαθµού ικανοποίησης των αρχικών προδιαγραφών από ένα υλο-

ποιηµένο πρόγραµµα.

3. Βοήθεια στη µετάβαση από τις προδιαγραφές στην υλοποίησή τους µε γλώσσα

προγραµµατισµού:

• επειδή είναι πιο εύκολη και ασφαλής η µετάβαση από ένα τυπικό σύστηµα ανα-

παράστασης (τις τυπικές προδιαγραφές) σε ένα άλλο (το πρόγραµµα),

• ενώ µπορεί να αποδειχθεί τυπικά εάν η υλοποίηση ικανοποιεί τις τυπικές προδια-

γραφές,

• επειδή έχουν αναπτυχθεί εργαλεία για ταχεία πρωτοτυποποίηση µε την µετατρο-

πή τυπικών προδιαγραφών σε κώδικα (γεννήτριες κώδικα),

• ενώ οι τυπικές προδιαγραφές µπορούν να χρησιµοποιηθούν σαν οδηγοί για τη σχε-

δίαση των περιπτώσεων ελέγχου του προγράµµατος

Από την άλλη πλευρά, υπάρχουν αρκετοί λόγοι, για τους οποίους οι τυπικές προ-

διαγραφές δεν έχουν διαδοθεί αρκετά ανάµεσα στους µηχανικούς λογισµικού και

τους σχεδιαστές:

• Eνώ έχει δοθεί έµφαση στην ανάπτυξη τυπικών συµβολισµών και κανόνων, δεν

έχει γίνει αρκετή προσπάθεια παροχής υποστήριξης µε τη µορφή µεθοδολογιών

και εργαλείων, µε αποτέλεσµα ο µηχανικός λογισµικού να είναι αναγκασµένος να

ανακαλύψει µόνος του τον καταλληλότερο συµβολισµό και την καλύτερη στρα-

τηγική για το πρόβληµά του.

• H έλλειψη εργαλείων περιορίζει σηµαντικά και το µέγεθος των συστηµάτων που

µπορούν να υλοποιηθούν µε τυπικές προδιαγραφές.

2 2 31 0 . 1 ¶ § ∂ √ ¡ ∂ ∫ ∆ ∏ ª ∞∆∞ ∫ ∞ π ª ∂ π √ ¡ ∂ ∫ ∆ ∏ ª ∞∆∞ ∞ ¶ √ ∆ ∏ à ƒ ∏ ™ ∏ ∆ À ¶ π ∫ ø ¡ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ø ¡

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 223

Page 225: pli42a

2 2 4 K E º A § A I O 1 0 : N ∞ ∂ π ¡ ∞ π ∫ ∞ ¡ ∂ π ™ ∆ À ¶ π ∫ √ ™ ∏ ¡ ∞ ¡ ∞ ª ∏ ¡ ∂ π ¡ ∞ π ;

• Oι περισσότεροι µηχανικοί λογισµικού, αλλά και οι προγραµµατιστές, δεν είναι

εξοικειωµένοι µε διακριτά µαθηµατικά και συµβολική λογική, ώστε να κατανο-

ούν εύκολα το συµβολισµό και τη γραµµατική των τυπικών προδιαγραφών.

• Oι τυπικές προδιαγραφές είναι ακατάλληλες ως µέσο επικοινωνίας µε τους τελι-

κούς χρήστες, αφού αυτοί, ακόµη περισσότερο από τους µηχανικούς λογισµικού

και τους σχεδιαστές, αισθάνονται εντελώς άβολα προσπαθώντας να κατανοήσουν

τις προδιαγραφές ενός συστήµατος που έχουν εκφραστεί µε τυπική γλώσσα.

• Mελέτες έχουν δείξει ότι η εφαρµογή τυπικών προδιαγραφών κατά τις αρχικές

φάσεις σχεδίασης, όταν το πρόβληµα δεν έχει ακόµη εκφραστεί καλά, έχει αρνη-

τική επίδραση στην ποιότητα του αποτελέσµατος, αφού περιορίζει τη δυνατότη-

τα διερεύνησης εναλλακτικών τρόπων σχεδίασης.

10.2 ¢È·Ï‡ÔÓÙ·˜ ÙÔ˘˜ ̇ıÔ˘˜ Á‡Úˆ ·fi ÙȘ Ù˘ÈΤ˜ ÚԉȷÁڷʤ˜

Το 1990 και το 1995 δηµοσιεύθηκαν δύο σηµαντικά άρθρα (Hall, 1990 και Bowen,

1995b), στα οποία καταγράφονται και εξορκίζονται δεκατέσσερις µύθοι οι οποίοι

περιβάλλουν την εφαρµογή τεχνικών τυπικών προδιαγραφών. Συνοψίζουµε στη

συνέχεια τους µύθους αυτούς και τα επιχειρήµατα µε τα οποία καταρρίπτονται.

¢Ú·ÛÙËÚÈfiÙËÙ· 10.2

Καθώς θα διαβάζετε την εκφώνηση του καθενός από τους 14 µύθους, σηµειώστε

τη δική σας άποψη για την ισχύ του ή όχι και στη συνέχεια µελετήστε συγκριτικά

τη δική µας άποψη. Θυµηθείτε να συζητήσετε τις όποιες διαφωνίες σας µε τον

καθηγητή – σύµβουλο.

Μύθος 1. Οι τυπικές τεχνικές µπορούν να εγγυηθούν ότι το λογισµικό είναι τέλειο.

Η µόνη ασφαλής µέθοδος που µπορεί να αποδείξει οριστικά ότι ένα λογισµικό δεν

έχει λάθη είναι η δοκιµή όλων των δυνατών µονοπατιών εκτέλεσης µε κάθε δυνατό

συνδυασµό συνθηκών και δεδοµένων εισόδου και εξόδου. Αυτό είναι απλά ακατόρ-

θωτο για οποιοδήποτε χρήσιµο πρόγραµµα (σας παραπέµπω στον τόµο «Εγκυροποί-

ηση Λογισµικού» για περισσότερα). Οι τυπικές τεχνικές εφαρµόζονται για να περι-

γράψουν µε σαφήνεια τόσο τη λειτουργία του λογισµικού όσο και τα όρια του συνη-

θισµένου ελέγχου, όχι για να µηδενίσουν την ανάγκη για έλεγχο του λογισµικού.

Μύθος 2. Οι τυπικές τεχνικές εφαρµόζονται αποκλειστικά στην απόδειξη της ορθό-

τητας του προγράµµατος.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 224

Page 226: pli42a

Οι τυπικές τεχνικές εφαρµόζονται κυρίως, αλλά όχι αποκλειστικά στην απόδειξη της

ορθότητας ενός προγράµµατος. Χρησιµεύουν ακόµη και σαν εργαλεία προδιαγρα-

φών, επικοινωνίας, τεκµηρίωσης, συντήρησης κ.λπ.

Μύθος 3. Οι τυπικές προδιαγραφές είναι χρήσιµες µόνο για την περιγραφή κρίσι-

µων συστηµάτων.

Η πράξη έχει αποδείξει το αντίθετο, καθώς η αυξανόµενη εµπειρία και η εκπαίδευ-

ση των νέων µηχανικών λογισµικού στη χρήση τυπικών προδιαγραφών έχει οδηγή-

σει στην περιγραφή ενός ικανοποιητικού αριθµού όχι κρίσιµων εφαρµογών µε τυπι-

κές τεχνικές.

Μύθος 4. Η εφαρµογή των τυπικών τεχνικών απαιτεί εξειδικευµένα άτοµα µε ισχυ-

ρό µαθηµατικό υπόβαθρο.

Για τις περισσότερο διαδεδοµένες τεχνικές απαιτούνται βασικές µαθηµατικές γνώ-

σεις άλγεβρας, λογικής και συνόλων (συνοψίσθηκαν στο Kεφάλαιο 3 του τόµου).

Μύθος 5. Η χρήση τυπικών τεχνικών αυξάνει το κόστος ανάπτυξης του λογισµικού.

Στην πραγµατικότητα, αρκετά από τα έργα στα οποία χρησιµοποιήθηκαν τυπικές

τεχνικές, εκτελέσθηκαν χωρίς υπέρβαση προϋπολογισµού ή χρονοδιαγράµµατος.

Τελικά, οι τυπικές τεχνικές αποτελούν άλλο ένα σύνολο από εργαλεία, η χρήση του

οποίου σε κάποιο έργο ανάπτυξης λογισµικού πρέπει να συνεκτιµηθεί (όπως για

οποιοδήποτε εργαλείο, άλλωστε) µε διάφορους άλλους παράγοντες (π.χ. γνώσεις της

οµάδας ανάπτυξης, κόστος διόρθωσης λαθών και συντήρησης κ.λπ.).

Μύθος 6. Οι χρήστες δε δέχονται τη χρήση τυπικών τεχνικών.

Ο µύθος αυτός πραγµατικά ταλαιπώρησε τους µηχανικούς λογισµικού για πολλά

χρόνια, έως ότου η επιτυχηµένη συµµετοχή των χρηστών σε οµάδες σχεδίασης λογι-

σµικού µε τυπικές µεθόδους τον διέλυσε οριστικά.

Μύθος 7. Οι τυπικές µέθοδοι δεν εφαρµόζονται στην πράξη.

Ακόµη ένας µύθος που διαψεύσθηκε στην πράξη, καθώς οι τυπικές τεχνικές εφαρ-

µόσθηκαν µε επιτυχία σε πολλά έργα ανάπτυξης λογισµικού διαφόρων µεγεθών και

πολυπλοκότητας.

Μύθος 8. Η εφαρµογή τυπικών τεχνικών καθυστερεί τη διαδικασία ανάπτυξης.

Στην πραγµατικότητα, οι τυπικές τεχνικές έχουν χρησιµοποιηθεί τόσο σε έργα που

έπεσαν εντελώς έξω από τις προβλέψεις, όσο και σε έργα που ολοκληρώθηκαν πριν

το προβλεπόµενο τέλος! Φαίνεται λοιπόν ότι το πρόβληµα δε σχετίζεται µε τις τυπι-

κές τεχνικές αλλά µε την ικανότητα των διαχειριστών του έργου να σχεδιάσουν ένα

2 2 51 0 . 2 ¢ π ∞ § À √ ¡ ∆∞ ™ ∆ √ À ™ ª À £ √ À ™ ° À ƒ ø ∞ ¶ √ ∆ π ™ ∆ À ¶ π ∫ ∂ ™ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ∂ ™

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 225

Page 227: pli42a

2 2 6 K E º A § A I O 1 0 : N ∞ ∂ π ¡ ∞ π ∫ ∞ ¡ ∂ π ™ ∆ À ¶ π ∫ √ ™ ∏ ¡ ∞ ¡ ∞ ª ∏ ¡ ∂ π ¡ ∞ π ;

ακριβές χρονοδιάγραµµα εκτέλεσης.

Μύθος 9. ∆εν υπάρχουν εργαλεία για την υποστήριξη της χρήσης των τυπικών τεχνικών.

Στην κοινότητα των µηχανικών λογισµικού θεωρείται ότι ο καλύτερος τρόπος για να

αυξηθεί η αποδοτικότητα και η ακρίβεια της εφαρµογής των τυπικών τεχνικών είναι

αυτές να υποστηριχθούν µε κατάλληλα εργαλεία. Από το τέλος της δεκαετίας του

70 γίνεται µεγάλη προσπάθεια να αναπτυχθούν τέτοια εργαλεία και ήδη οι περισ-

σότερο διαδεδοµένες γλώσσες συνοδεύονται από «µικρά» εργαλεία CASE (Πίνα-

κας 10.1). Αναµένεται ότι τα επόµενα χρόνια το βάρος θα δοθεί στην ανάπτυξη ολο-

κληρωµένων εργαλείων CASE, τα οποία θα υποστηρίζουν πλήρως τον κύκλο ανά-

πτυξης λογισµικού µε τη χρήση τυπικών προδιαγραφών.

Μύθος 10. Οι τυπικές τεχνικές αντικαθιστούν τις παραδοσιακές µεθοδολογίες ανά-

πτυξης λογισµικού.

Στην πραγµατικότητα, οι δοµηµένες µεθοδολογίες ανάπτυξης λογισµικού περιγρά-

φουν τόσο ένα σύνολο δραστηριοτήτων ανάπτυξης όσο και µια µεθοδολογία εφαρ-

µογής της διαδικασίας ανάπτυξης. Οι µεθοδολογίες αυτές δίνουν µεγάλη έµφαση στην

καταγραφή των απαιτήσεων και των προδιαγραφών του λογισµικού, αλλά δεν περι-

λαµβάνουν εργαλεία απόδειξης του λογισµικού. Επειδή οι τυπικές τεχνικές υπερέ-

χουν ακριβώς σε αυτό το σηµείο (ενώ παρουσιάζουν σηµαντικές αδυναµίες στην περι-

γραφή µιας µεθοδολογίας ανάπτυξης λογισµικού άλλης από την ακολουθία προδια-

γραφή – σχεδίαση – υλοποίηση), µπορούν να λειτουργήσουν συµπληρωµατικά µε τις

δοµηµένες µεθοδολογίες ανάπτυξης. Αρκετές από τις προσπάθειες της επιστηµονι-

κής κοινότητας κατευθύνονται προς την ολοκλήρωση των διαδεδοµένων τυπικών

τεχνικών µε µεθοδολογίες όπως η SSADM (ολοκλήρωση µε Ζ στο έργο SAZ) και η

Yourdon Modern Structured Analysis (ολοκλήρωση µε Z, VDM και CSP).

Μύθος 11. Οι τυπικές τεχνικές εφαρµόζονται µόνο στο λογισµικό.

Λάθος! Οι τυπικές τεχνικές εφαρµόζονται το ίδιο επιτυχηµένα στην προδιαγραφή

υλικού και λογισµικού. Παραδείγµατα προδιαγραφής υλικού είναι ο µικροεπεξερ-

γαστής Computational Logic FM9001 (απόδειξη ορθότητας µε τη χρήση του Boyer

– Moore Prover), η µονάδα κινητής υποδιαστολής του Transputer T800 (περιγραφή

µε Ζ) και τµήµατα αρχιτεκτονικής (περιγραφή και έλεγχος ορθότητας µε CSP).

Μύθος 12. Οι τυπικές τεχνικές είναι περιττές.

Αν και µερικές φορές η χρήση τυπικών τεχνικών είναι υπερβολή, συστήνεται η χρήση

τους σε οποιοδήποτε σύστηµα του οποίου η ασφάλεια είναι υπολογίσιµος παράγων.

Αν και δεν είναι απαραίτητες για όλες τις εφαρµογές, οι τυπικές τεχνικές απαιτείται να

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 226

Page 228: pli42a

εφαρµοστούν σε ένα διαρκώς αυξανόµενο αριθµό εφαρµογών, καθώς όλο και περισ-

σότεροι οργανισµοί θεωρούν τη χρήση τους υποχρεωτική για ορισµένες κατηγορίες

εφαρµογών. Για παράδειγµα, η Ευρωπαϊκή Υπηρεσία ∆ιαστήµατος συστήνει τη χρήση

προδιαγραφών σε VDM ή Ζ (οι οποίες θα συµπληρώνονται µε περιγραφές σε φυσική

γλώσσα) για κρίσιµα συστήµατα, το Υπουργείο Άµυνας της Μεγ. Βρετανίας και η Επι-

τροπή Ελέγχου Ατοµικής Ενέργειας του Καναδά συστήνουν την τυπική περιγραφή και

επαλήθευση κάθε λογισµικού που πρόκειται να χρησιµοποιήσουν κ.λπ.

Μύθος 13. Οι τυπικές τεχνικές δεν υποστηρίζονται αρκετά.

Αυτό µπορεί να συνέβαινε πολλά χρόνια πριν, όταν η εφαρµογή τυπικών τεχνικών

ήταν µια µοναχική δραστηριότητα. Σήµερα υπάρχουν εργαλεία για τις περισσότε-

ρες τυπικές τεχνικές, οι οποίες διδάσκονται σε αρκετά προγράµµατα προπτυχιακών

και µεταπτυχιακών σπουδών (όπως αυτό που παρακολουθείτε). Αρκετές από αυτές

ήδη αποτελούν βιοµηχανικά πρότυπα. Η αύξηση της δηµοτικότητας των τυπικών

τεχνικών οφείλεται τόσο στη µεγάλη δηµοσιότητα που έλαβαν τα τελευταία έργα

στα οποία αυτές εφαρµόστηκαν, όσο και στο γεγονός ότι πολλοί µηχανικοί φρόντι-

σαν να εµπλουτίσουν το «στεγνό» φορµαλισµό µε χρήσιµους τελεστές και δοµές

δεδοµένων για να αντιµετωπίσουν πρακτικές ανάγκες.

Μύθος 14. Οι άνθρωποι του χώρου των τυπικών προδιαγραφών πάντα χρησιµοποι-

ούν τυπικές προδιαγραφές.

Ακόµη και οι πιο ένθερµοι υποστηρικτές των τυπικών τεχνικών αναγνωρίζουν ότι

σε ορισµένες δραστηριότητες ανάπτυξης λογισµικού είναι προτιµότερο να χρησι-

µοποιούνται άλλες τεχνικές. Υπάρχουν πολλά σηµεία του κύκλου ανάπτυξης στα

οποία η εφαρµογή τυπικών τεχνικών, αν και τεχνικά εφικτή, δεν είναι πρακτική λύση

εξαιτίας περιορισµών στους πόρους, το χρόνο ή τα χρήµατα.

¶›Ó·Î·˜ 10.1

Μερικά από τα αυτοµατοποιηµένα εργαλεία που υποστηρίζουν την εφαρµογή των

πιο διαδεδοµένων τυπικών τεχνικών

ΤΥΠΙΚΗ ΤΕΧΝΙΚΗ ΕΡΓΑΛΕΙΑ

Larch Larch Theorem Prover, Nqthm / Boyer – Moore Prover

Z ZTC, Fuzz, Formalizer, Zola, Cadiz, ProofPower

VDM Mural, Raise toolset, VDM – SL toolbox

CSP FDR

2 2 71 0 . 2 ¢ π ∞ § À √ ¡ ∆∞ ™ ∆ √ À ™ ª À £ √ À ™ ° À ƒ ø ∞ ¶ √ ∆ π ™ ∆ À ¶ π ∫ ∂ ™ ¶ ƒ √ ¢ π ∞ ° ƒ∞ º ∂ ™

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 227

Page 229: pli42a

2 2 8 K E º A § A I O 1 0 : N ∞ ∂ π ¡ ∞ π ∫ ∞ ¡ ∂ π ™ ∆ À ¶ π ∫ √ ™ ∏ ¡ ∞ ¡ ∞ ª ∏ ¡ ∂ π ¡ ∞ π ;

10.3 OÈ ‰¤Î· ÂÓÙÔϤ˜ ÂÊ·ÚÌÔÁ‹˜ ÙˆÓ Ù˘ÈÎÒÓ Ù¯ÓÈÎÒÓ

Γιατί αυτή η θαυµαστή εφαρµοσµένη επιστήµη, η οποία µειώνει τον κόπο και κάνει

τη ζωή µας ευκολότερη, µας φέρνει τόσο λίγη ευτυχία; Η απάντηση είναι απλή: δεν

έχουµε µάθει ακόµη να τη χρησιµοποιούµε µε τρόπο λογικό.

Α. Αϊνστάιν

Είτε έχετε πειστεί για τα οφέλη που µπορεί να προκύψουν από την εφαρµογή τυπι-

κών τεχνικών είτε όχι, είναι φυσικό να αναρωτιέστε: «Ποιοι είναι οι παράγοντες που

καθορίζουν την επιτυχία ενός έργου όπου εφαρµόζονται τυπικές τεχνικές;». ∆ε θέλω

να σας απογοητεύσω, αλλά δεν υπάρχει αναµφισβήτητη απάντηση. Το µόνο που

µπορώ να κάνω για να σας βοηθήσω, είναι να παραθέσω ένα σύνολο οδηγιών που

βρήκα στη βιβλιογραφία (Bowen, 1995a), οι οποίες προέκυψαν µετά από µελέτη επι-

τυχηµένων και αποτυχηµένων έργων στα οποία εφαρµόστηκαν τυπικές τεχνικές.

1. Φρόντισε να επιλέξεις την κατάλληλη τεχνική.

Κριτήρια στα οποία θα βασιστεί η επιλογή µπορεί να είναι η διάδοση της τεχνικής,

ο πλούτος του λεξιλογίου που αυτή διαθέτει και η δυνατότητα περιγραφής συστη-

µάτων παρόµοιων µε το υπό ανάπτυξη σύστηµα. Μια τυπική τεχνική χρειάζεται περί-

που µια δεκαετία για να περάσει από το στάδιο της σύλληψης σε αυτό της αποδοχής

και εφαρµογής, το οποίο συνοδεύεται από µια εγκατεστηµένη βάση χρηστών και

ικανοποιητική βιβλιογραφική τεκµηρίωση. Η τυποποίηση της τεχνικής δυσκολεύει

την ανάπτυξή της, αλλά βοηθά αρκετά στη διάδοσή της.

Οι τεχνικές που διαθέτουν πλούσιο λεξιλόγιο συνήθως θα σε κατευθύνουν προς

συγκεκριµένη υλοποίηση, καθώς δεν υποστηρίζουν την αφαιρετική περιγραφή του

συστήµατος. Από την άλλη πλευρά, τεχνικές µε µικρό λεξιλόγιο οδηγούν σε επιµή-

κεις περιγραφές του συστήµατος. Χαρακτηριστικό παράδειγµα της αντιπαλότητας

αυτής είναι τα Low Level Petri Nets σε αντιδιαστολή µε τα High Level Petri Nets,

τα οποία περιγράφηκαν στο κεφάλαιο 8.

Τέλος, ένα πολύ σηµαντικό κριτήριο είναι η καταλληλότητα της τεχνικής για την

άποψη του συστήµατος που θέλεις να αναπαραστήσεις. Για παράδειγµα, η τεχνική

CSP (περιγράφηκε στο κεφάλαιο 9) δεν είναι κατάλληλη για την περιγραφή της

κατάστασης ενός συστήµατος. Μια καλή τέτοια περιγραφή µπορεί να προκύψει χρη-

σιµοποιώντας Ζ ή VDM, τεχνικές που είναι ακατάλληλες για την περιγραφή ταυτό-

χρονων συστηµάτων, όπου είναι καλύτερο να εφαρµόσουµε άλγεβρες διεργασιών,

όπως η CSP.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 228

Page 230: pli42a

2. Προσοχή στην υπερβολή της περιγραφής (τον υπερ – φορµαλισµό).

Πριν από όλα, πρέπει να πειστείς ότι η εφαρµογή τυπικών τεχνικών είναι απαραί-

τητη (π.χ. για να αυξηθεί η εµπιστοσύνη σου στο σύστηµα, επειδή το ζήτησε ο πελά-

της, για να µειωθεί η πολυπλοκότητα της περιγραφής κ.λπ.) και δε γίνεται επειδή

αυτό είναι η τελευταία µόδα. Όπως έχουµε πει, όλοι γνωρίζουν ότι οι τυπικές τεχνι-

κές περιστασιακά µειονεκτούν απέναντι στις µη τυπικές µεθόδους. Όταν αποφασί-

σεις ότι είναι απαραίτητη η εφαρµογή τυπικών τεχνικών, τότε πρέπει (α) να επιλέ-

ξεις την πλέον κατάλληλη για το σύστηµά σου, (β) να προσδιορίσεις τα τµήµατα του

λογισµικού όπου αυτή θα εφαρµοστεί και (γ) να σχεδιάσεις τα στάδια της ανάπτυ-

ξης όπου αυτή θα εφαρµοστεί. Συνήθως, έχεις να επιλέξεις ανάµεσα στην τυπική

προδιαγραφή του λογισµικού, στην ανάπτυξη και εγκυροποίηση µε τυπικές µεθό-

δους, και στη χρήση εργαλείων αυτοµατοποιηµένης απόδειξης.

3. Πρέπει να εκτιµήσεις το κόστος σωστά.

Η εµπειρία δείχνει ότι το κόστος ενός έργου όπου χρησιµοποιούνται τυπικές τεχνι-

κές δε διαφέρει από το κόστος ενός έργου όπου δε χρησιµοποιούνται. Βέβαια, η

εφαρµογή τυπικών τεχνικών έχει υψηλό κόστος αρχικοποίησης, στο οποίο περιλαµ-

βάνεται η εκπαίδευση του προσωπικού, η αγορά τεχνογνωσίας και η προµήθεια εργα-

λείων υποστήριξης. Πρέπει να είσαι προσεκτικός καθώς τα διαδεδοµένα µοντέλα

εκτίµησης του κόστους ενός έργου (π.χ. CoCoMo) δεν έχουν λάβει υπόψη τους την

πιθανότητα εφαρµογής τυπικών τεχνικών και είναι πιθανό να σε οδηγήσουν στην

υποτίµηση του κόστους του έργου.

4. Φρόντισε να έχεις διαθέσιµο έναν ειδικό στην εφαρµογή τυπικών µεθόδων.

Όλα τα επιτυχηµένα έργα όπου εφαρµόστηκαν τυπικές τεχνικές χρησιµοποιούσαν

ειδικευµένους εξωτερικούς συµβούλους, οι οποίοι συνεργάζονταν στενά µε το δια-

χειριστή του έργου και τους µηχανικούς λογισµικού.

5. Μην εγκαταλείψεις τις παραδοσιακές µεθόδους ανάπτυξης.

Καλύτερα να χρησιµοποιήσεις τις τυπικές τεχνικές για να ενισχύσεις κάποια στάδια

της µεθόδου κύκλου ζωής που χρησιµοποιείς συνήθως, ή να συγκροτήσεις µια

παράλληλη οµάδα έργου η οποία θα εφαρµόζει τυπικές τεχνικές για την ανάλυση

των προδιαγραφών που παράγει η βασική οµάδα έργου. ∆εν είναι αποδοτικό να µην

εκµεταλλευθείς όλη την εµπειρία που έχει συγκεντρωθεί από την πολυετή εφαρµο-

γή µεθοδολογιών δοµηµένης ανάπτυξης λογισµικού.

6. Μην ξεχνάς την τεκµηρίωση.

Η τεκµηρίωση αποτελεί απαραίτητη δραστηριότητα της σχεδίασης και τα αποτελέ-

2 2 91 0 . 3 O π ¢ ∂ ∫ ∞ ∂ ¡ ∆ √ § ∂ ™ ∂ º ∞ ƒ ª √ ° ∏ ™ ∆ ø ¡ ∆ À ¶ π ∫ ø ¡ ∆ ∂ Ã ¡ π ∫ ø ¡

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 229

Page 231: pli42a

2 3 0 K E º A § A I O 1 0 : N ∞ ∂ π ¡ ∞ π ∫ ∞ ¡ ∂ π ™ ∆ À ¶ π ∫ √ ™ ∏ ¡ ∞ ¡ ∞ ª ∏ ¡ ∂ π ¡ ∞ π ;

σµατά της χρησιµοποιούνται σε πολλές από τις επόµενες φάσεις του κύκλου ανά-

πτυξης, ακόµη και για τη συντήρηση του λογισµικού. Καλύτερα να συµπληρώνεις

την τυπική περιγραφή των απαιτήσεων και των προδιαγραφών του λογισµικού µε

την επεξήγησή τους σε µη τυπική γλώσσα.

7. Μην παραβαίνεις τα πρότυπα ποιότητας που έχεις θέσει.

Παρόλο που τελευταία έχουν εµφανιστεί αρκετά πρότυπα ποιότητας λογισµικού τα

οποία περιλαµβάνουν τυπικές τεχνικές, αυτά δεν είναι αρκετά για την παραγωγή ποι-

οτικού λογισµικού. Καλύτερα να συνεχίσεις να ακολουθείς τα πρότυπα ποιότητας

που χρησιµοποιείς και να φροντίσεις να ενσωµατώσεις τις τυπικές τεχνικές στη µεθο-

δολογία ανάπτυξης.

8. Μην γίνεσαι δογµατικός.

Η απόλυτη ορθότητα δε µπορεί να επιτευχθεί. Οι τυπικές τεχνικές αποτελούν µια

κατηγορία τεχνικών προδιαγραφής λογισµικού. Όταν εφαρµοστούν σωστά, οδηγούν

αποδειγµένα στην ανάπτυξη συστηµάτων µε υψηλό βαθµό συνοχής. Αυτό όµως δεν

πρέπει να σε οδηγήσει στην απόρριψη των άλλων τεχνικών. Να θυµάσαι ότι τελικά

µια οµάδα ανθρώπων θα εφαρµόσει οποιαδήποτε τεχνική επιλέξεις και οι άνθρωποι

είναι επιρρεπείς σε λάθη, τα οποία µπορεί να οφείλονται σε άγνοια, αναποφασιστι-

κότητα, αµέλεια ή απλή αδιαφορία.

Οι τυπικές τεχνικές µπορούν µόνο να αποδείξουν την απόλυτη ορθότητα του λογι-

σµικού σε σχέση µε τις προδιαγραφές του (αν και σου συστήνω να µην εµπιστεύε-

σαι απόλυτα καµία διαδικασία απόδειξης, χειρωνακτική ή αυτοµατοποιηµένη). Εάν

οι προδιαγραφές του είναι λάθος και η υλοποίηση αποδεδειγµένα σωστή σε σχέση

µε τις προδιαγραφές, ο τελικός χρήστης έχει ένα λογισµικό που δεν ανταποκρίνεται

στις απαιτήσεις του.

9. Να κάνεις έλεγχο, µετά έλεγχο και ξανά έλεγχο.

Ο έλεγχος του λογισµικού µπορεί να αποκαλύψει σφάλµατα, αλλά δεν µπορεί να απο-

δείξει την απουσία σφαλµάτων. Η χρήση τυπικών τεχνικών θα σου προσφέρει πολλά

πλεονεκτήµατα αλλά σε καµιά περίπτωση δεν ακυρώνει τον έλεγχο. Για παράδειγµα,

οι τυπικές τεχνικές θα σου επιτρέψουν να αποδείξεις ότι το λογισµικό πραγµατικά

έχει τις ιδιότητες που ισχυρίζεσαι ότι έχει, θα σε βοηθήσουν να εξετάσεις τη συµπε-

ριφορά του και να πειστείς ότι έχεις προβλέψει όλες τις πιθανότητες, θα αυξήσουν

την εµπιστοσύνη σου στη συµπεριφορά του ολοκληρωµένου συστήµατος και θα σου

παράσχουν απόδειξη ότι η υλοποίηση του συστήµατος ικανοποιεί τις προδιαγραφές

του, αλλά δεν µπορούν να εγγυηθούν την ορθότητα του λογισµικού.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 230

Page 232: pli42a

10. Να επαναχρησιµοποιείς τµήµατα λογισµικού.

Η επαναχρησιµοποίηση σε ένα έργο τµηµάτων λογισµικού που έχουν αναπτυχθεί για

άλλο έργο µπορεί να µειώσει σηµαντικά το κόστος ανάπτυξης και συντήρησης. Η

χρήση τυπικών τεχνικών θα σε βοηθήσει να εντοπίσεις πιο εύκολα τα υποψήφια προς

επαναχρησιµοποίηση τµήµατα λογισµικού (είτε πρόκειται για τις προδιαγραφές, είτε

για τον κώδικα αυτών). Σίγουρα µπορείς να δείξεις µεγαλύτερη εµπιστοσύνη σε τµή-

µατα που έχουν περιγραφεί, τεκµηριωθεί και αποδειχθεί µε τυπικές µεθόδους.

2 3 11 0 . 3 O π ¢ ∂ ∫ ∞ ∂ ¡ ∆ √ § ∂ ™ ∂ º ∞ ƒ ª √ ° ∏ ™ ∆ ø ¡ ∆ À ¶ π ∫ ø ¡ ∆ ∂ Ã ¡ π ∫ ø ¡

¢Ú·ÛÙËÚÈfiÙËÙ· 10.3

∆οκιµάστε να επαναλάβετε τις 10 οδηγίες εφαρµογής των τυπικών τεχνικών. Μπο-

ρείτε να συνοψίσετε τη βασική θέση πριν µελετήσετε τη δική µας πρόταση;

Εάν είµαστε πρόθυµοι να µάθουµε από τα λάθη µας και τα λάθη των άλλων, να

εκµεταλλευθούµε τις καλύτερες πρακτικές και να ελέγξουµε τη δουλειά µας χρη-

σιµοποιώντας τις κατάλληλες τεχνικές και εργαλεία, τότε µπορούµε µε επιτυχία να

χρησιµοποιήσουµε τυπικές τεχνικές για να αναπτύξουµε συστήµατα µε υψηλό

βαθµό συνοχής και συνέπειας ως προς τις προδιαγραφές τους.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 231

Page 233: pli42a

2 3 2 K E º A § A I O 1 0 : N ∞ ∂ π ¡ ∞ π ∫ ∞ ¡ ∂ π ™ ∆ À ¶ π ∫ √ ™ ∏ ¡ ∞ ¡ ∞ ª ∏ ¡ ∂ π ¡ ∞ π ;

™‡ÓÔ„Ë

Στο τελευταίο κεφάλαιο του τόµου συζητήσαµε για τα πλεονεκτήµατα, τα µειονεκτή-

µατα και γενικότερα την αξία εφαρµογής µεθόδων τυπικών προδιαγραφών. Εάν τελι-

κά πειστήκατε, τότε οι 10 οδηγίες θα σας φανούν χρήσιµες. Εάν δεν έχετε πειστεί

ακόµη, καλύτερα να επαναλάβετε τους 14 µύθους. Μήπως πιστεύετε ακόµη σε κάποι-

ον από αυτούς;

µÈ‚ÏÈÔÁÚ·Ê›·

[1] J. P. Bowen και M. G. Hinchey, «Ten Commandments of Formal Methods». IEEE

Computer, April 1995, pp 56–63.

[2] J. P. Bowen και M. G. Hinchey, «Seven more Myths of Formal Methods». IEEE

Software, July 1995, pp 34–41.

[3] J. A. Hall, «Seven Myths of Formal Methods». IEEE Software, Sept. 1990, pp

11–19.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 232

Page 234: pli42a

E›ÏÔÁÔ˜

Φτάνοντας στο τέλος της µελέτης του τόµου, έχετε γνωρίσει από κοντά αυτά τα τόσο

ισχυρά εργαλεία αναπαράστασης προδιαγραφών που καλούνται τυπικές (ή βασι-

σµένες στα µαθηµατικά) τεχνικές. Πράγµατι, οι τυπικές τεχνικές είναι τόσο ισχυρές

συγκρινόµενες µε τις παραδοσιακές µη τυπικές ή ηµι τυπικές τεχνικές, όσο ισχυρό-

τερο είναι ένα αγωνιστικό αυτοκίνητο από ένα αυτοκίνητο καθηµερινής χρήσης.

Αλήθεια, τώρα που, µαζί µε τη µελέτη των διαδεδοµένων τυπικών τεχνικών, γνωρί-

σατε και τις αντικρουόµενες απόψεις σχετικά µε την εφαρµογή τους, ποια είναι η

δική σας άποψη; Είναι τελικά χρήσιµες και εφαρµόσιµες οι τυπικές τεχνικές προ-

διαγραφών; Αν ναι, γιατί δεν είναι διαδεδοµένες;

Φαίνεται ότι υπάρχουν τέσσερις παράγοντες που εµποδίζουν τη διάδοση των τυπι-

κών τεχνικών: ξεκαθάρισµα των παρανοήσεων, τυποποίηση ορισµένων τυπικών

µεθόδων, ανάπτυξη εργαλείων για την υποστήριξη των τυπικών τεχνικών και εκπαί-

δευση στη θεωρία και τη χρήση των τυπικών τεχνικών. Επιστρέφουµε, λοιπόν, στο

σηµείο από όπου ξεκινήσαµε στον Πρόλογο: την ανάγκη εκπαίδευσης των µηχανι-

κών λογισµικού σε αντικείµενα σχετικά µε τις τυπικές µεθόδους.

Η εκπαίδευση αυτή πρέπει να περιλαµβάνει δύο επίπεδα: εκπαίδευση στις βασικές

µαθηµατικές έννοιες και εργαλεία (προτασιακός και κατηγορηµατικός λογισµός,

θεωρία συνόλων κ.ά.) και κατάρτιση σε µία ή περισσότερες τυπικές τεχνικές. Έχει

αποδειχθεί ότι οι δραστηριότητες του δεύτερου επιπέδου είναι καταδικασµένες σε

αποτυχία εάν δεν προηγηθούν οι δραστηριότητες του πρώτου επιπέδου. Τεχνικές

βασισµένες σε Μαθηµατικά χρησιµοποιούνται από τους µηχανικούς όλων των ειδι-

κοτήτων. Το ίδιο θα πρέπει να συµβεί και µε τους µηχανικούς λογισµικού, αρκεί να

τους «παρασχεθούν» οι σχετικές δεξιότητες και τα κατάλληλα εργαλεία, ώστε να µη

χρειάζεται να αποδεικνύουν θεωρήµατα, αλλά µόνο να πιστοποιούν τις ιδιότητες του

λογισµικού που αναπτύσσουν.

Ο τόµος που µελετήσατε δεν ισχυρίζεται ότι εξαντλεί κάποιο από τα δύο επίπεδα

εκπαίδευσης. Από τον Πρόλογο σας προέτρεψα να ανατρέξετε σε περισσότερο ειδι-

κά Μαθηµατικά βιβλία για να αποκτήσετε τις απαιτούµενες γνωστικές βάσεις – ελπί-

ζω να το κάνατε. Όσον αφορά στην κατάρτιση στη χρήση τυπικών τεχνικών, προ-

σπάθησα να σας παρουσιάσω τα βασικά στοιχεία των πιο διαδεδοµένων τυπικών

τεχνικών. Όπως όµως γνωρίζετε, κανείς δεν µαθαίνει να οδηγεί ένα αυτοκίνητο αγώ-

νων µόνο από το εγχειρίδιο χρήσης. Πρέπει να καθίσει πίσω από το τιµόνι και να

διασχίσει την πίστα πολλές φορές (και όχι πάντα µε επιτυχία).

Μετά από όλα αυτά, είµαι σίγουρος ότι θα έχετε ήδη διαµορφώσει τη δική σας

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 233

Page 235: pli42a

2 3 4 T Y ¶ I K E ™ ¶ P O ¢ I A ° PA º E ™

άποψη, η οποία ελπίζω να είναι υπέρ της εφαρµογής τυπικών τεχνικών. Ελπίζω, λοι-

πόν, την επόµενη φορά που θα βρεθείτε στην «πίστα» της σχεδίασης λογισµικού, να

µη διστάσετε να «χρησιµοποιήσετε» το αγωνιστικό σας αυτοκίνητο και να «σανι-

δώσετε» το γκάζι…

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 234

Page 236: pli42a

A·ÓÙ‹ÛÂȘ ·Û΋ÛÂˆÓ ·˘ÙÔ·ÍÈÔÏfiÁËÛ˘

1.1

Σ Λ

1. Οι απαιτήσεις του λογισµικού

(α) προέρχονται από τον πελάτη,

(β) περιγράφουν πώς θα υλοποιηθεί το σύστηµα λογισµικού.

2. Οι προδιαγραφές των απαιτήσεων

(α) αποτελούν ένα δοµηµένο τρόπο έκφρασης

των απαιτήσεων,

(β) πρέπει να είναι κατανοητές µόνο από τους τεχνικούς.

3. Οι τυπικές προδιαγραφές

(α) περιγράφουν µε αυστηρό και πέρα από αµφισβήτηση

τρόπο τις δυνατότητες του συστήµατος,

(β) πρέπει να είναι κατανοητές τόσο από τον πελάτη

όσο και από τους τεχνικούς.

Οι απαιτήσεις του λογισµικού συνήθως προκύπτουν από παρατήρηση των διαδικα-

σιών που το νέο σύστηµα θα υλοποιήσει ή θα βελτιώσει και συζητήσεις µε τους χρή-

στες, διαχειριστές ή πελάτες του νέου συστήµατος. Η περιγραφή της λειτουργίας του

συστήµατος συνοψίζεται στο ΕΟΑ, χρησιµοποιώντας φυσική γλώσσα µε την προ-

σθήκη διαγραµµάτων. Για τις προδιαγραφές των απαιτήσεων χρησιµοποιείται δοµη-

µένη φυσική γλώσσα και διαγράµµατα, για να περιγραφούν λεπτοµερώς οι υπηρε-

σίες που θα παρέχει το σύστηµα. Στην τελική του µορφή, το ΕΟΑ θα αποτελεί τη

βάση διαπραγµάτευσης και συµφωνίας µεταξύ πελάτη και µηχανικού λογισµικού,

άρα πρέπει αφενός να είναι κατανοητό από τεχνικούς και µη, και αφετέρου να είναι

αρκετά αυστηρό στην περιγραφή του τελικού συστήµατος λογισµικού.

Από την άλλη πλευρά, το Έγγραφο Τυπικών Προδιαγραφών (ΕΤΠ) είναι συνήθως

κατανοητό µόνο από ανθρώπους που έχουν υποστεί σχετική εκπαίδευση ή έχουν εµπει-

ρία σε προγραµµατισµό ή στο χειρισµό µαθηµατικών µοντέλων, αφού η αυστηρή περι-

γραφή του τρόπου λειτουργίας και υλοποίησης του συστήµατος ενδιαφέρει κυρίως

τους ανθρώπους που θα το σχεδιάσουν και αναπτύξουν. Πρέπει να τονίσουµε εδώ ότι

η πλήρης και χωρίς αµφισβητήσεις επικοινωνία µεταξύ των µηχανικών λογισµικού και

των τεχνικών ή προγραµµατιστών είναι σε αυτή τη φάση πολύ σηµαντική.

Εάν απαντήσατε σωστά, µπράβο σας. Έχετε πραγµατικά καταλάβει τη διαφορά ανά-

µεσα στις απαιτήσεις, τις προδιαγραφές των απαιτήσεων και τις τυπικές προδια-

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 235

Page 237: pli42a

2 3 6 T Y ¶ I K E ™ ¶ P O ¢ I A ° PA º E ™

γραφές, κάτι που σας βεβαιώνω ότι είναι αρκετά δύσκολο και καθόλου προφανές.

Εάν έχετε κάνει κάποια λάθη, καλύτερα πριν προχωρήσετε να ανατρέξετε στην ενό-

τητα 1.1 και να δείτε τις διαφορές ανάµεσα σε αυτούς τους διαφορετικούς τρόπους

περιγραφής ενός συστήµατος λογισµικού και τη χρησιµότητα του καθενός.

1.2

Οι τεχνικές µη τυπικών προδιαγραφών περιγράφουν το σύστηµα λογισµικού χρησι-

µοποιώντας φυσική γλώσσα. Οι τεχνικές ηµι–τυπικών προδιαγραφών χρησιµοποι-

ούν διαγράµµατα για τη γραφική περιγραφή και δοµηµένη γλώσσα για τη λεκτική

περιγραφή του συστήµατος. Οι τεχνικές τυπικών προδιαγραφών παράγουν περι-

γραφές µε αυστηρά καθορισµένη σύνταξη και σηµασιολογία και βασίζονται σε

κάποιο θεωρητικό µοντέλο.

Πράγµατι, ενώ για τις µη τυπικές προδιαγραφές χρησιµοποιείται µη δοµηµένη (φυσι-

κή γλώσσα), οι ηµι–τυπικές προδιαγραφές εισάγουν καθορισµένη (αλλά όχι αυστη-

ρή) σύνταξη και δοµή. Όπως θα δούµε και στη συνέχεια, τα διαγράµµατα έχουν προ-

καθορισµένα σύµβολα και η δοµηµένη γλώσσα προκαθορισµένες λέξεις. Τόσο τα

σύµβολα όσο και οι λέξεις χρησιµοποιούνται µε καθορισµένο τρόπο. Τέλος, οι τυπι-

κές προδιαγραφές βασίζονται σε κάποιο θεωρητικό µοντέλο, ώστε, µετά την υλο-

ποίηση του συστήµατος, να είναι δυνατή η αυστηρή απόδειξη της ορθότητας του

συστήµατος σε σχέση µε τις προδιαγραφές του.

Εάν συµπληρώσατε σωστά όλα τα κενά, τότε πραγµατικά έχετε µια σωστή γενική

εικόνα για τα εργαλεία που πρέπει να χρησιµοποιήσετε για την παραγωγή κάποιου

είδους προδιαγραφών. Εάν έχετε κάνει κάποια λάθη, αρκεί να ανατρέξετε στην ενό-

τητα 1.2 και να µελετήσετε ξανά την περιγραφή των τριών κατηγοριών τεχνικών

παραγωγής προδιαγραφών.

2.1

Οι σωστές απαντήσεις έχουν σηµειωθεί στον πίνακα που ακολουθεί:

Σ Λ

Μια διεργασία αναπαριστά ένα πρόγραµµα.

Μια αποθήκη δεδοµένων είναι ισοδύναµη µε ένα αρχείο.

Μια ροή δεδοµένων αναπαριστά δεδοµένα που ανταλλάσσονται.

Μια αποθήκη δεδοµένων είναι ένα σηµείο φύλαξης δεδοµένων.

Εάν απαντήσατε σωστά, µπράβο σας. Έχετε καταλάβει τη σηµασία των συµβόλων

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 236

Page 238: pli42a

ενός ∆Ρ∆. Εάν απαντήσατε λάθος, δεν πειράζει. Επαναλάβετε την ενότητα 2.1, έχο-

ντας υπόψη σας και τα εξής:

Ας σηµειωθεί ότι µια διεργασία δεν αναπαριστά απαραίτητα ένα πρόγραµµα υπο-

λογιστή. Μπορεί να αναπαριστά ένα πρόγραµµα, αλλά και µια οµάδα προγραµµά-

των, ένα τµήµα του λογισµικού ή και µια εργασία που εκτελείται χωρίς το λογισµι-

κό. Οµοίως, µια αποθήκη δεδοµένων δεν αντιστοιχεί σε ένα αρχείο, αλλά µπορεί να

αναπαριστά ένα αρχείο, αλλά και µια βάση δεδοµένων, µια εγγραφή ή ένα πεδίο.

Μια ροή δεδοµένων αναπαριστά δεδοµένα που βρίσκονται σε κίνηση, ενώ σε µια

αποθήκη δεδοµένων, αυτά βρίσκονται αποθηκευµένα: πρόκειται για δύο διαφορετι-

κές καταστάσεις της ίδιας οντότητας (δεδοµένα).

2.2

Η σωστή σειρά των βηµάτων κατασκευής ενός ∆Ρ∆ είναι:

1. Κατασκευή καταλόγου οντοτήτων του ∆Ρ∆.

2. Κατασκευή ∆Ρ∆ µηδενικού επιπέδου.

3. Κατασκευή ∆Ρ∆ επιπέδου 1.

4. ∆ιαδοχική ανάλυση διεργασιών.

Εάν απαντήσατε σωστά, τότε γνωρίζετε τη σωστή διαδικασία κατασκευής ενός ∆Ρ∆.

Εάν απαντήσατε λάθος, τότε ανατρέξτε στη µελέτη περίπτωσης της ενότητας 2.1.1,

για να δείτε τη διαδικασία που ακολούθησε ο Βύρων για να κατασκευάσει το ∆Ρ∆

του τµήµατος µισθοδοσίας. Σκεφθείτε ότι είναι καλό να έχουµε ένα κατάλογο των

οντοτήτων που θα συµπεριλάβουµε στο ∆Ρ∆ πριν αρχίσουµε την κατασκευή του, η

οποία πρέπει να προχωρά από το γενικό (επίπεδο αναπαράστασης συστήµατος) προς

το ειδικό (ανάλυση συστήµατος σε διεργασίες και ανάλυση διεργασιών).

2.3

Οι σωστές απαντήσεις έχουν σηµειωθεί στον πίνακα που ακολουθεί:

Σ Λ

1. Οι κάρτες εργασίας έρχονται ηλεκτρονικά στο τµήµα µισθοδοσίας.

2. Χρησιµοποιείται ειδικό πρόγραµµα επαλήθευσης των δεδοµένων

εργασίας πριν τον υπολογισµό της µισθοδοσίας.

3. Το πρόγραµµα µισθοδοσίας εκτυπώνει τις αναφορές

για το λογιστήριο.

2 3 7A ¶ ∞ ¡ ∆ ∏ ™ ∂ π ™ ∞ ™ ∫ ∏ ™ ∂ ø ¡ ∞ À ∆ √ ∞ • π √ § √ ° ∏ ™ ∏ ™

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 237

Page 239: pli42a

2 3 8 T Y ¶ I K E ™ ¶ P O ¢ I A ° PA º E ™

4. Το πρόγραµµα ετήσιων αναφορών εκτυπώνει τις επιταγές.

5. Τα ετήσια αρχεία πληρωµών φυλάσσονται µαζί µε τα µηνιαία

αρχεία µισθοδοσίας.

6. Οι ετήσιες αναφορές τυπώνονται είτε από το πρόγραµµα

µισθοδοσίας, είτε από το πρόγραµµα ετήσιων αναφορών.

Εάν απαντήσατε σωστά, τότε συγχαρητήρια! Μπορείτε άνετα να «διαβάσετε» ένα

∆ΡΣ. Εάν κάνατε λάθη, µην απογοητεύεστε. Σίγουρα οφείλονται σε επιπόλαιη ανά-

γνωση του ∆ΡΣ του Σχήµατος 2.9. Ανατρέξτε πάλι στην ερµηνεία των συµβόλων

ενός ∆ΡΣ και προσπαθήστε ξανά, πριν διαβάσετε το κείµενο που ακολουθεί.

Στο ∆ΡΣ του Σχήµατος 2.9 φαίνεται ότι οι κάρτες εργασίας είναι έντυπες και κάθε

ηµέρα διακινούνται εσωτερικά µέχρι το τµήµα µισθοδοσίας. Εκεί, µια εξουσιοδο-

τηµένη υπάλληλος πληκτρολογεί τα δεδοµένα εργασίας στον υπολογιστή (τα οποία

αποθηκεύονται στο σκληρό δίσκο του υπολογιστή). Την προηγούµενη της πληρω-

µής ηµέρα, τα δεδοµένα εργασίας ταξινοµούνται και εκτελείται το πρόγραµµα µισθο-

δοσίας, το οποίο εκτυπώνει τις αναφορές για το λογιστήριο και τις επιταγές, ενώ ενη-

µερώνει και τα ετήσια αρχεία (τα οποία φυλάσσονται σε µαγνητική ταινία, ξεχωρι-

στά από τα µηνιαία αρχεία). Λίγες µέρες µετά την αρχή του νέου έτους, εκτελείται

το πρόγραµµα ετήσιων υπολογισµών, το οποίο, αφού διαβάσει τα δεδοµένα που

έχουν καταγραφεί κατά τη διάρκεια του προηγούµενου έτους στο ετήσιο αρχείο κάθε

υπαλλήλου, παράγει και εκτυπώνει τα εκκαθαριστικά σηµειώµατα.

2.4

Η σωστή απάντηση είναι η εξής:

Το ∆Ρ∆ αναπαριστά ένα σύστηµα λογισµικού σε λογικό επίπεδο µε βάση τα δεδο-

µένα που παράγονται ή διακινούνται σ’ αυτό. Το Λ∆ περιέχει πληροφορίες σε µορφή

κειµένου για τα δεδοµένα του συστήµατος. Το ∆ΡΣ αναπαριστά διαφορετικά σε

φυσικό επίπεδο κάθε τµήµα του συστήµατος. Το ∆ΟΣ περιγράφει διαγραµµατικά

τη µορφή και τη δοµή των δεδοµένων που µεταχειρίζεται ένα σύστηµα. Ένα ∆ΓΟ

µπορεί να χρησιµοποιηθεί για την περιγραφή σε λογικό επίπεδο της δοµής του

συστήµατος ξεκινώντας από την περιγραφή των δεδοµένων. Το ∆Τ περιγράφει µε

χρονικά ταξινοµηµένο τρόπο τα γεγονότα που συµβαίνουν σε τµήµατα του συστή-

µατος, γι’ αυτό και θεωρείται ότι περιγράφει το πραγµατικό σύστηµα.

Εάν απαντήσατε σωστά, έχετε καταφέρει κάτι πολύ σπουδαίο: έχετε κατανοήσει τη

χρησιµότητα και το πεδίο εφαρµογής καθεµιάς από τις τεχνικές που έχουν περιγρα-

φεί σ’ αυτό το κεφάλαιο. Εάν έχετε κάνει λάθη, µην απογοητεύεστε. Είναι δύσκολο

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 238

Page 240: pli42a

να κατανοήσει κανείς αµέσως τις δυνατότητες όλων αυτών των τεχνικών παραγω-

γής ηµι–τυπικών προδιαγραφών, αφήστε που όλες «µοιάζουν» µεταξύ τους. Αν όµως

επαναλάβετε τις σχετικές ενότητες και παρακολουθήσετε «πιο στενά» τις ενέργειες

και τις αποφάσεις του Βύρωνα, θα δείτε ότι τελικά καθεµία από αυτές µας περιγρά-

φει διαφορετική όψη ενός συστήµατος λογισµικού.

Επαναλάβετε αυτή την άσκηση έως ότου µπορείτε να απαντήσετε χωρίς κανένα

λάθος και δοκιµάστε να τεκµηριώσετε κάθε σας απάντηση (η τεκµηρίωση βρίσκε-

ται στην αρχή κάθε ενότητας που περιγράφει κάθε τεχνική).

Ακόµη, έχετε υπόψη σας ότι κάθε τεχνική αναπαριστά τόσο τα δεδοµένα, όσο και

τις διεργασίες που συνθέτουν ένα σύστηµα λογισµικού (εκτός του ∆ΟΣ, το οποίο

αναπαριστά µόνο δεδοµένα). Οι βασικές διαφορές µεταξύ των τεχνικών προκύπτουν

από «σηµείο εκκίνησης» της αναπαράστασης (δεδοµένα ή διεργασίες), το επίπεδο

της περιγραφής (λογικό, δηλαδή αφηρηµένο, ή φυσικό, δηλαδή συγκεκριµένο) και

το συµβολισµό που χρησιµοποιείται.

4.1

Η συνάρτηση SQRT(X, SQX) δέχεται στην είσοδο έναν ακέραιο Χ και επιστρέφει

ένα πραγµατικό αριθµό SQX, ο οποίος αποτελεί την τετραγωνική του ρίζα. Για να

εκτελεστεί η συνάρτηση, ο Χ πρέπει οπωσδήποτε να µην είναι αρνητικός αριθµός

(οπότε κατά σύµβαση η συνάρτηση επιστρέφει 0). Επιπλέον, επειδή η ακρίβεια των

υπολογισµών είναι περιορισµένη, θεωρούµε έναν πολύ µικρό αριθµό e, ο οποίος

συµβολίζει το περιθώριο λάθους.

ΣΥΝΑΡΤΗΣΗ SQRT(X, SQX)

∆ΙΕΠΑΦΗ

ΕΙΣΟ∆ΟΣ

X: INTEGER

ΕΞΟ∆ΟΣ

SQX: REAL

ΠΡΙΝ

X ≥ 0 Ÿ

$ e Œ —: e = 10 – 4

ΜΕΤΑ

2 3 9A ¶ ∞ ¡ ∆ ∏ ™ ∂ π ™ ∞ ™ ∫ ∏ ™ ∂ ø ¡ ∞ À ∆ √ ∞ • π √ § √ ° ∏ ™ ∏ ™

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 239

Page 241: pli42a

2 4 0 T Y ¶ I K E ™ ¶ P O ¢ I A ° PA º E ™

$ SQX Œ —: |SQX * SQX – X| ≤ e

ΣΦΑΛΜΑ

X < 0 fi SQX = 0

Συγχαρητήρια εάν καταφέρατε να γράψετε σωστά την προδιαγραφή της συνάρτη-

σης SQRT(X, SQX). Έχετε καταλάβει τον τρόπο σύνθεσης των αξιωµατικών προ-

διαγραφών. Εάν κάνατε κάποιο λάθος, µην απογοητεύεστε. Μελετήστε πιο προσε-

κτικά την ενότητα 4.1 και το παράδειγµα 1, και προσπαθήστε ξανά. Σίγουρα θα τα

καταφέρετε αυτή τη φορά!

6.1

Οι προδιαγραφές που ζητούνται είναι οι ακόλουθες:

(α) (γ)

mod(i:Õ,j:N1)r:Õ

ppoosstt r < j Ÿ $m Œ Õ ∑ m * j +

r = i

F–to–C(f:R)c:R

pprree f > 458

ppoosstt c = 5/9 * (f – 32)

(β) – έµµεση (β) – άµεση

double(x:Ÿ)r:Ÿ

ppoosstt r = 2 * x

double(x:Ÿ)#Ÿ

double(x) ¢ x + x

Εάν τις γράψατε σωστά, συγχαρητήρια! Έχετε κάνει µια πολύ καλή αρχή για την κατα-

νόηση όσων παρουσιάζονται στη συνέχεια του κεφαλαίου. Εάν δεν τα καταφέρατε, µην

απογοητεύεστε, ούτε να φερθείτε επιπόλαια. Προσπαθήστε ξανά, αφού επαναλάβετε την

ενότητα 6.1. Μην ξεχνάτε πως «η (καλή) αρχή είναι το ήµισυ του παντός».

6.2

Ας συγκρίνουµε τις δύο προδιαγραφές της SHOW:

SHOW( )r:Õ SHOW( )r:Õ

eexxtt rd reg: Õ eexxtt rd reg: Õ

ppoosstt r = ppoosstt r = reg

Παρατηρήστε ότι διαφέρουν µόνο στην περιγραφή της µετα – συνθήκης. Στην αρι-

στερή προδιαγραφή, χρησιµοποιείται η µεταβλητή , η οποία αναφέρεται στην regw

regw

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 240

Page 242: pli42a

τιµή της reg πριν την εκτέλεση της συνάρτησης, ενώ στη δεξιά χρησιµοποιείται η

ίδια η reg. Μελετώντας προσεκτικά τις δύο προδιαγραφές, όµως, διαπιστώνουµε ότι

η SHOW έχει ικανότητα µόνο ανάγνωσης (και όχι τροποποίησης) της reg, οπότε

= reg. Αυτό σηµαίνει ότι οι δύο προδιαγραφές είναι ισοδύναµες και σωστές.

Προτιµούµε τη δεξιά προδιαγραφή, γιατί χρησιµοποιεί λιγότερες µεταβλητές, ενώ

είναι εµφανές ότι η SHOW δεν µπορεί να τροποποιήσει την reg.

Εάν τα καταφέρατε, µπράβο! Εάν δεν βρήκατε την απάντηση, µην ανησυχείτε. Στο

εξής χρειάζεται να προσέχετε περισσότερο, όταν µελετάτε τυπικές προδιαγραφές.

Να θυµάστε ότι αυτές είναι λεπτοµερείς και ακριβείς, άρα κάθε σύµβολο έχει την

ιδιαίτερη συνεισφορά του.

6.3

Οι σωστές απαντήσεις είναι:

1 Æ α, 2 Æ γ, 3 Æ α, 4 Æ β, 5 Æ β, 6 Æ β, 7 Æ γ, 8 Æ β, 9 Æ α.

Πρόκειται για άσκηση εφαρµογής των ιδιοτήτων και των τελεστών των απεικονί-

σεων. Εάν απαντήσατε σωστά, συγχαρητήρια. Έχετε κατανοήσει πώς χρησιµοποι-

ούνται οι απεικονίσεις. Εάν κάνατε κάποια λάθη, καλύτερα να επαναλάβετε τον

τρόπο ορισµού και τις ιδιότητες των αντίστοιχων τελεστών από την ενότητα 6.7.

6.4

Οι σωστές απαντήσεις είναι

1 Æ γ, 2 Æ β, 3 Æ α, 4 Æ γ, 5 Æ α, 6 Æ β, 7 Æ β, 8 Æ α, 9 Æ β.

Πρόκειται για άσκηση εφαρµογής των ιδιοτήτων και των τελεστών των ακολουθιών.

Εάν απαντήσατε σωστά, συγχαρητήρια. Έχετε κατανοήσει πώς χρησιµοποιούνται οι

ακολουθίες. Εάν κάνατε κάποια λάθη, καλύτερα να επαναλάβετε τον τρόπο ορισµού

και τις ιδιότητες των αντίστοιχων τελεστών από την ενότητα 6.8.

7.1

Η ζητούµενη προδιαγραφή προκύπτει προσθέτοντας στο σχήµα CWPhoneDir τα

περιεχόµενα του σχήµατος AddRecord και είναι η εξής:

AAddddRReeccoorrdd

members, members’: √ Employee

telephones, telephones’: Employee ´ Extension

name?: Employee

regw

2 4 1A ¶ ∞ ¡ ∆ ∏ ™ ∂ π ™ ∞ ™ ∫ ∏ ™ ∂ ø ¡ ∞ À ∆ √ ∞ • π √ § √ ° ∏ ™ ∏ ™

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 241

Page 243: pli42a

2 4 2 T Y ¶ I K E ™ ¶ P O ¢ I A ° PA º E ™

newnumber?: Extension

dom telephones Õ members

dom telephones' Õ members'

name? Πmembers

name? Æ newnumber? œ telephones

telephones' = telephones » name? Æ newnumber?

members' = members

Οι δύο εξισώσεις που προστέθηκαν στο τµήµα εξισώσεων δεν αποτελούν προ–συν-

θήκες, αλλά περιγράφουν το αναλλοίωτο της κατάστασης. Τέτοιες εξισώσεις καλύ-

τερα να θεωρούνται ως προ–συνθήκες για όλες τις λειτουργίες που θα οριστούν πάνω

σε µία κατάσταση.

Παρόλο που η άσκηση αυτή ήταν σχετικά εύκολη, σας αξίζουν συγχαρητήρια εάν

µπορέσατε να γράψετε σωστά τη ζητούµενη προδιαγραφή. Σε περίπτωση που κάτι

σας ξέφυγε, µην ανησυχείτε. Σίγουρα πρόκειται για αβλεψία. Βέβαια, καλού–κακού

επαναλάβετε τις ενότητες 7.1 έως 7.3.

7.2

Το τµήµα δηλώσεων του ζητούµενου σχήµατος προκύπτει από την ένωση των προ-

τάσεων που περιέχονται στα τµήµατα δηλώσεων των επιµέρους σχηµάτων. Με παρό-

µοιο τρόπο, το τµήµα εξισώσεων προκύπτει εφαρµόζοντας τους λογικούς τελεστές

της προδιαγραφής στα τµήµατα εξισώσεων των επιµέρους τµηµάτων:

CCoommmmiittAAddddRReeccoorrdd

members, members': √ Employee

telephones, telephones': Employee ´ Extension

name?: Employee

newnumber?: Extension

rep!: Message

dom telephones Õ members

dom telephones' Õ members'

(( name? Œ members Ÿname? Æ newnumber? œ telephones Ÿtelephones' = telephones » name? Æ newnumber? Ÿmembers' = members Ÿ

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 242

Page 244: pli42a

rep! = ‘The requested operation was successfully

executed’)

(name? œ members Ÿmembers' = members Ÿtelephones' = telephones Ÿrep! = ‘This person is not an employee of CHILDWARE’ )

(name? Æ newnumber? Œ telephones Ÿmembers' = members Ÿtelephones' = telephones Ÿrep! = ‘This record already exists in the telephones

database’))

Αυτή η άσκηση ήταν πραγµατικά δυσκολότερη από την Άσκηση 1. Μπράβο εάν τα

καταφέρατε. Σίγουρα γνωρίζετε πώς να γράψετε ένα σχήµα Ζ. Μην απογοητεύεστε εάν

κάνατε κάποια λάθη. Ο συµβολισµός Ζ είναι µεν ισχυρός, αλλά χρειάζεται προσπάθεια

και συγκέντρωση για να µπορέσει κάποιος να τον χρησιµοποιήσει σωστά. Καλύτερα

πριν προχωρήσετε στη µελέτη του τόµου να επαναλάβετε τις ενότητες 7.1 έως 7.4.

Συµφωνείτε, πιστεύω, ότι οι συµβολισµοί ∆ και Ξ και η δυνατότητα συνδυασµού

σχηµάτων µε λογικούς τελεστές προάγουν τη δοµή και την αναγνωσιµότητα των

προδιαγραφών!

7.3

Χρειάζεται να προσέξετε ότι η προ συνθήκη της FindExtension είναι η name?Œ dom

telephones. Όταν αυτή δεν ισχύει, το πρόγραµµα επιστρέφει ένα µήνυµα λάθους:

UUnnkknnoowwnnEEmmppllooyyeeee

• CWPhoneDir

name?: Employee

rep!: Message

name? œ dom telephonesrep! = ‘The name of this employee is unknown’

Τότε, η CommitFindExtension περιγράφεται από την ακόλουθη εξίσωση:

2 4 3A ¶ ∞ ¡ ∆ ∏ ™ ∂ π ™ ∞ ™ ∫ ∏ ™ ∂ ø ¡ ∞ À ∆ √ ∞ • π √ § √ ° ∏ ™ ∏ ™

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 243

Page 245: pli42a

2 4 4 T Y ¶ I K E ™ ¶ P O ¢ I A ° PA º E ™

CommitFindExtension FindExtension Ÿ Success ⁄UnknownEmployee

Η άσκηση αυτή είναι διαφορετική από τις δύο προηγούµενες, καθώς σας ζητά να

γράψετε µια νέα προδιαγραφή Ζ. Εάν τα καταφέρατε, συγχαρητήρια. Η πρόοδος σας

ακολουθεί την εξέλιξη της παρουσίασης της γλώσσας Ζ. Εάν έχετε κάνει λάθη, προ-

σπαθήστε ξανά, ανατρέχοντας στις ενότητες 7.1 έως 7.5.

7.4

Η προ – συνθήκη της FindEmployee είναι η number? Œ ran telephones. Όταν αυτή

δεν ισχύει, το πρόγραµµα επιστρέφει ένα µήνυµα λάθους:

UUnnkknnoowwnnEExxtteennssiioonn

• CWPhoneDir

number?: Extension

rep!: Message

number? œ ran telephones rep! = ‘There is no such number assigned to an employee’

Τότε, η CommitFindEmployee περιγράφεται από την ακόλουθη εξίσωση:

CommitFindEmployee FindEmployee Ÿ Success ⁄UnknownExtension

Η άσκηση αυτή είναι παρόµοια µε την Άσκηση 3. Ο στόχος της είναι να σας βοηθή-

σει να εξοικειωθείτε µε το γράψιµο απλών σχηµάτων Ζ. Εάν απαντήσατε σωστά στην

Άσκηση 3, είναι πολύ πιθανό ότι θα έχετε απαντήσει σωστά και σε αυτή. Εάν όµως

δεν τα καταφέρατε σε καµία από τις δύο ασκήσεις, καλύτερα να επαναλάβετε πιο προ-

σεκτικά τις ενότητες 7.2 έως 7.6 και τη δραστηριότητα 4, πριν προχωρήσετε.

7.5

Οι ζητούµενοι στο ερώτηµα (α) πέντε συσχετισµοί είναι οι ακόλουθοι:

CommitFindPhonesCommand [cmd?: Command | cmd? = fe]

CommitFindNamesCommand [cmd?: Command | cmd? = fn]

CommitRemoveRecordCommand [cmd?: Command | cmd? = rr]

CommitAddEmployeeCommand [cmd?: Command | cmd? = am]

CommitRemoveEmployeeCommand [cmd?: Command | cmd? = rm]

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 244

Page 246: pli42a

και

EXECCommitFindPhones CommitFindPhonesCommand ŸCommitFindPhones

EXECCommitFindNames CommitFindNamesCommand ŸCommitFindNames

EXECCommitRemoveRecord CommitRemoveRecordCommand ŸCommitRemoveRecord

EXECCommitAddEmployee CommitAddEmployeeCommand ŸCommitAddEmployee

EXECCommitRemoveEmployee CommitRemoveEmployeeCommand ŸCommitRemoveEmployee

Μετά από τον ορισµό της αντίδρασης του συστήµατος σε σωστή εντολή, ο Βύρων

προδιαγράφει και τη λειτουργία του συστήµατος όταν ο χρήστης υποβάλλει κάποια

άγνωστη εντολή:

UUnnkknnoowwnnCCoommmmaanndd

• CWPhoneDir

cmd?: Command

rep!: Message

cmd? œ ar, fe, fn, rr, am, rmrep! = ‘This command is unknown’

Στο σηµείο αυτό, ο Βύρων µπορεί να προδιαγράψει τη συνολική εφαρµογή µε ένα

µοναδικό σχήµα:

PhoneDirectory EXECCommitAddRecord ⁄ EXECCommitFindPhones ⁄EXECCommitFindNames ⁄ EXECCommitRemoveRecord ⁄EXECCommitAddEmployee ⁄EXECCommitRemoveEmployee ⁄ UnknownCommand

Η άσκηση αυτή σας βοήθησε να καταλάβετε τον τρόπο συσχέτισης των λειτουργιών

ενός συστήµατος λογισµικού µε τις εντολές της διεπαφής του ή µε το διάλογο µε το

χρήστη. Εάν απαντήσατε σωστά συγχαρητήρια! Εάν δεν τα καταφέρατε, προσπα-

θήστε επαναλαµβάνοντας την ενότητα 7.9 να κατανοήσετε τον τρόπο µε τον οποίο

οι εντολές συσχετίζονται µε τις λειτουργίες (µέσω των ορισµών τύπου Commit),

αλλά και την προδιαγραφή της συµπεριφοράς του λογισµικού, όταν ο χρήστης εκτε-

2 4 5A ¶ ∞ ¡ ∆ ∏ ™ ∂ π ™ ∞ ™ ∫ ∏ ™ ∂ ø ¡ ∞ À ∆ √ ∞ • π √ § √ ° ∏ ™ ∏ ™

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 245

Page 247: pli42a

2 4 6 T Y ¶ I K E ™ ¶ P O ¢ I A ° PA º E ™

λέσει κάποια εντολή (µέσω των ορισµών τύπου Exec).

8.1

Υποθέτουµε αρχικά ότι:

1. η βιβλιοθήκη έχει δανείσει ένα τουλάχιστον βιβλίο, άρα ένα τουλάχιστον τεκ-

µήριο βρίσκεται στη θέση «ευρετήριο» και

2. µια αίτηση επιστροφής έρχεται στο ταµείο επιστροφών, οπότε η αντίστοιχη θέση

περιέχει ένα τεκµήριο.

Η αρχική αυτή κατάσταση εµφανίζεται στο Σχήµα 8.24(α).

™¯‹Ì· 8.24

Αναπαράσταση µε

ΡΝ της λειτουργίας

της βιβλιοθήκης του

ΕΑΠ για τις ανάγκες

της Άσκησης 1

Aίτηση Aίτηση

Παραλαβή Παραλαβή

Eπιστροφή EπιστροφήTοποθέτηση|Bιβλίου

Tοποθέτηση|Bιβλίου

Eυρετήριο Eυρετήριο

Aφαίρεση|Bιβλίου

Aφαίρεση|Bιβλίου

Pάφια Pάφια

Tαµείο|Eπιστροφών

Tαµείο|Eπιστροφών

Tαµείο|Παραλαβών

Tαµείο|Παραλαβών

Tαµείο|Aιτήσεων

Tαµείο|Aιτήσεων

(α) (β)

Τότε, πυροδοτείται η µετάβαση «τοποθέτηση βιβλίου» και:

1. αφαιρείται ένα τεκµήριο από τη θέση «ευρετήριο», δηλαδή, τα δανεισµένα βιβλία

µειώνονται κατά ένα και

2. προστίθεται ένα τεκµήριο στη θέση «ράφια», δηλαδή, το βιβλίο που επιστράφη-

κε τοποθετείται στο ράφι.

Η κατάσταση του συστήµατος µετά την επιστροφή δείχνεται στο Σχήµα 8.24(β).

Η αναπαράσταση αυτή είναι σχετικά απλοϊκή για ένα σύγχρονο σύστηµα βιβλιοθή-

κης. Μελετώντας επιµελώς την ενότητα 8.1 θα µπορέσετε τελικά να τη σχεδιάσετε

(συγχαρητήρια σε όσους και όσες το καταφέρατε µε την πρώτη). Είµαι βέβαιος ότι

θα σας δηµιουργήθηκαν αρκετά ερωτήµατα, όπως:

• Πώς θα αναπαραστήσουµε το δανεισµό και την επιστροφή διαφορετικών βιβλίων;

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 246

Page 248: pli42a

• Τι θα γίνει, εάν διαφορετικά βιβλία βρίσκονται σε διαφορετικά ράφια;

• Πόσο εύκολα µπορεί να µεταβληθεί το σύστηµα ώστε να συµπεριλάβει την περί-

πτωση πρόσληψης δεύτερου υπαλλήλου στο τµήµα δανεισµού;

Τα ΡΝ χαµηλού επιπέδου, όπως θα δούµε στη συνέχεια, έχουν περιορισµένες δυνα-

τότητες αναπαράστασης πολύπλοκων συστηµάτων. Αυτός είναι ο λόγος για τον

οποίο σχεδιάστηκαν τα ΡΝ υψηλού επιπέδου, τα οποία θα συναντήσετε στη συνέ-

χεια του κεφαλαίου. Υποµονή (κι επιµονή), λοιπόν…

8.2

Μελετώντας προσεκτικά όσα αναφέρονται στην Ενότητα 8.3, συµπεραίνουµε τα

εξής:

• Το ΡΝ του Σχήµατος 8.5(α) δεν είναι δίκτυο ασύµµετρης επιλογής, επειδή p3∑∑ = t1,

t2, p4 ∑∑ = t1, t4, p3∑∑ « p4∑∑ ≠ ∆, αλλά το ένα σύνολο δεν είναι υποσύνολο του

άλλου

• Το ΡΝ του Σχήµατος 8.5(β) είναι δίκτυο ασύµµετρης επιλογής, επειδή p3∑∑ = t3

Õ p2∑∑ = t1, t3.

• Το ΡΝ του Σχήµατος 8.5(γ) είναι µηχανή καταστάσεων.

• Το ΡΝ του Σχήµατος 8.5(δ) είναι δίκτυο ελεύθερης επιλογής, καθώς κάθε θέση

έχει µόνο ένα εξερχόµενο βέλος.

• Το ΡΝ του Σχήµατος 8.5(ε) είναι ταυτόχρονα σηµειωµένος γράφος και µηχανή

καταστάσεων.

Αν αναγνωρίσατε τα περισσότερα LLRN, συγχαρητήρια. Είστε παρατηρητικοί και

έχετε κατανοήσει τις λεπτές διαφορές ανάµεσα στα διάφορα µοντέλα. Εάν δεν τα

καταφέρατε, µην απογοητεύεστε! Επαναλάβετε την Ενότητα 8.3 και προσπαθήστε

ξανά, δίνοντας περισσότερη προσοχή σε κάθε γράφο.

8.3

Στο Σχήµα 8.25 έχουµε σχεδιάσει το ΡΝ συνθήκης–γεγονότος που αναπαριστά τη λει-

τουργία εξυπηρέτησης µιας τηλεφωνικής παραγγελίας. Παρατηρήστε ότι στην αρχι-

κή κατάσταση, οι δύο υπάλληλοι, ο Νίκος και ο Άγης, είναι ελεύθεροι, όπως και το

∆ελτίο Παραγγελιών. Όταν γίνει ένα τηλεφώνηµα, οποιοσδήποτε από τους δύο µπο-

ρεί να το εξυπηρετήσει και να καταγράψει την παραγγελία στο ∆ελτίο Παραγγελιών.

Ο λόγος που χρησιµοποιούµε ξεχωριστή θέση για το ∆ελτίο Παραγγελιών (ενώ δεν

κάνουµε το ίδιο για το ∆ελτίο Αποθήκης και τη Φορτωτική) είναι ότι αυτό µοιράζε-

2 4 7A ¶ ∞ ¡ ∆ ∏ ™ ∂ π ™ ∞ ™ ∫ ∏ ™ ∂ ø ¡ ∞ À ∆ √ ∞ • π √ § √ ° ∏ ™ ∏ ™

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 247

Page 249: pli42a

2 4 8 T Y ¶ I K E ™ ¶ P O ¢ I A ° PA º E ™

ται αποκλειστικά ανάµεσα στους δύο υπαλλήλους: Eάν το κατέχει ο ένας, ο άλλος

δεν µπορεί να το χρησιµοποιήσει (για να εξυπηρετήσει µια νέα τηλεφωνική κλήση).

Από τη στιγµή που θα καταγραφεί η παραγγελία στο ∆ελτίο Παραγγελιών, είναι

δυνατή είτε η εξυπηρέτηση µιας νέας κλήσης, είτε η συµπλήρωση των υπόλοιπων

παραστατικών (ο κάθε υπάλληλος συµπληρώνει το δικό του παραστατικό ανεξάρ-

τητα από τον άλλο). Για να τελειώσει η εξυπηρέτηση της παραγγελίας πρέπει να

συµπληρωθούν και τα τρία παραστατικά.

™¯‹Ì· 8.25

Αναπαράσταση

της εξυπηρέτησης

µιας τηλεφωνικής

παραγγελίας για

τις ανάγκες της

Άσκησης 3

O Nίκος Παίρνει|Tην Παραγγέλια

O Nίκος Eίναι|Eλεύθερος

Tα |Παραστατικά|

Tης|Tηλεφωνικής|Παραγγελίας|Eίναι Έτοιµα

O Άγης Παίρνει|Tην Παραγγελία

O Άγης Έιναι|Eλεύθερος

O Άγης Συµπλήρωσε|Tη Φορτωτική

Συµπληρώθηκε |Tο ∆ελτίο|

Παραγγελιών

O Nίκος Έχει Tο |∆ελτίο Παραγγελιών

O Nίκος Eνηµέρωσε|Tο ∆ελτίο Aποθήκης

O Άγης Έχει Tο|∆ελτίο Παραγγελιών

Tο ∆ελτίο|Παραγγελιών|

Eίναι Eλεύθερο

Tηλεφώνηµα

Εάν τα καταφέρατε, συγχαρητήρια! Έχετε κατανοήσει τον τρόπο εφαρµογής των ΡΝ

συνθήκης–γεγονότος στην αναπαράσταση πραγµατικών διεργασιών. Εάν συναντά-

τε δυσκολίες, καλύτερα να επαναλάβετε πιο προσεκτικά την Ενότητα 8.4.

8.4

Στο Σχήµα 8.26, δείχνεται το ΡΝ συνθήκης–γεγονότος που λύνει το πρόβληµα. Στην

αρχή, ο λύκος, η κατσίκα και το λάχανο βρίσκονται στην ίδια όχθη, ενώ ο βαρκάρης

βρίσκεται µόνος του στη βάρκα. Αρχικά ο βαρκάρης φορτώνει την κατσίκα (αφού

ο λύκος, αν και βρίσκεται στην ίδια όχθη µε το λάχανο, δεν ενδιαφέρεται να το φάει).

Προσέξτε ότι αυτή είναι η µοναδική µετάβαση που µπορεί να πυροδοτηθεί από αυτή

την αρχική κατάσταση.

Στη συνέχεια, ο βαρκάρης θα ξεφορτώσει την κατσίκα στην απέναντι όχθη, θα επι-

στρέψει να φορτώσει το λάχανο, το οποίο θα ξεφορτώσει στην απέναντι όχθη, φορ-

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 248

Page 250: pli42a

2 4 9A ¶ ∞ ¡ ∆ ∏ ™ ∂ π ™ ∞ ™ ∫ ∏ ™ ∂ ø ¡ ∞ À ∆ √ ∞ • π √ § √ ° ∏ ™ ∏ ™

Λύκος Kατσίκα Λάχανο

Aρχική Όχθη

Φορτώνει Λύκο Kαι|Aφήνει Kατσίκα

Bαρκάρης Mε|Kατσίκα

Πέρασµα Πέρασµα Πέρασµα

Φορτώνει|Kατσίκα

Φορτώνει|Λάχανο

Bαρκάρης|Mόνος Tου

Bαρκάρης|Mόνος Tου

Aπέναντι|Όχθη

Aφήνει Tο|Λύκο

Aφήνει Tην|Kατσίκα

Aφήνει Tο|Λάχανο Kαι|Φορτώνει|

Tην Kατσίκα

™¯‹Ì· 8.26

Αναπαράσταση µε ΡΝ συνθήκης – γεγονότος της λύσης του προβλήµατος του βαρκάρη που πρέπει να µεταφέρει

το λύκο, την κατσίκα και το λάχανο, για τις ανάγκες της Άσκησης 4

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 249

Page 251: pli42a

2 5 0 T Y ¶ I K E ™ ¶ P O ¢ I A ° PA º E ™

τώνοντας την κατσίκα. Ο βαρκάρης θα µεταφέρει την κατσίκα στην αρχική όχθη, θα

φορτώσει και θα µεταφέρει το λύκο στην απέναντι όχθη και θα επιστρέψει να φορ-

τώσει την κατσίκα.

Για να σχεδιάσετε το ΡΝ, θα πρέπει πρώτα να λύσετε το πρόβληµα (και να καταλά-

βετε ότι η κατσίκα θα πρέπει να µεταφερθεί τρεις φορές), ώστε κάθε φορά στην όχθη

να βρίσκεται ο λύκος µε το λάχανο. Έπειτα, πρέπει να φροντίσετε το ΡΝ να αναπα-

ριστά τη σωστή διαδοχή καταστάσεων. Μελετήστε καλά την Ενότητα 8.4 εάν δυσκο-

λεύεστε να λύσετε την άσκηση, η οποία δεν είναι και εύκολη!

8.5

Έχοντας την εµπειρία την προηγούµενη άσκηση, σχεδιάζουµε το ΡΝ διακριτών τεκ-

µηρίων που φαίνεται στο Σχήµα 8.27.

Προσέξτε ότι χρησιµοποιούµε τα τεκµήρια Β για το Βαρκάρη, Λκ για το Λύκο, Λχ

για το Λάχανο και Κα για την Κατσίκα. Σε κάποια από τα βέλη χρησιµοποιούµε ετι-

κέτα που αναπαριστά δύο τεκµήρια, καθώς ο Βαρκάρης µεταφέρει τα ζώα ή το Λάχα-

νο στην απέναντι όχθη.

Παρόλο που η λύση σας είναι γνωστή, µελετήστε προσεκτικά την Ενότητα 8.5 για να

κατανοήσετε πώς σχεδιάζεται το δίκτυο ΡΝ. Συγχαρητήρια, εάν τα καταφέρατε ήδη.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 250

Page 252: pli42a

2 5 1A ¶ ∞ ¡ ∆ ∏ ™ ∂ π ™ ∞ ™ ∫ ∏ ™ ∂ ø ¡ ∞ À ∆ √ ∞ • π √ § √ ° ∏ ™ ∏ ™

™¯‹Ì· 8.27

Αναπαράσταση µε ΡΝ διακριτών τεκ-

µηρίων της λύσης του προβλήµατος

του βαρκάρη που πρέπει να µεταφέρει

το λύκο, την κατσίκα και το λάχανο,

για τις ανάγκες της Άσκησης 5

B B

B

B

B B

B

B

Λκ Kα|Λχ

Λχ

B Kα

B Kα

B Kα

B Kα

B Λχ

B Λχ

B Λχ

B Λκ

B Λκ

B Λκ

B Kα

B Kα

B Kα

B ΛχB ΛκB Kα

ΛκKα

ΛχΛκ

Kα Kα

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 251

Page 253: pli42a

°ÂÓÈ΋ ‚È‚ÏÈÔÁÚ·Ê›·

[1] Abrial, J. R. (1980), The specification language Z: basic library. Oxford

University PRG.

[2] Bohl, M. (1978), Tools for structured design. SRA: Chicago.

[3] Bowen, J. P. και Hinchey, M. G. (1995), Ten Commandments of Formal

Methods. IEEE Computer, 28(4), σελ 56–63.

[4] Bowen, J. P. και Hinchey, M. G. (1995), Seven more Myths of Formal Methods.

IEEE Software, 12(4), σελ 34–41.

[5] Chen, P. (1976), The entity – relationship model: towards a unified view of data.

ACM Transactions on Database Systems, 1(1), σελ 9–36.

[6] Davis, W. S. (1983), Systems Analysis and Design: a structured approach.

Addison – Wesley

[7] DeMarco, T. (1979), Structured Analysis and System Specification. Prentice –

Hall.

[8] Diller, A. (1994), Z: an introduction to formal methods. J. Wiley & sons, NY.

[9] Dix, J. και Runciman, C., Abstract models of interactive systems. Proceedings

of the British Society Conference on People and Computers (P. Johnson and S.

Cook, eds), σελ 13–22, Cambridge Univ. Press.

[10] Fields, B. (1992), A guide to reading VDM specifications. Technical report, Dept.

of Computer Science, Univ. of Manchester

[11] Fraser, M., Kumar, K. και Vaishnavi, V. (1994), Strategies for incorporating

formal specifications in software development. Communications of the ACM,

37(10), σελ 74–86.

[12] Gerogiannis, V., Kameas, A., και Pintelas, P. (1998), Comparative study and

categorization of High – level Petri Nets. The Journal of Systems and Software,

43, σελ 133–160.

[13] Guttag, J. (1977), Abstract data types and the development of data structures.

Communications of the ACM 20(6), σελ 396–405.

[14] Guttag, J., Horning, J. J., και Wing, J. (1985), The Larch family of specification

languages. IEEE Software 2(5), σελ 24–36.

[15] Guttag, J. και Horning, J. J. (1993), Larch: languages and tools for formal

specification.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 252

Page 254: pli42a

[16] Hall, J. A. (1990), Seven Myths of Formal Methods. IEEE Software, 7(5), σελ

11–19.

[17] Hayes, Ι. (ed) (1987), Specification case studies. Prentice – Hall: London.

[18] Hoare, C. A. R. (1985), Communicating Sequential Processes. Prentice – Hall.

[19] Hull, R. και King, R. (1987), Semantic database modeling: survey, applications

and research issues. ACM Computing Surveys, 19(3), σελ 201–260.

[19] Jackson, M. A. (1983), System Development. Prentice – Hall.

[20] Jones, C. (1990a), Systematic software development using VDM. Prentice – Hall.

[21] Jones, C. (1990b), Systematic software development using VDM – teaching

notes. Prentice – Hall.

[22] Jones, C. και Shaw, R. (eds) (1990c), Case studies in systematic software

development. Prentice – Hall.

[23] Korth, H. και Silberschatz, Α. (1986), Database system concepts. McGraw –

Hill.

[24] Murata, Τ. (1989), Petri Nets: Properties, Analysis and Applications.

Proceedings of the IEEE, 77(4), σελ 541–580.

[25] Orr, Κ. (1981), Structured requirements definition. Ken Orr & Associates.

[26] Pressman, R. S. (1994), Software Engineering: a practitioner’s approach.

McGraw – Hill.

[27] Reisig, W. (1992), A primer in Petri Net design. Springer – Verlag.

[28] Sommerville, I. (1996), Software Engineering. Addison – Wesley.

[29] Warnier, J. D. (1974), Logical construction of programs. Van Nostrand Reinhold.

[30] Warnier, J. D. (1981), Logical construction of systems. Van Nostrand Reinhold.

[31] Yourdon, E. N. (1990), Modern Structured Analysis. Prentice – Hall.

2 5 3¶ ƒ √ ∆ ∂ π ¡ √ ª ∂ ¡ ∏ µ π µ § π √ ° ƒ∞ º π ∞

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 253

Page 255: pli42a

¶ÚÔÙÂÈÓfiÌÂÓË ‚È‚ÏÈÔÁÚ·Ê›·

Το ζήτηµα της εφαρµογής τυπικών µεθόδων προδιαγραφών και σχεδίασης λογισµικού

απασχολεί την κοινότητα των επιστηµόνων και των µηχανικών της πληροφορικής για

αρκετά χρόνια. Συνεπώς, έχουν αναπτυχθεί και εφαρµοστεί πολλές διαφορετικές τεχνι-

κές, για τις οποίες υπάρχει πληθώρα βιβλιογραφικών πηγών. Αρκετές από τις πηγές

αυτές θα τις βρείτε ψάχνοντας σε ηλεκτρονικά βιβλιοπωλεία. Μην παραλείψετε να

επισκεφτείτε και τον ιστοχώρο http://archive.comlab.ox.ac.uk/formal – methods, στον

οποίο θα βρείτε συγκεντρωµένες και ταξινοµηµένες ανά τυπική τεχνική όλες τις πηγές.

Ακόµη, θα βρείτε σε ηλεκτρονική µορφή «κλασικά» άρθρα και βιβλία που έχουν πια

εξαντληθεί και παραποµπές σε άλλες ηλεκτρονικές βιβλιοθήκες.

Μια πολύ καλή εισαγωγή στον κόσµο των τυπικών τεχνικών αποτελούν τα τεύχη

του Σεπτεµβρίου 1990 των επιστηµονικών περιοδικών IEEE Computer, IEEE

Software και IEEE Transactions on Software Engineering, τα οποία περιέχουν συλ-

λογές άρθρων (εισαγωγικών, ερευνητικών και εφαρµοσµένων) σχετικών µε τυπικές

τεχνικές. Άλλα ενδιαφέροντα τεύχη είναι αυτό του Απριλίου 1996 του IEEE

Computer και αυτό του Ιουλίου 1995 του IEEE Software.

Μερικά καλά εισαγωγικά βιβλία είναι (ειδικά τα δύο πρώτα είναι εξαιρετικά) τα εξής:

• Bowen, J. P. και Hinchey, M. G. (eds) (1999), High Integrity System Specification

and Design. FACIT Series, Springer – Verlag, London.

• Frappier, M. και Habrias, H. (2000), Software Specification Methods. FACIT

Series, Springer – Verlag, London.

• Bowen, J. P. και Hinchey, M. G. (eds) (1995), Applications of Formal Methods.

Prentice – Hall International Series in Computer Science.

• Gannon, J. D., Purtilo, J. M. και Zelkowitz, M. V. (1993), Software Specification:

a comparison of Formal Methods. Intellect.

• Nissanke, N. (1999), Formal Specification: techniques and applications.

• Astesiano, E., Kreowski, H. J., και Brieg – Bruckner, B. (eds) (1999), Algebraic

Foundations of System Specification.

Κεφάλαια που αναφέρονται σε τυπικές τεχνικές µπορείτε να βρείτε σε όλα σχεδόν

τα βιβλία Τεχνολογίας Λογισµικού. Παραδείγµατα:

• Fairley, R (1986), Software Engineering Concepts. McGraw – Hill (έµφαση στις

ηµι – δοµηµένες τεχνικές).

• Pressman, R. S. (1994), Software Engineering: a practitioner’s approach. McGraw

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 254

Page 256: pli42a

– Hill (έµφαση σε µεθοδολογίες και Ζ).

• Sommerville, I. (1996), Software Engineering. Addison – Wesley (έµφαση σε

αλγεβρικές προδιαγραφές και Ζ).

• Thimbleby, H. (1990), User Interface Design. ACM Press / Addison – Wesley

(έµφαση στην προδιαγραφή διαλογικών συστηµάτων).

Εκτός από τη βιβλιογραφία που αναφέρεται γενικά στην εφαρµογή των τυπικών τεχνι-

κών, υπάρχει ένα πλήθος βιβλίων και αναφορών που αναφέρονται σε κάθε τεχνική

ξεχωριστά. Η πλειοψηφία τους αναφέρεται στις περισσότερο διαδεδοµένες τεχνικές,

δηλ. τις VDM, Z και Petri Nets. Για τις δύο πρώτες, σας προτείνουµε τα εξής:

• Bowen, J. P. (1996), Formal Specification and Documentation using Z.

International Thomson Computer Press.

• Diller, A. (1994), Z: an introduction to formal methods. J. Wiley & sons, NY.

• Harry, A. (1997), Formal Methods Fact File: Z and VDM.

• Jones, C. (1990), Systematic software development using VDM. Prentice – Hall.

• Potter, B. et al (1996), Introduction to Formal Specification and Z. Prentice – Hall.

• Sheppard, D. (1994), An Introduction to Formal Specification with Z and VDM.

McGraw – Hill.

• Spivey, J. M. (1988), Understanding Z. Cambridge Univ. Press.

Η σχετική µε τα Petri Nets βιβλιογραφία είναι πολύ πλουσιότερη από των υπολοί-

πων τυπικών τεχνικών. Αυτό οφείλεται στη γενικότητα του µοντέλου, η οποία του

προσδίδει ικανότητα προσαρµογής σε κάθε κατηγορία προβληµάτων, µε αποτέλε-

σµα να γνωρίζει µεγάλη διάδοση. Μερικά καλά άρθρα επισκόπησης είναι τα:

• Gerogiannis, V., Kameas, A., και Pintelas, P. (1998), Comparative study and

categorization of High – level Petri Nets. The Journal of Systems and Software,

43, σελ 133–160.

• Murata, Τ. (1989), Petri Nets: Properties, Analysis and Applications. Proceedings

of the IEEE, 77(4), σελ 541–580.

Καλά εισαγωγικά βιβλία είναι:

• Peterson, L (1981), Petri Net theory and the Modeling of Systems. Prentice – Hall.

• Reisig, W. (1992), A primer in Petri Net design. Springer – Verlag.

Εάν ενδιαφέρεστε για περισσότερο ειδικά άρθρα, στα οποία περιγράφονται συγκε-

2 5 5¶ ƒ √ ∆ ∂ π ¡ √ ª ∂ ¡ ∏ µ π µ § π √ ° ƒ∞ º π ∞

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 255

Page 257: pli42a

2 5 6 T Y ¶ I K E ™ ¶ P O ¢ I A ° PA º E ™

κριµένα µοντέλα ΡΝ και η εφαρµογή τους, µπορείτε να ανατρέξετε στα πρακτικά των

διεθνών συνεδρίων που γίνονται µε αντικείµενο τα ΡΝ και σε τεύχη των περιοδικών:

• Advances in Petri Nets

• IEEE Transactions on Software Engineering

• IEEE Transactions on Systems, Man and Cybernetics

• IEEE Transactions on Computers

• Microprocessing and Microprogramming

Tρία βασικά βιβλία που περιγράφουν τυπικές τεχνικές προδιαγραφής ταυτόχρονων

συστηµάτων είναι τα εξής:

• Hoare, C. A. R. (1985), Communicating Sequential Processes. Prentice – Hall.

• Milner, R (1986), A calculus of Communicating Systems. Lecture Notes in

Computer Science vol. 92, Springer – Verlag.

• Schneider, S. (1999), Concurrent and Real – Time Systems: The CSP approach.

J. Wiley and sons.

Για τις υπόλοιπες τεχνικές, σας προτείνουµε:

• Dix, A. J. (1991), Formal Methods for Interactive Systems. Academic Press.

• Goguen, J. (2000), Software Engineering with OBJ – Algebraic Specification in

Action.

• Guttag, J. και Horning, J. J. (1993), Larch: languages and tools for formal

specification.

Η ανάγκη εφαρµογής ή όχι τυπικών τεχνικών έχει προκαλέσει πολλές συζητήσεις

στην κοινότητα των µηχανικών λογισµικού. Στο τελευταίο κεφάλαιο του τόµου συνο-

ψίσαµε τις κυριότερες θέσεις που υποστηρίζονται εκατέρωθεν. Περισσότερες από-

ψεις θα βρείτε σε άρθρα όπως τα ακόλουθα:

• Bowen, J. P. και Hinchey, M. G. (1995), Ten Commandments of Formal Methods.

IEEE Computer, April 1995, σελ 56–63.

• Hall, J. A. (1990), Seven Myths of Formal Methods. IEEE Software, 7(5), σελ

11–19.

• Bowen, J. P. και Hinchey, M. G. (1995), Seven more Myths of Formal Methods.

IEEE Software, July 1995, σελ 34–41.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 256

Page 258: pli42a

• Gibbs, W.W. (1994), Software’s Chronic Crisis. Scientific American 271(3) σελ

86 –95.

• Fraser, M., Kumar, K. και Vaishnavi, V. (1994), Strategies for incorporating formal

specifications in software development. Communications of the ACM, 37(10), σελ

74–86.

• Saiedian, H. (ed) (1996), An Invitation to Formal Methods. IEEE Computer, 29(4),

σελ 16–30.

• Larsen, P. G., Fitzagerlad, J. και Brookes, T. (1996), Applying Formal Specification

in Industry. IEEE Software, 13(7), σελ 48–56.

Γενικά, υπάρχουν αρκετά επιστηµονικά περιοδικά που δηµοσιεύουν άρθρα για τυπι-

κές τεχνικές. Ψάξτε για παράδειγµα στα εξής:

• Acta Informatica

• Communications of the ACM

• ACM Transactions on Software Engineering and Methodology

• Journal of the ACM

• The Computer Journal

• Formal Aspects of Computing

• Formal Methods in Systems Design

• IEE Proceedings / Software

• Information Processing Letters

• Journal of Systems and Software

• IEEE Software

• IEEE Computer

• IEEE Transactions on Software Engineering

… και στα πρακτικά των πολλών επιστηµονικών συνεδρίων που λαµβάνουν χώρα

διεθνώς γύρω από την εφαρµογή των τυπικών τεχνικών, όπως:

• Formal Methods Europe (πρώην VDM Symposium)

• Z User Meeting

• Workshop on Industrial – Strength Formal Specification Techniques

2 5 7¶ ƒ √ ∆ ∂ π ¡ √ ª ∂ ¡ ∏ µ π µ § π √ ° ƒ∞ º π ∞

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 257

Page 259: pli42a

°ÏˆÛÛ¿ÚÈ

Αγνό ΡΝ: Bλ. ΡΝ αγνό.

Αλγεβρική τυπική µέθοδος: Bλ. Τυπική µέθοδος αλγεβρική.

Αξιωµατική τυπική µέθοδος: Bλ. Τυπική µέθοδος αξιωµατική.

Απαιτήσεις (requirements): Συντάσσονται στα αρχικά στάδια του κύκλου ανάπτυ-

ξης και περιγράφουν (συνήθως από τη σκοπιά του χρήστη) τις λειτουργίες που θα

πρέπει να επιτελεί το λογισµικό, τις συνθήκες ή το περιβάλλον λειτουργίας και τους

περιορισµούς λειτουργίας του. Καταγράφονται ως αποτέλεσµα της ανάλυσης απαι-

τήσεων και συγκροτούνται σε ενιαίο κείµενο κατά τον ορισµό των απαιτήσεων.

Γνώρισµα (trait): Πρόκειται για το βασικό αντικείµενο των προδιαγραφών που γρά-

φονται σε γλώσσα Larch. Περιλαµβάνει το όνοµα του τύπου που προδιαγράφει,

και τα τµήµατα Includes (όπου αναφέρονται άλλοι τύποι που χρησιµοποιούνται),

Introduces (όπου δηλώνεται ένα σύνολο τελεστών) και Asserts (όπου καταγρά-

φονται εξισώσεις που περιγράφουν τη συµπεριφορά των τελεστών).

∆ιάγραµµα οντοτήτων – συσχετίσεων (entity – relationship diagram): ∆ιαγραµ-

µατικό εργαλείο που χρησιµοποιείται για να αναπαραστήσει τις οντότητες που

αποτελούν τα δεδοµένα του λογισµικού, τα κατηγορήµατα που περιγράφουν κάθε

οντότητα και τις συσχετίσεις ανάµεσα στις οντότητες.

∆ιάγραµµα ροής δεδοµένων (data flow diagram): ∆ιαγραµµατικό εργαλείο αναπα-

ράστασης των λειτουργιών ενός λογισµικού µε βάση τη ροή των δεδοµένων του.

Κάθε ροή δεδοµένων προέρχεται από κάποια πηγή, υφίσταται επεξεργασία από

µία ή περισσότερες διεργασίες και αποθηκεύεται σε µία αποθήκη δεδοµένων ή

εξέρχεται από µία καταβόθρα ή αλλιώς προορισµό.

∆ιάγραµµα ροής συστήµατος (system flowchart): ∆ιαγραµµατικό εργαλείο το οποίο

χρησιµοποιεί διαφορετικά σύµβολα για να περιγράψει τα τµήµατα ενός λογισµι-

κού, τον τρόπο µε τον οποίο χρησιµοποιείται το καθένα και τη ροή ελέγχου ανά-

µεσα σε αυτά.

∆ιάγραµµα Jackson: ∆ιαγραµµατικό εργαλείο περιγραφής της αρχιτεκτονικής ενός

συστήµατος λογισµικού, της συσχέτισης µεταξύ των τµηµάτων που το αποτελούν

και της ακολουθίας εκτέλεσης των διαφόρων λειτουργιών.

∆ιάγραµµα Warnier – Orr: Eργαλείο αναπαράστασης της ιεραρχικής δοµής των

δεδοµένων, και µέσω αυτής, της λογικής ροής του προγράµµατος και της συνο-

λικής δοµής του λογισµικού.

2 5 8 T Y ¶ I K E ™ ¶ P O ¢ I A ° PA º E ™

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 258

Page 260: pli42a

∆ίκτυο διακριτών τεκµηρίων (individual tokens net): ∆ίκτυο θέσης – µετάβασης,

στο οποίο τα τεκµήρια διαχωρίζονται µεταξύ τους, ανάλογα µε το αντικείµενο

που αναπαριστούν, και κάθε βέλος επιγράφεται, ανάλογα µε το είδος των τεκ-

µηρίων στα οποία επιτρέπεται να ρέουν πάνω του.

∆ίκτυο ελεύθερης επιλογής (free choice net): Ένα σύνηθες ΡΝ, στο οποίο κάθε

βέλος που συσχετίζεται µε µια θέση είναι είτε το µοναδικό εισερχόµενο, είτε το

µοναδικό εξερχόµενο βέλος που συσχετίζεται µε µια µετάβαση.

∆ίκτυο συνθήκης – γεγονότος (condition – event net): ΡΝ υψηλού επιπέδου, στο

οποίο οι µεταβάσεις αναπαριστούν γεγονότα και οι θέσεις αναπαριστούν συνθή-

κες που σχετίζονται µε τα γεγονότα. Κάθε θέση µπορεί να περιέχει το πολύ ένα

τεκµήριο. Ένα τεκµήριο σε µια θέση δηλώνει ότι η αντίστοιχη συνθήκη ικανο-

ποιείται, ενώ η απουσία τεκµηρίου δηλώνει ότι η συνθήκη δεν ικανοποιείται στη

συγκεκριµένη σηµείωση.

∆ιοχέτευση σχηµάτων (schema piping): Tελεστής της γλώσσας Ζ, ο οποίος παρά-

γει ένα νέο σχήµα από δύο σχήµατα Α και Β, συσχετίζοντας τις µεταβλητές εξό-

δου του Α µε τις µεταβλητές εισόδου του Β.

∆οµηµένη γλώσσα (structured language): Yποσύνολο των λέξεων µιας φυσικής

γλώσσας που χρησιµοποιείται για την περιγραφή αλγορίθµων. Πλεονεκτεί της

φυσικής γλώσσας στην έλλειψη αµφισηµίας, αλλά µειονεκτεί έναντι του ψευδο-

κώδικα στη λεπτοµέρεια και ακρίβεια της περιγραφής.

Επεξήγηση (annotation): Προδιαγραφή ενός προγράµµατος Ada, η οποία αποτε-

λείται από δύο τµήµατα Anna: την περιγραφή της σφαιρικής συµπεριφοράς του

προγράµµατος και την τοπική επεξήγηση των τµηµάτων του. Τα τµήµατα ενός

προγράµµατος Ada είναι: αντικείµενα, τύποι, εντολές, υπο προγράµµατα, πακέ-

τα, δοµή προγράµµατος, εξαιρέσεις και γενικευµένες ενότητες.

Επικοινωνίες (communications): Eιδική κατηγορία γεγονότων της γλώσσας CSP.

Μία επικοινωνία περιγράφεται από ένα ζεύγος c.v, όπου c είναι το όνοµα του

καναλιού επικοινωνίας και v είναι το περιεχόµενο του µηνύµατος που ανταλ-

λάσσεται.

Επιλογείς (selectors): Συναρτήσεις VDM, οι οποίες, όταν εφαρµοστούν στην τιµή

ενός σύνθετου τύπου, επιστρέφουν την τιµή ενός από τα πεδία του.

Επίπεδο γλώσσας υλοποίησης (Larch Interface Language – LIL): Περιέχει προ-

διαγραφές του λογισµικού που έχουν σχεδιαστεί µε βάση τη γλώσσα στην οποία

αυτό θα υλοποιηθεί.

2 5 9¶ ƒ √ ∆ ∂ π ¡ √ ª ∂ ¡ ∏ µ π µ § π √ ° ƒ∞ º π ∞

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 259

Page 261: pli42a

2 6 0 T Y ¶ I K E ™ ¶ P O ¢ I A ° PA º E ™

Επίπεδο κοινής γλώσσας (Larch Shared Language – LSL): Περιέχει προδιαγραφές

του λογισµικού ανεξάρτητες από τη γλώσσα στην οποία αυτό θα υλοποιηθεί.

Θέση (place): Οι παθητικές οντότητες σε ένα ΡΝ, οι οποίες έχουν τη δυνατότητα να

αποθηκεύουν τεκµήρια και να βρίσκονται σε διαφορετικές καταστάσεις. Συµβο-

λίζονται µε ένα κύκλο.

Θεωρία (theory): Oρίζεται από ένα γνώρισµα της Larch και περιλαµβάνει τους ισχυ-

ρισµούς του γνωρίσµατος, τα γνωστά αξιώµατα της λογικής και όλα όσα συνε-

πάγονται από αυτά.

Ιχνος (trace): H ακολουθία των παρατηρήσιµων καταστάσεων από τις οποίες θα

«περάσει» ένα σύστηµα µέχρι να τερµατιστεί (ή να µην τερµατιστεί) η λειτουρ-

γία του. Σύµφωνα µε την τεχνική CSP, αναπαρίσταται µε µία πεπερασµένη ακο-

λουθία συµβόλων από το αλφάβητο µιας διεργασίας Ρ, η οποία καταγράφει την

ακολουθία των γεγονότων που διαχειρίστηκε η Ρ µέχρι κάποια συγκεκριµένη χρο-

νική στιγµή.

Καθολικός τελεστής: Bλ. Τελεστής καθολικός.

Κατασκευαστική συνάρτηση (make function): Συνάρτηση VDM η οποία, όταν

εφαρµοστεί στις τιµές ενός πεδίου ενός σύνθετου τύπου εγγραφών, επιστρέφει

µια τιµή του σύνθετου τύπου.

Κατηγoρηµατικός λογισµός (predicate calculus): Πρόκειται για επέκταση του προ-

τασιακού λογισµού, η οποία επιτρέπει τη χρήση µεταβλητών στη θέση όρων. Μία

πρόταση του κατηγορηµατικού λογισµού καλείται «κατηγόρηµα».

Λειτουργία (operation): Mια συνάρτηση VDM στην οποία έχει προστεθεί αναπα-

ράσταση της κατάστασης. Περιλαµβάνει τα τµήµατα: κεφαλίδα, ext (όπου δηλώ-

νονται οι εξωτερικές µεταβλητές τις οποίες η λειτουργία µπορεί να διαβάσει ή να

γράψει), pre, post και το κυρίως τµήµα.

Λεξικό δεδοµένων (data dictionary): Σύνολο από καρτέλες περιγραφής των δεδο-

µένων που χειρίζεται ένα σύστηµα. Περιλαµβάνεται µια καρτέλα για κάθε αντι-

κείµενο δεδοµένων, απλό ή σύνθετο, στο οποίο περιγράφεται το όνοµα και ο

τύπος του αντικειµένου, η διεργασία που το παράγει, ο τρόπος σύνθεσής του από

απλούστερα αντικείµενα (εάν είναι σύνθετο), οι διεργασίες που το χρησιµοποι-

ούν ή το καταναλώνουν, τα σηµεία όπου αυτό αποθηκεύεται κ.ά.

Λογισµός κατηγορηµατικός: Bλ. Κατηγορηµατικός λογισµός.

Λογισµός προτασιακός: Bλ. Προτασιακός λογισµός.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 260

Page 262: pli42a

Μέθοδος τυπική: Bλ. Τυπική µέθοδος.

Μετάβαση (transition): Οι ενεργητικές οντότητες σε ένα ΡΝ, οι οποίες είναι ικανές

να παράγουν, µεταφέρουν ή τροποποιήσουν τεκµήρια. Συµβολίζονται µε ένα

ορθογώνιο ή δύο παράλληλες γραµµές. Μια µετάβαση χωρίς θέσεις εισόδου

καλείται «πηγαία», ενώ µια µετάβαση χωρίς θέσεις εξόδου καλείται «απορρο-

φητική».

Μηχανή καταστάσεων (state machine): Ένα σύνηθες ΡΝ, στο οποίο κάθε µετάβα-

ση t έχει ακριβώς µια θέση εισόδου και µια θέση εξόδου

Πεδίο ορισµού (domain): Bλ. Συνάρτηση.

Πεδίο τιµών (range): Bλ. Συνάρτηση.

Πίνακας αλήθειας (truth table): Πίνακας µε τον οποίο υπολογίζεται η τελική τιµή

µιας λογικής πρότασης µε βάση τις τιµές των όρων της και τους πίνακες αλήθει-

ας των τελεστών της. Οι στήλες του πίνακα αντιστοιχούν στους όρους της πρό-

τασης, ενώ οι γραµµές του είναι τόσες ώστε να αναπαρίστανται όλοι οι δυνατοί

συνδυασµοί τιµών των όρων αυτών. ∆ίπλα σε κάθε συνδυασµό τιµών, αναγρά-

φεται η τιµή της πρότασης.

Πολυ – σύνολο (multi – set): Σύνολο στο οποίο επιτρέπονται περισσότερες από µια

εµφανίσεις του ίδιου στοιχείου, χωρίς η σειρά εµφάνισης να έχει σηµασία.

Προδιαγραφές των απαιτήσεων (specification of requirements): Προκύπτουν από

τις απαιτήσεις και περιγράφουν τον τρόπο µε τον οποίο θα σχεδιαστεί και υλο-

ποιηθεί το λογισµικό ώστε να τις ικανοποιεί. Οι τεχνικές παραγωγής των προ-

διαγραφών, ανάλογα µε το βαθµό αυστηρότητας της περιγραφής του λογισµικού,

διακρίνονται σε τυπικές, ηµι – τυπικές και µη – τυπικές.

Προτασιακός λογισµός (propositional calculus): Περιλαµβάνει εξισώσεις (προτά-

σεις) καθεµία από τις οποίες µπορεί τελικά να λάβει µια από τις τιµές «αληθής»

ή «ψευδής». Οι προτάσεις συντίθενται από όρους (terms) και σχεσιακούς ή λογι-

κούς τελεστές. Οι πέντε βασικοί λογικοί τελεστές είναι: άρνηση, σύζευξη, διά-

ζευξη, συνεπαγωγή, ισοδυναµία. Οι τιµές µιας πρότασης υπολογίζονται κατα-

σκευάζοντας τον πίνακα αλήθειας της πρότασης, µε βάση τους πίνακες αλήθει-

ας των επιµέρους τελεστών.

Προτασιακός τελεστής: Bλ. Τελεστής προτασιακός.

Πυροδότηση (firing): H πυροδότηση µιας µετάβασης t προκαλεί µεταβολή της

σηµείωσης του ΡΝ, κατά την οποία «καταναλώνεται» ένας αριθµός από τα τεκ-

2 6 1° § ø ™ ™ ∞ ƒ π

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 261

Page 263: pli42a

2 6 2 T Y ¶ I K E ™ ¶ P O ¢ I A ° PA º E ™

µήρια που βρίσκονται στις θέσεις εισόδου της t και «παράγεται» ένας αριθµός

από τεκµήρια στις θέσεις εξόδου της t, σύµφωνα µε τον κανόνα πυροδότησης.

ΡΝ αγνό (pure PN): ΡΝ χωρίς αυτο – ανακυκλώσεις.

ΡΝ σύνηθες (ordinary PN): ΡΝ στο οποίο το βάρος της κάθε πλευράς είναι 1.

Σηµειωµένος γράφος (marked graph): Ένα σύνηθες ΡΝ, στο οποίο κάθε θέση p έχει

ακριβώς µια µετάβαση εισόδου και µια µετάβαση εξόδου.

Σηµείωση (marking): H κατανοµή των τεκµηρίων στις θέσεις ενός ΡΝ. Η κατά-

σταση του συστήµατος αναπαρίσταται µε τη σηµείωση και αλλάζει όταν αλλά-

ξει η κατανοµή αυτή. Κάθε αλλαγή κατάστασης συµβαίνει ως αποτέλεσµα της

ενεργοποίησης (πυροδότησης) µιας µετάβασης, οπότε προκύπτει µια νέα σηµεί-

ωση του ΡΝ. Η αναπαράσταση της αρχικής κατάστασης του ΡΝ καλείται «αρχι-

κή σηµείωση».

Συµπερίληψη σχηµάτων (schema inclusion): Aναπαράσταση προδιαγραφών Ζ, µε

την οποία µπορούµε να συµπεριλάβουµε ένα σχήµα Α στο τµήµα δηλώσεων ενός

άλλου σχήµατος Β.

Συνάρτηση (function): Πρόκειται για µια αντιστοίχηση ανάµεσα σε δύο σύνολα: το

πεδίο ορισµού (το οποίο περιέχει όλες τις τιµές στις οποίες είναι δυνατό να εφαρ-

µοστεί η συνάρτηση) και το πεδίο τιµών (το οποίο περιέχει όλες τις τιµές που

προκύπτουν εφαρµόζοντας τη συνάρτηση σε κάθε τιµή του πεδίου ορισµού).

Οταν το πεδίο τιµών είναι το σύνολο Αληθής, Ψευδής, τότε η συνάρτηση

καλείται «λογική».

Συνάρτηση VDM (VDM function): Προδιαγραφή µιας λειτουργίας ενός λογισµι-

κού σε γλώσσα VDM. Περιλαµβάνει τα τµήµατα: όνοµα και υπογραφή, pre (προ

– συνθήκες), post (µετα – συνθήκες) και το κυρίως τµήµα, όπου δηλώνονται οι

υπολογισµοί που εκτελεί η λειτουργία.

Σύνηθες ΡΝ: Bλ. ΡΝ σύνηθες.

Σύνθεση σχηµάτων (schema composition): Tελεστής της γλώσσας Ζ, µε τον οποίο

οι µεταβλητές της προκύπτουσας κατάστασης ενός σχήµατος Α συσχετίζονται µε

τις µεταβλητές της αρχικής κατάστασης ενός σχήµατος Β.

Σύνολο (set): Mη διατεταγµένη συλλογή αντικειµένων, τα οποία ικανοποιούν κάποια

ιδιότητα. Ένα σύνολο περιγράφεται είτε απαριθµώντας τα µέλη του, είτε περι-

γράφοντας τις ιδιότητες που αυτά ικανοποιούν. Στα σύνολα ορίζονται οι εξής

βασικές πράξεις: ένωση, τοµή, διαφορά, συµµετρική διαφορά.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 262

Page 264: pli42a

Σχήµα (schema): Tο βασικό αντικείµενο των προδιαγραφών που γράφονται σε

γλώσσα Ζ. Κάθε σχήµα περιλαµβάνει: τίτλο, τµήµα δηλώσεων (δηλώνονται όλα

τα αντικείµενα που θα χρησιµοποιηθούν) και τµήµα εξισώσεων (καταγράφονται

οι εξισώσεις που περιγράφουν τη συµπεριφορά του αντικειµένου). Βλ. ακόµη διο-

χέτευση σχηµάτων, συµπερίληψη σχηµάτων, σύνθεση σχηµάτων.

Τεκµήριο (token): Aναπαράσταση των αντικειµένων που µεταχειρίζεται το λογι-

σµικό. Τα τεκµήρια παράγονται από τις µεταβάσεις και αποθηκεύονται στις

θέσεις. Κάθε τεκµήριο συµβολίζεται συνήθως µε ένα µαύρο στίγµα.

Τελεστής καθολικός (universal operator): Περιγράφει ιδιότητες που ισχύουν

«για κάθε» αντικείµενο ενός συνόλου (σύµβολο: "). Π.χ. " x Œ Z: x + 1 > x

Τελεστής προτασιακός (propositional operator): Bλ. Προτασιακός λογισµός.

Τελεστής υπαρξιακός (existential operator): Περιγράφει ιδιότητες τις οποίες «υπάρ-

χουν ορισµένα» αντικείµενα ενός συνόλου που τις ικανοποιούν (σύµβολο: ").

Π.χ. $ x Œ Z: x2 = y2 + z2

Τυπική µέθοδος (formal method): Mέθοδος που χρησιµοποιεί µαθηµατικά εργαλεία

για να µετασχηµατίσει τις απαιτήσεις σε τυπικές προδιαγραφές. Περιλαµβάνει

ένα σύνολο τεχνικών περιγραφής των ιδιοτήτων του συστήµατος και ένα θεω-

ρητικό µοντέλο µε το οποίο είναι δυνατή η επαλήθευση των ιδιοτήτων αυτών.

Τυπικές προδιαγραφές (formal specification): Προδιαγραφές των απαιτήσεων που

βασίζονται σε µαθηµατικά εργαλεία για να συγκροτήσουν µια αυστηρή αφαιρε-

τική περιγραφή του λογισµικού.

Τυπική µέθοδος αλγεβρική (algebraic formal method): Xρησιµοποιεί εξισώσεις για

να περιγράψει τις ιδιότητες του λογισµικού (π.χ. Clear, ActOne). Οι αλγεβρικές

προδιαγραφές περιγράφουν ένα τµήµα λογισµικού µε βάση τις σχέσεις ανάµεσα

στις λειτουργίες που εκτελεί το λογισµικό.

Τυπική µέθοδος αξιωµατική (axiomatic formal method): Xρησιµοποιεί εργαλεία

κατηγορηµατικού λογισµού για να περιγράψει τις λειτουργίες του λογισµικού

(π.χ. Larch, Anna). Οι αξιωµατικές προδιαγραφές περιγράφουν κάθε λειτουργία

µε βάση ένα σύνολο συνθηκών που πρέπει να ισχύουν πριν και µετά την εκτέλε-

σή της (προ συνθήκες και µετα συνθήκες, αντίστοιχα).

Τυπική µέθοδος βασισµένη στις ιδιότητες (property – based formal method): Περι-

γράφει έµµεσα τη συµπεριφορά του λογισµικού, περιγράφοντας τις ιδιότητες που

αυτό πρέπει να ικανοποιεί.

2 6 3° § ø ™ ™ ∞ ƒ π

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 263

Page 265: pli42a

2 6 4 T Y ¶ I K E ™ ¶ P O ¢ I A ° PA º E ™

Τυπική µέθοδος βασισµένη σε µαθηµατικό µοντέλο (model – based formal

method): Περιγράφει άµεσα τη συµπεριφορά του λογισµικού κατασκευάζοντας

ένα µαθηµατικό µοντέλο του και χρησιµοποιώντας µαθηµατικά εργαλεία.

Υπαρξιακός τελεστής: Bλ. Τελεστής υπαρξιακός.

Ψευδοκώδικας (pseudocode): Tεχνική λεκτικής περιγραφής αλγορίθµων, η οποία

χρησιµοποιεί συντακτικές δοµές γλωσσών προγραµµατισµού, συµβολισµό από

τη Μαθηµατική Λογική και ένα αυστηρά καθορισµένο υποσύνολο των λέξεων

µιας φυσικής γλώσσας. Συνδυάζει, λοιπόν, την ακρίβεια και αυστηρότητα των

γλωσσών προγραµµατισµού µε την εκφραστική δύναµη της φυσικής γλώσσας.

Ο ψευδοκώδικας δεν είναι εκτελέσιµος από τον υπολογιστή.

K·Ì¤·˜ (264Û.) 18/3/2004 11:43 ™ÂÏ›‰· 264