Φροντιστήριο 7. Ημερομηνία: 15/12/2006 Θεματική Ενότητα: OCL

Σχετικά έγγραφα
Διάθρωση. HΥ351 Ανάλυση και Σχεδίαση Πληροφοριακών Συστημάτων Information Systems Analysis and Design

Φροντιστήριο 5. Ημερομηνία: 01/12/2006 Θεματική Ενότητα: Μοντελοποίηση Συμπεριφοράς Θέμα: Διαγράμματα αλληλεπίδρασης και καταστάσεων

Περίπτωση Χρήσης Use case

Φροντιστήριο 3. <logo image> Ημερομηνία: Παρασκευή 10/11/2006 Θεματική Ενότητα: Activity Diagrams

Περιεχόμενα και Διάρθρωση. Interaction Diagrams

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα μέσα σε αντικείμενα Αντικείμενα ως επιστρεφόμενες τιμές Αντικείμενα με πίνακες

Βασικές Έννοιες Δοµών Δεδοµένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Διαγράμματα Αλληλεπίδρασης. Διαγράμματα Ακολουθίας Διαγράμματα Συνεργασίας

Εισαγωγή στον Προγραμματισμό

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Τεχνολογία Λογισμικού & Ανάλυση Συστημάτων 21/11/2016. Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια.

Από τη UML στον Κώδικα. Μέρος Β

Διάλεξη 5η: Εντολές Επανάληψης

Θέματα εξετάσεων. Τύπος: B

Ενδεικτικές λύσεις ασκήσεων διαγραμμάτων κλάσης (2 ο Μέρος)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα

3 Αλληλεπίδραση Αντικειμένων

οµές (structures) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Πίνακες δοµών, δείκτες σε δοµές, και αυτοαναφορικές δοµές.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ ΥΛΟΠΟΙΗΣΗ ΣΤΟΙΧΕΙΩΝ ΑΝΑΛΥΣΗΣ UML ΜΕ JAVA. Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική

