Εργαστήρια Τεχνολογίας Λογισµικού Κακαρόντζας Γιώργος Τµήµα Τεχν. Πληροφορικής & Τηλ/νιών ΤΕΙ Λάρισας. Εισαγωγή



Σχετικά έγγραφα
ΟΔΗΓΙΕΣ ΓΙΑ ΧΡΗΣΗ ΤΟΥ ΕΡΓΑΛΕΙΟΥ RATIONAL ROSE

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

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

UML. Γενικά χαρακτηριστικά Στοιχεία µοντέλων Συσχετίσεις. Παραδείγματα

Περιεχόμενο του μαθήματος

Διαχείριση Πληροφοριακών Συστημάτων

3. Σηµειώσεις Access. # Εισαγωγή ψηφίου ή κενού διαστήµατος. Επιτρέπονται τα ση-

Τμήμα Μηχανικών Η/Υ Τηλεπικοινωνιών & Δικτύων,

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο

Εγχειρίδιο Φοιτητών. 1. Εισαγωγή

Εγχειρίδιο Φοιτητών. 1. Εισαγωγή

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

Εγχειρίδιο Χρήστη - Μαθητή

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Οι περιπτώσεις χρήσης

ΗΜΙΟΥΡΓΙΑ ΙΣΤΟΣΕΛΙ ΑΣ ΣΤΟ MICROSOFT WORD

Πως θα κατασκευάσω το πρώτο πρόγραμμα;

Μοντελοποίηση δεδομένων με UML Χρήση σε πολυμεσικές εφαρμογές

Γνωριµία µε τη Microsoft Access

Σχεδιασμός Βάσεων Δεδομένων

ΕΚΦΩΝΗΣΗ ΥΠΟΧΡΕΩΤΙΚΗΣ ΕΡΓΑΣΙΑΣ σε UML

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

Περιπτώσεις Χρήσης και Διαγράµµατα Περιπτώσεων Χρήσης. Use Cases and Use Case Diagrams

ζωγραφίζοντας µε τον υπολογιστή

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

ΕΡΓΑΣΤΗΡΙΟ ΠΛΗΡΟΦΟΡΙΚΗ I. 3o ΕΡΓΑΣΤΗΡΙΟ ΕΠΕΞΕΡΓΑΣΙΑ ΜΕ ΤΟ WORD

Περιεχόμενα. ΚΕΦΑΛΑΙΟ 1 Εισαγωγή στη UML... 19

GreekLUG Ελεύθερο Λογισμικό & Λογισμικό Ανοικτού Κώδικα

08 Η γλώσσα UML I. Τεχνολογία Λογισμικού. Σχολή Hλεκτρολόγων Mηχανικών & Mηχανικών Yπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο. Χειμερινό εξάμηνο

Εισαγωγή στην αντικειµενοστρεφή τεχνολογία

2. Κάντε κλικ στο παράθυρο όψης Top για να το ενεργοποιήσετε, ώστε να σχεδιάσετε το πάτωµα του δωµατίου.

Εγχειρίδιο Φοιτητών. 1. Εισαγωγή

Μοντελοποίηση Πεδίου

ΟΔΗΓΙΕΣ ΧΡΗΣΤΗ ΓΙΑ ΤΟ ΠΡΟΓΡΑΜΜΑ ΗΛΕΚΤΡΟΝΙΚΗΣ ΤΑΞΗΣ

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

Μέθοδοι. Υποσυστήµατα και πακέτα. Μοντέλα αντικειµενοστραφούς σχεδίασης. Αντικειµενοστραφής Σχεδίαση. Στα πρώτα στάδια της ανάλυσης

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

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

Ανάλυση Περιπτώσεων Χρήσης

ΚΕΦΑΛΑΙΟ 4 ΤΟ ΕΡΓΑΛΕΙΟ SOLVER

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

Τεχνολογία Λογισμικού. Ενότητα 1: Εισαγωγή στην UML Καθηγητής Εφαρμογών Ηλίας Γουνόπουλος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 8/1/12, 22:00

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

4.1 Άνοιγμα υπάρχοντος βιβλίου εργασίας

περιεχόμενα παρουσίασης

Κλάσεις και Αντικείµενα

Ο Οδηγός γρήγορης εκκίνησης

Διαδικασιακός Προγραμματισμός

Visual Basic Γλώσσα οπτικού

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

Βασικό Επίπεδο στο Modellus

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

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ

ΑΝΑΛΥΣΗ ΑΠΑΙΤΗΣΕΩΝ ανάλυση απαιτήσεων Σε αυτό το μάθημα θα ασχοληθούμε με : Δημιουργία μοντέλων

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

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

ΤΜΗΜΑ ΕΠΙΧΕΙΡΗΜΑΤΙΚΟΥ ΣΧΕΔΙΑΣΜΟΥ & ΠΛΗΡΟΦΟΡΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΤΕΙ ΠΑΤΡΑΣ ΤΕΙ ΠΑΤΡΑΣ ΣΗΜΕΙΩΣΕΙΣ ΜΑΘΗΜΑΤΟΣ ΕΠΙΧΕΙΡΗΣΙΑΚΏΝ ΠΑΙΓΝΙΩΝ- ΠΡΟΓΡΑΜΜΑ GAMBIT

4 ο ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ ΓΕΝΙΚΟΣ ΣΚΟΠΟΣ :

2.1 Αντικειµενοστρεφής προγραµµατισµός

Εργαστήριο «Τεχνολογία Πολιτισμικού Λογισμικού» Ενότητα. Σχεδίαση Βάσεων Δεδομένων

ΕΡΓΑΣΤΗΡΙΟ FRONT PAGE 2

1. Ανοίξτε το 3D Studio MAX ή επιλέξτε File Reset. ηµιουργήστε µια σφαίρα µε κέντρο την αρχή των αξόνων και ακτίνα 20 µονάδων.

Εισαγωγή/ απομάκρυνση συμβόλων παραγράφου

Εργαστηριακή Άσκηση 4 Μορφοποίηση Κειμένου μέσω του

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΚΕΝΤΡΟ ΙΑΧΕΙΡΙΣΗΣ ΙΚΤΥΩΝ. Εγχειρίδιο χρήσης των υπηρεσιών τηλεκπαίδευσης του Πανεπιστηµίου Ιωαννίνων. Ασύγχρονη τηλεκπαίδευση

ΧΡΗΣΙΜΟΠΟΙΩΝΤΑΣ ΤΟ ARIS

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

ΕΓΧΕΙΡΙΔΙΟ ΜΑΘΗΤΗ. της Πλατφόρμας Τηλεκατάρτισης

ΣΕΜΙΝΑΡΙΑ ΝΕΛΕ 2004, ΑΣΚΗΣΕΙΣ

Οδηγίες για την κατασκευή του αρχείου «Ταυτότητα (α+β) 2» 1. Αποκρύπτουµε τους άξονες και το παράθυρο άλγεβρας: Παράθυρο προβολή

Οδηγίες εγκατάστασης εφαρµογής διαβίβασης εντολών Χ.Α.Α. µέσω της EUROCORP Χρηµατιστηριακής Σελίδα 1 από 11

Κανόνες για ανάπτυξη διαγραµµάτων κλάσεων

(1) Επιλέξτε την εντολή QUERIES για να μπείτε στο περιβάλλον δημιουργίας

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

περιεχόμενα παρουσίασης Actors Σενάρια Περιεχόμενο περιπτώσεων χρήσης Πρότυπα περιπτώσεων χρήσης Διαγράμματα περιπτώσεων χρήσης

Οδηγός γρήγορης εκκίνησης

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

Άσκηση 6 Ανύψωση Σχηµάτων. Στόχος της άσκησης

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

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

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

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

Πίνακες, περιγράµµατα και σκίαση

ΑΣΚΗΣΗ 1: TO ΠΕΡΙΒΑΛΛΟΝ ΕΡΓΑΣΙΑΣ DEV-C++

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

Παιδαγωγική προσέγγιση: Πρόταση για την διδασκαλία της έννοιας αλγόριθµός στο περιβάλλον MicroWorlds Pro

ΥΠΗΡΕΣΙΑ WEBMAIL ΚΥΠΕΣ

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

Σχήµα 6.1: Εισαγωγή της εντολής Read From Spreadsheet File στο Block Diagram.

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

Κεφάλαιο 5. Δημιουργία φορμών για τη βάση δεδομένων DVDclub

UML

Η στοίβα (stack) H στοίβα είναι ένας αποθηκευτικός χώρος οργανωµένος κατά τέτοιο τρόπο ώστε να υποστηρίζει δύο βασικές λειτουργίες:

Εργαστήριο «Τεχνολογία Πολιτισμικού Λογισμικού» Ενότητα. Επεξεργασία πινάκων

ΠΕΡΙΕΧΟΜΕΝΑ. Περιγραφή της αρχικής οθόνης κάθε τάξης α. Εικονίδια επιλογής θεµατικών ενοτήτων β. Εικονίδια διαφυγής...

1 η ΑΣΚΗΣΗ ΕΡΓΑΣΤΗΡΙΟΥ (ομαδική: 2 ή 3 ατόμων) (Ημερομηνία Παράδοσης: 18/11/2017) (Ζητούμενο)

Transcript:

