Βιβλίο Γενεθλίων Λειτουργίες: Προσθήκη, Εύρεση, Υπενθύμιση, Αρχικοποίηση
Βασικοί τύποι: [ΝΑΜΕ] [DATE] Η ακριβής μορφή ονομάτων και ημερομηνιών δεν ενδιαφέρει (06/03, 03/06, March 6th etc) Καθορισμός βοηθητικών τύπων και συναρτήσεων
Καθορισμός κατάστασης του συστήματος με σχήμα Z Όνομα σχήματος Κατάσταση συστήματος (μεταβλητές δηλωμένων τύπων) Σχέσεις μεταξύ τιμών των μεταβλητών (παραμένουν αληθείς σε όλες τις Καταστάσεις και διατηρούνται από όλες τις λειτουργίες) known είναι το δυναμοσύνολο των ονομάτων με αποθηκευμένες ημερομηνίες birthday είναι μία μερική συνάρτηση που αντιστοιχείζει ορισμένα ονόματα στις αντίστοιχες ημερομηνίες γέννησης Η σχέση μεταξύ known και birthday είναι η αναλλοίωτη συνθήκη του συστήματος: το σύνολο known αντιστοιχεί στο πεδίο ορισμού (dom) της συνάρτησης birthday
Πιθανή κατάσταση του συστήματος known = {Susy, Mike, John} birthday = {John 25 March, Susy 20 Dec, Mike 20 Dec } H αναλλοίωτη συνθήκη known = dom birthday ισχύει. δεν υπάρχει όριο στον αριθμό των αποθηκευμένων ημερομηνιών δεν περιγράφεται η σειρά των καταχωρήσεων κάθε άτομο έχει μόνο μία ημερομηνία γενεθλίων (η birthday είναι συνάρτηση) δύο άτομα μπορούν να έχουν την ίδια ημερομηνία γενεθλίων
Καθορισμός των λειτουργιών του συστήματος Ορισμένες λειτουργίες τροποποιούν την κατάσταση του συστήματος και άλλες την αφήνουν αναλλοίωτη Ορισμένες λειτουργίες έχουν είσοδο και/ή έξοδο
Προσθήκη της ημερομηνίας γενεθλίων ενός ατόμου το οποίο δεν βρίσκεται στο βιβλίο Αυτό το σχήμα τροποποιεί την κατάσταση: - περιγράφει την κατάσταση πριν τη λειτουργία (μη τονισμένες μεταβλητές) - περιγράφει την κατάσταση μετά τη λειτουργία (τονισμένες μεταβλητές) - Σε αυτό το σχήμα δεν περιγράφεται τι θα γίνει αν δεν πληρείται η προ-συνθήκη Όνομα λειτουργίας (σχήμα) εισαγωγή σχήματος είσοδος λειτουργίας προ-συνθήκη επέκταση της συνάρτησης (αν η προ-συνθήκη πληρείται)
Προσθήκη της ημερομηνίας γενεθλίων ενός ατόμου το οποίο δεν βρίσκεται στο βιβλίο Η λειτουργία AddBirthday αναμένεται να επεκτείνει το σύνολο των γνωστών ονομάτων με το νέο όνομα: known’ = known {name ?} Η προδιαγραφή για την AddBirthday μπορεί να χρησιμοποιηθεί για να αποδειχθεί η παραπάνω πρόταση: Η απόδειξη τέτοιων προτάσεων εξασφαλίζει ότι οι προδιαγραφές είναι ορθές Σε μεγάλο βαθμό η συμπεριφορά του συστήματος μπορεί να αναλυθεί χωρίς αυτό να υλοποιηθεί !
Εύρεση της ημερομηνίας γενεθλίων ενός ατόμου γνωστού στο σύστημα Αυτό το σχήμα αφήνει την κατάσταση του συστήματος αναλλοίωτη και είναι ισοδύναμο με:
Εύρεση του ποιος έχει γενέθλια σε μία συγκεκριμένη ημέρα Αρχική κατάσταση του συστήματος: cards! είναι ένα σύνολο ονομάτων (στους οποίους πρέπει να σταλεί κάρτα !!!) known = υποδηλώνει ότι η birthday είναι επίσης κενή
Links for Z language: The Z Notation: A reference manual Example and Definitions One Line Editor example The Z Notation (Oxford) Community Z Tools Project (Sourceforge) Z Notation Examples Introduction to Z