Initialize each person to be free. while (some man is free and hasn't proposed to every woman) { Choose such a man m w = 1 st woman on m's list to

Διαγράμματα UML στην Ανάλυση. Μέρος Γ Διαγράμματα Επικοινωνίας Διαγράμματα Ακολουθίας Διαγράμματα Μηχανής Καταστάσεων

HY380 Αλγόριθμοι και πολυπλοκότητα Hard Problems

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Πληροφοριακά Συστήματα Διοίκησης Ενότητα 6: Διαγράμματα Κλάσης (2ο Μέρος)

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων

K15 Ψηφιακή Λογική Σχεδίαση 7-8: Ανάλυση και σύνθεση συνδυαστικών λογικών κυκλωμάτων

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Τεχνολογία Λογισμικού

2.1. Εντολές Σχόλια Τύποι Δεδομένων

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Μετατροπή χαρακτήρων ASCII σε ακέραιο αριθµό (atoi) & Άνοιγµα αρχείου µέσα από τo QtSPIM, διάβασµα, και αποθήκευση του περιεχοµένου του στη µνήµη

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

Σύντομες εισαγωγικές σημειώσεις για την. Matlab

Τεχνολογία Λογισμικού

Εισαγωγή στον Προγραμματισμό

Προγραμματισμός Η/Υ. Ενότητα 4: Εντολές Επιλογής

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

Οικονοµικό Πανεπιστήµιο Αθηνών. Τµήµα Πληροφορικής. Φθινοπωρινό Εξάµηνο Δοµές Δεδοµένων - Εργασία 2. Διδάσκων: E. Μαρκάκης

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ Επιχειρηματική Μοντελοποίηση. Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 24/3/2007

Στόχοι και αντικείμενο ενότητας. Βασικές κατασκευές ΓΠ. Έλεγχος ροής προγράμματος. #4.. Εντολές Επιλογής

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

H κλάση ArrayList. Γιώργος Θάνος. Γραφείο Γ. Γκλαβάνη 37. Αντικει ενοστραφής Προγρα. ος όροφος

ΑΣΚΗΣΗ 3: ΠΡΟΤΑΣΕΙΣ, ΕΚΦΡΑΣΕΙΣ ΚΑΙ ΤΕΛΕΣΤΕΣ

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Εισαγωγή στην PHP. ΕΣΔ 516 Τεχνολογίες Διαδικτύου. Περιεχόμενα. Περιεχόμενα. ΕΣ 516: Τεχνολογίες ιαδικτύου. ΕΣ 516: Τεχνολογίες ιαδικτύου

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

Τα διαγράµµατα κλάσεων

Αναδρομικοί Αλγόριθμοι

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

Ανάλυση Πληροφοριακών Συστημάτων. «Βασικές Έννοιες Αντικειμενοστρεφούς Προγραμματισμού Διαγράμματα κλάσεων» Βασίλειος Καρακόιδας

Φύλλο Εργασίας 3. Μια γρήγορη επανάληψη από τα προηγούμενα

Τεχνολογία λογισμικού στην πράξη

Κλάσεις και αντικείμενα #include <iostream.h<

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

. Μεθοδολογία Προγραμματισμού. Abstract Κλάσεις και Interfaces. Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014

Δομές Δεδομένων (Data Structures)

02 Αντικειμενοστρεφής Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

Περιγραφή συστήματος «BankAccount»

Διαγράμματα Κλάσεων στη Σχεδίαση

Πανεπιστήμιο Πελοποννήσου. Σχολή Θετικών Επιστημών & Τεχνολογίας. Τμήμα Επιστήμης & Τεχνολογίας Υπολογιστών. Προγραμματισμός Ι Εργαστήριο

public void printstatement() { System.out.println("Employee: " + name + " with salary: " + salary);

C: Από τη Θεωρία στην Εφαρμογή

ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

Ανάλυση Πληροφοριακών Συστημάτων. Εαρινό Εξάμηνο Lec08 09/04/2019 Διδάσκων: Γεώργιος Χρ. Μακρής

Βασικά Στοιχεία Python 3

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

Συστήματα Αναμονής (Queuing Systems)

ΛΥΚΕΙΟ ΑΓΙΟΥ ΝΕΟΦΥΤΟΥ ΣΧΟΛΙΚΗ ΧΡΟΝΙΑ ΓΡΑΠΤΕΣ ΠΡΟΑΓΩΓΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΙΟΥΝΙΟΥ 2011

Το Σχεσιακό Μοντέλο. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (Programming in the large)

4 ο Εργαστήριο Τυχαίοι Αριθμοί, Μεταβλητές Συστήματος

POINTERS, AGGREGATION, COMPOSITION

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Εβδομαδιαίο Εκπαιδευτικό Πρόγραμμα

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 19/5/2007

Transcript:

Πανεπιστήμιο Κρήτης, Τμήμα Επιστήμης Υπολογιστών Φθινόπωρο 2006 HΥ351 Ανάλυση και Σχεδίαση Πληροφοριακών Συστημάτων Information Systems Analysis and Design Ημερομηνία: 15/12/2006 Θεματική Ενότητα: OCL Φροντιστήριο 7

Άσκηση 1 Έστω ότι τα διαγράμματα κλάσεων της UML δεν είχαν συμβολισμού για την έκφραση περιορισμών αντιστοίχισης (multiplicity constraints) στις συσχετίσεις. Δείξτε πως θα μπορούσαμε να εκφράσουμε αυτούς τους περιορισμούς χρησιμοποιώντας την OCL. Προσπαθήστε να δώσετε παραπάνω από έναν τρόπο έκφρασης για κάθε έναν από τους 4 τύπους αντιστοίχισης. CS 351 U. of Crete, Fall 2005 2006 2

Λύση Άσκησης 1 [Α] x rel y [B] y:0..n y:1..n context A inv: not self.rel >isempty() ή context A inv: self.rel >Size () >= 1 y:0.1 context A inv: self.rel >Size ()<=1 y:1..1 context A inv: self.rel >Size ()=1 CS 351 U. of Crete, Fall 2005 2006 3

Άσκηση 2 Θεωρώντας το διάγραμμα της εικόνας, εκφράστε σε OCL τους ακόλουθους περιορισμούς: (α) «A person cannot be married with himself (herself).» (β) «If x is the wife of y, then x is female.» (γ) «If x is the husband of y, then x is male.» (δ) «A person can be married only if its age is greater than 18.» Person (ε) Γράψτε τις προϋποθέσεις και τις «μετασυνθήκες» (pre/post conditions) για τις marrywife(p:person) και marryhusband (p:person) και divorce(). Κάνετε την υπόθεση ότι δεν έχουμε πάντα εξ αρχής πλήρη γνώση των στοιχείων του κάθε προσώπου. Για παράδειγμα, αν υπάρχουν δύο πρόσωπα p1 και p2 και δεν γνωρίζουμε το φύλο τους, τότε η p1.marrywife(p2) συν τοις άλλοις θα συμπληρώσει κατάλληλα τις πληροφορίες φύλλου. Υπάρχει όμως η περίπτωση να ξέρουμε το φύλο του ενός ή και των δύο. nam e age sex m arryw ife(p) m arryhusb(p) divorce() husband 0..1 wife 0..1 spouse CS 351 U. of Crete, Fall 2005 2006 4

Λύση Άσκησης 2 (1/2) a) context Person inv: (self.wife >notempty()implies not (self.wife = self)) and (self.husband >notempty()implies not (self.husband = self)) b) context Person inv: not (self.wife >isempty() ) implies self.wife.sex="female c) context Person inv: not (self.husband >isempty() ) implies self.husband.sex= male d) context Person inv: (self.wife >notempty() or self.husband >notempty() ) implies self.age > 18 CS 351 U. of Crete, Fall 2005 2006 5