Προς τους σπουδαστές Εισαγωγή Είναι φυσικό ότι ο τρόπος µε τον οποίο σχεδιάζουµε ένα σύστηµα, είναι άρρηκτα συνδεδεµένος µε την τεχνολογία που θα χρησιµοποιήσουµε για να το αναπτύξουµε. Έτσι από τα διαγράµµατα ροής προγράµµατος, περάσαµε µε την εµφάνιση του δοµηµένου προγραµµατισµού σε πιο προχωρηµένες τεχνικές παράστασης και σχεδίασης συστηµάτων που περιελάµβαναν πιο σύνθετες διαγραµµατικές τεχνικές για τον έλεγχο των πιο πολύπλοκων σύγχρονων συστηµάτων. Αυτές οι τεχνικές περιελάµβαναν λεξικά δεδοµένων, διαγράµµατα ροής δεδοµένων, πίνακες αποφάσεων κλπ. Σήµερα τα συστήµατα που αναπτύσσονται είναι σχεδόν στο σύνολό τους αντικειµενοστραφή. Και υπάρχει καλοί λόγοι γι αυτό: Το αντικειµενοστραφές λογισµικό είναι ευκολότερο στην αρχική του σύλληψη µια και τα αντικείµενα είναι εν µέρει οντότητες του υπαρκτού κόσµου του χώρου ανάπτυξης του λογισµικού (π.χ. σε ένα τραπεζικό σύστηµα θα υπάρχουν αντικείµενα όπως «Τραπεζικός Λογαριασµός», «Πελάτης» κλπ.). Το αντικειµενοστραφές λογισµικό είναι ευκολότερο στην εξέλιξή του. Ιδιαίτερα µε την χρήση των διασυνδέσεων (interfaces) δηλαδή µε την χρήση τύπων σε αντιδιαστολή µε την χρήση τάξεων (classes) δηλαδή υλοποίησης, µπορεί πράγµατι να επιτρέψει την εξέλιξη του λογισµικού µε πρωτοφανή ευκολία για την βιοµηχανία παραγωγής λογισµικού. Φυσικά αυτό δεν επιτυγχάνεται αυτόµατα µε την απλή χρήση των διασυνδέσεων, αλλά αυτές είναι µια καλή αρχή. Τα αντικείµενα αποτελούν την βάση για την κατασκευή των συστατικών (components) που αποτελούν τη βάση για το µεγάλο όραµα της βιοµηχανίας λογισµικού µια και θεωρητικά στο µέλλον θα µπορούµε να κατασκευάσουµε προγράµµατα µε την σύνθεση συστατικών προερχόµενα από διάφορες πηγές εκφράζοντας απλά τις επιθυµίες µας. Μην ανησυχείτε δεν χάσατε την επανάσταση, µια και τα συστατικά είναι εδώ (COM objects EJB1 [1] ) αλλά το όραµα δεν εκπληρώθηκε ακόµα. Υπάρχουν µεγάλα ανοικτά θέµατα τα οποία όµως χωρίς αµφιβολία θα λυθούν στα επόµενα χρόνια. Τα συστήµατα λογισµικού βασισµένα στα συστατικά είναι χωρίς αµφιβολία το µέλλον της πληροφορικής. Θα µπορούσαµε να συνεχίσουµε την απαρίθµηση των πλεονεκτηµάτων των αντικειµενοστραφών συστηµάτων για πολύ ακόµα. Προκύπτει λοιπόν το άµεσο ερώτηµα πως σχεδιάζουµε αντικειµενοστραφή συστήµατα, πως µοντελοποιούµε αντικειµενοστραφή συστήµατα και φυσικά πως προγραµµατίζουµε αντικειµενοστραφή συστήµατα. - 1 -

Στις σηµειώσεις αυτές θα προσπαθήσουµε να απαντήσουµε σε αυτά τα ερωτήµατα µέσα από ασκήσεις µοντελοποίησης και προγραµµατισµού που θα είναι σύντοµες (αναγκαστικά λόγω της εργαστηριακής φύσης του µαθήµατος) αλλά, θέλουµε να πιστεύουµε, ενδιαφέρουσες και διαφωτιστικές. Λίγα λόγια για την δομή των μαθημάτων Τα εργαστήρια θα είναι δοµηµένα σε τρία µέρη ως εξής: 1. Παρουσίαση: Ανάπτυξη του θέµατος του εργαστηρίου µε παραδείγµατα 2. Εφαρµογή: Ανάπτυξη από τους µαθητές µε την καθοδήγηση των εκπαιδευτικών κάποιων δοθέντων µοντέλων ή/και προγραµµάτων. 3. Εκπόνηση άσκησης: Ανάπτυξη από τους σπουδαστές ασκήσεων των οποίων θα δίνεται η εκφώνηση και θα βασίζονται στη παρουσίαση και στην εφαρµογή που προηγήθηκε. Εξαίρεση στα παραπάνω θα αποτελέσει το εργαστήριο 7 στο οποίο θα δοθεί έµφαση σε µια εκτενέστερη σχεδίαση κάποιου µικρού συστήµατος βασισµένο στις διαγραµµατικές τεχνικές που θα έχουµε συζητήσει στα προηγούµενα µαθήµατα, έτσι ώστε να δοθεί µια πληρέστερη εικόνα αυτών των τεχνικών Αξιολόγηση Αξιολόγηση παρακολούθησης εργαστηρίων Σε κάθε εργαστήριο όπως αναφέρθηκε ήδη οι σπουδαστές θα προσπαθούν να εκπονήσουν µια άσκηση βασισµένη στα όσα προηγήθηκαν (παρουσίαση και εφαρµογή). Οι λύσεις αυτών των ασκήσεων (µοντέλα, προγράµµατα κλπ) θα επιθεωρούνται στο τέλος του εργαστηρίου από τους εκπαιδευτικούς και θα αξιολογούνται. Με βάση την αξιολόγηση αυτή ο φοιτητής θα παίρνει και ένα βαθµό στην κλίµακα 1-10 Αν κάποιος φοιτητής συγκεντρώσει τρεις βαθµούς κάτω από την βάση (το 5.0) δεν θα έχει δικαίωµα παράδοσης τελικού έργου. Αξιολόγηση τελικού έργου (project) Το τελικό έργο θα είναι ένα περισσότερο εκτενές σύστηµα το οποίο θα κληθούν να αναπτύξουν οι σπουδαστές σε οµάδες των τριών ατόµων. Το σύστηµα θα πρέπει να παρουσιαστεί στο τέλος από τους σπουδαστές και να εξεταστεί προφορικά. Τελικό - 2 -

έργο µπορούν να παραδώσουν µόνο οι σπουδαστές που δεν απορρίφθηκαν από την διαδικασία αξιολόγησης των εργαστηρίων (βλ. προηγούµενη παράγραφο). Από την διαδικασία της αξιολόγησης του τελικού έργου επίσης θα δοθεί ένας βαθµός στον σπουδαστή. Ο συνδυασµός της επίδοσης του σπουδαστή στα εργαστήρια και στο τελικό έργο θα αποτελέσει τη βάση για τον τελικό βαθµό του σπουδαστή στο εργαστήριο της τεχνολογίας λογισµικού. - 3 -

1. Παρουσίαση Εργαστήριο 1: Εργαλεία Μοντελοποίησης Αρχικά θα πρέπει να εξοικειωθούµε µε την έννοια του εργαλείου ανάπτυξης λογισµικού. Θα δούµε ποιες δυνατότητες προσφέρουν τα σύγχρονα εργαλεία ανάπτυξης λογισµικού και θα αρχίσουµε τη γνωριµία µας µε το Rational Rose (Demo Edition 4.0.3) που θα χρησιµοποιήσουµε στα εργαστήρια. Δυνατότητες που παρέχουν τα εργαλεία ανάπτυξης λογισμικού Τα σηµερινά εργαλεία ανάπτυξης λογισµικού, παρέχουν τις ακόλουθες δυνατότητες: 1. Μοντελοποίησης (modeling) : Χρησιµοποιούµε τα σχεδιαστικά εργαλεία που παρέχονται από το εργαλείο ανάπτυξης για την ανάπτυξη του µοντέλου (που είναι ένα σύνολο διαγραµµάτων και προδιαγραφών) που παριστάνει το χώρο ανάπτυξης και το λογισµικό που τελικά θα αναπτυχθεί 2. Ελέγχου (consistency checking): Το εργαλείο ελέγχει τις εισόδους στα διάφορα διαγράµµατα για το αν είναι συνεπείς (consistent) µεταξύ τους. Για παράδειγµα όπως θα δούµε σε ένα διάγραµµα ακολουθίας (sequence diagram) δεν µπορείτε ξαφνικά να εµφανίσετε µια τάξη που δεν έχετε δηλώσει σε ένα διάγραµµα τάξεων. 3. Παραγωγής κώδικα (code generation): Τα περισσότερα εργαλεία παρέχουν δυνατότητες παραγωγής κώδικα. Μερικά από αυτά σε πολλές γλώσσες προγραµµατισµού (για παράδειγµα το Rational Rose στη πλήρη έκδοσή του υποστηρίζει παραγωγή κώδικα σε Java, C++, Visual Basic). Φυσικά ο κώδικας δεν είναι τελειωµένος. Αλλά το καλούπι που θα παραχθεί είναι µια καλή αρχή. 4. Αντίστροφη ανάπτυξη (reverse engineering): Μια επίσης σηµαντική δυνατότητα είναι η δυνατότητα να παραχθούν τα διαγράµµατα από την ανάλυση υπάρχοντος κώδικα. Αυτό είναι σηµαντικό µια και µπορεί κανείς να αρχίσει να αναλύει παλιό κώδικα µε στόχο την αναθεώρησή του, αλλά και να επιβεβαιώνει την συνέπεια του κώδικα που παράγεται µε βάση τα διαγράµµατα που έγιναν. Αυτή η δυνατότητα ονοµάζεται αντίστροφη ανάπτυξη σε αντιδιαστολή µε τη φυσιολογική πορεία που είναι η µοντελοποίηση και στη συνέχεια η παραγωγή κώδικα. 5. Κυκλική ανάπτυξη (round-trip engineering): Πολλά εργαλεία µας δίνουν τη δυνατότητα να αναπτύξουµε κάποια διαγράµµατα και στη συνέχεια να - 4 -

παράγουµε αυτόµατα κώδικα γι αυτά. Στη συνέχεια µπορούµε να εµπλουτίσουµε το κώδικα προσθέτοντας κάποια πράγµατα σε αυτόν µε ένα εκδότη κειµένου ή µε το Περιβάλλον Ανάπτυξης (IDE) που χρησιµοποιούµε. Το εργαλείο είναι σε θέση να εµπλουτίσει αυτόµατα τα διαγράµµατα από τον νέο εµπλουτισµένο κώδικα. Αυτό µπορεί να γίνεται συνεχώς κατά τη διάρκεια ανάπτυξης. Αυτή η τεχνική της κυκλικής ανάπτυξης (σχέδιο κώδικας σχέδιο κώδικας κτλ.) είναι απαραίτητη στην ανάπτυξη του κώδικα που όπως θα δούµε και στη θεωρία είναι επαναληπτική (iterative) και αυξητική (incremental). ηλαδή, η ανάπτυξη του κώδικα δεν αφήνεται για το τέλος, γιατί τότε αν έχουν γίνει λάθη στη σχεδίαση θα είναι αργά για να διορθωθούν. Σχεδιάζουµε λίγο, κωδικοποιούµε λίγο, τεστάρουµε λίγο κ.ο.κ. Αυτό υποστηρίζεται από τα σύγχρονα εργαλεία ανάπτυξης λογισµικού µέσω της κυκλικής ανάπτυξης (round-trip engineering) που παρέχουν. 6. Οµαδική ανάπτυξη (group development): Οποιοδήποτε σηµαντικό έργο λογισµικού απαιτεί την ταυτόχρονη συνεργασία πολλών προγραµµατιστώναναλυτών. Τα σύγχρονα εργαλεία παρέχουν µηχανισµούς για να διευκολύνουν και να κάνουν το διαχωρισµό του έργου σε οµάδες εύκολο και φυσικό. Γνωριμία με το Rational Rose Στο εργαστήριο θα χρησιµοποιήσουµε τη demo έκδοση του Rational Rose 4. To Rose της εταιρείας Rational2 [1], είναι, ίσως το σηµαντικότερο παγκοσµίως εργαλείο ανάπτυξης λογισµικού. Στη πλήρη του µορφή το Rose µπορεί να χρησιµοποιηθεί και χρησιµοποιείται από χιλιάδες εταιρείες παγκοσµίως για την ανάπτυξη πολύπλοκων έργων λογισµικού σε διάφορες γλώσσες προγραµµατισµού. Η Rational για την προώθησή του παρέχει τη demo έκδοση δωρεάν. Αυτή η έκδοση µπορεί να χρησιµοποιηθεί µόνο σε συνδυασµό µε τη C++ (code generation, reverse και round-trip engineering) και περιορίζεται στον αριθµό των τάξεων (30 classes), λογικών πακέτων (3 logical packages), περιπτώσεων χρήσης (10 use cases), ενοτήτων (30 modules), πακέτων συστατικών (3 component packages) και διαγραµµάτων κατάστασης (10 state charts). Οι όροι αυτοί δεν σας είναι ακόµα γνωστοί τουλάχιστον όχι στα πλαίσια του Rose θα συζητηθούν όµως εκτενέστερα στα επόµενα. Για να ξεκινήσετε το Rose κάντε κλικ στο πλήκτρο «Start» και στη συνέχεια πάτε στο µενού «Programs». Από το υποµενού «Rational Rose C++ Demo 4» επιλέξτε το πρόγραµµα «Rational Rose C++ Demo 4». Εµφανίζεται το κύριο παράθυρο του Rose που έχει τα βασικά συστατικά που δείχνει ο ακόλουθος πίνακας: - 5 -

