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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΜΟΣ Εντολές επιλογής και αποφάσεων 1 ο Φύλλο Εργασιών Εισαγωγικές ασκήσεις για την εντολή if ΑΠΑΝΤΗΣΕΙΣ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

10.1 Γενικά για τα streams

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

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

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

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων

Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων

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

- Αναπαράσταση ακέραιας τιµής : - Εύρος ακεραίων : - Ακέραιοι τύποι: - Πράξεις µε ακεραίους (DIV - MOD)

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5. Αφηρημένοι Τύποι Δεδομένων / Στοίβες και Ουρές

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

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

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

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Γράφηµα (Graph) Εργαστήριο 10. Εισαγωγή

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

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

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

Κατασκευαστές. Μέθοδοι Κατασκευής (Constructors).

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

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

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

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

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

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

Προγραμματισμός 2 Σημειώσεις εργαστηρίου

Προηγµένα Θέµατα Τεχνολογιών Υλοποίησης Αλγορίθµων

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

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

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

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

Ανάπτυξη και Σχεδίαση Λογισμικού

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

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

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

Διάγραμμα Κλάσεων. Class Diagram

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες Μέθοδοι tostring και equals Αντικείμενα μέσα σε αντικείμενα

Δομές Δεδομένων. Ενότητα 4: Ο ΑΤΔ Λίστα & Υλοποίηση Λίστας με σειριακή αποθήκευση- Ο ΑΤΔ Συνδεδεμένη Λίστα- Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με πίνακα

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

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

Στόχοι και αντικείμενο ενότητας. Τύπος πίνακα. Τύπος πίνακα (συν.) #6. Πίνακες και Δείκτες

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

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

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

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

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

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

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

Διάλεξη 15: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

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

HY-252 Αντικειμενοστραφής Προγραμματισμός. Χειμερινό Εξάμηνο 2012 Διδάσκων: Χριστοφίδης Βασίλης. Ημερομηνία Παράδοσης: 16/11/2012

Στοιχεία Προγραμματισμού Σε Γραφικό Περιβάλλον Φύλλο εργασίας 1 ο

ΚΕΦΑΛΑΙΟ 10 ΕΝΤΟΛΕΣ ΕΠΙΛΟΓΗΣ (ή εντολές Ελέγχου και Επιλογής ή εντολές Επιλογής και Απόφασης)

Εισαγωγή στο MATLAB. Κολοβού Αθανασία, ΕΔΙΠ,

POINTERS, AGGREGATION, COMPOSITION

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

Στοιχειώδης προγραμματισμός σε C++

3 ο Εργαστήριο Μεταβλητές, Τελεστές

> μεγαλύτερο <= μικρότερο ή ίσο < μικρότερο == ισότητα >= μεγαλύτερο ή ίσο!= διαφορετικό

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

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

Εργαστήριο Τεχνολογίας Λογισμικού και Ανάλυσης Συστημάτων - 4 ο Εργαστήριο -

Transcript:

Πανεπιστήμιο Κρήτης, Τμήμα Επιστήμης Υπολογιστών Φθινόπωρο 2007 HΥ35 Ανάλυση και Σχεδίαση Πληροφοριακών Συστημάτων Information Systems Analysis and Design Διάθρωση Άσκηση : Multiplicity constraints using OCL Άσκηση 2 : Person marital status Άσκηση 3 : Order line constraints Άσκηση 4: Διαχείριση αερογραμμών Άσκηση 5 : Text Browser Άσκηση 6 : Graph Visualizer CS-35 U. of Crete, Fall 2007-2008 2