Λύση Άσκησης 2 (2/2) e)context Person::marryWife(p:Person) pre : (self.sex="male" or self.sex=nil) and (p.sex="female" or p.sex=nil) and self.wife >isempty() and p.husband >isempty() post: self.wife=p and p.husband=self and self.sex="male" and p.sex="female«context Person::marryHusb(p:Person) pre : (self.sex="female" or self.sex=nil) and (p.sex="male" or p.sex=nil) and p.wife >isempty() and self.husband >isempty() post: p.wife=self and self.husband=p and self.sex="female" and p.sex="male«context Person::divorce() pre : self.wife >notempty() or self.husband >notempty() post : (self.sex="male" implies (self.wife >isempty() and self.wife@pre.husband >isempty())) and (self.sex="female" implies (self.husband >isempty() and self.husband@pre.wife >isempty())) CS 351 U. of Crete, Fall 2005 2006 6

Άσκηση 3 Μια παραγγελία δεν πρέπει να έχει δύο ή περισσότερες παραγγελιογραμμές που να αναφέρουν το ίδιο προϊόν. Εκφράστε αυτόν τον περιορισμό σε OCL θεωρώντας το διάγραμμα της εικόνας. Order olines Order Line 1 1..* * Amount: Num olproduct 1 Product id: String CS 351 U. of Crete, Fall 2005 2006 7

Λύση Άσκησης 3 context Order inv: self.olines >forall(orderline1, orderline2 : OrderLine ( orderline1 <> orderline2 ) implies (orderline1.olproduct.id <> orderline2.olproduct.id)) CS 351 U. of Crete, Fall 2005 2006 8

Άσκηση 4 (1/2) Θεωρώντας το διάγραμμα κλάσεων της εικόνας στην επόμενη διαφάνεια (για ένα σύστημα διαχείρισης αερογραμμών), εκφράστε τα ακόλουθα σε OCL: 1. Ο αριθμός των επιβατών σε μία πτήση δεν πρέπει ποτέ να υπερβαίνει την χωρητικότητα σε επιβάτες του αεροπλάνου. 2. Όλα τα μέλη του πληρώματος μιας πτήσης πρέπει να είναι εργαζόμενοι της εταιρείας στην οποία ανήκει η πτήση. 3. Το πλήθος του πληρώματος σε μία πτήση πρέπει να είναι ίσο με το ακέραιο γνώρισμα numcrewrequired για το αεροπλάνο. 4. Ένα τμήμα (FlightSegment) μιας πτήσης δεν μπορεί να φτάσει πριν αναχωρήσει. 5. Το πρόγραμμα μίας πτήσης πρέπει να επιτρέπει τουλάχιστον 30 λεπτά στάση σε κάθε αεροδρόμιο. 6. Τις προυποθέσεις και τις μετασυνθήκες (pre/post conditions) της μεθόδου Flight::assignCrew. CS 351 U. of Crete, Fall 2005 2006 9

Άσκηση 4 (Εικόνα) (2/2) CS 351 U. of Crete, Fall 2005 2006 10

Λύση Άσκησης 4 (1/2) 1) context Flight inv: self.passenger >size() <= self.airplane.passengercapacity 2) context Flight inv: crew >forall(c : Person c.employee = self.airline) 3) context Flight inv: self.crew >size() = self.airplane.numcrewrequired 4) context FlightSegment inv: not arrive.isbefore(depart) CS 351 U. of Crete, Fall 2005 2006 11

Λύση Άσκησης 4 (2/2) 5) context Flight inv: Sequence{ 1..schedule >size() 1 } >forall(i schedule >at(i+1).depart.differenceminutes(schedule >at(i).arrive) >= 30) 6) context Flight::assignCrew(p:Person):Boolean pre: p.employee = self.airline pre: p.qualifiedfor >includes(self.airplane) post: result = self.crew >includes(p) CS 351 U. of Crete, Fall 2005 2006 12

Άσκηση 5 (1/3) O Text Browser είναι ένα εργαλείο για την εξερεύνηση ενός εγγράφου με κείμενο. Θεωρούμε πως ο Text Browser αποτελείται από τρία τμήματα, το File Manager, το ViewPort και το ScrollBar. Στην παρακάτω εικόνα έχουμε ένα UML class διάγραμμα που περιγράφει την εξωτερικά ορατή συμπεριφορά του Text Browser: CS 351 U. of Crete, Fall 2005 2006 13