Συστατικό Περιγραφή Η γραµµή επιλογών: Από αυτή επιλέγετε βασικές λειτουργίες όπως η αποθήκευση του µοντέλου από την επιλογή File Save ή Save As κατ αναλογία και µε τα άλλα προγράµµατα που γνωρίζετε Η βασική γραµµή εργαλείων: Προσφέρει συντοµεύσεις για την εκτέλεση των περισσοτέρων επιλογών Η γραµµή εργαλείων διαγράµµατος: Από αυτή τη γραµµή θα επιλέγουµε εργαλεία για την σχεδίαση των διαγραµµάτων µας. Αυτή η γραµµή θα αλλάζει ανάλογα µε το είδος του διαγράµµατος που θα σχεδιάζουµε στο ενεργό παράθυρο σχεδίασης κάθε φορά. Επειδή αρχικά σχεδιάζουµε ένα διάγραµµα κλάσεων (class diagram) η γραµµή εργαλείων περιέχει εργαλεία για τη σχεδίαση µιας νέας κλάσης, συσχέτισης κ.λ.π. Παράθυρο σχεδίασης: Αρχικά έχουµε ένα παράθυρο σχεδίασης στο οποίο µπορούµε να ξεκινήσουµε το διάγραµµά µας. Περιοχή πλοήγησης: Από αυτή τη περιοχή µπορούµε να επιλέξουµε την όψη του µοντέλου µας και πιο συγκεκριµένα πιο διάγραµµα θέλουµε να δούµε ή να σχεδιάσουµε σε αυτή την όψη. 2. Εφαρμογή Οι δυνατότητες του Rose Σε αυτό το εδάφιο θα κάνουµε ένα γρήγορο πέρασµα στον τρόπο που το Rose υποστηρίζει τις δυνατότητες που αναφέραµε στο εδάφιο «υνατότητες που παρέχουν τα εργαλεία ανάπτυξης λογισµικού». Μοντελοποίηση (Modeling) Ο πρώτος λόγος χρήσης ενός εργαλείου όπως το Rose, είναι η σχεδίαση διαγραµµάτων. Τα διαγράµµατα αποτυπώνουν τις οντότητες και τη συµπεριφορά του συστήµατος που αναπτύσσεται και δίνουν τη πρώτη ύλη στους κατασκευαστές του συστήµατος για την συζήτηση και το συλλογισµό πάνω σε αυτό. Σαν ένα πρώτο πολύ απλό παράδειγµα ενός διαγράµµατος θα κατασκευάσουµε ένα διάγραµµα τάξεων µε µία τάξη τη Person που έστω ότι παριστάνει ένα άτοµο στο σύστηµά µας. Η τάξη Person θα έχει µια ιδιότητα, την ιδιότητα name η οποία θα είναι - 6 -

το όνοµα του ατόµου. Η ιδιότητα αυτή θα είναι τύπου char*. Επίσης θα προσθέσουµε και µια µέθοδο στο Person την µέθοδο isnamed που θα είναι τύπου int. Για να κάνετε το διάγραµµα της τάξης από τη γραµµή των σχεδιαστικών εργαλείων επιλέξτε το εργαλείο class ( ). Με επιλεγµένο το εργαλείο της τάξης κάντε ένα αριστερό κλικ στο παράθυρο σχεδίασης. Αµέσως θα εµφανιστεί στη περιοχή σχεδίασης µια κενή τάξη µε τρία άδεια διαµερίσµατα. Στο πάνω διαµέρισµα θα γράψουµε το όνοµα της τάξης. Στο µεσαίο τις ιδιότητες (στη περίπτωσή µας µόνο µια την ιδιότητα name). Στο τρίτο διαµέρισµα γράφουµε τις µεθόδους της τάξης (επίσης µόνο µια στο παράδειγµά µας: η µέθοδος isnamed). Για να γράψετε το όνοµα της τάξης κάντε ένα αριστερό κλικ στη περιοχή του πάνω διαµερίσµατος. Αµέσως βγαίνει ο δροµέας που σας επιτρέπει να γράψετε το όνοµα. Γράψτε το όνοµα Person (δώστε σηµασία στα κεφαλαία και στα πεζά όπως ξέρετε η C++ είναι case-sensitive). Αφού γράψετε το όνοµα κάντε αριστερό κλικ οπουδήποτε στη περιοχή σχεδίασης για να βγείτε από την κατάσταση έκδοσης του ονόµατος. Για να δούµε το παράθυρο προδιαγραφής της τάξης απ όπου θα δώσουµε τα υπόλοιπα στοιχεία κάντε διπλό κλικ πάνω στο σύµβολο της κλάσης ή δεξί κλικ και στη συνέχεια επιλέξτε «Specification» από το µενού που θα εµφανιστεί. Έτσι θα εµφανιστεί το πλαίσιο διαλόγου µε τίτλο «Class specification for Person» που θα είναι όπως φαίνεται στην ακόλουθη εικόνα: Για να δώσετε µια νέα ιδιότητα (attribute) στην τάξη κάντε κλικ στη καρτέλα «Attributes» (ιδιότητες). Στη καρτέλα που θα εµφανιστεί κάντε δεξί κλικ στη περιοχή εµφάνισης των ιδιοτήτων της τάξης η οποία τώρα είναι κενή αφού δεν έχουµε καµιά ιδιότητα ακόµα. Από το µενού που θα εµφανιστεί επιλέξτε «Insert» (Εισαγωγή). Θα εµφανιστεί µια νέα ιδιότητα. Στη στήλη Name αφήστε το εξ ορισµού όνοµα name µια και είναι αυτό που θέλουµε. Στη στήλη Type - 7 -

κάντε αριστερό κλικ δυο φορές στον κενό χώρο δίπλα από τη λέξη Person. Γράψτε char* για τον τύπο της νέας ιδιότητας. Στη συνέχεια κάντε κλικ στη καρτέλα Operations (θα χρησιµοποιήσουµε τον όρο Μέθοδοι σαν απόδοση της αγγλικής λέξης operations) για να προσθέσετε µια νέα µέθοδο στη τάξη. Στο κενό χώρο κάντε και πάλι δεξί κλικ και από το µενού που θα εµφανιστεί επιλέξτε «Insert». Θα εµφανιστεί µια καινούργια µέθοδος µε το όνοµα opname. Κάντε κλικ πάνω στο όνοµα δυο φορές και αλλάξτε το σε isnamed. Στον τύπο που θα επιστρέφει η µέθοδος (return type) κάντε ξανά κλικ δυο φορές και γράψτε int. Τώρα η τάξη θα πρέπει να φαίνεται όπως δείχνει και η ακόλουθη εικόνα: Αν δεν βλέπετε την πλήρη δήλωση της µεθόδου κάντε δεξί κλικ πάνω στη τάξη και από το µενού που θα εµφανιστεί τσεκάρετε την επιλογή «Show operation signature» (εµφάνισε τη δήλωση (υπογραφή) της τάξης). Θα πρέπει να πούµε ότι αν δεν ορίσετε κάτι διαφορετικό εξ ορισµού οι ιδιότητες της τάξης θα είναι ιδιωτικές (private) στη τάξη και αυτό συµβολίζει και το σύµβολο του λουκέτου µπροστά από την ιδιότητα, ενώ οι µέθοδοι θα είναι δηµόσιες (public) και γι αυτό και δεν υπάρχει µπροστά τους λουκέτο. Αποθηκεύστε την µέχρι τώρα δουλειά σας στο αρχείο Person.mdl στο φάκελο c:\stlabs\lab1. Σχεδιαστική αρχή: Απόκρυψη εδοµένων (Data Hiding) Αυτή είναι µια από τις πολλές σχεδιαστικές αρχές (design principles) της αντικειµενοστραφούς ανάπτυξης λογισµικού που κληρονοµείται από τους Αφηρηµένους Τύπους εδοµένων (Abstract Data Types). Ο λόγος που πρέπει τα δεδοµένα να είναι ιδιωτικά είναι η δυνατότητα που παρέχεται στην αποδέσµευση της εσωτερικής παράστασης των δεδοµένων από την χρήση τους. Για να γίνει αυτό κατανοητό φανταστείτε ότι έχουµε µια τάξη Date για τις ηµεροµηνίες. Θα µπορούσε η Date εσωτερικά να παριστάνει την ηµεροµηνία σαν ένα αριθµό, την απόσταση από κάποια ηµεροµηνία (π.χ. την 1/1/1900). Ο χρήστης θα µπορούσε να θέτει την ηµεροµηνία µε µια µέθοδο setdate που θα έπαιρνε σαν παράµετρο ένα string της µορφής «10/10/2000». Η µέθοδος setdate θα µετέφραζε στη συνέχεια αυτό το string στον αριθµό που αντιστοιχεί σε αυτή και που είναι η απόσταση από την 1/1/1900. Αργότερα ο χρήστης θα µπορούσε να καλέσει την getdate που θα επέστρεφε την ηµεροµηνία πάλι µε µορφή string αφού την υπολόγιζε από τον αριθµό που την παριστάνει µέσα στην κλάση. Τα πλεονεκτήµατα είναι πολλά: - 8 -

