διαγραμματα κλασεων

Download Report

Transcript διαγραμματα κλασεων

Μεθοδολογίες Προγραμματισμού ΙΙ
Διαγράμματα Κλάσεων
Παναγιώτης Σφέτσος, PhD
http://aetos.it.teithe.gr/~sfetsos/
[email protected]
Παραγγελία προϊόντων μέσω καταλόγου (Order) – 1
Για οποιοδήποτε πλήθος:
- Παραγγελία (Order) από
τον Customer
- Υλοποιείται από τον Employee
- Πληρώνεται μέσω της
PaymentMethod
- Υλοποιείται μέσω μιας Address
που ανήκει σε ένα Customer.
- Αποτελείται από OrderItems
Παραγγελία προϊόντων μέσω καταλόγου (Order) – 2
- H PaymentMethod έχει τρεις
διαφορετικούς τρόπους πληρωμής
που μπορεί να χρησιμοποιεί.
(Γενίκευση – Κληρονομικότητα)
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
3
Παραγγελία προϊόντων μέσω καταλόγου (Order) – 3
Διαγράμματα Στόχοι
Αλληλεπίδρασης και Κλάσεις
Τα μηνύματα καλούν μεθόδους στις κλάσεις.
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
5
Προσανατολισμός
– Πλοήγηση - 1
Στόχοι
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
6
Προσανατολισμός
– Πλοήγηση - 2
Στόχοι
Η κλάση Register έχει το χαρακτηριστικό currentSale που δείχνει
αντικείμενο της Sale.
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
7
Προσανατολισμός
– Πλοήγηση - 3
Στόχοι
Εξαρτήσεις: H Register ξέρει ένα προϊόν από την Catalog, ενώ η Sale
λαμβάνει ένα ProductSpecification στο μήνυμα makeLineItem .
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
8
Δημιουργία μεθόδων από τα
Διαγράμματα Αλληλεπίδρασης - 1
Στόχοι
Από το διάγραμμα enterItem:
1) Μήνυμα enterItem , καλεί μέθοδο στην κλάση Register
2) Μήνυμα getProductDescription στέλνεται στην ProductCatalog για να
πάρουμε ProductDescription
3) Μήνυμα makeLineItem, καλεί μέθοδο στην κλάση Sale
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
9
Δημιουργία μεθόδων από τα
Διαγράμματα Αλληλεπίδρασης - 2
Στόχοι
Καλούμε την ProductCatalog για ProductDescription, και την makeLineItem για
την τρέχουσα πώληση
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
10
Δημιουργία μεθόδων από τα
Διαγράμματα Αλληλεπίδρασης - 3
Στόχοι
Κλήση στην ProductDescription της ProductCatalog για να
πάρουμε ProductDescription
Κλήση στην makeLineItem για της Sale
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
11
Δημιουργία μεθόδων από τα
Διαγράμματα Αλληλεπίδρασης - 4
Στόχοι
Προσέξτε τον δομητή SalesLineItem(). Προέρχεται από το μήνυμα
create(desc, qty) στην SalesLineItem από το διάγραμμα
Αλληλεπίδρασης enterItem (βλέπε προηγ. διαφάνεια).
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
12
Σύνθεση vs. Συσσωμάτωση
Composition
- Aggregation
Στόχοι
Σύνθεση:
1) Το τμήμα (π.χ. Square) πρέπει να ανήκει σε ένα όλο (Board)
(δεν υπάρχουν ελεύθερα Squares)
2) Το τμήμα (π.χ. Square) ανήκει μόνο σε ένα όλο (τρέχον Board)
3) Το όλο είναι υπεύθυνο για την δημιουργία και διαγραφή των
τμημάτων
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
13
Σύνθεση vs. Συσσωμάτωση
Παράδειγμα
Στόχοι
Συσσωμάτωση:
Η Account
χρησιμοποιεί την
AddressBook,
μπορεί να
χρησιμοποιηθεί και
από άλλες κλάσεις.
Σύνθεση:
Η AddressBook
αποτελείται από τις
υποκλάσεις ή
εμπεριέχει τις
υποκλάσεις :
Contact και
ContactGroup.
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
14
Κλάσεις στο παράδειγμα ΑΤΜ – 1/4
Στόχοι
• Ξεχωρίστε τις κλάσεις του Συστήματος και επεξηγήστε τις επιλογές…
• Η κλάση ΑΤΜ χειρίζεται το Startup
και Shutdown για αυτό δεν
χρειάζονται ξεχωριστά αντικείμενα
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
15
Κλάσεις στο παράδειγμα ΑΤΜ – 2/4
Στόχοι
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
16
Κλάσεις στο παράδειγμα ΑΤΜ – 3/4
Στόχοι
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
17
Κλάσεις στο Στόχοι
παράδειγμα ΑΤΜ – 4/4
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
18
class School {
Name name;
String address;
Number phone;
void addStudent() {}
void removeStudent() {}
void getStudent() {}
void getAllStudents() {}
void addDepartment() {}
void removeDepartment() {}
void getDepartment() {}
void getAllDepartments() {}
}
Στόχοι
has 1..*
Member * Student
composed 1..*
has 1..* Department
has 1..*
AssignedTo 1..*
Instructor
assoc 1..* - 1..* Course
assoc 0..* - "0..1
chairperson" Instructor
class Department {
Name name;
void addInstructor() {}
void removeInstructor() {}
void getInstructor() {}
void getAllInstructors() {} }
assoc * Attends *
Course
class Student {
Name name;
Number studentID;}
class Course {
Name name;
Number courseID; }
assoc 1..* Teaches
* Course
class Instructor {
Name name;}
Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ
19