Άσκηση 5 (2/3) Ο File Manager είναι υπεύθυνος στο να παρέχει το κείμενο που θα δείξει ο ViewPort. Έχει δύο δημόσιες μεθόδους, την getline και τη size. Θεωρούμε ότι το αρχείο αποτελείται μόνο από χαρακτήρες, χωρίζεται σε γραμμές και ότι μόνο ένα αρχείο μπορεί να εμφανιστεί τη φορά. H getline λαμβάνει ένα ακέραιο ως όρισμα και επιστρέφει τη γραμμή του αρχείου, με τους δείκτες να ξεκινάνε από τη γραμμή 0. Η size επιστρέφει ένα ακέραιο που δηλώνει τον αριθμό των γραμμών του αρχείου. Το ViewPort είναι υπεύθυνο για την εμφάνιση των γραμμών του κειμένου. Έχει δύο γνωρίσματα. Το πρώτο είναι ο ακέραιος height που δηλώνει τον αριθμό των γραμμών του κειμένου που αυτή τη στιγμή εμφανίζονται στο ViewPort. Το δεύτερο γνώρισμα είναι το contents, που είναι μια σειρά από γραμμές που αυτή τη στιγμή εμφανίζονται. Το ViewPort έχει και μία μέθοδο, τη resize. Η resize παίρνει ένα ακέραιο ως όρισμα και αλλάζει το μέγεθος του ViewPort έτσι ώστε να μπορεί να εμφανίσει τόσες γραμμές κειμένου. Το ScrollBar είναι υπεύθυνο για τον έλεγχο των γραμμών του αρχείου που αυτή τη στιγμή εμφανίζονται. Το ScrollBar έχει δύο γνωρίσματα και μία μέθοδο. Το πρώτο γνώρισμα ονομάζεται handleposition και είναι ένας ακέραιος, οι τιμές του οποίου δείχνουν ποια γραμμή του αρχείου αυτή τη στιγμή εμφανίζεται στην κορυφή του ViewPort. Επομένως, οι τιμές του είναι μεταξύ του μηδενός και ενός λιγότερου του αριθμού γραμμών του αρχείου. Το δεύτερο γνώρισμα είναι το handlesize και είναι ένας πραγματικός αριθμός, μικρότερος ή ίσος του ένα, που δηλώνει το ποσοστό του αρχείου που αυτή τη στιγμή εμφανίζεται στο ViewPort. Η μέθοδος του ScrollBar ονομάζεται movehandle. Λαμβάνει ένα μόνο ακέραιο όρισμα και μοντελοποιεί την κατάσταση στην οποία ο χρήστης έχει μετακινήσει το ScrollBar για να δει ένα διαφορετικό μέρος του αρχείου. CS 351 U. of Crete, Fall 2005 2006 14

Άσκηση 5 (3/3) Για να μοντελοποιηθούν πλήρως οι εργασίες ενός πραγματικού Text Browser, πρέπει να ισχύουν οι εξής πέντε ιδιότητες : 1) Όταν αλλάζει το μέγεθος του ViewPort, η νέα τιμή του height είναι ίδια με τη τιμή του ορίσματος της μεθόδου resize. 2) Όταν το ScrollBar μετακινείται, η νέα τιμή του handleposition είναι ίδια με τη τιμή του ορίσματος της μεθόδου movehandle. 3) Οι γραμμές που εμφανίζονται στο ViewPort που όλες προέρχονται από το αρχείο κειμένου, και το ViewPort εμφανίζει όσες γραμμές από το αρχείο μπορεί. 4) Η τιμή του handleposition στο ScrollBar αντιστοιχεί στον αριθμό της γραμμής που εμφανίζεται στην κορυφή του ViewPort. 5) Η τιμή του handlesize αντανακλά το ποσοστό των γραμμών από το αρχείο που εμφανίζονται στο ViewPort. Εκφράστε όλους αυτούς τους περιορισμούς των μεθόδων και κλάσεων σε OCL. CS 351 U. of Crete, Fall 2005 2006 15

Λύση Άσκησης 5 1) context ViewPort :: resize (newheight:integer): void pre: 0 <= newheight and newheight <= self.maxsize post: self.height = newheight 2) context ScrollBar :: movehandle (p:integer) : int pre: 0 <= p and p <= (view.file.size() 1) post: self.handleposition = p 3) context ViewPort: inv: self.contents >forall(i: int (0 <= i < self.height) and (i < file >size() scroll.handleposition) implies self.contents[i] = file >getline(scroll.handleposition + i)) 4) context ViewPort inv: self.contents[0] = file.getline(scroll.handleposition) 5) context ScrollBar inv: if view.file >size() <= view.height then self.handlesize = 1 else self.handlesize = view.height / view.file.size() endif CS 351 U. of Crete, Fall 2005 2006 16