Άσκηση (/2) Έστω ότι τα διαγράμματα κλάσεων της UML δεν είχαν συμβολισμούς για την έκφραση περιορισμών αντιστοίχησης (multiplicity constraints) στις συσχετίσεις. Δείξτε πως θα μπορούσαμε να εκφράσουμε αυτούς τους περιορισμούς χρησιμοποιώντας την OCL. Προσπαθήστε να δώσετε παραπάνω από έναν τρόπο έκφρασης για κάθε έναν από τους 4 τύπους αντιστοίχισης. CS-35 U. of Crete, Fall 2007-2008 3 Άσκηση (2/2) [Α] -- x----- rel ----- y -- [B] y:0..n Δεν χρειάζεται τίποτα y:..n context A inv: not self.rel->isempty() ή context A inv: self.rel->size() >= y:0.. context A inv: self.rel->size() <= y:.. context A inv: self.rel->size() == CS-35 U. of Crete, Fall 2007-2008 4 2

Άσκηση 2 (/4) Θεωρώντας το διάγραμμα της εικόνας, εκφράστε σε OCL τους ακόλουθους περιορισμούς:. A person cannot be married with himself (herself) 2. If x is the wife of y, then x is female 3. If x is the husband of y, then x is male 4. A person can be married only if its age is greater than 8 Person name age sex marrywife(p) marryhusb(p) divorce() husband 0.. 5. Γράψτε τις προϋποθέσεις (pre-conditions) και τις «μετασυνθήκες» (post-conditions) για τις. marrywife(p:person) 2. marryhusband (p:person) 3. divorce() wife 0.. spouse Κάνετε την υπόθεση ότι δεν έχουμε πάντα εξ αρχής πλήρη γνώση των στοιχείων του κάθε προσώπου. Για παράδειγμα, αν υπάρχουν δύο πρόσωπα p και p2 και δεν γνωρίζουμε το φύλο τους, τότε η p.marrywife(p2) συν τοις άλλοις θα συμπληρώσει κατάλληλα τις πληροφορίες φύλλου. Υπάρχει όμως η περίπτωση να ξέρουμε το φύλο του ενός ή και των δύο. CS-35 U. of Crete, Fall 2007-2008 5 Άσκηση 2 (2/4) A person cannot be married with himself (herself) context Person inv:(self.wife->notempty() implies not (self.wife == self)) and (self.husband->notempty() implies not (self.husband == self)) If x is the wife of y, then x is female context Person inv: not(self.wife->isempty()) implies (self.wife.sex == female ) If x is the husband of y, then x is male context Person inv: not(self.husband->isempty()) implies (self.husband.sex == male ) A person can be married only if its age is greater than 8 context Person inv: (self.wife->notempty() or self.husband->notempty()) implies (self.age > 8) CS-35 U. of Crete, Fall 2007-2008 6 3

Άσκηση 2 (3/4) marrywife(p:person) 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 marryhusb(p:person) 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 CS-35 U. of Crete, Fall 2007-2008 7 Άσκηση 2 (4/4) Divorce() 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-35 U. of Crete, Fall 2007-2008 8 4

Άσκηση 3 (/) Μια παραγγελία δεν πρέπει να έχει δύο ή περισσότερες παραγγελιογραμμές που να αναφέρουν το ίδιο προϊόν. Εκφράστε αυτόν τον περιορισμό σε OCL θεωρώντας το διάγραμμα της εικόνας. Order olines Order Line..* * Amount: Num olproduct Product id: String Λύση context Order inv: self.olines->forall(orderline, orderline2 : OrderLine (orderline <> orderline2) implies (orderline.olproduct.id <> orderline2.olproduct.id)) CS-35 U. of Crete, Fall 2007-2008 9 Άσκηση 4 (/3) Θεωρώντας το διάγραμμα κλάσεων της εικόνας (για ένα σύστημα διαχείρισης αερογραμμών), εκφράστε τα ακόλουθα σε OCL: CS-35 U. of Crete, Fall 2007-2008 0 5