Αν αλλάξουµε την εσωτερική παράσταση των δεδοµένων τα προγράµµατα που χρησιµοποιούσαν την Date δεν χρειάζεται να αλλάξουν. Αρκεί οι µέθοδοι getdate και setdate να µείνουν ίδιες. Η setdate όπως και όλες οι setxxx µέθοδοι παρέχουν ένα φυσικό χώρο για τον έλεγχο της ορθότητας των δεδοµένων που δίνονται από τον χρήστη της τάξης. Φανταστείτε για παράδειγµα να έδινε κάποιος µια ηµεροµηνία που δεν είναι έγκυρη (π.χ. 31/2/2000), η setdate θα µπορούσε να ελέγξει την ηµεροµηνία πριν τη θέσει και να µην την θέσει αν δεν είναι έγκυρη. Αυτό εγγυάται ότι η τάξη µας θα έχει πάντοτε συνεπείς τιµές (consistent state). Αν έχει γίνει κάποια λάθος υπόθεση στη µορφή της εσωτερικής παράστασης αυτή µπορεί να διορθωθεί χωρίς να χρειαστεί να διορθωθούν και τα προγράµµατα που χρησιµοποιούν τον τύπο. Σκεφτείτε πόσο πιο απλή θα ήταν η διόρθωση του «Λάθους του 2000», αν το λάθος περιορίζονταν µόνο στην εσωτερική παράσταση ενός και µόνο αριθµού σε µια και µόνο τάξη! Παραγωγή κώδικα (code generation) Για να παράγουµε τον C++ κώδικα που αντιστοιχεί σε αυτή τη τάξη θα πρέπει απλά να κάνουµε την επιλογή από ένα µενού. Πριν από αυτό όµως ας κάνουµε ορισµένες ρυθµίσεις σε ότι αφορά την παραγωγή του κώδικα. Από το µενού Tools επιλέξτε την επιλογή Options και στη συνέχεια από το πλαίσιο διαλόγου που θα εµφανιστεί κάντε κλικ στη καρτέλα cg (code generation). Η καρτέλα cg περιέχει όλες εκείνες τις τιµές που επηρεάζουν τη παραγωγή του κώδικα. Καταρχάς ας ρυθµίσουµε το φάκελο στον οποίο θα τοποθετηθεί το πηγαίο αρχείο (.cpp) και το header (.h) αρχείο µε τις δηλώσεις της κλάσης. Από το πλαίσιο λίστας «Type» επιλέξτε «Project». Στη συνέχεια στο «Properties» βρείτε την επιλογή «Directory» και αλλάξτε την σε «c:\stlabs\lab1» Στη συνέχεια για να αποφύγουµε την παραγωγή Αντιγραφέα Κατασκευαστή (copy constructor), Τελεστή Καταχώρησης (assignment operator) και Τελεστή Ελέγχου Ισότητας (equality operator) κάντε τα εξής: Επιλέξτε από το πλαίσιο λίστας «Type» την επιλογή «Class» και στη συνέχεια δώστε την τιµή «DoNotDeclare» στις ακόλουθες ιδιότητες: Generate Copy Constructor, Generate Assignment Operator, και Generate Equality Operator Σηµείωση Υλοποίησης: Ιδίωµα ορθόδοξης κανονικής µορφής (The orthodox canonical form idiom) Ο James Coplien στο βιβλίο του «Advanced C++: Programming styles and idioms»3 [2] αναφέρει ότι µια τάξη της C++ θα πρέπει να έχει τα ακόλουθα για να είναι µια τάξη που ακολουθεί το ιδίωµα της ορθόδοξης κανονικής µορφής: Ένα εξ ορισµού κατασκευαστή (default constructor) X::X() - 9 -

Ένα αντιγραφέα κατασκευαστή (copy constructor) X::X(const X&) Ένα τελεστή καταχώρησης (assignment operator) X& operator=(const X&), και Ένα καταστροφέα (destructor) X::~X() O Coplien αναφέρει ότι το ιδίωµα αυτό θα πρέπει να χρησιµοποιείται όταν: Θέλουµε να υποστηρίξουµε την καταχώρηση των αντικειµένων αυτής της τάξης ή θέλουµε να µπορούµε να περάσουµε αντικείµενα αυτής της τάξης σαν παραµέτρους µε αντιγραφή (pass by value) σε µεθόδους Θέλουµε να µπορούν τα αντικείµενα αυτής της τάξης να απελευθερώσουν αναφορές που τυχόν κρατάνε σε άλλα αντικείµενα άλλων τάξεων που προσµετρώνται (reference counted) ή να απελευθερώσουν µνήµη που δεσµεύτηκε για δικές τους ιδιότητες, λίγο πριν καταστραφούν Επειδή τα παραπάνω είναι επιθυµητά για όλες τις τάξεις, λογικά όλες οι τάξεις θα πρέπει να ακολουθούνε το ιδίωµα της ορθόδοξης κανονικής µορφής στη C++. Γι αυτό το λόγο και το Rose παράγει τα παραπάνω εξ ορισµού. Εµείς παρόλα αυτά θέλουµε να κρατήσουµε το παράδειγµά µας απλό και γι αυτό απενεργοποιήσαµε τη παραγωγή του αντιγραφέα κατασκευαστή και του τελεστή καταχώρησης καθώς επίσης και του τελεστή σύγκρισης για ισότητα. Κρατήσαµε όµως τον εξ ορισµού κατασκευαστή και τον καταστροφέα που θα παραχθούν, όπως θα δούµε. Για να προχωρήσουµε τώρα στη παραγωγή του κώδικα επιλέξτε τη τάξη κάνοντας αριστερό κλικ πάνω της και στη συνέχεια από το µενού Tools και το υποµενού C++ επιλέξτε «Code Generation» (παραγωγή κώδικα). Το αποτέλεσµα της παραγωγής του κώδικα θα είναι δυο αρχεία στον κατάλογο c:\stlabs\lab1: 1. Το πρώτο αρχείο είναι το Person.h που περιέχει την δήλωση της τάξης καθώς επίσης και τους ορισµούς των ιδιοτήτων και τις δηλώσεις των µεθόδων. Επίσης για την ιδιότητα name που δηλώσαµε το Rose παράγει και δυο ιδιωτικές µεθόδους set_name και get_name. Αυτές τις µεθόδους πρέπει να τις κάνουµε δηµόσιες αν θέλουµε να έχουν πρόσβαση οι χρήστες µας απευθείας στην ιδιότητα name. Ο καθαρός κώδικας (αν εξαιρέσουµε τα πλούσια σχόλια που παράγει το Rose) είναι ο ακόλουθος: #ifndef Person_h #define Person_h 1-10 -