Άσκηση 4 (2/3). Ο αριθμός των επιβατών σε μία πτήση δεν πρέπει ποτέ να υπερβαίνει την χωρητικότητα σε επιβάτες του αεροπλάνου. context Flight inv: self.passenger->size() <= self.airplane.passengercapacity 2. Όλα τα μέλη του πληρώματος μιας πτήσης πρέπει να είναι εργαζόμενοι της εταιρείας στην οποία ανήκει η πτήση. context Flight inv: crew->forall(c:person c.employee == self.airline) 3. Το πλήθος του πληρώματος σε μία πτήση πρέπει να είναι ίσο με το ακέραιο γνώρισμα numcrewrequired για το αεροπλάνο. context Flight inv: self.crew->size() == self.airplane.numcrewrequired CS-35 U. of Crete, Fall 2007-2008 Άσκηση 4 (3/3) 4. Ένα τμήμα (FlightSegment) μιας πτήσης δεν μπορεί να φτάσει πριν αναχωρήσει context FlightSegment inv: not arrive.isbefore(depart) 5. Το πρόγραμμα μίας πτήσης πρέπει να επιτρέπει τουλάχιστον 30 λεπτά στάση σε κάθε αεροδρόμιο context Flight inv: Sequence{..schedule->size()- }->forall(i schedule->at(i+).depart.differenceminutes(schedule->at(i).arrive) >= 30) 6. Τις προυποθέσεις (pre-conditions) και τις μετασυνθήκες (post-conditions) της μεθόδου Flight::assignCrew context Flight::assignCrew(p:Person):Boolean pre: p.employee == self.airline pre: p.qualifiedfor->includes(self.airplane) post: result = self.crew->includes(p) CS-35 U. of Crete, Fall 2007-2008 2 6

Άσκηση 5 (/4) O Text Browser είναι ένα εργαλείο για την εξερεύνηση ενός εγγράφου με κείμενο. Θεωρούμε πως ο Text Browser αποτελείται από τρία τμήματα, το File Manager, το ViewPort και το ScrollBar. Στην παρακάτω εικόνα έχουμε ένα UML class διάγραμμα που περιγράφει την εξωτερικά ορατή συμπεριφορά του Text Browser: CS-35 U. of Crete, Fall 2007-2008 3 Άσκηση 5 (2/4) Ο 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-35 U. of Crete, Fall 2007-2008 4 7

Άσκηση 5 (3/4) Για να μοντελοποιηθούν πλήρως οι εργασίες ενός πραγματικού Text Browser, πρέπει να ισχύουν οι εξής πέντε ιδιότητες : ) Όταν αλλάζει το μέγεθος του ViewPort, ηνέατιμήτουheight είναι ίδια με τη τιμή του ορίσματος της μεθόδου resize. context ViewPort ::resize(newheight:integer):void pre: 0 <= newheight and newheight <= self.maxsize post: self.height == newheight 2) Όταν το ScrollBar μετακινείται, η νέα τιμή του handleposition είναι ίδια με τη τιμή του ορίσματος της μεθόδου movehandle. context ScrollBar :: movehandle (p:integer) : int pre: 0 <= p and p <= (view.file.size() - ) post: self.handleposition = p 3) Οι γραμμές που εμφανίζονται στο ViewPort που όλες προέρχονται από το αρχείο κειμένου, και το ViewPort εμφανίζει όσες γραμμές από το αρχείο μπορεί. 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)) CS-35 U. of Crete, Fall 2007-2008 5 Άσκηση 5 (4/4) 4) Η τιμή του handleposition στο ScrollBar αντιστοιχεί στον αριθμό της γραμμής που εμφανίζεται στην κορυφή του ViewPort. context ViewPort inv: self.contents[0] == file.getline(scroll.handleposition) 5) ΗτιμήτουhandleSize αντανακλά το ποσοστό των γραμμών από το αρχείο που εμφανίζονται στο ViewPort. context ScrollBar inv: if view.file->size() <= view.height then self.handlesize == else self.handlesize == view.height / view.file.size() endif CS-35 U. of Crete, Fall 2007-2008 6 8