class Person { public: Person(); ~Person(); int isnamed(); protected: private: const char* get_name() const; void set_name(char*const value); private: //## implementation char* name; ; // Class Person inline const char* Person::get_name() const { return name; inline void Person::set_name(char*const value) { name = value; #endif 2. Το δεύτερο αρχείο είναι το Person.cpp που περιέχει τον κενό κατασκευαστή και καταστροφέα καθώς και όλες τις µεθόδους που έχουµε δηλώσει (στη περίπτωσή µας µόνο την isnamed). Πάλι χωρίς τα σχόλια το αρχείο Person.cpp περιέχει τα ακόλουθα: - 11 -

#include "Person.h" Person::Person() { Person::~Person() { int Person::isNamed() { 3. Άσκηση Σχεδιάστε µια τάξη για ένα γεωµετρικό σχήµα. Η τάξη σας θα πρέπει να λέγεται Shape. Η τάξη σας θα πρέπει να έχει τουλάχιστον τις ακόλουθες ιδιωτικές (private) ιδιότητες: int center (το κέντρο του σχήµατος), Color linecolor (το χρώµα γραµµής του σχήµατος), Color fillcolor (το γέµισµα του σχήµατος). Επίσης θα πρέπει να έχει την µοναδική µέθοδο: public void draw(). Επίσης σχεδιάστε µια τάξη Color. Μην προσδιορίσετε ιδιότητες ή µεθόδους γι αυτή τη τάξη. Στην συνέχεια παράγετε κώδικα C++ για τις τάξεις που σχεδιάσατε. Ο κώδικας θα πρέπει να εξαχθεί στον κατάλογο c:\stlabs\lab1. Επίσης θα πρέπει να φροντίσετε ώστε να µην εξαχθούν από την διαδικασία παραγωγής κώδικα τα εξής: Αντιγραφέας Κατασκευαστής (copy constructor), Τελεστής Καταχώρησης (assignment operator) και Τελεστής Ελέγχου Ισότητας (equality operator). - 12 -

Εργαστήριο 2: Περιπτώσεις Χρήσης 1. Παρουσίαση Τι είναι η μοντελοποίηση με περιπτώσεις χρήσης; Μοντέλο περιπτώσεων χρήσης: µία άποψη του συστήµατος που αποδίδει έµφαση στην λειτουργικότητα ενός συστήµατος, όπως αυτή είναι ορατή από τους εξωτερικούς χρήστες του συστήµατος. Μια περίπτωση χρήσης διαµερίζει την λειτουργικότητα ενός συστήµατος σε συναλλαγές («περιπτώσεις χρήσης») που έχουν νόηµα για τους χρήστες του συστήµατος («ρόλους»). Ο ακόλουθος πίνακας συνοψίζει τις βασικές έννοιες που συναντάµε σε ένα διάγραµµα περιπτώσεων χρήσης. ΚΑΤΑΣΚΕΥΗ ΠΕΡΙΓΡΑΦΗ ΣΥΝΤΑΚΤΙΚΟ Περίπτωση χρήσης Μία ακολουθία ενεργειών, συµπεριλαµβανοµένων και των παραλλαγών τους, που µπορεί να επιτελέσει ένα σύστηµα σε αλληλεπίδραση µε τους ρόλους που υπάρχουν στο σύστηµα αυτό Ρόλος Ένας ρόλος είναι ένας ρόλος που µπορεί να παίξει ένας χρήστης του συστήµατος όταν αλληλεπιδρά µε τις περιπτώσεις χρήσης του συστήµατος Συσχέτιση ηλώνει την συµµετοχή ενός ρόλου σε µια περίπτωση χρήσης Επέκταση Γενίκευση Η σχέση µιας επεκταµένης και µιας περίπτωσης χρήσης βάσης, που προσδιορίζει πως θα γίνει αυτή η επέκταση (τα σηµεία επέκτασης. Μια συσχέτιση µιας πιο γενικής περίπτωσης χρήσης µε µια πιο ειδική περίπτωση χρήσης. - 13 -

Περιεκτικότητα Μία τέτοια συσχέτιση δείχνει ότι µια περίπτωση χρήσης περιλαµβάνει τις λειτουργίες µιας άλλης περίπτωσης χρήσης. ηλαδή η λειτουργικότητα της περιλαµβανόµενης περίπτωσης χρήσης εισάγεται στην περίπτωση χρήσης βάσης. Διαγραμματικά στοιχεία Απεικονίζει τις περιπτώσεις χρήσης, τους ρόλους και τις συσχετίσεις µεταξύ τους Η εσωτερική λειτουργία κάθε περίπτωσης χρήσης µπορεί να περιγραφεί µε κείµενο ή να απεικονισθεί µε διαγράµµατα αλληλεπίδρασης Τα είδη που υπάρχουν δεν περιορίζονται µόνο στα διαγράµµατα αλλά µπορούµε να έχουµε και την περιγραφή µε κείµενο. Μερικά διαγράµµατα περιπτώσεων χρήσης είναι τα ακόλουθα: Το ακόλουθο είναι ένα διάγραµµα που απεικονίζει ένα Πελάτη (Customer) που συνδιαλέγεται µε ένα σύστηµα αγοράς εξ αποστάσεως (µέσω τηλεφώνου ή και µέσω Internet). Ο πελάτης θέλει να µπορεί να ελέγξει την κατάσταση σε ότι αφορά ένα προϊόν (Check Status), να µπορεί να δώσει µια παραγγελία (Place Order) και να µπορεί να δώσει και να επιβεβαιώσει τα στοιχεία της πιστωτικής του κάρτας. Ο πωλητής (Salesperson υποθέτουµε ότι η εταιρεία πέρα από τηλεφωνικές πωλήσεις κάνει και άλλες πωλήσεις µέσω πωλητών) θέλει να µπορεί να κάνει τα ίδια που κάνει και ένας πελάτης µε την διαφορά ότι δεν χρειάζεται να δώσει τις λεπτοµέρειες της πιστωτικής του κάρτας. Ο υπάλληλος αποστολής (Shipping Clerk) θέλει να µπορεί να εκδώσεις τις παραγγελίες (Fill Orders), και τέλος ο Επόπτης (Supervisor) θέλει να µπορεί να εξετάσει την πιστωτική εικόνα των πελατών (Establish Credit). - 14 -

Το ακόλουθο είναι ένα παράδειγµα των σχέσεων περιεκτικότητας («includes») και επέκτασης («extend»). Επίσης µπορούν να υπάρξουν και σχέσεις µεταξύ των ρόλων ενός διαγράµµατος περιπτώσεων χρήσης όπως δείχνει το ακόλουθο διάγραµµα: Ένα παράδειγµα περιγραφής µιας περίπτωσης χρήσης µε κείµενο είναι το ακόλουθο που περιγράφει µια περίπτωση χρήσης για την αλλαγή στοιχείων πτήσης ενός ταξιδιώτη: ΠΕΡΙΠΤΩΣΗ ΧΡΗΣΗΣ: ΑΛΛΑΓΗ ΣΤΟΙΧΕΙΩΝ ΠΤΗΣΗΣ Ρόλοι: ταξιδιώτης, λογαριασµός Β πελάτη, σύστηµα κράτησης θέσεων Προ-συνθήκες: Ο ταξιδιώτης συνδέθηκε µε το σύστηµα και επέλεξε την επιλογή «αλλαγής πτήσης» Βασικό σενάριο: Το σύστηµα ανακτά τον λογαριασµό του πελάτη από την Β - 15 -

Το σύστημα ρωτά τον ταξιδιώτη να επιλέξει το τμήμα της πτήσης που θέλει να αλλάξει. Ο ταξιδιώτης επιλέγει το επιθυμητό τμήμα. Το σύστηµα ζητά νέα αναχώρηση και προορισµό. Ο ταξιδιώτης δίνει τις απαιτούµενες πληροφορίες Το σύστηµα παρουσιάζει περίληψη της συναλλαγής Εναλλακτικά σενάρια: Αν δεν υπάρχουν διαθέσιµες πτήσεις τότε Πότε πρέπει να χρησιμοποιείτε περιπτώσεις χρήσης Μοντελοποιείστε τις απαιτήσεις χρήσης του συστήµατος Μοντελοποιείστε σενάρια δοκιµών µε τις περιπτώσεις χρήσης Αν χρησιµοποιείτε µια µεθοδολογία ανάπτυξης καθοδηγούµενη από περιπτώσεις χρήσης: Ξεκινήστε µε περιπτώσεις χρήσης και παράγετε τα δοµικά και λειτουργικά µοντέλα από αυτές Αν δεν χρησιµοποιείτε µια µεθοδολογία ανάπτυξης καθοδηγούµενη από περιπτώσεις χρήσης: Επιβεβαιώστε ότι οι περιπτώσεις χρήσης είναι συνεπείς µε τα δοµικά και λειτουργικά µοντέλα. Συμβουλές μοντελοποίησης με περιπτώσεις χρήσης Εξασφαλίστε ότι κάθε περίπτωση χρήσης περιγράφει ένα σηµαντικό τµήµα της λειτουργικότητας του συστήµατος που είναι κατανοητό από τους ειδικούς του χώρους ανάπτυξης (domain experts) αλλά και από τους προγραµµατιστές. Όταν ορίζετε τις περιπτώσεις χρήσης µε κείµενο να είστε ακριβείς και συνεπείς µε τα ρήµατα και τα ουσιαστικά. Αυτό θα βοηθήσει στην παραγωγή των αντικειµένων και των διαγραµµάτων αλληλεπίδρασης αργότερα Εξάγετε τις περιπτώσεις χρήσης που απαιτούνται από άλλες περιπτώσεις χρήσης: o Αν η περίπτωση χρήσης που περιλαµβάνεται είναι υποχρεωτική χρησιµοποιείστε σχέση περιεκτικότητας («include»). o Αν η περίπτωση χρήσης βάσης είναι πλήρης και η χρήση της περιλαµβανόµενης περίπτωσης χρήσης προαιρετική χρησιµοποιείστε τη σχέση της επέκτασης («extend»). Ένα διάγραµµα περιπτώσεων χρήσης θα πρέπει: o Να περιέχει µόνο περιπτώσεις χρήσης που ανήκουν στο ίδιο επίπεδο αφαίρεσης o Να περιλαµβάνει µόνο ρόλους που απαιτούνται - 16 -

Αν σε κάποιο έργο υπάρχουν πολλές περιπτώσεις χρήσης τότε αυτές θα πρέπει να οργανωθούν σε πακέτα. 2. Εφαρμογή Σε αυτό το σηµείο θα δούµε πως σχεδιάζουµε διαγράµµατα περιπτώσεων χρήσης µε το Rational Rose και πως εισάγουµε την τεκµηρίωση για τις περιπτώσεις χρήσης. Επίσης θα δούµε πως µπορούµε να εισάγουµε στερεότυπα συσχετίσεων (π.χ. το στερεότυπο «include»). Ρόλοι Για να δηµιουργήσετε ένα νέο ρόλο κάντε τα εξής: Κάντε δεξί κλικ στο «Use Case View» από το παράθυρο πλοήγησης Επιλέξετε την επιλογή «New:Actor» Αυτό θα δηµιουργήσει ένα νέο Ρόλο µε το όνοµα «New Class». Ενώ ο νέος ρόλος είναι επιλεγµένος εισάγετε το όνοµα του ρόλου. Στο παράθυρο τεκµηρίωσης «Documentation», εισάγετε την τεκµηρίωση του ρόλου (δηλαδή τι κάνει ο ρόλος στο διάγραµµα). Ακολουθώντας την παραπάνω διαδικασία, δηµιουργήσετε ένα ρόλο «Student» µε την τεκµηρίωση «A person registered to take classes at the University.». Το διάγραµµα σας θα πρέπει να έχει την ακόλουθη µορφή: ηµιουργήστε στη συνέχεια ένα δεύτερο ρόλο µε το όνοµα «Professor» και την τεκµηρίωση «A person certified to teach classes at the University.» Περιπτώσεις Χρήσης - 17 -

Για να δηµιουργήσετε περιπτώσεις χρήσης κάνετε τα εξής: Κάντε δεξί κλικ στο «Use Case View» από το παράθυρο πλοήγησης Επιλέξετε την επιλογή «New:Use Case» Αυτό θα δηµιουργήσει µια νέα ανώνυµη περίπτωση χρήσης. Ενώ η νέα περίπτωση χρήσης είναι επιλεγµένη πληκτρολογείτε το όνοµά της. Στο παράθυρο τεκµηρίωσης «Documentation», εισάγετε την τεκµηρίωση της περίπτωσης χρήσης (δηλαδή ποιο σκοπό εκπληρώνει αυτή η περίπτωση χρήσης στο σύστηµα). ηµιουργήστε τις ακόλουθες περιπτώσεις χρήσης µε την τεκµηρίωση που δίνεται: Περίπτωση Χρήσης Register for Courses Select courses to teach - User Validation - Διάγραμμα Περιπτώσεων Χρήσης Τεκµηρίωση This use case provides the capability to select courses for a semester Ένα διάγραµµα περιπτώσεων χρήσης δείχνει τις συσχετίσεις µεταξύ των ρόλων και των περιπτώσεων χρήσης σε ένα σύστηµα. Η άποψη περιπτώσεων χρήσης (Use Case View) δηµιουργείται στο Rose αυτοµάτως µε ένα κύριο διάγραµµα (Main). Μπορείτε αν θέλετε να δηµιουργήσετε και άλλα διαγράµµατα σε ένα σύστηµα (π.χ. ένα διάγραµµα που να δείχνει όλες τις περιπτώσεις χρήσης για ένα ρόλο του συστήµατος). Για να ανοίξετε ένα διάγραµµα περιπτώσεων χρήσης: 1. Κάντε κλικ στο + δίπλα από τη φράση «Use Case View» στο παράθυρο πλοήγησης. 2. Κάντε διπλό κλικ στο διάγραµµα που θέλετε να ανοίξετε. 3. Μεγιστοποιείστε το παράθυρο του διαγράµµατος αν το επιθυµείτε Για να προσθέσετε ένα ρόλο ή µια περίπτωση χρήσης που έχετε προηγουµένως δηµιουργήσει στο διάγραµµα κάντε τα εξής: 1. Κάντε κλικ στη περιοχή πλοήγησης για να επιλέξετε το ρόλο ή την περίπτωση χρήσης από την περιοχή πλοήγησης 2. Σύρετε και αφήστε τον ρόλο ή την περίπτωση χρήσης στο διάγραµµα. Για να εισάγετε στο διάγραµµα Main τους ρόλους και τις περιπτώσεις χρήσης που δηµιουργήσατε στα προηγούµενα εδάφια, κάντε διπλό κλικ στο Main από την περιοχή πλοήγησης (αν δεν το βλέπετε κάντε κλικ στο + δίπλα από την άποψη Use Case View). Στη συνέχεια εφαρµόστε τα βήµατα που αναφέραµε προηγουµένως. Στο τέλος της εισαγωγής το διάγραµµα θα πρέπει να έχει την ακόλουθη µορφή που φαίνεται στην ακόλουθη εικόνα (µετακινήστε τα σύµβολα στις θέσεις που φαίνονται στην εικόνα): - 18 -

Συσχετίσεις Για να συσχετίσετε τα σύµβολα (ρόλους και περιπτώσεις χρήσης µεταξύ τους) χρησιµοποιείτε το σύµβολο της συσχέτισης από την γραµµή εργαλείων που είναι το ακόλουθο σύµβολο ( προς το πέρας. ). Αφού το επιλέξετε σύρετε από την αρχή της συσχέτισης Συσχετίστε τον ρόλο «Student» µε την περίπτωση χρήσης «Register for Courses». Αυτό σηµαίνει ότι ο ρόλος Student (φοιτητής) χρησιµοποιεί και ωφελείται από την περίπτωση χρήσης «Register for Courses» («Εγγραφή σε Μαθήµατα»). Συσχετίστε τον ρόλο «Professor» µε την περίπτωση χρήσης «Select Courses to teach». Αυτό σηµαίνει ότι ο ρόλος «Professor» («Καθηγητής») χρησιµοποιεί και ωφελείται από την περίπτωση χρήσης «Select Courses to Teach» («Επιλογή Μαθηµάτων για ιδασκαλία»). Στην συνέχεια παρατηρούµε ότι για να αλληλεπιδράσει είτε ο φοιτητής είτε ο καθηγητής µε το σύστηµα θα πρέπει να γίνει πρώτα η «Επικύρωση του Χρήστη» («User Validation»). Επειδή αυτή η περίπτωση χρήσης περιλαµβάνεται και στις δυο άλλες περιπτώσεις χρήσης θα πρέπει να τραβήξετε γραµµές συσχέτισης από τις δυο άλλες περιπτώσεις χρήσης προς την περίπτωση χρήσης «User Validation». Στη συσχέτιση αυτή θα πρέπει να βάλετε το στερεότυπο «include». Ο τρόπος µε τον οποίο βάζετε το στερεότυπο είναι ο ακόλουθος: - 19 -

1. Τραβήξτε τις γραµµές συσχέτισης από τις δύο άλλες περιπτώσεις χρήσης στην περίπτωση χρήσης «User Validation» 2. Κάντε διπλό κλικ στις γραµµές συσχέτισης που τραβήξατε για να εµφανιστεί το πλαίσιο διαλόγου προδιαγραφής για τη συσχέτιση 3. Πληκτρολογήστε στο combo box «Stereotype» την λέξη «include» 4. Πατήστε το «OK» για να κλείσετε το πλαίσιο διαλόγου προδιαγραφής 5. Όταν επιστρέψετε στο διάγραµµα (αν δεν βλέπετε το στερεότυπο που εισάγατε) κάντε δεξί κλικ στη γραµµή συσχέτισης και από το αναδυόµενο µενού επιλέξτε την επιλογή «Show Stereotype» («Εµφάνισε Στερεότυπο»). Στο τέλος της διαδικασίας θα πρέπει το διάγραµµα περιπτώσεων χρήσης να έχει την µορφή που δείχνει η ακόλουθη εικόνα : - 20 -

3. Άσκηση ίνεται η ακόλουθη περιγραφή για ένα σύστηµα κράτησης θέσεων: Με το σύστηµα αλληλεπιδρούν ταξιδιώτες και ταξιδιωτικοί πράκτορες. Και οι δυο ενδιαφέρονται για την κράτηση θέσεων. Οι ταξιδιωτικοί πράκτορες έχουν µια εξειδικευµένη διαδικασία κράτησης θέσης µια και η κράτηση θέσης από ένα ταξιδιωτικό πράκτορα γίνεται µε διαφορετικό τρόπο. Και για τον ταξιδιωτικό πράκτορα και για τον απλό ταξιδιώτη η κράτηση θέσης συνεπάγεται την πληρωµή της πτήσης. Η πληρωµή µπορεί να γίνει είτε µια πιστωτική κάρτα, είτε µε µετρητά. Σκοπός της άσκησης είναι η δηµιουργία ενός διαγράµµατος περιπτώσεων χρήσης που προκύπτει από την περιγραφή. Θα πρέπει: Να δηµιουργήσετε τους κατάλληλους ρόλους και τις κατάλληλες περιπτώσεις χρήσης. Να δηµιουργήσετε τις κατάλληλες συσχετίσεις µεταξύ τους. Να διαπιστώσετε ποιες περιπτώσεις χρήσης χρησιµοποιούνται από άλλες περιπτώσεις χρήσης και να τις εξάγετε σαν διαφορετικές περιπτώσεις χρήσης συνδέοντάς τις µε τις άλλες περιπτώσεις χρήσης (που τις χρησιµοποιούν) µε συσχετίσεις τύπου «include». Να διαπιστώσετε ποιες περιπτώσεις χρήσης είναι ειδικές περιπτώσεις χρήσης άλλων περιπτώσεων χρήσης και να τις συνδέσετε µε τις περιπτώσεις χρήσης - 21 -

βάσης µε γενικεύσεις χρησιµοποιώντας το εργαλείο «Generalization» από την γραµµή εργαλείων που είναι το ακόλουθο: ( ) - 22 -

Εργαστήριο 3: Διάγραμμα Τάξεων - Τα βασικά στοιχεία 1. Παρουσίαση Ορολογία Οι τάξεις (classes) αποτελούν την βάση της κατασκευής οποιουδήποτε αντικειµενοστραφούς συστήµατος. Ενσωµατώνουν (encapsulate) δεδοµένα και τις λειτουργίες που επενεργούν στα δεδοµένα αυτά. Από τις τάξεις δηµιουργούνται αντικείµενα (objects) ή περιστάσεις (instances) αυτών των τάξεων, όταν λειτουργεί το σύστηµα. Όπως θα δούµε σε επόµενα µαθήµατα αυτό που δίνει ζωή σε ένα σύστηµα είναι οι αλληλεπιδράσεις µεταξύ των αντικειµένων του. Αυτές οι αλληλεπιδράσεις σε επίπεδο σχεδίασης αποτυπώνονται συνήθως µε την χρήση διαγραµµάτων αλληλεπίδρασης (βλ. επόµενα). Σκοπός του διαγράµµατος τάξεων (class diagram) δεν είναι η απεικόνιση αυτών των αλληλεπιδράσεων, αλλά η απεικόνιση της στατικής δοµής του συστήµατος. Αυτή η δοµή συµπεριλαµβάνει: Τις τάξεις (classes) που περιέχουν: o Ιδιότητες (attributes) που είναι τα συνήθως ιδιωτικά δεδοµένα µιας τάξης (π.χ. το υπόλοιπο ενός τραπεζικού λογαριασµού) o Λειτουργίες (operations) που είναι οι συνήθως δηµόσιες λειτουργίες µιας τάξης που καλούν τα άλλα αντικείµενα. Τις σχέσεις (relationships) µεταξύ των τάξεων που περιλαµβάνουν: o Απλές συσχετίσεις (associations) που είναι µόνιµες σχέσεις µεταξύ των τάξεων. Για παράδειγµα µια τάξη Πελάτη µιας τράπεζας θα έχει µόνιµη συσχέτιση µε έναν ή περισσότερους Τραπεζικούς Λογαριασµούς. o Συσσωµατώσεις (aggregations) και Συνθέσεις (Compositions) που είναι ειδικές κατηγορίες συσχετίσεων µε µερικά επιπλέον σηµασιολογικά στοιχεία (semantics), και µε τις οποίες θα ασχοληθούµε σε επόµενο εργαστήριο. o Εξαρτήσεις (dependencies) που συνήθως εκφράζουν προσωρινές αλληλεπιδράσεις µεταξύ των αντικειµένων κάποιων τάξεων κατά τη διάρκεια εκτέλεσης ενός προγράµµατος. Για παράδειγµα το x αντικείµενο ATM µπορεί να αποστείλει το µήνυµα χρέωση στο y αντικείµενο Τραπεζικός Λογαριασµός. Αυτό σηµαίνει ότι η τάξη ATM έχει µια εξάρτηση από την τάξη Τραπεζικός Λογαριασµός. Και µε τις εξαρτήσεις θα ασχοληθούµε σε επόµενο µάθηµα. o Γενικεύσεις (generalizations) στις οποίες µια τάξη (η υποτάξη) που είναι περισσότερο ειδική υπό κάποια έννοια, κληρονοµεί από µια άλλη τάξη (την υπερτάξη) που υπό την ίδια έννοια είναι πιο γενική, τις - 23 -

λειτουργίες και τα δεδοµένα της και επεκτείνει την λειτουργία της κατά κάποιο τρόπο. Βασικά Διαγραμματικά Στοιχεία Ο ακόλουθος πίνακας συνοψίζει τα βασικά διαγραµµατικά στοιχεία που συναντάµε σε ένα διάγραµµα τάξεων: ΚΑΤΑΣΚΕΥΗ ΠΕΡΙΓΡΑΦΗ ΠΑΡΑ ΕΙΓΜΑ ΣΥΝΤΑΞΗΣ Τάξη Αποτελεί την βάση της κατασκευής οποιουδήποτε αντικειµενοστραφούς συστήµατος. Ενσωµατώνει (encapsulate) δεδοµένα και τις λειτουργίες που επενεργούν στα δεδοµένα αυτά. Στο πάνω διαµέρισµα απεικονίζονται οι ιδιότητες και στο κάτω διαµέρισµα οι µέθοδοι Συσχέτιση Ρόλος Πολλαπλότητα Δυνατότητα Πλοήγησης Οι συσχετίσεις αναπαριστούν σχέσεις µεταξύ των περιστάσεων των τάξεων (Ένας άνθρωπος εργάζεται για µια εταιρεία. Μια εταιρεία έχει ένα αριθµό γραφείων). Ένα πέρας µπορεί να ονοµαστεί µε µια ετικέτα. Αυτή η ετικέτα ονοµάζεται όνοµα ρόλου (role name). (Τα πέρατα των συσχετίσεων συχνά καλούνται ρόλοι). Το πέρας µιας συσχέτισης έχει πολλαπλότητα (multiplicity), που είναι µια ένδειξη για το πόσα αντικείµενα µπορούν να συµµετέχουν σ αυτή τη σχέση. Αυτή συνήθως είναι 1 (ακριβώς 1), 0.. 1 (προαιρετική συσχέτιση), * (πολλά αντικείµενα) ή και κάποιος συγκεκριµένος αριθµός (π.χ. 11) είχνει ότι υπάρχει δυνατότητα πλοήγησης από την µια κατεύθυνση - 24 -

Πλοήγησης Γενίκευση αλλά όχι από την άλλη. Αν για παράδειγµα µπορούµε να βρούµε σε ποια µαθήµατα διδάσκει ένας καθηγητής ξεκινώντας από ένα αντικείµενο της τάξης Professor, αλλά όχι το αντίστροφο θα έχουµε δυνατότητα πλοήγησης µόνο από την τάξη Professor προς την τάξη Course (όπως φαίνεται και στο παράδειγµα) Γενίκευση είναι η δυνατότητα που έχει µια τάξη να κληρονοµεί από µια άλλη τάξη λειτουργίες και ιδιότητες και να εξειδικεύει κατά κάποιο τρόπο την λειτουργία της. Στο σχήµα του παραδείγµατος έχουµε ένα φοιτητή και επεκτείνουµε την τάξη αυτή για να δηµιουργήσουµε ένα µερικής-απασχόλησης φοιτητή (part-time student) Απόψεις σχεδίασης O Martin Fowler και άλλοι έχουν επισηµάνει την ανάγκη να διαχωρίσουµε την άποψη από την οποία σχεδιάζουµε ένα διάγραµµα (οποιοδήποτε διάγραµµα) αλλά κυρίως τα διαγράµµατα τάξεων. Αυτό σηµαίνει ουσιαστικά ότι θα πρέπει να διευκρινίζουµε πάντα σε ποιο επίπεδο λεπτοµέρειας είµαστε: 1. Εννοιολογική (conceptual) άποψη. Όταν χρησιµοποιούµε την εννοιολογική άποψη, σχεδιάζουµε ένα διάγραµµα που αναπαριστά τις έννοιες στον υπό µελέτη χώρο ανάπτυξης. Χρησιµοποιείται στα αρχικά στάδια όταν εξοικειωνόµαστε µε την εφαρµογή που αναπτύσσουµε. εν υπάρχει µεγάλος βαθµός τεχνικών λεπτοµερειών. 2. Άποψη προδιαγραφής (specification). Σε αυτή την άποψη ασχολούµαστε µε το λογισµικό αλλά ασχολούµαστε µε τις διασυνδέσεις (interfaces) του λογισµικού, όχι µε την υλοποίηση. Αντιµετωπίζουµε δηλαδή τις τάξεις σαν τύπους του συστήµατος που αναπτύσσουµε. Η διαφορά είναι ότι ενδέχεται για ένα τύπο να χρησιµοποιήσουµε περισσότερες τάξεις, για παράδειγµα, όταν θα προχωρήσουµε στην υλοποίηση. Χρησιµοποιείται στα επόµενα στάδια της ανάπτυξης της εφαρµογής. Υπάρχουν λεπτοµέρειες αλλά όχι αυτές που αφορούν τις ιδιαιτερότητες του εργαλείου που χρησιµοποιούµε για την ανάπτυξη. 3. Άποψη υλοποίησης: Σε αυτή την άποψη έχουµε πραγµατικά τάξεις και σχεδιάζουµε τα εσωτερικά στοιχεία της υλοποίησης. Αυτή είναι ίσως η - 25 -

περισσότερο χρησιµοποιούµενη άποψη, αλλά από πολλές απόψεις είναι µάλλον καλύτερο να ακολουθείτε την άποψη της προδιαγραφής, γιατί σε τελική ανάλυση η σχεδίαση γίνεται για να µας βοηθήσει να κατανοήσουµε το πρόγραµµα που θα αναπτύξουµε και δεν χρειάζεται να είναι ακριβής αντανάκλαση αυτού του προγράµµατος. Το πρόγραµµα θα είναι περισσότερο λεπτοµερές από την σχεδίαση. 2. Εφαρμογή Σε αυτό το σηµείο θα δούµε πως µπορούµε να δηµιουργήσουµε τάξεις στο Rational Rose και πως µπορούµε να εισάγουµε σε διάγραµµα τις τάξεις και τις συσχετίσεις που αναφέραµε προηγουµένως. Επίσης θα δούµε πως εισάγουµε στο διάγραµµα τις ιδιότητες και τις λειτουργίες των τάξεων. Δημιουργία Τάξεων Στην πραγµατικότητα οι τάξεις διαχωρίζονται σε πακέτα έτσι ώστε να ελαχιστοποιηθούν οι εξαρτήσεις µεταξύ τους και να είναι περισσότερο ελέγξιµες. Στα πακέτα θα αναφερθούµε σε επόµενα µαθήµατα. Προς το παρόν όλες οι τάξεις που θα κάνουµε θα ανήκουν στο εξ ορισµού (default) «πακέτο» της λογικής όψης του συστήµατος. Επίσης όπως θα δείτε κάνοντας κλικ στο + δίπλα από το «Logical View» (λογική όψη) στην περιοχή πλοήγησης υπάρχει ήδη ένα διάγραµµα τάξεων το Main (Κύριο διάγραµµα). Μπορείτε να δηµιουργήσετε και άλλα διαγράµµατα τάξεων (το σύνηθες µια και οι τάξεις µιας εφαρµογής είναι αρκετές). Εµείς στο παράδειγµα αυτό θα αρκεστούµε στο κύριο διάγραµµα τάξεων (Main). Για να δηµιουργήσετε µια τάξη κάντε τα εξής: 1. Κάντε δεξί κλικ στο «Logical View» στην περιοχή πλοήγησης. 2. Από το µενού επιλέξτε «New:Class» (νέα τάξη) 3. Ενώ η τάξη είναι επιλεγµένη εισάγετε το όνοµά της. Στη συνέχεια για να εισάγετε τη τάξη στο διάγραµµα Main κάντε διπλό κλικ στο Main για να το φέρετε στο προσκήνιο αν δεν είναι στο προσκήνιο, και σύρετε τη τάξη από τη περιοχή πλοήγησης και αφήστε την στο διάγραµµα. Για να δηµιουργήσετε και ταυτόχρονα εισάγετε µια τάξη στο διάγραµµα Main µπορείτε να κάνετε το εξής: 1. Κάνοντας διπλό κλικ στο Main από το «Logical View» για να ανοίξετε το διάγραµµα τάξεων Main και στη συνέχεια 2. Κάνοντας κλικ στο εργαλείο «Class» ( ) για να το επιλέξετε από την γραµµή εργαλείων 3. Και τέλος κάνοντας κλικ στην περιοχή σχεδίασης του διαγράµµατος για να εισάγετε στη νέα τάξη. 4. Τέλος και ενώ η τάξη στο διάγραµµα είναι ακόµα επιλεγµένη πληκτρολογείτε το όνοµά της. - 26 -

ηµιουργήστε και εισάγετε στο διάγραµµα Main (µε όποια µέθοδο προτιµάτε) τις ακόλουθες τάξεις: 1. Order: Η τάξη της παραγγελίας σε ένα σύστηµα παραγγελιών 2. Customer: Η τάξη για τους πελάτες του συστήµατος παραγγελιών 3. PersonalCustomer: Η εξειδίκευση της τάξης του πελάτη για τους πελάτες που είναι µεµονωµένα άτοµα 4. CorporateCustomer: Η εξειδίκευση της τάξης του πελάτη για τους πελάτες που είναι εταιρείες 5. Employee: Ο υπάλληλος της εταιρείας µας που είναι αντιπρόσωπος πωλήσεων της εταιρείας-πελάτης (αφορά τους πελάτες που είναι εταιρείες µια και το σύστηµα µπορεί να έχει έναν υπεύθυνο πωλήσεων για τον πελάτη-εταιρεία). 6. OrderLine: Κάθε παραγγελία έχει διάφορες γραµµές παραγγελίας. Το αντικείµενο OrderLine είναι µια τέτοια γραµµή. 7. Product: Κάθε γραµµή παραγγελίας αφορά ένα προϊόν. Η τάξη Product αναπαριστά τα προϊόντα αυτά στο σύστηµα παραγγελιών. Ταχτοποιήστε τις τάξεις στο διάγραµµα έτσι ώστε να έχουν τις θέσεις που φαίνονται στην εικόνα που ακολουθεί: Συσχετίσεις και Γενικεύσεις Για να σχεδιάσετε µια συσχέτιση: - 27 -

1. Επιλέξτε από την εργαλειοθήκη το εργαλείο της συσχέτισης (association) που είναι το ( ) 2. Σύρετε τη γραµµή και ξεκινώντας από µια τάξη και καταλήγοντας στην τάξη που συσχετίζεται µαζί της. Για να σχεδιάσετε µια γενίκευση: 1. Επιλέξτε από την εργαλειοθήκη το εργαλείο της γενίκευσης (generalization) που είναι το ( ) 2. Σύρετε την γραµµή από την υποτάξη προς την υπερτάξη 3. Αν έχετε περισσότερες υποτάξεις της µιας για να έχετε µια κοινή γραµµή γενίκευσης που καταλήγει στην υπερτάξη σύρετε τη γραµµή της γενίκευσης από την υποτάξη και αφήστε την πάνω στην ήδη υπάρχουσα γραµµή γενίκευσης. Κατ αυτό τον τρόπο οι δύο γενικεύσεις θα συνενωθούν σε µια γραµµή. Έτσι δείχνουµε ότι οι δύο γενικεύσεις είναι ως προς τον ίδιο διακριτή (discriminator). Έτσι, για παράδειγµα, η διάκριση των πελατών σε πελάτες που είναι εταιρείες (corporate customers) και σε πελάτες που είναι πρόσωπα (personal customers) είναι ως προς τον διακριτή του τύπου του πελάτη. Αν για παράδειγµα µας ενδιέφερε η διάκριση σε άντρες και γυναίκες τότε θα είχαµε µια άλλη γενίκευση ως προς τον διακριτή «φύλλο» µε µία άλλη ξεχωριστή γραµµή γενίκευσης. Σχεδιάστε τις συσχετίσεις και γενικεύσεις, όπως φαίνονται στην ακόλουθη εικόνα: - 28 -

Εισαγωγή Ιδιοτήτων και Λειτουργιών Υπάρχουν αρκετοί τρόποι για να εισάγετε ιδιότητες και λειτουργίες, στις τάξεις ενός διαγράµµατος τάξεων. ύο από αυτές είναι οι ακόλουθες: 1. Κάντε δεξί κλικ στη τάξη από την περιοχή πλοήγησης 2. Από το µενού επιλέξτε «New:Attribute» (Νέα:Ιδιότητα) για µια νέα ιδιότητα ή «New:Operation» (Νέα:Λειτουργία) για µια νέα λειτουργία. 3. Ενώ η νέα λειτουργία ή ιδιότητα είναι ακόµα επιλεγµένη εισάγετε το όνοµά της. Ένας άλλος τρόπος είναι να κάνετε διπλό κλικ στην τάξη είτε από την περιοχή πλοήγησης είτε από το διάγραµµα και να εµφανίσετε το παράθυρο προδιαγραφής για την τάξη. Από το παράθυρο προδιαγραφής κάνετε κλικ στη καρτέλα «Operations» (Λειτουργίες) για να εισάγετε µια νέα λειτουργία ή κλικ στην καρτέλα «Attributes» («Ιδιότητες») για µια νέα ιδιότητα της τάξης. Στην συνέχεια θα δούµε την διαδικασία για την εισαγωγή µιας λειτουργίας. Η διαδικασία είναι εντελώς ανάλογη για µια νέα ιδιότητα. 1. Κάντε διπλό κλικ στην τάξη «Order» είτε από την περιοχή πλοήγησης είτε από το διάγραµµα. 2. Από το παράθυρο προδιαγραφής που θα εµφανιστεί κάντε κλικ στην καρτέλα «Operations» («Λειτουργίες»). 3. Κάντε δεξί κλικ στη λευκή περιοχή (αφού η τάξη δεν έχει καµία ιδιότητα ακόµα) 4. Από το αναδυόµενο µενού επιλέξτε «Insert» («Εισαγωγή»). 5. Πληκτρολογήστε το όνοµα dispatch 6. Σαν τύπο επιστροφής (return type) πληκτρολογήστε void. 7. Αν θέλετε να προσδιορίσετε περισσότερες λεπτοµέρειες (όπως για παράδειγµα τις παραµέτρους των µεθόδων και τους τύπους αυτών των παραµέτρων) κάντε διπλό κλικ πάνω στην γραµµή της λειτουργίας για να εµφανίσετε το παράθυρο προδιαγραφής της λειτουργίας. - 29 -

Το αν θα δώσετε όλες τις λεπτοµέρειες ή απλά και µόνο το όνοµα µιας µεθόδου εξαρτάται από δύο κυρίως πράγµατα: Αν σχεδιάζετε το διάγραµµα τάξης από εννοιολογική άποψη ή από άποψη προδιαγραφής δεν χρειάζεται να µπείτε σε πολλές λεπτοµέρειες. Αν σχεδιάζετε το διάγραµµα από άποψη υλοποίησης εµφανίστε µόνο τις λεπτοµέρειες που απαιτούνται για αυτά που θέλετε να δείξετε. Αν χρησιµοποιείτε λειτουργίες παραγωγής κώδικα (code generation) θα πρέπει να µπείτε σε πολλές λεπτοµέρειες για να πάρετε χρήσιµο κώδικα και να µην χρειαστεί να προσθέσετε πολλές λεπτοµέρειες. Εισάγετε στο διάγραµµα µε όποιον τρόπο θέλετε τις µεθόδους και ιδιότητες που φαίνονται στην εικόνα που ακολουθεί. Αρκούνε τα ονόµατα: Πολλαπλότητα και Δυνατότητα Πλοήγησης - 30 -

Ένα ακόµα στοιχείο που εµφανίζεται σχεδόν πάντα στα διαγράµµατα τάξεων είναι οι πολλαπλότητες. Επίσης πολύ συχνά εµφανίζονται και οι δυνατότητες πλοήγησης. Αφού και τα δύο αυτά στοιχεία αφορούν το πέρας µιας συσχέτισης από την µια ή την άλλη πλευρά, είναι στοιχεία που καθορίζονται από τις καρτέλες των ρόλων στο παράθυρο προδιαγραφής της συσχέτισης, το οποίο εµφανίζεται όταν κάνουµε διπλό κλικ στη γραµµή της συσχέτισης. Στο παράδειγµα που ακολουθεί καθορίζουµε για το πέρας της συσχέτισης Order/Customer που αφορά την τάξη Customer, ότι έχει πολλαπλότητα 1 (δηλαδή κάθε Παραγγελία αφορά ένα Πελάτη). Επίσης για το πέρας της συσχέτισης που αφορά τον την τάξη Order ότι δεν υπάρχει δυνατότητα πλοήγησης (navigability) προς αυτή, δηλαδή υπάρχει δυνατότητα πλοήγησης µόνο από την κατεύθυνση της τάξης Order προς την τάξη Customer (αυτό σηµαίνει ότι έχοντας ένα αντικείµενο της τάξης Order µπορούµε να πούµε ποιον πελάτη αφορά, αλλά όχι το αντίστροφο). Για την πολλαπλότητα του πέρατος που αφορά την τάξη Order θα την καθορίσουµε σε * ή 0..n (όπως συµβολίζει το * το Rose), µια και µε ένα πελάτη µπορούν να συσχετισθούν πολλές παραγγελίες. 1. Για να εµφανίσουµε το παράθυρο προδιαγραφής της συσχέτισης κάνουµε διπλό κλικ στη γραµµή της συσχέτισης. 2. Επιλέγουµε την καρτέλα «Role A Detail» που αφορά την τάξη Order. (Αν τραβήξατε την γραµµή µε άλλη φορά τότε για σας ρόλος A θα είναι ο Customer. Σε αυτή τη περίπτωση επιλέξτε «Role Β Detail» για την τάξη Order). 3. Επιλέγουµε «Cardinality» ) n για τον καθορισµό της πολλαπλότητας σε *. 4. Ακυρώνουµε την επιλογή «Navigable» που είναι εξ ορισµού επιλεγµένη και αφορά την ύπαρξη δυνατότητας πλοήγησης. 5. Στη συνέχεια επιλέγουµε την καρτέλα «Role B Detail» που αφορά την τάξη Customer 6. Από την καρτέλα αυτή θέτουµε την «Cardinality» σε 1..1 (ακριβώς 1). 7. Πατάµε το πλήκτρο «OK» Μετά από τα παραπάνω το διάγραµµα σε ότι αφορά τη συσχέτιση Order/Customer θα πρέπει να έχει ως εξής: - 31 -

Προσθέστε ακολουθώντας την παραπάνω τεχνική τις κατάλληλες πολλαπλότητες στο διάγραµµα έτσι ώστε να είναι τελικά όπως δείχνει η ακόλουθη εικόνα: 3. Άσκηση Έστω η ακόλουθη περιγραφή ενός συστήµατος δανεισµού µιας βιβλιοθήκης. Στο σύστηµα αυτό υπάρχουν αναγνώστες που δανείζονται τίτλους. Κάθε τίτλος µπορεί να είναι είτε περιοδικό είτε βιβλίο. Κάθε τίτλος µπορεί να είναι δανεισµένος ή όχι κάθε φορά. Αν είναι δανεισµένος τότε ο δανεισµός θα αφορά ένα µόνο αναγνώστη της βιβλιοθήκης. Ένας κανόνας της βιβλιοθήκης είναι ότι ένας δανειστής δεν µπορεί να έχει δανειστεί ταυτόχρονα περισσότερα από 7 βιβλία. Επίσης ένας αναγνώστης µπορεί να κάνει κράτηση για το πολύ ένα τίτλο κάθε φορά. Η κράτηση αφορά ένα µόνο αναγνώστη και ένα τίτλο (βιβλίο ή περιοδικό). Το σύστηµα της βιβλιοθήκης ενδιαφέρεται να ξέρει κάθε κράτηση ποιο βιβλίο αφορά, αλλά όχι τις κρατήσεις που έχουν γίνει για κάθε βιβλίο. - 32 -

Σχεδιάστε ένα διάγραµµα τάξεων για το σύστηµα που περιγράφηκε. Ξεκινήστε µε τις τάξεις και τις συσχετίσεις µεταξύ τους. Στη συνέχεια βάλτε αν νοµίζετε ότι υπάρχουν τις δυνατότητες πλοήγησης. Αν έχετε χρόνο τοποθετήστε και κάποιες κατάλληλες ιδιότητες και λειτουργίες στις τάξεις σας. - 33 -

Εργαστήριο 4: Διαγράμματα Αλληλεπίδρασης 1. Παρουσίαση Τα διαγράµµατα αλληλεπίδρασης απεικονίζουν τις αλληλεπιδράσεις µεταξύ των αντικειµένων του συστήµατος. Υπάρχουν δύο ειδών διαγράµµατα αλληλεπίδρασης: τα διαγράµµατα ακολουθίας (sequence diagrams) και τα διαγράµµατα συνεργασίας (collaboration diagrams). Τα διαγράµµατα αλληλεπίδρασης χρησιµοποιούνται για να απεικονίσουν τα διάφορα σενάρια των περιπτώσεων χρήσης του συστήµατος, και αποτελούν τη βάση για την αποκάλυψη των λειτουργιών που απαιτείται να υλοποιήσουν τα αντικείµενα του συστήµατος προκειµένου να φέρουν σε πέρας µια περίπτωση χρήσης. Διαγράμματα Ακολουθίας Στα διαγράµµατα ακολουθίας (sequence) τα αντικείµενα παριστάνονται µε κουτιά ή/και ρόλους τα οποία παρατάσσονται στο χώρο (συνήθως από αριστερά προς τα δεξιά). Τα αντικείµενα ανταλλάσσουν µηνύµατα τα οποία παριστάνονται µε κατευθυνόµενα βέλη των οποίων η φορά δείχνει την κατεύθυνση του µηνύµατος (ποιο αντικείµενο κάνει την κλήση και σε ποιο αντικείµενο γίνεται η κλήση). Ο χρόνος παριστάνεται από πάνω προς τα κάτω στο διάγραµµα. ηλαδή τα µηνύµατα που βρίσκονται πιο πάνω στο διάγραµµα προηγούνται χρονικά αυτών που βρίσκονται πιο χαµηλά. Ένα παράδειγµα ενός διαγράµµατος ακολουθίας είναι το ακόλουθο: - 34 -

Διαγράμματα Συνεργασίας Σε ένα διάγραµµα συνεργασίας (collaboration diagrams) τα αντικείµενα απεικονίζονται µε τις γραµµές συσχετίσεων των τάξεών τους να τα ενώνουν, δηλαδή απεικονίζονται οι στατικές συνδέσεις µεταξύ των αντικειµένων. εν υπάρχει συγκεκριµένη µορφή (τα αντικείµενα µπορούν να είναι σε όποιες θέσεις βολεύει) και για απεικονιστεί η ακολουθία των µηνυµάτων που ανταλλάσσονται χρησιµοποιείται αρίθµηση. Ένα παράδειγµα ενός διαγράµµατος συνεργασίας είναι το ακόλουθο: - 35 -

Το διάγραµµα αυτό αντιστοιχεί στο προηγούµενο διάγραµµα ακολουθίας και µπορείτε εύκολα να δείτε τις αντιστοιχίες µεταξύ των συµβόλων. Βασικά Διαγραμματικά Στοιχεία Τα βασικά διαγραµµατικά στοιχεία των διαγραµµάτων ακολουθίας είναι τα εξής: ΚΑΤΑΣΚΕΥΗ ΠΕΡΙΓΡΑΦΗ ΠΑΡΑ ΕΙΓΜΑ ΣΥΝΤΑΞΗΣ Αντικείμενο Ένα αντικείµενο παριστάνεται µε ένα κουτί στο οποίο αναγράφεται το όνοµα του αντικειµένου, στη συνέχεια µια άνω κάτω τελεία και τέλος το όνοµα της τάξης στην οποία ανήκει το αντικείµενο αν αυτή έχει προσδιοριστεί. Πολλές φορές µπορεί να σχεδιάσουµε µια αλληλεπίδραση µεταξύ αντικειµένων ακριβώς για να καταλάβουµε ποιες είναι οι τάξεις. - 36 -