Άσκηση 6 (/5) Παρακάτω δίνεται το διάγραμμα κλάσεων ενός Συστήματος Οπτικοποίησης Γράφων. Το σύστημα αποτελείται από τον Project Manager ο οποίος είναι υπεύθυνος για την διαχείριση των Projects (άνοιγμα, κλείσιμο, αποθήκευση). Κάθε Project μπορεί να περιέχει πολλαπλά παράθυρα (Frames) και το καθένα από αυτό αναπαριστά έναν και μόνο ένα γράφο. CS-35 U. of Crete, Fall 2007-2008 7 Άσκηση 6 (2/5) class System ProjectManager + addproject(project) : void + removeproject(project) : void + saveproject(project, file) : void projects Project - id: int - saved: boolean 0..* + addframe(frame) : void + removeframe(frame) : void + saveframe(frame, file) : void frames 0..* Frame - id: int - saved: boolean - visualized: boolean +frame +graph Graph + visualizegraph() : void +frame +graph +visualnodes 0..* +nodes..* visualnode - id: int - p: position Node - id: int - p: position + moveto(position) : void CS-35 U. of Crete, Fall 2007-2008 8 9

Άσκηση 6 (3/5). Καθορίστε τα invariants, pre-conditions και τα post-conditions της μεθόδου ProjectManager::addProject(project) context ProjectManager::addProject(Project : project):void pre: project <> Nil and not (self->projects->includes(project)) post: self->projects->size()@pre == (self->projects->size() + ) and self->projects->includes(project) 2. Καθορίστε τα invariants, pre-conditions και τα post-conditions της μεθόδου ProjectManager::removeProject(project) context ProjectManager::removeProject(Project : project):void pre: project <> Nil and self->projects->size() > 0 and self->projects->includes(project) post: self->projects->size()@pre == (self->projects->size() ) and not self->projects->includes(project) 3. Καθορίστε τα invariants, pre-conditions και τα post-conditions της μεθόδου ProjectManager::saveProject(project, file) context ProjectManager::saveProject(Project : project, File : file):void pre: project <> Nil and file <> Nil and self->projects->contains(project) post: self->projects[project.id]->saved == true CS-35 U. of Crete, Fall 2007-2008 9 Άσκηση 6 (4/5) 4. Καθορίστε τα invariants, pre-conditions και τα post-conditions της μεθόδου Project::addFrame(frame) context Project::addFrame(Frame : frame):void pre: frame <> Nil and not (self->frames->includes(frame)) post: self->frames->size()@pre == (self->frames->size() + ) and self->frames->includes(frame) 5. Καθορίστε τα invariants, pre-conditions και τα post-conditions της μεθόδου Project::removeFrame(frame) context Project::removeFrame(Frame : frame):void pre: frame <> Nil and self->frames->size() > 0 and self->frames->includes(frame) post: self->frames->size()@pre == (self->frames->size() ) and not self->frames->includes(frame) 6. Καθορίστε τα invariants, pre-conditions και τα post-conditions της μεθόδου Project::saveFrame(frame, file) context Project::saveFrame(Frame : frame, File : file):void pre: frame <> Nil and file <> Nil and self->frames->contains(frame) post: self->frames[frame.id]->saved == true CS-35 U. of Crete, Fall 2007-2008 20 0

Άσκηση 6 (5/5) 7. Καθορίστε τα invariants, pre-conditions και τα post-conditions της μεθόδου Frame::visualizeGraph() context Frame::visualizeGraph():void pre: if(self.visualized == true) then (self->graph <> Nil and self->visualized == true and self->virtualnodes->size() == 0) else (self->graph <> Nil) endif post: self->virtualnodes->size() == self->graph->nodes->size() 8. Καθορίστε τα invariants, pre-conditions και τα post-conditions της μεθόδου Node::moveTo(position) context Node::moveTo(Position : position):void pre: position <> Nil post: self->position == self->graph->frame->virtualnodes[self.id].position CS-35 U. of Crete, Fall 2007-2008 2 Χρήσιμες Αναφορές http://www.parlezuml.com/tutorials/umlforjava/java_ocl.pdf http://www.eclipse.org/articles/article-emf-codegen-with- OCL/article.html CS-35 U. of Crete, Fall 2007-2008 22